| Current File : /home/mmdealscpanel/yummmdeals.com/vendor_perl.tar |
Time/HiRes.pm 0000644 00000060070 15033552504 0007017 0 ustar 00 package Time::HiRes;
{ use 5.006; }
use strict;
require Exporter;
use XSLoader ();
our @ISA = qw(Exporter);
our @EXPORT = qw( );
# TODO: this list is a superset of the @names in
# Makefile.PL:doConstants(), automate this somehow.
our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval
getitimer setitimer nanosleep clock_gettime clock_getres
clock clock_nanosleep
CLOCKS_PER_SEC
CLOCK_BOOTTIME
CLOCK_HIGHRES
CLOCK_MONOTONIC
CLOCK_MONOTONIC_COARSE
CLOCK_MONOTONIC_FAST
CLOCK_MONOTONIC_PRECISE
CLOCK_MONOTONIC_RAW
CLOCK_MONOTONIC_RAW_APPROX
CLOCK_PROCESS_CPUTIME_ID
CLOCK_PROF
CLOCK_REALTIME
CLOCK_REALTIME_COARSE
CLOCK_REALTIME_FAST
CLOCK_REALTIME_PRECISE
CLOCK_REALTIME_RAW
CLOCK_SECOND
CLOCK_SOFTTIME
CLOCK_THREAD_CPUTIME_ID
CLOCK_TIMEOFDAY
CLOCK_UPTIME
CLOCK_UPTIME_COARSE
CLOCK_UPTIME_FAST
CLOCK_UPTIME_PRECISE
CLOCK_UPTIME_RAW
CLOCK_UPTIME_RAW_APPROX
CLOCK_VIRTUAL
ITIMER_PROF
ITIMER_REAL
ITIMER_REALPROF
ITIMER_VIRTUAL
TIMER_ABSTIME
d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
d_nanosleep d_clock_gettime d_clock_getres
d_clock d_clock_nanosleep d_hires_stat
d_futimens d_utimensat d_hires_utime
stat lstat utime
);
our $VERSION = '1.9758';
our $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
our $AUTOLOAD;
sub AUTOLOAD {
my $constname;
($constname = $AUTOLOAD) =~ s/.*:://;
# print "AUTOLOAD: constname = $constname ($AUTOLOAD)\n";
die "&Time::HiRes::constant not defined" if $constname eq 'constant';
my ($error, $val) = constant($constname);
# print "AUTOLOAD: error = $error, val = $val\n";
if ($error) {
my (undef,$file,$line) = caller;
die "$error at $file line $line.\n";
}
{
no strict 'refs';
*$AUTOLOAD = sub { $val };
}
goto &$AUTOLOAD;
}
sub import {
my $this = shift;
for my $i (@_) {
if (($i eq 'clock_getres' && !&d_clock_getres) ||
($i eq 'clock_gettime' && !&d_clock_gettime) ||
($i eq 'clock_nanosleep' && !&d_clock_nanosleep) ||
($i eq 'clock' && !&d_clock) ||
($i eq 'nanosleep' && !&d_nanosleep) ||
($i eq 'usleep' && !&d_usleep) ||
($i eq 'utime' && !&d_hires_utime) ||
($i eq 'ualarm' && !&d_ualarm)) {
require Carp;
Carp::croak("Time::HiRes::$i(): unimplemented in this platform");
}
}
Time::HiRes->export_to_level(1, $this, @_);
}
XSLoader::load( 'Time::HiRes', $XS_VERSION );
# Preloaded methods go here.
# Autoload methods go after =cut, and are processed by the autosplit program.
1;
__END__
=head1 NAME
Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers
=head1 SYNOPSIS
use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
clock_gettime clock_getres clock_nanosleep clock
stat lstat utime);
usleep ($microseconds);
nanosleep ($nanoseconds);
ualarm ($microseconds);
ualarm ($microseconds, $interval_microseconds);
$t0 = [gettimeofday];
($seconds, $microseconds) = gettimeofday;
$elapsed = tv_interval ( $t0, [$seconds, $microseconds]);
$elapsed = tv_interval ( $t0, [gettimeofday]);
$elapsed = tv_interval ( $t0 );
use Time::HiRes qw ( time alarm sleep );
$now_fractions = time;
sleep ($floating_seconds);
alarm ($floating_seconds);
alarm ($floating_seconds, $floating_interval);
use Time::HiRes qw( setitimer getitimer );
setitimer ($which, $floating_seconds, $floating_interval );
getitimer ($which);
use Time::HiRes qw( clock_gettime clock_getres clock_nanosleep
ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF
ITIMER_REALPROF );
$realtime = clock_gettime(CLOCK_REALTIME);
$resolution = clock_getres(CLOCK_REALTIME);
clock_nanosleep(CLOCK_REALTIME, 1.5e9);
clock_nanosleep(CLOCK_REALTIME, time()*1e9 + 10e9, TIMER_ABSTIME);
my $ticktock = clock();
use Time::HiRes qw( stat lstat );
my @stat = stat("file");
my @stat = stat(FH);
my @stat = lstat("file");
use Time::HiRes qw( utime );
utime $floating_seconds, $floating_seconds, file...;
=head1 DESCRIPTION
The C<Time::HiRes> module implements a Perl interface to the
C<usleep>, C<nanosleep>, C<ualarm>, C<gettimeofday>, and
C<setitimer>/C<getitimer> system calls, in other words, high
resolution time and timers. See the L</EXAMPLES> section below and the
test scripts for usage; see your system documentation for the
description of the underlying C<nanosleep> or C<usleep>, C<ualarm>,
C<gettimeofday>, and C<setitimer>/C<getitimer> calls.
If your system lacks C<gettimeofday()> or an emulation of it you don't
get C<gettimeofday()> or the one-argument form of C<tv_interval()>.
If your system lacks all of C<nanosleep()>, C<usleep()>,
C<select()>, and C<poll>, you don't get C<Time::HiRes::usleep()>,
C<Time::HiRes::nanosleep()>, or C<Time::HiRes::sleep()>.
If your system lacks both C<ualarm()> and C<setitimer()> you don't get
C<Time::HiRes::ualarm()> or C<Time::HiRes::alarm()>.
If you try to import an unimplemented function in the C<use> statement
it will fail at compile time.
If your subsecond sleeping is implemented with C<nanosleep()> instead
of C<usleep()>, you can mix subsecond sleeping with signals since
C<nanosleep()> does not use signals. This, however, is not portable,
and you should first check for the truth value of
C<&Time::HiRes::d_nanosleep> to see whether you have nanosleep, and
then carefully read your C<nanosleep()> C API documentation for any
peculiarities.
If you are using C<nanosleep> for something else than mixing sleeping
with signals, give some thought to whether Perl is the tool you should
be using for work requiring nanosecond accuracies.
Remember that unless you are working on a I<hard realtime> system,
any clocks and timers will be imprecise, especially so if you are working
in a pre-emptive multiuser system. Understand the difference between
I<wallclock time> and process time (in UNIX-like systems the sum of
I<user> and I<system> times). Any attempt to sleep for X seconds will
most probably end up sleeping B<more> than that, but don't be surprised
if you end up sleeping slightly B<less>.
The following functions can be imported from this module.
No functions are exported by default.
=over 4
=item gettimeofday ()
In array context returns a two-element array with the seconds and
microseconds since the epoch. In scalar context returns floating
seconds like C<Time::HiRes::time()> (see below).
=item usleep ( $useconds )
Sleeps for the number of microseconds (millionths of a second)
specified. Returns the number of microseconds actually slept.
Can sleep for more than one second, unlike the C<usleep> system call.
Can also sleep for zero seconds, which often works like a I<thread yield>.
See also C<Time::HiRes::usleep()>, C<Time::HiRes::sleep()>, and
C<Time::HiRes::clock_nanosleep()>.
Do not expect usleep() to be exact down to one microsecond.
=item nanosleep ( $nanoseconds )
Sleeps for the number of nanoseconds (1e9ths of a second) specified.
Returns the number of nanoseconds actually slept (accurate only to
microseconds, the nearest thousand of them). Can sleep for more than
one second. Can also sleep for zero seconds, which often works like
a I<thread yield>. See also C<Time::HiRes::sleep()>,
C<Time::HiRes::usleep()>, and C<Time::HiRes::clock_nanosleep()>.
Do not expect nanosleep() to be exact down to one nanosecond.
Getting even accuracy of one thousand nanoseconds is good.
=item ualarm ( $useconds [, $interval_useconds ] )
Issues a C<ualarm> call; the C<$interval_useconds> is optional and
will be zero if unspecified, resulting in C<alarm>-like behaviour.
Returns the remaining time in the alarm in microseconds, or C<undef>
if an error occurred.
ualarm(0) will cancel an outstanding ualarm().
Note that the interaction between alarms and sleeps is unspecified.
=item tv_interval
tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] )
Returns the floating seconds between the two times, which should have
been returned by C<gettimeofday()>. If the second argument is omitted,
then the current time is used.
=item time ()
Returns a floating seconds since the epoch. This function can be
imported, resulting in a nice drop-in replacement for the C<time>
provided with core Perl; see the L</EXAMPLES> below.
B<NOTE 1>: This higher resolution timer can return values either less
or more than the core C<time()>, depending on whether your platform
rounds the higher resolution timer values up, down, or to the nearest second
to get the core C<time()>, but naturally the difference should be never
more than half a second. See also L</clock_getres>, if available
in your system.
B<NOTE 2>: Since Sunday, September 9th, 2001 at 01:46:40 AM GMT, when
the C<time()> seconds since epoch rolled over to 1_000_000_000, the
default floating point format of Perl and the seconds since epoch have
conspired to produce an apparent bug: if you print the value of
C<Time::HiRes::time()> you seem to be getting only five decimals, not
six as promised (microseconds). Not to worry, the microseconds are
there (assuming your platform supports such granularity in the first
place). What is going on is that the default floating point format of
Perl only outputs 15 digits. In this case that means ten digits
before the decimal separator and five after. To see the microseconds
you can use either C<printf>/C<sprintf> with C<"%.6f">, or the
C<gettimeofday()> function in list context, which will give you the
seconds and microseconds as two separate values.
=item sleep ( $floating_seconds )
Sleeps for the specified amount of seconds. Returns the number of
seconds actually slept (a floating point value). This function can
be imported, resulting in a nice drop-in replacement for the C<sleep>
provided with perl, see the L</EXAMPLES> below.
Note that the interaction between alarms and sleeps is unspecified.
=item alarm ( $floating_seconds [, $interval_floating_seconds ] )
The C<SIGALRM> signal is sent after the specified number of seconds.
Implemented using C<setitimer()> if available, C<ualarm()> if not.
The C<$interval_floating_seconds> argument is optional and will be
zero if unspecified, resulting in C<alarm()>-like behaviour. This
function can be imported, resulting in a nice drop-in replacement for
the C<alarm> provided with perl, see the L</EXAMPLES> below.
Returns the remaining time in the alarm in seconds, or C<undef>
if an error occurred.
B<NOTE 1>: With some combinations of operating systems and Perl
releases C<SIGALRM> restarts C<select()>, instead of interrupting it.
This means that an C<alarm()> followed by a C<select()> may together
take the sum of the times specified for the C<alarm()> and the
C<select()>, not just the time of the C<alarm()>.
Note that the interaction between alarms and sleeps is unspecified.
=item setitimer ( $which, $floating_seconds [, $interval_floating_seconds ] )
Start up an interval timer: after a certain time, a signal ($which) arrives,
and more signals may keep arriving at certain intervals. To disable
an "itimer", use C<$floating_seconds> of zero. If the
C<$interval_floating_seconds> is set to zero (or unspecified), the
timer is disabled B<after> the next delivered signal.
Use of interval timers may interfere with C<alarm()>, C<sleep()>,
and C<usleep()>. In standard-speak the "interaction is unspecified",
which means that I<anything> may happen: it may work, it may not.
In scalar context, the remaining time in the timer is returned.
In list context, both the remaining time and the interval are returned.
There are usually three or four interval timers (signals) available: the
C<$which> can be C<ITIMER_REAL>, C<ITIMER_VIRTUAL>, C<ITIMER_PROF>, or
C<ITIMER_REALPROF>. Note that which ones are available depends: true
UNIX platforms usually have the first three, but only Solaris seems to
have C<ITIMER_REALPROF> (which is used to profile multithreaded programs).
Win32 unfortunately does not have interval timers.
C<ITIMER_REAL> results in C<alarm()>-like behaviour. Time is counted in
I<real time>; that is, wallclock time. C<SIGALRM> is delivered when
the timer expires.
C<ITIMER_VIRTUAL> counts time in (process) I<virtual time>; that is,
only when the process is running. In multiprocessor/user/CPU systems
this may be more or less than real or wallclock time. (This time is
also known as the I<user time>.) C<SIGVTALRM> is delivered when the
timer expires.
C<ITIMER_PROF> counts time when either the process virtual time or when
the operating system is running on behalf of the process (such as I/O).
(This time is also known as the I<system time>.) (The sum of user
time and system time is known as the I<CPU time>.) C<SIGPROF> is
delivered when the timer expires. C<SIGPROF> can interrupt system calls.
The semantics of interval timers for multithreaded programs are
system-specific, and some systems may support additional interval
timers. For example, it is unspecified which thread gets the signals.
See your C<setitimer()> documentation.
=item getitimer ( $which )
Return the remaining time in the interval timer specified by C<$which>.
In scalar context, the remaining time is returned.
In list context, both the remaining time and the interval are returned.
The interval is always what you put in using C<setitimer()>.
=item clock_gettime ( $which )
Return as seconds the current value of the POSIX high resolution timer
specified by C<$which>. All implementations that support POSIX high
resolution timers are supposed to support at least the C<$which> value
of C<CLOCK_REALTIME>, which is supposed to return results close to the
results of C<gettimeofday>, or the number of seconds since 00:00:00:00
January 1, 1970 Greenwich Mean Time (GMT). Do not assume that
CLOCK_REALTIME is zero, it might be one, or something else.
Another potentially useful (but not available everywhere) value is
C<CLOCK_MONOTONIC>, which guarantees a monotonically increasing time
value (unlike time() or gettimeofday(), which can be adjusted).
See your system documentation for other possibly supported values.
=item clock_getres ( $which )
Return as seconds the resolution of the POSIX high resolution timer
specified by C<$which>. All implementations that support POSIX high
resolution timers are supposed to support at least the C<$which> value
of C<CLOCK_REALTIME>, see L</clock_gettime>.
B<NOTE>: the resolution returned may be highly optimistic. Even if
the resolution is high (a small number), all it means is that you'll
be able to specify the arguments to clock_gettime() and clock_nanosleep()
with that resolution. The system might not actually be able to measure
events at that resolution, and the various overheads and the overall system
load are certain to affect any timings.
=item clock_nanosleep ( $which, $nanoseconds, $flags = 0)
Sleeps for the number of nanoseconds (1e9ths of a second) specified.
Returns the number of nanoseconds actually slept. The $which is the
"clock id", as with clock_gettime() and clock_getres(). The flags
default to zero but C<TIMER_ABSTIME> can specified (must be exported
explicitly) which means that C<$nanoseconds> is not a time interval
(as is the default) but instead an absolute time. Can sleep for more
than one second. Can also sleep for zero seconds, which often works
like a I<thread yield>. See also C<Time::HiRes::sleep()>,
C<Time::HiRes::usleep()>, and C<Time::HiRes::nanosleep()>.
Do not expect clock_nanosleep() to be exact down to one nanosecond.
Getting even accuracy of one thousand nanoseconds is good.
=item clock()
Return as seconds the I<process time> (user + system time) spent by
the process since the first call to clock() (the definition is B<not>
"since the start of the process", though if you are lucky these times
may be quite close to each other, depending on the system). What this
means is that you probably need to store the result of your first call
to clock(), and subtract that value from the following results of clock().
The time returned also includes the process times of the terminated
child processes for which wait() has been executed. This value is
somewhat like the second value returned by the times() of core Perl,
but not necessarily identical. Note that due to backward
compatibility limitations the returned value may wrap around at about
2147 seconds or at about 36 minutes.
=item stat
=item stat FH
=item stat EXPR
=item lstat
=item lstat FH
=item lstat EXPR
As L<perlfunc/stat> or L<perlfunc/lstat>
but with the access/modify/change file timestamps
in subsecond resolution, if the operating system and the filesystem
both support such timestamps. To override the standard stat():
use Time::HiRes qw(stat);
Test for the value of &Time::HiRes::d_hires_stat to find out whether
the operating system supports subsecond file timestamps: a value
larger than zero means yes. There are unfortunately no easy
ways to find out whether the filesystem supports such timestamps.
UNIX filesystems often do; NTFS does; FAT doesn't (FAT timestamp
granularity is B<two> seconds).
A zero return value of &Time::HiRes::d_hires_stat means that
Time::HiRes::stat is a no-op passthrough for CORE::stat()
(and likewise for lstat),
and therefore the timestamps will stay integers. The same
thing will happen if the filesystem does not do subsecond timestamps,
even if the &Time::HiRes::d_hires_stat is non-zero.
In any case do not expect nanosecond resolution, or even a microsecond
resolution. Also note that the modify/access timestamps might have
different resolutions, and that they need not be synchronized, e.g.
if the operations are
write
stat # t1
read
stat # t2
the access time stamp from t2 need not be greater-than the modify
time stamp from t1: it may be equal or I<less>.
=item utime LIST
As L<perlfunc/utime>
but with the ability to set the access/modify file timestamps
in subsecond resolution, if the operating system and the filesystem,
and the mount options of the filesystem, all support such timestamps.
To override the standard utime():
use Time::HiRes qw(utime);
Test for the value of &Time::HiRes::d_hires_utime to find out whether
the operating system supports setting subsecond file timestamps.
As with CORE::utime(), passing undef as both the atime and mtime will
call the syscall with a NULL argument.
The actual achievable subsecond resolution depends on the combination
of the operating system and the filesystem.
Modifying the timestamps may not be possible at all: for example, the
C<noatime> filesystem mount option may prohibit you from changing the
access time timestamp.
Returns the number of files successfully changed.
=back
=head1 EXAMPLES
use Time::HiRes qw(usleep ualarm gettimeofday tv_interval);
$microseconds = 750_000;
usleep($microseconds);
# signal alarm in 2.5s & every .1s thereafter
ualarm(2_500_000, 100_000);
# cancel that ualarm
ualarm(0);
# get seconds and microseconds since the epoch
($s, $usec) = gettimeofday();
# measure elapsed time
# (could also do by subtracting 2 gettimeofday return values)
$t0 = [gettimeofday];
# do bunch of stuff here
$t1 = [gettimeofday];
# do more stuff here
$t0_t1 = tv_interval $t0, $t1;
$elapsed = tv_interval ($t0, [gettimeofday]);
$elapsed = tv_interval ($t0); # equivalent code
#
# replacements for time, alarm and sleep that know about
# floating seconds
#
use Time::HiRes;
$now_fractions = Time::HiRes::time;
Time::HiRes::sleep (2.5);
Time::HiRes::alarm (10.6666666);
use Time::HiRes qw ( time alarm sleep );
$now_fractions = time;
sleep (2.5);
alarm (10.6666666);
# Arm an interval timer to go off first at 10 seconds and
# after that every 2.5 seconds, in process virtual time
use Time::HiRes qw ( setitimer ITIMER_VIRTUAL time );
$SIG{VTALRM} = sub { print time, "\n" };
setitimer(ITIMER_VIRTUAL, 10, 2.5);
use Time::HiRes qw( clock_gettime clock_getres CLOCK_REALTIME );
# Read the POSIX high resolution timer.
my $high = clock_gettime(CLOCK_REALTIME);
# But how accurate we can be, really?
my $reso = clock_getres(CLOCK_REALTIME);
use Time::HiRes qw( clock_nanosleep TIMER_ABSTIME );
clock_nanosleep(CLOCK_REALTIME, 1e6);
clock_nanosleep(CLOCK_REALTIME, 2e9, TIMER_ABSTIME);
use Time::HiRes qw( clock );
my $clock0 = clock();
... # Do something.
my $clock1 = clock();
my $clockd = $clock1 - $clock0;
use Time::HiRes qw( stat );
my ($atime, $mtime, $ctime) = (stat("istics"))[8, 9, 10];
=head1 C API
In addition to the perl API described above, a C API is available for
extension writers. The following C functions are available in the
modglobal hash:
name C prototype
--------------- ----------------------
Time::NVtime NV (*)()
Time::U2time void (*)(pTHX_ UV ret[2])
Both functions return equivalent information (like C<gettimeofday>)
but with different representations. The names C<NVtime> and C<U2time>
were selected mainly because they are operating system independent.
(C<gettimeofday> is Unix-centric, though some platforms like Win32 and
VMS have emulations for it.)
Here is an example of using C<NVtime> from C:
NV (*myNVtime)(); /* Returns -1 on failure. */
SV **svp = hv_fetchs(PL_modglobal, "Time::NVtime", 0);
if (!svp) croak("Time::HiRes is required");
if (!SvIOK(*svp)) croak("Time::NVtime isn't a function pointer");
myNVtime = INT2PTR(NV(*)(), SvIV(*svp));
printf("The current time is: %" NVff "\n", (*myNVtime)());
=head1 DIAGNOSTICS
=head2 useconds or interval more than ...
In ualarm() you tried to use number of microseconds or interval (also
in microseconds) more than 1_000_000 and setitimer() is not available
in your system to emulate that case.
=head2 negative time not invented yet
You tried to use a negative time argument.
=head2 internal error: useconds < 0 (unsigned ... signed ...)
Something went horribly wrong-- the number of microseconds that cannot
become negative just became negative. Maybe your compiler is broken?
=head2 useconds or uinterval equal to or more than 1000000
In some platforms it is not possible to get an alarm with subsecond
resolution and later than one second.
=head2 unimplemented in this platform
Some calls simply aren't available, real or emulated, on every platform.
=head1 CAVEATS
Notice that the core C<time()> maybe rounding rather than truncating.
What this means is that the core C<time()> may be reporting the time
as one second later than C<gettimeofday()> and C<Time::HiRes::time()>.
Adjusting the system clock (either manually or by services like ntp)
may cause problems, especially for long running programs that assume
a monotonously increasing time (note that all platforms do not adjust
time as gracefully as UNIX ntp does). For example in Win32 (and derived
platforms like Cygwin and MinGW) the Time::HiRes::time() may temporarily
drift off from the system clock (and the original time()) by up to 0.5
seconds. Time::HiRes will notice this eventually and recalibrate.
Note that since Time::HiRes 1.77 the clock_gettime(CLOCK_MONOTONIC)
might help in this (in case your system supports CLOCK_MONOTONIC).
Some systems have APIs but not implementations: for example QNX and Haiku
have the interval timer APIs but not the functionality.
In pre-Sierra macOS (pre-10.12, OS X) clock_getres(), clock_gettime()
and clock_nanosleep() are emulated using the Mach timers; as a side
effect of being emulated the CLOCK_REALTIME and CLOCK_MONOTONIC are
the same timer.
gnukfreebsd seems to have non-functional futimens() and utimensat()
(at least as of 10.1): therefore the hires utime() does not work.
=head1 SEE ALSO
Perl modules L<BSD::Resource>, L<Time::TAI64>.
Your system documentation for C<clock>, C<clock_gettime>,
C<clock_getres>, C<clock_nanosleep>, C<clock_settime>, C<getitimer>,
C<gettimeofday>, C<setitimer>, C<sleep>, C<stat>, C<ualarm>.
=head1 AUTHORS
D. Wegscheid <wegscd@whirlpool.com>
R. Schertler <roderick@argon.org>
J. Hietaniemi <jhi@iki.fi>
G. Aas <gisle@aas.no>
=head1 COPYRIGHT AND LICENSE
Copyright (c) 1996-2002 Douglas E. Wegscheid. All rights reserved.
Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Jarkko Hietaniemi.
All rights reserved.
Copyright (C) 2011, 2012, 2013 Andrew Main (Zefram) <zefram@fysh.org>
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
IO/Tty.pm 0000644 00000017640 15033552504 0006203 0 ustar 00 # Documentation at the __END__
# -*-cperl-*-
package IO::Tty;
use IO::Handle;
use IO::File;
use IO::Tty::Constant;
use Carp;
require POSIX;
require DynaLoader;
use vars qw(@ISA $VERSION $XS_VERSION $CONFIG $DEBUG);
$VERSION = '1.12';
$XS_VERSION = "1.12";
@ISA = qw(IO::Handle);
eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty };
push @ISA, "IO::Stty" if (not $@); # if IO::Stty is installed
BOOT_XS: {
# If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO
require DynaLoader;
# DynaLoader calls dl_load_flags as a static method.
*dl_load_flags = DynaLoader->can('dl_load_flags');
do {
defined(&bootstrap)
? \&bootstrap
: \&DynaLoader::bootstrap
}->(__PACKAGE__);
}
sub import {
IO::Tty::Constant->export_to_level(1, @_);
}
sub open {
my($tty,$dev,$mode) = @_;
IO::File::open($tty,$dev,$mode) or
return undef;
$tty->autoflush;
1;
}
sub clone_winsize_from {
my ($self, $fh) = @_;
croak "Given filehandle is not a tty in clone_winsize_from, called"
if not POSIX::isatty($fh);
return 1 if not POSIX::isatty($self); # ignored for master ptys
my $winsize = " "x1024; # preallocate memory
ioctl($fh, &IO::Tty::Constant::TIOCGWINSZ, $winsize)
and ioctl($self, &IO::Tty::Constant::TIOCSWINSZ, $winsize)
and return 1;
warn "clone_winsize_from: error: $!" if $^W;
return undef;
}
# ioctl() doesn't tell us how long the structure is, so we'll have to trim it
# after TIOCGWINSZ
my $SIZEOF_WINSIZE = length IO::Tty::pack_winsize(0,0,0,0);
sub get_winsize {
my $self = shift;
ioctl($self, IO::Tty::Constant::TIOCGWINSZ(), my $winsize)
or croak "Cannot TIOCGWINSZ - $!";
substr($winsize, $SIZEOF_WINSIZE) = "";
return IO::Tty::unpack_winsize($winsize);
}
sub set_winsize {
my $self = shift;
my $winsize = IO::Tty::pack_winsize(@_);
ioctl($self, IO::Tty::Constant::TIOCSWINSZ(), $winsize)
or croak "Cannot TIOCSWINSZ - $!";
}
sub set_raw($) {
require POSIX;
my $self = shift;
return 1 if not POSIX::isatty($self);
my $ttyno = fileno($self);
my $termios = new POSIX::Termios;
unless ($termios) {
warn "set_raw: new POSIX::Termios failed: $!";
return undef;
}
unless ($termios->getattr($ttyno)) {
warn "set_raw: getattr($ttyno) failed: $!";
return undef;
}
$termios->setiflag(0);
$termios->setoflag(0);
$termios->setlflag(0);
$termios->setcc(&POSIX::VMIN, 1);
$termios->setcc(&POSIX::VTIME, 0);
unless ($termios->setattr($ttyno, &POSIX::TCSANOW)) {
warn "set_raw: setattr($ttyno) failed: $!";
return undef;
}
return 1;
}
1;
__END__
=head1 NAME
IO::Tty - Low-level allocate a pseudo-Tty, import constants.
=head1 VERSION
1.12
=head1 SYNOPSIS
use IO::Tty qw(TIOCNOTTY);
...
# use only to import constants, see IO::Pty to create ptys.
=head1 DESCRIPTION
C<IO::Tty> is used internally by C<IO::Pty> to create a pseudo-tty.
You wouldn't want to use it directly except to import constants, use
C<IO::Pty>. For a list of importable constants, see
L<IO::Tty::Constant>.
Windows is now supported, but ONLY under the Cygwin
environment, see L<http://sources.redhat.com/cygwin/>.
Please note that pty creation is very system-dependend. From my
experience, any modern POSIX system should be fine. Find below a list
of systems that C<IO::Tty> should work on. A more detailed table
(which is slowly getting out-of-date) is available from the project
pages document manager at SourceForge
L<http://sourceforge.net/projects/expectperl/>.
If you have problems on your system and your system is listed in the
"verified" list, you probably have some non-standard setup, e.g. you
compiled your Linux-kernel yourself and disabled ptys (bummer!).
Please ask your friendly sysadmin for help.
If your system is not listed, unpack the latest version of C<IO::Tty>,
do a C<'perl Makefile.PL; make; make test; uname -a'> and send me
(F<RGiersig@cpan.org>) the results and I'll see what I can deduce from
that. There are chances that it will work right out-of-the-box...
If it's working on your system, please send me a short note with
details (version number, distribution, etc. 'uname -a' and 'perl -V'
is a good start; also, the output from "perl Makefile.PL" contains a
lot of interesting info, so please include that as well) so I can get
an overview. Thanks!
=head1 VERIFIED SYSTEMS, KNOWN ISSUES
This is a list of systems that C<IO::Tty> seems to work on ('make
test' passes) with comments about "features":
=over 4
=item * AIX 4.3
Returns EIO instead of EOF when the slave is closed. Benign.
=item * AIX 5.x
=item * FreeBSD 4.4
EOF on the slave tty is not reported back to the master.
=item * OpenBSD 2.8
The ioctl TIOCSCTTY sometimes fails. This is also known in
Tcl/Expect, see http://expect.nist.gov/FAQ.html
EOF on the slave tty is not reported back to the master.
=item * Darwin 7.9.0
=item * HPUX 10.20 & 11.00
EOF on the slave tty is not reported back to the master.
=item * IRIX 6.5
=item * Linux 2.2.x & 2.4.x
Returns EIO instead of EOF when the slave is closed. Benign.
=item * OSF 4.0
EOF on the slave tty is not reported back to the master.
=item * Solaris 8, 2.7, 2.6
Has the "feature" of returning EOF just once?!
EOF on the slave tty is not reported back to the master.
=item * Windows NT/2k/XP (under Cygwin)
When you send (print) a too long line (>160 chars) to a non-raw pty,
the call just hangs forever and even alarm() cannot get you out.
Don't complain to me...
EOF on the slave tty is not reported back to the master.
=item * z/OS
=back
The following systems have not been verified yet for this version, but
a previous version worked on them:
=over 4
=item * SCO Unix
=item * NetBSD
probably the same as the other *BSDs...
=back
If you have additions to these lists, please mail them to
E<lt>F<RGiersig@cpan.org>E<gt>.
=head1 SEE ALSO
L<IO::Pty>, L<IO::Tty::Constant>
=head1 MAILING LISTS
As this module is mainly used by Expect, support for it is available
via the two Expect mailing lists, expectperl-announce and
expectperl-discuss, at
http://lists.sourceforge.net/lists/listinfo/expectperl-announce
and
http://lists.sourceforge.net/lists/listinfo/expectperl-discuss
=head1 AUTHORS
Originally by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>, based on the
Ptty module by Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>.
Now maintained and heavily rewritten by Roland Giersig
E<lt>F<RGiersig@cpan.org>E<gt>.
Contains copyrighted stuff from openssh v3.0p1, authored by Tatu
Ylonen <ylo@cs.hut.fi>, Markus Friedl and Todd C. Miller
<Todd.Miller@courtesan.com>. I also got a lot of inspiration from
the pty code in Xemacs.
=head1 COPYRIGHT
Now all code is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
Nevertheless the above AUTHORS retain their copyrights to the various
parts and want to receive credit if their source code is used.
See the source for details.
=head1 DISCLAIMER
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
In other words: Use at your own risk. Provided as is. Your mileage
may vary. Read the source, Luke!
And finally, just to be sure:
Any Use of This Product, in Any Manner Whatsoever, Will Increase the
Amount of Disorder in the Universe. Although No Liability Is Implied
Herein, the Consumer Is Warned That This Process Will Ultimately Lead
to the Heat Death of the Universe.
=cut
IO/Tty/Constant.pm 0000644 00000016020 15033552504 0007763 0 ustar 00
package IO::Tty::Constant;
use vars qw(@ISA @EXPORT_OK);
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(B0 B110 B115200 B1200 B134 B150 B153600 B1800 B19200 B200 B230400 B2400 B300 B307200 B38400 B460800 B4800 B50 B57600 B600 B75 B76800 B9600 BRKINT BS0 BS1 BSDLY CBAUD CBAUDEXT CBRK CCTS_OFLOW CDEL CDSUSP CEOF CEOL CEOL2 CEOT CERASE CESC CFLUSH CIBAUD CIBAUDEXT CINTR CKILL CLNEXT CLOCAL CNSWTCH CNUL CQUIT CR0 CR1 CR2 CR3 CRDLY CREAD CRPRNT CRTSCTS CRTSXOFF CRTS_IFLOW CS5 CS6 CS7 CS8 CSIZE CSTART CSTOP CSTOPB CSUSP CSWTCH CWERASE DEFECHO DIOC DIOCGETP DIOCSETP DOSMODE ECHO ECHOCTL ECHOE ECHOK ECHOKE ECHONL ECHOPRT EXTA EXTB FF0 FF1 FFDLY FIORDCHK FLUSHO HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR IMAXBEL INLCR INPCK ISIG ISTRIP IUCLC IXANY IXOFF IXON KBENABLED LDCHG LDCLOSE LDDMAP LDEMAP LDGETT LDGMAP LDIOC LDNMAP LDOPEN LDSETT LDSMAP LOBLK NCCS NL0 NL1 NLDLY NOFLSH OCRNL OFDEL OFILL OLCUC ONLCR ONLRET ONOCR OPOST PAGEOUT PARENB PAREXT PARMRK PARODD PENDIN RCV1EN RTS_TOG TAB0 TAB1 TAB2 TAB3 TABDLY TCDSET TCFLSH TCGETA TCGETS TCIFLUSH TCIOFF TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW TCSBRK TCSETA TCSETAF TCSETAW TCSETCTTY TCSETS TCSETSF TCSETSW TCXONC TERM_D40 TERM_D42 TERM_H45 TERM_NONE TERM_TEC TERM_TEX TERM_V10 TERM_V61 TIOCCBRK TIOCCDTR TIOCCONS TIOCEXCL TIOCFLUSH TIOCGETD TIOCGETC TIOCGETP TIOCGLTC TIOCSETC TIOCSETN TIOCSETP TIOCSLTC TIOCGPGRP TIOCGSID TIOCGSOFTCAR TIOCGWINSZ TIOCHPCL TIOCKBOF TIOCKBON TIOCLBIC TIOCLBIS TIOCLGET TIOCLSET TIOCMBIC TIOCMBIS TIOCMGET TIOCMSET TIOCM_CAR TIOCM_CD TIOCM_CTS TIOCM_DSR TIOCM_DTR TIOCM_LE TIOCM_RI TIOCM_RNG TIOCM_RTS TIOCM_SR TIOCM_ST TIOCNOTTY TIOCNXCL TIOCOUTQ TIOCREMOTE TIOCSBRK TIOCSCTTY TIOCSDTR TIOCSETD TIOCSIGNAL TIOCSPGRP TIOCSSID TIOCSSOFTCAR TIOCSTART TIOCSTI TIOCSTOP TIOCSWINSZ TM_ANL TM_CECHO TM_CINVIS TM_LCF TM_NONE TM_SET TM_SNL TOSTOP VCEOF VCEOL VDISCARD VDSUSP VEOF VEOL VEOL2 VERASE VINTR VKILL VLNEXT VMIN VQUIT VREPRINT VSTART VSTOP VSUSP VSWTCH VT0 VT1 VTDLY VTIME VWERASE WRAP XCASE XCLUDE XMT1EN XTABS);
__END__
=head1 NAME
IO::Tty::Constant - Terminal Constants (autogenerated)
=head1 SYNOPSIS
use IO::Tty::Constant qw(TIOCNOTTY);
...
=head1 DESCRIPTION
This package defines constants usually found in <termio.h> or
<termios.h> (and their #include hierarchy). Find below an
autogenerated alphabetic list of all known constants and whether they
are defined on your system (prefixed with '+') and have compilation
problems ('o'). Undefined or problematic constants are set to 'undef'.
=head1 DEFINED CONSTANTS
=item +
B0
=item +
B110
=item +
B115200
=item +
B1200
=item +
B134
=item +
B150
=item -
B153600
=item +
B1800
=item +
B19200
=item +
B200
=item +
B230400
=item +
B2400
=item +
B300
=item -
B307200
=item +
B38400
=item +
B460800
=item +
B4800
=item +
B50
=item +
B57600
=item +
B600
=item +
B75
=item -
B76800
=item +
B9600
=item +
BRKINT
=item +
BS0
=item +
BS1
=item +
BSDLY
=item +
CBAUD
=item -
CBAUDEXT
=item +
CBRK
=item -
CCTS_OFLOW
=item -
CDEL
=item +
CDSUSP
=item +
CEOF
=item +
CEOL
=item -
CEOL2
=item +
CEOT
=item +
CERASE
=item -
CESC
=item +
CFLUSH
=item +
CIBAUD
=item -
CIBAUDEXT
=item +
CINTR
=item +
CKILL
=item +
CLNEXT
=item +
CLOCAL
=item -
CNSWTCH
=item -
CNUL
=item +
CQUIT
=item +
CR0
=item +
CR1
=item +
CR2
=item +
CR3
=item +
CRDLY
=item +
CREAD
=item +
CRPRNT
=item +
CRTSCTS
=item -
CRTSXOFF
=item -
CRTS_IFLOW
=item +
CS5
=item +
CS6
=item +
CS7
=item +
CS8
=item +
CSIZE
=item +
CSTART
=item +
CSTOP
=item +
CSTOPB
=item +
CSUSP
=item -
CSWTCH
=item +
CWERASE
=item -
DEFECHO
=item -
DIOC
=item -
DIOCGETP
=item -
DIOCSETP
=item -
DOSMODE
=item +
ECHO
=item +
ECHOCTL
=item +
ECHOE
=item +
ECHOK
=item +
ECHOKE
=item +
ECHONL
=item +
ECHOPRT
=item +
EXTA
=item +
EXTB
=item +
FF0
=item +
FF1
=item +
FFDLY
=item -
FIORDCHK
=item +
FLUSHO
=item +
HUPCL
=item +
ICANON
=item +
ICRNL
=item +
IEXTEN
=item +
IGNBRK
=item +
IGNCR
=item +
IGNPAR
=item +
IMAXBEL
=item +
INLCR
=item +
INPCK
=item +
ISIG
=item +
ISTRIP
=item +
IUCLC
=item +
IXANY
=item +
IXOFF
=item +
IXON
=item -
KBENABLED
=item -
LDCHG
=item -
LDCLOSE
=item -
LDDMAP
=item -
LDEMAP
=item -
LDGETT
=item -
LDGMAP
=item -
LDIOC
=item -
LDNMAP
=item -
LDOPEN
=item -
LDSETT
=item -
LDSMAP
=item -
LOBLK
=item +
NCCS
=item +
NL0
=item +
NL1
=item +
NLDLY
=item +
NOFLSH
=item +
OCRNL
=item +
OFDEL
=item +
OFILL
=item +
OLCUC
=item +
ONLCR
=item +
ONLRET
=item +
ONOCR
=item +
OPOST
=item -
PAGEOUT
=item +
PARENB
=item -
PAREXT
=item +
PARMRK
=item +
PARODD
=item +
PENDIN
=item -
RCV1EN
=item -
RTS_TOG
=item +
TAB0
=item +
TAB1
=item +
TAB2
=item +
TAB3
=item +
TABDLY
=item -
TCDSET
=item +
TCFLSH
=item +
TCGETA
=item +
TCGETS
=item +
TCIFLUSH
=item +
TCIOFF
=item +
TCIOFLUSH
=item +
TCION
=item +
TCOFLUSH
=item +
TCOOFF
=item +
TCOON
=item +
TCSADRAIN
=item +
TCSAFLUSH
=item +
TCSANOW
=item +
TCSBRK
=item +
TCSETA
=item +
TCSETAF
=item +
TCSETAW
=item -
TCSETCTTY
=item +
TCSETS
=item +
TCSETSF
=item +
TCSETSW
=item +
TCXONC
=item -
TERM_D40
=item -
TERM_D42
=item -
TERM_H45
=item -
TERM_NONE
=item -
TERM_TEC
=item -
TERM_TEX
=item -
TERM_V10
=item -
TERM_V61
=item +
TIOCCBRK
=item -
TIOCCDTR
=item +
TIOCCONS
=item +
TIOCEXCL
=item -
TIOCFLUSH
=item +
TIOCGETD
=item -
TIOCGETC
=item -
TIOCGETP
=item -
TIOCGLTC
=item -
TIOCSETC
=item -
TIOCSETN
=item -
TIOCSETP
=item -
TIOCSLTC
=item +
TIOCGPGRP
=item +
TIOCGSID
=item +
TIOCGSOFTCAR
=item +
TIOCGWINSZ
=item -
TIOCHPCL
=item -
TIOCKBOF
=item -
TIOCKBON
=item -
TIOCLBIC
=item -
TIOCLBIS
=item -
TIOCLGET
=item -
TIOCLSET
=item +
TIOCMBIC
=item +
TIOCMBIS
=item +
TIOCMGET
=item +
TIOCMSET
=item +
TIOCM_CAR
=item +
TIOCM_CD
=item +
TIOCM_CTS
=item +
TIOCM_DSR
=item +
TIOCM_DTR
=item +
TIOCM_LE
=item +
TIOCM_RI
=item +
TIOCM_RNG
=item +
TIOCM_RTS
=item +
TIOCM_SR
=item +
TIOCM_ST
=item +
TIOCNOTTY
=item +
TIOCNXCL
=item +
TIOCOUTQ
=item -
TIOCREMOTE
=item +
TIOCSBRK
=item +
TIOCSCTTY
=item -
TIOCSDTR
=item +
TIOCSETD
=item -
TIOCSIGNAL
=item +
TIOCSPGRP
=item -
TIOCSSID
=item +
TIOCSSOFTCAR
=item -
TIOCSTART
=item +
TIOCSTI
=item -
TIOCSTOP
=item +
TIOCSWINSZ
=item -
TM_ANL
=item -
TM_CECHO
=item -
TM_CINVIS
=item -
TM_LCF
=item -
TM_NONE
=item -
TM_SET
=item -
TM_SNL
=item +
TOSTOP
=item -
VCEOF
=item -
VCEOL
=item +
VDISCARD
=item -
VDSUSP
=item +
VEOF
=item +
VEOL
=item +
VEOL2
=item +
VERASE
=item +
VINTR
=item +
VKILL
=item +
VLNEXT
=item +
VMIN
=item +
VQUIT
=item +
VREPRINT
=item +
VSTART
=item +
VSTOP
=item +
VSUSP
=item -
VSWTCH
=item +
VT0
=item +
VT1
=item +
VTDLY
=item +
VTIME
=item +
VWERASE
=item -
WRAP
=item +
XCASE
=item -
XCLUDE
=item -
XMT1EN
=item +
XTABS
=head1 FOR MORE INFO SEE
L<IO::Tty>
=cut
IO/Pty.pm 0000644 00000021632 15033552504 0006173 0 ustar 00 # Documentation at the __END__
package IO::Pty;
use strict;
use Carp;
use IO::Tty qw(TIOCSCTTY TCSETCTTY TIOCNOTTY);
use IO::File;
require POSIX;
use vars qw(@ISA $VERSION);
$VERSION = '1.12'; # keep same as in Tty.pm
@ISA = qw(IO::Handle);
eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty };
push @ISA, "IO::Stty" if (not $@); # if IO::Stty is installed
sub new {
my ($class) = $_[0] || "IO::Pty";
$class = ref($class) if ref($class);
@_ <= 1 or croak 'usage: new $class';
my ($ptyfd, $ttyfd, $ttyname) = pty_allocate();
croak "Cannot open a pty" if not defined $ptyfd;
my $pty = $class->SUPER::new_from_fd($ptyfd, "r+");
croak "Cannot create a new $class from fd $ptyfd: $!" if not $pty;
$pty->autoflush(1);
bless $pty => $class;
my $slave = IO::Tty->new_from_fd($ttyfd, "r+");
croak "Cannot create a new IO::Tty from fd $ttyfd: $!" if not $slave;
$slave->autoflush(1);
${*$pty}{'io_pty_slave'} = $slave;
${*$pty}{'io_pty_ttyname'} = $ttyname;
${*$slave}{'io_tty_ttyname'} = $ttyname;
return $pty;
}
sub ttyname {
@_ == 1 or croak 'usage: $pty->ttyname();';
my $pty = shift;
${*$pty}{'io_pty_ttyname'};
}
sub close_slave {
@_ == 1 or croak 'usage: $pty->close_slave();';
my $master = shift;
if (exists ${*$master}{'io_pty_slave'}) {
close ${*$master}{'io_pty_slave'};
delete ${*$master}{'io_pty_slave'};
}
}
sub slave {
@_ == 1 or croak 'usage: $pty->slave();';
my $master = shift;
if (exists ${*$master}{'io_pty_slave'}) {
return ${*$master}{'io_pty_slave'};
}
my $tty = ${*$master}{'io_pty_ttyname'};
my $slave = new IO::Tty;
$slave->open($tty, O_RDWR | O_NOCTTY) ||
croak "Cannot open slave $tty: $!";
return $slave;
}
sub make_slave_controlling_terminal {
@_ == 1 or croak 'usage: $pty->make_slave_controlling_terminal();';
my $self = shift;
local(*DEVTTY);
# loose controlling terminal explicitly
if (defined TIOCNOTTY) {
if (open (\*DEVTTY, "/dev/tty")) {
ioctl( \*DEVTTY, TIOCNOTTY, 0 );
close \*DEVTTY;
}
}
# Create a new 'session', lose controlling terminal.
if (not POSIX::setsid()) {
warn "setsid() failed, strange behavior may result: $!\r\n" if $^W;
}
if (open(\*DEVTTY, "/dev/tty")) {
warn "Could not disconnect from controlling terminal?!\n" if $^W;
close \*DEVTTY;
}
# now open slave, this should set it as controlling tty on some systems
my $ttyname = ${*$self}{'io_pty_ttyname'};
my $slv = new IO::Tty;
$slv->open($ttyname, O_RDWR)
or croak "Cannot open slave $ttyname: $!";
if (not exists ${*$self}{'io_pty_slave'}) {
${*$self}{'io_pty_slave'} = $slv;
} else {
$slv->close;
}
# Acquire a controlling terminal if this doesn't happen automatically
if (not open(\*DEVTTY, "/dev/tty")) {
if (defined TIOCSCTTY) {
if (not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 )) {
warn "warning: TIOCSCTTY failed, slave might not be set as controlling terminal: $!" if $^W;
}
} elsif (defined TCSETCTTY) {
if (not defined ioctl( ${*$self}{'io_pty_slave'}, TCSETCTTY, 0 )) {
warn "warning: TCSETCTTY failed, slave might not be set as controlling terminal: $!" if $^W;
}
} else {
warn "warning: You have neither TIOCSCTTY nor TCSETCTTY on your system\n" if $^W;
return 0;
}
}
if (not open(\*DEVTTY, "/dev/tty")) {
warn "Error: could not connect pty as controlling terminal!\n";
return undef;
} else {
close \*DEVTTY;
}
return 1;
}
*clone_winsize_from = \&IO::Tty::clone_winsize_from;
*get_winsize = \&IO::Tty::get_winsize;
*set_winsize = \&IO::Tty::set_winsize;
*set_raw = \&IO::Tty::set_raw;
1;
__END__
=head1 NAME
IO::Pty - Pseudo TTY object class
=head1 VERSION
1.12
=head1 SYNOPSIS
use IO::Pty;
$pty = new IO::Pty;
$slave = $pty->slave;
foreach $val (1..10) {
print $pty "$val\n";
$_ = <$slave>;
print "$_";
}
close($slave);
=head1 DESCRIPTION
C<IO::Pty> provides an interface to allow the creation of a pseudo tty.
C<IO::Pty> inherits from C<IO::Handle> and so provide all the methods
defined by the C<IO::Handle> package.
Please note that pty creation is very system-dependend. If you have
problems, see L<IO::Tty> for help.
=head1 CONSTRUCTOR
=over 3
=item new
The C<new> constructor takes no arguments and returns a new file
object which is the master side of the pseudo tty.
=back
=head1 METHODS
=over 4
=item ttyname()
Returns the name of the slave pseudo tty. On UNIX machines this will
be the pathname of the device. Use this name for informational
purpose only, to get a slave filehandle, use slave().
=item slave()
The C<slave> method will return the slave filehandle of the given
master pty, opening it anew if necessary. If IO::Stty is installed,
you can then call C<$slave-E<gt>stty()> to modify the terminal settings.
=item close_slave()
The slave filehandle will be closed and destroyed. This is necessary
in the parent after forking to get rid of the open filehandle,
otherwise the parent will not notice if the child exits. Subsequent
calls of C<slave()> will return a newly opened slave filehandle.
=item make_slave_controlling_terminal()
This will set the slave filehandle as the controlling terminal of the
current process, which will become a session leader, so this should
only be called by a child process after a fork(), e.g. in the callback
to C<sync_exec()> (see L<Proc::SyncExec>). See the C<try> script
(also C<test.pl>) for an example how to correctly spawn a subprocess.
=item set_raw()
Will set the pty to raw. Note that this is a one-way operation, you
need IO::Stty to set the terminal settings to anything else.
On some systems, the master pty is not a tty. This method checks for
that and returns success anyway on such systems. Note that this
method must be called on the slave, and probably should be called on
the master, just to be sure, i.e.
$pty->slave->set_raw();
$pty->set_raw();
=item clone_winsize_from(\*FH)
Gets the terminal size from filehandle FH (which must be a terminal)
and transfers it to the pty. Returns true on success and undef on
failure. Note that this must be called upon the I<slave>, i.e.
$pty->slave->clone_winsize_from(\*STDIN);
On some systems, the master pty also isatty. I actually have no
idea if setting terminal sizes there is passed through to the slave,
so if this method is called for a master that is not a tty, it
silently returns OK.
See the C<try> script for example code how to propagate SIGWINCH.
=item get_winsize()
Returns the terminal size, in a 4-element list.
($row, $col, $xpixel, $ypixel) = $tty->get_winsize()
=item set_winsize($row, $col, $xpixel, $ypixel)
Sets the terminal size. If not specified, C<$xpixel> and C<$ypixel> are set to
0. As with C<clone_winsize_from>, this must be called upon the I<slave>.
=back
=head1 SEE ALSO
L<IO::Tty>, L<IO::Tty::Constant>, L<IO::Handle>, L<Expect>, L<Proc::SyncExec>
=head1 MAILING LISTS
As this module is mainly used by Expect, support for it is available
via the two Expect mailing lists, expectperl-announce and
expectperl-discuss, at
http://lists.sourceforge.net/lists/listinfo/expectperl-announce
and
http://lists.sourceforge.net/lists/listinfo/expectperl-discuss
=head1 AUTHORS
Originally by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>, based on the
Ptty module by Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>.
Now maintained and heavily rewritten by Roland Giersig
E<lt>F<RGiersig@cpan.org>E<gt>.
Contains copyrighted stuff from openssh v3.0p1, authored by
Tatu Ylonen <ylo@cs.hut.fi>, Markus Friedl and Todd C. Miller
<Todd.Miller@courtesan.com>.
=head1 COPYRIGHT
Now all code is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
Nevertheless the above AUTHORS retain their copyrights to the various
parts and want to receive credit if their source code is used.
See the source for details.
=head1 DISCLAIMER
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
In other words: Use at your own risk. Provided as is. Your mileage
may vary. Read the source, Luke!
And finally, just to be sure:
Any Use of This Product, in Any Manner Whatsoever, Will Increase the
Amount of Disorder in the Universe. Although No Liability Is Implied
Herein, the Consumer Is Warned That This Process Will Ultimately Lead
to the Heat Death of the Universe.
=cut
DBD/File.pm 0000644 00000117471 15033552504 0006367 0 ustar 00 # -*- perl -*-
#
# DBD::File - A base class for implementing DBI drivers that
# act on plain files
#
# This module is currently maintained by
#
# H.Merijn Brand & Jens Rehsack
#
# The original author is Jochen Wiedmann.
#
# Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack
# Copyright (C) 2004 by Jeff Zucker
# Copyright (C) 1998 by Jochen Wiedmann
#
# All rights reserved.
#
# You may distribute this module under the terms of either the GNU
# General Public License or the Artistic License, as specified in
# the Perl README file.
require 5.008;
use strict;
use warnings;
use DBI ();
package DBD::File;
use strict;
use warnings;
use base qw( DBI::DBD::SqlEngine );
use Carp;
use vars qw( @ISA $VERSION $drh );
$VERSION = "0.44";
$drh = undef; # holds driver handle(s) once initialized
sub driver ($;$)
{
my ($class, $attr) = @_;
# Drivers typically use a singleton object for the $drh
# We use a hash here to have one singleton per subclass.
# (Otherwise DBD::CSV and DBD::DBM, for example, would
# share the same driver object which would cause problems.)
# An alternative would be to not cache the $drh here at all
# and require that subclasses do that. Subclasses should do
# their own caching, so caching here just provides extra safety.
$drh->{$class} and return $drh->{$class};
$attr ||= {};
{ no strict "refs";
unless ($attr->{Attribution}) {
$class eq "DBD::File" and
$attr->{Attribution} = "$class by Jeff Zucker";
$attr->{Attribution} ||= ${$class . "::ATTRIBUTION"} ||
"oops the author of $class forgot to define this";
}
$attr->{Version} ||= ${$class . "::VERSION"};
$attr->{Name} or ($attr->{Name} = $class) =~ s/^DBD\:\://;
}
$drh->{$class} = $class->SUPER::driver ($attr);
# XXX inject DBD::XXX::Statement unless exists
return $drh->{$class};
} # driver
sub CLONE
{
undef $drh;
} # CLONE
# ====== DRIVER ================================================================
package DBD::File::dr;
use strict;
use warnings;
use vars qw( @ISA $imp_data_size );
use Carp;
@DBD::File::dr::ISA = qw( DBI::DBD::SqlEngine::dr );
$DBD::File::dr::imp_data_size = 0;
sub dsn_quote
{
my $str = shift;
ref $str and return "";
defined $str or return "";
$str =~ s/([;:\\])/\\$1/g;
return $str;
} # dsn_quote
# XXX rewrite using TableConfig ...
sub default_table_source { "DBD::File::TableSource::FileSystem" }
sub connect
{
my ($drh, $dbname, $user, $auth, $attr) = @_;
# We do not (yet) care about conflicting attributes here
# my $dbh = DBI->connect ("dbi:CSV:f_dir=test", undef, undef, { f_dir => "text" });
# will test here that both test and text should exist
if (my $attr_hash = (DBI->parse_dsn ($dbname))[3]) {
if (defined $attr_hash->{f_dir} && ! -d $attr_hash->{f_dir}) {
my $msg = "No such directory '$attr_hash->{f_dir}";
$drh->set_err (2, $msg);
$attr_hash->{RaiseError} and croak $msg;
return;
}
}
if ($attr and defined $attr->{f_dir} && ! -d $attr->{f_dir}) {
my $msg = "No such directory '$attr->{f_dir}";
$drh->set_err (2, $msg);
$attr->{RaiseError} and croak $msg;
return;
}
return $drh->SUPER::connect ($dbname, $user, $auth, $attr);
} # connect
sub disconnect_all
{
} # disconnect_all
sub DESTROY
{
undef;
} # DESTROY
# ====== DATABASE ==============================================================
package DBD::File::db;
use strict;
use warnings;
use vars qw( @ISA $imp_data_size );
use Carp;
require File::Spec;
require Cwd;
use Scalar::Util qw( refaddr ); # in CORE since 5.7.3
@DBD::File::db::ISA = qw( DBI::DBD::SqlEngine::db );
$DBD::File::db::imp_data_size = 0;
sub data_sources
{
my ($dbh, $attr, @other) = @_;
ref ($attr) eq "HASH" or $attr = {};
exists $attr->{f_dir} or $attr->{f_dir} = $dbh->{f_dir};
exists $attr->{f_dir_search} or $attr->{f_dir_search} = $dbh->{f_dir_search};
return $dbh->SUPER::data_sources ($attr, @other);
} # data_source
sub set_versions
{
my $dbh = shift;
$dbh->{f_version} = $DBD::File::VERSION;
return $dbh->SUPER::set_versions ();
} # set_versions
sub init_valid_attributes
{
my $dbh = shift;
$dbh->{f_valid_attrs} = {
f_version => 1, # DBD::File version
f_dir => 1, # base directory
f_dir_search => 1, # extended search directories
f_ext => 1, # file extension
f_schema => 1, # schema name
f_lock => 1, # Table locking mode
f_lockfile => 1, # Table lockfile extension
f_encoding => 1, # Encoding of the file
f_valid_attrs => 1, # File valid attributes
f_readonly_attrs => 1, # File readonly attributes
};
$dbh->{f_readonly_attrs} = {
f_version => 1, # DBD::File version
f_valid_attrs => 1, # File valid attributes
f_readonly_attrs => 1, # File readonly attributes
};
return $dbh->SUPER::init_valid_attributes ();
} # init_valid_attributes
sub init_default_attributes
{
my ($dbh, $phase) = @_;
# must be done first, because setting flags implicitly calls $dbdname::db->STORE
$dbh->SUPER::init_default_attributes ($phase);
# DBI::BD::SqlEngine::dr::connect will detect old-style drivers and
# don't call twice
unless (defined $phase) {
# we have an "old" driver here
$phase = defined $dbh->{sql_init_phase};
$phase and $phase = $dbh->{sql_init_phase};
}
if (0 == $phase) {
# f_ext should not be initialized
# f_map is deprecated (but might return)
$dbh->{f_dir} = Cwd::abs_path (File::Spec->curdir ());
push @{$dbh->{sql_init_order}{90}}, "f_meta";
# complete derived attributes, if required
(my $drv_class = $dbh->{ImplementorClass}) =~ s/::db$//;
my $drv_prefix = DBI->driver_prefix ($drv_class);
if (exists $dbh->{$drv_prefix . "meta"} and !$dbh->{sql_engine_in_gofer}) {
my $attr = $dbh->{$drv_prefix . "meta"};
defined $dbh->{f_valid_attrs}{f_meta}
and $dbh->{f_valid_attrs}{f_meta} = 1;
$dbh->{f_meta} = $dbh->{$attr};
}
}
return $dbh;
} # init_default_attributes
sub validate_FETCH_attr
{
my ($dbh, $attrib) = @_;
$attrib eq "f_meta" and $dbh->{sql_engine_in_gofer} and $attrib = "sql_meta";
return $dbh->SUPER::validate_FETCH_attr ($attrib);
} # validate_FETCH_attr
sub validate_STORE_attr
{
my ($dbh, $attrib, $value) = @_;
if ($attrib eq "f_dir" && defined $value) {
-d $value or
return $dbh->set_err ($DBI::stderr, "No such directory '$value'");
File::Spec->file_name_is_absolute ($value) or
$value = Cwd::abs_path ($value);
}
if ($attrib eq "f_ext") {
$value eq "" || $value =~ m{^\.\w+(?:/[rR]*)?$} or
carp "'$value' doesn't look like a valid file extension attribute\n";
}
$attrib eq "f_meta" and $dbh->{sql_engine_in_gofer} and $attrib = "sql_meta";
return $dbh->SUPER::validate_STORE_attr ($attrib, $value);
} # validate_STORE_attr
sub get_f_versions
{
my ($dbh, $table) = @_;
my $class = $dbh->{ImplementorClass};
$class =~ s/::db$/::Table/;
my $dver;
my $dtype = "IO::File";
eval {
$dver = IO::File->VERSION ();
# when we're still alive here, everything went ok - no need to check for $@
$dtype .= " ($dver)";
};
my $f_encoding;
if ($table) {
my $meta;
$table and (undef, $meta) = $class->get_table_meta ($dbh, $table, 1);
$meta and $meta->{f_encoding} and $f_encoding = $meta->{f_encoding};
} # if ($table)
$f_encoding ||= $dbh->{f_encoding};
$f_encoding and $dtype .= " + " . $f_encoding . " encoding";
return sprintf "%s using %s", $dbh->{f_version}, $dtype;
} # get_f_versions
# ====== STATEMENT =============================================================
package DBD::File::st;
use strict;
use warnings;
use vars qw( @ISA $imp_data_size );
@DBD::File::st::ISA = qw( DBI::DBD::SqlEngine::st );
$DBD::File::st::imp_data_size = 0;
my %supported_attrs = (
TYPE => 1,
PRECISION => 1,
NULLABLE => 1,
);
sub FETCH
{
my ($sth, $attr) = @_;
if ($supported_attrs{$attr}) {
my $stmt = $sth->{sql_stmt};
if (exists $sth->{ImplementorClass} &&
exists $sth->{sql_stmt} &&
$sth->{sql_stmt}->isa ("SQL::Statement")) {
# fill overall_defs unless we know
unless (exists $sth->{f_overall_defs} && ref $sth->{f_overall_defs}) {
my $types = $sth->{Database}{Types};
unless ($types) { # Fetch types only once per database
if (my $t = $sth->{Database}->type_info_all ()) {
foreach my $i (1 .. $#$t) {
$types->{uc $t->[$i][0]} = $t->[$i][1];
$types->{$t->[$i][1]} ||= uc $t->[$i][0];
}
}
# sane defaults
for ([ 0, "" ],
[ 1, "CHAR" ],
[ 4, "INTEGER" ],
[ 12, "VARCHAR" ],
) {
$types->{$_->[0]} ||= $_->[1];
$types->{$_->[1]} ||= $_->[0];
}
$sth->{Database}{Types} = $types;
}
my $all_meta =
$sth->{Database}->func ("*", "table_defs", "get_sql_engine_meta");
foreach my $tbl (keys %$all_meta) {
my $meta = $all_meta->{$tbl};
exists $meta->{table_defs} && ref $meta->{table_defs} or next;
foreach (keys %{$meta->{table_defs}{columns}}) {
my $field_info = $meta->{table_defs}{columns}{$_};
if (defined $field_info->{data_type} &&
$field_info->{data_type} !~ m/^[0-9]+$/) {
$field_info->{type_name} = uc $field_info->{data_type};
$field_info->{data_type} = $types->{$field_info->{type_name}} || 0;
}
$field_info->{type_name} ||= $types->{$field_info->{data_type}} || "CHAR";
$sth->{f_overall_defs}{$_} = $field_info;
}
}
}
my @colnames = $sth->sql_get_colnames ();
$attr eq "TYPE" and
return [ map { $sth->{f_overall_defs}{$_}{data_type} || 12 }
@colnames ];
$attr eq "TYPE_NAME" and
return [ map { $sth->{f_overall_defs}{$_}{type_name} || "VARCHAR" }
@colnames ];
$attr eq "PRECISION" and
return [ map { $sth->{f_overall_defs}{$_}{data_length} || 0 }
@colnames ];
$attr eq "NULLABLE" and
return [ map { ( grep { $_ eq "NOT NULL" }
@{ $sth->{f_overall_defs}{$_}{constraints} || [] })
? 0 : 1 }
@colnames ];
}
}
return $sth->SUPER::FETCH ($attr);
} # FETCH
# ====== TableSource ===========================================================
package DBD::File::TableSource::FileSystem;
use strict;
use warnings;
use IO::Dir;
@DBD::File::TableSource::FileSystem::ISA = "DBI::DBD::SqlEngine::TableSource";
sub data_sources
{
my ($class, $drh, $attr) = @_;
my $dir = $attr && exists $attr->{f_dir}
? $attr->{f_dir}
: File::Spec->curdir ();
defined $dir or return; # Stream-based databases do not have f_dir
unless (-d $dir && -r $dir && -x $dir) {
$drh->set_err ($DBI::stderr, "Cannot use directory $dir from f_dir");
return;
}
my %attrs;
$attr and %attrs = %$attr;
delete $attrs{f_dir};
my $dsn_quote = $drh->{ImplementorClass}->can ("dsn_quote");
my $dsnextra = join ";", map { $_ . "=" . &{$dsn_quote} ($attrs{$_}) } keys %attrs;
my @dir = ($dir);
$attr->{f_dir_search} && ref $attr->{f_dir_search} eq "ARRAY" and
push @dir, grep { -d $_ } @{$attr->{f_dir_search}};
my @dsns;
foreach $dir (@dir) {
my $dirh = IO::Dir->new ($dir);
unless (defined $dirh) {
$drh->set_err ($DBI::stderr, "Cannot open directory $dir: $!");
return;
}
my ($file, %names, $driver);
$driver = $drh->{ImplementorClass} =~ m/^dbd\:\:([^\:]+)\:\:/i ? $1 : "File";
while (defined ($file = $dirh->read ())) {
my $d = File::Spec->catdir ($dir, $file);
# allow current dir ... it can be a data_source too
$file ne File::Spec->updir () && -d $d and
push @dsns, "DBI:$driver:f_dir=" . &{$dsn_quote} ($d) . ($dsnextra ? ";$dsnextra" : "");
}
}
return @dsns;
} # data_sources
sub avail_tables
{
my ($self, $dbh) = @_;
my $dir = $dbh->{f_dir};
defined $dir or return; # Stream based db's cannot be queried for tables
my %seen;
my @tables;
my @dir = ($dir);
$dbh->{f_dir_search} && ref $dbh->{f_dir_search} eq "ARRAY" and
push @dir, grep { -d $_ } @{$dbh->{f_dir_search}};
foreach $dir (@dir) {
my $dirh = IO::Dir->new ($dir);
unless (defined $dirh) {
$dbh->set_err ($DBI::stderr, "Cannot open directory $dir: $!");
return;
}
my $class = $dbh->FETCH ("ImplementorClass");
$class =~ s/::db$/::Table/;
my ($file, %names);
my $schema = exists $dbh->{f_schema}
? defined $dbh->{f_schema} && $dbh->{f_schema} ne ""
? $dbh->{f_schema} : undef
: eval { getpwuid ((stat $dir)[4]) }; # XXX Win32::pwent
while (defined ($file = $dirh->read ())) {
my ($tbl, $meta) = $class->get_table_meta ($dbh, $file, 0, 0) or next; # XXX
# $tbl && $meta && -f $meta->{f_fqfn} or next;
$seen{defined $schema ? $schema : "\0"}{$dir}{$tbl}++ or
push @tables, [ undef, $schema, $tbl, "TABLE", "FILE" ];
}
$dirh->close () or
$dbh->set_err ($DBI::stderr, "Cannot close directory $dir: $!");
}
return @tables;
} # avail_tables
# ====== DataSource ============================================================
package DBD::File::DataSource::Stream;
use strict;
use warnings;
use Carp;
@DBD::File::DataSource::Stream::ISA = "DBI::DBD::SqlEngine::DataSource";
# We may have a working flock () built-in but that doesn't mean that locking
# will work on NFS (flock () may hang hard)
my $locking = eval {
my $fh;
my $nulldevice = File::Spec->devnull ();
open $fh, ">", $nulldevice or croak "Can't open $nulldevice: $!";
flock $fh, 0;
close $fh;
1;
};
sub complete_table_name
{
my ($self, $meta, $file, $respect_case) = @_;
my $tbl = $file;
if (!$respect_case and $meta->{sql_identifier_case} == 1) { # XXX SQL_IC_UPPER
$tbl = uc $tbl;
}
elsif (!$respect_case and $meta->{sql_identifier_case} == 2) { # XXX SQL_IC_LOWER
$tbl = lc $tbl;
}
$meta->{f_fqfn} = undef;
$meta->{f_fqbn} = undef;
$meta->{f_fqln} = undef;
$meta->{table_name} = $tbl;
return $tbl;
} # complete_table_name
sub apply_encoding
{
my ($self, $meta, $fn) = @_;
defined $fn or $fn = "file handle " . fileno ($meta->{fh});
if (my $enc = $meta->{f_encoding}) {
binmode $meta->{fh}, ":encoding($enc)" or
croak "Failed to set encoding layer '$enc' on $fn: $!";
}
else {
binmode $meta->{fh} or croak "Failed to set binary mode on $fn: $!";
}
} # apply_encoding
sub open_data
{
my ($self, $meta, $attrs, $flags) = @_;
$flags->{dropMode} and croak "Can't drop a table in stream";
my $fn = "file handle " . fileno ($meta->{f_file});
if ($flags->{createMode} || $flags->{lockMode}) {
$meta->{fh} = IO::Handle->new_from_fd (fileno ($meta->{f_file}), "w+") or
croak "Cannot open $fn for writing: $! (" . ($!+0) . ")";
}
else {
$meta->{fh} = IO::Handle->new_from_fd (fileno ($meta->{f_file}), "r") or
croak "Cannot open $fn for reading: $! (" . ($!+0) . ")";
}
if ($meta->{fh}) {
$self->apply_encoding ($meta, $fn);
} # have $meta->{$fh}
if ($self->can_flock && $meta->{fh}) {
my $lm = defined $flags->{f_lock}
&& $flags->{f_lock} =~ m/^[012]$/
? $flags->{f_lock}
: $flags->{lockMode} ? 2 : 1;
if ($lm == 2) {
flock $meta->{fh}, 2 or croak "Cannot obtain exclusive lock on $fn: $!";
}
elsif ($lm == 1) {
flock $meta->{fh}, 1 or croak "Cannot obtain shared lock on $fn: $!";
}
# $lm = 0 is forced no locking at all
}
} # open_data
sub can_flock { $locking }
package DBD::File::DataSource::File;
use strict;
use warnings;
@DBD::File::DataSource::File::ISA = "DBD::File::DataSource::Stream";
use Carp;
my $fn_any_ext_regex = qr/\.[^.]*/;
sub complete_table_name
{
my ($self, $meta, $file, $respect_case, $file_is_table) = @_;
$file eq "." || $file eq ".." and return; # XXX would break a possible DBD::Dir
# XXX now called without proving f_fqfn first ...
my ($ext, $req) = ("", 0);
if ($meta->{f_ext}) {
($ext, my $opt) = split m{/}, $meta->{f_ext};
if ($ext && $opt) {
$opt =~ m/r/i and $req = 1;
}
}
# (my $tbl = $file) =~ s/\Q$ext\E$//i;
my ($tbl, $basename, $dir, $fn_ext, $user_spec_file, $searchdir);
if ($file_is_table and defined $meta->{f_file}) {
$tbl = $file;
($basename, $dir, $fn_ext) = File::Basename::fileparse ($meta->{f_file}, $fn_any_ext_regex);
$file = $basename . $fn_ext;
$user_spec_file = 1;
}
else {
($basename, $dir, undef) = File::Basename::fileparse ($file, qr{\Q$ext\E});
# $dir is returned with trailing (back)slash. We just need to check
# if it is ".", "./", or ".\" or "[]" (VMS)
if ($dir =~ m{^(?:[.][/\\]?|\[\])$} && ref $meta->{f_dir_search} eq "ARRAY") {
foreach my $d ($meta->{f_dir}, @{$meta->{f_dir_search}}) {
my $f = File::Spec->catdir ($d, $file);
-f $f or next;
$searchdir = Cwd::abs_path ($d);
$dir = "";
last;
}
}
$file = $tbl = $basename;
$user_spec_file = 0;
}
if (!$respect_case and $meta->{sql_identifier_case} == 1) { # XXX SQL_IC_UPPER
$basename = uc $basename;
$tbl = uc $tbl;
}
elsif (!$respect_case and $meta->{sql_identifier_case} == 2) { # XXX SQL_IC_LOWER
$basename = lc $basename;
$tbl = lc $tbl;
}
unless (defined $searchdir) {
$searchdir = File::Spec->file_name_is_absolute ($dir)
? ($dir =~ s{/$}{}, $dir)
: Cwd::abs_path (File::Spec->catdir ($meta->{f_dir}, $dir));
}
-d $searchdir or
croak "-d $searchdir: $!";
$searchdir eq $meta->{f_dir} and
$dir = "";
unless ($user_spec_file) {
$file_is_table and $file = "$basename$ext";
# Fully Qualified File Name
my $cmpsub;
if ($respect_case) {
$cmpsub = sub {
my ($fn, undef, $sfx) = File::Basename::fileparse ($_, $fn_any_ext_regex);
$^O eq "VMS" && $sfx eq "." and
$sfx = ""; # no extension turns up as a dot
$fn eq $basename and
return (lc $sfx eq lc $ext or !$req && !$sfx);
return 0;
}
}
else {
$cmpsub = sub {
my ($fn, undef, $sfx) = File::Basename::fileparse ($_, $fn_any_ext_regex);
$^O eq "VMS" && $sfx eq "." and
$sfx = ""; # no extension turns up as a dot
lc $fn eq lc $basename and
return (lc $sfx eq lc $ext or !$req && !$sfx);
return 0;
}
}
my @f;
{ my $dh = IO::Dir->new ($searchdir) or croak "Can't open '$searchdir': $!";
@f = sort { length $b <=> length $a }
grep { &$cmpsub ($_) }
$dh->read ();
$dh->close () or croak "Can't close '$searchdir': $!";
}
@f > 0 && @f <= 2 and $file = $f[0];
!$respect_case && $meta->{sql_identifier_case} == 4 and # XXX SQL_IC_MIXED
($tbl = $file) =~ s/\Q$ext\E$//i;
my $tmpfn = $file;
if ($ext && $req) {
# File extension required
$tmpfn =~ s/\Q$ext\E$//i or return;
}
}
my $fqfn = File::Spec->catfile ($searchdir, $file);
my $fqbn = File::Spec->catfile ($searchdir, $basename);
$meta->{f_fqfn} = $fqfn;
$meta->{f_fqbn} = $fqbn;
defined $meta->{f_lockfile} && $meta->{f_lockfile} and
$meta->{f_fqln} = $meta->{f_fqbn} . $meta->{f_lockfile};
$dir && !$user_spec_file and $tbl = File::Spec->catfile ($dir, $tbl);
$meta->{table_name} = $tbl;
return $tbl;
} # complete_table_name
sub open_data
{
my ($self, $meta, $attrs, $flags) = @_;
defined $meta->{f_fqfn} && $meta->{f_fqfn} ne "" or croak "No filename given";
my ($fh, $fn);
unless ($meta->{f_dontopen}) {
$fn = $meta->{f_fqfn};
if ($flags->{createMode}) {
-f $meta->{f_fqfn} and
croak "Cannot create table $attrs->{table}: Already exists";
$fh = IO::File->new ($fn, "a+") or
croak "Cannot open $fn for writing: $! (" . ($!+0) . ")";
}
else {
unless ($fh = IO::File->new ($fn, ($flags->{lockMode} ? "r+" : "r"))) {
croak "Cannot open $fn: $! (" . ($!+0) . ")";
}
}
$meta->{fh} = $fh;
if ($fh) {
$fh->seek (0, 0) or
croak "Error while seeking back: $!";
$self->apply_encoding ($meta);
}
}
if ($meta->{f_fqln}) {
$fn = $meta->{f_fqln};
if ($flags->{createMode}) {
-f $fn and
croak "Cannot create table lock at '$fn' for $attrs->{table}: Already exists";
$fh = IO::File->new ($fn, "a+") or
croak "Cannot open $fn for writing: $! (" . ($!+0) . ")";
}
else {
unless ($fh = IO::File->new ($fn, ($flags->{lockMode} ? "r+" : "r"))) {
croak "Cannot open $fn: $! (" . ($!+0) . ")";
}
}
$meta->{lockfh} = $fh;
}
if ($self->can_flock && $fh) {
my $lm = defined $flags->{f_lock}
&& $flags->{f_lock} =~ m/^[012]$/
? $flags->{f_lock}
: $flags->{lockMode} ? 2 : 1;
if ($lm == 2) {
flock $fh, 2 or croak "Cannot obtain exclusive lock on $fn: $!";
}
elsif ($lm == 1) {
flock $fh, 1 or croak "Cannot obtain shared lock on $fn: $!";
}
# $lm = 0 is forced no locking at all
}
} # open_data
# ====== SQL::STATEMENT ========================================================
package DBD::File::Statement;
use strict;
use warnings;
@DBD::File::Statement::ISA = qw( DBI::DBD::SqlEngine::Statement );
# ====== SQL::TABLE ============================================================
package DBD::File::Table;
use strict;
use warnings;
use Carp;
require IO::File;
require File::Basename;
require File::Spec;
require Cwd;
require Scalar::Util;
@DBD::File::Table::ISA = qw( DBI::DBD::SqlEngine::Table );
# ====== UTILITIES ============================================================
if (eval { require Params::Util; }) {
Params::Util->import ("_HANDLE");
}
else {
# taken but modified from Params::Util ...
*_HANDLE = sub {
# It has to be defined, of course
defined $_[0] or return;
# Normal globs are considered to be file handles
ref $_[0] eq "GLOB" and return $_[0];
# Check for a normal tied filehandle
# Side Note: 5.5.4's tied () and can () doesn't like getting undef
tied ($_[0]) and tied ($_[0])->can ("TIEHANDLE") and return $_[0];
# There are no other non-object handles that we support
Scalar::Util::blessed ($_[0]) or return;
# Check for a common base classes for conventional IO::Handle object
$_[0]->isa ("IO::Handle") and return $_[0];
# Check for tied file handles using Tie::Handle
$_[0]->isa ("Tie::Handle") and return $_[0];
# IO::Scalar is not a proper seekable, but it is valid is a
# regular file handle
$_[0]->isa ("IO::Scalar") and return $_[0];
# Yet another special case for IO::String, which refuses (for now
# anyway) to become a subclass of IO::Handle.
$_[0]->isa ("IO::String") and return $_[0];
# This is not any sort of object we know about
return;
};
}
# ====== FLYWEIGHT SUPPORT =====================================================
# Flyweight support for table_info
# The functions file2table, init_table_meta, default_table_meta and
# get_table_meta are using $self arguments for polymorphism only. The
# must not rely on an instantiated DBD::File::Table
sub file2table
{
my ($self, $meta, $file, $file_is_table, $respect_case) = @_;
return $meta->{sql_data_source}->complete_table_name ($meta, $file, $respect_case, $file_is_table);
} # file2table
sub bootstrap_table_meta
{
my ($self, $dbh, $meta, $table, @other) = @_;
$self->SUPER::bootstrap_table_meta ($dbh, $meta, $table, @other);
exists $meta->{f_dir} or $meta->{f_dir} = $dbh->{f_dir};
exists $meta->{f_dir_search} or $meta->{f_dir_search} = $dbh->{f_dir_search};
defined $meta->{f_ext} or $meta->{f_ext} = $dbh->{f_ext};
defined $meta->{f_encoding} or $meta->{f_encoding} = $dbh->{f_encoding};
exists $meta->{f_lock} or $meta->{f_lock} = $dbh->{f_lock};
exists $meta->{f_lockfile} or $meta->{f_lockfile} = $dbh->{f_lockfile};
defined $meta->{f_schema} or $meta->{f_schema} = $dbh->{f_schema};
defined $meta->{f_open_file_needed} or
$meta->{f_open_file_needed} = $self->can ("open_file") != DBD::File::Table->can ("open_file");
defined ($meta->{sql_data_source}) or
$meta->{sql_data_source} = _HANDLE ($meta->{f_file})
? "DBD::File::DataSource::Stream"
: "DBD::File::DataSource::File";
} # bootstrap_table_meta
sub get_table_meta ($$$$;$)
{
my ($self, $dbh, $table, $file_is_table, $respect_case) = @_;
my $meta = $self->SUPER::get_table_meta ($dbh, $table, $respect_case, $file_is_table);
$table = $meta->{table_name};
return unless $table;
return ($table, $meta);
} # get_table_meta
my %reset_on_modify = (
f_file => [ "f_fqfn", "sql_data_source" ],
f_dir => "f_fqfn",
f_dir_search => [],
f_ext => "f_fqfn",
f_lockfile => "f_fqfn", # forces new file2table call
);
__PACKAGE__->register_reset_on_modify (\%reset_on_modify);
my %compat_map = map { $_ => "f_$_" } qw( file ext lock lockfile );
__PACKAGE__->register_compat_map (\%compat_map);
# ====== DBD::File <= 0.40 compat stuff ========================================
# compat to 0.38 .. 0.40 API
sub open_file
{
my ($className, $meta, $attrs, $flags) = @_;
return $className->SUPER::open_data ($meta, $attrs, $flags);
} # open_file
sub open_data
{
my ($className, $meta, $attrs, $flags) = @_;
# compat to 0.38 .. 0.40 API
$meta->{f_open_file_needed}
? $className->open_file ($meta, $attrs, $flags)
: $className->SUPER::open_data ($meta, $attrs, $flags);
return;
} # open_data
# ====== SQL::Eval API =========================================================
sub drop ($)
{
my ($self, $data) = @_;
my $meta = $self->{meta};
# We have to close the file before unlinking it: Some OS'es will
# refuse the unlink otherwise.
$meta->{fh} and $meta->{fh}->close ();
$meta->{lockfh} and $meta->{lockfh}->close ();
undef $meta->{fh};
undef $meta->{lockfh};
$meta->{f_fqfn} and unlink $meta->{f_fqfn}; # XXX ==> sql_data_source
$meta->{f_fqln} and unlink $meta->{f_fqln}; # XXX ==> sql_data_source
delete $data->{Database}{sql_meta}{$self->{table}};
return 1;
} # drop
sub seek ($$$$)
{
my ($self, $data, $pos, $whence) = @_;
my $meta = $self->{meta};
if ($whence == 0 && $pos == 0) {
$pos = defined $meta->{first_row_pos} ? $meta->{first_row_pos} : 0;
}
elsif ($whence != 2 || $pos != 0) {
croak "Illegal seek position: pos = $pos, whence = $whence";
}
$meta->{fh}->seek ($pos, $whence) or
croak "Error while seeking in " . $meta->{f_fqfn} . ": $!";
} # seek
sub truncate ($$)
{
my ($self, $data) = @_;
my $meta = $self->{meta};
$meta->{fh}->truncate ($meta->{fh}->tell ()) or
croak "Error while truncating " . $meta->{f_fqfn} . ": $!";
return 1;
} # truncate
sub DESTROY
{
my $self = shift;
my $meta = $self->{meta};
$meta->{fh} and $meta->{fh}->close ();
$meta->{lockfh} and $meta->{lockfh}->close ();
undef $meta->{fh};
undef $meta->{lockfh};
$self->SUPER::DESTROY();
} # DESTROY
1;
__END__
=head1 NAME
DBD::File - Base class for writing file based DBI drivers
=head1 SYNOPSIS
This module is a base class for writing other L<DBD|DBI::DBD>s.
It is not intended to function as a DBD itself (though it is possible).
If you want to access flat files, use L<DBD::AnyData|DBD::AnyData>, or
L<DBD::CSV|DBD::CSV> (both of which are subclasses of DBD::File).
=head1 DESCRIPTION
The DBD::File module is not a true L<DBI|DBI> driver, but an abstract
base class for deriving concrete DBI drivers from it. The implication
is, that these drivers work with plain files, for example CSV files or
INI files. The module is based on the L<SQL::Statement|SQL::Statement>
module, a simple SQL engine.
See L<DBI|DBI> for details on DBI, L<SQL::Statement|SQL::Statement> for
details on SQL::Statement and L<DBD::CSV|DBD::CSV>, L<DBD::DBM|DBD::DBM>
or L<DBD::AnyData|DBD::AnyData> for example drivers.
=head2 Metadata
The following attributes are handled by DBI itself and not by DBD::File,
thus they all work as expected:
Active
ActiveKids
CachedKids
CompatMode (Not used)
InactiveDestroy
AutoInactiveDestroy
Kids
PrintError
RaiseError
Warn (Not used)
=head3 The following DBI attributes are handled by DBD::File:
=head4 AutoCommit
Always on.
=head4 ChopBlanks
Works.
=head4 NUM_OF_FIELDS
Valid after C<< $sth->execute >>.
=head4 NUM_OF_PARAMS
Valid after C<< $sth->prepare >>.
=head4 NAME
Valid after C<< $sth->execute >>; undef for Non-Select statements.
=head4 NULLABLE
Not really working, always returns an array ref of ones, except the
affected table has been created in this session. Valid after
C<< $sth->execute >>; undef for non-select statements.
=head3 Unsupported DBI attributes and methods
=head4 bind_param_inout
=head4 CursorName
=head4 LongReadLen
=head4 LongTruncOk
=head3 DBD::File specific attributes
In addition to the DBI attributes, you can use the following dbh
attributes:
=head4 f_dir
This attribute is used for setting the directory where the files are
opened and it defaults to the current directory (F<.>). Usually you set
it on the dbh but it may be overridden per table (see L<f_meta>).
When the value for C<f_dir> is a relative path, it is converted into
the appropriate absolute path name (based on the current working
directory) when the dbh attribute is set.
f_dir => "/data/foo/csv",
See L<KNOWN BUGS AND LIMITATIONS>.
=head4 f_dir_search
This optional attribute can be set to pass a list of folders to also
find existing tables. It will B<not> be used to create new files.
f_dir_search => [ "/data/bar/csv", "/dump/blargh/data" ],
=head4 f_ext
This attribute is used for setting the file extension. The format is:
extension{/flag}
where the /flag is optional and the extension is case-insensitive.
C<f_ext> allows you to specify an extension which:
f_ext => ".csv/r",
=over
=item *
makes DBD::File prefer F<table.extension> over F<table>.
=item *
makes the table name the filename minus the extension.
=back
DBI:CSV:f_dir=data;f_ext=.csv
In the above example and when C<f_dir> contains both F<table.csv> and
F<table>, DBD::File will open F<table.csv> and the table will be
named "table". If F<table.csv> does not exist but F<table> does
that file is opened and the table is also called "table".
If C<f_ext> is not specified and F<table.csv> exists it will be opened
and the table will be called "table.csv" which is probably not what
you want.
NOTE: even though extensions are case-insensitive, table names are
not.
DBI:CSV:f_dir=data;f_ext=.csv/r
The C<r> flag means the file extension is required and any filename
that does not match the extension is ignored.
Usually you set it on the dbh but it may be overridden per table
(see L<f_meta>).
=head4 f_schema
This will set the schema name and defaults to the owner of the
directory in which the table file resides. You can set C<f_schema> to
C<undef>.
my $dbh = DBI->connect ("dbi:CSV:", "", "", {
f_schema => undef,
f_dir => "data",
f_ext => ".csv/r",
}) or die $DBI::errstr;
By setting the schema you affect the results from the tables call:
my @tables = $dbh->tables ();
# no f_schema
"merijn".foo
"merijn".bar
# f_schema => "dbi"
"dbi".foo
"dbi".bar
# f_schema => undef
foo
bar
Defining C<f_schema> to the empty string is equal to setting it to C<undef>
so the DSN can be C<"dbi:CSV:f_schema=;f_dir=.">.
=head4 f_lock
The C<f_lock> attribute is used to set the locking mode on the opened
table files. Note that not all platforms support locking. By default,
tables are opened with a shared lock for reading, and with an
exclusive lock for writing. The supported modes are:
0: No locking at all.
1: Shared locks will be used.
2: Exclusive locks will be used.
But see L<KNOWN BUGS|/"KNOWN BUGS AND LIMITATIONS"> below.
=head4 f_lockfile
If you wish to use a lockfile extension other than C<.lck>, simply specify
the C<f_lockfile> attribute:
$dbh = DBI->connect ("dbi:DBM:f_lockfile=.foo");
$dbh->{f_lockfile} = ".foo";
$dbh->{dbm_tables}{qux}{f_lockfile} = ".foo";
If you wish to disable locking, set the C<f_lockfile> to C<0>.
$dbh = DBI->connect ("dbi:DBM:f_lockfile=0");
$dbh->{f_lockfile} = 0;
$dbh->{dbm_tables}{qux}{f_lockfile} = 0;
=head4 f_encoding
With this attribute, you can set the encoding in which the file is opened.
This is implemented using C<< binmode $fh, ":encoding(<f_encoding>)" >>.
=head4 f_meta
Private data area aliasing L<DBI::DBD::SqlEngine/sql_meta> which
contains information about the tables this module handles. Table meta
data might not be available until the table has been accessed for the
first time e.g., by issuing a select on it however it is possible to
pre-initialize attributes for each table you use.
DBD::File recognizes the (public) attributes C<f_ext>, C<f_dir>,
C<f_file>, C<f_encoding>, C<f_lock>, C<f_lockfile>, C<f_schema>,
in addition to the attributes L<DBI::DBD::SqlEngine/sql_meta> already
supports. Be very careful when modifying attributes you do not know,
the consequence might be a destroyed or corrupted table.
C<f_file> is an attribute applicable to table meta data only and you
will not find a corresponding attribute in the dbh. Whilst it may be
reasonable to have several tables with the same column names, it is
not for the same file name. If you need access to the same file using
different table names, use C<SQL::Statement> as the SQL engine and the
C<AS> keyword:
SELECT * FROM tbl AS t1, tbl AS t2 WHERE t1.id = t2.id
C<f_file> can be an absolute path name or a relative path name but if
it is relative, it is interpreted as being relative to the C<f_dir>
attribute of the table meta data. When C<f_file> is set DBD::File will
use C<f_file> as specified and will not attempt to work out an
alternative for C<f_file> using the C<table name> and C<f_ext>
attribute.
While C<f_meta> is a private and readonly attribute (which means, you
cannot modify it's values), derived drivers might provide restricted
write access through another attribute. Well known accessors are
C<csv_tables> for L<DBD::CSV>, C<ad_tables> for L<DBD::AnyData> and
C<dbm_tables> for L<DBD::DBM>.
=head3 New opportunities for attributes from DBI::DBD::SqlEngine
=head4 sql_table_source
C<< $dbh->{sql_table_source} >> can be set to
I<DBD::File::TableSource::FileSystem> (and is the default setting
of DBD::File). This provides usual behaviour of previous DBD::File
releases on
@ary = DBI->data_sources ($driver);
@ary = DBI->data_sources ($driver, \%attr);
@ary = $dbh->data_sources ();
@ary = $dbh->data_sources (\%attr);
@names = $dbh->tables ($catalog, $schema, $table, $type);
$sth = $dbh->table_info ($catalog, $schema, $table, $type);
$sth = $dbh->table_info ($catalog, $schema, $table, $type, \%attr);
$dbh->func ("list_tables");
=head4 sql_data_source
C<< $dbh->{sql_data_source} >> can be set to either
I<DBD::File::DataSource::File>, which is default and provides the
well known behavior of DBD::File releases prior to 0.41, or
I<DBD::File::DataSource::Stream>, which reuses already opened
file-handle for operations.
=head3 Internally private attributes to deal with SQL backends
Do not modify any of these private attributes unless you understand
the implications of doing so. The behavior of DBD::File and derived
DBDs might be unpredictable when one or more of those attributes are
modified.
=head4 sql_nano_version
Contains the version of loaded DBI::SQL::Nano.
=head4 sql_statement_version
Contains the version of loaded SQL::Statement.
=head4 sql_handler
Contains either the text 'SQL::Statement' or 'DBI::SQL::Nano'.
=head4 sql_ram_tables
Contains optionally temporary tables.
=head4 sql_flags
Contains optional flags to instantiate the SQL::Parser parsing engine
when SQL::Statement is used as SQL engine. See L<SQL::Parser> for valid
flags.
=head2 Driver private methods
=head3 Default DBI methods
=head4 data_sources
The C<data_sources> method returns a list of subdirectories of the current
directory in the form "dbi:CSV:f_dir=$dirname".
If you want to read the subdirectories of another directory, use
my ($drh) = DBI->install_driver ("CSV");
my (@list) = $drh->data_sources (f_dir => "/usr/local/csv_data");
=head3 Additional methods
The following methods are only available via their documented name when
DBD::File is used directly. Because this is only reasonable for testing
purposes, the real names must be used instead. Those names can be computed
by replacing the C<f_> in the method name with the driver prefix.
=head4 f_versions
Signature:
sub f_versions (;$)
{
my ($table_name) = @_;
$table_name ||= ".";
...
}
Returns the versions of the driver, including the DBI version, the Perl
version, DBI::PurePerl version (if DBI::PurePerl is active) and the version
of the SQL engine in use.
my $dbh = DBI->connect ("dbi:File:");
my $f_versions = $dbh->func ("f_versions");
print "$f_versions\n";
__END__
# DBD::File 0.41 using IO::File (1.16)
# DBI::DBD::SqlEngine 0.05 using SQL::Statement 1.406
# DBI 1.623
# OS darwin (12.2.1)
# Perl 5.017006 (darwin-thread-multi-ld-2level)
Called in list context, f_versions will return an array containing each
line as single entry.
Some drivers might use the optional (table name) argument and modify
version information related to the table (e.g. DBD::DBM provides storage
backend information for the requested table, when it has a table name).
=head1 KNOWN BUGS AND LIMITATIONS
=over 4
=item *
This module uses flock () internally but flock is not available on all
platforms. On MacOS and Windows 95 there is no locking at all (perhaps
not so important on MacOS and Windows 95, as there is only a single
user).
=item *
The module stores details about the handled tables in a private area
of the driver handle (C<$drh>). This data area is not shared between
different driver instances, so several C<< DBI->connect () >> calls will
cause different table instances and private data areas.
This data area is filled for the first time when a table is accessed,
either via an SQL statement or via C<table_info> and is not
destroyed until the table is dropped or the driver handle is released.
Manual destruction is possible via L<f_clear_meta>.
The following attributes are preserved in the data area and will
evaluated instead of driver globals:
=over 8
=item f_ext
=item f_dir
=item f_dir_search
=item f_lock
=item f_lockfile
=item f_encoding
=item f_schema
=item col_names
=item sql_identifier_case
=back
The following attributes are preserved in the data area only and
cannot be set globally.
=over 8
=item f_file
=back
The following attributes are preserved in the data area only and are
computed when initializing the data area:
=over 8
=item f_fqfn
=item f_fqbn
=item f_fqln
=item table_name
=back
For DBD::CSV tables this means, once opened "foo.csv" as table named "foo",
another table named "foo" accessing the file "foo.txt" cannot be opened.
Accessing "foo" will always access the file "foo.csv" in memorized
C<f_dir>, locking C<f_lockfile> via memorized C<f_lock>.
You can use L<f_clear_meta> or the C<f_file> attribute for a specific table
to work around this.
=item *
When used with SQL::Statement and temporary tables e.g.,
CREATE TEMP TABLE ...
the table data processing bypasses DBD::File::Table. No file system
calls will be made and there are no clashes with existing (file based)
tables with the same name. Temporary tables are chosen over file
tables, but they will not covered by C<table_info>.
=back
=head1 AUTHOR
This module is currently maintained by
H.Merijn Brand < h.m.brand at xs4all.nl > and
Jens Rehsack < rehsack at googlemail.com >
The original author is Jochen Wiedmann.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack
Copyright (C) 2004-2009 by Jeff Zucker
Copyright (C) 1998-2004 by Jochen Wiedmann
All rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=head1 SEE ALSO
L<DBI|DBI>, L<DBD::DBM|DBD::DBM>, L<DBD::CSV|DBD::CSV>, L<Text::CSV|Text::CSV>,
L<Text::CSV_XS|Text::CSV_XS>, L<SQL::Statement|SQL::Statement>, and
L<DBI::SQL::Nano|DBI::SQL::Nano>
=cut
DBD/mysql/GetInfo.pm 0000644 00000037362 15033552504 0010210 0 ustar 00 package DBD::mysql::GetInfo;
########################################
# DBD::mysql::GetInfo
#
#
# Generated by DBI::DBD::Metadata
# $Author$ <-- the person to blame
# $Revision$
# $Date$
use strict;
use warnings;
use DBD::mysql;
# Beware: not officially documented interfaces...
# use DBI::Const::GetInfoType qw(%GetInfoType);
# use DBI::Const::GetInfoReturn qw(%GetInfoReturnTypes %GetInfoReturnValues);
my $sql_driver = 'mysql';
# SQL_DRIVER_VER should be formatted as dd.dd.dddd
my $dbdversion = $DBD::mysql::VERSION;
$dbdversion .= '_00' if $dbdversion =~ /^\d+\.\d+$/;
my $sql_driver_ver = sprintf("%02d.%02d.%04d", split(/[\._]/,$dbdversion));
my @Keywords = qw(
BIGINT
BLOB
DEFAULT
KEYS
LIMIT
LONGBLOB
MEDIMUMBLOB
MEDIUMINT
MEDIUMTEXT
PROCEDURE
REGEXP
RLIKE
SHOW
TABLES
TINYBLOB
TINYTEXT
UNIQUE
UNSIGNED
ZEROFILL
);
sub sql_keywords {
return join ',', @Keywords;
}
sub sql_data_source_name {
my $dbh = shift;
return "dbi:$sql_driver:" . $dbh->{Name};
}
sub sql_user_name {
my $dbh = shift;
# Non-standard attribute
return $dbh->{CURRENT_USER};
}
####################
# makefunc()
# returns a ref to a sub that calls into XS to get
# values for info types that must needs be coded in C
sub makefunk ($) {
my $type = shift;
return sub {dbd_mysql_get_info(shift, $type)}
}
our %info = (
20 => 'N', # SQL_ACCESSIBLE_PROCEDURES
19 => 'Y', # SQL_ACCESSIBLE_TABLES
0 => 0, # SQL_ACTIVE_CONNECTIONS
116 => 0, # SQL_ACTIVE_ENVIRONMENTS
1 => 0, # SQL_ACTIVE_STATEMENTS
169 => 127, # SQL_AGGREGATE_FUNCTIONS
117 => 0, # SQL_ALTER_DOMAIN
86 => 3, # SQL_ALTER_TABLE
10021 => makefunk 10021, # SQL_ASYNC_MODE
120 => 2, # SQL_BATCH_ROW_COUNT
121 => 2, # SQL_BATCH_SUPPORT
82 => 0, # SQL_BOOKMARK_PERSISTENCE
114 => 1, # SQL_CATALOG_LOCATION
10003 => 'Y', # SQL_CATALOG_NAME
41 => makefunk 41, # SQL_CATALOG_NAME_SEPARATOR
42 => makefunk 42, # SQL_CATALOG_TERM
92 => 29, # SQL_CATALOG_USAGE
10004 => '', # SQL_COLLATING_SEQUENCE
10004 => '', # SQL_COLLATION_SEQ
87 => 'Y', # SQL_COLUMN_ALIAS
22 => 0, # SQL_CONCAT_NULL_BEHAVIOR
53 => 259071, # SQL_CONVERT_BIGINT
54 => 0, # SQL_CONVERT_BINARY
55 => 259071, # SQL_CONVERT_BIT
56 => 259071, # SQL_CONVERT_CHAR
57 => 259071, # SQL_CONVERT_DATE
58 => 259071, # SQL_CONVERT_DECIMAL
59 => 259071, # SQL_CONVERT_DOUBLE
60 => 259071, # SQL_CONVERT_FLOAT
48 => 0, # SQL_CONVERT_FUNCTIONS
# 173 => undef, # SQL_CONVERT_GUID
61 => 259071, # SQL_CONVERT_INTEGER
123 => 0, # SQL_CONVERT_INTERVAL_DAY_TIME
124 => 0, # SQL_CONVERT_INTERVAL_YEAR_MONTH
71 => 0, # SQL_CONVERT_LONGVARBINARY
62 => 259071, # SQL_CONVERT_LONGVARCHAR
63 => 259071, # SQL_CONVERT_NUMERIC
64 => 259071, # SQL_CONVERT_REAL
65 => 259071, # SQL_CONVERT_SMALLINT
66 => 259071, # SQL_CONVERT_TIME
67 => 259071, # SQL_CONVERT_TIMESTAMP
68 => 259071, # SQL_CONVERT_TINYINT
69 => 0, # SQL_CONVERT_VARBINARY
70 => 259071, # SQL_CONVERT_VARCHAR
122 => 0, # SQL_CONVERT_WCHAR
125 => 0, # SQL_CONVERT_WLONGVARCHAR
126 => 0, # SQL_CONVERT_WVARCHAR
74 => 1, # SQL_CORRELATION_NAME
127 => 0, # SQL_CREATE_ASSERTION
128 => 0, # SQL_CREATE_CHARACTER_SET
129 => 0, # SQL_CREATE_COLLATION
130 => 0, # SQL_CREATE_DOMAIN
131 => 0, # SQL_CREATE_SCHEMA
132 => 1045, # SQL_CREATE_TABLE
133 => 0, # SQL_CREATE_TRANSLATION
134 => 0, # SQL_CREATE_VIEW
23 => 2, # SQL_CURSOR_COMMIT_BEHAVIOR
24 => 2, # SQL_CURSOR_ROLLBACK_BEHAVIOR
10001 => 0, # SQL_CURSOR_SENSITIVITY
2 => \&sql_data_source_name, # SQL_DATA_SOURCE_NAME
25 => 'N', # SQL_DATA_SOURCE_READ_ONLY
119 => 7, # SQL_DATETIME_LITERALS
17 => 'MySQL', # SQL_DBMS_NAME
18 => makefunk 18, # SQL_DBMS_VER
170 => 3, # SQL_DDL_INDEX
26 => 2, # SQL_DEFAULT_TRANSACTION_ISOLATION
26 => 2, # SQL_DEFAULT_TXN_ISOLATION
10002 => 'N', # SQL_DESCRIBE_PARAMETER
# 171 => undef, # SQL_DM_VER
3 => 137076632, # SQL_DRIVER_HDBC
# 135 => undef, # SQL_DRIVER_HDESC
4 => 137076088, # SQL_DRIVER_HENV
# 76 => undef, # SQL_DRIVER_HLIB
# 5 => undef, # SQL_DRIVER_HSTMT
6 => 'libmyodbc3.so', # SQL_DRIVER_NAME
77 => '03.51', # SQL_DRIVER_ODBC_VER
7 => $sql_driver_ver, # SQL_DRIVER_VER
136 => 0, # SQL_DROP_ASSERTION
137 => 0, # SQL_DROP_CHARACTER_SET
138 => 0, # SQL_DROP_COLLATION
139 => 0, # SQL_DROP_DOMAIN
140 => 0, # SQL_DROP_SCHEMA
141 => 7, # SQL_DROP_TABLE
142 => 0, # SQL_DROP_TRANSLATION
143 => 0, # SQL_DROP_VIEW
144 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES1
145 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES2
27 => 'Y', # SQL_EXPRESSIONS_IN_ORDERBY
8 => 63, # SQL_FETCH_DIRECTION
84 => 0, # SQL_FILE_USAGE
146 => 97863, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1
147 => 6016, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2
81 => 11, # SQL_GETDATA_EXTENSIONS
88 => 3, # SQL_GROUP_BY
28 => 4, # SQL_IDENTIFIER_CASE
#29 => sub {dbd_mysql_get_info(shift,$GetInfoType {SQL_IDENTIFIER_QUOTE_CHAR})},
29 => makefunk 29, # SQL_IDENTIFIER_QUOTE_CHAR
148 => 0, # SQL_INDEX_KEYWORDS
149 => 0, # SQL_INFO_SCHEMA_VIEWS
172 => 7, # SQL_INSERT_STATEMENT
73 => 'N', # SQL_INTEGRITY
150 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES1
151 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES2
89 => \&sql_keywords, # SQL_KEYWORDS
113 => 'Y', # SQL_LIKE_ESCAPE_CLAUSE
78 => 0, # SQL_LOCK_TYPES
34 => 64, # SQL_MAXIMUM_CATALOG_NAME_LENGTH
97 => 0, # SQL_MAXIMUM_COLUMNS_IN_GROUP_BY
98 => 32, # SQL_MAXIMUM_COLUMNS_IN_INDEX
99 => 0, # SQL_MAXIMUM_COLUMNS_IN_ORDER_BY
100 => 0, # SQL_MAXIMUM_COLUMNS_IN_SELECT
101 => 0, # SQL_MAXIMUM_COLUMNS_IN_TABLE
30 => 64, # SQL_MAXIMUM_COLUMN_NAME_LENGTH
1 => 0, # SQL_MAXIMUM_CONCURRENT_ACTIVITIES
31 => 18, # SQL_MAXIMUM_CURSOR_NAME_LENGTH
0 => 0, # SQL_MAXIMUM_DRIVER_CONNECTIONS
10005 => 64, # SQL_MAXIMUM_IDENTIFIER_LENGTH
102 => 500, # SQL_MAXIMUM_INDEX_SIZE
104 => 0, # SQL_MAXIMUM_ROW_SIZE
32 => 0, # SQL_MAXIMUM_SCHEMA_NAME_LENGTH
105 => makefunk 105, # SQL_MAXIMUM_STATEMENT_LENGTH
# 20000 => undef, # SQL_MAXIMUM_STMT_OCTETS
# 20001 => undef, # SQL_MAXIMUM_STMT_OCTETS_DATA
# 20002 => undef, # SQL_MAXIMUM_STMT_OCTETS_SCHEMA
106 => makefunk 106, # SQL_MAXIMUM_TABLES_IN_SELECT
35 => 64, # SQL_MAXIMUM_TABLE_NAME_LENGTH
107 => 16, # SQL_MAXIMUM_USER_NAME_LENGTH
10022 => makefunk 10022, # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS
112 => 0, # SQL_MAX_BINARY_LITERAL_LEN
34 => 64, # SQL_MAX_CATALOG_NAME_LEN
108 => 0, # SQL_MAX_CHAR_LITERAL_LEN
97 => 0, # SQL_MAX_COLUMNS_IN_GROUP_BY
98 => 32, # SQL_MAX_COLUMNS_IN_INDEX
99 => 0, # SQL_MAX_COLUMNS_IN_ORDER_BY
100 => 0, # SQL_MAX_COLUMNS_IN_SELECT
101 => 0, # SQL_MAX_COLUMNS_IN_TABLE
30 => 64, # SQL_MAX_COLUMN_NAME_LEN
1 => 0, # SQL_MAX_CONCURRENT_ACTIVITIES
31 => 18, # SQL_MAX_CURSOR_NAME_LEN
0 => 0, # SQL_MAX_DRIVER_CONNECTIONS
10005 => 64, # SQL_MAX_IDENTIFIER_LEN
102 => 500, # SQL_MAX_INDEX_SIZE
32 => 0, # SQL_MAX_OWNER_NAME_LEN
33 => 0, # SQL_MAX_PROCEDURE_NAME_LEN
34 => 64, # SQL_MAX_QUALIFIER_NAME_LEN
104 => 0, # SQL_MAX_ROW_SIZE
103 => 'Y', # SQL_MAX_ROW_SIZE_INCLUDES_LONG
32 => 0, # SQL_MAX_SCHEMA_NAME_LEN
105 => 8192, # SQL_MAX_STATEMENT_LEN
106 => 31, # SQL_MAX_TABLES_IN_SELECT
35 => makefunk 35, # SQL_MAX_TABLE_NAME_LEN
107 => 16, # SQL_MAX_USER_NAME_LEN
37 => 'Y', # SQL_MULTIPLE_ACTIVE_TXN
36 => 'Y', # SQL_MULT_RESULT_SETS
111 => 'N', # SQL_NEED_LONG_DATA_LEN
75 => 1, # SQL_NON_NULLABLE_COLUMNS
85 => 2, # SQL_NULL_COLLATION
49 => 16777215, # SQL_NUMERIC_FUNCTIONS
9 => 1, # SQL_ODBC_API_CONFORMANCE
152 => 2, # SQL_ODBC_INTERFACE_CONFORMANCE
12 => 1, # SQL_ODBC_SAG_CLI_CONFORMANCE
15 => 1, # SQL_ODBC_SQL_CONFORMANCE
73 => 'N', # SQL_ODBC_SQL_OPT_IEF
10 => '03.80', # SQL_ODBC_VER
115 => 123, # SQL_OJ_CAPABILITIES
90 => 'Y', # SQL_ORDER_BY_COLUMNS_IN_SELECT
38 => 'Y', # SQL_OUTER_JOINS
115 => 123, # SQL_OUTER_JOIN_CAPABILITIES
39 => '', # SQL_OWNER_TERM
91 => 0, # SQL_OWNER_USAGE
153 => 2, # SQL_PARAM_ARRAY_ROW_COUNTS
154 => 3, # SQL_PARAM_ARRAY_SELECTS
80 => 3, # SQL_POSITIONED_STATEMENTS
79 => 31, # SQL_POS_OPERATIONS
21 => 'N', # SQL_PROCEDURES
40 => '', # SQL_PROCEDURE_TERM
114 => 1, # SQL_QUALIFIER_LOCATION
41 => '.', # SQL_QUALIFIER_NAME_SEPARATOR
42 => 'database', # SQL_QUALIFIER_TERM
92 => 29, # SQL_QUALIFIER_USAGE
93 => 3, # SQL_QUOTED_IDENTIFIER_CASE
11 => 'N', # SQL_ROW_UPDATES
39 => '', # SQL_SCHEMA_TERM
91 => 0, # SQL_SCHEMA_USAGE
43 => 7, # SQL_SCROLL_CONCURRENCY
44 => 17, # SQL_SCROLL_OPTIONS
14 => '\\', # SQL_SEARCH_PATTERN_ESCAPE
13 => makefunk 13, # SQL_SERVER_NAME
94 => 'ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜáíóúñÑ', # SQL_SPECIAL_CHARACTERS
155 => 7, # SQL_SQL92_DATETIME_FUNCTIONS
156 => 0, # SQL_SQL92_FOREIGN_KEY_DELETE_RULE
157 => 0, # SQL_SQL92_FOREIGN_KEY_UPDATE_RULE
158 => 8160, # SQL_SQL92_GRANT
159 => 0, # SQL_SQL92_NUMERIC_VALUE_FUNCTIONS
160 => 0, # SQL_SQL92_PREDICATES
161 => 466, # SQL_SQL92_RELATIONAL_JOIN_OPERATORS
162 => 32640, # SQL_SQL92_REVOKE
163 => 7, # SQL_SQL92_ROW_VALUE_CONSTRUCTOR
164 => 255, # SQL_SQL92_STRING_FUNCTIONS
165 => 0, # SQL_SQL92_VALUE_EXPRESSIONS
118 => 4, # SQL_SQL_CONFORMANCE
166 => 2, # SQL_STANDARD_CLI_CONFORMANCE
167 => 97863, # SQL_STATIC_CURSOR_ATTRIBUTES1
168 => 6016, # SQL_STATIC_CURSOR_ATTRIBUTES2
83 => 7, # SQL_STATIC_SENSITIVITY
50 => 491519, # SQL_STRING_FUNCTIONS
95 => 0, # SQL_SUBQUERIES
51 => 7, # SQL_SYSTEM_FUNCTIONS
45 => 'table', # SQL_TABLE_TERM
109 => 0, # SQL_TIMEDATE_ADD_INTERVALS
110 => 0, # SQL_TIMEDATE_DIFF_INTERVALS
52 => 106495, # SQL_TIMEDATE_FUNCTIONS
46 => 3, # SQL_TRANSACTION_CAPABLE
72 => 15, # SQL_TRANSACTION_ISOLATION_OPTION
46 => 3, # SQL_TXN_CAPABLE
72 => 15, # SQL_TXN_ISOLATION_OPTION
96 => 0, # SQL_UNION
96 => 0, # SQL_UNION_STATEMENT
47 => \&sql_user_name, # SQL_USER_NAME
10000 => 1992, # SQL_XOPEN_CLI_YEAR
);
1;
__END__
DBD/mysql/INSTALL.pod 0000644 00000057715 15033552504 0010135 0 ustar 00 =encoding utf8
=head1 NAME
DBD::mysql::INSTALL - How to install and configure DBD::mysql
=head1 SYNOPSIS
perl Makefile.PL [options]
make
make test
make install
=head1 DESCRIPTION
This document describes the installation and configuration of
DBD::mysql, the Perl DBI driver for the MySQL database. Before
reading on, make sure that you have the prerequisites available:
Perl, MySQL and DBI. For details see the separate section
L</PREREQUISITES>.
Depending on your version of Perl, it might be possible to
use a binary distribution of DBD::mysql. If possible, this is
recommended. Otherwise you need to install from the sources.
If so, you will definitely need a C compiler. Installation
from binaries and sources are both described in separate
sections. L</BINARY INSTALLATION>. L</SOURCE INSTALLATION>.
Finally, if you encounter any problems, do not forget to
read the section on known problems L</KNOWN PROBLEMS>. If
that doesn't help, you should check the section on L</SUPPORT>.
=head1 PREREQUISITES
=over
=item Perl
Preferably a version of Perl, that comes preconfigured with
your system. For example, all Linux and FreeBSD distributions
come with Perl. For Windows, using ActivePerl or Strawberry Perl
is recommended, see L<http://www.activestate.com> and
L<http://www.strawberryperl.com> for details.
=item MySQL
You need not install the actual MySQL database server, the
client files and the development files are sufficient. For
example, Fedora Linux distribution comes with RPM files
(using YUM) B<mysql> and B<mysql-server> (use "yum search"
to find exact package names). These are sufficient, if the MySQL
server is located on a foreign machine. You may also create client
files by compiling from the MySQL source distribution and using
configure --without-server
If you are using Windows and need to compile from sources
(which is only the case if you are not using ActivePerl or
Strawberry Perl),
then you must ensure that the header and library files are
installed. This may require choosing a "Custom installation"
and selecting the appropriate option when running the
MySQL setup program.
=item DBI
DBD::mysql is a DBI driver, hence you need DBI. It is available
from the same source where you got the DBD::mysql distribution
from.
=item C compiler
A C compiler is only required if you install from source. In
most cases there are binary distributions of DBD::mysql
available. However, if you need a C compiler, make sure, that
it is the same C compiler that was used for compiling Perl and
MySQL! Otherwise you will almost definitely encounter problems
because of differences in the underlying C runtime libraries.
In the worst case, this might mean to compile Perl and MySQL
yourself. But believe me, experience shows that a lot of problems
are fixed this way.
=item Gzip libraries
Late versions of MySQL come with support for compression. Thus
it B<may> be required that you have install an RPM package like
libz-devel, libgz-devel or something similar.
=back
=head1 BINARY INSTALLATION
Binary installation is possible in the most cases, depending
on your system.
=head2 Windows
=head3 Strawberry Perl
Strawberry Perl comes bundled with DBD::mysql and the needed
client libraries.
=head3 ActiveState Perl
ActivePerl offers a PPM archive of DBD::mysql. All you need to
do is typing in a cmd.exe window:
ppm install DBD-mysql
This will fetch the module via HTTP and install them. If you
need to use a WWW proxy server, the environment variable
HTTP_proxy must be set:
set HTTP_proxy=http://myproxy.example.com:8080/
ppm install DBD-mysql
Of course you need to replace the host name C<myproxy.example.com>
and the port number C<8080> with your local values.
If the above procedure doesn't work, please upgrade to the latest
version of ActivePerl. ActiveState has a policy where it only
provides access free-of-charge for the PPM mirrors of the last
few stable Perl releases. If you have an older perl, you'd either
need to upgrade your perl or contact ActiveState about a subscription.
=head2 Red Hat Enterprise Linux (RHEL), CentOS and Fedora
Red Hat Enterprise Linux, its community derivatives such as
CentOS, and Fedora come with MySQL and DBD::mysql.
Use the following command to install DBD::mysql:
yum install "perl(DBD::mysql)"
=head2 Debian and Ubuntu
On Debian, Ubuntu and derivatives you can install DBD::mysql from
the repositories with the following command:
sudo apt-get install libdbd-mysql-perl
=head2 SLES and openSUSE
On SUSE Linux Enterprise and the community version openSUSE, you
can install DBD::mysql from the repositories with the following
command:
zypper install perl-DBD-mysql
=head2 Other systems
In the case of other Linux or FreeBSD distributions it is very likely
that all you need comes with your distribution.
I just cannot give you names, as I am not using
these systems.
Please let me know if you find the files in your favorite
Linux or FreeBSD distribution so that I can extend the above list.
=head1 SOURCE INSTALLATION
So you need to install from sources. If you are lucky, the Perl
module C<CPAN> will do all for you, thanks to the excellent work
of Andreas König. Otherwise you will need to do a manual
installation.
All of these installation types have their own section:
L</CPAN installation>, L</Manual installation> and L</Configuration>.
The DBD::mysql Makefile.PL needs to know where to find your MySQL
installation. This may be achieved using command line switches
(see L</Configuration>) or automatically using the mysql_config binary
which comes with most MySQL distributions. If your MySQL distribution
contains mysql_config the easiest method is to ensure this binary
is on your path.
Typically, this is the case if you've installed the mysql library
from your systems' package manager.
e.g.
PATH=$PATH:/usr/local/mysql/bin
export PATH
As stated, to compile DBD::mysql you'll need a C compiler. This should
be the same compiler as the one used to build perl AND the mysql client
libraries. If you're on linux, this is most typically the case and you
need not worry. If you're on UNIX systems, you might want to pay
attention.
Also you'll need to get the MySQL client and development headers on
your system. The easiest is to get these from your package manager.
To run the tests that ship with the module, you'll need access to a
running MySQL server. This can be running on localhost, but it can also
be on a remote machine.
On Fedora the process is as follows. Please note that Fedora actually
ships with MariaDB but not with MySQL. This is not a problem, it
will work just as well.
In this example we install and start a local server for running the
tests against.
yum -y install make gcc mariadb-devel mariadb-libs mariadb-server
yum -y install "perl(Test::Deep)" "perl(Test::More)"
systemctl start mariadb.service
=head2 Environment Variables
For ease of use, you can set environment variables for
DBD::mysql installation. You can set any or all of the options, and
export them by putting them in your .bashrc or the like:
export DBD_MYSQL_CFLAGS=-I/usr/local/mysql/include/mysql
export DBD_MYSQL_LIBS="-L/usr/local/mysql/lib/mysql -lmysqlclient"
export DBD_MYSQL_EMBEDDED=
export DBD_MYSQL_CONFIG=mysql_config
export DBD_MYSQL_NOCATCHSTDERR=0
export DBD_MYSQL_NOFOUNDROWS=0
export DBD_MYSQL_NOSSL=
export DBD_MYSQL_TESTDB=test
export DBD_MYSQL_TESTHOST=localhost
export DBD_MYSQL_TESTPASSWORD=s3kr1+
export DBD_MYSQL_TESTPORT=3306
export DBD_MYSQL_TESTUSER=me
The most useful may be the host, database, port, socket, user, and password.
Installation will first look to your mysql_config, and then your
environment variables, and then it will guess with intelligent defaults.
=head2 CPAN installation
Installation of DBD::mysql can be incredibly easy:
cpan DBD::mysql
Please note that this will only work if the prerequisites are
fulfilled, which means you have a C-compiler installed, and you
have the development headers and mysql client libraries available
on your system.
If you are using the CPAN module for the first time, just answer
the questions by accepting the defaults which are fine in most
cases.
If you cannot get the CPAN module working, you might try manual
installation. If installation with CPAN fails because the your local
settings have been guessed wrong, you need to ensure MySQL's
mysql_config is on your path (see L</SOURCE INSTALLATION>) or
alternatively create a script called C<mysql_config>. This is
described in more details later. L</Configuration>.
=head2 Manual installation
For a manual installation you need to fetch the DBD::mysql
source distribution. The latest version is always available
from
https://metacpan.org/module/DBD::mysql
The name is typically something like
DBD-mysql-4.025.tar.gz
The archive needs to be extracted. On Windows you may use a tool
like 7-zip, on *nix you type
tar xf DBD-mysql-4.025.tar.gz
This will create a subdirectory DBD-mysql-4.025. Enter this
subdirectory and type
perl Makefile.PL
make
make test
(On Windows you may need to replace "make" with "dmake" or
"nmake".) If the tests seem to look fine, you may continue with
make install
If the compilation (make) or tests fail, you might need to
configure some settings.
For example you might choose a different database, the C
compiler or the linker might need some flags. L</Configuration>.
L</Compiler flags>. L</Linker flags>.
For Cygwin there is a special section below.
L</Cygwin>.
=head2 Configuration
The install script "Makefile.PL" can be configured via a lot of
switches. All switches can be used on the command line. For
example, the test database:
perl Makefile.PL --testdb=<db>
If you do not like configuring these switches on the command
line, you may alternatively create a script called C<mysql_config>.
This is described later on.
Available switches are:
=over
=item testdb
Name of the test database, defaults to B<test>.
=item testuser
Name of the test user, defaults to empty. If the name is empty,
then the currently logged in users name will be used.
=item testpassword
Password of the test user, defaults to empty.
=item testhost
Host name or IP number of the test database; defaults to localhost.
=item testport
Port number of the test database
=item ps-protcol=1 or 0
Whether to run the test suite using server prepared statements or driver
emulated prepared statements. ps-protocol=1 means use server prepare,
ps-protocol=0 means driver emulated.
=item cflags
This is a list of flags that you want to give to the C compiler.
The most important flag is the location of the MySQL header files.
For example, on Red Hat Linux the header files are in /usr/include/mysql
and you might try
-I/usr/include/mysql
On Windows the header files may be in C:\mysql\include and you might try
-IC:\mysql\include
The default flags are determined by running
mysql_config --cflags
More details on the C compiler flags can be found in the following
section. L</Compiler flags>.
=item libs
This is a list of flags that you want to give to the linker
or loader. The most important flags are the locations and names
of additional libraries. For example, on Red Hat Linux your
MySQL client libraries are in /usr/lib/mysql and you might try
-L/usr/lib/mysql -lmysqlclient -lz
On Windows the libraries may be in C:\mysql\lib and
-LC:\mysql\lib -lmysqlclient
might be a good choice. The default flags are determined by running
mysql_config --libs
More details on the linker flags can be found in a separate section.
L<Linker flags>.
=back
If a switch is not present on the command line, then the
script C<mysql_config> will be executed. This script comes
as part of the MySQL distribution. For example, to determine
the C compiler flags, we are executing
mysql_config --cflags
mysql_config --libs
If you want to configure your own settings for database name,
database user and so on, then you have to create a script with
the same name, that replies
=head2 Compiler flags
Note: the following info about compiler and linker flags, you shouldn't have
to use these options because Makefile.PL is pretty good at utilizing
mysql_config to get the flags that you need for a successful compile.
It is typically not so difficult to determine the appropriate
flags for the C compiler. The linker flags, which you find in
the next section, are another story.
The determination of the C compiler flags is usually left to
a configuration script called F<mysql_config>, which can be
invoked with
mysql_config --cflags
When doing so, it will emit a line with suggested C compiler
flags, for example like this:
-L/usr/include/mysql
The C compiler must find some header files. Header files have
the extension C<.h>. MySQL header files are, for example,
F<mysql.h> and F<mysql_version.h>. In most cases the header
files are not installed by default. For example, on Windows
it is an installation option of the MySQL setup program
(Custom installation), whether the header files are installed
or not. On Red Hat Linux, you need to install an RPM archive
F<mysql-devel> or F<MySQL-devel>.
If you know the location of the header files, then you will
need to add an option
-L<header directory>
to the C compiler flags, for example C<-L/usr/include/mysql>.
=head2 Linker flags
Appropriate linker flags are the most common source of problems
while installing DBD::mysql. I will only give a rough overview,
you'll find more details in the troubleshooting section.
L</KNOWN PROBLEMS>
The determination of the C compiler flags is usually left to
a configuration script called F<mysql_config>, which can be
invoked with
mysql_config --libs
When doing so, it will emit a line with suggested C compiler
flags, for example like this:
-L'/usr/lib/mysql' -lmysqlclient -lnsl -lm -lz -lcrypt
The following items typically need to be configured for the
linker:
=over
=item The mysqlclient library
The MySQL client library comes as part of the MySQL distribution.
Depending on your system it may be a file called
F<libmysqlclient.a> statically linked library, Unix
F<libmysqlclient.so> dynamically linked library, Unix
F<mysqlclient.lib> statically linked library, Windows
F<mysqlclient.dll> dynamically linked library, Windows
or something similar.
As in the case of the header files, the client library is typically
not installed by default. On Windows you will need to select them
while running the MySQL setup program (Custom installation). On
Red Hat Linux an RPM archive F<mysql-devel> or F<MySQL-devel> must
be installed.
The linker needs to know the location and name of the mysqlclient
library. This can be done by adding the flags
-L<lib directory> -lmysqlclient
or by adding the complete path name. Examples:
-L/usr/lib/mysql -lmysqlclient
-LC:\mysql\lib -lmysqlclient
If you would like to use the static libraries (and there are
excellent reasons to do so), you need to create a separate
directory, copy the static libraries to that place and use
the -L switch above to point to your new directory. For example:
mkdir /tmp/mysql-static
cp /usr/lib/mysql/*.a /tmp/mysql-static
perl Makefile.PL --libs="-L/tmp/mysql-static -lmysqlclient"
make
make test
make install
rm -rf /tmp/mysql-static
=item The gzip library
The MySQL client can use compression when talking to the MySQL
server, a nice feature when sending or receiving large texts over
a slow network.
On Unix you typically find the appropriate file name by running
ldconfig -p | grep libz
ldconfig -p | grep libgz
Once you know the name (libz.a or libgz.a is best), just add it
to the list of linker flags. If this seems to be causing problem
you may also try to link without gzip libraries.
=back
=head1 ENCRYPTED CONNECTIONS via SSL
Connecting to your servers over an encrypted connection (SSL) is only possible
if you enabled this setting at build time. Since version 4.034, this is the
default.
Attempting to connect to a server that requires an encrypted connection without
first having L<DBD::mysql> compiled with the C<--ssl> option will result in
an error that makes things appear as if your password is incorrect.
If you want to compile L<DBD::mysql> without SSL support, which you might
probably only want if you for some reason can't install libssl headers, you
can do this by passing the C<--nossl> option to Makefile.PL or by setting the
DBD_MYSQL_NOSSL environment variable to '1'.
=head1 MARIADB NATIVE CLIENT INSTALLATION
The MariaDB native client is another option for connecting to a MySQL·
database licensed LGPL 2.1. To build DBD::mysql against this client, you
will first need to build the client. Generally, this is done with
the following:
cd path/to/src/mariadb-native-client
cmake -G "Unix Makefiles'
make
sudo make install
Once the client is built and installed, you can build DBD::mysql against
it:
perl Makefile.PL --testuser=xxx --testpassword=xxx --testsocket=/path/to//mysqld.sock --mysql_config=/usr/local/bin/mariadb_config·
make
make test
make install
=head1 SPECIAL SYSTEMS
Below you find information on particular systems:
=head2 Mac OS X
Please see the the post at
L<https://discussions.apple.com/thread/3932531>
(Thanks to Kris Davey for pointing this out to me). I plan to see if I can get the build process
to be more intelligent about using build flags that work. It is very difficult as it's
not a driver problem per se but a problem in how one builds DBD::mysql with a binary client lib
built on a different compiler than the one the user is using.
Quite simply, using the binary MySQL installation from Oracle, you will need to first run:
perl Makefile.PL --mysql_config=/usr/local/mysql-5.6.16-osx10.7-x86_64/bin/mysql_config
There are some runtime issues you may encounter with OS X. Upon
running make test, you might encounter the error:
Error: Can't load '/Users/username/DBD-mysql/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/Users/username/DBD-mysql/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.18.dylib
To solve this issue, you need to set the library path, similar to LD_LIBRARY_PATH on other Unix variants, but on OS X you need to do the following (this is for a binary install of MySQL from Oracle)
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql-5.6.16-osx10.7-x86_64/lib/
=head2 Cygwin
If you are a user of Cygwin you already
know, it contains a nicely running perl 5.6.1, installation of
additional modules usually works like a charm via the standard
procedure of
perl makefile.PL
make
make test
make install
The Windows binary distribution of MySQL runs smoothly under Cygwin.
You can start/stop the server and use all Windows clients without problem.
But to install DBD::mysql you have to take a little special action.
Don't attempt to build DBD::mysql against either the MySQL Windows or
Linux/Unix BINARY distributions: neither will work!
You MUST compile the MySQL clients yourself under Cygwin, to get a
'libmysqlclient.a' compiled under Cygwin. Really! You'll only need
that library and the header files, you don't need any other client parts.
Continue to use the Windows binaries. And don't attempt (currently) to
build the MySQL Server part, it is unnecessary, as MySQL AB does an
excellent job to deliver optimized binaries for the mainstream
operating systems, and it is told, that the server compiled under Cygwin is
unstable.
Install a MySQL server for testing against. You can install the regular
Windows MySQL server package on your Windows machine, or you can also
test against a MySQL server on a remote host.
=head3 Build MySQL clients under Cygwin:
download the MySQL LINUX source from
L<https://www.mysql.com/downloads>,
unpack mysql-<version>.tar.gz into some tmp location and from this directory
run configure:
./configure --prefix=/usr/local/mysql --without-server
This prepares the Makefile with the installed Cygwin features. It
takes some time, but should finish without error. The 'prefix', as
given, installs the whole Cygwin/MySQL thingy into a location not
normally in your PATH, so that you continue to use already installed
Windows binaries. The --without-server parameter tells configure to
only build the clients.
make
This builds all MySQL client parts ... be patient. It should finish
finally without any error.
make install
This installs the compiled client files under /usr/local/mysql/.
Remember, you don't need anything except the library under
/usr/local/mysql/lib and the headers under /usr/local/mysql/include!
Essentially you are now done with this part. If you want, you may try
your compiled binaries shortly; for that, do:
cd /usr/local/mysql/bin
./mysql -h 127.0.0.1
The host (-h) parameter 127.0.0.1 targets the local host, but forces
the mysql client to use a TCP/IP connection. The default would be a
pipe/socket connection (even if you say '-h localhost') and this
doesn't work between Cygwin and Windows (as far as I know).
If you have your MySQL server running on some other box, then please
substitute '127.0.0.1' with the name or IP-number of that box.
Please note, in my environment the 'mysql' client did not accept a
simple RETURN, I had to use CTRL-RETURN to send commands
... strange,
but I didn't attempt to fix that, as we are only interested in the
built lib and headers.
At the 'mysql>' prompt do a quick check:
mysql> use mysql
mysql> show tables;
mysql> select * from db;
mysql> exit
You are now ready to build DBD::mysql!
=head3 compile DBD::mysql
download and extract DBD-mysql-<version>.tar.gz from CPAN
cd into unpacked dir DBD-mysql-<version>
you probably did that already, if you are reading this!
cp /usr/local/mysql/bin/mysql_config .
This copies the executable script mentioned in the DBD::mysql docs
from your just built Cywin/MySQL client directory; it knows about
your Cygwin installation, especially about the right libraries to link
with.
perl Makefile.PL --testhost=127.0.0.1
The --testhost=127.0.0.1 parameter again forces a TCP/IP connection
to the MySQL server on the local host instead of a pipe/socket
connection for the 'make test' phase.
make
This should run without error
make test
make install
This installs DBD::mysql into the Perl hierarchy.
=head1 KNOWN PROBLEMS
=head2 no gzip on your system
Some Linux distributions don't come with a gzip library by default.
Running "make" terminates with an error message like
LD_RUN_PATH="/usr/lib/mysql:/lib:/usr/lib" gcc
-o blib/arch/auto/DBD/mysql/mysql.so -shared
-L/usr/local/lib dbdimp.o mysql.o -L/usr/lib/mysql
-lmysqlclient -lm -L/usr/lib/gcc-lib/i386-redhat-linux/2.96
-lgcc -lz
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: *** [blib/arch/auto/DBD/mysql/mysql.so] Error 1
If this is the case for you, install an RPM archive like
libz-devel, libgz-devel, zlib-devel or gzlib-devel or something
similar.
=head2 different compiler for mysql and perl
If Perl was compiled with gcc or egcs, but MySQL was compiled
with another compiler or on another system, an error message like
this is very likely when running "Make test":
t/00base............install_driver(mysql) failed: Can't load
'../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: _umoddi3
at /usr/local/perl-5.005/lib/5.005/i586-linux-thread/DynaLoader.pm
line 168.
This means, that your linker doesn't include libgcc.a. You have
the following options:
The solution is telling the linker to use libgcc. Run
gcc --print-libgcc-file
to determine the exact location of libgcc.a or for older versions
of gcc
gcc -v
to determine the directory. If you know the directory, add a
-L<directory> -lgcc
to the list of C compiler flags. L</Configuration>. L</Linker flags>.
=head1 SUPPORT
Finally, if everything else fails, you are not alone. First of
all, for an immediate answer, you should look into the archives
of the dbi-users mailing list, which is available at
L<http://groups.google.com/group/perl.dbi.users?hl=en&lr=>
To subscribe to this list, send and email to
dbi-users-subscribe@perl.org
If you don't find an appropriate posting and reply in the
mailing list, please post a question. Typically a reply will
be seen within one or two days.
DBD/NullP.pm 0000644 00000013650 15033552504 0006534 0 ustar 00 use strict;
{
package DBD::NullP;
require DBI;
require Carp;
our @EXPORT = qw(); # Do NOT @EXPORT anything.
our $VERSION = "12.014715";
# $Id: NullP.pm 14714 2011-02-22 17:27:07Z Tim $
#
# Copyright (c) 1994-2007 Tim Bunce
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
our $drh = undef; # holds driver handle once initialised
sub driver{
return $drh if $drh;
my($class, $attr) = @_;
$class .= "::dr";
($drh) = DBI::_new_drh($class, {
'Name' => 'NullP',
'Version' => $VERSION,
'Attribution' => 'DBD Example Null Perl stub by Tim Bunce',
}, [ qw'example implementors private data']);
$drh;
}
sub CLONE {
undef $drh;
}
}
{ package DBD::NullP::dr; # ====== DRIVER ======
our $imp_data_size = 0;
use strict;
sub connect { # normally overridden, but a handy default
my $dbh = shift->SUPER::connect(@_)
or return;
$dbh->STORE(Active => 1);
$dbh;
}
sub DESTROY { undef }
}
{ package DBD::NullP::db; # ====== DATABASE ======
our $imp_data_size = 0;
use strict;
use Carp qw(croak);
# Added get_info to support tests in 10examp.t
sub get_info {
my ($dbh, $type) = @_;
if ($type == 29) { # identifier quote
return '"';
}
return;
}
# Added table_info to support tests in 10examp.t
sub table_info {
my ($dbh, $catalog, $schema, $table, $type) = @_;
my ($outer, $sth) = DBI::_new_sth($dbh, {
'Statement' => 'tables',
});
if (defined($type) && $type eq '%' && # special case for tables('','','','%')
grep {defined($_) && $_ eq ''} ($catalog, $schema, $table)) {
$outer->{dbd_nullp_data} = [[undef, undef, undef, 'TABLE', undef],
[undef, undef, undef, 'VIEW', undef],
[undef, undef, undef, 'ALIAS', undef]];
} elsif (defined($catalog) && $catalog eq '%' && # special case for tables('%','','')
grep {defined($_) && $_ eq ''} ($schema, $table)) {
$outer->{dbd_nullp_data} = [['catalog1', undef, undef, undef, undef],
['catalog2', undef, undef, undef, undef]];
} else {
$outer->{dbd_nullp_data} = [['catalog', 'schema', 'table1', 'TABLE']];
$outer->{dbd_nullp_data} = [['catalog', 'schema', 'table2', 'TABLE']];
$outer->{dbd_nullp_data} = [['catalog', 'schema', 'table3', 'TABLE']];
}
$outer->STORE(NUM_OF_FIELDS => 5);
$sth->STORE(Active => 1);
return $outer;
}
sub prepare {
my ($dbh, $statement)= @_;
my ($outer, $sth) = DBI::_new_sth($dbh, {
'Statement' => $statement,
});
return $outer;
}
sub FETCH {
my ($dbh, $attrib) = @_;
# In reality this would interrogate the database engine to
# either return dynamic values that cannot be precomputed
# or fetch and cache attribute values too expensive to prefetch.
return $dbh->SUPER::FETCH($attrib);
}
sub STORE {
my ($dbh, $attrib, $value) = @_;
# would normally validate and only store known attributes
# else pass up to DBI to handle
if ($attrib eq 'AutoCommit') {
Carp::croak("Can't disable AutoCommit") unless $value;
# convert AutoCommit values to magic ones to let DBI
# know that the driver has 'handled' the AutoCommit attribute
$value = ($value) ? -901 : -900;
} elsif ($attrib eq 'nullp_set_err') {
# a fake attribute to produce a test case where STORE issues a warning
$dbh->set_err($value, $value);
}
return $dbh->SUPER::STORE($attrib, $value);
}
sub ping { 1 }
sub disconnect {
shift->STORE(Active => 0);
}
}
{ package DBD::NullP::st; # ====== STATEMENT ======
our $imp_data_size = 0;
use strict;
sub bind_param {
my ($sth, $param, $value, $attr) = @_;
$sth->{ParamValues}{$param} = $value;
$sth->{ParamAttr}{$param} = $attr
if defined $attr; # attr is sticky if not explicitly set
return 1;
}
sub execute {
my $sth = shift;
$sth->bind_param($_, $_[$_-1]) for (1..@_);
if ($sth->{Statement} =~ m/^ \s* SELECT \s+/xmsi) {
$sth->STORE(NUM_OF_FIELDS => 1);
$sth->{NAME} = [ "fieldname" ];
# just for the sake of returning something, we return the params
my $params = $sth->{ParamValues} || {};
$sth->{dbd_nullp_data} = [ @{$params}{ sort keys %$params } ];
$sth->STORE(Active => 1);
}
# force a sleep - handy for testing
elsif ($sth->{Statement} =~ m/^ \s* SLEEP \s+ (\S+) /xmsi) {
my $secs = $1;
if (eval { require Time::HiRes; defined &Time::HiRes::sleep }) {
Time::HiRes::sleep($secs);
}
else {
sleep $secs;
}
}
# force an error - handy for testing
elsif ($sth->{Statement} =~ m/^ \s* ERROR \s+ (\d+) \s* (.*) /xmsi) {
return $sth->set_err($1, $2);
}
# anything else is silently ignored, successfully
1;
}
sub fetchrow_arrayref {
my $sth = shift;
my $data = shift @{$sth->{dbd_nullp_data}};
if (!$data || !@$data) {
$sth->finish; # no more data so finish
return undef;
}
return $sth->_set_fbav($data);
}
*fetch = \&fetchrow_arrayref; # alias
sub FETCH {
my ($sth, $attrib) = @_;
# would normally validate and only fetch known attributes
# else pass up to DBI to handle
return $sth->SUPER::FETCH($attrib);
}
sub STORE {
my ($sth, $attrib, $value) = @_;
# would normally validate and only store known attributes
# else pass up to DBI to handle
return $sth->SUPER::STORE($attrib, $value);
}
}
1;
DBD/File/Developers.pod 0000644 00000050166 15033552504 0010642 0 ustar 00 =head1 NAME
DBD::File::Developers - Developers documentation for DBD::File
=head1 SYNOPSIS
package DBD::myDriver;
use base qw( DBD::File );
sub driver
{
...
my $drh = $proto->SUPER::driver ($attr);
...
return $drh->{class};
}
sub CLONE { ... }
package DBD::myDriver::dr;
@ISA = qw( DBD::File::dr );
sub data_sources { ... }
...
package DBD::myDriver::db;
@ISA = qw( DBD::File::db );
sub init_valid_attributes { ... }
sub init_default_attributes { ... }
sub set_versions { ... }
sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; ... }
sub validate_FETCH_attr { my ($dbh, $attrib) = @_; ... }
sub get_myd_versions { ... }
package DBD::myDriver::st;
@ISA = qw( DBD::File::st );
sub FETCH { ... }
sub STORE { ... }
package DBD::myDriver::Statement;
@ISA = qw( DBD::File::Statement );
package DBD::myDriver::Table;
@ISA = qw( DBD::File::Table );
my %reset_on_modify = (
myd_abc => "myd_foo",
myd_mno => "myd_bar",
);
__PACKAGE__->register_reset_on_modify (\%reset_on_modify);
my %compat_map = (
abc => 'foo_abc',
xyz => 'foo_xyz',
);
__PACKAGE__->register_compat_map (\%compat_map);
sub bootstrap_table_meta { ... }
sub init_table_meta { ... }
sub table_meta_attr_changed { ... }
sub open_data { ... }
sub fetch_row { ... }
sub push_row { ... }
sub push_names { ... }
# optimize the SQL engine by add one or more of
sub update_current_row { ... }
# or
sub update_specific_row { ... }
# or
sub update_one_row { ... }
# or
sub insert_new_row { ... }
# or
sub delete_current_row { ... }
# or
sub delete_one_row { ... }
=head1 DESCRIPTION
This document describes how DBD developers can write DBD::File based DBI
drivers. It supplements L<DBI::DBD> and L<DBI::DBD::SqlEngine::Developers>,
which you should read first.
=head1 CLASSES
Each DBI driver must provide a package global C<driver> method and three
DBI related classes:
=over 4
=item DBD::File::dr
Driver package, contains the methods DBI calls indirectly via DBI
interface:
DBI->connect ('DBI:DBM:', undef, undef, {})
# invokes
package DBD::DBM::dr;
@DBD::DBM::dr::ISA = qw( DBD::File::dr );
sub connect ($$;$$$)
{
...
}
Similar for C<< data_sources >> and C<< disconnect_all >>.
Pure Perl DBI drivers derived from DBD::File do not usually need to
override any of the methods provided through the DBD::XXX::dr package
however if you need additional initialization in the connect method
you may need to.
=item DBD::File::db
Contains the methods which are called through DBI database handles
(C<< $dbh >>). e.g.,
$sth = $dbh->prepare ("select * from foo");
# returns the f_encoding setting for table foo
$dbh->csv_get_meta ("foo", "f_encoding");
DBD::File provides the typical methods required here. Developers who
write DBI drivers based on DBD::File need to override the methods C<<
set_versions >> and C<< init_valid_attributes >>.
=item DBD::File::st
Contains the methods to deal with prepared statement handles. e.g.,
$sth->execute () or die $sth->errstr;
=back
=head2 DBD::File
This is the main package containing the routines to initialize
DBD::File based DBI drivers. Primarily the C<< DBD::File::driver >>
method is invoked, either directly from DBI when the driver is
initialized or from the derived class.
package DBD::DBM;
use base qw( DBD::File );
sub driver
{
my ($class, $attr) = @_;
...
my $drh = $class->SUPER::driver ($attr);
...
return $drh;
}
It is not necessary to implement your own driver method as long as
additional initialization (e.g. installing more private driver
methods) is not required. You do not need to call C<< setup_driver >>
as DBD::File takes care of it.
=head2 DBD::File::dr
The driver package contains the methods DBI calls indirectly via the DBI
interface (see L<DBI/DBI Class Methods>).
DBD::File based DBI drivers usually do not need to implement anything here,
it is enough to do the basic initialization:
package DBD:XXX::dr;
@DBD::XXX::dr::ISA = qw (DBD::File::dr);
$DBD::XXX::dr::imp_data_size = 0;
$DBD::XXX::dr::data_sources_attr = undef;
$DBD::XXX::ATTRIBUTION = "DBD::XXX $DBD::XXX::VERSION by Hans Mustermann";
=head2 DBD::File::db
This package defines the database methods, which are called via the DBI
database handle C<< $dbh >>.
Methods provided by DBD::File:
=over 4
=item ping
Simply returns the content of the C<< Active >> attribute. Override
when your driver needs more complicated actions here.
=item prepare
Prepares a new SQL statement to execute. Returns a statement handle,
C<< $sth >> - instance of the DBD:XXX::st. It is neither required nor
recommended to override this method.
=item FETCH
Fetches an attribute of a DBI database object. Private handle attributes
must have a prefix (this is mandatory). If a requested attribute is
detected as a private attribute without a valid prefix, the driver prefix
(written as C<$drv_prefix>) is added.
The driver prefix is extracted from the attribute name and verified against
C<< $dbh->{$drv_prefix . "valid_attrs"} >> (when it exists). If the
requested attribute value is not listed as a valid attribute, this method
croaks. If the attribute is valid and readonly (listed in C<< $dbh->{
$drv_prefix . "readonly_attrs" } >> when it exists), a real copy of the
attribute value is returned. So it's not possible to modify
C<f_valid_attrs> from outside of DBD::File::db or a derived class.
=item STORE
Stores a database private attribute. Private handle attributes must have a
prefix (this is mandatory). If a requested attribute is detected as a private
attribute without a valid prefix, the driver prefix (written as
C<$drv_prefix>) is added. If the database handle has an attribute
C<${drv_prefix}_valid_attrs> - for attribute names which are not listed in
that hash, this method croaks. If the database handle has an attribute
C<${drv_prefix}_readonly_attrs>, only attributes which are not listed there
can be stored (once they are initialized). Trying to overwrite such an
immutable attribute forces this method to croak.
An example of a valid attributes list can be found in
C<< DBD::File::db::init_valid_attributes >>.
=item set_versions
This method sets the attribute C<f_version> with the version of DBD::File.
This method is called at the begin of the C<connect ()> phase.
When overriding this method, do not forget to invoke the superior one.
=item init_valid_attributes
This method is called after the database handle is instantiated as the
first attribute initialization.
C<< DBD::File::db::init_valid_attributes >> initializes the attributes
C<f_valid_attrs> and C<f_readonly_attrs>.
When overriding this method, do not forget to invoke the superior one,
preferably before doing anything else. Compatibility table attribute
access must be initialized here to allow DBD::File to instantiate the
map tie:
# for DBD::CSV
$dbh->{csv_meta} = "csv_tables";
# for DBD::DBM
$dbh->{dbm_meta} = "dbm_tables";
# for DBD::AnyData
$dbh->{ad_meta} = "ad_tables";
=item init_default_attributes
This method is called after the database handle is instantiated to
initialize the default attributes.
C<< DBD::File::db::init_default_attributes >> initializes the attributes
C<f_dir>, C<f_meta>, C<f_meta_map>, C<f_version>.
When the derived implementor class provides the attribute to validate
attributes (e.g. C<< $dbh->{dbm_valid_attrs} = {...}; >>) or the attribute
containing the immutable attributes (e.g.
C<< $dbh->{dbm_readonly_attrs} = {...}; >>), the attributes
C<drv_valid_attrs>, C<drv_readonly_attrs>, C<drv_version> and C<drv_meta>
are added (when available) to the list of valid and immutable attributes
(where C<drv_> is interpreted as the driver prefix).
If C<drv_meta> is set, an attribute with the name in C<drv_meta> is
initialized providing restricted read/write access to the meta data of the
tables using C<DBD::File::TieTables> in the first (table) level and
C<DBD::File::TieMeta> for the meta attribute level. C<DBD::File::TieTables>
uses C<DBD::DRV::Table::get_table_meta> to initialize the second level
tied hash on FETCH/STORE. The C<DBD::File::TieMeta> class uses
C<DBD::DRV::Table::get_table_meta_attr> to FETCH attribute values and
C<DBD::DRV::Table::set_table_meta_attr> to STORE attribute values. This
allows it to map meta attributes for compatibility reasons.
=item get_single_table_meta
=item get_file_meta
Retrieve an attribute from a table's meta information. The method
signature is C<< get_file_meta ($dbh, $table, $attr) >>. This method
is called by the injected db handle method C<< ${drv_prefix}get_meta >>.
While get_file_meta allows C<$table> or C<$attr> to be a list of tables or
attributes to retrieve, get_single_table_meta allows only one table name
and only one attribute name. A table name of C<'.'> (single dot) is
interpreted as the default table and this will retrieve the appropriate
attribute globally from the dbh. This has the same restrictions as
C<< $dbh->{$attrib} >>.
get_file_meta allows C<'+'> and C<'*'> as wildcards for table names and
C<$table> being a regular expression matching against the table names
(evaluated without the default table). The table name C<'*'> is
I<all currently known tables, including the default one>. The table
name C<'+'> is I<all table names which conform to
ANSI file name restrictions> (/^[_A-Za-z0-9]+$/).
The table meta information is retrieved using the get_table_meta and
get_table_meta_attr methods of the table class of the implementation.
=item set_single_table_meta
=item set_file_meta
Sets an attribute in a table's meta information. The method signature is
C<< set_file_meta ($dbh, $table, $attr, $value) >>. This method is called
by the injected db handle method C<< ${drv_prefix}set_meta >>.
While set_file_meta allows C<$table> to be a list of tables and C<$attr>
to be a hash of several attributes to set, set_single_table_meta allows
only one table name and only one attribute name/value pair.
The wildcard characters for the table name are the same as for
get_file_meta.
The table meta information is updated using the get_table_meta and
set_table_meta_attr methods of the table class of the implementation.
=item clear_file_meta
Clears all meta information cached about a table. The method signature is
C<< clear_file_meta ($dbh, $table) >>. This method is called
by the injected db handle method C<< ${drv_prefix}clear_meta >>.
=back
=head2 DBD::File::st
Contains the methods to deal with prepared statement handles:
=over 4
=item FETCH
Fetches statement handle attributes. Supported attributes (for full overview
see L<DBI/Statement Handle Attributes>) are C<NAME>, C<TYPE>, C<PRECISION>
and C<NULLABLE> in case that SQL::Statement is used as SQL execution engine
and a statement is successful prepared. When SQL::Statement has additional
information about a table, those information are returned. Otherwise, the
same defaults as in L<DBI::DBD::SqlEngine> are used.
This method usually requires extending in a derived implementation.
See L<DBD::CSV> or L<DBD::DBM> for some example.
=back
=head2 DBD::File::TableSource::FileSystem
Provides data sources and table information on database driver and database
handle level.
package DBD::File::TableSource::FileSystem;
sub data_sources ($;$)
{
my ($class, $drh, $attrs) = @_;
...
}
sub avail_tables
{
my ($class, $drh) = @_;
...
}
The C<data_sources> method is called when the user invokes any of the
following:
@ary = DBI->data_sources ($driver);
@ary = DBI->data_sources ($driver, \%attr);
@ary = $dbh->data_sources ();
@ary = $dbh->data_sources (\%attr);
The C<avail_tables> method is called when the user invokes any of the
following:
@names = $dbh->tables ($catalog, $schema, $table, $type);
$sth = $dbh->table_info ($catalog, $schema, $table, $type);
$sth = $dbh->table_info ($catalog, $schema, $table, $type, \%attr);
$dbh->func ("list_tables");
Every time where an C<\%attr> argument can be specified, this C<\%attr>
object's C<sql_table_source> attribute is preferred over the C<$dbh>
attribute or the driver default.
=head2 DBD::File::DataSource::Stream
package DBD::File::DataSource::Stream;
@DBD::File::DataSource::Stream::ISA = 'DBI::DBD::SqlEngine::DataSource';
sub complete_table_name
{
my ($self, $meta, $file, $respect_case) = @_;
...
}
Clears all meta attributes identifying a file: C<f_fqfn>, C<f_fqbn> and
C<f_fqln>. The table name is set according to C<$respect_case> and
C<< $meta->{sql_identifier_case} >> (SQL_IC_LOWER, SQL_IC_UPPER).
package DBD::File::DataSource::Stream;
sub apply_encoding
{
my ($self, $meta, $fn) = @_;
...
}
Applies the encoding from I<meta information> (C<< $meta->{f_encoding} >>)
to the file handled opened in C<open_data>.
package DBD::File::DataSource::Stream;
sub open_data
{
my ($self, $meta, $attrs, $flags) = @_;
...
}
Opens (C<dup (2)>) the file handle provided in C<< $meta->{f_file} >>.
package DBD::File::DataSource::Stream;
sub can_flock { ... }
Returns whether C<flock (2)> is available or not (avoids retesting in
subclasses).
=head2 DBD::File::DataSource::File
package DBD::File::DataSource::File;
sub complete_table_name ($$;$)
{
my ($self, $meta, $table, $respect_case) = @_;
...
}
The method C<complete_table_name> tries to map a filename to the associated
table name. It is called with a partially filled meta structure for the
resulting table containing at least the following attributes:
C<< f_ext >>, C<< f_dir >>, C<< f_lockfile >> and C<< sql_identifier_case >>.
If a file/table map can be found then this method sets the C<< f_fqfn
>>, C<< f_fqbn >>, C<< f_fqln >> and C<< table_name >> attributes in
the meta structure. If a map cannot be found the table name will be
undef.
package DBD::File::DataSource::File;
sub open_data ($)
{
my ($self, $meta, $attrs, $flags) = @_;
...
}
Depending on the attributes set in the table's meta data, the
following steps are performed. Unless C<< f_dontopen >> is set to a
true value, C<< f_fqfn >> must contain the full qualified file name
for the table to work on (file2table ensures this). The encoding in
C<< f_encoding >> is applied if set and the file is opened. If
C<<f_fqln >> (full qualified lock name) is set, this file is opened,
too. Depending on the value in C<< f_lock >>, the appropriate lock is
set on the opened data file or lock file.
=head2 DBD::File::Statement
Derives from DBI::SQL::Nano::Statement to provide following method:
=over 4
=item open_table
Implements the open_table method required by L<SQL::Statement> and
L<DBI::SQL::Nano>. All the work for opening the file(s) belonging to the
table is handled and parametrized in DBD::File::Table. Unless you intend
to add anything to the following implementation, an empty DBD::XXX::Statement
package satisfies DBD::File.
sub open_table ($$$$$)
{
my ($self, $data, $table, $createMode, $lockMode) = @_;
my $class = ref $self;
$class =~ s/::Statement/::Table/;
my $flags = {
createMode => $createMode,
lockMode => $lockMode,
};
$self->{command} eq "DROP" and $flags->{dropMode} = 1;
return $class->new ($data, { table => $table }, $flags);
} # open_table
=back
=head2 DBD::File::Table
Derives from DBI::SQL::Nano::Table and provides physical file access for
the table data which are stored in the files.
=over 4
=item bootstrap_table_meta
Initializes a table meta structure. Can be safely overridden in a
derived class, as long as the C<< SUPER >> method is called at the end
of the overridden method.
It copies the following attributes from the database into the table meta data
C<< f_dir >>, C<< f_ext >>, C<< f_encoding >>, C<< f_lock >>, C<< f_schema >>
and C<< f_lockfile >> and makes them sticky to the table.
This method should be called before you attempt to map between file
name and table name to ensure the correct directory, extension etc. are
used.
=item init_table_meta
Initializes more attributes of the table meta data - usually more
expensive ones (e.g. those which require class instantiations) - when
the file name and the table name could mapped.
=item get_table_meta
Returns the table meta data. If there are none for the required
table, a new one is initialized. When it fails, nothing is
returned. On success, the name of the table and the meta data
structure is returned.
=item get_table_meta_attr
Returns a single attribute from the table meta data. If the attribute
name appears in C<%compat_map>, the attribute name is updated from
there.
=item set_table_meta_attr
Sets a single attribute in the table meta data. If the attribute
name appears in C<%compat_map>, the attribute name is updated from
there.
=item table_meta_attr_changed
Called when an attribute of the meta data is modified.
If the modified attribute requires to reset a calculated attribute, the
calculated attribute is reset (deleted from meta data structure) and
the I<initialized> flag is removed, too. The decision is made based on
C<%register_reset_on_modify>.
=item register_reset_on_modify
Allows C<set_table_meta_attr> to reset meta attributes when special
attributes are modified. For DBD::File, modifying one of C<f_file>, C<f_dir>,
C<f_ext> or C<f_lockfile> will reset C<f_fqfn>. DBD::DBM extends the
list for C<dbm_type> and C<dbm_mldbm> to reset the value of C<dbm_tietype>.
If your DBD has calculated values in the meta data area, then call
C<register_reset_on_modify>:
my %reset_on_modify = (xxx_foo => "xxx_bar");
__PACKAGE__->register_reset_on_modify (\%reset_on_modify);
=item register_compat_map
Allows C<get_table_meta_attr> and C<set_table_meta_attr> to update the
attribute name to the current favored one:
# from DBD::DBM
my %compat_map = (dbm_ext => "f_ext");
__PACKAGE__->register_compat_map (\%compat_map);
=item open_file
Called to open the table's data file.
Depending on the attributes set in the table's meta data, the
following steps are performed. Unless C<< f_dontopen >> is set to a
true value, C<< f_fqfn >> must contain the full qualified file name
for the table to work on (file2table ensures this). The encoding in
C<< f_encoding >> is applied if set and the file is opened. If
C<<f_fqln >> (full qualified lock name) is set, this file is opened,
too. Depending on the value in C<< f_lock >>, the appropriate lock is
set on the opened data file or lock file.
After this is done, a derived class might add more steps in an overridden
C<< open_file >> method.
=item new
Instantiates the table. This is done in 3 steps:
1. get the table meta data
2. open the data file
3. bless the table data structure using inherited constructor new
It is not recommended to override the constructor of the table class.
Find a reasonable place to add you extensions in one of the above four
methods.
=item drop
Implements the abstract table method for the C<< DROP >>
command. Discards table meta data after all files belonging to the
table are closed and unlinked.
Overriding this method might be reasonable in very rare cases.
=item seek
Implements the abstract table method used when accessing the table from the
engine. C<< seek >> is called every time the engine uses dumb algorithms
for iterating over the table content.
=item truncate
Implements the abstract table method used when dumb table algorithms
for C<< UPDATE >> or C<< DELETE >> need to truncate the table storage
after the last written row.
=back
You should consult the documentation of C<< SQL::Eval::Table >> (see
L<SQL::Eval>) to get more information about the abstract methods of the
table's base class you have to override and a description of the table
meta information expected by the SQL engines.
=head1 AUTHOR
The module DBD::File is currently maintained by
H.Merijn Brand < h.m.brand at xs4all.nl > and
Jens Rehsack < rehsack at googlemail.com >
The original author is Jochen Wiedmann.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2010-2013 by H.Merijn Brand & Jens Rehsack
All rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=cut
DBD/File/Roadmap.pod 0000644 00000013473 15033552504 0010115 0 ustar 00 =head1 NAME
DBD::File::Roadmap - Planned Enhancements for DBD::File and pure Perl DBD's
Jens Rehsack - May 2010
=head1 SYNOPSIS
This document gives a high level overview of the future of the DBD::File DBI
driver and groundwork for pure Perl DBI drivers.
The planned enhancements cover features, testing, performance, reliability,
extensibility and more.
=head1 CHANGES AND ENHANCEMENTS
=head2 Features
There are some features missing we would like to add, but there is
no time plan:
=over 4
=item LOCK TABLE
The newly implemented internal common table meta storage area would allow
us to implement LOCK TABLE support based on file system C<flock ()>
support.
=item Transaction support
While DBD::AnyData recommends explicitly committing by importing and
exporting tables, DBD::File might be enhanced in a future version to allow
transparent transactions using the temporary tables of SQL::Statement as
shadow (dirty) tables.
Transaction support will heavily rely on lock table support.
=item Data Dictionary Persistence
SQL::Statement provides dictionary information when a "CREATE TABLE ..."
statement is executed. This dictionary is preserved for some statement
handle attribute fetches (as C<NULLABLE> or C<PRECISION>).
It is planned to extend DBD::File to support data dictionaries to work
on the tables in it. It is not planned to support one table in different
dictionaries, but you can have several dictionaries in one directory.
=item SQL Engine selecting on connect
Currently the SQL engine selected is chosen during the loading of the module
L<DBI::SQL::Nano>. Ideally end users should be able to select the engine
used in C<< DBI->connect () >> with a special DBD::File attribute.
=back
Other points of view to the planned features (and more features for the
SQL::Statement engine) are shown in L<SQL::Statement::Roadmap>.
=head2 Testing
DBD::File and the dependent DBD::DBM requires a lot more automated tests
covering API stability and compatibility with optional modules
like SQL::Statement.
=head2 Performance
Several arguments for support of features like indexes on columns
and cursors are made for DBD::CSV (which is a DBD::File based driver,
too). Similar arguments could be made for DBD::DBM, DBD::AnyData,
DBD::RAM or DBD::PO etc.
To improve the performance of the underlying SQL engines, a clean
re-implementation seems to be required. Currently both engines are
prematurely optimized and therefore it is not trivial to provide
further optimization without the risk of breaking existing features.
Join the DBI developers IRC channel at L<irc://irc.perl.org/dbi> to
participate or post to the DBI Developers Mailing List.
=head2 Reliability
DBD::File currently lacks the following points:
=over 4
=item duplicate table names
It is currently possible to access a table quoted with a relative path
(a) and additionally using an absolute path (b). If (a) and (b) are
the same file that is not recognized (except for
flock protection handled by the Operating System) and two independent
tables are handled.
=item invalid table names
The current implementation does not prevent someone choosing a
directory name as a physical file name for the table to open.
=back
=head2 Extensibility
I (Jens Rehsack) have some (partially for example only) DBD's in mind:
=over 4
=item DBD::Sys
Derive DBD::Sys from a common code base shared with DBD::File which handles
all the emulation DBI needs (as getinfo, SQL engine handling, ...)
=item DBD::Dir
Provide a DBD::File derived to work with fixed table definitions through the
file system to demonstrate how DBI / Pure Perl DBDs could handle databases
with hierarchical structures.
=item DBD::Join
Provide a DBI driver which is able to manage multiple connections to other
Databases (as DBD::Multiplex), but allow them to point to different data
sources and allow joins between the tables of them:
# Example
# Let table 'lsof' being a table in DBD::Sys giving a list of open files using lsof utility
# Let table 'dir' being a atable from DBD::Dir
$sth = $dbh->prepare( "select * from dir,lsof where path='/documents' and dir.entry = lsof.filename" )
$sth->execute(); # gives all open files in '/documents'
...
# Let table 'filesys' a DBD::Sys table of known file systems on current host
# Let table 'applications' a table of your Configuration Management Database
# where current applications (relocatable, with mountpoints for filesystems)
# are stored
$sth = dbh->prepare( "select * from applications,filesys where " .
"application.mountpoint = filesys.mountpoint and ".
"filesys.mounted is true" );
$sth->execute(); # gives all currently mounted applications on this host
=back
=head1 PRIORITIES
Our priorities are focused on current issues. Initially many new test
cases for DBD::File and DBD::DBM should be added to the DBI test
suite. After that some additional documentation on how to use the
DBD::File API will be provided.
Any additional priorities will come later and can be modified by (paying)
users.
=head1 RESOURCES AND CONTRIBUTIONS
See L<http://dbi.perl.org/contributing> for I<how you can help>.
If your company has benefited from DBI, please consider if
it could make a donation to The Perl Foundation "DBI Development"
fund at L<http://dbi.perl.org/donate> to secure future development.
Alternatively, if your company would benefit from a specific new
DBI feature, please consider sponsoring it's development through
the options listed in the section "Commercial Support from the Author"
on L<http://dbi.perl.org/support/>.
Using such targeted financing allows you to contribute to DBI
development and rapidly get something specific and directly valuable
to you in return.
My company also offers annual support contracts for the DBI, which
provide another way to support the DBI and get something specific
in return. Contact me for details.
Thank you.
=cut
DBD/File/HowTo.pod 0000644 00000011624 15033552504 0007566 0 ustar 00 =head1 NAME
DBD::File::HowTo - Guide to create DBD::File based driver
=head1 SYNOPSIS
perldoc DBD::File::HowTo
perldoc DBI
perldoc DBI::DBD
perldoc DBD::File::Developers
perldoc DBI::DBD::SqlEngine::Developers
perldoc DBI::DBD::SqlEngine
perldoc SQL::Eval
perldoc DBI::DBD::SqlEngine::HowTo
perldoc SQL::Statement::Embed
perldoc DBD::File
perldoc DBD::File::HowTo
perldoc DBD::File::Developers
=head1 DESCRIPTION
This document provides a step-by-step guide, how to create a new
C<DBD::File> based DBD. It expects that you carefully read the L<DBI>
documentation and that you're familiar with L<DBI::DBD> and had read and
understood L<DBD::ExampleP>.
This document addresses experienced developers who are really sure that
they need to invest time when writing a new DBI Driver. Writing a DBI
Driver is neither a weekend project nor an easy job for hobby coders
after work. Expect one or two man-month of time for the first start.
Those who are still reading, should be able to sing the rules of
L<DBI::DBD/CREATING A NEW DRIVER>.
Of course, DBD::File is a DBI::DBD::SqlEngine and you surely read
L<DBI::DBD::SqlEngine::HowTo> before continuing here.
=head1 CREATING DRIVER CLASSES
Do you have an entry in DBI's DBD registry? For this guide, a prefix of
C<foo_> is assumed.
=head2 Sample Skeleton
package DBD::Foo;
use strict;
use warnings;
use vars qw(@ISA $VERSION);
use base qw(DBD::File);
use DBI ();
$VERSION = "0.001";
package DBD::Foo::dr;
use vars qw(@ISA $imp_data_size);
@ISA = qw(DBD::File::dr);
$imp_data_size = 0;
package DBD::Foo::db;
use vars qw(@ISA $imp_data_size);
@ISA = qw(DBD::File::db);
$imp_data_size = 0;
package DBD::Foo::st;
use vars qw(@ISA $imp_data_size);
@ISA = qw(DBD::File::st);
$imp_data_size = 0;
package DBD::Foo::Statement;
use vars qw(@ISA);
@ISA = qw(DBD::File::Statement);
package DBD::Foo::Table;
use vars qw(@ISA);
@ISA = qw(DBD::File::Table);
1;
Tiny, eh? And all you have now is a DBD named foo which will is able to
deal with temporary tables, as long as you use L<SQL::Statement>. In
L<DBI::SQL::Nano> environments, this DBD can do nothing.
=head2 Start over
Based on L<DBI::DBD::SqlEngine::HowTo>, we're now having a driver which
could do basic things. Of course, it should now derive from DBD::File
instead of DBI::DBD::SqlEngine, shouldn't it?
DBD::File extends DBI::DBD::SqlEngine to deal with any kind of files.
In principle, the only extensions required are to the table class:
package DBD::Foo::Table;
sub bootstrap_table_meta
{
my ( $self, $dbh, $meta, $table ) = @_;
# initialize all $meta attributes which might be relevant for
# file2table
return $self->SUPER::bootstrap_table_meta($dbh, $meta, $table);
}
sub init_table_meta
{
my ( $self, $dbh, $meta, $table ) = @_;
# called after $meta contains the results from file2table
# initialize all missing $meta attributes
$self->SUPER::init_table_meta( $dbh, $meta, $table );
}
In case C<DBD::File::Table::open_file> doesn't open the files as the driver
needs that, override it!
sub open_file
{
my ( $self, $meta, $attrs, $flags ) = @_;
# ensure that $meta->{f_dontopen} is set
$self->SUPER::open_file( $meta, $attrs, $flags );
# now do what ever needs to be done
}
Combined with the methods implemented using the L<SQL::Statement::Embed>
guide, the table is full working and you could try a start over.
=head2 User comfort
C<DBD::File> since C<0.39> consolidates all persistent meta data of a table
into a single structure stored in C<< $dbh->{f_meta} >>. With C<DBD::File>
version C<0.41> and C<DBI::DBD::SqlEngine> version C<0.05>, this
consolidation moves to L<DBI::DBD::SqlEngine>. It's still the
C<< $dbh->{$drv_prefix . "_meta"} >> attribute which cares, so what you
learned at this place before, is still valid.
sub init_valid_attributes
{
my $dbh = $_[0];
$dbh->SUPER::init_valid_attributes ();
$dbh->{foo_valid_attrs} = { ... };
$dbh->{foo_readonly_attrs} = { ... };
$dbh->{foo_meta} = "foo_tables";
return $dbh;
}
See updates at L<DBI::DBD::SqlEngine::HowTo/User comfort>.
=head2 Testing
Now you should have your own DBD::File based driver. Was easy, wasn't it?
But does it work well? Prove it by writing tests and remember to use
dbd_edit_mm_attribs from L<DBI::DBD> to ensure testing even rare cases.
=head1 AUTHOR
This guide is written by Jens Rehsack. DBD::File is written by Jochen
Wiedmann and Jeff Zucker.
The module DBD::File is currently maintained by
H.Merijn Brand < h.m.brand at xs4all.nl > and
Jens Rehsack < rehsack at googlemail.com >
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2010 by H.Merijn Brand & Jens Rehsack
All rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=cut
DBD/mysql.pm 0000644 00000175106 15033552504 0006654 0 ustar 00 #!/usr/bin/perl
use strict;
use warnings;
require 5.008_001; # just as DBI
package DBD::mysql;
use DBI;
use DynaLoader();
use Carp;
our @ISA = qw(DynaLoader);
# please make sure the sub-version does not increase above '099'
# SQL_DRIVER_VER is formatted as dd.dd.dddd
# for version 5.x please switch to 5.00(_00) version numbering
# keep $VERSION in Bundle/DBD/mysql.pm in sync
our $VERSION = '4.046';
bootstrap DBD::mysql $VERSION;
our $err = 0; # holds error code for DBI::err
our $errstr = ""; # holds error string for DBI::errstr
our $drh = undef; # holds driver handle once initialised
my $methods_are_installed = 0;
sub driver{
return $drh if $drh;
my($class, $attr) = @_;
$class .= "::dr";
# not a 'my' since we use it above to prevent multiple drivers
$drh = DBI::_new_drh($class, { 'Name' => 'mysql',
'Version' => $VERSION,
'Err' => \$DBD::mysql::err,
'Errstr' => \$DBD::mysql::errstr,
'Attribution' => 'DBD::mysql by Patrick Galbraith'
});
if (!$methods_are_installed) {
DBD::mysql::db->install_method('mysql_fd');
DBD::mysql::db->install_method('mysql_async_result');
DBD::mysql::db->install_method('mysql_async_ready');
DBD::mysql::st->install_method('mysql_async_result');
DBD::mysql::st->install_method('mysql_async_ready');
$methods_are_installed++;
}
$drh;
}
sub CLONE {
undef $drh;
}
sub _OdbcParse($$$) {
my($class, $dsn, $hash, $args) = @_;
my($var, $val);
if (!defined($dsn)) {
return;
}
while (length($dsn)) {
if ($dsn =~ /([^:;]*\[.*]|[^:;]*)[:;](.*)/) {
$val = $1;
$dsn = $2;
$val =~ s/\[|]//g; # Remove [] if present, the rest of the code prefers plain IPv6 addresses
} else {
$val = $dsn;
$dsn = '';
}
if ($val =~ /([^=]*)=(.*)/) {
$var = $1;
$val = $2;
if ($var eq 'hostname' || $var eq 'host') {
$hash->{'host'} = $val;
} elsif ($var eq 'db' || $var eq 'dbname') {
$hash->{'database'} = $val;
} else {
$hash->{$var} = $val;
}
} else {
foreach $var (@$args) {
if (!defined($hash->{$var})) {
$hash->{$var} = $val;
last;
}
}
}
}
}
sub _OdbcParseHost ($$) {
my($class, $dsn) = @_;
my($hash) = {};
$class->_OdbcParse($dsn, $hash, ['host', 'port']);
($hash->{'host'}, $hash->{'port'});
}
sub AUTOLOAD {
my ($meth) = $DBD::mysql::AUTOLOAD;
my ($smeth) = $meth;
$smeth =~ s/(.*)\:\://;
my $val = constant($smeth, @_ ? $_[0] : 0);
if ($! == 0) { eval "sub $meth { $val }"; return $val; }
Carp::croak "$meth: Not defined";
}
1;
package DBD::mysql::dr; # ====== DRIVER ======
use strict;
use DBI qw(:sql_types);
use DBI::Const::GetInfoType;
sub connect {
my($drh, $dsn, $username, $password, $attrhash) = @_;
my($port);
my($cWarn);
my $connect_ref= { 'Name' => $dsn };
my $dbi_imp_data;
# Avoid warnings for undefined values
$username ||= '';
$password ||= '';
$attrhash ||= {};
$attrhash->{mysql_conn_attrs} ||= {};
$attrhash->{mysql_conn_attrs}->{'program_name'} ||= $0;
# create a 'blank' dbh
my($this, $privateAttrHash) = (undef, $attrhash);
$privateAttrHash = { %$privateAttrHash,
'Name' => $dsn,
'user' => $username,
'password' => $password
};
DBD::mysql->_OdbcParse($dsn, $privateAttrHash,
['database', 'host', 'port']);
if ($DBI::VERSION >= 1.49)
{
$dbi_imp_data = delete $attrhash->{dbi_imp_data};
$connect_ref->{'dbi_imp_data'} = $dbi_imp_data;
}
if (!defined($this = DBI::_new_dbh($drh,
$connect_ref,
$privateAttrHash)))
{
return undef;
}
DBD::mysql::db::_login($this, $dsn, $username, $password)
or $this = undef;
if ($this && ($ENV{MOD_PERL} || $ENV{GATEWAY_INTERFACE})) {
$this->{mysql_auto_reconnect} = 1;
}
$this;
}
sub data_sources {
my($self) = shift;
my($attributes) = shift;
my($host, $port, $user, $password) = ('', '', '', '');
if ($attributes) {
$host = $attributes->{host} || '';
$port = $attributes->{port} || '';
$user = $attributes->{user} || '';
$password = $attributes->{password} || '';
}
my(@dsn) = $self->func($host, $port, $user, $password, '_ListDBs');
my($i);
for ($i = 0; $i < @dsn; $i++) {
$dsn[$i] = "DBI:mysql:$dsn[$i]";
}
@dsn;
}
sub admin {
my($drh) = shift;
my($command) = shift;
my($dbname) = ($command eq 'createdb' || $command eq 'dropdb') ?
shift : '';
my($host, $port) = DBD::mysql->_OdbcParseHost(shift(@_) || '');
my($user) = shift || '';
my($password) = shift || '';
$drh->func(undef, $command,
$dbname || '',
$host || '',
$port || '',
$user, $password, '_admin_internal');
}
package DBD::mysql::db; # ====== DATABASE ======
use strict;
use DBI qw(:sql_types);
%DBD::mysql::db::db2ANSI = (
"INT" => "INTEGER",
"CHAR" => "CHAR",
"REAL" => "REAL",
"IDENT" => "DECIMAL"
);
### ANSI datatype mapping to MySQL datatypes
%DBD::mysql::db::ANSI2db = (
"CHAR" => "CHAR",
"VARCHAR" => "CHAR",
"LONGVARCHAR" => "CHAR",
"NUMERIC" => "INTEGER",
"DECIMAL" => "INTEGER",
"BIT" => "INTEGER",
"TINYINT" => "INTEGER",
"SMALLINT" => "INTEGER",
"INTEGER" => "INTEGER",
"BIGINT" => "INTEGER",
"REAL" => "REAL",
"FLOAT" => "REAL",
"DOUBLE" => "REAL",
"BINARY" => "CHAR",
"VARBINARY" => "CHAR",
"LONGVARBINARY" => "CHAR",
"DATE" => "CHAR",
"TIME" => "CHAR",
"TIMESTAMP" => "CHAR"
);
sub prepare {
my($dbh, $statement, $attribs)= @_;
return unless $dbh->func('_async_check');
# create a 'blank' dbh
my $sth = DBI::_new_sth($dbh, {'Statement' => $statement});
# Populate internal handle data.
if (!DBD::mysql::st::_prepare($sth, $statement, $attribs)) {
$sth = undef;
}
$sth;
}
sub db2ANSI {
my $self = shift;
my $type = shift;
return $DBD::mysql::db::db2ANSI{"$type"};
}
sub ANSI2db {
my $self = shift;
my $type = shift;
return $DBD::mysql::db::ANSI2db{"$type"};
}
sub admin {
my($dbh) = shift;
my($command) = shift;
my($dbname) = ($command eq 'createdb' || $command eq 'dropdb') ?
shift : '';
$dbh->{'Driver'}->func($dbh, $command, $dbname, '', '', '',
'_admin_internal');
}
sub _SelectDB ($$) {
die "_SelectDB is removed from this module; use DBI->connect instead.";
}
sub table_info ($) {
my ($dbh, $catalog, $schema, $table, $type, $attr) = @_;
$dbh->{mysql_server_prepare}||= 0;
my $mysql_server_prepare_save= $dbh->{mysql_server_prepare};
$dbh->{mysql_server_prepare}= 0;
my @names = qw(TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS);
my @rows;
my $sponge = DBI->connect("DBI:Sponge:", '','')
or return $dbh->DBI::set_err($DBI::err, "DBI::Sponge: $DBI::errstr");
# Return the list of catalogs
if (defined $catalog && $catalog eq "%" &&
(!defined($schema) || $schema eq "") &&
(!defined($table) || $table eq ""))
{
@rows = (); # Empty, because MySQL doesn't support catalogs (yet)
}
# Return the list of schemas
elsif (defined $schema && $schema eq "%" &&
(!defined($catalog) || $catalog eq "") &&
(!defined($table) || $table eq ""))
{
my $sth = $dbh->prepare("SHOW DATABASES")
or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return undef);
$sth->execute()
or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return DBI::set_err($dbh, $sth->err(), $sth->errstr()));
while (my $ref = $sth->fetchrow_arrayref())
{
push(@rows, [ undef, $ref->[0], undef, undef, undef ]);
}
}
# Return the list of table types
elsif (defined $type && $type eq "%" &&
(!defined($catalog) || $catalog eq "") &&
(!defined($schema) || $schema eq "") &&
(!defined($table) || $table eq ""))
{
@rows = (
[ undef, undef, undef, "TABLE", undef ],
[ undef, undef, undef, "VIEW", undef ],
);
}
# Special case: a catalog other than undef, "", or "%"
elsif (defined $catalog && $catalog ne "" && $catalog ne "%")
{
@rows = (); # Nothing, because MySQL doesn't support catalogs yet.
}
# Uh oh, we actually have a meaty table_info call. Work is required!
else
{
my @schemas;
# If no table was specified, we want them all
$table ||= "%";
# If something was given for the schema, we need to expand it to
# a list of schemas, since it may be a wildcard.
if (defined $schema && $schema ne "")
{
my $sth = $dbh->prepare("SHOW DATABASES LIKE " .
$dbh->quote($schema))
or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return undef);
$sth->execute()
or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return DBI::set_err($dbh, $sth->err(), $sth->errstr()));
while (my $ref = $sth->fetchrow_arrayref())
{
push @schemas, $ref->[0];
}
}
# Otherwise we want the current database
else
{
push @schemas, $dbh->selectrow_array("SELECT DATABASE()");
}
# Figure out which table types are desired
my ($want_tables, $want_views);
if (defined $type && $type ne "")
{
$want_tables = ($type =~ m/table/i);
$want_views = ($type =~ m/view/i);
}
else
{
$want_tables = $want_views = 1;
}
for my $database (@schemas)
{
my $sth = $dbh->prepare("SHOW /*!50002 FULL*/ TABLES FROM " .
$dbh->quote_identifier($database) .
" LIKE " . $dbh->quote($table))
or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return undef);
$sth->execute() or
($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return DBI::set_err($dbh, $sth->err(), $sth->errstr()));
while (my $ref = $sth->fetchrow_arrayref())
{
my $type = (defined $ref->[1] &&
$ref->[1] =~ /view/i) ? 'VIEW' : 'TABLE';
next if $type eq 'TABLE' && not $want_tables;
next if $type eq 'VIEW' && not $want_views;
push @rows, [ undef, $database, $ref->[0], $type, undef ];
}
}
}
my $sth = $sponge->prepare("table_info",
{
rows => \@rows,
NUM_OF_FIELDS => scalar @names,
NAME => \@names,
})
or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return $dbh->DBI::set_err($sponge->err(), $sponge->errstr()));
$dbh->{mysql_server_prepare}= $mysql_server_prepare_save;
return $sth;
}
sub _ListTables {
my $dbh = shift;
if (!$DBD::mysql::QUIET) {
warn "_ListTables is deprecated, use \$dbh->tables()";
}
return map { $_ =~ s/.*\.//; $_ } $dbh->tables();
}
sub column_info {
my ($dbh, $catalog, $schema, $table, $column) = @_;
return unless $dbh->func('_async_check');
$dbh->{mysql_server_prepare}||= 0;
my $mysql_server_prepare_save= $dbh->{mysql_server_prepare};
$dbh->{mysql_server_prepare}= 0;
# ODBC allows a NULL to mean all columns, so we'll accept undef
$column = '%' unless defined $column;
my $ER_NO_SUCH_TABLE= 1146;
my $table_id = $dbh->quote_identifier($catalog, $schema, $table);
my @names = qw(
TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS
NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF
SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH
ORDINAL_POSITION IS_NULLABLE CHAR_SET_CAT
CHAR_SET_SCHEM CHAR_SET_NAME COLLATION_CAT COLLATION_SCHEM COLLATION_NAME
UDT_CAT UDT_SCHEM UDT_NAME DOMAIN_CAT DOMAIN_SCHEM DOMAIN_NAME
SCOPE_CAT SCOPE_SCHEM SCOPE_NAME MAX_CARDINALITY
DTD_IDENTIFIER IS_SELF_REF
mysql_is_pri_key mysql_type_name mysql_values
mysql_is_auto_increment
);
my %col_info;
local $dbh->{FetchHashKeyName} = 'NAME_lc';
# only ignore ER_NO_SUCH_TABLE in internal_execute if issued from here
my $desc_sth = $dbh->prepare("DESCRIBE $table_id " . $dbh->quote($column));
my $desc = $dbh->selectall_arrayref($desc_sth, { Columns=>{} });
#return $desc_sth if $desc_sth->err();
if (my $err = $desc_sth->err())
{
# return the error, unless it is due to the table not
# existing per DBI spec
if ($err != $ER_NO_SUCH_TABLE)
{
$dbh->{mysql_server_prepare}= $mysql_server_prepare_save;
return undef;
}
$dbh->set_err(undef,undef);
$desc = [];
}
my $ordinal_pos = 0;
my @fields;
for my $row (@$desc)
{
my $type = $row->{type};
$type =~ m/^(\w+)(\((.+)\))?\s?(.*)?$/;
my $basetype = lc($1);
my $typemod = $3;
my $attr = $4;
push @fields, $row->{field};
my $info = $col_info{ $row->{field} }= {
TABLE_CAT => $catalog,
TABLE_SCHEM => $schema,
TABLE_NAME => $table,
COLUMN_NAME => $row->{field},
NULLABLE => ($row->{null} eq 'YES') ? 1 : 0,
IS_NULLABLE => ($row->{null} eq 'YES') ? "YES" : "NO",
TYPE_NAME => uc($basetype),
COLUMN_DEF => $row->{default},
ORDINAL_POSITION => ++$ordinal_pos,
mysql_is_pri_key => ($row->{key} eq 'PRI'),
mysql_type_name => $row->{type},
mysql_is_auto_increment => ($row->{extra} =~ /auto_increment/i ? 1 : 0),
};
#
# This code won't deal with a pathological case where a value
# contains a single quote followed by a comma, and doesn't unescape
# any escaped values. But who would use those in an enum or set?
#
my @type_params= ($typemod && index($typemod,"'")>=0) ?
("$typemod," =~ /'(.*?)',/g) # assume all are quoted
: split /,/, $typemod||''; # no quotes, plain list
s/''/'/g for @type_params; # undo doubling of quotes
my @type_attr= split / /, $attr||'';
$info->{DATA_TYPE}= SQL_VARCHAR();
if ($basetype =~ /^(char|varchar|\w*text|\w*blob)/)
{
$info->{DATA_TYPE}= SQL_CHAR() if $basetype eq 'char';
if ($type_params[0])
{
$info->{COLUMN_SIZE} = $type_params[0];
}
else
{
$info->{COLUMN_SIZE} = 65535;
$info->{COLUMN_SIZE} = 255 if $basetype =~ /^tiny/;
$info->{COLUMN_SIZE} = 16777215 if $basetype =~ /^medium/;
$info->{COLUMN_SIZE} = 4294967295 if $basetype =~ /^long/;
}
}
elsif ($basetype =~ /^(binary|varbinary)/)
{
$info->{COLUMN_SIZE} = $type_params[0];
# SQL_BINARY & SQL_VARBINARY are tempting here but don't match the
# semantics for mysql (not hex). SQL_CHAR & SQL_VARCHAR are correct here.
$info->{DATA_TYPE} = ($basetype eq 'binary') ? SQL_CHAR() : SQL_VARCHAR();
}
elsif ($basetype =~ /^(enum|set)/)
{
if ($basetype eq 'set')
{
$info->{COLUMN_SIZE} = length(join ",", @type_params);
}
else
{
my $max_len = 0;
length($_) > $max_len and $max_len = length($_) for @type_params;
$info->{COLUMN_SIZE} = $max_len;
}
$info->{"mysql_values"} = \@type_params;
}
elsif ($basetype =~ /int/ || $basetype eq 'bit' )
{
# big/medium/small/tiny etc + unsigned?
$info->{DATA_TYPE} = SQL_INTEGER();
$info->{NUM_PREC_RADIX} = 10;
$info->{COLUMN_SIZE} = $type_params[0];
}
elsif ($basetype =~ /^decimal/)
{
$info->{DATA_TYPE} = SQL_DECIMAL();
$info->{NUM_PREC_RADIX} = 10;
$info->{COLUMN_SIZE} = $type_params[0];
$info->{DECIMAL_DIGITS} = $type_params[1];
}
elsif ($basetype =~ /^(float|double)/)
{
$info->{DATA_TYPE} = ($basetype eq 'float') ? SQL_FLOAT() : SQL_DOUBLE();
$info->{NUM_PREC_RADIX} = 2;
$info->{COLUMN_SIZE} = ($basetype eq 'float') ? 32 : 64;
}
elsif ($basetype =~ /date|time/)
{
# date/datetime/time/timestamp
if ($basetype eq 'time' or $basetype eq 'date')
{
#$info->{DATA_TYPE} = ($basetype eq 'time') ? SQL_TYPE_TIME() : SQL_TYPE_DATE();
$info->{DATA_TYPE} = ($basetype eq 'time') ? SQL_TIME() : SQL_DATE();
$info->{COLUMN_SIZE} = ($basetype eq 'time') ? 8 : 10;
}
else
{
# datetime/timestamp
#$info->{DATA_TYPE} = SQL_TYPE_TIMESTAMP();
$info->{DATA_TYPE} = SQL_TIMESTAMP();
$info->{SQL_DATA_TYPE} = SQL_DATETIME();
$info->{SQL_DATETIME_SUB} = $info->{DATA_TYPE} - ($info->{SQL_DATA_TYPE} * 10);
$info->{COLUMN_SIZE} = ($basetype eq 'datetime') ? 19 : $type_params[0] || 14;
}
$info->{DECIMAL_DIGITS}= 0; # no fractional seconds
}
elsif ($basetype eq 'year')
{
# no close standard so treat as int
$info->{DATA_TYPE} = SQL_INTEGER();
$info->{NUM_PREC_RADIX} = 10;
$info->{COLUMN_SIZE} = 4;
}
else
{
Carp::carp("column_info: unrecognized column type '$basetype' of $table_id.$row->{field} treated as varchar");
}
$info->{SQL_DATA_TYPE} ||= $info->{DATA_TYPE};
#warn Dumper($info);
}
my $sponge = DBI->connect("DBI:Sponge:", '','')
or ( $dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return $dbh->DBI::set_err($DBI::err, "DBI::Sponge: $DBI::errstr"));
my $sth = $sponge->prepare("column_info $table", {
rows => [ map { [ @{$_}{@names} ] } map { $col_info{$_} } @fields ],
NUM_OF_FIELDS => scalar @names,
NAME => \@names,
}) or
return ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
$dbh->DBI::set_err($sponge->err(), $sponge->errstr()));
$dbh->{mysql_server_prepare}= $mysql_server_prepare_save;
return $sth;
}
sub primary_key_info {
my ($dbh, $catalog, $schema, $table) = @_;
return unless $dbh->func('_async_check');
$dbh->{mysql_server_prepare}||= 0;
my $mysql_server_prepare_save= $dbh->{mysql_server_prepare};
my $table_id = $dbh->quote_identifier($catalog, $schema, $table);
my @names = qw(
TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME KEY_SEQ PK_NAME
);
my %col_info;
local $dbh->{FetchHashKeyName} = 'NAME_lc';
my $desc_sth = $dbh->prepare("SHOW KEYS FROM $table_id");
my $desc= $dbh->selectall_arrayref($desc_sth, { Columns=>{} });
my $ordinal_pos = 0;
for my $row (grep { $_->{key_name} eq 'PRIMARY'} @$desc)
{
$col_info{ $row->{column_name} }= {
TABLE_CAT => $catalog,
TABLE_SCHEM => $schema,
TABLE_NAME => $table,
COLUMN_NAME => $row->{column_name},
KEY_SEQ => $row->{seq_in_index},
PK_NAME => $row->{key_name},
};
}
my $sponge = DBI->connect("DBI:Sponge:", '','')
or
($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return $dbh->DBI::set_err($DBI::err, "DBI::Sponge: $DBI::errstr"));
my $sth= $sponge->prepare("primary_key_info $table", {
rows => [
map { [ @{$_}{@names} ] }
sort { $a->{KEY_SEQ} <=> $b->{KEY_SEQ} }
values %col_info
],
NUM_OF_FIELDS => scalar @names,
NAME => \@names,
}) or
($dbh->{mysql_server_prepare}= $mysql_server_prepare_save &&
return $dbh->DBI::set_err($sponge->err(), $sponge->errstr()));
$dbh->{mysql_server_prepare}= $mysql_server_prepare_save;
return $sth;
}
sub foreign_key_info {
my ($dbh,
$pk_catalog, $pk_schema, $pk_table,
$fk_catalog, $fk_schema, $fk_table,
) = @_;
return unless $dbh->func('_async_check');
# INFORMATION_SCHEMA.KEY_COLUMN_USAGE was added in 5.0.6
# no one is going to be running 5.0.6, taking out the check for $point > .6
my ($maj, $min, $point) = _version($dbh);
return if $maj < 5 ;
my $sql = <<'EOF';
SELECT NULL AS PKTABLE_CAT,
A.REFERENCED_TABLE_SCHEMA AS PKTABLE_SCHEM,
A.REFERENCED_TABLE_NAME AS PKTABLE_NAME,
A.REFERENCED_COLUMN_NAME AS PKCOLUMN_NAME,
A.TABLE_CATALOG AS FKTABLE_CAT,
A.TABLE_SCHEMA AS FKTABLE_SCHEM,
A.TABLE_NAME AS FKTABLE_NAME,
A.COLUMN_NAME AS FKCOLUMN_NAME,
A.ORDINAL_POSITION AS KEY_SEQ,
NULL AS UPDATE_RULE,
NULL AS DELETE_RULE,
A.CONSTRAINT_NAME AS FK_NAME,
NULL AS PK_NAME,
NULL AS DEFERABILITY,
NULL AS UNIQUE_OR_PRIMARY
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE A,
INFORMATION_SCHEMA.TABLE_CONSTRAINTS B
WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA AND A.TABLE_NAME = B.TABLE_NAME
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND B.CONSTRAINT_TYPE IS NOT NULL
EOF
my @where;
my @bind;
# catalogs are not yet supported by MySQL
# if (defined $pk_catalog) {
# push @where, 'A.REFERENCED_TABLE_CATALOG = ?';
# push @bind, $pk_catalog;
# }
if (defined $pk_schema) {
push @where, 'A.REFERENCED_TABLE_SCHEMA = ?';
push @bind, $pk_schema;
}
if (defined $pk_table) {
push @where, 'A.REFERENCED_TABLE_NAME = ?';
push @bind, $pk_table;
}
# if (defined $fk_catalog) {
# push @where, 'A.TABLE_CATALOG = ?';
# push @bind, $fk_schema;
# }
if (defined $fk_schema) {
push @where, 'A.TABLE_SCHEMA = ?';
push @bind, $fk_schema;
}
if (defined $fk_table) {
push @where, 'A.TABLE_NAME = ?';
push @bind, $fk_table;
}
if (@where) {
$sql .= ' AND ';
$sql .= join ' AND ', @where;
}
$sql .= " ORDER BY A.TABLE_SCHEMA, A.TABLE_NAME, A.ORDINAL_POSITION";
local $dbh->{FetchHashKeyName} = 'NAME_uc';
my $sth = $dbh->prepare($sql);
$sth->execute(@bind);
return $sth;
}
# #86030: PATCH: adding statistics_info support
# Thank you to David Dick http://search.cpan.org/~ddick/
sub statistics_info {
my ($dbh,
$catalog, $schema, $table,
$unique_only, $quick,
) = @_;
return unless $dbh->func('_async_check');
# INFORMATION_SCHEMA.KEY_COLUMN_USAGE was added in 5.0.6
# no one is going to be running 5.0.6, taking out the check for $point > .6
my ($maj, $min, $point) = _version($dbh);
return if $maj < 5 ;
my $sql = <<'EOF';
SELECT TABLE_CATALOG AS TABLE_CAT,
TABLE_SCHEMA AS TABLE_SCHEM,
TABLE_NAME AS TABLE_NAME,
NON_UNIQUE AS NON_UNIQUE,
NULL AS INDEX_QUALIFIER,
INDEX_NAME AS INDEX_NAME,
LCASE(INDEX_TYPE) AS TYPE,
SEQ_IN_INDEX AS ORDINAL_POSITION,
COLUMN_NAME AS COLUMN_NAME,
COLLATION AS ASC_OR_DESC,
CARDINALITY AS CARDINALITY,
NULL AS PAGES,
NULL AS FILTER_CONDITION
FROM INFORMATION_SCHEMA.STATISTICS
EOF
my @where;
my @bind;
# catalogs are not yet supported by MySQL
# if (defined $catalog) {
# push @where, 'TABLE_CATALOG = ?';
# push @bind, $catalog;
# }
if (defined $schema) {
push @where, 'TABLE_SCHEMA = ?';
push @bind, $schema;
}
if (defined $table) {
push @where, 'TABLE_NAME = ?';
push @bind, $table;
}
if (@where) {
$sql .= ' WHERE ';
$sql .= join ' AND ', @where;
}
$sql .= " ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION";
local $dbh->{FetchHashKeyName} = 'NAME_uc';
my $sth = $dbh->prepare($sql);
$sth->execute(@bind);
return $sth;
}
sub _version {
my $dbh = shift;
return
$dbh->get_info($DBI::Const::GetInfoType::GetInfoType{SQL_DBMS_VER})
=~ /(\d+)\.(\d+)\.(\d+)/;
}
####################
# get_info()
# Generated by DBI::DBD::Metadata
sub get_info {
my($dbh, $info_type) = @_;
return unless $dbh->func('_async_check');
require DBD::mysql::GetInfo;
my $v = $DBD::mysql::GetInfo::info{int($info_type)};
$v = $v->($dbh) if ref $v eq 'CODE';
return $v;
}
BEGIN {
my @needs_async_check = qw/data_sources quote_identifier begin_work/;
foreach my $method (@needs_async_check) {
no strict 'refs';
my $super = "SUPER::$method";
*$method = sub {
my $h = shift;
return unless $h->func('_async_check');
return $h->$super(@_);
};
}
}
package DBD::mysql::st; # ====== STATEMENT ======
use strict;
BEGIN {
my @needs_async_result = qw/fetchrow_hashref fetchall_hashref/;
my @needs_async_check = qw/bind_param_array bind_col bind_columns execute_for_fetch/;
foreach my $method (@needs_async_result) {
no strict 'refs';
my $super = "SUPER::$method";
*$method = sub {
my $sth = shift;
if(defined $sth->mysql_async_ready) {
return unless $sth->mysql_async_result;
}
return $sth->$super(@_);
};
}
foreach my $method (@needs_async_check) {
no strict 'refs';
my $super = "SUPER::$method";
*$method = sub {
my $h = shift;
return unless $h->func('_async_check');
return $h->$super(@_);
};
}
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
DBD::mysql - MySQL driver for the Perl5 Database Interface (DBI)
=head1 SYNOPSIS
use DBI;
my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
my $dbh = DBI->connect($dsn, $user, $password);
my $sth = $dbh->prepare(
'SELECT id, first_name, last_name FROM authors WHERE last_name = ?')
or die "prepare statement failed: $dbh->errstr()";
$sth->execute('Eggers') or die "execution failed: $dbh->errstr()";
print $sth->rows . " rows found.\n";
while (my $ref = $sth->fetchrow_hashref()) {
print "Found a row: id = $ref->{'id'}, fn = $ref->{'first_name'}\n";
}
$sth->finish;
=head1 EXAMPLE
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",
"joe", "joe's password",
{'RaiseError' => 1});
# Drop table 'foo'. This may fail, if 'foo' doesn't exist
# Thus we put an eval around it.
eval { $dbh->do("DROP TABLE foo") };
print "Dropping foo failed: $@\n" if $@;
# Create a new table 'foo'. This must not fail, thus we don't
# catch errors.
$dbh->do("CREATE TABLE foo (id INTEGER, name VARCHAR(20))");
# INSERT some data into 'foo'. We are using $dbh->quote() for
# quoting the name.
$dbh->do("INSERT INTO foo VALUES (1, " . $dbh->quote("Tim") . ")");
# same thing, but using placeholders (recommended!)
$dbh->do("INSERT INTO foo VALUES (?, ?)", undef, 2, "Jochen");
# now retrieve data from the table.
my $sth = $dbh->prepare("SELECT * FROM foo");
$sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {
print "Found a row: id = $ref->{'id'}, name = $ref->{'name'}\n";
}
$sth->finish();
# Disconnect from the database.
$dbh->disconnect();
=head1 DESCRIPTION
B<DBD::mysql> is the Perl5 Database Interface driver for the MySQL
database. In other words: DBD::mysql is an interface between the Perl
programming language and the MySQL programming API that comes with
the MySQL relational database management system. Most functions
provided by this programming API are supported. Some rarely used
functions are missing, mainly because no-one ever requested
them. :-)
In what follows we first discuss the use of DBD::mysql,
because this is what you will need the most. For installation, see the
separate document L<DBD::mysql::INSTALL>.
See L</"EXAMPLE"> for a simple example above.
From perl you activate the interface with the statement
use DBI;
After that you can connect to multiple MySQL database servers
and send multiple queries to any of them via a simple object oriented
interface. Two types of objects are available: database handles and
statement handles. Perl returns a database handle to the connect
method like so:
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
$user, $password, {RaiseError => 1});
Once you have connected to a database, you can execute SQL
statements with:
my $query = sprintf("INSERT INTO foo VALUES (%d, %s)",
$number, $dbh->quote("name"));
$dbh->do($query);
See L<DBI> for details on the quote and do methods. An alternative
approach is
$dbh->do("INSERT INTO foo VALUES (?, ?)", undef,
$number, $name);
in which case the quote method is executed automatically. See also
the bind_param method in L<DBI>. See L</"DATABASE HANDLES"> below
for more details on database handles.
If you want to retrieve results, you need to create a so-called
statement handle with:
$sth = $dbh->prepare("SELECT * FROM $table");
$sth->execute();
This statement handle can be used for multiple things. First of all
you can retrieve a row of data:
my $row = $sth->fetchrow_hashref();
If your table has columns ID and NAME, then $row will be hash ref with
keys ID and NAME. See L</"STATEMENT HANDLES"> below for more details on
statement handles.
But now for a more formal approach:
=head2 Class Methods
=over
=item B<connect>
use DBI;
$dsn = "DBI:mysql:$database";
$dsn = "DBI:mysql:database=$database;host=$hostname";
$dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
$dbh = DBI->connect($dsn, $user, $password);
The C<database> is not a required attribute, but please note that MySQL
has no such thing as a default database. If you don't specify the database
at connection time your active database will be null and you'd need to prefix
your tables with the database name; i.e. 'SELECT * FROM mydb.mytable'.
This is similar to the behavior of the mysql command line client. Also,
'SELECT DATABASE()' will return the current database active for the handle.
=over
=item host
=item port
The hostname, if not specified or specified as '' or 'localhost', will
default to a MySQL server running on the local machine using the default for
the UNIX socket. To connect to a MySQL server on the local machine via TCP,
you must specify the loopback IP address (127.0.0.1) as the host.
Should the MySQL server be running on a non-standard port number,
you may explicitly state the port number to connect to in the C<hostname>
argument, by concatenating the I<hostname> and I<port number> together
separated by a colon ( C<:> ) character or by using the C<port> argument.
To connect to a MySQL server on localhost using TCP/IP, you must specify the
hostname as 127.0.0.1 (with the optional port).
When connecting to a MySQL Server with IPv6, a bracketed IPv6 address should be used.
Example DSN:
my $dsn = "DBI:mysql:;host=[1a12:2800:6f2:85::f20:8cf];port=3306";
=item mysql_client_found_rows
Enables (TRUE value) or disables (FALSE value) the flag CLIENT_FOUND_ROWS
while connecting to the MySQL server. This has a somewhat funny effect:
Without mysql_client_found_rows, if you perform a query like
UPDATE $table SET id = 1 WHERE id = 1;
then the MySQL engine will always return 0, because no rows have changed.
With mysql_client_found_rows however, it will return the number of rows
that have an id 1, as some people are expecting. (At least for compatibility
to other engines.)
=item mysql_compression
If your DSN contains the option "mysql_compression=1", then the communication
between client and server will be compressed.
=item mysql_connect_timeout
If your DSN contains the option "mysql_connect_timeout=##", the connect
request to the server will timeout if it has not been successful after
the given number of seconds.
=item mysql_write_timeout
If your DSN contains the option "mysql_write_timeout=##", the write
operation to the server will timeout if it has not been successful after
the given number of seconds.
=item mysql_read_timeout
If your DSN contains the option "mysql_read_timeout=##", the read
operation to the server will timeout if it has not been successful after
the given number of seconds.
=item mysql_init_command
If your DSN contains the option "mysql_init_command=##", then
this SQL statement is executed when connecting to the MySQL server.
It is automatically re-executed if reconnection occurs.
=item mysql_skip_secure_auth
This option is for older mysql databases that don't have secure auth set.
=item mysql_read_default_file
=item mysql_read_default_group
These options can be used to read a config file like /etc/my.cnf or
~/.my.cnf. By default MySQL's C client library doesn't use any config
files unlike the client programs (mysql, mysqladmin, ...) that do, but
outside of the C client library. Thus you need to explicitly request
reading a config file, as in
$dsn = "DBI:mysql:test;mysql_read_default_file=/home/joe/my.cnf";
$dbh = DBI->connect($dsn, $user, $password)
The option mysql_read_default_group can be used to specify the default
group in the config file: Usually this is the I<client> group, but
see the following example:
[client]
host=localhost
[perl]
host=perlhost
(Note the order of the entries! The example won't work, if you reverse
the [client] and [perl] sections!)
If you read this config file, then you'll be typically connected to
I<localhost>. However, by using
$dsn = "DBI:mysql:test;mysql_read_default_group=perl;"
. "mysql_read_default_file=/home/joe/my.cnf";
$dbh = DBI->connect($dsn, $user, $password);
you'll be connected to I<perlhost>. Note that if you specify a
default group and do not specify a file, then the default config
files will all be read. See the documentation of
the C function mysql_options() for details.
=item mysql_socket
It is possible to choose the Unix socket that is
used for connecting to the server. This is done, for example, with
mysql_socket=/dev/mysql
Usually there's no need for this option, unless you are using another
location for the socket than that built into the client.
=item mysql_ssl
A true value turns on the CLIENT_SSL flag when connecting to the MySQL
server and enforce SSL encryption. A false value (which is default)
disable SSL encryption with the MySQL server.
When enabling SSL encryption you should set also other SSL options,
at least mysql_ssl_ca_file or mysql_ssl_ca_path.
mysql_ssl=1 mysql_ssl_verify_server_cert=1 mysql_ssl_ca_file=/path/to/ca_cert.pem
This means that your communication with the server will be encrypted.
Please note that this can only work if you enabled SSL when compiling
DBD::mysql; this is the default starting version 4.034.
See L<DBD::mysql::INSTALL> for more details.
=item mysql_ssl_ca_file
The path to a file in PEM format that contains a list of trusted SSL
certificate authorities.
When set MySQL server certificate is checked that it is signed by some
CA certificate in the list. Common Name value is not verified unless
C<mysql_ssl_verify_server_cert> is enabled.
=item mysql_ssl_ca_path
The path to a directory that contains trusted SSL certificate authority
certificates in PEM format.
When set MySQL server certificate is checked that it is signed by some
CA certificate in the list. Common Name value is not verified unless
C<mysql_ssl_verify_server_cert> is enabled.
Please note that this option is supported only if your MySQL client was
compiled with OpenSSL library, and not with default yaSSL library.
=item mysql_ssl_verify_server_cert
Checks the server's Common Name value in the certificate that the server
sends to the client. The client verifies that name against the host name
the client uses for connecting to the server, and the connection fails if
there is a mismatch. For encrypted connections, this option helps prevent
man-in-the-middle attacks.
Verification of the host name is disabled by default.
=item mysql_ssl_client_key
The name of the SSL key file in PEM format to use for establishing
a secure connection.
=item mysql_ssl_client_cert
The name of the SSL certificate file in PEM format to use for
establishing a secure connection.
=item mysql_ssl_cipher
A list of permissible ciphers to use for connection encryption. If no
cipher in the list is supported, encrypted connections will not work.
mysql_ssl_cipher=AES128-SHA
mysql_ssl_cipher=DHE-RSA-AES256-SHA:AES128-SHA
=item mysql_ssl_optional
Setting C<mysql_ssl_optional> to true disables strict SSL enforcement
and makes SSL connection optional. This option opens security hole
for man-in-the-middle attacks. Default value is false which means
that C<mysql_ssl> set to true enforce SSL encryption.
This option was introduced in 4.043 version of DBD::mysql. Due to
L<The BACKRONYM|http://backronym.fail/> and L<The Riddle|http://riddle.link/>
vulnerabilities in libmysqlclient library, enforcement of SSL
encryption was not possbile and therefore C<mysql_ssl_optional=1>
was effectively set for all DBD::mysql versions prior to 4.043.
Starting with 4.043, DBD::mysql with C<mysql_ssl=1> could refuse
connection to MySQL server if underlaying libmysqlclient library is
vulnerable. Option C<mysql_ssl_optional> can be used to make SSL
connection vulnerable.
=item mysql_local_infile
The LOCAL capability for LOAD DATA may be disabled
in the MySQL client library by default. If your DSN contains the option
"mysql_local_infile=1", LOAD DATA LOCAL will be enabled. (However,
this option is *ineffective* if the server has also been configured to
disallow LOCAL.)
=item mysql_multi_statements
Support for multiple statements separated by a semicolon
(;) may be enabled by using this option. Enabling this option may cause
problems if server-side prepared statements are also enabled.
=item mysql_server_prepare
This option is used to enable server side prepared statements.
To use server side prepared statements, all you need to do is set the variable
mysql_server_prepare in the connect:
$dbh = DBI->connect(
"DBI:mysql:database=test;host=localhost;mysql_server_prepare=1",
"",
"",
{ RaiseError => 1, AutoCommit => 1 }
);
or:
$dbh = DBI->connect(
"DBI:mysql:database=test;host=localhost",
"",
"",
{ RaiseError => 1, AutoCommit => 1, mysql_server_prepare => 1 }
);
There are many benefits to using server side prepare statements, mostly if you are
performing many inserts because of that fact that a single statement is prepared
to accept multiple insert values.
To make sure that the 'make test' step tests whether server prepare works, you just
need to export the env variable MYSQL_SERVER_PREPARE:
export MYSQL_SERVER_PREPARE=1
Please note that mysql server cannot prepare or execute some prepared statements.
In this case DBD::mysql fallbacks to normal non-prepared statement and tries again.
=item mysql_server_prepare_disable_fallback
This option disable fallback to normal non-prepared statement when mysql server
does not support execution of current statement as prepared.
Useful when you want to be sure that statement is going to be executed as
server side prepared. Error message and code in case of failure is propagated
back to DBI.
=item mysql_embedded_options
The option <mysql_embedded_options> can be used to pass 'command-line'
options to embedded server.
Example:
use DBI;
$testdsn="DBI:mysqlEmb:database=test;mysql_embedded_options=--help,--verbose";
$dbh = DBI->connect($testdsn,"a","b");
This would cause the command line help to the embedded MySQL server library
to be printed.
=item mysql_embedded_groups
The option <mysql_embedded_groups> can be used to specify the groups in the
config file(I<my.cnf>) which will be used to get options for embedded server.
If not specified [server] and [embedded] groups will be used.
Example:
$testdsn="DBI:mysqlEmb:database=test;mysql_embedded_groups=embedded_server,common";
=item mysql_conn_attrs
The option <mysql_conn_attrs> is a hash of attribute names and values which can be
used to send custom connection attributes to the server. Some attributes like
'_os', '_platform', '_client_name' and '_client_version' are added by libmysqlclient
and 'program_name' is added by DBD::mysql.
You can then later read these attributes from the performance schema tables which
can be quite helpful for profiling your database or creating statistics.
You'll have to use a MySQL 5.6 server and libmysqlclient or newer to leverage this
feature.
my $dbh= DBI->connect($dsn, $user, $password,
{ AutoCommit => 0,
mysql_conn_attrs => {
foo => 'bar',
wiz => 'bang'
},
});
Now you can select the results from the performance schema tables. You can do this
in the same session, but also afterwards. It can be very useful to answer questions
like 'which script sent this query?'.
my $results = $dbh->selectall_hashref(
'SELECT * FROM performance_schema.session_connect_attrs',
'ATTR_NAME'
);
This returns:
$result = {
'foo' => {
'ATTR_VALUE' => 'bar',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => 'foo',
'ORDINAL_POSITION' => '6'
},
'wiz' => {
'ATTR_VALUE' => 'bang',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => 'wiz',
'ORDINAL_POSITION' => '3'
},
'program_name' => {
'ATTR_VALUE' => './foo.pl',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => 'program_name',
'ORDINAL_POSITION' => '5'
},
'_client_name' => {
'ATTR_VALUE' => 'libmysql',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => '_client_name',
'ORDINAL_POSITION' => '1'
},
'_client_version' => {
'ATTR_VALUE' => '5.6.24',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => '_client_version',
'ORDINAL_POSITION' => '7'
},
'_os' => {
'ATTR_VALUE' => 'osx10.8',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => '_os',
'ORDINAL_POSITION' => '0'
},
'_pid' => {
'ATTR_VALUE' => '59860',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => '_pid',
'ORDINAL_POSITION' => '2'
},
'_platform' => {
'ATTR_VALUE' => 'x86_64',
'PROCESSLIST_ID' => '3',
'ATTR_NAME' => '_platform',
'ORDINAL_POSITION' => '4'
}
};
=back
=back
=head2 Private MetaData Methods
=over
=item B<ListDBs>
my $drh = DBI->install_driver("mysql");
@dbs = $drh->func("$hostname:$port", '_ListDBs');
@dbs = $drh->func($hostname, $port, '_ListDBs');
@dbs = $dbh->func('_ListDBs');
Returns a list of all databases managed by the MySQL server
running on C<$hostname>, port C<$port>. This is a legacy
method. Instead, you should use the portable method
@dbs = DBI->data_sources("mysql");
=back
=head1 DATABASE HANDLES
The DBD::mysql driver supports the following attributes of database
handles (read only):
$errno = $dbh->{'mysql_errno'};
$error = $dbh->{'mysql_error'};
$info = $dbh->{'mysql_hostinfo'};
$info = $dbh->{'mysql_info'};
$insertid = $dbh->{'mysql_insertid'};
$info = $dbh->{'mysql_protoinfo'};
$info = $dbh->{'mysql_serverinfo'};
$info = $dbh->{'mysql_stat'};
$threadId = $dbh->{'mysql_thread_id'};
These correspond to mysql_errno(), mysql_error(), mysql_get_host_info(),
mysql_info(), mysql_insert_id(), mysql_get_proto_info(),
mysql_get_server_info(), mysql_stat() and mysql_thread_id(),
respectively.
=over 2
=item mysql_clientinfo
List information of the MySQL client library that DBD::mysql was built
against:
print "$dbh->{mysql_clientinfo}\n";
5.2.0-MariaDB
=item mysql_clientversion
print "$dbh->{mysql_clientversion}\n";
50200
=item mysql_serverversion
print "$dbh->{mysql_serverversion}\n";
50200
=item mysql_dbd_stats
$info_hashref = $dhb->{mysql_dbd_stats};
DBD::mysql keeps track of some statistics in the mysql_dbd_stats attribute.
The following stats are being maintained:
=over 8
=item auto_reconnects_ok
The number of times that DBD::mysql successfully reconnected to the mysql
server.
=item auto_reconnects_failed
The number of times that DBD::mysql tried to reconnect to mysql but failed.
=back
=back
The DBD::mysql driver also supports the following attributes of database
handles (read/write):
=over
=item mysql_auto_reconnect
This attribute determines whether DBD::mysql will automatically reconnect
to mysql if the connection be lost. This feature defaults to off; however,
if either the GATEWAY_INTERFACE or MOD_PERL environment variable is set,
DBD::mysql will turn mysql_auto_reconnect on. Setting mysql_auto_reconnect
to on is not advised if 'lock tables' is used because if DBD::mysql reconnect
to mysql all table locks will be lost. This attribute is ignored when
AutoCommit is turned off, and when AutoCommit is turned off, DBD::mysql will
not automatically reconnect to the server.
It is also possible to set the default value of the C<mysql_auto_reconnect>
attribute for the $dbh by passing it in the C<\%attr> hash for C<DBI->connect>.
$dbh->{mysql_auto_reconnect} = 1;
or
my $dbh = DBI->connect($dsn, $user, $password, {
mysql_auto_reconnect => 1,
});
Note that if you are using a module or framework that performs reconnections
for you (for example L<DBIx::Connector> in fixup mode), this value must be set
to 0.
=item mysql_use_result
This attribute forces the driver to use mysql_use_result rather than
mysql_store_result. The former is faster and less memory consuming, but
tends to block other processes. mysql_store_result is the default due to that
fact storing the result is expected behavior with most applications.
It is possible to set the default value of the C<mysql_use_result> attribute
for the $dbh via the DSN:
$dbh = DBI->connect("DBI:mysql:test;mysql_use_result=1", "root", "");
You can also set it after creation of the database handle:
$dbh->{mysql_use_result} = 0; # disable
$dbh->{mysql_use_result} = 1; # enable
You can also set or unset the C<mysql_use_result> setting on your statement
handle, when creating the statement handle or after it has been created.
See L</"STATEMENT HANDLES">.
=item mysql_enable_utf8
This attribute determines whether DBD::mysql should assume strings
stored in the database are utf8. This feature defaults to off.
When set, a data retrieved from a textual column type (char, varchar,
etc) will have the UTF-8 flag turned on if necessary. This enables
character semantics on that string. You will also need to ensure that
your database / table / column is configured to use UTF8. See for more
information the chapter on character set support in the MySQL manual:
L<http://dev.mysql.com/doc/refman/5.7/en/charset.html>
Additionally, turning on this flag tells MySQL that incoming data should
be treated as UTF-8. This will only take effect if used as part of the
call to connect(). If you turn the flag on after connecting, you will
need to issue the command C<SET NAMES utf8> to get the same effect.
=item mysql_enable_utf8mb4
This is similar to mysql_enable_utf8, but is capable of handling 4-byte
UTF-8 characters.
=item mysql_bind_type_guessing
This attribute causes the driver (emulated prepare statements)
to attempt to guess if a value being bound is a numeric value,
and if so, doesn't quote the value. This was created by
Dragonchild and is one way to deal with the performance issue
of using quotes in a statement that is inserting or updating a
large numeric value. This was previously called
C<unsafe_bind_type_guessing> because it is experimental. I have
successfully run the full test suite with this option turned on,
the name can now be simply C<mysql_bind_type_guessing>.
CAVEAT: Even though you can insert an integer value into a
character column, if this column is indexed, if you query that
column with the integer value not being quoted, it will not
use the index:
MariaDB [test]> explain select * from test where value0 = '3' \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test
type: ref
possible_keys: value0
key: value0
key_len: 13
ref: const
rows: 1
Extra: Using index condition
1 row in set (0.00 sec)
MariaDB [test]> explain select * from test where value0 = 3
-> \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test
type: ALL
possible_keys: value0
key: NULL
key_len: NULL
ref: NULL
rows: 6
Extra: Using where
1 row in set (0.00 sec)
See bug: https://rt.cpan.org/Ticket/Display.html?id=43822
C<mysql_bind_type_guessing> can be turned on via
- through DSN
my $dbh= DBI->connect('DBI:mysql:test', 'username', 'pass',
{ mysql_bind_type_guessing => 1})
- OR after handle creation
$dbh->{mysql_bind_type_guessing} = 1;
=item mysql_bind_comment_placeholders
This attribute causes the driver (emulated prepare statements)
will cause any placeholders in comments to be bound. This is
not correct prepared statement behavior, but some developers
have come to depend on this behavior, so I have made it available
in 4.015
=item mysql_no_autocommit_cmd
This attribute causes the driver to not issue 'set autocommit'
either through explicit or using mysql_autocommit(). This is
particularly useful in the case of using MySQL Proxy.
See the bug report:
https://rt.cpan.org/Public/Bug/Display.html?id=46308
C<mysql_no_autocommit_cmd> can be turned on when creating the database
handle:
my $dbh = DBI->connect('DBI:mysql:test', 'username', 'pass',
{ mysql_no_autocommit_cmd => 1});
or using an existing database handle:
$dbh->{mysql_no_autocommit_cmd} = 1;
=item ping
This can be used to send a ping to the server.
$rc = $dbh->ping();
=back
=head1 STATEMENT HANDLES
The statement handles of DBD::mysql support a number
of attributes. You access these by using, for example,
my $numFields = $sth->{NUM_OF_FIELDS};
Note, that most attributes are valid only after a successful I<execute>.
An C<undef> value will returned otherwise. The most important exception
is the C<mysql_use_result> attribute, which forces the driver to use
mysql_use_result rather than mysql_store_result. The former is faster
and less memory consuming, but tends to block other processes. (That's why
mysql_store_result is the default.)
To set the C<mysql_use_result> attribute, use either of the following:
my $sth = $dbh->prepare("QUERY", { mysql_use_result => 1});
or
my $sth = $dbh->prepare($sql);
$sth->{mysql_use_result} = 1;
Column dependent attributes, for example I<NAME>, the column names,
are returned as a reference to an array. The array indices are
corresponding to the indices of the arrays returned by I<fetchrow>
and similar methods. For example the following code will print a
header of table names together with all rows:
my $sth = $dbh->prepare("SELECT * FROM $table") ||
die "Error:" . $dbh->errstr . "\n";
$sth->execute || die "Error:" . $sth->errstr . "\n";
my $names = $sth->{NAME};
my $numFields = $sth->{'NUM_OF_FIELDS'} - 1;
for my $i ( 0..$numFields ) {
printf("%s%s", $i ? "," : "", $$names[$i]);
}
print "\n";
while (my $ref = $sth->fetchrow_arrayref) {
for my $i ( 0..$numFields ) {
printf("%s%s", $i ? "," : "", $$ref[$i]);
}
print "\n";
}
For portable applications you should restrict yourself to attributes with
capitalized or mixed case names. Lower case attribute names are private
to DBD::mysql. The attribute list includes:
=over
=item ChopBlanks
this attribute determines whether a I<fetchrow> will chop preceding
and trailing blanks off the column values. Chopping blanks does not
have impact on the I<max_length> attribute.
=item mysql_insertid
If the statement you executed performs an INSERT, and there is an AUTO_INCREMENT
column in the table you inserted in, this attribute holds the value stored into
the AUTO_INCREMENT column, if that value is automatically generated, by
storing NULL or 0 or was specified as an explicit value.
Typically, you'd access the value via $sth->{mysql_insertid}. The value can
also be accessed via $dbh->{mysql_insertid} but this can easily
produce incorrect results in case one database handle is shared.
=item mysql_is_blob
Reference to an array of boolean values; TRUE indicates, that the
respective column is a blob. This attribute is valid for MySQL only.
=item mysql_is_key
Reference to an array of boolean values; TRUE indicates, that the
respective column is a key. This is valid for MySQL only.
=item mysql_is_num
Reference to an array of boolean values; TRUE indicates, that the
respective column contains numeric values.
=item mysql_is_pri_key
Reference to an array of boolean values; TRUE indicates, that the
respective column is a primary key.
=item mysql_is_auto_increment
Reference to an array of boolean values; TRUE indicates that the
respective column is an AUTO_INCREMENT column. This is only valid
for MySQL.
=item mysql_length
=item mysql_max_length
A reference to an array of maximum column sizes. The I<max_length> is
the maximum physically present in the result table, I<length> gives
the theoretically possible maximum. I<max_length> is valid for MySQL
only.
=item NAME
A reference to an array of column names.
=item NULLABLE
A reference to an array of boolean values; TRUE indicates that this column
may contain NULL's.
=item NUM_OF_FIELDS
Number of fields returned by a I<SELECT> or I<LISTFIELDS> statement.
You may use this for checking whether a statement returned a result:
A zero value indicates a non-SELECT statement like I<INSERT>,
I<DELETE> or I<UPDATE>.
=item mysql_table
A reference to an array of table names, useful in a I<JOIN> result.
=item TYPE
A reference to an array of column types. The engine's native column
types are mapped to portable types like DBI::SQL_INTEGER() or
DBI::SQL_VARCHAR(), as good as possible. Not all native types have
a meaningful equivalent, for example DBD::mysql::FIELD_TYPE_INTERVAL
is mapped to DBI::SQL_VARCHAR().
If you need the native column types, use I<mysql_type>. See below.
=item mysql_type
A reference to an array of MySQL's native column types, for example
DBD::mysql::FIELD_TYPE_SHORT() or DBD::mysql::FIELD_TYPE_STRING().
Use the I<TYPE> attribute, if you want portable types like
DBI::SQL_SMALLINT() or DBI::SQL_VARCHAR().
=item mysql_type_name
Similar to mysql, but type names and not numbers are returned.
Whenever possible, the ANSI SQL name is preferred.
=item mysql_warning_count
The number of warnings generated during execution of the SQL statement.
This attribute is available on both statement handles and database handles.
=back
=head1 TRANSACTION SUPPORT
The transaction support works as follows:
=over
=item *
By default AutoCommit mode is on, following the DBI specifications.
=item *
If you execute
$dbh->{AutoCommit} = 0;
or
$dbh->{AutoCommit} = 1;
then the driver will set the MySQL server variable autocommit to 0 or
1, respectively. Switching from 0 to 1 will also issue a COMMIT,
following the DBI specifications.
=item *
The methods
$dbh->rollback();
$dbh->commit();
will issue the commands ROLLBACK and COMMIT, respectively. A
ROLLBACK will also be issued if AutoCommit mode is off and the
database handles DESTROY method is called. Again, this is following
the DBI specifications.
=back
Given the above, you should note the following:
=over
=item *
You should never change the server variable autocommit manually,
unless you are ignoring DBI's transaction support.
=item *
Switching AutoCommit mode from on to off or vice versa may fail.
You should always check for errors when changing AutoCommit mode.
The suggested way of doing so is using the DBI flag RaiseError.
If you don't like RaiseError, you have to use code like the
following:
$dbh->{AutoCommit} = 0;
if ($dbh->{AutoCommit}) {
# An error occurred!
}
=item *
If you detect an error while changing the AutoCommit mode, you
should no longer use the database handle. In other words, you
should disconnect and reconnect again, because the transaction
mode is unpredictable. Alternatively you may verify the transaction
mode by checking the value of the server variable autocommit.
However, such behaviour isn't portable.
=item *
DBD::mysql has a "reconnect" feature that handles the so-called
MySQL "morning bug": If the server has disconnected, most probably
due to a timeout, then by default the driver will reconnect and
attempt to execute the same SQL statement again. However, this
behaviour is disabled when AutoCommit is off: Otherwise the
transaction state would be completely unpredictable after a
reconnect.
=item *
The "reconnect" feature of DBD::mysql can be toggled by using the
L<mysql_auto_reconnect> attribute. This behaviour should be turned off
in code that uses LOCK TABLE because if the database server time out
and DBD::mysql reconnect, table locks will be lost without any
indication of such loss.
=back
=head1 MULTIPLE RESULT SETS
DBD::mysql supports multiple result sets, thanks to Guy Harrison!
The basic usage of multiple result sets is
do
{
while (@row = $sth->fetchrow_array())
{
do stuff;
}
} while ($sth->more_results)
An example would be:
$dbh->do("drop procedure if exists someproc") or print $DBI::errstr;
$dbh->do("create procedure someproc() deterministic
begin
declare a,b,c,d int;
set a=1;
set b=2;
set c=3;
set d=4;
select a, b, c, d;
select d, c, b, a;
select b, a, c, d;
select c, b, d, a;
end") or print $DBI::errstr;
$sth=$dbh->prepare('call someproc()') ||
die $DBI::err.": ".$DBI::errstr;
$sth->execute || die DBI::err.": ".$DBI::errstr; $rowset=0;
do {
print "\nRowset ".++$i."\n---------------------------------------\n\n";
foreach $colno (0..$sth->{NUM_OF_FIELDS}-1) {
print $sth->{NAME}->[$colno]."\t";
}
print "\n";
while (@row= $sth->fetchrow_array()) {
foreach $field (0..$#row) {
print $row[$field]."\t";
}
print "\n";
}
} until (!$sth->more_results)
=head2 Issues with multiple result sets
Please be aware there could be issues if your result sets are "jagged",
meaning the number of columns of your results vary. Varying numbers of
columns could result in your script crashing.
=head1 MULTITHREADING
The multithreading capabilities of DBD::mysql depend completely
on the underlying C libraries. The modules are working with handle data
only, no global variables are accessed or (to the best of my knowledge)
thread unsafe functions are called. Thus DBD::mysql is believed
to be completely thread safe, if the C libraries are thread safe
and you don't share handles among threads.
The obvious question is: Are the C libraries thread safe?
In the case of MySQL the answer is "mostly" and, in theory, you should
be able to get a "yes", if the C library is compiled for being thread
safe (By default it isn't.) by passing the option -with-thread-safe-client
to configure. See the section on I<How to make a threadsafe client> in
the manual.
=head1 ASYNCHRONOUS QUERIES
You can make a single asynchronous query per MySQL connection; this allows
you to submit a long-running query to the server and have an event loop
inform you when it's ready. An asynchronous query is started by either
setting the 'async' attribute to a true value in the L<DBI/do> method,
or in the L<DBI/prepare> method. Statements created with 'async' set to
true in prepare always run their queries asynchronously when L<DBI/execute>
is called. The driver also offers three additional methods:
C<mysql_async_result>, C<mysql_async_ready>, and C<mysql_fd>.
C<mysql_async_result> returns what do or execute would have; that is, the
number of rows affected. C<mysql_async_ready> returns true if
C<mysql_async_result> will not block, and zero otherwise. They both return
C<undef> if that handle is not currently running an asynchronous query.
C<mysql_fd> returns the file descriptor number for the MySQL connection; you
can use this in an event loop.
Here's an example of how to use the asynchronous query interface:
use feature 'say';
$dbh->do('SELECT SLEEP(10)', { async => 1 });
until($dbh->mysql_async_ready) {
say 'not ready yet!';
sleep 1;
}
my $rows = $dbh->mysql_async_result;
=head1 INSTALLATION
See L<DBD::mysql::INSTALL>.
=head1 AUTHORS
Originally, there was a non-DBI driver, Mysql, which was much like
PHP drivers such as mysql and mysqli. The B<Mysql> module was
originally written by Andreas König <koenig@kulturbox.de> who still, to this
day, contributes patches to DBD::mysql. An emulated version of Mysql was
provided to DBD::mysql from Jochen Wiedmann, but eventually deprecated as it
was another bundle of code to maintain.
The first incarnation of DBD::mysql was developed by Alligator Descartes,
who was also aided and abetted by Gary Shea, Andreas König and
Tim Bunce.
The current incarnation of B<DBD::mysql> was written by Jochen Wiedmann,
then numerous changes and bug-fixes were added by Rudy Lippan. Next,
prepared statement support was added by Patrick Galbraith and
Alexy Stroganov (who also solely added embedded server
support).
For the past nine years DBD::mysql has been maintained by
Patrick Galbraith (I<patg@patg.net>), and recently with the great help of
Michiel Beijen (I<michiel.beijen@gmail.com>), along with the entire community
of Perl developers who keep sending patches to help continue improving DBD::mysql
=head1 CONTRIBUTIONS
Anyone who desires to contribute to this project is encouraged to do so.
Currently, the source code for this project can be found at Github:
L<https://github.com/perl5-dbi/DBD-mysql/>
Either fork this repository and produce a branch with your changeset that
the maintainer can merge to his tree, or create a diff with git. The maintainer
is more than glad to take contributions from the community as
many features and fixes from DBD::mysql have come from the community.
=head1 COPYRIGHT
This module is
=over
=item *
Large Portions Copyright (c) 2004-2013 Patrick Galbraith
=item *
Large Portions Copyright (c) 2004-2006 Alexey Stroganov
=item *
Large Portions Copyright (c) 2003-2005 Rudolf Lippan
=item *
Large Portions Copyright (c) 1997-2003 Jochen Wiedmann, with code portions
=item *
Copyright (c)1994-1997 their original authors
=back
=head1 LICENSE
This module is released under the same license as Perl itself. See
L<http://www.perl.com/perl/misc/Artistic.html> for details.
=head1 MAILING LIST SUPPORT
This module is maintained and supported on a mailing list, dbi-users.
To subscribe to this list, send an email to
dbi-users-subscribe@perl.org
Mailing list archives are at
L<http://groups.google.com/group/perl.dbi.users?hl=en&lr=>
=head1 ADDITIONAL DBI INFORMATION
Additional information on the DBI project can be found on the World
Wide Web at the following URL:
L<http://dbi.perl.org>
where documentation, pointers to the mailing lists and mailing list
archives and pointers to the most current versions of the modules can
be used.
Information on the DBI interface itself can be gained by typing:
perldoc DBI
Information on DBD::mysql specifically can be gained by typing:
perldoc DBD::mysql
(this will display the document you're currently reading)
=head1 BUG REPORTING, ENHANCEMENT/FEATURE REQUESTS
Please report bugs, including all the information needed
such as DBD::mysql version, MySQL version, OS type/version, etc
to this link:
L<https://rt.cpan.org/Dist/Display.html?Name=DBD-mysql>
Note: until recently, MySQL/Sun/Oracle responded to bugs and assisted in
fixing bugs which many thanks should be given for their help!
This driver is outside the realm of the numerous components they support, and the
maintainer and community solely support DBD::mysql
=cut
DBD/Mem.pm 0000644 00000023615 15033552504 0006222 0 ustar 00 # -*- perl -*-
#
# DBD::Mem - A DBI driver for in-memory tables
#
# This module is currently maintained by
#
# Jens Rehsack
#
# Copyright (C) 2016,2017 by Jens Rehsack
#
# All rights reserved.
#
# You may distribute this module under the terms of either the GNU
# General Public License or the Artistic License, as specified in
# the Perl README file.
require 5.008;
use strict;
#################
package DBD::Mem;
#################
use base qw( DBI::DBD::SqlEngine );
use vars qw($VERSION $ATTRIBUTION $drh);
$VERSION = '0.001';
$ATTRIBUTION = 'DBD::Mem by Jens Rehsack';
# no need to have driver() unless you need private methods
#
sub driver ($;$)
{
my ( $class, $attr ) = @_;
return $drh if ($drh);
# do the real work in DBI::DBD::SqlEngine
#
$attr->{Attribution} = 'DBD::Mem by Jens Rehsack';
$drh = $class->SUPER::driver($attr);
return $drh;
}
sub CLONE
{
undef $drh;
}
#####################
package DBD::Mem::dr;
#####################
$DBD::Mem::dr::imp_data_size = 0;
@DBD::Mem::dr::ISA = qw(DBI::DBD::SqlEngine::dr);
# you could put some :dr private methods here
# you may need to over-ride some DBI::DBD::SqlEngine::dr methods here
# but you can probably get away with just letting it do the work
# in most cases
#####################
package DBD::Mem::db;
#####################
$DBD::Mem::db::imp_data_size = 0;
@DBD::Mem::db::ISA = qw(DBI::DBD::SqlEngine::db);
use Carp qw/carp/;
sub set_versions
{
my $this = $_[0];
$this->{mem_version} = $DBD::Mem::VERSION;
return $this->SUPER::set_versions();
}
sub init_valid_attributes
{
my $dbh = shift;
# define valid private attributes
#
# attempts to set non-valid attrs in connect() or
# with $dbh->{attr} will throw errors
#
# the attrs here *must* start with mem_ or foo_
#
# see the STORE methods below for how to check these attrs
#
$dbh->{mem_valid_attrs} = {
mem_version => 1, # verbose DBD::Mem version
mem_valid_attrs => 1, # DBD::Mem::db valid attrs
mem_readonly_attrs => 1, # DBD::Mem::db r/o attrs
mem_meta => 1, # DBD::Mem public access for f_meta
mem_tables => 1, # DBD::Mem public access for f_meta
};
$dbh->{mem_readonly_attrs} = {
mem_version => 1, # verbose DBD::Mem version
mem_valid_attrs => 1, # DBD::Mem::db valid attrs
mem_readonly_attrs => 1, # DBD::Mem::db r/o attrs
mem_meta => 1, # DBD::Mem public access for f_meta
};
$dbh->{mem_meta} = "mem_tables";
return $dbh->SUPER::init_valid_attributes();
}
sub get_mem_versions
{
my ( $dbh, $table ) = @_;
$table ||= '';
my $meta;
my $class = $dbh->{ImplementorClass};
$class =~ s/::db$/::Table/;
$table and ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 );
$meta or ( $meta = {} and $class->bootstrap_table_meta( $dbh, $meta, $table ) );
return sprintf( "%s using %s", $dbh->{mem_version}, $AnyData2::VERSION );
}
package DBD::Mem::st;
use strict;
use warnings;
our $imp_data_size = 0;
our @ISA = qw(DBI::DBD::SqlEngine::st);
############################
package DBD::Mem::Statement;
############################
@DBD::Mem::Statement::ISA = qw(DBI::DBD::SqlEngine::Statement);
sub open_table ($$$$$)
{
my ( $self, $data, $table, $createMode, $lockMode ) = @_;
my $class = ref $self;
$class =~ s/::Statement/::Table/;
my $flags = {
createMode => $createMode,
lockMode => $lockMode,
};
if( defined( $data->{Database}->{mem_table_data}->{$table} ) && $data->{Database}->{mem_table_data}->{$table})
{
my $t = $data->{Database}->{mem_tables}->{$table};
$t->seek( $data, 0, 0 );
return $t;
}
return $self->SUPER::open_table($data, $table, $createMode, $lockMode);
}
# ====== DataSource ============================================================
package DBD::Mem::DataSource;
use strict;
use warnings;
use Carp;
@DBD::Mem::DataSource::ISA = "DBI::DBD::SqlEngine::DataSource";
sub complete_table_name ($$;$)
{
my ( $self, $meta, $table, $respect_case ) = @_;
$table;
}
sub open_data ($)
{
my ( $self, $meta, $attrs, $flags ) = @_;
defined $meta->{data_tbl} or $meta->{data_tbl} = [];
}
########################
package DBD::Mem::Table;
########################
# shamelessly stolen from SQL::Statement::RAM
use Carp qw/croak/;
@DBD::Mem::Table::ISA = qw(DBI::DBD::SqlEngine::Table);
use Carp qw(croak);
sub new
{
#my ( $class, $tname, $col_names, $data_tbl ) = @_;
my ( $class, $data, $attrs, $flags ) = @_;
my $self = $class->SUPER::new($data, $attrs, $flags);
my $meta = $self->{meta};
$self->{records} = $meta->{data_tbl};
$self->{index} = 0;
$self;
}
sub bootstrap_table_meta
{
my ( $self, $dbh, $meta, $table ) = @_;
defined $meta->{sql_data_source} or $meta->{sql_data_source} = "DBD::Mem::DataSource";
$meta;
}
sub fetch_row
{
my ( $self, $data ) = @_;
return $self->{row} =
( $self->{records} and ( $self->{index} < scalar( @{ $self->{records} } ) ) )
? [ @{ $self->{records}->[ $self->{index}++ ] } ]
: undef;
}
sub push_row
{
my ( $self, $data, $fields ) = @_;
my $currentRow = $self->{index};
$self->{index} = $currentRow + 1;
$self->{records}->[$currentRow] = $fields;
return 1;
}
sub truncate
{
my $self = shift;
return splice @{ $self->{records} }, $self->{index}, 1;
}
sub push_names
{
my ( $self, $data, $names ) = @_;
my $meta = $self->{meta};
$meta->{col_names} = $self->{col_names} = $names;
$self->{org_col_names} = [ @{$names} ];
$self->{col_nums} = {};
$self->{col_nums}{ $names->[$_] } = $_ for ( 0 .. scalar @$names - 1 );
}
sub drop ($)
{
my ($self, $data) = @_;
delete $data->{Database}{sql_meta}{$self->{table}};
return 1;
} # drop
sub seek
{
my ( $self, $data, $pos, $whence ) = @_;
return unless defined $self->{records};
my ($currentRow) = $self->{index};
if ( $whence == 0 )
{
$currentRow = $pos;
}
elsif ( $whence == 1 )
{
$currentRow += $pos;
}
elsif ( $whence == 2 )
{
$currentRow = @{ $self->{records} } + $pos;
}
else
{
croak $self . "->seek: Illegal whence argument ($whence)";
}
$currentRow < 0 and
croak "Illegal row number: $currentRow";
$self->{index} = $currentRow;
}
1;
=head1 NAME
DBD::Mem - a DBI driver for Mem & MLMem files
=head1 SYNOPSIS
use DBI;
$dbh = DBI->connect('dbi:Mem:', undef, undef, {});
$dbh = DBI->connect('dbi:Mem:', undef, undef, {RaiseError => 1});
# or
$dbh = DBI->connect('dbi:Mem:');
$dbh = DBI->connect('DBI:Mem(RaiseError=1):');
and other variations on connect() as shown in the L<DBI> docs and
<DBI::DBD::SqlEngine metadata|DBI::DBD::SqlEngine/Metadata>.
Use standard DBI prepare, execute, fetch, placeholders, etc.,
see L<QUICK START> for an example.
=head1 DESCRIPTION
DBD::Mem is a database management system that works right out of the box.
If you have a standard installation of Perl and DBI you can begin creating,
accessing, and modifying simple database tables without any further modules.
You can add other modules (e.g., SQL::Statement) for improved functionality.
DBD::Mem doesn't store any data persistently - all data has the lifetime of
the instantiated C<$dbh>. The main reason to use DBD::Mem is to use extended
features of L<SQL::Statement> where temporary tables are required. One can
use DBD::Mem to simulate C<VIEWS> or sub-queries.
Bundling C<DBD::Mem> with L<DBI> will allow us further compatibility checks
of L<DBI::DBD::SqlEngine> beyond the capabilities of L<DBD::File> and
L<DBD::DBM>. This will ensure DBI provided basis for drivers like
L<DBD::AnyData2> or L<DBD::Amazon> are better prepared and tested for
not-file based backends.
=head2 Metadata
There're no new meta data introduced by C<DBD::Mem>. See
L<DBI::DBD::SqlEngine/Metadata> for full description.
=head1 GETTING HELP, MAKING SUGGESTIONS, AND REPORTING BUGS
If you need help installing or using DBD::Mem, please write to the DBI
users mailing list at L<mailto:dbi-users@perl.org> or to the
comp.lang.perl.modules newsgroup on usenet. I cannot always answer
every question quickly but there are many on the mailing list or in
the newsgroup who can.
DBD developers for DBD's which rely on DBI::DBD::SqlEngine or DBD::Mem or
use one of them as an example are suggested to join the DBI developers
mailing list at L<mailto:dbi-dev@perl.org> and strongly encouraged to join our
IRC channel at L<irc://irc.perl.org/dbi>.
If you have suggestions, ideas for improvements, or bugs to report, please
report a bug as described in DBI. Do not mail any of the authors directly,
you might not get an answer.
When reporting bugs, please send the output of C<< $dbh->mem_versions($table) >>
for a table that exhibits the bug and as small a sample as you can make of
the code that produces the bug. And of course, patches are welcome, too
:-).
If you need enhancements quickly, you can get commercial support as
described at L<http://dbi.perl.org/support/> or you can contact Jens Rehsack
at rehsack@cpan.org for commercial support.
=head1 AUTHOR AND COPYRIGHT
This module is written by Jens Rehsack < rehsack AT cpan.org >.
Copyright (c) 2016- by Jens Rehsack, all rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=head1 SEE ALSO
L<DBI> for the Database interface of the Perl Programming Language.
L<SQL::Statement> and L<DBI::SQL::Nano> for the available SQL engines.
L<SQL::Statement::RAM> where the implementation is shamelessly stolen from
to allow DBI bundled Pure-Perl drivers increase the test coverage.
L<DBD::SQLite> using C<dbname=:memory:> for an incredible fast in-memory database engine.
=cut
DBD/DBM.pm 0000644 00000145600 15033552504 0006105 0 ustar 00 #######################################################################
#
# DBD::DBM - a DBI driver for DBM files
#
# Copyright (c) 2004 by Jeff Zucker < jzucker AT cpan.org >
# Copyright (c) 2010-2013 by Jens Rehsack & H.Merijn Brand
#
# All rights reserved.
#
# You may freely distribute and/or modify this module under the terms
# of either the GNU General Public License (GPL) or the Artistic License,
# as specified in the Perl README file.
#
# USERS - see the pod at the bottom of this file
#
# DBD AUTHORS - see the comments in the code
#
#######################################################################
require 5.008;
use strict;
#################
package DBD::DBM;
#################
use base qw( DBD::File );
use vars qw($VERSION $ATTRIBUTION $drh $methods_already_installed);
$VERSION = '0.08';
$ATTRIBUTION = 'DBD::DBM by Jens Rehsack';
# no need to have driver() unless you need private methods
#
sub driver ($;$)
{
my ( $class, $attr ) = @_;
return $drh if ($drh);
# do the real work in DBD::File
#
$attr->{Attribution} = 'DBD::DBM by Jens Rehsack';
$drh = $class->SUPER::driver($attr);
# install private methods
#
# this requires that dbm_ (or foo_) be a registered prefix
# but you can write private methods before official registration
# by hacking the $dbd_prefix_registry in a private copy of DBI.pm
#
unless ( $methods_already_installed++ )
{
DBD::DBM::st->install_method('dbm_schema');
}
return $drh;
}
sub CLONE
{
undef $drh;
}
#####################
package DBD::DBM::dr;
#####################
$DBD::DBM::dr::imp_data_size = 0;
@DBD::DBM::dr::ISA = qw(DBD::File::dr);
# you could put some :dr private methods here
# you may need to over-ride some DBD::File::dr methods here
# but you can probably get away with just letting it do the work
# in most cases
#####################
package DBD::DBM::db;
#####################
$DBD::DBM::db::imp_data_size = 0;
@DBD::DBM::db::ISA = qw(DBD::File::db);
use Carp qw/carp/;
sub validate_STORE_attr
{
my ( $dbh, $attrib, $value ) = @_;
if ( $attrib eq "dbm_ext" or $attrib eq "dbm_lockfile" )
{
( my $newattrib = $attrib ) =~ s/^dbm_/f_/g;
carp "Attribute '$attrib' is depreciated, use '$newattrib' instead" if ($^W);
$attrib = $newattrib;
}
return $dbh->SUPER::validate_STORE_attr( $attrib, $value );
}
sub validate_FETCH_attr
{
my ( $dbh, $attrib ) = @_;
if ( $attrib eq "dbm_ext" or $attrib eq "dbm_lockfile" )
{
( my $newattrib = $attrib ) =~ s/^dbm_/f_/g;
carp "Attribute '$attrib' is depreciated, use '$newattrib' instead" if ($^W);
$attrib = $newattrib;
}
return $dbh->SUPER::validate_FETCH_attr($attrib);
}
sub set_versions
{
my $this = $_[0];
$this->{dbm_version} = $DBD::DBM::VERSION;
return $this->SUPER::set_versions();
}
sub init_valid_attributes
{
my $dbh = shift;
# define valid private attributes
#
# attempts to set non-valid attrs in connect() or
# with $dbh->{attr} will throw errors
#
# the attrs here *must* start with dbm_ or foo_
#
# see the STORE methods below for how to check these attrs
#
$dbh->{dbm_valid_attrs} = {
dbm_type => 1, # the global DBM type e.g. SDBM_File
dbm_mldbm => 1, # the global MLDBM serializer
dbm_cols => 1, # the global column names
dbm_version => 1, # verbose DBD::DBM version
dbm_store_metadata => 1, # column names, etc.
dbm_berkeley_flags => 1, # for BerkeleyDB
dbm_valid_attrs => 1, # DBD::DBM::db valid attrs
dbm_readonly_attrs => 1, # DBD::DBM::db r/o attrs
dbm_meta => 1, # DBD::DBM public access for f_meta
dbm_tables => 1, # DBD::DBM public access for f_meta
};
$dbh->{dbm_readonly_attrs} = {
dbm_version => 1, # verbose DBD::DBM version
dbm_valid_attrs => 1, # DBD::DBM::db valid attrs
dbm_readonly_attrs => 1, # DBD::DBM::db r/o attrs
dbm_meta => 1, # DBD::DBM public access for f_meta
};
$dbh->{dbm_meta} = "dbm_tables";
return $dbh->SUPER::init_valid_attributes();
}
sub init_default_attributes
{
my ( $dbh, $phase ) = @_;
$dbh->SUPER::init_default_attributes($phase);
$dbh->{f_lockfile} = '.lck';
return $dbh;
}
sub get_dbm_versions
{
my ( $dbh, $table ) = @_;
$table ||= '';
my $meta;
my $class = $dbh->{ImplementorClass};
$class =~ s/::db$/::Table/;
$table and ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 );
$meta or ( $meta = {} and $class->bootstrap_table_meta( $dbh, $meta, $table ) );
my $dver;
my $dtype = $meta->{dbm_type};
eval {
$dver = $meta->{dbm_type}->VERSION();
# *) when we're still alive here, everything went ok - no need to check for $@
$dtype .= " ($dver)";
};
if ( $meta->{dbm_mldbm} )
{
$dtype .= ' + MLDBM';
eval {
$dver = MLDBM->VERSION();
$dtype .= " ($dver)"; # (*)
};
eval {
my $ser_class = "MLDBM::Serializer::" . $meta->{dbm_mldbm};
my $ser_mod = $ser_class;
$ser_mod =~ s|::|/|g;
$ser_mod .= ".pm";
require $ser_mod;
$dver = $ser_class->VERSION();
$dtype .= ' + ' . $ser_class; # (*)
$dver and $dtype .= " ($dver)"; # (*)
};
}
return sprintf( "%s using %s", $dbh->{dbm_version}, $dtype );
}
# you may need to over-ride some DBD::File::db methods here
# but you can probably get away with just letting it do the work
# in most cases
#####################
package DBD::DBM::st;
#####################
$DBD::DBM::st::imp_data_size = 0;
@DBD::DBM::st::ISA = qw(DBD::File::st);
sub FETCH
{
my ( $sth, $attr ) = @_;
if ( $attr eq "NULLABLE" )
{
my @colnames = $sth->sql_get_colnames();
# XXX only BerkeleyDB fails having NULL values for non-MLDBM databases,
# none accept it for key - but it requires more knowledge between
# queries and tables storage to return fully correct information
$attr eq "NULLABLE" and return [ map { 0 } @colnames ];
}
return $sth->SUPER::FETCH($attr);
} # FETCH
sub dbm_schema
{
my ( $sth, $tname ) = @_;
return $sth->set_err( $DBI::stderr, 'No table name supplied!' ) unless $tname;
my $tbl_meta = $sth->{Database}->func( $tname, "f_schema", "get_sql_engine_meta" )
or return $sth->set_err( $sth->{Database}->err(), $sth->{Database}->errstr() );
return $tbl_meta->{$tname}->{f_schema};
}
# you could put some :st private methods here
# you may need to over-ride some DBD::File::st methods here
# but you can probably get away with just letting it do the work
# in most cases
############################
package DBD::DBM::Statement;
############################
@DBD::DBM::Statement::ISA = qw(DBD::File::Statement);
########################
package DBD::DBM::Table;
########################
use Carp;
use Fcntl;
@DBD::DBM::Table::ISA = qw(DBD::File::Table);
my $dirfext = $^O eq 'VMS' ? '.sdbm_dir' : '.dir';
my %reset_on_modify = (
dbm_type => "dbm_tietype",
dbm_mldbm => "dbm_tietype",
);
__PACKAGE__->register_reset_on_modify( \%reset_on_modify );
my %compat_map = (
( map { $_ => "dbm_$_" } qw(type mldbm store_metadata) ),
dbm_ext => 'f_ext',
dbm_file => 'f_file',
dbm_lockfile => ' f_lockfile',
);
__PACKAGE__->register_compat_map( \%compat_map );
sub bootstrap_table_meta
{
my ( $self, $dbh, $meta, $table ) = @_;
$meta->{dbm_type} ||= $dbh->{dbm_type} || 'SDBM_File';
$meta->{dbm_mldbm} ||= $dbh->{dbm_mldbm} if ( $dbh->{dbm_mldbm} );
$meta->{dbm_berkeley_flags} ||= $dbh->{dbm_berkeley_flags};
defined $meta->{f_ext}
or $meta->{f_ext} = $dbh->{f_ext};
unless ( defined( $meta->{f_ext} ) )
{
my $ext;
if ( $meta->{dbm_type} eq 'SDBM_File' or $meta->{dbm_type} eq 'ODBM_File' )
{
$ext = '.pag/r';
}
elsif ( $meta->{dbm_type} eq 'NDBM_File' )
{
# XXX NDBM_File on FreeBSD (and elsewhere?) may actually be Berkeley
# behind the scenes and so create a single .db file.
if ( $^O =~ /bsd/i or lc($^O) eq 'darwin' )
{
$ext = '.db/r';
}
elsif ( $^O eq 'SunOS' or $^O eq 'Solaris' or $^O eq 'AIX' )
{
$ext = '.pag/r'; # here it's implemented like dbm - just a bit improved
}
# else wrapped GDBM
}
defined($ext) and $meta->{f_ext} = $ext;
}
$self->SUPER::bootstrap_table_meta( $dbh, $meta, $table );
}
sub init_table_meta
{
my ( $self, $dbh, $meta, $table ) = @_;
$meta->{f_dontopen} = 1;
unless ( defined( $meta->{dbm_tietype} ) )
{
my $tie_type = $meta->{dbm_type};
$INC{"$tie_type.pm"} or require "$tie_type.pm";
$tie_type eq 'BerkeleyDB' and $tie_type = 'BerkeleyDB::Hash';
if ( $meta->{dbm_mldbm} )
{
$INC{"MLDBM.pm"} or require "MLDBM.pm";
$meta->{dbm_usedb} = $tie_type;
$tie_type = 'MLDBM';
}
$meta->{dbm_tietype} = $tie_type;
}
unless ( defined( $meta->{dbm_store_metadata} ) )
{
my $store = $dbh->{dbm_store_metadata};
defined($store) or $store = 1;
$meta->{dbm_store_metadata} = $store;
}
unless ( defined( $meta->{col_names} ) )
{
defined( $dbh->{dbm_cols} ) and $meta->{col_names} = $dbh->{dbm_cols};
}
$self->SUPER::init_table_meta( $dbh, $meta, $table );
}
sub open_data
{
my ( $className, $meta, $attrs, $flags ) = @_;
$className->SUPER::open_data( $meta, $attrs, $flags );
unless ( $flags->{dropMode} )
{
# TIEING
#
# XXX allow users to pass in a pre-created tied object
#
my @tie_args;
if ( $meta->{dbm_type} eq 'BerkeleyDB' )
{
my $DB_CREATE = BerkeleyDB::DB_CREATE();
my $DB_RDONLY = BerkeleyDB::DB_RDONLY();
my %tie_flags;
if ( my $f = $meta->{dbm_berkeley_flags} )
{
defined( $f->{DB_CREATE} ) and $DB_CREATE = delete $f->{DB_CREATE};
defined( $f->{DB_RDONLY} ) and $DB_RDONLY = delete $f->{DB_RDONLY};
%tie_flags = %$f;
}
my $open_mode = $flags->{lockMode} || $flags->{createMode} ? $DB_CREATE : $DB_RDONLY;
@tie_args = (
-Filename => $meta->{f_fqbn},
-Flags => $open_mode,
%tie_flags
);
}
else
{
my $open_mode = O_RDONLY;
$flags->{lockMode} and $open_mode = O_RDWR;
$flags->{createMode} and $open_mode = O_RDWR | O_CREAT | O_TRUNC;
@tie_args = ( $meta->{f_fqbn}, $open_mode, 0666 );
}
if ( $meta->{dbm_mldbm} )
{
$MLDBM::UseDB = $meta->{dbm_usedb};
$MLDBM::Serializer = $meta->{dbm_mldbm};
}
$meta->{hash} = {};
my $tie_class = $meta->{dbm_tietype};
eval { tie %{ $meta->{hash} }, $tie_class, @tie_args };
$@ and croak "Cannot tie(\%h $tie_class @tie_args): $@";
-f $meta->{f_fqfn} or croak( "No such file: '" . $meta->{f_fqfn} . "'" );
}
unless ( $flags->{createMode} )
{
my ( $meta_data, $schema, $col_names );
if ( $meta->{dbm_store_metadata} )
{
$meta_data = $col_names = $meta->{hash}->{"_metadata \0"};
if ( $meta_data and $meta_data =~ m~<dbd_metadata>(.+)</dbd_metadata>~is )
{
$schema = $col_names = $1;
$schema =~ s~.*<schema>(.+)</schema>.*~$1~is;
$col_names =~ s~.*<col_names>(.+)</col_names>.*~$1~is;
}
}
$col_names ||= $meta->{col_names} || [ 'k', 'v' ];
$col_names = [ split /,/, $col_names ] if ( ref $col_names ne 'ARRAY' );
if ( $meta->{dbm_store_metadata} and not $meta->{hash}->{"_metadata \0"} )
{
$schema or $schema = '';
$meta->{hash}->{"_metadata \0"} =
"<dbd_metadata>"
. "<schema>$schema</schema>"
. "<col_names>"
. join( ",", @{$col_names} )
. "</col_names>"
. "</dbd_metadata>";
}
$meta->{schema} = $schema;
$meta->{col_names} = $col_names;
}
}
# you must define drop
# it is called from execute of a SQL DROP statement
#
sub drop ($$)
{
my ( $self, $data ) = @_;
my $meta = $self->{meta};
$meta->{hash} and untie %{ $meta->{hash} };
$self->SUPER::drop($data);
# XXX extra_files
-f $meta->{f_fqbn} . $dirfext
and $meta->{f_ext} eq '.pag/r'
and unlink( $meta->{f_fqbn} . $dirfext );
return 1;
}
# you must define fetch_row, it is called on all fetches;
# it MUST return undef when no rows are left to fetch;
# checking for $ary[0] is specific to hashes so you'll
# probably need some other kind of check for nothing-left.
# as Janis might say: "undef's just another word for
# nothing left to fetch" :-)
#
sub fetch_row ($$)
{
my ( $self, $data ) = @_;
my $meta = $self->{meta};
# fetch with %each
#
my @ary = each %{ $meta->{hash} };
$meta->{dbm_store_metadata}
and $ary[0]
and $ary[0] eq "_metadata \0"
and @ary = each %{ $meta->{hash} };
my ( $key, $val ) = @ary;
unless ($key)
{
delete $self->{row};
return;
}
my @row = ( ref($val) eq 'ARRAY' ) ? ( $key, @$val ) : ( $key, $val );
$self->{row} = @row ? \@row : undef;
return wantarray ? @row : \@row;
}
# you must define push_row except insert_new_row and update_specific_row is defined
# it is called on inserts and updates as primitive
#
sub insert_new_row ($$$)
{
my ( $self, $data, $row_aryref ) = @_;
my $meta = $self->{meta};
my $ncols = scalar( @{ $meta->{col_names} } );
my $nitems = scalar( @{$row_aryref} );
$ncols == $nitems
or croak "You tried to insert $nitems, but table is created with $ncols columns";
my $key = shift @$row_aryref;
my $exists;
eval { $exists = exists( $meta->{hash}->{$key} ); };
$exists and croak "Row with PK '$key' already exists";
$meta->{hash}->{$key} = $meta->{dbm_mldbm} ? $row_aryref : $row_aryref->[0];
return 1;
}
# this is where you grab the column names from a CREATE statement
# if you don't need to do that, it must be defined but can be empty
#
sub push_names ($$$)
{
my ( $self, $data, $row_aryref ) = @_;
my $meta = $self->{meta};
# some sanity checks ...
my $ncols = scalar(@$row_aryref);
$ncols < 2 and croak "At least 2 columns are required for DBD::DBM tables ...";
!$meta->{dbm_mldbm}
and $ncols > 2
and croak "Without serializing with MLDBM only 2 columns are supported, you give $ncols";
$meta->{col_names} = $row_aryref;
return unless $meta->{dbm_store_metadata};
my $stmt = $data->{sql_stmt};
my $col_names = join( ',', @{$row_aryref} );
my $schema = $data->{Database}->{Statement};
$schema =~ s/^[^\(]+\((.+)\)$/$1/s;
$schema = $stmt->schema_str() if ( $stmt->can('schema_str') );
$meta->{hash}->{"_metadata \0"} =
"<dbd_metadata>"
. "<schema>$schema</schema>"
. "<col_names>$col_names</col_names>"
. "</dbd_metadata>";
}
# fetch_one_row, delete_one_row, update_one_row
# are optimized for hash-style lookup without looping;
# if you don't need them, omit them, they're optional
# but, in that case you may need to define
# truncate() and seek(), see below
#
sub fetch_one_row ($$;$)
{
my ( $self, $key_only, $key ) = @_;
my $meta = $self->{meta};
$key_only and return $meta->{col_names}->[0];
exists $meta->{hash}->{$key} or return;
my $val = $meta->{hash}->{$key};
$val = ( ref($val) eq 'ARRAY' ) ? $val : [$val];
my $row = [ $key, @$val ];
return wantarray ? @{$row} : $row;
}
sub delete_one_row ($$$)
{
my ( $self, $data, $aryref ) = @_;
my $meta = $self->{meta};
delete $meta->{hash}->{ $aryref->[0] };
}
sub update_one_row ($$$)
{
my ( $self, $data, $aryref ) = @_;
my $meta = $self->{meta};
my $key = shift @$aryref;
defined $key or return;
my $row = ( ref($aryref) eq 'ARRAY' ) ? $aryref : [$aryref];
$meta->{hash}->{$key} = $meta->{dbm_mldbm} ? $row : $row->[0];
}
sub update_specific_row ($$$$)
{
my ( $self, $data, $aryref, $origary ) = @_;
my $meta = $self->{meta};
my $key = shift @$origary;
my $newkey = shift @$aryref;
return unless ( defined $key );
$key eq $newkey or delete $meta->{hash}->{$key};
my $row = ( ref($aryref) eq 'ARRAY' ) ? $aryref : [$aryref];
$meta->{hash}->{$newkey} = $meta->{dbm_mldbm} ? $row : $row->[0];
}
# you may not need to explicitly DESTROY the ::Table
# put cleanup code to run when the execute is done
#
sub DESTROY ($)
{
my $self = shift;
my $meta = $self->{meta};
$meta->{hash} and untie %{ $meta->{hash} };
$self->SUPER::DESTROY();
}
# truncate() and seek() must be defined to satisfy DBI::SQL::Nano
# *IF* you define the *_one_row methods above, truncate() and
# seek() can be empty or you can use them without actually
# truncating or seeking anything but if you don't define the
# *_one_row methods, you may need to define these
# if you need to do something after a series of
# deletes or updates, you can put it in truncate()
# which is called at the end of executing
#
sub truncate ($$)
{
# my ( $self, $data ) = @_;
return 1;
}
# seek() is only needed if you use IO::File
# though it could be used for other non-file operations
# that you need to do before "writes" or truncate()
#
sub seek ($$$$)
{
# my ( $self, $data, $pos, $whence ) = @_;
return 1;
}
# Th, th, th, that's all folks! See DBD::File and DBD::CSV for other
# examples of creating pure perl DBDs. I hope this helped.
# Now it's time to go forth and create your own DBD!
# Remember to check in with dbi-dev@perl.org before you get too far.
# We may be able to make suggestions or point you to other related
# projects.
1;
__END__
=pod
=head1 NAME
DBD::DBM - a DBI driver for DBM & MLDBM files
=head1 SYNOPSIS
use DBI;
$dbh = DBI->connect('dbi:DBM:'); # defaults to SDBM_File
$dbh = DBI->connect('DBI:DBM(RaiseError=1):'); # defaults to SDBM_File
$dbh = DBI->connect('dbi:DBM:dbm_type=DB_File'); # defaults to DB_File
$dbh = DBI->connect('dbi:DBM:dbm_mldbm=Storable'); # MLDBM with SDBM_File
# or
$dbh = DBI->connect('dbi:DBM:', undef, undef);
$dbh = DBI->connect('dbi:DBM:', undef, undef, {
f_ext => '.db/r',
f_dir => '/path/to/dbfiles/',
f_lockfile => '.lck',
dbm_type => 'BerkeleyDB',
dbm_mldbm => 'FreezeThaw',
dbm_store_metadata => 1,
dbm_berkeley_flags => {
'-Cachesize' => 1000, # set a ::Hash flag
},
});
and other variations on connect() as shown in the L<DBI> docs,
L<DBD::File metadata|DBD::File/Metadata> and L</Metadata>
shown below.
Use standard DBI prepare, execute, fetch, placeholders, etc.,
see L<QUICK START> for an example.
=head1 DESCRIPTION
DBD::DBM is a database management system that works right out of the
box. If you have a standard installation of Perl and DBI you can
begin creating, accessing, and modifying simple database tables
without any further modules. You can add other modules (e.g.,
SQL::Statement, DB_File etc) for improved functionality.
The module uses a DBM file storage layer. DBM file storage is common on
many platforms and files can be created with it in many programming
languages using different APIs. That means, in addition to creating
files with DBI/SQL, you can also use DBI/SQL to access and modify files
created by other DBM modules and programs and vice versa. B<Note> that
in those cases it might be necessary to use a common subset of the
provided features.
DBM files are stored in binary format optimized for quick retrieval
when using a key field. That optimization can be used advantageously
to make DBD::DBM SQL operations that use key fields very fast. There
are several different "flavors" of DBM which use different storage
formats supported by perl modules such as SDBM_File and MLDBM. This
module supports all of the flavors that perl supports and, when used
with MLDBM, supports tables with any number of columns and insertion
of Perl objects into tables.
DBD::DBM has been tested with the following DBM types: SDBM_File,
NDBM_File, ODBM_File, GDBM_File, DB_File, BerkeleyDB. Each type was
tested both with and without MLDBM and with the Data::Dumper,
Storable, FreezeThaw, YAML and JSON serializers using the DBI::SQL::Nano
or the SQL::Statement engines.
=head1 QUICK START
DBD::DBM operates like all other DBD drivers - it's basic syntax and
operation is specified by DBI. If you're not familiar with DBI, you should
start by reading L<DBI> and the documents it points to and then come back
and read this file. If you are familiar with DBI, you already know most of
what you need to know to operate this module. Just jump in and create a
test script something like the one shown below.
You should be aware that there are several options for the SQL engine
underlying DBD::DBM, see L<Supported SQL syntax>. There are also many
options for DBM support, see especially the section on L<Adding
multi-column support with MLDBM>.
But here's a sample to get you started.
use DBI;
my $dbh = DBI->connect('dbi:DBM:');
$dbh->{RaiseError} = 1;
for my $sql( split /;\n+/,"
CREATE TABLE user ( user_name TEXT, phone TEXT );
INSERT INTO user VALUES ('Fred Bloggs','233-7777');
INSERT INTO user VALUES ('Sanjay Patel','777-3333');
INSERT INTO user VALUES ('Junk','xxx-xxxx');
DELETE FROM user WHERE user_name = 'Junk';
UPDATE user SET phone = '999-4444' WHERE user_name = 'Sanjay Patel';
SELECT * FROM user
"){
my $sth = $dbh->prepare($sql);
$sth->execute;
$sth->dump_results if $sth->{NUM_OF_FIELDS};
}
$dbh->disconnect;
=head1 USAGE
This section will explain some usage cases in more detail. To get an
overview about the available attributes, see L</Metadata>.
=head2 Specifying Files and Directories
DBD::DBM will automatically supply an appropriate file extension for the
type of DBM you are using. For example, if you use SDBM_File, a table
called "fruit" will be stored in two files called "fruit.pag" and
"fruit.dir". You should B<never> specify the file extensions in your SQL
statements.
DBD::DBM recognizes following default extensions for following types:
=over 4
=item .pag/r
Chosen for dbm_type C<< SDBM_File >>, C<< ODBM_File >> and C<< NDBM_File >>
when an implementation is detected which wraps C<< -ldbm >> for
C<< NDBM_File >> (e.g. Solaris, AIX, ...).
For those types, the C<< .dir >> extension is recognized, too (for being
deleted when dropping a table).
=item .db/r
Chosen for dbm_type C<< NDBM_File >> when an implementation is detected
which wraps BerkeleyDB 1.x for C<< NDBM_File >> (typically BSD's, Darwin).
=back
C<< GDBM_File >>, C<< DB_File >> and C<< BerkeleyDB >> don't usually
use a file extension.
If your DBM type uses an extension other than one of the recognized
types of extensions, you should set the I<f_ext> attribute to the
extension B<and> file a bug report as described in DBI with the name
of the implementation and extension so we can add it to DBD::DBM.
Thanks in advance for that :-).
$dbh = DBI->connect('dbi:DBM:f_ext=.db'); # .db extension is used
$dbh = DBI->connect('dbi:DBM:f_ext='); # no extension is used
# or
$dbh->{f_ext}='.db'; # global setting
$dbh->{f_meta}->{'qux'}->{f_ext}='.db'; # setting for table 'qux'
By default files are assumed to be in the current working directory.
To use other directories specify the I<f_dir> attribute in either the
connect string or by setting the database handle attribute.
For example, this will look for the file /foo/bar/fruit (or
/foo/bar/fruit.pag for DBM types that use that extension)
my $dbh = DBI->connect('dbi:DBM:f_dir=/foo/bar');
# and this will too:
my $dbh = DBI->connect('dbi:DBM:');
$dbh->{f_dir} = '/foo/bar';
# but this is recommended
my $dbh = DBI->connect('dbi:DBM:', undef, undef, { f_dir => '/foo/bar' } );
# now you can do
my $ary = $dbh->selectall_arrayref(q{ SELECT x FROM fruit });
You can also use delimited identifiers to specify paths directly in SQL
statements. This looks in the same place as the two examples above but
without setting I<f_dir>:
my $dbh = DBI->connect('dbi:DBM:');
my $ary = $dbh->selectall_arrayref(q{
SELECT x FROM "/foo/bar/fruit"
});
You can also tell DBD::DBM to use a specified path for a specific table:
$dbh->{dbm_tables}->{f}->{file} = q(/foo/bar/fruit);
Please be aware that you cannot specify this during connection.
If you have SQL::Statement installed, you can use table aliases:
my $dbh = DBI->connect('dbi:DBM:');
my $ary = $dbh->selectall_arrayref(q{
SELECT f.x FROM "/foo/bar/fruit" AS f
});
See the L<GOTCHAS AND WARNINGS> for using DROP on tables.
=head2 Table locking and flock()
Table locking is accomplished using a lockfile which has the same
basename as the table's file but with the file extension '.lck' (or a
lockfile extension that you supply, see below). This lock file is
created with the table during a CREATE and removed during a DROP.
Every time the table itself is opened, the lockfile is flocked(). For
SELECT, this is a shared lock. For all other operations, it is an
exclusive lock (except when you specify something different using the
I<f_lock> attribute).
Since the locking depends on flock(), it only works on operating
systems that support flock(). In cases where flock() is not
implemented, DBD::DBM will simply behave as if the flock() had
occurred although no actual locking will happen. Read the
documentation for flock() for more information.
Even on those systems that do support flock(), locking is only
advisory - as is always the case with flock(). This means that if
another program tries to access the table file while DBD::DBM has the
table locked, that other program will *succeed* at opening unless
it is also using flock on the '.lck' file. As a result DBD::DBM's
locking only really applies to other programs using DBD::DBM or other
program written to cooperate with DBD::DBM locking.
=head2 Specifying the DBM type
Each "flavor" of DBM stores its files in a different format and has
different capabilities and limitations. See L<AnyDBM_File> for a
comparison of DBM types.
By default, DBD::DBM uses the C<< SDBM_File >> type of storage since
C<< SDBM_File >> comes with Perl itself. If you have other types of
DBM storage available, you can use any of them with DBD::DBM. It is
strongly recommended to use at least C<< DB_File >>, because C<<
SDBM_File >> has quirks and limitations and C<< ODBM_file >>, C<<
NDBM_File >> and C<< GDBM_File >> are not always available.
You can specify the DBM type using the I<dbm_type> attribute which can
be set in the connection string or with C<< $dbh->{dbm_type} >> and
C<< $dbh->{f_meta}->{$table_name}->{type} >> for per-table settings in
cases where a single script is accessing more than one kind of DBM
file.
In the connection string, just set C<< dbm_type=TYPENAME >> where
C<< TYPENAME >> is any DBM type such as GDBM_File, DB_File, etc. Do I<not>
use MLDBM as your I<dbm_type> as that is set differently, see below.
my $dbh=DBI->connect('dbi:DBM:'); # uses the default SDBM_File
my $dbh=DBI->connect('dbi:DBM:dbm_type=GDBM_File'); # uses the GDBM_File
# You can also use $dbh->{dbm_type} to set the DBM type for the connection:
$dbh->{dbm_type} = 'DB_File'; # set the global DBM type
print $dbh->{dbm_type}; # display the global DBM type
If you have several tables in your script that use different DBM
types, you can use the $dbh->{dbm_tables} hash to store different
settings for the various tables. You can even use this to perform
joins on files that have completely different storage mechanisms.
# sets global default of GDBM_File
my $dbh->('dbi:DBM:type=GDBM_File');
# overrides the global setting, but only for the tables called
# I<foo> and I<bar>
my $dbh->{f_meta}->{foo}->{dbm_type} = 'DB_File';
my $dbh->{f_meta}->{bar}->{dbm_type} = 'BerkeleyDB';
# prints the dbm_type for the table "foo"
print $dbh->{f_meta}->{foo}->{dbm_type};
B<Note> that you must change the I<dbm_type> of a table before you access
it for first time.
=head2 Adding multi-column support with MLDBM
Most of the DBM types only support two columns and even if it would
support more, DBD::DBM would only use two. However a CPAN module
called MLDBM overcomes this limitation by allowing more than two
columns. MLDBM does this by serializing the data - basically it puts
a reference to an array into the second column. It can also put almost
any kind of Perl object or even B<Perl coderefs> into columns.
If you want more than two columns, you B<must> install MLDBM. It's available
for many platforms and is easy to install.
MLDBM is by default distributed with three serializers - Data::Dumper,
Storable, and FreezeThaw. Data::Dumper is the default and Storable is the
fastest. MLDBM can also make use of user-defined serialization methods or
other serialization modules (e.g. L<YAML::MLDBM> or
L<MLDBM::Serializer::JSON>. You select the serializer using the
I<dbm_mldbm> attribute.
Some examples:
$dbh=DBI->connect('dbi:DBM:dbm_mldbm=Storable'); # use MLDBM with Storable
$dbh=DBI->connect(
'dbi:DBM:dbm_mldbm=MySerializer' # use MLDBM with a user defined module
);
$dbh=DBI->connect('dbi::dbm:', undef,
undef, { dbm_mldbm => 'YAML' }); # use 3rd party serializer
$dbh->{dbm_mldbm} = 'YAML'; # same as above
print $dbh->{dbm_mldbm} # show the MLDBM serializer
$dbh->{f_meta}->{foo}->{dbm_mldbm}='Data::Dumper'; # set Data::Dumper for table "foo"
print $dbh->{f_meta}->{foo}->{mldbm}; # show serializer for table "foo"
MLDBM works on top of other DBM modules so you can also set a DBM type
along with setting dbm_mldbm. The examples above would default to using
SDBM_File with MLDBM. If you wanted GDBM_File instead, here's how:
# uses DB_File with MLDBM and Storable
$dbh = DBI->connect('dbi:DBM:', undef, undef, {
dbm_type => 'DB_File',
dbm_mldbm => 'Storable',
});
SDBM_File, the default I<dbm_type> is quite limited, so if you are going to
use MLDBM, you should probably use a different type, see L<AnyDBM_File>.
See below for some L<GOTCHAS AND WARNINGS> about MLDBM.
=head2 Support for Berkeley DB
The Berkeley DB storage type is supported through two different Perl
modules - DB_File (which supports only features in old versions of Berkeley
DB) and BerkeleyDB (which supports all versions). DBD::DBM supports
specifying either "DB_File" or "BerkeleyDB" as a I<dbm_type>, with or
without MLDBM support.
The "BerkeleyDB" dbm_type is experimental and it's interface is likely to
change. It currently defaults to BerkeleyDB::Hash and does not currently
support ::Btree or ::Recno.
With BerkeleyDB, you can specify initialization flags by setting them in
your script like this:
use BerkeleyDB;
my $env = new BerkeleyDB::Env -Home => $dir; # and/or other Env flags
$dbh = DBI->connect('dbi:DBM:', undef, undef, {
dbm_type => 'BerkeleyDB',
dbm_mldbm => 'Storable',
dbm_berkeley_flags => {
'DB_CREATE' => DB_CREATE, # pass in constants
'DB_RDONLY' => DB_RDONLY, # pass in constants
'-Cachesize' => 1000, # set a ::Hash flag
'-Env' => $env, # pass in an environment
},
});
Do I<not> set the -Flags or -Filename flags as those are determined and
overwritten by the SQL (e.g. -Flags => DB_RDONLY is set automatically
when you issue a SELECT statement).
Time has not permitted us to provide support in this release of DBD::DBM
for further Berkeley DB features such as transactions, concurrency,
locking, etc. We will be working on these in the future and would value
suggestions, patches, etc.
See L<DB_File> and L<BerkeleyDB> for further details.
=head2 Optimizing the use of key fields
Most "flavors" of DBM have only two physical columns (but can contain
multiple logical columns as explained above in
L<Adding multi-column support with MLDBM>). They work similarly to a
Perl hash with the first column serving as the key. Like a Perl hash, DBM
files permit you to do quick lookups by specifying the key and thus avoid
looping through all records (supported by DBI::SQL::Nano only). Also like
a Perl hash, the keys must be unique. It is impossible to create two
records with the same key. To put this more simply and in SQL terms,
the key column functions as the I<PRIMARY KEY> or UNIQUE INDEX.
In DBD::DBM, you can take advantage of the speed of keyed lookups by using
DBI::SQL::Nano and a WHERE clause with a single equal comparison on the key
field. For example, the following SQL statements are optimized for keyed
lookup:
CREATE TABLE user ( user_name TEXT, phone TEXT);
INSERT INTO user VALUES ('Fred Bloggs','233-7777');
# ... many more inserts
SELECT phone FROM user WHERE user_name='Fred Bloggs';
The "user_name" column is the key column since it is the first
column. The SELECT statement uses the key column in a single equal
comparison - "user_name='Fred Bloggs'" - so the search will find it
very quickly without having to loop through all the names which were
inserted into the table.
In contrast, these searches on the same table are not optimized:
1. SELECT phone FROM user WHERE user_name < 'Fred';
2. SELECT user_name FROM user WHERE phone = '233-7777';
In #1, the operation uses a less-than (<) comparison rather than an equals
comparison, so it will not be optimized for key searching. In #2, the key
field "user_name" is not specified in the WHERE clause, and therefore the
search will need to loop through all rows to find the requested row(s).
B<Note> that the underlying DBM storage needs to loop over all I<key/value>
pairs when the optimized fetch is used. SQL::Statement has a massively
improved where clause evaluation which costs around 15% of the evaluation
in DBI::SQL::Nano - combined with the loop in the DBM storage the speed
improvement isn't so impressive.
Even if lookups are faster by around 50%, DBI::SQL::Nano and
SQL::Statement can benefit from the key field optimizations on
updating and deleting rows - and here the improved where clause
evaluation of SQL::Statement might beat DBI::SQL::Nano every time the
where clause contains not only the key field (or more than one).
=head2 Supported SQL syntax
DBD::DBM uses a subset of SQL. The robustness of that subset depends on
what other modules you have installed. Both options support basic SQL
operations including CREATE TABLE, DROP TABLE, INSERT, DELETE, UPDATE, and
SELECT.
B<Option #1:> By default, this module inherits its SQL support from
DBI::SQL::Nano that comes with DBI. Nano is, as its name implies, a *very*
small SQL engine. Although limited in scope, it is faster than option #2
for some operations (especially single I<primary key> lookups). See
L<DBI::SQL::Nano> for a description of the SQL it supports and comparisons
of it with option #2.
B<Option #2:> If you install the pure Perl CPAN module SQL::Statement,
DBD::DBM will use it instead of Nano. This adds support for table aliases,
functions, joins, and much more. If you're going to use DBD::DBM
for anything other than very simple tables and queries, you should install
SQL::Statement. You don't have to change DBD::DBM or your scripts in any
way, simply installing SQL::Statement will give you the more robust SQL
capabilities without breaking scripts written for DBI::SQL::Nano. See
L<SQL::Statement> for a description of the SQL it supports.
To find out which SQL module is working in a given script, you can use the
dbm_versions() method or, if you don't need the full output and version
numbers, just do this:
print $dbh->{sql_handler}, "\n";
That will print out either "SQL::Statement" or "DBI::SQL::Nano".
Baring the section about optimized access to the DBM storage in mind,
comparing the benefits of both engines:
# DBI::SQL::Nano is faster
$sth = $dbh->prepare( "update foo set value='new' where key=15" );
$sth->execute();
$sth = $dbh->prepare( "delete from foo where key=27" );
$sth->execute();
$sth = $dbh->prepare( "select * from foo where key='abc'" );
# SQL::Statement might faster (depending on DB size)
$sth = $dbh->prepare( "update foo set value='new' where key=?" );
$sth->execute(15);
$sth = $dbh->prepare( "update foo set value=? where key=15" );
$sth->execute('new');
$sth = $dbh->prepare( "delete from foo where key=?" );
$sth->execute(27);
# SQL::Statement is faster
$sth = $dbh->prepare( "update foo set value='new' where value='old'" );
$sth->execute();
# must be expressed using "where key = 15 or key = 27 or key = 42 or key = 'abc'"
# in DBI::SQL::Nano
$sth = $dbh->prepare( "delete from foo where key in (15,27,42,'abc')" );
$sth->execute();
# must be expressed using "where key > 10 and key < 90" in DBI::SQL::Nano
$sth = $dbh->prepare( "select * from foo where key between (10,90)" );
$sth->execute();
# only SQL::Statement can handle
$sth->prepare( "select * from foo,bar where foo.name = bar.name" );
$sth->execute();
$sth->prepare( "insert into foo values ( 1, 'foo' ), ( 2, 'bar' )" );
$sth->execute();
=head2 Specifying Column Names
DBM files don't have a standard way to store column names. DBD::DBM gets
around this issue with a DBD::DBM specific way of storing the column names.
B<If you are working only with DBD::DBM and not using files created by or
accessed with other DBM programs, you can ignore this section.>
DBD::DBM stores column names as a row in the file with the key I<_metadata
\0>. So this code
my $dbh = DBI->connect('dbi:DBM:');
$dbh->do("CREATE TABLE baz (foo CHAR(10), bar INTEGER)");
$dbh->do("INSERT INTO baz (foo,bar) VALUES ('zippy',1)");
Will create a file that has a structure something like this:
_metadata \0 | <dbd_metadata><schema></schema><col_names>foo,bar</col_names></dbd_metadata>
zippy | 1
The next time you access this table with DBD::DBM, it will treat the
I<_metadata \0> row as a header rather than as data and will pull the column
names from there. However, if you access the file with something other
than DBD::DBM, the row will be treated as a regular data row.
If you do not want the column names stored as a data row in the table you
can set the I<dbm_store_metadata> attribute to 0.
my $dbh = DBI->connect('dbi:DBM:', undef, undef, { dbm_store_metadata => 0 });
# or
$dbh->{dbm_store_metadata} = 0;
# or for per-table setting
$dbh->{f_meta}->{qux}->{dbm_store_metadata} = 0;
By default, DBD::DBM assumes that you have two columns named "k" and "v"
(short for "key" and "value"). So if you have I<dbm_store_metadata> set to
1 and you want to use alternate column names, you need to specify the
column names like this:
my $dbh = DBI->connect('dbi:DBM:', undef, undef, {
dbm_store_metadata => 0,
dbm_cols => [ qw(foo bar) ],
});
# or
$dbh->{dbm_store_metadata} = 0;
$dbh->{dbm_cols} = 'foo,bar';
# or to set the column names on per-table basis, do this:
# sets the column names only for table "qux"
$dbh->{f_meta}->{qux}->{dbm_store_metadata} = 0;
$dbh->{f_meta}->{qux}->{col_names} = [qw(foo bar)];
If you have a file that was created by another DBM program or created with
I<dbm_store_metadata> set to zero and you want to convert it to using
DBD::DBM's column name storage, just use one of the methods above to name
the columns but *without* specifying I<dbm_store_metadata> as zero. You
only have to do that once - thereafter you can get by without setting
either I<dbm_store_metadata> or setting I<dbm_cols> because the names will
be stored in the file.
=head1 DBI database handle attributes
=head2 Metadata
=head3 Statement handle ($sth) attributes and methods
Most statement handle attributes such as NAME, NUM_OF_FIELDS, etc. are
available only after an execute. The same is true of $sth->rows which is
available after the execute but does I<not> require a fetch.
=head3 Driver handle ($dbh) attributes
It is not supported anymore to use dbm-attributes without the dbm_-prefix.
Currently, if an DBD::DBM private attribute is accessed without an
underscore in it's name, dbm_ is prepended to that attribute and it's
processed further. If the resulting attribute name is invalid, an error is
thrown.
=head4 dbm_cols
Contains a comma separated list of column names or an array reference to
the column names.
=head4 dbm_type
Contains the DBM storage type. Currently known supported type are
C<< ODBM_File >>, C<< NDBM_File >>, C<< SDBM_File >>, C<< GDBM_File >>,
C<< DB_File >> and C<< BerkeleyDB >>. It is not recommended to use one
of the first three types - even if C<< SDBM_File >> is the most commonly
available I<dbm_type>.
=head4 dbm_mldbm
Contains the serializer for DBM storage (value column). Requires the
CPAN module L<MLDBM> installed. Currently known supported serializers
are:
=over 8
=item Data::Dumper
Default serializer. Deployed with Perl core.
=item Storable
Faster serializer. Deployed with Perl core.
=item FreezeThaw
Pure Perl serializer, requires L<FreezeThaw> to be installed.
=item YAML
Portable serializer (between languages but not architectures).
Requires L<YAML::MLDBM> installation.
=item JSON
Portable, fast serializer (between languages but not architectures).
Requires L<MLDBM::Serializer::JSON> installation.
=back
=head4 dbm_store_metadata
Boolean value which determines if the metadata in DBM is stored or not.
=head4 dbm_berkeley_flags
Hash reference with additional flags for BerkeleyDB::Hash instantiation.
=head4 dbm_version
Readonly attribute containing the version of DBD::DBM.
=head4 f_meta
In addition to the attributes L<DBD::File> recognizes, DBD::DBM knows
about the (public) attributes C<col_names> (B<Note> not I<dbm_cols>
here!), C<dbm_type>, C<dbm_mldbm>, C<dbm_store_metadata> and
C<dbm_berkeley_flags>. As in DBD::File, there are undocumented,
internal attributes in DBD::DBM. Be very careful when modifying
attributes you do not know; the consequence might a destroyed or
corrupted table.
=head4 dbm_tables
This attribute provides restricted access to the table meta data. See
L<f_meta> and L<DBD::File/f_meta> for attribute details.
dbm_tables is a tied hash providing the internal table names as keys
(accessing unknown tables might create an entry) and their meta
data as another tied hash. The table meta storage is obtained via
the C<get_table_meta> method from the table implementation (see
L<DBD::File::Developers>). Attribute setting and getting within the
table meta data is handled via the methods C<set_table_meta_attr> and
C<get_table_meta_attr>.
=head3 Following attributes are no longer handled by DBD::DBM:
=head4 dbm_ext
This attribute is silently mapped to DBD::File's attribute I<f_ext>.
Later versions of DBI might show a depreciated warning when this attribute
is used and eventually it will be removed.
=head4 dbm_lockfile
This attribute is silently mapped to DBD::File's attribute I<f_lockfile>.
Later versions of DBI might show a depreciated warning when this attribute
is used and eventually it will be removed.
=head1 DBI database handle methods
=head2 The $dbh->dbm_versions() method
The private method dbm_versions() returns a summary of what other modules
are being used at any given time. DBD::DBM can work with or without many
other modules - it can use either SQL::Statement or DBI::SQL::Nano as its
SQL engine, it can be run with DBI or DBI::PurePerl, it can use many kinds
of DBM modules, and many kinds of serializers when run with MLDBM. The
dbm_versions() method reports all of that and more.
print $dbh->dbm_versions; # displays global settings
print $dbh->dbm_versions($table_name); # displays per table settings
An important thing to note about this method is that when it called
with no arguments, it displays the *global* settings. If you override
these by setting per-table attributes, these will I<not> be shown
unless you specify a table name as an argument to the method call.
=head2 Storing Objects
If you are using MLDBM, you can use DBD::DBM to take advantage of its
serializing abilities to serialize any Perl object that MLDBM can handle.
To store objects in columns, you should (but don't absolutely need to)
declare it as a column of type BLOB (the type is *currently* ignored by
the SQL engine, but it's good form).
=head1 EXTENSIBILITY
=over 8
=item C<SQL::Statement>
Improved SQL engine compared to the built-in DBI::SQL::Nano - see
L<Supported SQL syntax>.
=item C<DB_File>
Berkeley DB version 1. This database library is available on many
systems without additional installation and most systems are
supported.
=item C<GDBM_File>
Simple dbm type (comparable to C<DB_File>) under the GNU license.
Typically not available (or requires extra installation) on non-GNU
operating systems.
=item C<BerkeleyDB>
Berkeley DB version up to v4 (and maybe higher) - requires additional
installation but is easier than GDBM_File on non-GNU systems.
db4 comes with a many tools which allow repairing and migrating
databases. This is the B<recommended> dbm type for production use.
=item C<MLDBM>
Serializer wrapper to support more than one column for the files.
Comes with serializers using C<Data::Dumper>, C<FreezeThaw> and
C<Storable>.
=item C<YAML::MLDBM>
Additional serializer for MLDBM. YAML is very portable between languages.
=item C<MLDBM::Serializer::JSON>
Additional serializer for MLDBM. JSON is very portable between languages,
probably more than YAML.
=back
=head1 GOTCHAS AND WARNINGS
Using the SQL DROP command will remove any file that has the name specified
in the command with either '.pag' and '.dir', '.db' or your {f_ext} appended
to it. So this be dangerous if you aren't sure what file it refers to:
$dbh->do(qq{DROP TABLE "/path/to/any/file"});
Each DBM type has limitations. SDBM_File, for example, can only store
values of less than 1,000 characters. *You* as the script author must
ensure that you don't exceed those bounds. If you try to insert a value
that is larger than DBM can store, the results will be unpredictable.
See the documentation for whatever DBM you are using for details.
Different DBM implementations return records in different orders.
That means that you I<should not> rely on the order of records unless
you use an ORDER BY statement.
DBM data files are platform-specific. To move them from one platform to
another, you'll need to do something along the lines of dumping your data
to CSV on platform #1 and then dumping from CSV to DBM on platform #2.
DBD::AnyData and DBD::CSV can help with that. There may also be DBM
conversion tools for your platforms which would probably be quicker.
When using MLDBM, there is a very powerful serializer - it will allow
you to store Perl code or objects in database columns. When these get
de-serialized, they may be eval'ed - in other words MLDBM (or actually
Data::Dumper when used by MLDBM) may take the values and try to
execute them in Perl. Obviously, this can present dangers, so if you
do not know what is in a file, be careful before you access it with
MLDBM turned on!
See the entire section on L<Table locking and flock()> for gotchas and
warnings about the use of flock().
=head1 BUGS AND LIMITATIONS
This module uses hash interfaces of two column file databases. While
none of supported SQL engines have support for indices, the following
statements really do the same (even if they mean something completely
different) for each dbm type which lacks C<EXISTS> support:
$sth->do( "insert into foo values (1, 'hello')" );
# this statement does ...
$sth->do( "update foo set v='world' where k=1" );
# ... the same as this statement
$sth->do( "insert into foo values (1, 'world')" );
This is considered to be a bug and might change in a future release.
Known affected dbm types are C<ODBM_File> and C<NDBM_File>. We highly
recommended you use a more modern dbm type such as C<DB_File>.
=head1 GETTING HELP, MAKING SUGGESTIONS, AND REPORTING BUGS
If you need help installing or using DBD::DBM, please write to the DBI
users mailing list at dbi-users@perl.org or to the
comp.lang.perl.modules newsgroup on usenet. I cannot always answer
every question quickly but there are many on the mailing list or in
the newsgroup who can.
DBD developers for DBD's which rely on DBD::File or DBD::DBM or use
one of them as an example are suggested to join the DBI developers
mailing list at dbi-dev@perl.org and strongly encouraged to join our
IRC channel at L<irc://irc.perl.org/dbi>.
If you have suggestions, ideas for improvements, or bugs to report, please
report a bug as described in DBI. Do not mail any of the authors directly,
you might not get an answer.
When reporting bugs, please send the output of $dbh->dbm_versions($table)
for a table that exhibits the bug and as small a sample as you can make of
the code that produces the bug. And of course, patches are welcome, too
:-).
If you need enhancements quickly, you can get commercial support as
described at L<http://dbi.perl.org/support/> or you can contact Jens Rehsack
at rehsack@cpan.org for commercial support in Germany.
Please don't bother Jochen Wiedmann or Jeff Zucker for support - they
handed over further maintenance to H.Merijn Brand and Jens Rehsack.
=head1 ACKNOWLEDGEMENTS
Many, many thanks to Tim Bunce for prodding me to write this, and for
copious, wise, and patient suggestions all along the way. (Jeff Zucker)
I send my thanks and acknowledgements to H.Merijn Brand for his
initial refactoring of DBD::File and his strong and ongoing support of
SQL::Statement. Without him, the current progress would never have
been made. And I have to name Martin J. Evans for each laugh (and
correction) of all those funny word creations I (as non-native
speaker) made to the documentation. And - of course - I have to thank
all those unnamed contributors and testers from the Perl
community. (Jens Rehsack)
=head1 AUTHOR AND COPYRIGHT
This module is written by Jeff Zucker < jzucker AT cpan.org >, who also
maintained it till 2007. After that, in 2010, Jens Rehsack & H.Merijn Brand
took over maintenance.
Copyright (c) 2004 by Jeff Zucker, all rights reserved.
Copyright (c) 2010-2013 by Jens Rehsack & H.Merijn Brand, all rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=head1 SEE ALSO
L<DBI>,
L<SQL::Statement>, L<DBI::SQL::Nano>,
L<AnyDBM_File>, L<DB_File>, L<BerkeleyDB>,
L<MLDBM>, L<YAML::MLDBM>, L<MLDBM::Serializer::JSON>
=cut
DBD/Sponge.pm 0000644 00000017436 15033552504 0006743 0 ustar 00 use strict;
{
package DBD::Sponge;
require DBI;
require Carp;
our @EXPORT = qw(); # Do NOT @EXPORT anything.
our $VERSION = "12.010003";
# $Id: Sponge.pm 10002 2007-09-26 21:03:25Z Tim $
#
# Copyright (c) 1994-2003 Tim Bunce Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
our $drh = undef; # holds driver handle once initialised
my $methods_already_installed;
sub driver{
return $drh if $drh;
DBD::Sponge::db->install_method("sponge_test_installed_method")
unless $methods_already_installed++;
my($class, $attr) = @_;
$class .= "::dr";
($drh) = DBI::_new_drh($class, {
'Name' => 'Sponge',
'Version' => $VERSION,
'Attribution' => "DBD::Sponge $VERSION (fake cursor driver) by Tim Bunce",
});
$drh;
}
sub CLONE {
undef $drh;
}
}
{ package DBD::Sponge::dr; # ====== DRIVER ======
our $imp_data_size = 0;
# we use default (dummy) connect method
}
{ package DBD::Sponge::db; # ====== DATABASE ======
our $imp_data_size = 0;
use strict;
sub prepare {
my($dbh, $statement, $attribs) = @_;
my $rows = delete $attribs->{'rows'}
or return $dbh->set_err($DBI::stderr,"No rows attribute supplied to prepare");
my ($outer, $sth) = DBI::_new_sth($dbh, {
'Statement' => $statement,
'rows' => $rows,
(map { exists $attribs->{$_} ? ($_=>$attribs->{$_}) : () }
qw(execute_hook)
),
});
if (my $behave_like = $attribs->{behave_like}) {
$outer->{$_} = $behave_like->{$_}
foreach (qw(RaiseError PrintError HandleError ShowErrorStatement));
}
if ($statement =~ /^\s*insert\b/) { # very basic, just for testing execute_array()
$sth->{is_insert} = 1;
my $NUM_OF_PARAMS = $attribs->{NUM_OF_PARAMS}
or return $dbh->set_err($DBI::stderr,"NUM_OF_PARAMS not specified for INSERT statement");
$sth->STORE('NUM_OF_PARAMS' => $attribs->{NUM_OF_PARAMS} );
}
else { #assume select
# we need to set NUM_OF_FIELDS
my $numFields;
if ($attribs->{'NUM_OF_FIELDS'}) {
$numFields = $attribs->{'NUM_OF_FIELDS'};
} elsif ($attribs->{'NAME'}) {
$numFields = @{$attribs->{NAME}};
} elsif ($attribs->{'TYPE'}) {
$numFields = @{$attribs->{TYPE}};
} elsif (my $firstrow = $rows->[0]) {
$numFields = scalar @$firstrow;
} else {
return $dbh->set_err($DBI::stderr, 'Cannot determine NUM_OF_FIELDS');
}
$sth->STORE('NUM_OF_FIELDS' => $numFields);
$sth->{NAME} = $attribs->{NAME}
|| [ map { "col$_" } 1..$numFields ];
$sth->{TYPE} = $attribs->{TYPE}
|| [ (DBI::SQL_VARCHAR()) x $numFields ];
$sth->{PRECISION} = $attribs->{PRECISION}
|| [ map { length($sth->{NAME}->[$_]) } 0..$numFields -1 ];
$sth->{SCALE} = $attribs->{SCALE}
|| [ (0) x $numFields ];
$sth->{NULLABLE} = $attribs->{NULLABLE}
|| [ (2) x $numFields ];
}
$outer;
}
sub type_info_all {
my ($dbh) = @_;
my $ti = [
{ TYPE_NAME => 0,
DATA_TYPE => 1,
PRECISION => 2,
LITERAL_PREFIX => 3,
LITERAL_SUFFIX => 4,
CREATE_PARAMS => 5,
NULLABLE => 6,
CASE_SENSITIVE => 7,
SEARCHABLE => 8,
UNSIGNED_ATTRIBUTE=> 9,
MONEY => 10,
AUTO_INCREMENT => 11,
LOCAL_TYPE_NAME => 12,
MINIMUM_SCALE => 13,
MAXIMUM_SCALE => 14,
},
[ 'VARCHAR', DBI::SQL_VARCHAR(), undef, "'","'", undef, 0, 1, 1, 0, 0,0,undef,0,0 ],
];
return $ti;
}
sub FETCH {
my ($dbh, $attrib) = @_;
# In reality this would interrogate the database engine to
# either return dynamic values that cannot be precomputed
# or fetch and cache attribute values too expensive to prefetch.
return 1 if $attrib eq 'AutoCommit';
# else pass up to DBI to handle
return $dbh->SUPER::FETCH($attrib);
}
sub STORE {
my ($dbh, $attrib, $value) = @_;
# would normally validate and only store known attributes
# else pass up to DBI to handle
if ($attrib eq 'AutoCommit') {
return 1 if $value; # is already set
Carp::croak("Can't disable AutoCommit");
}
return $dbh->SUPER::STORE($attrib, $value);
}
sub sponge_test_installed_method {
my ($dbh, @args) = @_;
return $dbh->set_err(42, "not enough parameters") unless @args >= 2;
return \@args;
}
}
{ package DBD::Sponge::st; # ====== STATEMENT ======
our $imp_data_size = 0;
use strict;
sub execute {
my $sth = shift;
# hack to support ParamValues (when not using bind_param)
$sth->{ParamValues} = (@_) ? { map { $_ => $_[$_-1] } 1..@_ } : undef;
if (my $hook = $sth->{execute_hook}) {
&$hook($sth, @_) or return;
}
if ($sth->{is_insert}) {
my $row;
$row = (@_) ? [ @_ ] : die "bind_param not supported yet" ;
my $NUM_OF_PARAMS = $sth->{NUM_OF_PARAMS};
return $sth->set_err($DBI::stderr, @$row." values bound (@$row) but $NUM_OF_PARAMS expected")
if @$row != $NUM_OF_PARAMS;
{ local $^W; $sth->trace_msg("inserting (@$row)\n"); }
push @{ $sth->{rows} }, $row;
}
else { # mark select sth as Active
$sth->STORE(Active => 1);
}
# else do nothing for select as data is already in $sth->{rows}
return 1;
}
sub fetch {
my ($sth) = @_;
my $row = shift @{$sth->{'rows'}};
unless ($row) {
$sth->STORE(Active => 0);
return undef;
}
return $sth->_set_fbav($row);
}
*fetchrow_arrayref = \&fetch;
sub FETCH {
my ($sth, $attrib) = @_;
# would normally validate and only fetch known attributes
# else pass up to DBI to handle
return $sth->SUPER::FETCH($attrib);
}
sub STORE {
my ($sth, $attrib, $value) = @_;
# would normally validate and only store known attributes
# else pass up to DBI to handle
return $sth->SUPER::STORE($attrib, $value);
}
}
1;
__END__
=pod
=head1 NAME
DBD::Sponge - Create a DBI statement handle from Perl data
=head1 SYNOPSIS
my $sponge = DBI->connect("dbi:Sponge:","","",{ RaiseError => 1 });
my $sth = $sponge->prepare($statement, {
rows => $data,
NAME => $names,
%attr
}
);
=head1 DESCRIPTION
DBD::Sponge is useful for making a Perl data structure accessible through a
standard DBI statement handle. This may be useful to DBD module authors who
need to transform data in this way.
=head1 METHODS
=head2 connect()
my $sponge = DBI->connect("dbi:Sponge:","","",{ RaiseError => 1 });
Here's a sample syntax for creating a database handle for the Sponge driver.
No username and password are needed.
=head2 prepare()
my $sth = $sponge->prepare($statement, {
rows => $data,
NAME => $names,
%attr
}
);
=over 4
=item *
The C<$statement> here is an arbitrary statement or name you want
to provide as identity of your data. If you're using DBI::Profile
it will appear in the profile data.
Generally it's expected that you are preparing a statement handle
as if a C<select> statement happened.
=item *
C<$data> is a reference to the data you are providing, given as an array of arrays.
=item *
C<$names> is a reference an array of column names for the C<$data> you are providing.
The number and order should match the number and ordering of the C<$data> columns.
=item *
C<%attr> is a hash of other standard DBI attributes that you might pass to a prepare statement.
Currently only NAME, TYPE, and PRECISION are supported.
=back
=head1 BUGS
Using this module to prepare INSERT-like statements is not currently documented.
=head1 AUTHOR AND COPYRIGHT
This module is Copyright (c) 2003 Tim Bunce
Documentation initially written by Mark Stosberg
The DBD::Sponge module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. In particular permission
is granted to Tim Bunce for distributing this as a part of the DBI.
=head1 SEE ALSO
L<DBI>
=cut
DBD/ExampleP.pm 0000644 00000030175 15033552504 0007216 0 ustar 00 {
package DBD::ExampleP;
use strict;
use Symbol;
use DBI qw(:sql_types);
require File::Spec;
our (@EXPORT,$VERSION,@statnames,%statnames,@stattypes,%stattypes,
@statprec,%statprec,$drh,);
@EXPORT = qw(); # Do NOT @EXPORT anything.
$VERSION = "12.014311";
# $Id: ExampleP.pm 14310 2010-08-02 06:35:25Z Jens $
#
# Copyright (c) 1994,1997,1998 Tim Bunce
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
@statnames = qw(dev ino mode nlink
uid gid rdev size
atime mtime ctime
blksize blocks name);
@statnames{@statnames} = (0 .. @statnames-1);
@stattypes = (SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER,
SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER,
SQL_INTEGER, SQL_INTEGER, SQL_INTEGER,
SQL_INTEGER, SQL_INTEGER, SQL_VARCHAR);
@stattypes{@statnames} = @stattypes;
@statprec = ((10) x (@statnames-1), 1024);
@statprec{@statnames} = @statprec;
die unless @statnames == @stattypes;
die unless @statprec == @stattypes;
$drh = undef; # holds driver handle once initialised
#$gensym = "SYM000"; # used by st::execute() for filehandles
sub driver{
return $drh if $drh;
my($class, $attr) = @_;
$class .= "::dr";
($drh) = DBI::_new_drh($class, {
'Name' => 'ExampleP',
'Version' => $VERSION,
'Attribution' => 'DBD Example Perl stub by Tim Bunce',
}, ['example implementors private data '.__PACKAGE__]);
$drh;
}
sub CLONE {
undef $drh;
}
}
{ package DBD::ExampleP::dr; # ====== DRIVER ======
$imp_data_size = 0;
use strict;
sub connect { # normally overridden, but a handy default
my($drh, $dbname, $user, $auth)= @_;
my ($outer, $dbh) = DBI::_new_dbh($drh, {
Name => $dbname,
examplep_private_dbh_attrib => 42, # an example, for testing
});
$dbh->{examplep_get_info} = {
29 => '"', # SQL_IDENTIFIER_QUOTE_CHAR
41 => '.', # SQL_CATALOG_NAME_SEPARATOR
114 => 1, # SQL_CATALOG_LOCATION
};
#$dbh->{Name} = $dbname;
$dbh->STORE('Active', 1);
return $outer;
}
sub data_sources {
return ("dbi:ExampleP:dir=."); # possibly usefully meaningless
}
}
{ package DBD::ExampleP::db; # ====== DATABASE ======
$imp_data_size = 0;
use strict;
sub prepare {
my($dbh, $statement)= @_;
my @fields;
my($fields, $dir) = $statement =~ m/^\s*select\s+(.*?)\s+from\s+(\S*)/i;
if (defined $fields and defined $dir) {
@fields = ($fields eq '*')
? keys %DBD::ExampleP::statnames
: split(/\s*,\s*/, $fields);
}
else {
return $dbh->set_err($DBI::stderr, "Syntax error in select statement (\"$statement\")")
unless $statement =~ m/^\s*set\s+/;
# the SET syntax is just a hack so the ExampleP driver can
# be used to test non-select statements.
# Now we have DBI::DBM etc., ExampleP should be deprecated
}
my ($outer, $sth) = DBI::_new_sth($dbh, {
'Statement' => $statement,
examplep_private_sth_attrib => 24, # an example, for testing
}, ['example implementors private data '.__PACKAGE__]);
my @bad = map {
defined $DBD::ExampleP::statnames{$_} ? () : $_
} @fields;
return $dbh->set_err($DBI::stderr, "Unknown field names: @bad")
if @bad;
$outer->STORE('NUM_OF_FIELDS' => scalar(@fields));
$sth->{examplep_ex_dir} = $dir if defined($dir) && $dir !~ /\?/;
$outer->STORE('NUM_OF_PARAMS' => ($dir) ? $dir =~ tr/?/?/ : 0);
if (@fields) {
$outer->STORE('NAME' => \@fields);
$outer->STORE('NULLABLE' => [ (0) x @fields ]);
$outer->STORE('SCALE' => [ (0) x @fields ]);
}
$outer;
}
sub table_info {
my $dbh = shift;
my ($catalog, $schema, $table, $type) = @_;
my @types = split(/["']*,["']/, $type || 'TABLE');
my %types = map { $_=>$_ } @types;
# Return a list of all subdirectories
my $dh = Symbol::gensym(); # "DBD::ExampleP::".++$DBD::ExampleP::gensym;
my $dir = $catalog || File::Spec->curdir();
my @list;
if ($types{VIEW}) { # for use by test harness
push @list, [ undef, "schema", "table", 'VIEW', undef ];
push @list, [ undef, "sch-ema", "table", 'VIEW', undef ];
push @list, [ undef, "schema", "ta-ble", 'VIEW', undef ];
push @list, [ undef, "sch ema", "table", 'VIEW', undef ];
push @list, [ undef, "schema", "ta ble", 'VIEW', undef ];
}
if ($types{TABLE}) {
no strict 'refs';
opendir($dh, $dir)
or return $dbh->set_err(int($!), "Failed to open directory $dir: $!");
while (defined(my $item = readdir($dh))) {
if ($^O eq 'VMS') {
# if on VMS then avoid warnings from catdir if you use a file
# (not a dir) as the item below
next if $item !~ /\.dir$/oi;
}
my $file = File::Spec->catdir($dir,$item);
next unless -d $file;
my($dev, $ino, $mode, $nlink, $uid) = lstat($file);
my $pwnam = undef; # eval { scalar(getpwnam($uid)) } || $uid;
push @list, [ $dir, $pwnam, $item, 'TABLE', undef ];
}
close($dh);
}
# We would like to simply do a DBI->connect() here. However,
# this is wrong if we are in a subclass like DBI::ProxyServer.
$dbh->{'dbd_sponge_dbh'} ||= DBI->connect("DBI:Sponge:", '','')
or return $dbh->set_err($DBI::err,
"Failed to connect to DBI::Sponge: $DBI::errstr");
my $attr = {
'rows' => \@list,
'NUM_OF_FIELDS' => 5,
'NAME' => ['TABLE_CAT', 'TABLE_SCHEM', 'TABLE_NAME',
'TABLE_TYPE', 'REMARKS'],
'TYPE' => [DBI::SQL_VARCHAR(), DBI::SQL_VARCHAR(),
DBI::SQL_VARCHAR(), DBI::SQL_VARCHAR(), DBI::SQL_VARCHAR() ],
'NULLABLE' => [1, 1, 1, 1, 1]
};
my $sdbh = $dbh->{'dbd_sponge_dbh'};
my $sth = $sdbh->prepare("SHOW TABLES FROM $dir", $attr)
or return $dbh->set_err($sdbh->err(), $sdbh->errstr());
$sth;
}
sub type_info_all {
my ($dbh) = @_;
my $ti = [
{ TYPE_NAME => 0,
DATA_TYPE => 1,
COLUMN_SIZE => 2,
LITERAL_PREFIX => 3,
LITERAL_SUFFIX => 4,
CREATE_PARAMS => 5,
NULLABLE => 6,
CASE_SENSITIVE => 7,
SEARCHABLE => 8,
UNSIGNED_ATTRIBUTE=> 9,
FIXED_PREC_SCALE=> 10,
AUTO_UNIQUE_VALUE => 11,
LOCAL_TYPE_NAME => 12,
MINIMUM_SCALE => 13,
MAXIMUM_SCALE => 14,
},
[ 'VARCHAR', DBI::SQL_VARCHAR, 1024, "'","'", undef, 0, 1, 1, 0, 0,0,undef,0,0 ],
[ 'INTEGER', DBI::SQL_INTEGER, 10, "","", undef, 0, 0, 1, 0, 0,0,undef,0,0 ],
];
return $ti;
}
sub ping {
(shift->FETCH('Active')) ? 2 : 0; # the value 2 is checked for by t/80proxy.t
}
sub disconnect {
shift->STORE(Active => 0);
return 1;
}
sub get_info {
my ($dbh, $info_type) = @_;
return $dbh->{examplep_get_info}->{$info_type};
}
sub FETCH {
my ($dbh, $attrib) = @_;
# In reality this would interrogate the database engine to
# either return dynamic values that cannot be precomputed
# or fetch and cache attribute values too expensive to prefetch.
# else pass up to DBI to handle
return $INC{"DBD/ExampleP.pm"} if $attrib eq 'example_driver_path';
return $dbh->SUPER::FETCH($attrib);
}
sub STORE {
my ($dbh, $attrib, $value) = @_;
# store only known attributes else pass up to DBI to handle
if ($attrib eq 'examplep_set_err') {
# a fake attribute to enable a test case where STORE issues a warning
$dbh->set_err($value, $value);
return;
}
if ($attrib eq 'AutoCommit') {
# convert AutoCommit values to magic ones to let DBI
# know that the driver has 'handled' the AutoCommit attribute
$value = ($value) ? -901 : -900;
}
return $dbh->{$attrib} = $value if $attrib =~ /^examplep_/;
return $dbh->SUPER::STORE($attrib, $value);
}
sub DESTROY {
my $dbh = shift;
$dbh->disconnect if $dbh->FETCH('Active');
undef
}
# This is an example to demonstrate the use of driver-specific
# methods via $dbh->func().
# Use it as follows:
# my @tables = $dbh->func($re, 'examplep_tables');
#
# Returns all the tables that match the regular expression $re.
sub examplep_tables {
my $dbh = shift; my $re = shift;
grep { $_ =~ /$re/ } $dbh->tables();
}
sub parse_trace_flag {
my ($h, $name) = @_;
return 0x01000000 if $name eq 'foo';
return 0x02000000 if $name eq 'bar';
return 0x04000000 if $name eq 'baz';
return 0x08000000 if $name eq 'boo';
return 0x10000000 if $name eq 'bop';
return $h->SUPER::parse_trace_flag($name);
}
sub private_attribute_info {
return { example_driver_path => undef };
}
}
{ package DBD::ExampleP::st; # ====== STATEMENT ======
$imp_data_size = 0;
use strict; no strict 'refs'; # cause problems with filehandles
sub bind_param {
my($sth, $param, $value, $attribs) = @_;
$sth->{'dbd_param'}->[$param-1] = $value;
return 1;
}
sub execute {
my($sth, @dir) = @_;
my $dir;
if (@dir) {
$sth->bind_param($_, $dir[$_-1]) or return
foreach (1..@dir);
}
my $dbd_param = $sth->{'dbd_param'} || [];
return $sth->set_err(2, @$dbd_param." values bound when $sth->{NUM_OF_PARAMS} expected")
unless @$dbd_param == $sth->{NUM_OF_PARAMS};
return 0 unless $sth->{NUM_OF_FIELDS}; # not a select
$dir = $dbd_param->[0] || $sth->{examplep_ex_dir};
return $sth->set_err(2, "No bind parameter supplied")
unless defined $dir;
$sth->finish;
#
# If the users asks for directory "long_list_4532", then we fake a
# directory with files "file4351", "file4350", ..., "file0".
# This is a special case used for testing, especially DBD::Proxy.
#
if ($dir =~ /^long_list_(\d+)$/) {
$sth->{dbd_dir} = [ $1 ]; # array ref indicates special mode
$sth->{dbd_datahandle} = undef;
}
else {
$sth->{dbd_dir} = $dir;
my $sym = Symbol::gensym(); # "DBD::ExampleP::".++$DBD::ExampleP::gensym;
opendir($sym, $dir)
or return $sth->set_err(2, "opendir($dir): $!");
$sth->{dbd_datahandle} = $sym;
}
$sth->STORE(Active => 1);
return 1;
}
sub fetch {
my $sth = shift;
my $dir = $sth->{dbd_dir};
my %s;
if (ref $dir) { # special fake-data test mode
my $num = $dir->[0]--;
unless ($num > 0) {
$sth->finish();
return;
}
my $time = time;
@s{@DBD::ExampleP::statnames} =
( 2051, 1000+$num, 0644, 2, $>, $), 0, 1024,
$time, $time, $time, 512, 2, "file$num")
}
else { # normal mode
my $dh = $sth->{dbd_datahandle}
or return $sth->set_err($DBI::stderr, "fetch without successful execute");
my $f = readdir($dh);
unless ($f) {
$sth->finish;
return;
}
# untaint $f so that we can use this for DBI taint tests
($f) = ($f =~ m/^(.*)$/);
my $file = File::Spec->catfile($dir, $f);
# put in all the data fields
@s{ @DBD::ExampleP::statnames } = (lstat($file), $f);
}
# return just what fields the query asks for
my @new = @s{ @{$sth->{NAME}} };
return $sth->_set_fbav(\@new);
}
*fetchrow_arrayref = \&fetch;
sub finish {
my $sth = shift;
closedir($sth->{dbd_datahandle}) if $sth->{dbd_datahandle};
$sth->{dbd_datahandle} = undef;
$sth->{dbd_dir} = undef;
$sth->SUPER::finish();
return 1;
}
sub FETCH {
my ($sth, $attrib) = @_;
# In reality this would interrogate the database engine to
# either return dynamic values that cannot be precomputed
# or fetch and cache attribute values too expensive to prefetch.
if ($attrib eq 'TYPE'){
return [ @DBD::ExampleP::stattypes{ @{ $sth->FETCH(q{NAME_lc}) } } ];
}
elsif ($attrib eq 'PRECISION'){
return [ @DBD::ExampleP::statprec{ @{ $sth->FETCH(q{NAME_lc}) } } ];
}
elsif ($attrib eq 'ParamValues') {
my $dbd_param = $sth->{dbd_param} || [];
my %pv = map { $_ => $dbd_param->[$_-1] } 1..@$dbd_param;
return \%pv;
}
# else pass up to DBI to handle
return $sth->SUPER::FETCH($attrib);
}
sub STORE {
my ($sth, $attrib, $value) = @_;
# would normally validate and only store known attributes
# else pass up to DBI to handle
return $sth->{$attrib} = $value
if $attrib eq 'NAME' or $attrib eq 'NULLABLE' or $attrib eq 'SCALE' or $attrib eq 'PRECISION';
return $sth->SUPER::STORE($attrib, $value);
}
*parse_trace_flag = \&DBD::ExampleP::db::parse_trace_flag;
}
1;
# vim: sw=4:ts=8
DBD/Gofer.pm 0000644 00000137657 15033552504 0006562 0 ustar 00 {
package DBD::Gofer;
use strict;
require DBI;
require DBI::Gofer::Request;
require DBI::Gofer::Response;
require Carp;
our $VERSION = "0.015327";
# $Id: Gofer.pm 15326 2012-06-06 16:32:38Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
# attributes we'll allow local STORE
our %xxh_local_store_attrib = map { $_=>1 } qw(
Active
CachedKids
Callbacks
DbTypeSubclass
ErrCount Executed
FetchHashKeyName
HandleError HandleSetErr
InactiveDestroy
AutoInactiveDestroy
PrintError PrintWarn
Profile
RaiseError
RootClass
ShowErrorStatement
Taint TaintIn TaintOut
TraceLevel
Warn
dbi_quote_identifier_cache
dbi_connect_closure
dbi_go_execute_unique
);
our %xxh_local_store_attrib_if_same_value = map { $_=>1 } qw(
Username
dbi_connect_method
);
our $drh = undef; # holds driver handle once initialized
our $methods_already_installed;
sub driver{
return $drh if $drh;
DBI->setup_driver('DBD::Gofer');
unless ($methods_already_installed++) {
my $opts = { O=> 0x0004 }; # IMA_KEEP_ERR
DBD::Gofer::db->install_method('go_dbh_method', $opts);
DBD::Gofer::st->install_method('go_sth_method', $opts);
DBD::Gofer::st->install_method('go_clone_sth', $opts);
DBD::Gofer::db->install_method('go_cache', $opts);
DBD::Gofer::st->install_method('go_cache', $opts);
}
my($class, $attr) = @_;
$class .= "::dr";
($drh) = DBI::_new_drh($class, {
'Name' => 'Gofer',
'Version' => $VERSION,
'Attribution' => 'DBD Gofer by Tim Bunce',
});
$drh;
}
sub CLONE {
undef $drh;
}
sub go_cache {
my $h = shift;
$h->{go_cache} = shift if @_;
# return handle's override go_cache, if it has one
return $h->{go_cache} if defined $h->{go_cache};
# or else the transports default go_cache
return $h->{go_transport}->{go_cache};
}
sub set_err_from_response { # set error/warn/info and propagate warnings
my $h = shift;
my $response = shift;
if (my $warnings = $response->warnings) {
warn $_ for @$warnings;
}
my ($err, $errstr, $state) = $response->err_errstr_state;
# Only set_err() if there's an error else leave the current values
# (The current values will normally be set undef by the DBI dispatcher
# except for methods marked KEEPERR such as ping.)
$h->set_err($err, $errstr, $state) if defined $err;
return undef;
}
sub install_methods_proxy {
my ($installed_methods) = @_;
while ( my ($full_method, $attr) = each %$installed_methods ) {
# need to install both a DBI dispatch stub and a proxy stub
# (the dispatch stub may be already here due to local driver use)
DBI->_install_method($full_method, "", $attr||{})
unless defined &{$full_method};
# now install proxy stubs on the driver side
$full_method =~ m/^DBI::(\w\w)::(\w+)$/
or die "Invalid method name '$full_method' for install_method";
my ($type, $method) = ($1, $2);
my $driver_method = "DBD::Gofer::${type}::${method}";
next if defined &{$driver_method};
my $sub;
if ($type eq 'db') {
$sub = sub { return shift->go_dbh_method(undef, $method, @_) };
}
else {
$sub = sub { shift->set_err($DBI::stderr, "Can't call \$${type}h->$method when using DBD::Gofer"); return; };
}
no strict 'refs';
*$driver_method = $sub;
}
}
}
{ package DBD::Gofer::dr; # ====== DRIVER ======
$imp_data_size = 0;
use strict;
sub connect_cached {
my ($drh, $dsn, $user, $auth, $attr)= @_;
$attr ||= {};
return $drh->SUPER::connect_cached($dsn, $user, $auth, {
(%$attr),
go_connect_method => $attr->{go_connect_method} || 'connect_cached',
});
}
sub connect {
my($drh, $dsn, $user, $auth, $attr)= @_;
my $orig_dsn = $dsn;
# first remove dsn= and everything after it
my $remote_dsn = ($dsn =~ s/;?\bdsn=(.*)$// && $1)
or return $drh->set_err($DBI::stderr, "No dsn= argument in '$orig_dsn'");
if ($attr->{go_bypass}) { # don't use DBD::Gofer for this connection
# useful for testing with DBI_AUTOPROXY, e.g., t/03handle.t
return DBI->connect($remote_dsn, $user, $auth, $attr);
}
my %go_attr;
# extract any go_ attributes from the connect() attr arg
for my $k (grep { /^go_/ } keys %$attr) {
$go_attr{$k} = delete $attr->{$k};
}
# then override those with any attributes embedded in our dsn (not remote_dsn)
for my $kv (grep /=/, split /;/, $dsn, -1) {
my ($k, $v) = split /=/, $kv, 2;
$go_attr{ "go_$k" } = $v;
}
if (not ref $go_attr{go_policy}) { # if not a policy object already
my $policy_class = $go_attr{go_policy} || 'classic';
$policy_class = "DBD::Gofer::Policy::$policy_class"
unless $policy_class =~ /::/;
_load_class($policy_class)
or return $drh->set_err($DBI::stderr, "Can't load $policy_class: $@");
# replace policy name in %go_attr with policy object
$go_attr{go_policy} = eval { $policy_class->new(\%go_attr) }
or return $drh->set_err($DBI::stderr, "Can't instanciate $policy_class: $@");
}
# policy object is left in $go_attr{go_policy} so transport can see it
my $go_policy = $go_attr{go_policy};
if ($go_attr{go_cache} and not ref $go_attr{go_cache}) { # if not a cache object already
my $cache_class = $go_attr{go_cache};
$cache_class = "DBI::Util::CacheMemory" if $cache_class eq '1';
_load_class($cache_class)
or return $drh->set_err($DBI::stderr, "Can't load $cache_class $@");
$go_attr{go_cache} = eval { $cache_class->new() }
or $drh->set_err(0, "Can't instanciate $cache_class: $@"); # warning
}
# delete any other attributes that don't apply to transport
my $go_connect_method = delete $go_attr{go_connect_method};
my $transport_class = delete $go_attr{go_transport}
or return $drh->set_err($DBI::stderr, "No transport= argument in '$orig_dsn'");
$transport_class = "DBD::Gofer::Transport::$transport_class"
unless $transport_class =~ /::/;
_load_class($transport_class)
or return $drh->set_err($DBI::stderr, "Can't load $transport_class: $@");
my $go_transport = eval { $transport_class->new(\%go_attr) }
or return $drh->set_err($DBI::stderr, "Can't instanciate $transport_class: $@");
my $request_class = "DBI::Gofer::Request";
my $go_request = eval {
my $go_attr = { %$attr };
# XXX user/pass of fwd server vs db server ? also impact of autoproxy
if ($user) {
$go_attr->{Username} = $user;
$go_attr->{Password} = $auth;
}
# delete any attributes we can't serialize (or don't want to)
delete @{$go_attr}{qw(Profile HandleError HandleSetErr Callbacks)};
# delete any attributes that should only apply to the client-side
delete @{$go_attr}{qw(RootClass DbTypeSubclass)};
$go_connect_method ||= $go_policy->connect_method($remote_dsn, $go_attr) || 'connect';
$request_class->new({
dbh_connect_call => [ $go_connect_method, $remote_dsn, $user, $auth, $go_attr ],
})
} or return $drh->set_err($DBI::stderr, "Can't instanciate $request_class: $@");
my ($dbh, $dbh_inner) = DBI::_new_dbh($drh, {
'Name' => $dsn,
'USER' => $user,
go_transport => $go_transport,
go_request => $go_request,
go_policy => $go_policy,
});
# mark as inactive temporarily for STORE. Active not set until connected() called.
$dbh->STORE(Active => 0);
# should we ping to check the connection
# and fetch dbh attributes
my $skip_connect_check = $go_policy->skip_connect_check($attr, $dbh);
if (not $skip_connect_check) {
if (not $dbh->go_dbh_method(undef, 'ping')) {
return undef if $dbh->err; # error already recorded, typically
return $dbh->set_err($DBI::stderr, "ping failed");
}
}
return $dbh;
}
sub _load_class { # return true or false+$@
my $class = shift;
(my $pm = $class) =~ s{::}{/}g;
$pm .= ".pm";
return 1 if eval { require $pm };
delete $INC{$pm}; # shouldn't be needed (perl bug?) and assigning undef isn't enough
undef; # error in $@
}
}
{ package DBD::Gofer::db; # ====== DATABASE ======
$imp_data_size = 0;
use strict;
use Carp qw(carp croak);
my %dbh_local_store_attrib = %DBD::Gofer::xxh_local_store_attrib;
sub connected {
shift->STORE(Active => 1);
}
sub go_dbh_method {
my $dbh = shift;
my $meta = shift;
# @_ now contains ($method_name, @args)
my $request = $dbh->{go_request};
$request->init_request([ wantarray, @_ ], $dbh);
++$dbh->{go_request_count};
my $go_policy = $dbh->{go_policy};
my $dbh_attribute_update = $go_policy->dbh_attribute_update();
$request->dbh_attributes( $go_policy->dbh_attribute_list() )
if $dbh_attribute_update eq 'every'
or $dbh->{go_request_count}==1;
$request->dbh_last_insert_id_args($meta->{go_last_insert_id_args})
if $meta->{go_last_insert_id_args};
my $transport = $dbh->{go_transport}
or return $dbh->set_err($DBI::stderr, "Not connected (no transport)");
local $transport->{go_cache} = $dbh->{go_cache}
if defined $dbh->{go_cache};
my ($response, $retransmit_sub) = $transport->transmit_request($request);
$response ||= $transport->receive_response($request, $retransmit_sub);
$dbh->{go_response} = $response
or die "No response object returned by $transport";
die "response '$response' returned by $transport is not a response object"
unless UNIVERSAL::isa($response,"DBI::Gofer::Response");
if (my $dbh_attributes = $response->dbh_attributes) {
# XXX installed_methods piggybacks on dbh_attributes for now
if (my $installed_methods = delete $dbh_attributes->{dbi_installed_methods}) {
DBD::Gofer::install_methods_proxy($installed_methods)
if $dbh->{go_request_count}==1;
}
# XXX we don't STORE here, we just stuff the value into the attribute cache
$dbh->{$_} = $dbh_attributes->{$_}
for keys %$dbh_attributes;
}
my $rv = $response->rv;
if (my $resultset_list = $response->sth_resultsets) {
# dbh method call returned one or more resultsets
# (was probably a metadata method like table_info)
#
# setup an sth but don't execute/forward it
my $sth = $dbh->prepare(undef, { go_skip_prepare_check => 1 });
# set the sth response to our dbh response
(tied %$sth)->{go_response} = $response;
# setup the sth with the results in our response
$sth->more_results;
# and return that new sth as if it came from original request
$rv = [ $sth ];
}
elsif (!$rv) { # should only occur for major transport-level error
#carp("no rv in response { @{[ %$response ]} }");
$rv = [ ];
}
DBD::Gofer::set_err_from_response($dbh, $response);
return (wantarray) ? @$rv : $rv->[0];
}
# Methods that should be forwarded but can be cached
for my $method (qw(
tables table_info column_info primary_key_info foreign_key_info statistics_info
data_sources type_info_all get_info
parse_trace_flags parse_trace_flag
func
)) {
my $policy_name = "cache_$method";
my $super_name = "SUPER::$method";
my $sub = sub {
my $dbh = shift;
my $rv;
# if we know the remote side doesn't override the DBI's default method
# then we might as well just call the DBI's default method on the client
# (which may, in turn, call other methods that are forwarded, like get_info)
if ($dbh->{dbi_default_methods}{$method} && $dbh->{go_policy}->skip_default_methods()) {
$dbh->trace_msg(" !! $method: using local default as remote method is also default\n");
return $dbh->$super_name(@_);
}
my $cache;
my $cache_key;
if (my $cache_it = $dbh->{go_policy}->$policy_name(undef, $dbh, @_)) {
$cache = $dbh->{go_meta_cache} ||= {}; # keep separate from go_cache
$cache_key = sprintf "%s_wa%d(%s)", $policy_name, wantarray||0,
join(",\t", map { # XXX basic but sufficient for now
!ref($_) ? DBI::neat($_,1e6)
: ref($_) eq 'ARRAY' ? DBI::neat_list($_,1e6,",\001")
: ref($_) eq 'HASH' ? do { my @k = sort keys %$_; DBI::neat_list([@k,@{$_}{@k}],1e6,",\002") }
: do { warn "unhandled argument type ($_)"; $_ }
} @_);
if ($rv = $cache->{$cache_key}) {
$dbh->trace_msg("$method(@_) returning previously cached value ($cache_key)\n",4);
my @cache_rv = @$rv;
# if it's an sth we have to clone it
$cache_rv[0] = $cache_rv[0]->go_clone_sth if UNIVERSAL::isa($cache_rv[0],'DBI::st');
return (wantarray) ? @cache_rv : $cache_rv[0];
}
}
$rv = [ (wantarray)
? ($dbh->go_dbh_method(undef, $method, @_))
: scalar $dbh->go_dbh_method(undef, $method, @_)
];
if ($cache) {
$dbh->trace_msg("$method(@_) caching return value ($cache_key)\n",4);
my @cache_rv = @$rv;
# if it's an sth we have to clone it
#$cache_rv[0] = $cache_rv[0]->go_clone_sth
# if UNIVERSAL::isa($cache_rv[0],'DBI::st');
$cache->{$cache_key} = \@cache_rv
unless UNIVERSAL::isa($cache_rv[0],'DBI::st'); # XXX cloning sth not yet done
}
return (wantarray) ? @$rv : $rv->[0];
};
no strict 'refs';
*$method = $sub;
}
# Methods that can use the DBI defaults for some situations/drivers
for my $method (qw(
quote quote_identifier
)) { # XXX keep DBD::Gofer::Policy::Base in sync
my $policy_name = "locally_$method";
my $super_name = "SUPER::$method";
my $sub = sub {
my $dbh = shift;
# if we know the remote side doesn't override the DBI's default method
# then we might as well just call the DBI's default method on the client
# (which may, in turn, call other methods that are forwarded, like get_info)
if ($dbh->{dbi_default_methods}{$method} && $dbh->{go_policy}->skip_default_methods()) {
$dbh->trace_msg(" !! $method: using local default as remote method is also default\n");
return $dbh->$super_name(@_);
}
# false: use remote gofer
# 1: use local DBI default method
# code ref: use the code ref
my $locally = $dbh->{go_policy}->$policy_name($dbh, @_);
if ($locally) {
return $locally->($dbh, @_) if ref $locally eq 'CODE';
return $dbh->$super_name(@_);
}
return $dbh->go_dbh_method(undef, $method, @_); # propagate context
};
no strict 'refs';
*$method = $sub;
}
# Methods that should always fail
for my $method (qw(
begin_work commit rollback
)) {
no strict 'refs';
*$method = sub { return shift->set_err($DBI::stderr, "$method not available with DBD::Gofer") }
}
sub do {
my ($dbh, $sql, $attr, @args) = @_;
delete $dbh->{Statement}; # avoid "Modification of non-creatable hash value attempted"
$dbh->{Statement} = $sql; # for profiling and ShowErrorStatement
my $meta = { go_last_insert_id_args => $attr->{go_last_insert_id_args} };
return $dbh->go_dbh_method($meta, 'do', $sql, $attr, @args);
}
sub ping {
my $dbh = shift;
return $dbh->set_err('', "can't ping while not connected") # info
unless $dbh->SUPER::FETCH('Active');
my $skip_ping = $dbh->{go_policy}->skip_ping();
return ($skip_ping) ? 1 : $dbh->go_dbh_method(undef, 'ping', @_);
}
sub last_insert_id {
my $dbh = shift;
my $response = $dbh->{go_response} or return undef;
return $response->last_insert_id;
}
sub FETCH {
my ($dbh, $attrib) = @_;
# FETCH is effectively already cached because the DBI checks the
# attribute cache in the handle before calling FETCH
# and this FETCH copies the value into the attribute cache
# forward driver-private attributes (except ours)
if ($attrib =~ m/^[a-z]/ && $attrib !~ /^go_/) {
my $value = $dbh->go_dbh_method(undef, 'FETCH', $attrib);
$dbh->{$attrib} = $value; # XXX forces caching by DBI
return $dbh->{$attrib} = $value;
}
# else pass up to DBI to handle
return $dbh->SUPER::FETCH($attrib);
}
sub STORE {
my ($dbh, $attrib, $value) = @_;
if ($attrib eq 'AutoCommit') {
croak "Can't enable transactions when using DBD::Gofer" if !$value;
return $dbh->SUPER::STORE($attrib => ($value) ? -901 : -900);
}
return $dbh->SUPER::STORE($attrib => $value)
# we handle this attribute locally
if $dbh_local_store_attrib{$attrib}
# or it's a private_ (application) attribute
or $attrib =~ /^private_/
# or not yet connected (ie being called by DBI->connect)
or not $dbh->FETCH('Active');
return $dbh->SUPER::STORE($attrib => $value)
if $DBD::Gofer::xxh_local_store_attrib_if_same_value{$attrib}
&& do { # values are the same
my $crnt = $dbh->FETCH($attrib);
local $^W;
(defined($value) ^ defined($crnt))
? 0 # definedness differs
: $value eq $crnt;
};
# dbh attributes are set at connect-time - see connect()
carp("Can't alter \$dbh->{$attrib} after handle created with DBD::Gofer") if $dbh->FETCH('Warn');
return $dbh->set_err($DBI::stderr, "Can't alter \$dbh->{$attrib} after handle created with DBD::Gofer");
}
sub disconnect {
my $dbh = shift;
$dbh->{go_transport} = undef;
$dbh->STORE(Active => 0);
}
sub prepare {
my ($dbh, $statement, $attr)= @_;
return $dbh->set_err($DBI::stderr, "Can't prepare when disconnected")
unless $dbh->FETCH('Active');
$attr = { %$attr } if $attr; # copy so we can edit
my $policy = delete($attr->{go_policy}) || $dbh->{go_policy};
my $lii_args = delete $attr->{go_last_insert_id_args};
my $go_prepare = delete($attr->{go_prepare_method})
|| $dbh->{go_prepare_method}
|| $policy->prepare_method($dbh, $statement, $attr)
|| 'prepare'; # e.g. for code not using placeholders
my $go_cache = delete $attr->{go_cache};
# set to undef if there are no attributes left for the actual prepare call
$attr = undef if $attr and not %$attr;
my ($sth, $sth_inner) = DBI::_new_sth($dbh, {
Statement => $statement,
go_prepare_call => [ 0, $go_prepare, $statement, $attr ],
# go_method_calls => [], # autovivs if needed
go_request => $dbh->{go_request},
go_transport => $dbh->{go_transport},
go_policy => $policy,
go_last_insert_id_args => $lii_args,
go_cache => $go_cache,
});
$sth->STORE(Active => 0); # XXX needed? It should be the default
my $skip_prepare_check = $policy->skip_prepare_check($attr, $dbh, $statement, $attr, $sth);
if (not $skip_prepare_check) {
$sth->go_sth_method() or return undef;
}
return $sth;
}
sub prepare_cached {
my ($dbh, $sql, $attr, $if_active)= @_;
$attr ||= {};
return $dbh->SUPER::prepare_cached($sql, {
%$attr,
go_prepare_method => $attr->{go_prepare_method} || 'prepare_cached',
}, $if_active);
}
*go_cache = \&DBD::Gofer::go_cache;
}
{ package DBD::Gofer::st; # ====== STATEMENT ======
$imp_data_size = 0;
use strict;
my %sth_local_store_attrib = (%DBD::Gofer::xxh_local_store_attrib, NUM_OF_FIELDS => 1);
sub go_sth_method {
my ($sth, $meta) = @_;
if (my $ParamValues = $sth->{ParamValues}) {
my $ParamAttr = $sth->{ParamAttr};
# XXX the sort here is a hack to work around a DBD::Sybase bug
# but only works properly for params 1..9
# (reverse because of the unshift)
my @params = reverse sort keys %$ParamValues;
if (@params > 9 && ($sth->{Database}{go_dsn}||'') =~ /dbi:Sybase/) {
# if more than 9 then we need to do a proper numeric sort
# also warn to alert user of this issue
warn "Sybase param binding order hack in use";
@params = sort { $b <=> $a } @params;
}
for my $p (@params) {
# unshift to put binds before execute call
unshift @{ $sth->{go_method_calls} },
[ 'bind_param', $p, $ParamValues->{$p}, $ParamAttr->{$p} ];
}
}
my $dbh = $sth->{Database} or die "panic";
++$dbh->{go_request_count};
my $request = $sth->{go_request};
$request->init_request($sth->{go_prepare_call}, $sth);
$request->sth_method_calls(delete $sth->{go_method_calls})
if $sth->{go_method_calls};
$request->sth_result_attr({}); # (currently) also indicates this is an sth request
$request->dbh_last_insert_id_args($meta->{go_last_insert_id_args})
if $meta->{go_last_insert_id_args};
my $go_policy = $sth->{go_policy};
my $dbh_attribute_update = $go_policy->dbh_attribute_update();
$request->dbh_attributes( $go_policy->dbh_attribute_list() )
if $dbh_attribute_update eq 'every'
or $dbh->{go_request_count}==1;
my $transport = $sth->{go_transport}
or return $sth->set_err($DBI::stderr, "Not connected (no transport)");
local $transport->{go_cache} = $sth->{go_cache}
if defined $sth->{go_cache};
my ($response, $retransmit_sub) = $transport->transmit_request($request);
$response ||= $transport->receive_response($request, $retransmit_sub);
$sth->{go_response} = $response
or die "No response object returned by $transport";
$dbh->{go_response} = $response; # mainly for last_insert_id
if (my $dbh_attributes = $response->dbh_attributes) {
# XXX we don't STORE here, we just stuff the value into the attribute cache
$dbh->{$_} = $dbh_attributes->{$_}
for keys %$dbh_attributes;
# record the values returned, so we know that we have fetched
# values are which we have fetched (see dbh->FETCH method)
$dbh->{go_dbh_attributes_fetched} = $dbh_attributes;
}
my $rv = $response->rv; # may be undef on error
if ($response->sth_resultsets) {
# setup first resultset - including sth attributes
$sth->more_results;
}
else {
$sth->STORE(Active => 0);
$sth->{go_rows} = $rv;
}
# set error/warn/info (after more_results as that'll clear err)
DBD::Gofer::set_err_from_response($sth, $response);
return $rv;
}
sub bind_param {
my ($sth, $param, $value, $attr) = @_;
$sth->{ParamValues}{$param} = $value;
$sth->{ParamAttr}{$param} = $attr
if defined $attr; # attr is sticky if not explicitly set
return 1;
}
sub execute {
my $sth = shift;
$sth->bind_param($_, $_[$_-1]) for (1..@_);
push @{ $sth->{go_method_calls} }, [ 'execute' ];
my $meta = { go_last_insert_id_args => $sth->{go_last_insert_id_args} };
return $sth->go_sth_method($meta);
}
sub more_results {
my $sth = shift;
$sth->finish;
my $response = $sth->{go_response} or do {
# e.g., we haven't sent a request yet (ie prepare then more_results)
$sth->trace_msg(" No response object present", 3);
return;
};
my $resultset_list = $response->sth_resultsets
or return $sth->set_err($DBI::stderr, "No sth_resultsets");
my $meta = shift @$resultset_list
or return undef; # no more result sets
#warn "more_results: ".Data::Dumper::Dumper($meta);
# pull out the special non-attributes first
my ($rowset, $err, $errstr, $state)
= delete @{$meta}{qw(rowset err errstr state)};
# copy meta attributes into attribute cache
my $NUM_OF_FIELDS = delete $meta->{NUM_OF_FIELDS};
$sth->STORE('NUM_OF_FIELDS', $NUM_OF_FIELDS);
# XXX need to use STORE for some?
$sth->{$_} = $meta->{$_} for keys %$meta;
if (($NUM_OF_FIELDS||0) > 0) {
$sth->{go_rows} = ($rowset) ? @$rowset : -1;
$sth->{go_current_rowset} = $rowset;
$sth->{go_current_rowset_err} = [ $err, $errstr, $state ]
if defined $err;
$sth->STORE(Active => 1) if $rowset;
}
return $sth;
}
sub go_clone_sth {
my ($sth1) = @_;
# clone an (un-fetched-from) sth - effectively undoes the initial more_results
# not 100% so just for use in caching returned sth e.g. table_info
my $sth2 = $sth1->{Database}->prepare($sth1->{Statement}, { go_skip_prepare_check => 1 });
$sth2->STORE($_, $sth1->{$_}) for qw(NUM_OF_FIELDS Active);
my $sth2_inner = tied %$sth2;
$sth2_inner->{$_} = $sth1->{$_} for qw(NUM_OF_PARAMS FetchHashKeyName);
die "not fully implemented yet";
return $sth2;
}
sub fetchrow_arrayref {
my ($sth) = @_;
my $resultset = $sth->{go_current_rowset} || do {
# should only happen if fetch called after execute failed
my $rowset_err = $sth->{go_current_rowset_err}
|| [ 1, 'no result set (did execute fail)' ];
return $sth->set_err( @$rowset_err );
};
return $sth->_set_fbav(shift @$resultset) if @$resultset;
$sth->finish; # no more data so finish
return undef;
}
*fetch = \&fetchrow_arrayref; # alias
sub fetchall_arrayref {
my ($sth, $slice, $max_rows) = @_;
my $resultset = $sth->{go_current_rowset} || do {
# should only happen if fetch called after execute failed
my $rowset_err = $sth->{go_current_rowset_err}
|| [ 1, 'no result set (did execute fail)' ];
return $sth->set_err( @$rowset_err );
};
my $mode = ref($slice) || 'ARRAY';
return $sth->SUPER::fetchall_arrayref($slice, $max_rows)
if ref($slice) or defined $max_rows;
$sth->finish; # no more data after this so finish
return $resultset;
}
sub rows {
return shift->{go_rows};
}
sub STORE {
my ($sth, $attrib, $value) = @_;
return $sth->SUPER::STORE($attrib => $value)
if $sth_local_store_attrib{$attrib} # handle locally
# or it's a private_ (application) attribute
or $attrib =~ /^private_/;
# otherwise warn but do it anyway
# this will probably need refining later
my $msg = "Altering \$sth->{$attrib} won't affect proxied handle";
Carp::carp($msg) if $sth->FETCH('Warn');
# XXX could perhaps do
# push @{ $sth->{go_method_calls} }, [ 'STORE', $attrib, $value ]
# if not $sth->FETCH('Executed');
# but how to handle repeat executions? How to we know when an
# attribute is being set to affect the current resultset or the
# next execution?
# Could just always use go_method_calls I guess.
# do the store locally anyway, just in case
$sth->SUPER::STORE($attrib => $value);
return $sth->set_err($DBI::stderr, $msg);
}
# sub bind_param_array
# we use DBI's default, which sets $sth->{ParamArrays}{$param} = $value
# and calls bind_param($param, undef, $attr) if $attr.
sub execute_array {
my $sth = shift;
my $attr = shift;
$sth->bind_param_array($_, $_[$_-1]) for (1..@_);
push @{ $sth->{go_method_calls} }, [ 'execute_array', $attr ];
return $sth->go_sth_method($attr);
}
*go_cache = \&DBD::Gofer::go_cache;
}
1;
__END__
=head1 NAME
DBD::Gofer - A stateless-proxy driver for communicating with a remote DBI
=head1 SYNOPSIS
use DBI;
$original_dsn = "dbi:..."; # your original DBI Data Source Name
$dbh = DBI->connect("dbi:Gofer:transport=$transport;...;dsn=$original_dsn",
$user, $passwd, \%attributes);
... use $dbh as if it was connected to $original_dsn ...
The C<transport=$transport> part specifies the name of the module to use to
transport the requests to the remote DBI. If $transport doesn't contain any
double colons then it's prefixed with C<DBD::Gofer::Transport::>.
The C<dsn=$original_dsn> part I<must be the last element> of the DSN because
everything after C<dsn=> is assumed to be the DSN that the remote DBI should
use.
The C<...> represents attributes that influence the operation of the Gofer
driver or transport. These are described below or in the documentation of the
transport module being used.
=encoding ISO8859-1
=head1 DESCRIPTION
DBD::Gofer is a DBI database driver that forwards requests to another DBI
driver, usually in a separate process, often on a separate machine. It tries to
be as transparent as possible so it appears that you are using the remote
driver directly.
DBD::Gofer is very similar to DBD::Proxy. The major difference is that with
DBD::Gofer no state is maintained on the remote end. That means every
request contains all the information needed to create the required state. (So,
for example, every request includes the DSN to connect to.) Each request can be
sent to any available server. The server executes the request and returns a
single response that includes all the data.
This is very similar to the way http works as a stateless protocol for the web.
Each request from your web browser can be handled by a different web server process.
=head2 Use Cases
This may seem like pointless overhead but there are situations where this is a
very good thing. Let's consider a specific case.
Imagine using DBD::Gofer with an http transport. Your application calls
connect(), prepare("select * from table where foo=?"), bind_param(), and execute().
At this point DBD::Gofer builds a request containing all the information
about the method calls. It then uses the httpd transport to send that request
to an apache web server.
This 'dbi execute' web server executes the request (using DBI::Gofer::Execute
and related modules) and builds a response that contains all the rows of data,
if the statement returned any, along with all the attributes that describe the
results, such as $sth->{NAME}. This response is sent back to DBD::Gofer which
unpacks it and presents it to the application as if it had executed the
statement itself.
=head2 Advantages
Okay, but you still don't see the point? Well let's consider what we've gained:
=head3 Connection Pooling and Throttling
The 'dbi execute' web server leverages all the functionality of web
infrastructure in terms of load balancing, high-availability, firewalls, access
management, proxying, caching.
At its most basic level you get a configurable pool of persistent database connections.
=head3 Simple Scaling
Got thousands of processes all trying to connect to the database? You can use
DBD::Gofer to connect them to your smaller pool of 'dbi execute' web servers instead.
=head3 Caching
Client-side caching is as simple as adding "C<cache=1>" to the DSN.
This feature alone can be worth using DBD::Gofer for.
=head3 Fewer Network Round-trips
DBD::Gofer sends as few requests as possible (dependent on the policy being used).
=head3 Thin Clients / Unsupported Platforms
You no longer need drivers for your database on every system. DBD::Gofer is pure perl.
=head1 CONSTRAINTS
There are some natural constraints imposed by the DBD::Gofer 'stateless' approach.
But not many:
=head2 You can't change database handle attributes after connect()
You can't change database handle attributes after you've connected.
Use the connect() call to specify all the attribute settings you want.
This is because it's critical that when a request is complete the database
handle is left in the same state it was when first connected.
An exception is made for attributes with names starting "C<private_>":
They can be set after connect() but the change is only applied locally.
=head2 You can't change statement handle attributes after prepare()
You can't change statement handle attributes after prepare.
An exception is made for attributes with names starting "C<private_>":
They can be set after prepare() but the change is only applied locally.
=head2 You can't use transactions
AutoCommit only. Transactions aren't supported.
(In theory transactions could be supported when using a transport that
maintains a connection, like C<stream> does. If you're interested in this
please get in touch via dbi-dev@perl.org)
=head2 You can't call driver-private sth methods
But that's rarely needed anyway.
=head1 GENERAL CAVEATS
A few important things to keep in mind when using DBD::Gofer:
=head2 Temporary tables, locks, and other per-connection persistent state
You shouldn't expect any per-session state to persist between requests.
This includes locks and temporary tables.
Because the server-side may execute your requests via a different
database connections, you can't rely on any per-connection persistent state,
such as temporary tables, being available from one request to the next.
This is an easy trap to fall into. A good way to check for this is to test your
code with a Gofer policy package that sets the C<connect_method> policy to
'connect' to force a new connection for each request. The C<pedantic> policy does this.
=head2 Driver-private Database Handle Attributes
Some driver-private dbh attributes may not be available if the driver has not
implemented the private_attribute_info() method (added in DBI 1.54).
=head2 Driver-private Statement Handle Attributes
Driver-private sth attributes can be set in the prepare() call. TODO
Some driver-private sth attributes may not be available if the driver has not
implemented the private_attribute_info() method (added in DBI 1.54).
=head2 Multiple Resultsets
Multiple resultsets are supported only if the driver supports the more_results() method
(an exception is made for DBD::Sybase).
=head2 Statement activity that also updates dbh attributes
Some drivers may update one or more dbh attributes after performing activity on
a child sth. For example, DBD::mysql provides $dbh->{mysql_insertid} in addition to
$sth->{mysql_insertid}. Currently mysql_insertid is supported via a hack but a
more general mechanism is needed for other drivers to use.
=head2 Methods that report an error always return undef
With DBD::Gofer, a method that sets an error always return an undef or empty list.
That shouldn't be a problem in practice because the DBI doesn't define any
methods that return meaningful values while also reporting an error.
=head2 Subclassing only applies to client-side
The RootClass and DbTypeSubclass attributes are not passed to the Gofer server.
=head1 CAVEATS FOR SPECIFIC METHODS
=head2 last_insert_id
To enable use of last_insert_id you need to indicate to DBD::Gofer that you'd
like to use it. You do that my adding a C<go_last_insert_id_args> attribute to
the do() or prepare() method calls. For example:
$dbh->do($sql, { go_last_insert_id_args => [...] });
or
$sth = $dbh->prepare($sql, { go_last_insert_id_args => [...] });
The array reference should contains the args that you want passed to the
last_insert_id() method.
=head2 execute_for_fetch
The array methods bind_param_array() and execute_array() are supported.
When execute_array() is called the data is serialized and executed in a single
round-trip to the Gofer server. This makes it very fast, but requires enough
memory to store all the serialized data.
The execute_for_fetch() method currently isn't optimised, it uses the DBI
fallback behaviour of executing each tuple individually.
(It could be implemented as a wrapper for execute_array() - patches welcome.)
=head1 TRANSPORTS
DBD::Gofer doesn't concern itself with transporting requests and responses to and fro.
For that it uses special Gofer transport modules.
Gofer transport modules usually come in pairs: one for the 'client' DBD::Gofer
driver to use and one for the remote 'server' end. They have very similar names:
DBD::Gofer::Transport::<foo>
DBI::Gofer::Transport::<foo>
Sometimes the transports on the DBD and DBI sides may have different names. For
example DBD::Gofer::Transport::http is typically used with DBI::Gofer::Transport::mod_perl
(DBD::Gofer::Transport::http and DBI::Gofer::Transport::mod_perl modules are
part of the GoferTransport-http distribution).
=head2 Bundled Transports
Several transport modules are provided with DBD::Gofer:
=head3 null
The null transport is the simplest of them all. It doesn't actually transport the request anywhere.
It just serializes (freezes) the request into a string, then thaws it back into
a data structure before passing it to DBI::Gofer::Execute to execute. The same
freeze and thaw is applied to the results.
The null transport is the best way to test if your application will work with Gofer.
Just set the DBI_AUTOPROXY environment variable to "C<dbi:Gofer:transport=null;policy=pedantic>"
(see L</Using DBI_AUTOPROXY> below) and run your application, or ideally its test suite, as usual.
It doesn't take any parameters.
=head3 pipeone
The pipeone transport launches a subprocess for each request. It passes in the
request and reads the response.
The fact that a new subprocess is started for each request ensures that the
server side is truly stateless. While this does make the transport I<very> slow,
it is useful as a way to test that your application doesn't depend on
per-connection state, such as temporary tables, persisting between requests.
It's also useful both as a proof of concept and as a base class for the stream
driver.
=head3 stream
The stream driver also launches a subprocess and writes requests and reads
responses, like the pipeone transport. In this case, however, the subprocess
is expected to handle more that one request. (Though it will be automatically
restarted if it exits.)
This is the first transport that is truly useful because it can launch the
subprocess on a remote machine using C<ssh>. This means you can now use DBD::Gofer
to easily access any databases that's accessible from any system you can login to.
You also get all the benefits of ssh, including encryption and optional compression.
See L</Using DBI_AUTOPROXY> below for an example.
=head2 Other Transports
Implementing a Gofer transport is I<very> simple, and more transports are very welcome.
Just take a look at any existing transports that are similar to your needs.
=head3 http
See the GoferTransport-http distribution on CPAN: http://search.cpan.org/dist/GoferTransport-http/
=head3 Gearman
I know Ask Bjørn Hansen has implemented a transport for the C<gearman> distributed
job system, though it's not on CPAN at the time of writing this.
=head1 CONNECTING
Simply prefix your existing DSN with "C<dbi:Gofer:transport=$transport;dsn=>"
where $transport is the name of the Gofer transport you want to use (see L</TRANSPORTS>).
The C<transport> and C<dsn> attributes must be specified and the C<dsn> attributes must be last.
Other attributes can be specified in the DSN to configure DBD::Gofer and/or the
Gofer transport module being used. The main attributes after C<transport>, are
C<url> and C<policy>. These and other attributes are described below.
=head2 Using DBI_AUTOPROXY
The simplest way to try out DBD::Gofer is to set the DBI_AUTOPROXY environment variable.
In this case you don't include the C<dsn=> part. For example:
export DBI_AUTOPROXY="dbi:Gofer:transport=null"
or, for a more useful example, try:
export DBI_AUTOPROXY="dbi:Gofer:transport=stream;url=ssh:user@example.com"
=head2 Connection Attributes
These attributes can be specified in the DSN. They can also be passed in the
\%attr parameter of the DBI connect method by adding a "C<go_>" prefix to the name.
=head3 transport
Specifies the Gofer transport class to use. Required. See L</TRANSPORTS> above.
If the value does not include C<::> then "C<DBD::Gofer::Transport::>" is prefixed.
The transport object can be accessed via $h->{go_transport}.
=head3 dsn
Specifies the DSN for the remote side to connect to. Required, and must be last.
=head3 url
Used to tell the transport where to connect to. The exact form of the value depends on the transport used.
=head3 policy
Specifies the policy to use. See L</CONFIGURING BEHAVIOUR POLICY>.
If the value does not include C<::> then "C<DBD::Gofer::Policy>" is prefixed.
The policy object can be accessed via $h->{go_policy}.
=head3 timeout
Specifies a timeout, in seconds, to use when waiting for responses from the server side.
=head3 retry_limit
Specifies the number of times a failed request will be retried. Default is 0.
=head3 retry_hook
Specifies a code reference to be called to decide if a failed request should be retried.
The code reference is called like this:
$transport = $h->{go_transport};
$retry = $transport->go_retry_hook->($request, $response, $transport);
If it returns true then the request will be retried, up to the C<retry_limit>.
If it returns a false but defined value then the request will not be retried.
If it returns undef then the default behaviour will be used, as if C<retry_hook>
had not been specified.
The default behaviour is to retry requests where $request->is_idempotent is true,
or the error message matches C</induced by DBI_GOFER_RANDOM/>.
=head3 cache
Specifies that client-side caching should be performed. The value is the name
of a cache class to use.
Any class implementing get($key) and set($key, $value) methods can be used.
That includes a great many powerful caching classes on CPAN, including the
Cache and Cache::Cache distributions.
You can use "C<cache=1>" is a shortcut for "C<cache=DBI::Util::CacheMemory>".
See L<DBI::Util::CacheMemory> for a description of this simple fast default cache.
The cache object can be accessed via $h->go_cache. For example:
$dbh->go_cache->clear; # free up memory being used by the cache
The cache keys are the frozen (serialized) requests, and the values are the
frozen responses.
The default behaviour is to only use the cache for requests where
$request->is_idempotent is true (i.e., the dbh has the ReadOnly attribute set
or the SQL statement is obviously a SELECT without a FOR UPDATE clause.)
For even more control you can use the C<go_cache> attribute to pass in an
instantiated cache object. Individual methods, including prepare(), can also
specify alternative caches via the C<go_cache> attribute. For example, to
specify no caching for a particular query, you could use
$sth = $dbh->prepare( $sql, { go_cache => 0 } );
This can be used to implement different caching policies for different statements.
It's interesting to note that DBD::Gofer can be used to add client-side caching
to any (gofer compatible) application, with no code changes and no need for a
gofer server. Just set the DBI_AUTOPROXY environment variable like this:
DBI_AUTOPROXY='dbi:Gofer:transport=null;cache=1'
=head1 CONFIGURING BEHAVIOUR POLICY
DBD::Gofer supports a 'policy' mechanism that allows you to fine-tune the number of round-trips to the Gofer server.
The policies are grouped into classes (which may be subclassed) and referenced by the name of the class.
The L<DBD::Gofer::Policy::Base> class is the base class for all the policy
packages and describes all the available policies.
Three policy packages are supplied with DBD::Gofer:
L<DBD::Gofer::Policy::pedantic> is most 'transparent' but slowest because it
makes more round-trips to the Gofer server.
L<DBD::Gofer::Policy::classic> is a reasonable compromise - it's the default policy.
L<DBD::Gofer::Policy::rush> is fastest, but may require code changes in your applications.
Generally the default C<classic> policy is fine. When first testing an existing
application with Gofer it is a good idea to start with the C<pedantic> policy
first and then switch to C<classic> or a custom policy, for final testing.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=head1 ACKNOWLEDGEMENTS
The development of DBD::Gofer and related modules was sponsored by
Shopzilla.com (L<http://Shopzilla.com>), where I currently work.
=head1 SEE ALSO
L<DBI::Gofer::Request>, L<DBI::Gofer::Response>, L<DBI::Gofer::Execute>.
L<DBI::Gofer::Transport::Base>, L<DBD::Gofer::Policy::Base>.
L<DBI>
=head1 Caveats for specific drivers
This section aims to record issues to be aware of when using Gofer with specific drivers.
It usually only documents issues that are not natural consequences of the limitations
of the Gofer approach - as documented above.
=head1 TODO
This is just a random brain dump... (There's more in the source of the Changes file, not the pod)
Document policy mechanism
Add mechanism for transports to list config params and for Gofer to apply any that match (and warn if any left over?)
Driver-private sth attributes - set via prepare() - change DBI spec
add hooks into transport base class for checking & updating a result set cache
ie via a standard cache interface such as:
http://search.cpan.org/~robm/Cache-FastMmap/FastMmap.pm
http://search.cpan.org/~bradfitz/Cache-Memcached/lib/Cache/Memcached.pm
http://search.cpan.org/~dclinton/Cache-Cache/
http://search.cpan.org/~cleishman/Cache/
Also caching instructions could be passed through the httpd transport layer
in such a way that appropriate http cache headers are added to the results
so that web caches (squid etc) could be used to implement the caching.
(MUST require the use of GET rather than POST requests.)
Rework handling of installed_methods to not piggyback on dbh_attributes?
Perhaps support transactions for transports where it's possible (ie null and stream)?
Would make stream transport (ie ssh) more useful to more people.
Make sth_result_attr more like dbh_attributes (using '*' etc)
Add @val = FETCH_many(@names) to DBI in C and use in Gofer/Execute?
Implement _new_sth in C.
=cut
DBD/Gofer/Policy/Base.pm 0000644 00000011741 15033552504 0010654 0 ustar 00 package DBD::Gofer::Policy::Base;
# $Id: Base.pm 10087 2007-10-16 12:42:37Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use Carp;
our $VERSION = "0.010088";
our $AUTOLOAD;
my %policy_defaults = (
# force connect method (unless overridden by go_connect_method=>'...' attribute)
# if false: call same method on client as on server
connect_method => 'connect',
# force prepare method (unless overridden by go_prepare_method=>'...' attribute)
# if false: call same method on client as on server
prepare_method => 'prepare',
skip_connect_check => 0,
skip_default_methods => 0,
skip_prepare_check => 0,
skip_ping => 0,
dbh_attribute_update => 'every',
dbh_attribute_list => ['*'],
locally_quote => 0,
locally_quote_identifier => 0,
cache_parse_trace_flags => 1,
cache_parse_trace_flag => 1,
cache_data_sources => 1,
cache_type_info_all => 1,
cache_tables => 0,
cache_table_info => 0,
cache_column_info => 0,
cache_primary_key_info => 0,
cache_foreign_key_info => 0,
cache_statistics_info => 0,
cache_get_info => 0,
cache_func => 0,
);
my $base_policy_file = $INC{"DBD/Gofer/Policy/Base.pm"};
__PACKAGE__->create_policy_subs(\%policy_defaults);
sub create_policy_subs {
my ($class, $policy_defaults) = @_;
while ( my ($policy_name, $policy_default) = each %$policy_defaults) {
my $policy_attr_name = "go_$policy_name";
my $sub = sub {
# $policy->foo($attr, ...)
#carp "$policy_name($_[1],...)";
# return the policy default value unless an attribute overrides it
return (ref $_[1] && exists $_[1]->{$policy_attr_name})
? $_[1]->{$policy_attr_name}
: $policy_default;
};
no strict 'refs';
*{$class . '::' . $policy_name} = $sub;
}
}
sub AUTOLOAD {
carp "Unknown policy name $AUTOLOAD used";
# only warn once
no strict 'refs';
*$AUTOLOAD = sub { undef };
return undef;
}
sub new {
my ($class, $args) = @_;
my $policy = {};
bless $policy, $class;
}
sub DESTROY { };
1;
=head1 NAME
DBD::Gofer::Policy::Base - Base class for DBD::Gofer policies
=head1 SYNOPSIS
$dbh = DBI->connect("dbi:Gofer:transport=...;policy=...", ...)
=head1 DESCRIPTION
DBD::Gofer can be configured via a 'policy' mechanism that allows you to
fine-tune the number of round-trips to the Gofer server. The policies are
grouped into classes (which may be subclassed) and referenced by the name of
the class.
The L<DBD::Gofer::Policy::Base> class is the base class for all the policy
classes and describes all the individual policy items.
The Base policy is not used directly. You should use a policy class derived from it.
=head1 POLICY CLASSES
Three policy classes are supplied with DBD::Gofer:
L<DBD::Gofer::Policy::pedantic> is most 'transparent' but slowest because it
makes more round-trips to the Gofer server.
L<DBD::Gofer::Policy::classic> is a reasonable compromise - it's the default policy.
L<DBD::Gofer::Policy::rush> is fastest, but may require code changes in your applications.
Generally the default C<classic> policy is fine. When first testing an existing
application with Gofer it is a good idea to start with the C<pedantic> policy
first and then switch to C<classic> or a custom policy, for final testing.
=head1 POLICY ITEMS
These are temporary docs: See the source code for list of policies and their defaults.
In a future version the policies and their defaults will be defined in the pod and parsed out at load-time.
See the source code to this module for more details.
=head1 POLICY CUSTOMIZATION
XXX This area of DBD::Gofer is subject to change.
There are three ways to customize policies:
Policy classes are designed to influence the overall behaviour of DBD::Gofer
with existing, unaltered programs, so they work in a reasonably optimal way
without requiring code changes. You can implement new policy classes as
subclasses of existing policies.
In many cases individual policy items can be overridden on a case-by-case basis
within your application code. You do this by passing a corresponding
C<<go_<policy_name>>> attribute into DBI methods by your application code.
This let's you fine-tune the behaviour for special cases.
The policy items are implemented as methods. In many cases the methods are
passed parameters relating to the DBD::Gofer code being executed. This means
the policy can implement dynamic behaviour that varies depending on the
particular circumstances, such as the particular statement being executed.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBD/Gofer/Policy/rush.pm 0000644 00000005045 15033552504 0010763 0 ustar 00 package DBD::Gofer::Policy::rush;
# $Id: rush.pm 10087 2007-10-16 12:42:37Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
our $VERSION = "0.010088";
use base qw(DBD::Gofer::Policy::Base);
__PACKAGE__->create_policy_subs({
# always use connect_cached on server
connect_method => 'connect_cached',
# use same methods on server as is called on client
# (because code not using placeholders would bloat the sth cache)
prepare_method => '',
# Skipping the connect check is fast, but it also skips
# fetching the remote dbh attributes!
# Make sure that your application doesn't need access to dbh attributes.
skip_connect_check => 1,
# most code doesn't rely on sth attributes being set after prepare
skip_prepare_check => 1,
# we're happy to use local method if that's the same as the remote
skip_default_methods => 1,
# ping is almost meaningless for DBD::Gofer and most transports anyway
skip_ping => 1,
# don't update dbh attributes at all
# XXX actually we currently need dbh_attribute_update for skip_default_methods to work
# and skip_default_methods is more valuable to us than the cost of dbh_attribute_update
dbh_attribute_update => 'none', # actually means 'first' currently
#dbh_attribute_list => undef,
# we'd like to set locally_* but can't because drivers differ
# in a rush assume metadata doesn't change
cache_tables => 1,
cache_table_info => 1,
cache_column_info => 1,
cache_primary_key_info => 1,
cache_foreign_key_info => 1,
cache_statistics_info => 1,
cache_get_info => 1,
});
1;
=head1 NAME
DBD::Gofer::Policy::rush - The 'rush' policy for DBD::Gofer
=head1 SYNOPSIS
$dbh = DBI->connect("dbi:Gofer:transport=...;policy=rush", ...)
=head1 DESCRIPTION
The C<rush> policy tries to make as few round-trips as possible.
It's the opposite end of the policy spectrum to the C<pedantic> policy.
Temporary docs: See the source code for list of policies and their defaults.
In a future version the policies and their defaults will be defined in the pod and parsed out at load-time.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBD/Gofer/Policy/classic.pm 0000644 00000004072 15033552504 0011422 0 ustar 00 package DBD::Gofer::Policy::classic;
# $Id: classic.pm 10087 2007-10-16 12:42:37Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
our $VERSION = "0.010088";
use base qw(DBD::Gofer::Policy::Base);
__PACKAGE__->create_policy_subs({
# always use connect_cached on server
connect_method => 'connect_cached',
# use same methods on server as is called on client
prepare_method => '',
# don't skip the connect check since that also sets dbh attributes
# although this makes connect more expensive, that's partly offset
# by skip_ping=>1 below, which makes connect_cached very fast.
skip_connect_check => 0,
# most code doesn't rely on sth attributes being set after prepare
skip_prepare_check => 1,
# we're happy to use local method if that's the same as the remote
skip_default_methods => 1,
# ping is not important for DBD::Gofer and most transports
skip_ping => 1,
# only update dbh attributes on first contact with server
dbh_attribute_update => 'first',
# we'd like to set locally_* but can't because drivers differ
# get_info results usually don't change
cache_get_info => 1,
});
1;
=head1 NAME
DBD::Gofer::Policy::classic - The 'classic' policy for DBD::Gofer
=head1 SYNOPSIS
$dbh = DBI->connect("dbi:Gofer:transport=...;policy=classic", ...)
The C<classic> policy is the default DBD::Gofer policy, so need not be included in the DSN.
=head1 DESCRIPTION
Temporary docs: See the source code for list of policies and their defaults.
In a future version the policies and their defaults will be defined in the pod and parsed out at load-time.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBD/Gofer/Policy/pedantic.pm 0000644 00000002633 15033552504 0011571 0 ustar 00 package DBD::Gofer::Policy::pedantic;
# $Id: pedantic.pm 10087 2007-10-16 12:42:37Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
our $VERSION = "0.010088";
use base qw(DBD::Gofer::Policy::Base);
# the 'pedantic' policy is the same as the Base policy
1;
=head1 NAME
DBD::Gofer::Policy::pedantic - The 'pedantic' policy for DBD::Gofer
=head1 SYNOPSIS
$dbh = DBI->connect("dbi:Gofer:transport=...;policy=pedantic", ...)
=head1 DESCRIPTION
The C<pedantic> policy tries to be as transparent as possible. To do this it
makes round-trips to the server for almost every DBI method call.
This is the best policy to use when first testing existing code with Gofer.
Once it's working well you should consider moving to the C<classic> policy or defining your own policy class.
Temporary docs: See the source code for list of policies and their defaults.
In a future version the policies and their defaults will be defined in the pod and parsed out at load-time.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBD/Gofer/Transport/Base.pm 0000644 00000030723 15033552504 0011412 0 ustar 00 package DBD::Gofer::Transport::Base;
# $Id: Base.pm 14120 2010-06-07 19:52:19Z H.Merijn $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use base qw(DBI::Gofer::Transport::Base);
our $VERSION = "0.014121";
__PACKAGE__->mk_accessors(qw(
trace
go_dsn
go_url
go_policy
go_timeout
go_retry_hook
go_retry_limit
go_cache
cache_hit
cache_miss
cache_store
));
__PACKAGE__->mk_accessors_using(make_accessor_autoviv_hashref => qw(
meta
));
sub new {
my ($class, $args) = @_;
$args->{$_} = 0 for (qw(cache_hit cache_miss cache_store));
$args->{keep_meta_frozen} ||= 1 if $args->{go_cache};
#warn "args @{[ %$args ]}\n";
return $class->SUPER::new($args);
}
sub _init_trace { $ENV{DBD_GOFER_TRACE} || 0 }
sub new_response {
my $self = shift;
return DBI::Gofer::Response->new(@_);
}
sub transmit_request {
my ($self, $request) = @_;
my $trace = $self->trace;
my $response;
my ($go_cache, $request_cache_key);
if ($go_cache = $self->{go_cache}) {
$request_cache_key
= $request->{meta}{request_cache_key}
= $self->get_cache_key_for_request($request);
if ($request_cache_key) {
my $frozen_response = eval { $go_cache->get($request_cache_key) };
if ($frozen_response) {
$self->_dump("cached response found for ".ref($request), $request)
if $trace;
$response = $self->thaw_response($frozen_response);
$self->trace_msg("transmit_request is returning a response from cache $go_cache\n")
if $trace;
++$self->{cache_hit};
return $response;
}
warn $@ if $@;
++$self->{cache_miss};
$self->trace_msg("transmit_request cache miss\n")
if $trace;
}
}
my $to = $self->go_timeout;
my $transmit_sub = sub {
$self->trace_msg("transmit_request\n") if $trace;
local $SIG{ALRM} = sub { die "TIMEOUT\n" } if $to;
my $response = eval {
local $SIG{PIPE} = sub {
my $extra = ($! eq "Broken pipe") ? "" : " ($!)";
die "Unable to send request: Broken pipe$extra\n";
};
alarm($to) if $to;
$self->transmit_request_by_transport($request);
};
alarm(0) if $to;
if ($@) {
return $self->transport_timedout("transmit_request", $to)
if $@ eq "TIMEOUT\n";
return $self->new_response({ err => 1, errstr => $@ });
}
return $response;
};
$response = $self->_transmit_request_with_retries($request, $transmit_sub);
if ($response) {
my $frozen_response = delete $response->{meta}{frozen};
$self->_store_response_in_cache($frozen_response, $request_cache_key)
if $request_cache_key;
}
$self->trace_msg("transmit_request is returning a response itself\n")
if $trace && $response;
return $response unless wantarray;
return ($response, $transmit_sub);
}
sub _transmit_request_with_retries {
my ($self, $request, $transmit_sub) = @_;
my $response;
do {
$response = $transmit_sub->();
} while ( $response && $self->response_needs_retransmit($request, $response) );
return $response;
}
sub receive_response {
my ($self, $request, $retransmit_sub) = @_;
my $to = $self->go_timeout;
my $receive_sub = sub {
$self->trace_msg("receive_response\n");
local $SIG{ALRM} = sub { die "TIMEOUT\n" } if $to;
my $response = eval {
alarm($to) if $to;
$self->receive_response_by_transport($request);
};
alarm(0) if $to;
if ($@) {
return $self->transport_timedout("receive_response", $to)
if $@ eq "TIMEOUT\n";
return $self->new_response({ err => 1, errstr => $@ });
}
return $response;
};
my $response;
do {
$response = $receive_sub->();
if ($self->response_needs_retransmit($request, $response)) {
$response = $self->_transmit_request_with_retries($request, $retransmit_sub);
$response ||= $receive_sub->();
}
} while ( $self->response_needs_retransmit($request, $response) );
if ($response) {
my $frozen_response = delete $response->{meta}{frozen};
my $request_cache_key = $request->{meta}{request_cache_key};
$self->_store_response_in_cache($frozen_response, $request_cache_key)
if $request_cache_key && $self->{go_cache};
}
return $response;
}
sub response_retry_preference {
my ($self, $request, $response) = @_;
# give the user a chance to express a preference (or undef for default)
if (my $go_retry_hook = $self->go_retry_hook) {
my $retry = $go_retry_hook->($request, $response, $self);
$self->trace_msg(sprintf "go_retry_hook returned %s\n",
(defined $retry) ? $retry : 'undef');
return $retry if defined $retry;
}
# This is the main decision point. We don't retry requests that got
# as far as executing because the error is probably from the database
# (not transport) so retrying is unlikely to help. But note that any
# severe transport error occurring after execute is likely to return
# a new response object that doesn't have the execute flag set. Beware!
return 0 if $response->executed_flag_set;
return 1 if ($response->errstr || '') =~ m/induced by DBI_GOFER_RANDOM/;
return 1 if $request->is_idempotent; # i.e. is SELECT or ReadOnly was set
return undef; # we couldn't make up our mind
}
sub response_needs_retransmit {
my ($self, $request, $response) = @_;
my $err = $response->err
or return 0; # nothing went wrong
my $retry = $self->response_retry_preference($request, $response);
if (!$retry) { # false or undef
$self->trace_msg("response_needs_retransmit: response not suitable for retry\n");
return 0;
}
# we'd like to retry but have we retried too much already?
my $retry_limit = $self->go_retry_limit;
if (!$retry_limit) {
$self->trace_msg("response_needs_retransmit: retries disabled (retry_limit not set)\n");
return 0;
}
my $request_meta = $request->meta;
my $retry_count = $request_meta->{retry_count} || 0;
if ($retry_count >= $retry_limit) {
$self->trace_msg("response_needs_retransmit: $retry_count is too many retries\n");
# XXX should be possible to disable altering the err
$response->errstr(sprintf "%s (after %d retries by gofer)", $response->errstr, $retry_count);
return 0;
}
# will retry now, do the admin
++$retry_count;
$self->trace_msg("response_needs_retransmit: retry $retry_count\n");
# hook so response_retry_preference can defer some code execution
# until we've checked retry_count and retry_limit.
if (ref $retry eq 'CODE') {
$retry->($retry_count, $retry_limit)
and warn "should return false"; # protect future use
}
++$request_meta->{retry_count}; # update count for this request object
++$self->meta->{request_retry_count}; # update cumulative transport stats
return 1;
}
sub transport_timedout {
my ($self, $method, $timeout) = @_;
$timeout ||= $self->go_timeout;
return $self->new_response({ err => 1, errstr => "DBD::Gofer $method timed-out after $timeout seconds" });
}
# return undef if we don't want to cache this request
# subclasses may use more specialized rules
sub get_cache_key_for_request {
my ($self, $request) = @_;
# we only want to cache idempotent requests
# is_idempotent() is true if GOf_REQUEST_IDEMPOTENT or GOf_REQUEST_READONLY set
return undef if not $request->is_idempotent;
# XXX would be nice to avoid the extra freeze here
my $key = $self->freeze_request($request, undef, 1);
#use Digest::MD5; warn "get_cache_key_for_request: ".Digest::MD5::md5_base64($key)."\n";
return $key;
}
sub _store_response_in_cache {
my ($self, $frozen_response, $request_cache_key) = @_;
my $go_cache = $self->{go_cache}
or return;
# new() ensures that enabling go_cache also enables keep_meta_frozen
warn "No meta frozen in response" if !$frozen_response;
warn "No request_cache_key" if !$request_cache_key;
if ($frozen_response && $request_cache_key) {
$self->trace_msg("receive_response added response to cache $go_cache\n");
eval { $go_cache->set($request_cache_key, $frozen_response) };
warn $@ if $@;
++$self->{cache_store};
}
}
1;
__END__
=head1 NAME
DBD::Gofer::Transport::Base - base class for DBD::Gofer client transports
=head1 SYNOPSIS
my $remote_dsn = "..."
DBI->connect("dbi:Gofer:transport=...;url=...;timeout=...;retry_limit=...;dsn=$remote_dsn",...)
or, enable by setting the DBI_AUTOPROXY environment variable:
export DBI_AUTOPROXY='dbi:Gofer:transport=...;url=...'
which will force I<all> DBI connections to be made via that Gofer server.
=head1 DESCRIPTION
This is the base class for all DBD::Gofer client transports.
=head1 ATTRIBUTES
Gofer transport attributes can be specified either in the attributes parameter
of the connect() method call, or in the DSN string. When used in the DSN
string, attribute names don't have the C<go_> prefix.
=head2 go_dsn
The full DBI DSN that the Gofer server should connect to on your behalf.
When used in the DSN it must be the last element in the DSN string.
=head2 go_timeout
A time limit for sending a request and receiving a response. Some drivers may
implement sending and receiving as separate steps, in which case (currently)
the timeout applies to each separately.
If a request needs to be resent then the timeout is restarted for each sending
of a request and receiving of a response.
=head2 go_retry_limit
The maximum number of times an request may be retried. The default is 2.
=head2 go_retry_hook
This subroutine reference is called, if defined, for each response received where $response->err is true.
The subroutine is pass three parameters: the request object, the response object, and the transport object.
If it returns an undefined value then the default retry behaviour is used. See L</RETRY ON ERROR> below.
If it returns a defined but false value then the request is not resent.
If it returns true value then the request is resent, so long as the number of retries does not exceed C<go_retry_limit>.
=head1 RETRY ON ERROR
The default retry on error behaviour is:
- Retry if the error was due to DBI_GOFER_RANDOM. See L<DBI::Gofer::Execute>.
- Retry if $request->is_idempotent returns true. See L<DBI::Gofer::Request>.
A retry won't be allowed if the number of previous retries has reached C<go_retry_limit>.
=head1 TRACING
Tracing of gofer requests and responses can be enabled by setting the
C<DBD_GOFER_TRACE> environment variable. A value of 1 gives a reasonably
compact summary of each request and response. A value of 2 or more gives a
detailed, and voluminous, dump.
The trace is written using DBI->trace_msg() and so is written to the default
DBI trace output, which is usually STDERR.
=head1 METHODS
I<This section is currently far from complete.>
=head2 response_retry_preference
$retry = $transport->response_retry_preference($request, $response);
The response_retry_preference is called by DBD::Gofer when considering if a
request should be retried after an error.
Returns true (would like to retry), false (must not retry), undef (no preference).
If a true value is returned in the form of a CODE ref then, if DBD::Gofer does
decide to retry the request, it calls the code ref passing $retry_count, $retry_limit.
Can be used for logging and/or to implement exponential backoff behaviour.
Currently the called code must return using C<return;> to allow for future extensions.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007-2008, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=head1 SEE ALSO
L<DBD::Gofer>, L<DBI::Gofer::Request>, L<DBI::Gofer::Response>, L<DBI::Gofer::Execute>.
and some example transports:
L<DBD::Gofer::Transport::stream>
L<DBD::Gofer::Transport::http>
L<DBI::Gofer::Transport::mod_perl>
=cut
DBD/Gofer/Transport/null.pm 0000644 00000005322 15033552504 0011507 0 ustar 00 package DBD::Gofer::Transport::null;
# $Id: null.pm 10087 2007-10-16 12:42:37Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use base qw(DBD::Gofer::Transport::Base);
use DBI::Gofer::Execute;
our $VERSION = "0.010088";
__PACKAGE__->mk_accessors(qw(
pending_response
transmit_count
));
my $executor = DBI::Gofer::Execute->new();
sub transmit_request_by_transport {
my ($self, $request) = @_;
$self->transmit_count( ($self->transmit_count()||0) + 1 ); # just for tests
my $frozen_request = $self->freeze_request($request);
# ...
# the request is magically transported over to ... ourselves
# ...
my $response = $executor->execute_request( $self->thaw_request($frozen_request, undef, 1) );
# put response 'on the shelf' ready for receive_response()
$self->pending_response( $response );
return undef;
}
sub receive_response_by_transport {
my $self = shift;
my $response = $self->pending_response;
my $frozen_response = $self->freeze_response($response, undef, 1);
# ...
# the response is magically transported back to ... ourselves
# ...
return $self->thaw_response($frozen_response);
}
1;
__END__
=head1 NAME
DBD::Gofer::Transport::null - DBD::Gofer client transport for testing
=head1 SYNOPSIS
my $original_dsn = "..."
DBI->connect("dbi:Gofer:transport=null;dsn=$original_dsn",...)
or, enable by setting the DBI_AUTOPROXY environment variable:
export DBI_AUTOPROXY="dbi:Gofer:transport=null"
=head1 DESCRIPTION
Connect via DBD::Gofer but execute the requests within the same process.
This is a quick and simple way to test applications for compatibility with the
(few) restrictions that DBD::Gofer imposes.
It also provides a simple, portable way for the DBI test suite to be used to
test DBD::Gofer on all platforms with no setup.
Also, by measuring the difference in performance between normal connections and
connections via C<dbi:Gofer:transport=null> the basic cost of using DBD::Gofer
can be measured. Furthermore, the additional cost of more advanced transports can be
isolated by comparing their performance with the null transport.
The C<t/85gofer.t> script in the DBI distribution includes a comparative benchmark.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=head1 SEE ALSO
L<DBD::Gofer::Transport::Base>
L<DBD::Gofer>
=cut
DBD/Gofer/Transport/stream.pm 0000644 00000022040 15033552504 0012024 0 ustar 00 package DBD::Gofer::Transport::stream;
# $Id: stream.pm 14598 2010-12-21 22:53:25Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use Carp;
use base qw(DBD::Gofer::Transport::pipeone);
our $VERSION = "0.014599";
__PACKAGE__->mk_accessors(qw(
go_persist
));
my $persist_all = 5;
my %persist;
sub _connection_key {
my ($self) = @_;
return join "~", $self->go_url||"", @{ $self->go_perl || [] };
}
sub _connection_get {
my ($self) = @_;
my $persist = $self->go_persist; # = 0 can force non-caching
$persist = $persist_all if not defined $persist;
my $key = ($persist) ? $self->_connection_key : '';
if ($persist{$key} && $self->_connection_check($persist{$key})) {
$self->trace_msg("reusing persistent connection $key\n",0) if $self->trace >= 1;
return $persist{$key};
}
my $connection = $self->_make_connection;
if ($key) {
%persist = () if keys %persist > $persist_all; # XXX quick hack to limit subprocesses
$persist{$key} = $connection;
}
return $connection;
}
sub _connection_check {
my ($self, $connection) = @_;
$connection ||= $self->connection_info;
my $pid = $connection->{pid};
my $ok = (kill 0, $pid);
$self->trace_msg("_connection_check: $ok (pid $$)\n",0) if $self->trace;
return $ok;
}
sub _connection_kill {
my ($self) = @_;
my $connection = $self->connection_info;
my ($pid, $wfh, $rfh, $efh) = @{$connection}{qw(pid wfh rfh efh)};
$self->trace_msg("_connection_kill: closing write handle\n",0) if $self->trace;
# closing the write file handle should be enough, generally
close $wfh;
# in future we may want to be more aggressive
#close $rfh; close $efh; kill 15, $pid
# but deleting from the persist cache...
delete $persist{ $self->_connection_key };
# ... and removing the connection_info should suffice
$self->connection_info( undef );
return;
}
sub _make_connection {
my ($self) = @_;
my $go_perl = $self->go_perl;
my $cmd = [ @$go_perl, qw(-MDBI::Gofer::Transport::stream -e run_stdio_hex)];
#push @$cmd, "DBI_TRACE=2=/tmp/goferstream.log", "sh", "-c";
if (my $url = $self->go_url) {
die "Only 'ssh:user\@host' style url supported by this transport"
unless $url =~ s/^ssh://;
my $ssh = $url;
my $setup_env = join "||", map { "source $_ 2>/dev/null" } qw(.bash_profile .bash_login .profile);
my $setup = $setup_env.q{; exec "$@"};
# don't use $^X on remote system by default as it's possibly wrong
$cmd->[0] = 'perl' if "@$go_perl" eq $^X;
# -x not only 'Disables X11 forwarding' but also makes connections *much* faster
unshift @$cmd, qw(ssh -xq), split(' ', $ssh), qw(bash -c), $setup;
}
$self->trace_msg("new connection: @$cmd\n",0) if $self->trace;
# XXX add a handshake - some message from DBI::Gofer::Transport::stream that's
# sent as soon as it starts that we can wait for to report success - and soak up
# and report useful warnings etc from ssh before we get it? Increases latency though.
my $connection = $self->start_pipe_command($cmd);
return $connection;
}
sub transmit_request_by_transport {
my ($self, $request) = @_;
my $trace = $self->trace;
my $connection = $self->connection_info || do {
my $con = $self->_connection_get;
$self->connection_info( $con );
$con;
};
my $encoded_request = unpack("H*", $self->freeze_request($request));
$encoded_request .= "\015\012";
my $wfh = $connection->{wfh};
$self->trace_msg(sprintf("transmit_request_by_transport: to fh %s fd%d\n", $wfh, fileno($wfh)),0)
if $trace >= 4;
# send frozen request
local $\;
$wfh->print($encoded_request) # autoflush enabled
or do {
my $err = $!;
# XXX could/should make new connection and retry
$self->_connection_kill;
die "Error sending request: $err";
};
$self->trace_msg("Request sent: $encoded_request\n",0) if $trace >= 4;
return undef; # indicate no response yet (so caller calls receive_response_by_transport)
}
sub receive_response_by_transport {
my $self = shift;
my $trace = $self->trace;
$self->trace_msg("receive_response_by_transport: awaiting response\n",0) if $trace >= 4;
my $connection = $self->connection_info || die;
my ($pid, $rfh, $efh, $cmd) = @{$connection}{qw(pid rfh efh cmd)};
my $errno = 0;
my $encoded_response;
my $stderr_msg;
$self->read_response_from_fh( {
$efh => {
error => sub { warn "error reading response stderr: $!"; $errno||=$!; 1 },
eof => sub { warn "eof reading efh" if $trace >= 4; 1 },
read => sub { $stderr_msg .= $_; 0 },
},
$rfh => {
error => sub { warn "error reading response: $!"; $errno||=$!; 1 },
eof => sub { warn "eof reading rfh" if $trace >= 4; 1 },
read => sub { $encoded_response .= $_; ($encoded_response=~s/\015\012$//) ? 1 : 0 },
},
});
# if we got no output on stdout at all then the command has
# probably exited, possibly with an error to stderr.
# Turn this situation into a reasonably useful DBI error.
if (not $encoded_response) {
my @msg;
push @msg, "error while reading response: $errno" if $errno;
if ($stderr_msg) {
chomp $stderr_msg;
push @msg, sprintf "error reported by \"%s\" (pid %d%s): %s",
$self->cmd_as_string,
$pid, ((kill 0, $pid) ? "" : ", exited"),
$stderr_msg;
}
die join(", ", "No response received", @msg)."\n";
}
$self->trace_msg("Response received: $encoded_response\n",0)
if $trace >= 4;
$self->trace_msg("Gofer stream stderr message: $stderr_msg\n",0)
if $stderr_msg && $trace;
my $frozen_response = pack("H*", $encoded_response);
# XXX need to be able to detect and deal with corruption
my $response = $self->thaw_response($frozen_response);
if ($stderr_msg) {
# add stderr messages as warnings (for PrintWarn)
$response->add_err(0, $stderr_msg, undef, $trace)
# but ignore warning from old version of blib
unless $stderr_msg =~ /^Using .*blib/ && "@$cmd" =~ /-Mblib/;
}
return $response;
}
sub transport_timedout {
my $self = shift;
$self->_connection_kill;
return $self->SUPER::transport_timedout(@_);
}
1;
__END__
=head1 NAME
DBD::Gofer::Transport::stream - DBD::Gofer transport for stdio streaming
=head1 SYNOPSIS
DBI->connect('dbi:Gofer:transport=stream;url=ssh:username@host.example.com;dsn=dbi:...',...)
or, enable by setting the DBI_AUTOPROXY environment variable:
export DBI_AUTOPROXY='dbi:Gofer:transport=stream;url=ssh:username@host.example.com'
=head1 DESCRIPTION
Without the C<url=> parameter it launches a subprocess as
perl -MDBI::Gofer::Transport::stream -e run_stdio_hex
and feeds requests into it and reads responses from it. But that's not very useful.
With a C<url=ssh:username@host.example.com> parameter it uses ssh to launch the subprocess
on a remote system. That's much more useful!
It gives you secure remote access to DBI databases on any system you can login to.
Using ssh also gives you optional compression and many other features (see the
ssh manual for how to configure that and many other options via ~/.ssh/config file).
The actual command invoked is something like:
ssh -xq ssh:username@host.example.com bash -c $setup $run
where $run is the command shown above, and $command is
. .bash_profile 2>/dev/null || . .bash_login 2>/dev/null || . .profile 2>/dev/null; exec "$@"
which is trying (in a limited and fairly unportable way) to setup the environment
(PATH, PERL5LIB etc) as it would be if you had logged in to that system.
The "C<perl>" used in the command will default to the value of $^X when not using ssh.
On most systems that's the full path to the perl that's currently executing.
=head1 PERSISTENCE
Currently gofer stream connections persist (remain connected) after all
database handles have been disconnected. This makes later connections in the
same process very fast.
Currently up to 5 different gofer stream connections (based on url) can
persist. If more than 5 are in the cache when a new connection is made then
the cache is cleared before adding the new connection. Simple but effective.
=head1 TO DO
Document go_perl attribute
Automatically reconnect (within reason) if there's a transport error.
Decide on default for persistent connection - on or off? limits? ttl?
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=head1 SEE ALSO
L<DBD::Gofer::Transport::Base>
L<DBD::Gofer>
=cut
DBD/Gofer/Transport/pipeone.pm 0000644 00000016203 15033552504 0012174 0 ustar 00 package DBD::Gofer::Transport::pipeone;
# $Id: pipeone.pm 10087 2007-10-16 12:42:37Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use Carp;
use Fcntl;
use IO::Select;
use IPC::Open3 qw(open3);
use Symbol qw(gensym);
use base qw(DBD::Gofer::Transport::Base);
our $VERSION = "0.010088";
__PACKAGE__->mk_accessors(qw(
connection_info
go_perl
));
sub new {
my ($self, $args) = @_;
$args->{go_perl} ||= do {
($INC{"blib.pm"}) ? [ $^X, '-Mblib' ] : [ $^X ];
};
if (not ref $args->{go_perl}) {
# user can override the perl to be used, either with an array ref
# containing the command name and args to use, or with a string
# (ie via the DSN) in which case, to enable args to be passed,
# we split on two or more consecutive spaces (otherwise the path
# to perl couldn't contain a space itself).
$args->{go_perl} = [ split /\s{2,}/, $args->{go_perl} ];
}
return $self->SUPER::new($args);
}
# nonblock($fh) puts filehandle into nonblocking mode
sub nonblock {
my $fh = shift;
my $flags = fcntl($fh, F_GETFL, 0)
or croak "Can't get flags for filehandle $fh: $!";
fcntl($fh, F_SETFL, $flags | O_NONBLOCK)
or croak "Can't make filehandle $fh nonblocking: $!";
}
sub start_pipe_command {
my ($self, $cmd) = @_;
$cmd = [ $cmd ] unless ref $cmd eq 'ARRAY';
# if it's important that the subprocess uses the same
# (versions of) modules as us then the caller should
# set PERL5LIB itself.
# limit various forms of insanity, for now
local $ENV{DBI_TRACE}; # use DBI_GOFER_TRACE instead
local $ENV{DBI_AUTOPROXY};
local $ENV{DBI_PROFILE};
my ($wfh, $rfh, $efh) = (gensym, gensym, gensym);
my $pid = open3($wfh, $rfh, $efh, @$cmd)
or die "error starting @$cmd: $!\n";
if ($self->trace) {
$self->trace_msg(sprintf("Started pid $pid: @$cmd {fd: w%d r%d e%d, ppid=$$}\n", fileno $wfh, fileno $rfh, fileno $efh),0);
}
nonblock($rfh);
nonblock($efh);
my $ios = IO::Select->new($rfh, $efh);
return {
cmd=>$cmd,
pid=>$pid,
wfh=>$wfh, rfh=>$rfh, efh=>$efh,
ios=>$ios,
};
}
sub cmd_as_string {
my $self = shift;
# XXX meant to return a properly shell-escaped string suitable for system
# but its only for debugging so that can wait
my $connection_info = $self->connection_info;
return join " ", map { (m/^[-:\w]*$/) ? $_ : "'$_'" } @{$connection_info->{cmd}};
}
sub transmit_request_by_transport {
my ($self, $request) = @_;
my $frozen_request = $self->freeze_request($request);
my $cmd = [ @{$self->go_perl}, qw(-MDBI::Gofer::Transport::pipeone -e run_one_stdio)];
my $info = $self->start_pipe_command($cmd);
my $wfh = delete $info->{wfh};
# send frozen request
local $\;
print $wfh $frozen_request
or warn "error writing to @$cmd: $!\n";
# indicate that there's no more
close $wfh
or die "error closing pipe to @$cmd: $!\n";
$self->connection_info( $info );
return;
}
sub read_response_from_fh {
my ($self, $fh_actions) = @_;
my $trace = $self->trace;
my $info = $self->connection_info || die;
my ($ios) = @{$info}{qw(ios)};
my $errors = 0;
my $complete;
die "No handles to read response from" unless $ios->count;
while ($ios->count) {
my @readable = $ios->can_read();
for my $fh (@readable) {
local $_;
my $actions = $fh_actions->{$fh} || die "panic: no action for $fh";
my $rv = sysread($fh, $_='', 1024*31); # to fit in 32KB slab
unless ($rv) { # error (undef) or end of file (0)
my $action;
unless (defined $rv) { # was an error
$self->trace_msg("error on handle $fh: $!\n") if $trace >= 4;
$action = $actions->{error} || $actions->{eof};
++$errors;
# XXX an error may be a permenent condition of the handle
# if so we'll loop here - not good
}
else {
$action = $actions->{eof};
$self->trace_msg("eof on handle $fh\n") if $trace >= 4;
}
if ($action->($fh)) {
$self->trace_msg("removing $fh from handle set\n") if $trace >= 4;
$ios->remove($fh);
}
next;
}
# action returns true if the response is now complete
# (we finish all handles
$actions->{read}->($fh) && ++$complete;
}
last if $complete;
}
return $errors;
}
sub receive_response_by_transport {
my $self = shift;
my $info = $self->connection_info || die;
my ($pid, $rfh, $efh, $ios, $cmd) = @{$info}{qw(pid rfh efh ios cmd)};
my $frozen_response;
my $stderr_msg;
$self->read_response_from_fh( {
$efh => {
error => sub { warn "error reading response stderr: $!"; 1 },
eof => sub { warn "eof on stderr" if 0; 1 },
read => sub { $stderr_msg .= $_; 0 },
},
$rfh => {
error => sub { warn "error reading response: $!"; 1 },
eof => sub { warn "eof on stdout" if 0; 1 },
read => sub { $frozen_response .= $_; 0 },
},
});
waitpid $info->{pid}, 0
or warn "waitpid: $!"; # XXX do something more useful?
die ref($self)." command (@$cmd) failed: $stderr_msg"
if not $frozen_response; # no output on stdout at all
# XXX need to be able to detect and deal with corruption
my $response = $self->thaw_response($frozen_response);
if ($stderr_msg) {
# add stderr messages as warnings (for PrintWarn)
$response->add_err(0, $stderr_msg, undef, $self->trace)
# but ignore warning from old version of blib
unless $stderr_msg =~ /^Using .*blib/ && "@$cmd" =~ /-Mblib/;
}
return $response;
}
1;
__END__
=head1 NAME
DBD::Gofer::Transport::pipeone - DBD::Gofer client transport for testing
=head1 SYNOPSIS
$original_dsn = "...";
DBI->connect("dbi:Gofer:transport=pipeone;dsn=$original_dsn",...)
or, enable by setting the DBI_AUTOPROXY environment variable:
export DBI_AUTOPROXY="dbi:Gofer:transport=pipeone"
=head1 DESCRIPTION
Connect via DBD::Gofer and execute each request by starting executing a subprocess.
This is, as you might imagine, spectacularly inefficient!
It's only intended for testing. Specifically it demonstrates that the server
side is completely stateless.
It also provides a base class for the much more useful L<DBD::Gofer::Transport::stream>
transport.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=head1 SEE ALSO
L<DBD::Gofer::Transport::Base>
L<DBD::Gofer>
=cut
Socket.pm 0000644 00000110306 15033552504 0006335 0 ustar 00 package Socket;
use strict;
{ use 5.006001; }
our $VERSION = '2.027';
=head1 NAME
C<Socket> - networking constants and support functions
=head1 SYNOPSIS
C<Socket> a low-level module used by, among other things, the L<IO::Socket>
family of modules. The following examples demonstrate some low-level uses but
a practical program would likely use the higher-level API provided by
C<IO::Socket> or similar instead.
use Socket qw(PF_INET SOCK_STREAM pack_sockaddr_in inet_aton);
socket(my $socket, PF_INET, SOCK_STREAM, 0)
or die "socket: $!";
my $port = getservbyname "echo", "tcp";
connect($socket, pack_sockaddr_in($port, inet_aton("localhost")))
or die "connect: $!";
print $socket "Hello, world!\n";
print <$socket>;
See also the L</EXAMPLES> section.
=head1 DESCRIPTION
This module provides a variety of constants, structure manipulators and other
functions related to socket-based networking. The values and functions
provided are useful when used in conjunction with Perl core functions such as
socket(), setsockopt() and bind(). It also provides several other support
functions, mostly for dealing with conversions of network addresses between
human-readable and native binary forms, and for hostname resolver operations.
Some constants and functions are exported by default by this module; but for
backward-compatibility any recently-added symbols are not exported by default
and must be requested explicitly. When an import list is provided to the
C<use Socket> line, the default exports are not automatically imported. It is
therefore best practice to always to explicitly list all the symbols required.
Also, some common socket "newline" constants are provided: the constants
C<CR>, C<LF>, and C<CRLF>, as well as C<$CR>, C<$LF>, and C<$CRLF>, which map
to C<\015>, C<\012>, and C<\015\012>. If you do not want to use the literal
characters in your programs, then use the constants provided here. They are
not exported by default, but can be imported individually, and with the
C<:crlf> export tag:
use Socket qw(:DEFAULT :crlf);
$sock->print("GET / HTTP/1.0$CRLF");
The entire getaddrinfo() subsystem can be exported using the tag C<:addrinfo>;
this exports the getaddrinfo() and getnameinfo() functions, and all the
C<AI_*>, C<NI_*>, C<NIx_*> and C<EAI_*> constants.
=cut
=head1 CONSTANTS
In each of the following groups, there may be many more constants provided
than just the ones given as examples in the section heading. If the heading
ends C<...> then this means there are likely more; the exact constants
provided will depend on the OS and headers found at compile-time.
=cut
=head2 PF_INET, PF_INET6, PF_UNIX, ...
Protocol family constants to use as the first argument to socket() or the
value of the C<SO_DOMAIN> or C<SO_FAMILY> socket option.
=head2 AF_INET, AF_INET6, AF_UNIX, ...
Address family constants used by the socket address structures, to pass to
such functions as inet_pton() or getaddrinfo(), or are returned by such
functions as sockaddr_family().
=head2 SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, ...
Socket type constants to use as the second argument to socket(), or the value
of the C<SO_TYPE> socket option.
=head2 SOCK_NONBLOCK. SOCK_CLOEXEC
Linux-specific shortcuts to specify the C<O_NONBLOCK> and C<FD_CLOEXEC> flags
during a C<socket(2)> call.
socket( my $sockh, PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0 )
=head2 SOL_SOCKET
Socket option level constant for setsockopt() and getsockopt().
=head2 SO_ACCEPTCONN, SO_BROADCAST, SO_ERROR, ...
Socket option name constants for setsockopt() and getsockopt() at the
C<SOL_SOCKET> level.
=head2 IP_OPTIONS, IP_TOS, IP_TTL, ...
Socket option name constants for IPv4 socket options at the C<IPPROTO_IP>
level.
=head2 IP_PMTUDISC_WANT, IP_PMTUDISC_DONT, ...
Socket option value contants for C<IP_MTU_DISCOVER> socket option.
=head2 IPTOS_LOWDELAY, IPTOS_THROUGHPUT, IPTOS_RELIABILITY, ...
Socket option value constants for C<IP_TOS> socket option.
=head2 MSG_BCAST, MSG_OOB, MSG_TRUNC, ...
Message flag constants for send() and recv().
=head2 SHUT_RD, SHUT_RDWR, SHUT_WR
Direction constants for shutdown().
=head2 INADDR_ANY, INADDR_BROADCAST, INADDR_LOOPBACK, INADDR_NONE
Constants giving the special C<AF_INET> addresses for wildcard, broadcast,
local loopback, and invalid addresses.
Normally equivalent to inet_aton('0.0.0.0'), inet_aton('255.255.255.255'),
inet_aton('localhost') and inet_aton('255.255.255.255') respectively.
=head2 IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP, ...
IP protocol constants to use as the third argument to socket(), the level
argument to getsockopt() or setsockopt(), or the value of the C<SO_PROTOCOL>
socket option.
=head2 TCP_CORK, TCP_KEEPALIVE, TCP_NODELAY, ...
Socket option name constants for TCP socket options at the C<IPPROTO_TCP>
level.
=head2 IN6ADDR_ANY, IN6ADDR_LOOPBACK
Constants giving the special C<AF_INET6> addresses for wildcard and local
loopback.
Normally equivalent to inet_pton(AF_INET6, "::") and
inet_pton(AF_INET6, "::1") respectively.
=head2 IPV6_ADD_MEMBERSHIP, IPV6_MTU, IPV6_V6ONLY, ...
Socket option name constants for IPv6 socket options at the C<IPPROTO_IPV6>
level.
=cut
# Still undocumented: SCM_*, SOMAXCONN, IOV_MAX, UIO_MAXIOV
=head1 STRUCTURE MANIPULATORS
The following functions convert between lists of Perl values and packed binary
strings representing structures.
=cut
=head2 $family = sockaddr_family $sockaddr
Takes a packed socket address (as returned by pack_sockaddr_in(),
pack_sockaddr_un() or the perl builtin functions getsockname() and
getpeername()). Returns the address family tag. This will be one of the
C<AF_*> constants, such as C<AF_INET> for a C<sockaddr_in> addresses or
C<AF_UNIX> for a C<sockaddr_un>. It can be used to figure out what unpack to
use for a sockaddr of unknown type.
=head2 $sockaddr = pack_sockaddr_in $port, $ip_address
Takes two arguments, a port number and an opaque string (as returned by
inet_aton(), or a v-string). Returns the C<sockaddr_in> structure with those
arguments packed in and C<AF_INET> filled in. For Internet domain sockets,
this structure is normally what you need for the arguments in bind(),
connect(), and send().
An undefined $port argument is taken as zero; an undefined $ip_address is
considered a fatal error.
=head2 ($port, $ip_address) = unpack_sockaddr_in $sockaddr
Takes a C<sockaddr_in> structure (as returned by pack_sockaddr_in(),
getpeername() or recv()). Returns a list of two elements: the port and an
opaque string representing the IP address (you can use inet_ntoa() to convert
the address to the four-dotted numeric format). Will croak if the structure
does not represent an C<AF_INET> address.
In scalar context will return just the IP address.
=head2 $sockaddr = sockaddr_in $port, $ip_address
=head2 ($port, $ip_address) = sockaddr_in $sockaddr
A wrapper of pack_sockaddr_in() or unpack_sockaddr_in(). In list context,
unpacks its argument and returns a list consisting of the port and IP address.
In scalar context, packs its port and IP address arguments as a C<sockaddr_in>
and returns it.
Provided largely for legacy compatibility; it is better to use
pack_sockaddr_in() or unpack_sockaddr_in() explicitly.
=head2 $sockaddr = pack_sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]
Takes two to four arguments, a port number, an opaque string (as returned by
inet_pton()), optionally a scope ID number, and optionally a flow label
number. Returns the C<sockaddr_in6> structure with those arguments packed in
and C<AF_INET6> filled in. IPv6 equivalent of pack_sockaddr_in().
An undefined $port argument is taken as zero; an undefined $ip6_address is
considered a fatal error.
=head2 ($port, $ip6_address, $scope_id, $flowinfo) = unpack_sockaddr_in6 $sockaddr
Takes a C<sockaddr_in6> structure. Returns a list of four elements: the port
number, an opaque string representing the IPv6 address, the scope ID, and the
flow label. (You can use inet_ntop() to convert the address to the usual
string format). Will croak if the structure does not represent an C<AF_INET6>
address.
In scalar context will return just the IP address.
=head2 $sockaddr = sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]
=head2 ($port, $ip6_address, $scope_id, $flowinfo) = sockaddr_in6 $sockaddr
A wrapper of pack_sockaddr_in6() or unpack_sockaddr_in6(). In list context,
unpacks its argument according to unpack_sockaddr_in6(). In scalar context,
packs its arguments according to pack_sockaddr_in6().
Provided largely for legacy compatibility; it is better to use
pack_sockaddr_in6() or unpack_sockaddr_in6() explicitly.
=head2 $sockaddr = pack_sockaddr_un $path
Takes one argument, a pathname. Returns the C<sockaddr_un> structure with that
path packed in with C<AF_UNIX> filled in. For C<PF_UNIX> sockets, this
structure is normally what you need for the arguments in bind(), connect(),
and send().
=head2 ($path) = unpack_sockaddr_un $sockaddr
Takes a C<sockaddr_un> structure (as returned by pack_sockaddr_un(),
getpeername() or recv()). Returns a list of one element: the pathname. Will
croak if the structure does not represent an C<AF_UNIX> address.
=head2 $sockaddr = sockaddr_un $path
=head2 ($path) = sockaddr_un $sockaddr
A wrapper of pack_sockaddr_un() or unpack_sockaddr_un(). In a list context,
unpacks its argument and returns a list consisting of the pathname. In a
scalar context, packs its pathname as a C<sockaddr_un> and returns it.
Provided largely for legacy compatibility; it is better to use
pack_sockaddr_un() or unpack_sockaddr_un() explicitly.
These are only supported if your system has E<lt>F<sys/un.h>E<gt>.
=head2 $ip_mreq = pack_ip_mreq $multiaddr, $interface
Takes an IPv4 multicast address and optionally an interface address (or
C<INADDR_ANY>). Returns the C<ip_mreq> structure with those arguments packed
in. Suitable for use with the C<IP_ADD_MEMBERSHIP> and C<IP_DROP_MEMBERSHIP>
sockopts.
=head2 ($multiaddr, $interface) = unpack_ip_mreq $ip_mreq
Takes an C<ip_mreq> structure. Returns a list of two elements; the IPv4
multicast address and interface address.
=head2 $ip_mreq_source = pack_ip_mreq_source $multiaddr, $source, $interface
Takes an IPv4 multicast address, source address, and optionally an interface
address (or C<INADDR_ANY>). Returns the C<ip_mreq_source> structure with those
arguments packed in. Suitable for use with the C<IP_ADD_SOURCE_MEMBERSHIP>
and C<IP_DROP_SOURCE_MEMBERSHIP> sockopts.
=head2 ($multiaddr, $source, $interface) = unpack_ip_mreq_source $ip_mreq
Takes an C<ip_mreq_source> structure. Returns a list of three elements; the
IPv4 multicast address, source address and interface address.
=head2 $ipv6_mreq = pack_ipv6_mreq $multiaddr6, $ifindex
Takes an IPv6 multicast address and an interface number. Returns the
C<ipv6_mreq> structure with those arguments packed in. Suitable for use with
the C<IPV6_ADD_MEMBERSHIP> and C<IPV6_DROP_MEMBERSHIP> sockopts.
=head2 ($multiaddr6, $ifindex) = unpack_ipv6_mreq $ipv6_mreq
Takes an C<ipv6_mreq> structure. Returns a list of two elements; the IPv6
address and an interface number.
=cut
=head1 FUNCTIONS
=cut
=head2 $ip_address = inet_aton $string
Takes a string giving the name of a host, or a textual representation of an IP
address and translates that to an packed binary address structure suitable to
pass to pack_sockaddr_in(). If passed a hostname that cannot be resolved,
returns C<undef>. For multi-homed hosts (hosts with more than one address),
the first address found is returned.
For portability do not assume that the result of inet_aton() is 32 bits wide,
in other words, that it would contain only the IPv4 address in network order.
This IPv4-only function is provided largely for legacy reasons. Newly-written
code should use getaddrinfo() or inet_pton() instead for IPv6 support.
=head2 $string = inet_ntoa $ip_address
Takes a packed binary address structure such as returned by
unpack_sockaddr_in() (or a v-string representing the four octets of the IPv4
address in network order) and translates it into a string of the form
C<d.d.d.d> where the C<d>s are numbers less than 256 (the normal
human-readable four dotted number notation for Internet addresses).
This IPv4-only function is provided largely for legacy reasons. Newly-written
code should use getnameinfo() or inet_ntop() instead for IPv6 support.
=head2 $address = inet_pton $family, $string
Takes an address family (such as C<AF_INET> or C<AF_INET6>) and a string
containing a textual representation of an address in that family and
translates that to an packed binary address structure.
See also getaddrinfo() for a more powerful and flexible function to look up
socket addresses given hostnames or textual addresses.
=head2 $string = inet_ntop $family, $address
Takes an address family and a packed binary address structure and translates
it into a human-readable textual representation of the address; typically in
C<d.d.d.d> form for C<AF_INET> or C<hhhh:hhhh::hhhh> form for C<AF_INET6>.
See also getnameinfo() for a more powerful and flexible function to turn
socket addresses into human-readable textual representations.
=head2 ($err, @result) = getaddrinfo $host, $service, [$hints]
Given both a hostname and service name, this function attempts to resolve the
host name into a list of network addresses, and the service name into a
protocol and port number, and then returns a list of address structures
suitable to connect() to it.
Given just a host name, this function attempts to resolve it to a list of
network addresses, and then returns a list of address structures giving these
addresses.
Given just a service name, this function attempts to resolve it to a protocol
and port number, and then returns a list of address structures that represent
it suitable to bind() to. This use should be combined with the C<AI_PASSIVE>
flag; see below.
Given neither name, it generates an error.
If present, $hints should be a reference to a hash, where the following keys
are recognised:
=over 4
=item flags => INT
A bitfield containing C<AI_*> constants; see below.
=item family => INT
Restrict to only generating addresses in this address family
=item socktype => INT
Restrict to only generating addresses of this socket type
=item protocol => INT
Restrict to only generating addresses for this protocol
=back
The return value will be a list; the first value being an error indication,
followed by a list of address structures (if no error occurred).
The error value will be a dualvar; comparable to the C<EAI_*> error constants,
or printable as a human-readable error message string. If no error occurred it
will be zero numerically and an empty string.
Each value in the results list will be a hash reference containing the following
fields:
=over 4
=item family => INT
The address family (e.g. C<AF_INET>)
=item socktype => INT
The socket type (e.g. C<SOCK_STREAM>)
=item protocol => INT
The protocol (e.g. C<IPPROTO_TCP>)
=item addr => STRING
The address in a packed string (such as would be returned by
pack_sockaddr_in())
=item canonname => STRING
The canonical name for the host if the C<AI_CANONNAME> flag was provided, or
C<undef> otherwise. This field will only be present on the first returned
address.
=back
The following flag constants are recognised in the $hints hash. Other flag
constants may exist as provided by the OS.
=over 4
=item AI_PASSIVE
Indicates that this resolution is for a local bind() for a passive (i.e.
listening) socket, rather than an active (i.e. connecting) socket.
=item AI_CANONNAME
Indicates that the caller wishes the canonical hostname (C<canonname>) field
of the result to be filled in.
=item AI_NUMERICHOST
Indicates that the caller will pass a numeric address, rather than a hostname,
and that getaddrinfo() must not perform a resolve operation on this name. This
flag will prevent a possibly-slow network lookup operation, and instead return
an error if a hostname is passed.
=back
=head2 ($err, $hostname, $servicename) = getnameinfo $sockaddr, [$flags, [$xflags]]
Given a packed socket address (such as from getsockname(), getpeername(), or
returned by getaddrinfo() in a C<addr> field), returns the hostname and
symbolic service name it represents. $flags may be a bitmask of C<NI_*>
constants, or defaults to 0 if unspecified.
The return value will be a list; the first value being an error condition,
followed by the hostname and service name.
The error value will be a dualvar; comparable to the C<EAI_*> error constants,
or printable as a human-readable error message string. The host and service
names will be plain strings.
The following flag constants are recognised as $flags. Other flag constants may
exist as provided by the OS.
=over 4
=item NI_NUMERICHOST
Requests that a human-readable string representation of the numeric address be
returned directly, rather than performing a name resolve operation that may
convert it into a hostname. This will also avoid potentially-blocking network
IO.
=item NI_NUMERICSERV
Requests that the port number be returned directly as a number representation
rather than performing a name resolve operation that may convert it into a
service name.
=item NI_NAMEREQD
If a name resolve operation fails to provide a name, then this flag will cause
getnameinfo() to indicate an error, rather than returning the numeric
representation as a human-readable string.
=item NI_DGRAM
Indicates that the socket address relates to a C<SOCK_DGRAM> socket, for the
services whose name differs between TCP and UDP protocols.
=back
The following constants may be supplied as $xflags.
=over 4
=item NIx_NOHOST
Indicates that the caller is not interested in the hostname of the result, so
it does not have to be converted. C<undef> will be returned as the hostname.
=item NIx_NOSERV
Indicates that the caller is not interested in the service name of the result,
so it does not have to be converted. C<undef> will be returned as the service
name.
=back
=head1 getaddrinfo() / getnameinfo() ERROR CONSTANTS
The following constants may be returned by getaddrinfo() or getnameinfo().
Others may be provided by the OS.
=over 4
=item EAI_AGAIN
A temporary failure occurred during name resolution. The operation may be
successful if it is retried later.
=item EAI_BADFLAGS
The value of the C<flags> hint to getaddrinfo(), or the $flags parameter to
getnameinfo() contains unrecognised flags.
=item EAI_FAMILY
The C<family> hint to getaddrinfo(), or the family of the socket address
passed to getnameinfo() is not supported.
=item EAI_NODATA
The host name supplied to getaddrinfo() did not provide any usable address
data.
=item EAI_NONAME
The host name supplied to getaddrinfo() does not exist, or the address
supplied to getnameinfo() is not associated with a host name and the
C<NI_NAMEREQD> flag was supplied.
=item EAI_SERVICE
The service name supplied to getaddrinfo() is not available for the socket
type given in the $hints.
=back
=cut
=head1 EXAMPLES
=head2 Lookup for connect()
The getaddrinfo() function converts a hostname and a service name into a list
of structures, each containing a potential way to connect() to the named
service on the named host.
use IO::Socket;
use Socket qw(SOCK_STREAM getaddrinfo);
my %hints = (socktype => SOCK_STREAM);
my ($err, @res) = getaddrinfo("localhost", "echo", \%hints);
die "Cannot getaddrinfo - $err" if $err;
my $sock;
foreach my $ai (@res) {
my $candidate = IO::Socket->new();
$candidate->socket($ai->{family}, $ai->{socktype}, $ai->{protocol})
or next;
$candidate->connect($ai->{addr})
or next;
$sock = $candidate;
last;
}
die "Cannot connect to localhost:echo" unless $sock;
$sock->print("Hello, world!\n");
print <$sock>;
Because a list of potential candidates is returned, the C<while> loop tries
each in turn until it finds one that succeeds both the socket() and connect()
calls.
This function performs the work of the legacy functions gethostbyname(),
getservbyname(), inet_aton() and pack_sockaddr_in().
In practice this logic is better performed by L<IO::Socket::IP>.
=head2 Making a human-readable string out of an address
The getnameinfo() function converts a socket address, such as returned by
getsockname() or getpeername(), into a pair of human-readable strings
representing the address and service name.
use IO::Socket::IP;
use Socket qw(getnameinfo);
my $server = IO::Socket::IP->new(LocalPort => 12345, Listen => 1) or
die "Cannot listen - $@";
my $socket = $server->accept or die "accept: $!";
my ($err, $hostname, $servicename) = getnameinfo($socket->peername);
die "Cannot getnameinfo - $err" if $err;
print "The peer is connected from $hostname\n";
Since in this example only the hostname was used, the redundant conversion of
the port number into a service name may be omitted by passing the
C<NIx_NOSERV> flag.
use Socket qw(getnameinfo NIx_NOSERV);
my ($err, $hostname) = getnameinfo($socket->peername, 0, NIx_NOSERV);
This function performs the work of the legacy functions unpack_sockaddr_in(),
inet_ntoa(), gethostbyaddr() and getservbyport().
In practice this logic is better performed by L<IO::Socket::IP>.
=head2 Resolving hostnames into IP addresses
To turn a hostname into a human-readable plain IP address use getaddrinfo()
to turn the hostname into a list of socket structures, then getnameinfo() on
each one to make it a readable IP address again.
use Socket qw(:addrinfo SOCK_RAW);
my ($err, @res) = getaddrinfo($hostname, "", {socktype => SOCK_RAW});
die "Cannot getaddrinfo - $err" if $err;
while( my $ai = shift @res ) {
my ($err, $ipaddr) = getnameinfo($ai->{addr}, NI_NUMERICHOST, NIx_NOSERV);
die "Cannot getnameinfo - $err" if $err;
print "$ipaddr\n";
}
The C<socktype> hint to getaddrinfo() filters the results to only include one
socket type and protocol. Without this most OSes return three combinations,
for C<SOCK_STREAM>, C<SOCK_DGRAM> and C<SOCK_RAW>, resulting in triplicate
output of addresses. The C<NI_NUMERICHOST> flag to getnameinfo() causes it to
return a string-formatted plain IP address, rather than reverse resolving it
back into a hostname.
This combination performs the work of the legacy functions gethostbyname()
and inet_ntoa().
=head2 Accessing socket options
The many C<SO_*> and other constants provide the socket option names for
getsockopt() and setsockopt().
use IO::Socket::INET;
use Socket qw(SOL_SOCKET SO_RCVBUF IPPROTO_IP IP_TTL);
my $socket = IO::Socket::INET->new(LocalPort => 0, Proto => 'udp')
or die "Cannot create socket: $@";
$socket->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or
die "setsockopt: $!";
print "Receive buffer is ", $socket->getsockopt(SOL_SOCKET, SO_RCVBUF),
" bytes\n";
print "IP TTL is ", $socket->getsockopt(IPPROTO_IP, IP_TTL), "\n";
As a convenience, L<IO::Socket>'s setsockopt() method will convert a number
into a packed byte buffer, and getsockopt() will unpack a byte buffer of the
correct size back into a number.
=cut
=head1 AUTHOR
This module was originally maintained in Perl core by the Perl 5 Porters.
It was extracted to dual-life on CPAN at version 1.95 by
Paul Evans <leonerd@leonerd.org.uk>
=cut
use Carp;
use warnings::register;
require Exporter;
require XSLoader;
our @ISA = qw(Exporter);
# <@Nicholas> you can't change @EXPORT without breaking the implicit API
# Please put any new constants in @EXPORT_OK!
# List re-ordered to match documentation above. Try to keep the ordering
# consistent so it's easier to see which ones are or aren't documented.
our @EXPORT = qw(
PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT
PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6
PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI
PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN
PF_X25
AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT
AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6
AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI
AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN
AF_X25
SOCK_DGRAM SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM
SOL_SOCKET
SO_ACCEPTCONN SO_ATTACH_FILTER SO_BACKLOG SO_BROADCAST SO_CHAMELEON
SO_DEBUG SO_DETACH_FILTER SO_DGRAM_ERRIND SO_DOMAIN SO_DONTLINGER
SO_DONTROUTE SO_ERROR SO_FAMILY SO_KEEPALIVE SO_LINGER SO_OOBINLINE
SO_PASSCRED SO_PASSIFNAME SO_PEERCRED SO_PROTOCOL SO_PROTOTYPE
SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT
SO_SECURITY_AUTHENTICATION SO_SECURITY_ENCRYPTION_NETWORK
SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO
SO_STATE SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE
IP_HDRINCL IP_OPTIONS IP_RECVOPTS IP_RECVRETOPTS IP_RETOPTS IP_TOS
IP_TTL
MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_CTRUNC MSG_DONTROUTE
MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FASTOPEN MSG_FIN
MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_PROXY MSG_RST
MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
SHUT_RD SHUT_RDWR SHUT_WR
INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_RIGHTS SCM_TIMESTAMP
SOMAXCONN
IOV_MAX
UIO_MAXIOV
sockaddr_family
pack_sockaddr_in unpack_sockaddr_in sockaddr_in
pack_sockaddr_in6 unpack_sockaddr_in6 sockaddr_in6
pack_sockaddr_un unpack_sockaddr_un sockaddr_un
inet_aton inet_ntoa
);
# List re-ordered to match documentation above. Try to keep the ordering
# consistent so it's easier to see which ones are or aren't documented.
our @EXPORT_OK = qw(
CR LF CRLF $CR $LF $CRLF
SOCK_NONBLOCK SOCK_CLOEXEC
IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP IP_BIND_ADDRESS_NO_PORT
IP_DROP_MEMBERSHIP IP_DROP_SOURCE_MEMBERSHIP IP_FREEBIND
IP_MULTICAST_ALL IP_MULTICAST_IF IP_MULTICAST_LOOP IP_MULTICAST_TTL
IP_MTU IP_MTU_DISCOVER IP_NODEFRAG IP_RECVERR IP_TRANSPARENT
IPPROTO_IP IPPROTO_IPV6 IPPROTO_RAW IPPROTO_ICMP IPPROTO_IGMP
IPPROTO_TCP IPPROTO_UDP IPPROTO_GRE IPPROTO_ESP IPPROTO_AH
IPPROTO_ICMPV6 IPPROTO_SCTP
IP_PMTUDISC_DO IP_PMTUDISC_DONT IP_PMTUDISC_PROBE IP_PMTUDISC_WANT
IPTOS_LOWDELAY IPTOS_THROUGHPUT IPTOS_RELIABILITY IPTOS_MINCOST
TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT
TCP_FASTOPEN TCP_INFO TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT
TCP_KEEPIDLE TCP_KEEPINTVL TCP_LINGER2 TCP_MAXRT TCP_MAXSEG
TCP_MD5SIG TCP_NODELAY TCP_NOOPT TCP_NOPUSH TCP_QUICKACK
TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_USER_TIMEOUT
TCP_WINDOW_CLAMP
IN6ADDR_ANY IN6ADDR_LOOPBACK
IPV6_ADDRFROM IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP IPV6_JOIN_GROUP
IPV6_LEAVE_GROUP IPV6_MTU IPV6_MTU_DISCOVER IPV6_MULTICAST_HOPS
IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_RECVERR IPV6_ROUTER_ALERT
IPV6_UNICAST_HOPS IPV6_V6ONLY
SO_LOCK_FILTER SO_RCVBUFFORCE SO_SNDBUFFORCE
pack_ip_mreq unpack_ip_mreq pack_ip_mreq_source unpack_ip_mreq_source
pack_ipv6_mreq unpack_ipv6_mreq
inet_pton inet_ntop
getaddrinfo getnameinfo
AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN
AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST
AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED
NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES
NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV
NIx_NOHOST NIx_NOSERV
EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY
EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM
);
our %EXPORT_TAGS = (
crlf => [qw(CR LF CRLF $CR $LF $CRLF)],
addrinfo => [qw(getaddrinfo getnameinfo), grep m/^(?:AI|NI|NIx|EAI)_/, @EXPORT_OK],
all => [@EXPORT, @EXPORT_OK],
);
BEGIN {
sub CR () {"\015"}
sub LF () {"\012"}
sub CRLF () {"\015\012"}
# These are not gni() constants; they're extensions for the perl API
# The definitions in Socket.pm and Socket.xs must match
sub NIx_NOHOST() {1 << 0}
sub NIx_NOSERV() {1 << 1}
}
*CR = \CR();
*LF = \LF();
*CRLF = \CRLF();
sub sockaddr_in {
if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die
my($af, $port, @quad) = @_;
warnings::warn "6-ARG sockaddr_in call is deprecated"
if warnings::enabled();
pack_sockaddr_in($port, inet_aton(join('.', @quad)));
} elsif (wantarray) {
croak "usage: (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1;
unpack_sockaddr_in(@_);
} else {
croak "usage: sin_sv = sockaddr_in(port,iaddr))" unless @_ == 2;
pack_sockaddr_in(@_);
}
}
sub sockaddr_in6 {
if (wantarray) {
croak "usage: (port,in6addr,scope_id,flowinfo) = sockaddr_in6(sin6_sv)" unless @_ == 1;
unpack_sockaddr_in6(@_);
}
else {
croak "usage: sin6_sv = sockaddr_in6(port,in6addr,[scope_id,[flowinfo]])" unless @_ >= 2 and @_ <= 4;
pack_sockaddr_in6(@_);
}
}
sub sockaddr_un {
if (wantarray) {
croak "usage: (filename) = sockaddr_un(sun_sv)" unless @_ == 1;
unpack_sockaddr_un(@_);
} else {
croak "usage: sun_sv = sockaddr_un(filename)" unless @_ == 1;
pack_sockaddr_un(@_);
}
}
XSLoader::load(__PACKAGE__, $VERSION);
my %errstr;
if( defined &getaddrinfo ) {
# These are not part of the API, nothing uses them, and deleting them
# reduces the size of %Socket:: by about 12K
delete $Socket::{fake_getaddrinfo};
delete $Socket::{fake_getnameinfo};
} else {
require Scalar::Util;
*getaddrinfo = \&fake_getaddrinfo;
*getnameinfo = \&fake_getnameinfo;
# These numbers borrowed from GNU libc's implementation, but since
# they're only used by our emulation, it doesn't matter if the real
# platform's values differ
my %constants = (
AI_PASSIVE => 1,
AI_CANONNAME => 2,
AI_NUMERICHOST => 4,
AI_V4MAPPED => 8,
AI_ALL => 16,
AI_ADDRCONFIG => 32,
# RFC 2553 doesn't define this but Linux does - lets be nice and
# provide it since we can
AI_NUMERICSERV => 1024,
EAI_BADFLAGS => -1,
EAI_NONAME => -2,
EAI_NODATA => -5,
EAI_FAMILY => -6,
EAI_SERVICE => -8,
NI_NUMERICHOST => 1,
NI_NUMERICSERV => 2,
NI_NOFQDN => 4,
NI_NAMEREQD => 8,
NI_DGRAM => 16,
# Constants we don't support. Export them, but croak if anyone tries to
# use them
AI_IDN => 64,
AI_CANONIDN => 128,
AI_IDN_ALLOW_UNASSIGNED => 256,
AI_IDN_USE_STD3_ASCII_RULES => 512,
NI_IDN => 32,
NI_IDN_ALLOW_UNASSIGNED => 64,
NI_IDN_USE_STD3_ASCII_RULES => 128,
# Error constants we'll never return, so it doesn't matter what value
# these have, nor that we don't provide strings for them
EAI_SYSTEM => -11,
EAI_BADHINTS => -1000,
EAI_PROTOCOL => -1001
);
foreach my $name ( keys %constants ) {
my $value = $constants{$name};
no strict 'refs';
defined &$name or *$name = sub () { $value };
}
%errstr = (
# These strings from RFC 2553
EAI_BADFLAGS() => "invalid value for ai_flags",
EAI_NONAME() => "nodename nor servname provided, or not known",
EAI_NODATA() => "no address associated with nodename",
EAI_FAMILY() => "ai_family not supported",
EAI_SERVICE() => "servname not supported for ai_socktype",
);
}
# The following functions are used if the system does not have a
# getaddrinfo(3) function in libc; and are used to emulate it for the AF_INET
# family
# Borrowed from Regexp::Common::net
my $REGEXP_IPv4_DECIMAL = qr/25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}/;
my $REGEXP_IPv4_DOTTEDQUAD = qr/$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL/;
sub fake_makeerr
{
my ( $errno ) = @_;
my $errstr = $errno == 0 ? "" : ( $errstr{$errno} || $errno );
return Scalar::Util::dualvar( $errno, $errstr );
}
sub fake_getaddrinfo
{
my ( $node, $service, $hints ) = @_;
$node = "" unless defined $node;
$service = "" unless defined $service;
my ( $family, $socktype, $protocol, $flags ) = @$hints{qw( family socktype protocol flags )};
$family ||= Socket::AF_INET(); # 0 == AF_UNSPEC, which we want too
$family == Socket::AF_INET() or return fake_makeerr( EAI_FAMILY() );
$socktype ||= 0;
$protocol ||= 0;
$flags ||= 0;
my $flag_passive = $flags & AI_PASSIVE(); $flags &= ~AI_PASSIVE();
my $flag_canonname = $flags & AI_CANONNAME(); $flags &= ~AI_CANONNAME();
my $flag_numerichost = $flags & AI_NUMERICHOST(); $flags &= ~AI_NUMERICHOST();
my $flag_numericserv = $flags & AI_NUMERICSERV(); $flags &= ~AI_NUMERICSERV();
# These constants don't apply to AF_INET-only lookups, so we might as well
# just ignore them. For AI_ADDRCONFIG we just presume the host has ability
# to talk AF_INET. If not we'd have to return no addresses at all. :)
$flags &= ~(AI_V4MAPPED()|AI_ALL()|AI_ADDRCONFIG());
$flags & (AI_IDN()|AI_CANONIDN()|AI_IDN_ALLOW_UNASSIGNED()|AI_IDN_USE_STD3_ASCII_RULES()) and
croak "Socket::getaddrinfo() does not support IDN";
$flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
$node eq "" and $service eq "" and return fake_makeerr( EAI_NONAME() );
my $canonname;
my @addrs;
if( $node ne "" ) {
return fake_makeerr( EAI_NONAME() ) if( $flag_numerichost and $node !~ m/^$REGEXP_IPv4_DOTTEDQUAD$/ );
( $canonname, undef, undef, undef, @addrs ) = gethostbyname( $node );
defined $canonname or return fake_makeerr( EAI_NONAME() );
undef $canonname unless $flag_canonname;
}
else {
$addrs[0] = $flag_passive ? Socket::inet_aton( "0.0.0.0" )
: Socket::inet_aton( "127.0.0.1" );
}
my @ports; # Actually ARRAYrefs of [ socktype, protocol, port ]
my $protname = "";
if( $protocol ) {
$protname = eval { getprotobynumber( $protocol ) };
}
if( $service ne "" and $service !~ m/^\d+$/ ) {
return fake_makeerr( EAI_NONAME() ) if( $flag_numericserv );
getservbyname( $service, $protname ) or return fake_makeerr( EAI_SERVICE() );
}
foreach my $this_socktype ( Socket::SOCK_STREAM(), Socket::SOCK_DGRAM(), Socket::SOCK_RAW() ) {
next if $socktype and $this_socktype != $socktype;
my $this_protname = "raw";
$this_socktype == Socket::SOCK_STREAM() and $this_protname = "tcp";
$this_socktype == Socket::SOCK_DGRAM() and $this_protname = "udp";
next if $protname and $this_protname ne $protname;
my $port;
if( $service ne "" ) {
if( $service =~ m/^\d+$/ ) {
$port = "$service";
}
else {
( undef, undef, $port, $this_protname ) = getservbyname( $service, $this_protname );
next unless defined $port;
}
}
else {
$port = 0;
}
push @ports, [ $this_socktype, eval { scalar getprotobyname( $this_protname ) } || 0, $port ];
}
my @ret;
foreach my $addr ( @addrs ) {
foreach my $portspec ( @ports ) {
my ( $socktype, $protocol, $port ) = @$portspec;
push @ret, {
family => $family,
socktype => $socktype,
protocol => $protocol,
addr => Socket::pack_sockaddr_in( $port, $addr ),
canonname => undef,
};
}
}
# Only supply canonname for the first result
if( defined $canonname ) {
$ret[0]->{canonname} = $canonname;
}
return ( fake_makeerr( 0 ), @ret );
}
sub fake_getnameinfo
{
my ( $addr, $flags, $xflags ) = @_;
my ( $port, $inetaddr );
eval { ( $port, $inetaddr ) = Socket::unpack_sockaddr_in( $addr ) }
or return fake_makeerr( EAI_FAMILY() );
my $family = Socket::AF_INET();
$flags ||= 0;
my $flag_numerichost = $flags & NI_NUMERICHOST(); $flags &= ~NI_NUMERICHOST();
my $flag_numericserv = $flags & NI_NUMERICSERV(); $flags &= ~NI_NUMERICSERV();
my $flag_nofqdn = $flags & NI_NOFQDN(); $flags &= ~NI_NOFQDN();
my $flag_namereqd = $flags & NI_NAMEREQD(); $flags &= ~NI_NAMEREQD();
my $flag_dgram = $flags & NI_DGRAM() ; $flags &= ~NI_DGRAM();
$flags & (NI_IDN()|NI_IDN_ALLOW_UNASSIGNED()|NI_IDN_USE_STD3_ASCII_RULES()) and
croak "Socket::getnameinfo() does not support IDN";
$flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
$xflags ||= 0;
my $node;
if( $xflags & NIx_NOHOST ) {
$node = undef;
}
elsif( $flag_numerichost ) {
$node = Socket::inet_ntoa( $inetaddr );
}
else {
$node = gethostbyaddr( $inetaddr, $family );
if( !defined $node ) {
return fake_makeerr( EAI_NONAME() ) if $flag_namereqd;
$node = Socket::inet_ntoa( $inetaddr );
}
elsif( $flag_nofqdn ) {
my ( $shortname ) = split m/\./, $node;
my ( $fqdn ) = gethostbyname $shortname;
$node = $shortname if defined $fqdn and $fqdn eq $node;
}
}
my $service;
if( $xflags & NIx_NOSERV ) {
$service = undef;
}
elsif( $flag_numericserv ) {
$service = "$port";
}
else {
my $protname = $flag_dgram ? "udp" : "";
$service = getservbyport( $port, $protname );
if( !defined $service ) {
$service = "$port";
}
}
return ( fake_makeerr( 0 ), $node, $service );
}
1;
version.pod 0000644 00000023150 15033552504 0006740 0 ustar 00 =head1 NAME
version - Perl extension for Version Objects
=head1 SYNOPSIS
# Parsing version strings (decimal or dotted-decimal)
use version 0.77; # get latest bug-fixes and API
$ver = version->parse($string)
# Declaring a dotted-decimal $VERSION (keep on one line!)
use version; our $VERSION = version->declare("v1.2.3"); # formal
use version; our $VERSION = qv("v1.2.3"); # deprecated
use version; our $VERSION = qv("v1.2_3"); # deprecated
# Declaring an old-style decimal $VERSION (use quotes!)
our $VERSION = "1.0203"; # recommended
use version; our $VERSION = version->parse("1.0203"); # formal
use version; our $VERSION = version->parse("1.02_03"); # alpha
# Comparing mixed version styles (decimals, dotted-decimals, objects)
if ( version->parse($v1) == version->parse($v2) ) {
# do stuff
}
# Sorting mixed version styles
@ordered = sort { version->parse($a) <=> version->parse($b) } @list;
=head1 DESCRIPTION
Version objects were added to Perl in 5.10. This module implements version
objects for older version of Perl and provides the version object API for all
versions of Perl. All previous releases before 0.74 are deprecated and should
not be used due to incompatible API changes. Version 0.77 introduces the new
'parse' and 'declare' methods to standardize usage. You are strongly urged to
set 0.77 as a minimum in your code, e.g.
use version 0.77; # even for Perl v.5.10.0
=head1 TYPES OF VERSION OBJECTS
There are two different types of version objects, corresponding to the two
different styles of versions in use:
=over 2
=item Decimal Versions
The classic floating-point number $VERSION. The advantage to this style is
that you don't need to do anything special, just type a number into your
source file. Quoting is recommended, as it ensures that trailing zeroes
("1.50") are preserved in any warnings or other output.
=item Dotted Decimal Versions
The more modern form of version assignment, with 3 (or potentially more)
integers separated by decimal points (e.g. v1.2.3). This is the form that
Perl itself has used since 5.6.0 was released. The leading 'v' is now
strongly recommended for clarity, and will throw a warning in a future
release if omitted. A leading 'v' character is required to pass the
L</is_strict()> test.
=back
=head1 DECLARING VERSIONS
If you have a module that uses a decimal $VERSION (floating point), and you
do not intend to ever change that, this module is not for you. There is
nothing that version.pm gains you over a simple $VERSION assignment:
our $VERSION = "1.02";
Since Perl v5.10.0 includes the version.pm comparison logic anyways,
you don't need to do anything at all.
=head2 How to convert a module from decimal to dotted-decimal
If you have used a decimal $VERSION in the past and wish to switch to a
dotted-decimal $VERSION, then you need to make a one-time conversion to
the new format.
B<Important Note>: you must ensure that your new $VERSION is numerically
greater than your current decimal $VERSION; this is not always obvious. First,
convert your old decimal version (e.g. 1.02) to a normalized dotted-decimal
form:
$ perl -Mversion -e 'print version->parse("1.02")->normal'
v1.20.0
Then increment any of the dotted-decimal components (v1.20.1 or v1.21.0).
=head2 How to C<declare()> a dotted-decimal version
use version; our $VERSION = version->declare("v1.2.3");
The C<declare()> method always creates dotted-decimal version objects. When
used in a module, you B<must> put it on the same line as "use version" to
ensure that $VERSION is read correctly by PAUSE and installer tools. You
should also add 'version' to the 'configure_requires' section of your
module metadata file. See instructions in L<ExtUtils::MakeMaker> or
L<Module::Build> for details.
B<Important Note>: Even if you pass in what looks like a decimal number
("1.2"), a dotted-decimal will be created ("v1.200.0"). To avoid confusion
or unintentional errors on older Perls, follow these guidelines:
=over 2
=item *
Always use a dotted-decimal with (at least) three components
=item *
Always use a leading-v
=item *
Always quote the version
=back
If you really insist on using version.pm with an ordinary decimal version,
use C<parse()> instead of declare. See the L<PARSING AND COMPARING VERSIONS>
for details.
See also L<version::Internals> for more on version number conversion,
quoting, calculated version numbers and declaring developer or "alpha" version
numbers.
=head1 PARSING AND COMPARING VERSIONS
If you need to compare version numbers, but can't be sure whether they are
expressed as numbers, strings, v-strings or version objects, then you should
use version.pm to parse them all into objects for comparison.
=head2 How to C<parse()> a version
The C<parse()> method takes in anything that might be a version and returns
a corresponding version object, doing any necessary conversion along the way.
=over 2
=item *
Dotted-decimal: bare v-strings (v1.2.3) and strings with more than one
decimal point and a leading 'v' ("v1.2.3"); NOTE you can technically use a
v-string or strings with a leading-v and only one decimal point (v1.2 or
"v1.2"), but you will confuse both yourself and others.
=item *
Decimal: regular decimal numbers (literal or in a string)
=back
Some examples:
$variable version->parse($variable)
--------- -------------------------
1.23 v1.230.0
"1.23" v1.230.0
v1.23 v1.23.0
"v1.23" v1.23.0
"1.2.3" v1.2.3
"v1.2.3" v1.2.3
See L<version::Internals> for more on version number conversion.
=head2 How to check for a legal version string
If you do not want to actually create a full blown version object, but
would still like to verify that a given string meets the criteria to
be parsed as a version, there are two helper functions that can be
employed directly:
=over 4
=item C<is_lax()>
The lax criteria corresponds to what is currently allowed by the
version parser. All of the following formats are acceptable
for dotted-decimal formats strings:
v1.2
1.2345.6
v1.23_4
1.2345
1.2345_01
=item C<is_strict()>
If you want to limit yourself to a much more narrow definition of what
a version string constitutes, C<is_strict()> is limited to version
strings like the following list:
v1.234.5
2.3456
=back
See L<version::Internals> for details of the regular expressions
that define the legal version string forms, as well as how to use
those regular expressions in your own code if C<is_lax()> and
C<is_strict()> are not sufficient for your needs.
=head2 How to compare version objects
Version objects overload the C<cmp> and C<< <=> >> operators. Perl
automatically generates all of the other comparison operators based on those
two so all the normal logical comparisons will work.
if ( version->parse($v1) == version->parse($v2) ) {
# do stuff
}
If a version object is compared against a non-version object, the non-object
term will be converted to a version object using C<parse()>. This may give
surprising results:
$v1 = version->parse("v0.95.0");
$bool = $v1 < 0.96; # FALSE since 0.96 is v0.960.0
Always comparing to a version object will help avoid surprises:
$bool = $v1 < version->parse("v0.96.0"); # TRUE
Note that "alpha" version objects (where the version string contains
a trailing underscore segment) compare as less than the equivalent
version without an underscore:
$bool = version->parse("1.23_45") < version->parse("1.2345"); # TRUE
See L<version::Internals> for more details on "alpha" versions.
=head1 OBJECT METHODS
=head2 is_alpha()
True if and only if the version object was created with a underscore, e.g.
version->parse('1.002_03')->is_alpha; # TRUE
version->declare('1.2.3_4')->is_alpha; # TRUE
=head2 is_qv()
True only if the version object is a dotted-decimal version, e.g.
version->parse('v1.2.0')->is_qv; # TRUE
version->declare('v1.2')->is_qv; # TRUE
qv('1.2')->is_qv; # TRUE
version->parse('1.2')->is_qv; # FALSE
=head2 normal()
Returns a string with a standard 'normalized' dotted-decimal form with a
leading-v and at least 3 components.
version->declare('v1.2')->normal; # v1.2.0
version->parse('1.2')->normal; # v1.200.0
=head2 numify()
Returns a value representing the object in a pure decimal.
version->declare('v1.2')->numify; # 1.002000
version->parse('1.2')->numify; # 1.200
=head2 stringify()
Returns a string that is as close to the original representation as possible.
If the original representation was a numeric literal, it will be returned the
way perl would normally represent it in a string. This method is used whenever
a version object is interpolated into a string.
version->declare('v1.2')->stringify; # v1.2
version->parse('1.200')->stringify; # 1.2
version->parse(1.02_30)->stringify; # 1.023
=head1 EXPORTED FUNCTIONS
=head2 qv()
This function is no longer recommended for use, but is maintained for
compatibility with existing code. If you do not want to have it exported
to your namespace, use this form:
use version 0.77 ();
=head2 is_lax()
(Not exported by default)
This function takes a scalar argument and returns a boolean value indicating
whether the argument meets the "lax" rules for a version number. Leading and
trailing spaces are not allowed.
=head2 is_strict()
(Not exported by default)
This function takes a scalar argument and returns a boolean value indicating
whether the argument meets the "strict" rules for a version number. Leading
and trailing spaces are not allowed.
=head1 AUTHOR
John Peacock E<lt>jpeacock@cpan.orgE<gt>
=head1 SEE ALSO
L<version::Internals>.
L<perl>.
=cut
Unicode/Collate/Locale/de_phone.pl 0000644 00000004653 15033552504 0013044 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00E4 ; [.1C47.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1C47.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1C47.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1C47.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1C47.0021.0002][.1CAA.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1C47.0021.0008][.1CAA.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00F6 ; [.1DDD.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1DDD.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1DDD.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1DDD.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1DDD.0021.0002][.1CAA.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1DDD.0021.0008][.1CAA.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00FC ; [.1EB5.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB5.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB5.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB5.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
ENTRY
};
Unicode/Collate/Locale/fi.pl 0000644 00000011235 15033552504 0011653 0 ustar 00 +{
locale_version => 1.25,
# in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ?
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE
01E5 ; [.1CF4.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE
01E4 ; [.1CF4.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE
014B ; [.1DB9.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG
014A ; [.1DB9.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG
0167 ; [.1E95.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE
0166 ; [.1E95.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE
0077 ; [.1EE3.0021.0002] # LATIN SMALL LETTER W
0057 ; [.1EE3.0021.0008] # LATIN CAPITAL LETTER W
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0292 ; [.1F21.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH
01B7 ; [.1F21.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH
01EF ; [.1F21.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON
01EE ; [.1F21.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON
00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F96.0020.0008] # ANGSTROM SIGN
01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
ENTRY
};
Unicode/Collate/Locale/uk.pl 0000644 00000001174 15033552504 0011675 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0491 ; [.2037.0020.0002] # CYRILLIC SMALL LETTER GHE WITH UPTURN
0490 ; [.2037.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
A647 ; [.2089.0020.0002] # CYRILLIC SMALL LETTER IOTA
A646 ; [.2089.0020.0008] # CYRILLIC CAPITAL LETTER IOTA
0457 ; [.208A.0020.0002] # CYRILLIC SMALL LETTER YI
0456 0308 ; [.208A.0020.0002] # CYRILLIC SMALL LETTER YI
0407 ; [.208A.0020.0008] # CYRILLIC CAPITAL LETTER YI
0406 0308 ; [.208A.0020.0008] # CYRILLIC CAPITAL LETTER YI
A676 ; [.208A.0020.0004] # COMBINING CYRILLIC LETTER YI
ENTRY
};
Unicode/Collate/Locale/ln.pl 0000644 00000000746 15033552504 0011673 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
025B ; [.1CAB.0020.0002] # LATIN SMALL LETTER OPEN E
0190 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER OPEN E
2107 ; [.1CAB.0020.000A] # EULER CONSTANT
1D4B ; [.1CAB.0020.0014] # MODIFIER LETTER SMALL OPEN E
0254 ; [.1DDD.0021.0002] # LATIN SMALL LETTER OPEN O
0186 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER OPEN O
1D53 ; [.1DDD.0021.0014] # MODIFIER LETTER SMALL OPEN O
ENTRY
};
Unicode/Collate/Locale/wae.pl 0000644 00000004522 15033552504 0012032 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0061 0061 ; [.1C47.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A>
00E4 00E4 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER A WITH DIAERESIS>
00E4 0061 0308 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER A, COMBINING DIAERESIS>
0061 0308 00E4 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A, COMBINING DIAERESIS, LATIN SMALL LETTER A WITH DIAERESIS>
0061 0308 0061 0308 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A, COMBINING DIAERESIS, LATIN SMALL LETTER A, COMBINING DIAERESIS>
0065 0065 ; [.1CAA.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER E, LATIN SMALL LETTER E>
0069 0069 ; [.1D32.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER I, LATIN SMALL LETTER I>
006F 006F ; [.1DDD.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER O, LATIN SMALL LETTER O>
00F6 00F6 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O WITH DIAERESIS, LATIN SMALL LETTER O WITH DIAERESIS>
00F6 006F 0308 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O WITH DIAERESIS, LATIN SMALL LETTER O, COMBINING DIAERESIS>
006F 0308 00F6 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O, COMBINING DIAERESIS, LATIN SMALL LETTER O WITH DIAERESIS>
006F 0308 006F 0308 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O, COMBINING DIAERESIS, LATIN SMALL LETTER O, COMBINING DIAERESIS>
0063 0068 ; [.1C7A.0020.0002][.0000.0028.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0073 0063 0068 ; [.1E71.0020.0002][.0000.0028.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0075 0075 ; [.1EB5.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER U, LATIN SMALL LETTER U>
00FC 00FC ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, LATIN SMALL LETTER U WITH DIAERESIS>
00FC 0075 0308 ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, LATIN SMALL LETTER U, COMBINING DIAERESIS>
0075 0308 00FC ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U, COMBINING DIAERESIS, LATIN SMALL LETTER U WITH DIAERESIS>
0075 0308 0075 0308 ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U, COMBINING DIAERESIS, LATIN SMALL LETTER U, COMBINING DIAERESIS>
ENTRY
};
Unicode/Collate/Locale/zh_zhu.pl 0000644 00000314540 15033552504 0012571 0 ustar 00 use Unicode::Collate::CJK::Zhuyin;
+{
locale_version => 1.25,
overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin,
entry => <<'ENTRY', # for DUCET v9.0.0
02C9 ; [.0000.0199.0002] # MODIFIER LETTER MACRON
02CA ; [.019A.0020.0002] # MODIFIER LETTER ACUTE ACCENT
02C7 ; [.019B.0020.0002] # CARON
02CB ; [.019C.0020.0002] # MODIFIER LETTER GRAVE ACCENT
02D9 ; [.019D.0020.0002] # DOT ABOVE
02EA ; [.019E.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK
02EB ; [.019F.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK
0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON>
004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON>
1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON>
004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON>
006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT>
006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK>
004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT>
004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK>
006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON>
004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON>
0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON>
00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON>
01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON>
00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON>
01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
FDD0 3105 ; [.8000.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER B>
2E8A ; [.80B5.0020.0002] # CJK RADICAL DIVINATION
FDD0 3106 ; [.83B1.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER P>
FDD0 3107 ; [.8626.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER M>
FDD0 3108 ; [.897F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER F>
2ECF ; [.8BC0.0020.0002] # CJK RADICAL CITY
2ED6 ; [.8BC1.0020.0002] # CJK RADICAL MOUND TWO
FDD0 3109 ; [.8C0D.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER D>
2E88 ; [.8C86.0020.0002] # CJK RADICAL KNIFE ONE
FDD0 310A ; [.901F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER T>
FDD0 310B ; [.93D9.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER N>
2EA7 ; [.9525.0020.0002] # CJK RADICAL COW
FDD0 310C ; [.95D9.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER L>
3007 ; [.9A41.0020.0002] # IDEOGRAPHIC NUMBER ZERO
FDD0 310D ; [.9C5F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER G>
2EE3 ; [.9E0A.0020.0002] # CJK RADICAL BONE
FDD0 310E ; [.9FD2.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER K>
FDD0 310F ; [.A223.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER H>
FDD0 3110 ; [.A697.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER J>
2E95 ; [.A762.0020.0002] # CJK RADICAL SNOUT TWO
2E86 ; [.AD18.0020.0002] # CJK RADICAL BOX
FDD0 3111 ; [.AD38.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER Q>
FDD0 3112 ; [.B164.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER X>
2E8C ; [.B383.0020.0002] # CJK RADICAL SMALL ONE
2E8D ; [.B384.0020.0002] # CJK RADICAL SMALL TWO
FDD0 3113 ; [.B6E9.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ZH>
2EA5 ; [.B8AC.0020.0002] # CJK RADICAL PAW TWO
FDD0 3114 ; [.BBAC.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER CH>
2ECC ; [.BE9D.0020.0002] # CJK RADICAL SIMPLIFIED WALK
2ECD ; [.BE9E.0020.0002] # CJK RADICAL WALK ONE
FDD0 3115 ; [.BF5A.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER SH>
2EAC ; [.BFBC.0020.0002] # CJK RADICAL SPIRIT ONE
2EAE ; [.BFC1.0020.0002] # CJK RADICAL BAMBOO
FDD0 3116 ; [.C2A2.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER R>
2E9C ; [.C2A3.0020.0002] # CJK RADICAL SUN
2EBC ; [.C2D3.0020.0002] # CJK RADICAL MEAT
2EB6 ; [.C311.0020.0002] # CJK RADICAL SHEEP
FDD0 3117 ; [.C402.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER Z>
FDD0 3118 ; [.C630.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER C>
2EBE ; [.C6CA.0020.0002] # CJK RADICAL GRASS ONE
FDD0 3119 ; [.C7F6.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER S>
FDD0 311A ; [.CA13.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER A>
FDD0 311B ; [.CA19.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER O>
FDD0 311C ; [.CA1E.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER E>
FDD0 311E ; [.CAA0.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER AI>
FDD0 311F ; [.CAE8.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER EI>
FDD0 3120 ; [.CAEB.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER AU>
FDD0 3121 ; [.CB2E.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER OU>
FDD0 3122 ; [.CB51.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER AN>
FDD0 3123 ; [.CB8B.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER EN>
FDD0 3124 ; [.CB94.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ANG>
FDD0 3125 ; [.CBA0.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ENG>
FDD0 3126 ; [.CBA2.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ER>
FDD0 3127 ; [.CBDB.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER I>
2E84 ; [.CDB5.0020.0002] # CJK RADICAL SECOND THREE
2E80 ; [.CEDF.0020.0002] # CJK RADICAL REPEAT
FDD0 3128 ; [.D16F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER U>
FDD0 3129 ; [.D403.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER IU>
2ED7 ; [.D47E.0020.0002] # CJK RADICAL RAIN
2E9D ; [.D53B.0020.0002] # CJK RADICAL MOON
3220 ; [*0317.0020.0004][.CBDC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE
3226 ; [*0317.0020.0004][.AD39.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN
3222 ; [*0317.0020.0004][.C8DF.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE
3228 ; [*0317.0020.0004][.A95D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE
3221 ; [*0317.0020.0004][.CBCD.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO
3224 ; [*0317.0020.0004][.D1A9.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE
3239 ; [*0317.0020.0004][.8C57.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT
323D ; [*0317.0020.0004][.ADC1.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE
3241 ; [*0317.0020.0004][.B3A8.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST
3227 ; [*0317.0020.0004][.8001.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT
3225 ; [*0317.0020.0004][.9953.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX
3238 ; [*0317.0020.0004][.969E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR
3229 ; [*0317.0020.0004][.BF85.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN
323F ; [*0317.0020.0004][.B2BC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE
3234 ; [*0317.0020.0004][.892A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME
323A ; [*0317.0020.0004][.A3B5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL
3223 ; [*0317.0020.0004][.C82E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR
322F ; [*0317.0020.0004][.92EA.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH
323B ; [*0317.0020.0004][.B5F0.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY
3230 ; [*0317.0020.0004][.C2A4.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN
322A ; [*0317.0020.0004][.D53C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON
3232 ; [*0317.0020.0004][.CEC7.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE
322D ; [*0317.0020.0004][.895F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD
3231 ; [*0317.0020.0004][.BA36.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK
322C ; [*0317.0020.0004][.C26E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER
322B ; [*0317.0020.0004][.A48C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE
3235 ; [*0317.0020.0004][.9060.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL
323C ; [*0317.0020.0004][.A9B3.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE
3233 ; [*0317.0020.0004][.C05E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY
3237 ; [*0317.0020.0004][.BA90.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION
3240 ; [*0317.0020.0004][.A78C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL
3242 ; [*0317.0020.0004][.C457.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF
3243 ; [*0317.0020.0004][.B766.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH
3236 ; [*0317.0020.0004][.C69F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL
323E ; [*0317.0020.0004][.C421.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE
322E ; [*0317.0020.0004][.AA72.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL
3358 ; [.1C3D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
336A ; [.1C3E.0020.0004][.1C45.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
336B ; [.1C3E.0020.0004][.1C46.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
33E0 ; [.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
32C0 ; [.1C3E.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
3359 ; [.1C3E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
336F ; [.1C3F.0020.0004][.1C40.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
33E1 ; [.1C3F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
32C1 ; [.1C3F.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
335A ; [.1C3F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
33E2 ; [.1C40.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
32C2 ; [.1C40.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
335B ; [.1C40.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
33E3 ; [.1C41.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
32C3 ; [.1C41.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
335C ; [.1C41.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
33E4 ; [.1C42.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
32C4 ; [.1C42.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
335D ; [.1C42.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
33E5 ; [.1C43.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
32C5 ; [.1C43.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
335E ; [.1C43.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
33E6 ; [.1C44.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
32C6 ; [.1C44.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
335F ; [.1C44.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
33E7 ; [.1C45.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
32C7 ; [.1C45.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
3360 ; [.1C45.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
33E8 ; [.1C46.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
32C8 ; [.1C46.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
3361 ; [.1C46.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
1F241 ; [*0379.0020.0004][.C8DF.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
1F242 ; [*0379.0020.0004][.CBCD.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
1F247 ; [*0379.0020.0004][.C1CC.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
1F243 ; [*0379.0020.0004][.CB52.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
1F245 ; [*0379.0020.0004][.8C38.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
1F248 ; [*0379.0020.0004][.80CD.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F240 ; [*0379.0020.0004][.819A.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
1F244 ; [*0379.0020.0004][.8E99.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
1F246 ; [*0379.0020.0004][.8CA9.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
2F00 ; [.CBDC.0020.0004] # KANGXI RADICAL ONE
3192 ; [.CBDC.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK
3280 ; [.CBDC.0020.0006] # CIRCLED IDEOGRAPH ONE
1F229 ; [.CBDC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E00
319C ; [.8EC1.0020.0014] # IDEOGRAPHIC ANNOTATION FOURTH MARK
3286 ; [.AD39.0020.0006] # CIRCLED IDEOGRAPH SEVEN
3194 ; [.C8DF.0020.0014] # IDEOGRAPHIC ANNOTATION THREE MARK
3282 ; [.C8DF.0020.0006] # CIRCLED IDEOGRAPH THREE
1F22A ; [.C8DF.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E09
3196 ; [.C19C.0020.0014] # IDEOGRAPHIC ANNOTATION TOP MARK
32A4 ; [.C19C.0020.0006] # CIRCLED IDEOGRAPH HIGH
3198 ; [.B2A0.0020.0014] # IDEOGRAPHIC ANNOTATION BOTTOM MARK
32A6 ; [.B2A0.0020.0006] # CIRCLED IDEOGRAPH LOW
319B ; [.8355.0020.0014] # IDEOGRAPHIC ANNOTATION THIRD MARK
2F01 ; [.9F64.0020.0004] # KANGXI RADICAL LINE
3197 ; [.BB6D.0020.0014] # IDEOGRAPHIC ANNOTATION MIDDLE MARK
32A5 ; [.BB6D.0020.0006] # CIRCLED IDEOGRAPH CENTRE
1F22D ; [.BB6D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D
2F02 ; [.BA6A.0020.0004] # KANGXI RADICAL DOT
2F03 ; [.8558.0020.0004] # KANGXI RADICAL SLASH
2F04 ; [.CC59.0020.0004] # KANGXI RADICAL SECOND
319A ; [.CC59.0020.0014] # IDEOGRAPHIC ANNOTATION SECOND MARK
3288 ; [.A95D.0020.0006] # CIRCLED IDEOGRAPH NINE
2F05 ; [.AC3C.0020.0004] # KANGXI RADICAL HOOK
2F06 ; [.CBCD.0020.0004] # KANGXI RADICAL TWO
3193 ; [.CBCD.0020.0014] # IDEOGRAPHIC ANNOTATION TWO MARK
3281 ; [.CBCD.0020.0006] # CIRCLED IDEOGRAPH TWO
1F214 ; [.CBCD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C
3284 ; [.D1A9.0020.0006] # CIRCLED IDEOGRAPH FIVE
2F07 ; [.90D4.0020.0004] # KANGXI RADICAL LID
1F218 ; [.A8BE.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4
2F08 ; [.C2EF.0020.0004] # KANGXI RADICAL MAN
319F ; [.C2EF.0020.0014] # IDEOGRAPHIC ANNOTATION MAN MARK
32AD ; [.ADC1.0020.0006] # CIRCLED IDEOGRAPH ENTERPRISE
32A1 ; [.B3A8.0020.0006] # CIRCLED IDEOGRAPH REST
329D ; [.CE97.0020.0006] # CIRCLED IDEOGRAPH EXCELLENT
2F09 ; [.CBA3.0020.0004] # KANGXI RADICAL LEGS
2F0A ; [.C376.0020.0004] # KANGXI RADICAL ENTER
2F0B ; [.8001.0020.0004] # KANGXI RADICAL EIGHT
3287 ; [.8001.0020.0006] # CIRCLED IDEOGRAPH EIGHT
3285 ; [.9953.0020.0006] # CIRCLED IDEOGRAPH SIX
2F0C ; [.AD19.0020.0004] # KANGXI RADICAL DOWN BOX
1F21E ; [.C4C2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-518D
2F0D ; [.8867.0020.0004] # KANGXI RADICAL COVER
32A2 ; [.B2E9.0020.0006] # CIRCLED IDEOGRAPH COPY
2F0E ; [.834E.0020.0004] # KANGXI RADICAL ICE
2F0F ; [.A74C.0020.0004] # KANGXI RADICAL TABLE
2F10 ; [.AF59.0020.0004] # KANGXI RADICAL OPEN BOX
2F11 ; [.8C87.0020.0004] # KANGXI RADICAL KNIFE
1F220 ; [.BE3B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-521D
1F21C ; [.AF3B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-524D
1F239 ; [.9C7B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5272
2F12 ; [.9804.0020.0004] # KANGXI RADICAL POWER
3298 ; [.969E.0020.0006] # CIRCLED IDEOGRAPH LABOR
2F13 ; [.811A.0020.0004] # KANGXI RADICAL WRAP
2F14 ; [.81FC.0020.0004] # KANGXI RADICAL SPOON
2F15 ; [.8A9F.0020.0004] # KANGXI RADICAL RIGHT OPEN BOX
2F16 ; [.B224.0020.0004] # KANGXI RADICAL HIDING ENCLOSURE
32A9 ; [.CBE1.0020.0006] # CIRCLED IDEOGRAPH MEDICINE
2F17 ; [.BF85.0020.0004] # KANGXI RADICAL TEN
3038 ; [.BF85.0020.0004] # HANGZHOU NUMERAL TEN
3289 ; [.BF85.0020.0006] # CIRCLED IDEOGRAPH TEN
3039 ; [.954F.0020.0004] # HANGZHOU NUMERAL TWENTY
303A ; [.C861.0020.0004] # HANGZHOU NUMERAL THIRTY
32AF ; [.B2BC.0020.0006] # CIRCLED IDEOGRAPH ALLIANCE
2F18 ; [.80B6.0020.0004] # KANGXI RADICAL DIVINATION
2F19 ; [.A84F.0020.0004] # KANGXI RADICAL SEAL
329E ; [.D06B.0020.0006] # CIRCLED IDEOGRAPH PRINT
2F1A ; [.BDC0.0020.0004] # KANGXI RADICAL CLIFF
2F1B ; [.C7F7.0020.0004] # KANGXI RADICAL PRIVATE
2F1C ; [.CEE0.0020.0004] # KANGXI RADICAL AGAIN
1F212 ; [.C28A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53CC
2F1D ; [.A070.0020.0004] # KANGXI RADICAL MOUTH
1F251 ; [.A007.0020.0006] # CIRCLED IDEOGRAPH ACCEPT
32A8 ; [.CEE1.0020.0006] # CIRCLED IDEOGRAPH RIGHT
1F22E ; [.CEE1.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53F3
1F234 ; [.A232.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5408
3294 ; [.892A.0020.0006] # CIRCLED IDEOGRAPH NAME
1F225 ; [.BEBE.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5439
3244 ; [.D3B7.0020.0006] # CIRCLED IDEOGRAPH QUESTION
1F23A ; [.D120.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-55B6
2F1E ; [.D27D.0020.0004] # KANGXI RADICAL ENCLOSURE
3195 ; [.C82E.0020.0014] # IDEOGRAPHIC ANNOTATION FOUR MARK
3283 ; [.C82E.0020.0006] # CIRCLED IDEOGRAPH FOUR
2F1F ; [.92EA.0020.0004] # KANGXI RADICAL EARTH
328F ; [.92EA.0020.0006] # CIRCLED IDEOGRAPH EARTH
319E ; [.8C4B.0020.0014] # IDEOGRAPHIC ANNOTATION EARTH MARK
2F20 ; [.BFB5.0020.0004] # KANGXI RADICAL SCHOLAR
1F224 ; [.C1A8.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-58F0
2F21 ; [.B740.0020.0004] # KANGXI RADICAL GO
2F22 ; [.C986.0020.0004] # KANGXI RADICAL GO SLOWLY
2F23 ; [.B165.0020.0004] # KANGXI RADICAL EVENING
1F215 ; [.8F35.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-591A
32B0 ; [.CDD7.0020.0006] # CIRCLED IDEOGRAPH NIGHT
2F24 ; [.8C39.0020.0004] # KANGXI RADICAL BIG
337D ; [.8C39.0020.001C][.BA1E.0020.001C] # SQUARE ERA NAME TAISYOU
319D ; [.923B.0020.0014] # IDEOGRAPHIC ANNOTATION HEAVEN MARK
1F217 ; [.923B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5929
2F25 ; [.95CC.0020.0004] # KANGXI RADICAL WOMAN
329B ; [.95CC.0020.0006] # CIRCLED IDEOGRAPH FEMALE
2F26 ; [.C466.0020.0004] # KANGXI RADICAL CHILD
1F211 ; [.C456.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5B57
32AB ; [.B5F0.0020.0006] # CIRCLED IDEOGRAPH STUDY
2F27 ; [.88BF.0020.0004] # KANGXI RADICAL ROOF
32AA ; [.C5ED.0020.0006] # CIRCLED IDEOGRAPH RELIGION
2F28 ; [.C7B4.0020.0004] # KANGXI RADICAL INCH
2F29 ; [.B385.0020.0004] # KANGXI RADICAL SMALL
2F2A ; [.CE9E.0020.0004] # KANGXI RADICAL LAME
2F2B ; [.BF5B.0020.0004] # KANGXI RADICAL CORPSE
2F2C ; [.BC63.0020.0004] # KANGXI RADICAL SPROUT
2F2D ; [.C0C5.0020.0004] # KANGXI RADICAL MOUNTAIN
2F2E ; [.BED1.0020.0004] # KANGXI RADICAL RIVER
2F2F ; [.9F9E.0020.0004] # KANGXI RADICAL WORK
32A7 ; [.C593.0020.0006] # CIRCLED IDEOGRAPH LEFT
1F22C ; [.C593.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6
2F30 ; [.A74D.0020.0004] # KANGXI RADICAL ONESELF
2F31 ; [.AA6D.0020.0004] # KANGXI RADICAL TURBAN
2F32 ; [.9D7F.0020.0004] # KANGXI RADICAL DRY
337B ; [.85BF.0020.001C][.BDFC.0020.001C] # SQUARE ERA NAME HEISEI
2F33 ; [.CE11.0020.0004] # KANGXI RADICAL SHORT THREAD
3245 ; [.CEE2.0020.0006] # CIRCLED IDEOGRAPH KINDERGARTEN
2F34 ; [.9F8F.0020.0004] # KANGXI RADICAL DOTTED CLIFF
2F35 ; [.D04E.0020.0004] # KANGXI RADICAL LONG STRIDE
2F36 ; [.9FBB.0020.0004] # KANGXI RADICAL TWO HANDS
2F37 ; [.CC86.0020.0004] # KANGXI RADICAL SHOOT
2F38 ; [.9F9F.0020.0004] # KANGXI RADICAL BOW
2F39 ; [.A763.0020.0004] # KANGXI RADICAL SNOUT
2F3A ; [.C0C6.0020.0004] # KANGXI RADICAL BRISTLE
2F3B ; [.BBF9.0020.0004] # KANGXI RADICAL STEP
1F21D ; [.A30D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C
1F250 ; [.8C4D.0020.0006] # CIRCLED IDEOGRAPH ADVANTAGE
2F3C ; [.B4AB.0020.0004] # KANGXI RADICAL HEART
2F3D ; [.9C6C.0020.0004] # KANGXI RADICAL HALBERD
2F3E ; [.A40C.0020.0004] # KANGXI RADICAL DOOR
2F3F ; [.C0AE.0020.0004] # KANGXI RADICAL HAND
1F210 ; [.C0AE.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-624B
1F231 ; [.8C38.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6253
1F227 ; [.90D6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6295
1F22F ; [.B753.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6307
1F228 ; [.838E.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6355
2F40 ; [.B6EB.0020.0004] # KANGXI RADICAL BRANCH
2F41 ; [.85EC.0020.0004] # KANGXI RADICAL RAP
2F42 ; [.D38D.0020.0004] # KANGXI RADICAL SCRIPT
3246 ; [.D38D.0020.0006] # CIRCLED IDEOGRAPH SCHOOL
2F43 ; [.8CCF.0020.0004] # KANGXI RADICAL DIPPER
1F21B ; [.9905.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6599
2F44 ; [.AA6F.0020.0004] # KANGXI RADICAL AXE
1F21F ; [.B4BC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-65B0
2F45 ; [.8AA0.0020.0004] # KANGXI RADICAL SQUARE
2F46 ; [.D18A.0020.0004] # KANGXI RADICAL NOT
2F47 ; [.C2A4.0020.0004] # KANGXI RADICAL SUN
3290 ; [.C2A4.0020.0006] # CIRCLED IDEOGRAPH SUN
337E ; [.892B.0020.001C][.B773.0020.001C] # SQUARE ERA NAME MEIZI
1F219 ; [.D15D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6620
337C ; [.B884.0020.001C][.A237.0020.001C] # SQUARE ERA NAME SYOUWA
2F48 ; [.D533.0020.0004] # KANGXI RADICAL SAY
2F49 ; [.D53C.0020.0004] # KANGXI RADICAL MOON
328A ; [.D53C.0020.0006] # CIRCLED IDEOGRAPH MOON
1F237 ; [.D53C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6708
3292 ; [.CEC7.0020.0006] # CIRCLED IDEOGRAPH HAVE
1F236 ; [.CEC7.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6709
2F4A ; [.895F.0020.0004] # KANGXI RADICAL TREE
328D ; [.895F.0020.0006] # CIRCLED IDEOGRAPH WOOD
3291 ; [.BA36.0020.0006] # CIRCLED IDEOGRAPH STOCK
337F ; [.BA36.0020.001C][.BFBF.0020.001C][.A51A.0020.001C][.C05E.0020.001C] # SQUARE CORPORATION
2F4B ; [.AF68.0020.0004] # KANGXI RADICAL LACK
2F4C ; [.B741.0020.0004] # KANGXI RADICAL STOP
32A3 ; [.BA1E.0020.0006] # CIRCLED IDEOGRAPH CORRECT
2F4D ; [.8C53.0020.0004] # KANGXI RADICAL DEATH
2F4E ; [.C1D9.0020.0004] # KANGXI RADICAL WEAPON
2F4F ; [.D18B.0020.0004] # KANGXI RADICAL DO NOT
2E9F ; [.894D.0020.0004] # CJK RADICAL MOTHER
2F50 ; [.81FD.0020.0004] # KANGXI RADICAL COMPARE
2F51 ; [.8727.0020.0004] # KANGXI RADICAL FUR
2F52 ; [.BFB6.0020.0004] # KANGXI RADICAL CLAN
2F53 ; [.ADDA.0020.0004] # KANGXI RADICAL STEAM
2F54 ; [.C26E.0020.0004] # KANGXI RADICAL WATER
328C ; [.C26E.0020.0006] # CIRCLED IDEOGRAPH WATER
329F ; [.BA84.0020.0006] # CIRCLED IDEOGRAPH ATTENTION
1F235 ; [.8793.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6E80
1F226 ; [.CF75.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6F14
2F55 ; [.A48C.0020.0004] # KANGXI RADICAL FIRE
328B ; [.A48C.0020.0006] # CIRCLED IDEOGRAPH FIRE
1F21A ; [.D19A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7121
2F56 ; [.B88D.0020.0004] # KANGXI RADICAL CLAW
2F57 ; [.8BC3.0020.0004] # KANGXI RADICAL FATHER
2F58 ; [.CE21.0020.0004] # KANGXI RADICAL DOUBLE X
2F59 ; [.8453.0020.0004] # KANGXI RADICAL HALF TREE TRUNK
2F5A ; [.8593.0020.0004] # KANGXI RADICAL SLICE
2F5B ; [.CD78.0020.0004] # KANGXI RADICAL FANG
2F5C ; [.9526.0020.0004] # KANGXI RADICAL COW
3295 ; [.9060.0020.0006] # CIRCLED IDEOGRAPH SPECIAL
2F5D ; [.B123.0020.0004] # KANGXI RADICAL DOG
2F5E ; [.B63A.0020.0004] # KANGXI RADICAL PROFOUND
2F5F ; [.D4A7.0020.0004] # KANGXI RADICAL JADE
2F60 ; [.9E4D.0020.0004] # KANGXI RADICAL MELON
2F61 ; [.D216.0020.0004] # KANGXI RADICAL TILE
2F62 ; [.9D4E.0020.0004] # KANGXI RADICAL SWEET
2F63 ; [.C1A6.0020.0004] # KANGXI RADICAL LIFE
1F222 ; [.C1A6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-751F
2F64 ; [.D68B.0020.0004] # KANGXI RADICAL USE
2F65 ; [.9245.0020.0004] # KANGXI RADICAL FIELD
3199 ; [.A814.0020.0014] # IDEOGRAPHIC ANNOTATION FIRST MARK
1F238 ; [.C125.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7533
329A ; [.9459.0020.0006] # CIRCLED IDEOGRAPH MALE
2F66 ; [.852E.0020.0004] # KANGXI RADICAL BOLT OF CLOTH
2F67 ; [.93F9.0020.0004] # KANGXI RADICAL SICKNESS
2F68 ; [.8046.0020.0004] # KANGXI RADICAL DOTTED TENT
2F69 ; [.80BD.0020.0004] # KANGXI RADICAL WHITE
2F6A ; [.8504.0020.0004] # KANGXI RADICAL SKIN
2F6B ; [.890B.0020.0004] # KANGXI RADICAL DISH
32AC ; [.A9B3.0020.0006] # CIRCLED IDEOGRAPH SUPERVISE
2F6C ; [.8962.0020.0004] # KANGXI RADICAL EYE
2F6D ; [.8728.0020.0004] # KANGXI RADICAL SPEAR
2F6E ; [.BFA9.0020.0004] # KANGXI RADICAL ARROW
2F6F ; [.BF87.0020.0004] # KANGXI RADICAL STONE
2F70 ; [.BFBD.0020.0004] # KANGXI RADICAL SPIRIT
3293 ; [.C05E.0020.0006] # CIRCLED IDEOGRAPH SOCIETY
3297 ; [.BA90.0020.0006] # CIRCLED IDEOGRAPH CONGRATULATION
1F232 ; [.AAB2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7981
2F71 ; [.C2BD.0020.0004] # KANGXI RADICAL TRACK
2F72 ; [.A231.0020.0004] # KANGXI RADICAL GRAIN
3299 ; [.8871.0020.0006] # CIRCLED IDEOGRAPH SECRET
2F73 ; [.B5ED.0020.0004] # KANGXI RADICAL CAVE
1F233 ; [.A211.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A
2F74 ; [.9808.0020.0004] # KANGXI RADICAL STAND
2F75 ; [.BA53.0020.0004] # KANGXI RADICAL BAMBOO
3247 ; [.BA0D.0020.0006] # CIRCLED IDEOGRAPH KOTO
2F76 ; [.8856.0020.0004] # KANGXI RADICAL RICE
2F77 ; [.8868.0020.0004] # KANGXI RADICAL SILK
1F221 ; [.BB7F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7D42
2F78 ; [.89F6.0020.0004] # KANGXI RADICAL JAR
2F79 ; [.D3D1.0020.0004] # KANGXI RADICAL NET
2F7A ; [.D08F.0020.0004] # KANGXI RADICAL SHEEP
2F7B ; [.D47D.0020.0004] # KANGXI RADICAL FEATHER
2F7C ; [.96B7.0020.0004] # KANGXI RADICAL OLD
2F7D ; [.CBA4.0020.0004] # KANGXI RADICAL AND
2F7E ; [.966B.0020.0004] # KANGXI RADICAL PLOW
2F7F ; [.CBBF.0020.0004] # KANGXI RADICAL EAR
2F80 ; [.D4AA.0020.0004] # KANGXI RADICAL BRUSH
2F81 ; [.C2D4.0020.0004] # KANGXI RADICAL MEAT
2F82 ; [.BD5B.0020.0004] # KANGXI RADICAL MINISTER
2F83 ; [.C457.0020.0004] # KANGXI RADICAL SELF
2F84 ; [.B766.0020.0004] # KANGXI RADICAL ARRIVE
2F85 ; [.A96D.0020.0004] # KANGXI RADICAL MORTAR
2F86 ; [.C053.0020.0004] # KANGXI RADICAL TONGUE
2F87 ; [.BEE4.0020.0004] # KANGXI RADICAL OPPOSE
2F88 ; [.B8B0.0020.0004] # KANGXI RADICAL BOAT
2F89 ; [.9D94.0020.0004] # KANGXI RADICAL STOPPING
2F8A ; [.C870.0020.0004] # KANGXI RADICAL COLOR
2F8B ; [.C6C2.0020.0004] # KANGXI RADICAL GRASS
2F8C ; [.A3B4.0020.0004] # KANGXI RADICAL TIGER
2F8D ; [.BF4A.0020.0004] # KANGXI RADICAL INSECT
2F8E ; [.B604.0020.0004] # KANGXI RADICAL BLOOD
2F8F ; [.B543.0020.0004] # KANGXI RADICAL WALK ENCLOSURE
2F90 ; [.CBE0.0020.0004] # KANGXI RADICAL CLOTHES
2F91 ; [.CD9C.0020.0004] # KANGXI RADICAL WEST
2F92 ; [.AA1C.0020.0004] # KANGXI RADICAL SEE
2F93 ; [.A8EB.0020.0004] # KANGXI RADICAL HORN
1F216 ; [.A898.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-89E3
2F94 ; [.CF21.0020.0004] # KANGXI RADICAL SPEECH
2F95 ; [.9E07.0020.0004] # KANGXI RADICAL VALLEY
2F96 ; [.8CD0.0020.0004] # KANGXI RADICAL BEAN
2F97 ; [.BFAB.0020.0004] # KANGXI RADICAL PIG
2F98 ; [.B76C.0020.0004] # KANGXI RADICAL BADGER
2F99 ; [.80EB.0020.0004] # KANGXI RADICAL SHELL
3296 ; [.C69F.0020.0006] # CIRCLED IDEOGRAPH FINANCIAL
1F223 ; [.8A4B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9
32AE ; [.C421.0020.0006] # CIRCLED IDEOGRAPH RESOURCE
2F9A ; [.BBFE.0020.0004] # KANGXI RADICAL RED
2F9B ; [.C50C.0020.0004] # KANGXI RADICAL RUN
1F230 ; [.C50C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8D70
2F9C ; [.C571.0020.0004] # KANGXI RADICAL FOOT
2F9D ; [.C129.0020.0004] # KANGXI RADICAL BODY
2F9E ; [.BC58.0020.0004] # KANGXI RADICAL CART
2F9F ; [.B4AE.0020.0004] # KANGXI RADICAL BITTER
2FA0 ; [.BD5F.0020.0004] # KANGXI RADICAL MORNING
2FA1 ; [.BEA0.0020.0004] # KANGXI RADICAL WALK
1F22B ; [.CEBC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-904A
329C ; [.BFFC.0020.0006] # CIRCLED IDEOGRAPH SUITABLE
2FA2 ; [.CC9C.0020.0004] # KANGXI RADICAL CITY
2FA3 ; [.CECA.0020.0004] # KANGXI RADICAL WINE
2FA4 ; [.8308.0020.0004] # KANGXI RADICAL DISTINGUISH
2FA5 ; [.97EB.0020.0004] # KANGXI RADICAL VILLAGE
2FA6 ; [.AA72.0020.0004] # KANGXI RADICAL GOLD
328E ; [.AA72.0020.0006] # CIRCLED IDEOGRAPH METAL
2FA7 ; [.B9D1.0020.0004] # KANGXI RADICAL LONG
2FA8 ; [.87B7.0020.0004] # KANGXI RADICAL GATE
2FA9 ; [.8BCB.0020.0004] # KANGXI RADICAL MOUND
2FAA ; [.9819.0020.0004] # KANGXI RADICAL SLAVE
2FAB ; [.BAFD.0020.0004] # KANGXI RADICAL SHORT TAILED BIRD
2FAC ; [.D47F.0020.0004] # KANGXI RADICAL RAIN
2FAD ; [.B01B.0020.0004] # KANGXI RADICAL BLUE
2FAE ; [.89A9.0020.0004] # KANGXI RADICAL WRONG
2FAF ; [.88EB.0020.0004] # KANGXI RADICAL FACE
2FB0 ; [.9C8F.0020.0004] # KANGXI RADICAL LEATHER
2FB1 ; [.D288.0020.0004] # KANGXI RADICAL TANNED LEATHER
2FB2 ; [.A965.0020.0004] # KANGXI RADICAL LEEK
2FB3 ; [.CFF8.0020.0004] # KANGXI RADICAL SOUND
2FB4 ; [.CDDC.0020.0004] # KANGXI RADICAL LEAF
32A0 ; [.B520.0020.0006] # CIRCLED IDEOGRAPH ITEM
2FB5 ; [.8AD5.0020.0004] # KANGXI RADICAL WIND
2FB6 ; [.89AA.0020.0004] # KANGXI RADICAL FLY
2FB7 ; [.BF93.0020.0004] # KANGXI RADICAL EAT
2FB8 ; [.C0B1.0020.0004] # KANGXI RADICAL HEAD
2FB9 ; [.B4E1.0020.0004] # KANGXI RADICAL FRAGRANT
2FBA ; [.8637.0020.0004] # KANGXI RADICAL HORSE
2FBB ; [.9E10.0020.0004] # KANGXI RADICAL BONE
2FBC ; [.9CEC.0020.0004] # KANGXI RADICAL TALL
2FBD ; [.82AD.0020.0004] # KANGXI RADICAL HAIR
2FBE ; [.8CD4.0020.0004] # KANGXI RADICAL FIGHT
2FBF ; [.BDCE.0020.0004] # KANGXI RADICAL SACRIFICIAL WINE
2FC0 ; [.9C94.0020.0004] # KANGXI RADICAL CAULDRON
2FC1 ; [.9EF1.0020.0004] # KANGXI RADICAL GHOST
2FC2 ; [.D436.0020.0004] # KANGXI RADICAL FISH
2FC3 ; [.9519.0020.0004] # KANGXI RADICAL BIRD
2FC4 ; [.9AD5.0020.0004] # KANGXI RADICAL SALT
2FC5 ; [.9AFD.0020.0004] # KANGXI RADICAL DEER
2FC6 ; [.86CC.0020.0004] # KANGXI RADICAL WHEAT
2FC7 ; [.862D.0020.0004] # KANGXI RADICAL HEMP
2FC8 ; [.A607.0020.0004] # KANGXI RADICAL YELLOW
2FC9 ; [.C20C.0020.0004] # KANGXI RADICAL MILLET
2FCA ; [.A2AD.0020.0004] # KANGXI RADICAL BLACK
2FCB ; [.B762.0020.0004] # KANGXI RADICAL EMBROIDERY
2FCC ; [.88E4.0020.0004] # KANGXI RADICAL FROG
2FCD ; [.8ED2.0020.0004] # KANGXI RADICAL TRIPOD
2FCE ; [.9E1D.0020.0004] # KANGXI RADICAL DRUM
2FCF ; [.C210.0020.0004] # KANGXI RADICAL RAT
2FD0 ; [.81FB.0020.0004] # KANGXI RADICAL NOSE
2FD1 ; [.ADA1.0020.0004] # KANGXI RADICAL EVEN
2FD2 ; [.BBF7.0020.0004] # KANGXI RADICAL TOOTH
2FD3 ; [.9BE4.0020.0004] # KANGXI RADICAL DRAGON
2FD4 ; [.9ED7.0020.0004] # KANGXI RADICAL TURTLE
2EF3 ; [.9EB8.0020.0004] # CJK RADICAL C-SIMPLIFIED TURTLE
2FD5 ; [.D560.0020.0004] # KANGXI RADICAL FLUTE
F967 ; [.8392.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
FA70 ; [.836F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70
F905 ; [.BEEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905
2F801 ; [.D334.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.8CEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E
2F800 ; [.980B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800
2F802 ; [.CC07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F802
F91B ; [.9BA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B
F9BA ; [.9615.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA
F977 ; [.9A32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977
F9FD ; [.C151.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD
2F819 ; [.834F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F819
F9A8 ; [.9A9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8
2F804 ; [.94AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804
FA73 ; [.B546.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73
F92D ; [.9619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D
F9B5 ; [.9811.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.D1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.D1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805
2F806 ; [.935A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806
F965 ; [.830C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965
2F807 ; [.8373.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807
F9D4 ; [.9BB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4
2F808 ; [.C477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808
2F809 ; [.80FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809
2F80B ; [.B522.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.98D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.C90E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.C90E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A
FA0C ; [.D1CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.BF37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.88D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.88D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F80F ; [.92F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F
2F810 ; [.A627.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F810
2F814 ; [.9422.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814
FA72 ; [.B0F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72
F978 ; [.9A28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978
F9D1 ; [.9953.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1
2F811 ; [.ABF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.A7A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F815 ; [.C4C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815
2F8D2 ; [.874F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.88DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F817 ; [.C3F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817
2F818 ; [.D571.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F81A ; [.8FE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A
FA71 ; [.A1F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71
2F81B ; [.A1F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B
F92E ; [.9793.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E
F979 ; [.9A18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979
F955 ; [.9A51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955
F954 ; [.99F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954
FA15 ; [.B1BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15
2F81D ; [.AF59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D
2F81E ; [.C305.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.AE24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.AE24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.98A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C
F9DD ; [.980C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.C66A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.A014.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F821 ; [.9B64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821
2F822 ; [.9C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822
2F823 ; [.BD2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823
F9C7 ; [.9926.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7
F98A ; [.9804.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A
F99D ; [.98A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D
2F992 ; [.969D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992
FA76 ; [.D671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.D671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.964C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952
F92F ; [.96A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F
FA34 ; [.AFAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.AFAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827
F97F ; [.985C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F
FA77 ; [.C096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.C096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.811B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829
2F82A ; [.C7B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A
F963 ; [.80E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.80E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B
F9EB ; [.94CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F82C ; [.A518.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.80D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.80D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D
2F82E ; [.807E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F82F ; [.A6FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.9BA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F830 ; [.A70A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830
2F831 ; [.B020.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.B020.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.B020.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833
F96B ; [.C6D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B
2F836 ; [.A6FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836
2F837 ; [.C8D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837
F906 ; [.ABEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.A922.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839
2F83A ; [.BBFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A
2F83B ; [.CE13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B
F9DE ; [.9809.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.9A03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.B16A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D
F980 ; [.9C24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980
2F83E ; [.BDFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.B8B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F
2F83C ; [.B473.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83C
2F840 ; [.CA56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840
F99E ; [.CF9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F841 ; [.8891.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F841
2F842 ; [.9144.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842
2F843 ; [.ADCE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843
FA79 ; [.90B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79
2F844 ; [.B415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844
2F845 ; [.C100.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.C100.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.95E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.A52B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.A52B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.A22D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.A22D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F848 ; [.BBB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848
2F849 ; [.B7F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849
FA0D ; [.A422.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D
2F84A ; [.CE34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A
FA7B ; [.D21D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B
FA37 ; [.912C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37
2F84C ; [.912C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C
2F84E ; [.A2BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84E
FA38 ; [.ADFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38
2F84F ; [.847B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F
F9A9 ; [.9A44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F84B ; [.92DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B
2F84D ; [.92DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84D
2F855 ; [.B548.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.BE03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.B720.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F854 ; [.92F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854
2F857 ; [.8151.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857
2F856 ; [.C642.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856
FA39 ; [.85EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39
FA10 ; [.BB92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10
FA7C ; [.BB92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C
F96C ; [.C892.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.86A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A
2F858 ; [.8E0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858
FA7D ; [.8A7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D
F94A ; [.9679.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A
F942 ; [.9C0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942
2F851 ; [.BB63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851
2F85A ; [.86C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A
2F85B ; [.A3DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B
2F85C ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C
2F85D ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D
2F85E ; [.882A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E
FA7E ; [.CF5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.9410.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.ADE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.8193.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.C04A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.95CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981
2F865 ; [.8598.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865
2F862 ; [.A6AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862
2F863 ; [.D42A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863
2F864 ; [.935B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864
FA80 ; [.8232.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F866 ; [.8BDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866
2F986 ; [.D15F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986
2F869 ; [.C2B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869
FA81 ; [.C657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81
2F86A ; [.9741.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A
2F86B ; [.9741.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B
FA04 ; [.B874.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04
2F86D ; [.D575.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D
2F86E ; [.B7AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E
F95F ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F
F9AA ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA
2F86F ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F
F9BC ; [.98DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC
2F870 ; [.8143.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870
2F872 ; [.C0B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872
2F873 ; [.AAD5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873
2F875 ; [.CE9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875
F9BD ; [.9522.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.92CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877
F94B ; [.9C34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B
FA3B ; [.C71D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B
F9DF ; [.9C36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF
FA3C ; [.BC63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C
2F878 ; [.BC63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878
2F87A ; [.AEFF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A
2F879 ; [.B3C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879
F9D5 ; [.9BB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5
2F87C ; [.CF66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C
F921 ; [.970A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921
2F87F ; [.C416.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F
2F87E ; [.8E87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87E
2F880 ; [.BD30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880
2F9F4 ; [.B1BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4
F9AB ; [.9A9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB
2F881 ; [.B68C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F882 ; [.BC98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882
2F884 ; [.B6C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F885 ; [.C26F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885
2F886 ; [.8758.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886
2F887 ; [.8A7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887
F98E ; [.9537.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E
FA01 ; [.8F28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88B ; [.8372.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B
2F88C ; [.8233.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C
2F88D ; [.C22B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.996E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.9766.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.9766.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA82 ; [.CAF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82
FA0B ; [.A11E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B
FA83 ; [.CCFF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83
F982 ; [.9AB9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982
2F890 ; [.9FBB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890
F943 ; [.95C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943
2F894 ; [.9097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894
2F895 ; [.9097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895
2F874 ; [.8D4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874
2F899 ; [.B544.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.C6A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84
2F89A ; [.8E55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A
F9D8 ; [.9C41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8
2F89C ; [.8FF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89C
F966 ; [.8BDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966
FA85 ; [.CE36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F89D ; [.C2FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.B768.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.9551.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3
2F89F ; [.A1E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89F
F960 ; [.958F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.9965.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC
FA6B ; [.A524.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B
2F8A0 ; [.D572.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
FA3D ; [.A510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.A510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
2F8A5 ; [.8FBB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
FA86 ; [.D3D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86
F9B9 ; [.CA70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9
FA88 ; [.D4DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88
F9D9 ; [.9846.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9
2F8A6 ; [.C64C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.A5FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.A5FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA87 ; [.C178.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87
2F8A8 ; [.C178.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
FA8A ; [.CB23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A
FA3E ; [.A03D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E
2F8AA ; [.96E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
FA3F ; [.C55C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.C55C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.C55C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
F98F ; [.997C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F
2F8AD ; [.8A96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
2F8AE ; [.C6EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
2F8AC ; [.B498.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
2F8AF ; [.8803.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
FA40 ; [.BE2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40
FA8B ; [.BE2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B
2F8B0 ; [.BE2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
F90D ; [.9742.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D
2F8B1 ; [.9742.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
F990 ; [.99C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990
2F8B2 ; [.BDFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
2F8B3 ; [.A802.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
F9D2 ; [.9B16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.8C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F8B4 ; [.A0E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B4
2F8B5 ; [.814B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.95DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925
F95B ; [.93DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B
FA02 ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.801D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
2F8BA ; [.8599.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
F973 ; [.C00F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973
2F8B9 ; [.D348.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.ACA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
2F8BB ; [.C05A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
F9A4 ; [.9540.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4
2F8BC ; [.C8AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
F975 ; [.CA67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.CF63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.D43E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D
2F8C0 ; [.CF39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0
2F8BD ; [.A70F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD
FA8E ; [.C8BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E
2F8BF ; [.AAB0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
FA8F ; [.8365.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F
2F8C3 ; [.865D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
2F8C6 ; [.A904.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6
2F8C4 ; [.AB0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C4
F991 ; [.9546.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991
2F8C5 ; [.A4F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
F930 ; [.9ADE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930
FA41 ; [.8915.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.8915.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.CAF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90
2F8C9 ; [.AB74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F969 ; [.C23A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969
F9BE ; [.9905.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE
F983 ; [.9C2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983
FA42 ; [.A775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42
2F8CB ; [.A789.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB
F9E0 ; [.CCA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0
2F8CD ; [.AAA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
FA12 ; [.B034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.B034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91
F9C5 ; [.D5E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5
FA43 ; [.C20B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.C20B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
2F8D5 ; [.AAB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D5
FA06 ; [.8156.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06
F98B ; [.9855.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B
F901 ; [.9DDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8CC ; [.C1E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
2F8D4 ; [.C5BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
F929 ; [.9775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.9775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.9775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.D3E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.D3E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
2F8DA ; [.C5F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA
F9E1 ; [.9897.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.82A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.B9DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.ADC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
F9C8 ; [.BCDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8
2F8E0 ; [.A6A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
F9F4 ; [.99CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.9944.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9
2F8DF ; [.9EAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF
F9DA ; [.9826.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA
2F8E5 ; [.8196.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5
2F8E1 ; [.C902.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E1
F97A ; [.9A19.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.86DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.86DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
2F8E4 ; [.CAEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E4
F9E2 ; [.979F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2
2F8E6 ; [.C417.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6
2F8E8 ; [.B7F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
2F8E9 ; [.CE3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9
2F8EA ; [.9CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA
F914 ; [.9610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914
F95C ; [.9610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C
F9BF ; [.9610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF
F94C ; [.96E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C
2F8EB ; [.C052.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB
F931 ; [.9AE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931
2F8ED ; [.B7D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
F91D ; [.9726.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D
2F8EF ; [.C667.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
2F8F1 ; [.B58D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
2F8F3 ; [.C9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
F98C ; [.9856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C
FA95 ; [.8C53.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95
2F8F4 ; [.D380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4
F9A5 ; [.99BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5
F970 ; [.C025.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970
FA96 ; [.C025.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96
2F8F5 ; [.C025.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
2F8F6 ; [.AE8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6
2F8FA ; [.8A3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
2F8FE ; [.AF01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE
F972 ; [.BD5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.CF25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.886C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968
2F8FD ; [.8194.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD
F9E3 ; [.9490.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3
2F8FF ; [.D193.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF
F915 ; [.9B72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.900E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F907 ; [.85C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907
2F900 ; [.83F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.9912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.9912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.9912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.A2D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.9781.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.A29A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.A29A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.AAA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.94E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.99D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5
F94D ; [.9688.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D
F9D6 ; [.9BB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6
2F90E ; [.CF08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.BA70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.9DB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.CF0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909
F9CB ; [.990C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.94CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC
2F90C ; [.8E88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C
FA99 ; [.C419.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.C419.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.A44F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904
FA98 ; [.D03B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA98
F94E ; [.96FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E
FA47 ; [.A368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47
FA9A ; [.A368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A
F992 ; [.9974.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992
2F90F ; [.BCA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F912 ; [.8A7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912
F922 ; [.9751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922
F984 ; [.9C51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984
2F915 ; [.D142.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915
FA9B ; [.AB83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B
2F914 ; [.AB83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914
2F913 ; [.D563.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913
2F917 ; [.AF57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917
2F835 ; [.A4D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835
2F919 ; [.BB35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F919
2F918 ; [.C4B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918
F9FB ; [.B774.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.9126.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A
F99F ; [.98B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.96C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916
2F91C ; [.8FAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C
F993 ; [.99B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993
FA48 ; [.BA72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.BA72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C
2F91E ; [.C7CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E
F9C0 ; [.98E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0
F9EE ; [.99E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE
F932 ; [.9AC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932
F91E ; [.9753.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E
2F920 ; [.C7A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920
FA49 ; [.B8AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA49
FA9E ; [.AC81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.AC81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921
2F922 ; [.B809.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F922
F946 ; [.969F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946
2F924 ; [.B19A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924
2F925 ; [.810B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925
FA9F ; [.8A3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F9FA ; [.BB66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA
F92B ; [.975E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B
FA16 ; [.BA3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16
FAA0 ; [.BA3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0
F9A7 ; [.98C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7
2F928 ; [.9034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928
F961 ; [.9C43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.9C43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F929 ; [.D3CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929
2F92B ; [.D544.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B
F9AD ; [.9A4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.9B76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.97F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.9914.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.C58E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92E ; [.8C72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92E
2F92F ; [.D44E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F
F9AE ; [.D131.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE
FAA1 ; [.B9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1
2F930 ; [.B9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930
2F931 ; [.C979.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931
F994 ; [.999F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994
F9EF ; [.99E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF
2F932 ; [.B15E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932
FAA2 ; [.C64D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA2
2F934 ; [.C397.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F934
FAA3 ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3
2F936 ; [.C4B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936
F9CD ; [.9915.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.CA68.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976
F962 ; [.CCD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962
2F938 ; [.CCD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938
F9E5 ; [.983F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5
2F93A ; [.D494.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A
FAA4 ; [.9F2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4
FAA5 ; [.D382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5
F9C1 ; [.98E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1
F90E ; [.9649.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E
FA17 ; [.CCC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.CCC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7 ; [.C1CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7
F933 ; [.9AB5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933
FAA8 ; [.B71A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.B71A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.C1C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F945 ; [.B959.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945
2F946 ; [.B95A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946
2F947 ; [.B95A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947
FAAA ; [.B869.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA
FAA9 ; [.ACC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9
2F948 ; [.ACC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948
2F94A ; [.BD55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A
FA9D ; [.AE77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D
2F94E ; [.B54F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E
F9CE ; [.9918.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.9B0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.9B0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.80DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.9673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947
FAAB ; [.9259.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB
2F950 ; [.9259.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950
F964 ; [.845F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964
F985 ; [.9878.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985
FA18 ; [.97EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18
FA4C ; [.C05E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C
FA4E ; [.AD73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.B757.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA4F ; [.CEF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F
FA50 ; [.C583.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.C583.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.BA90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51
FA19 ; [.C153.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.B4FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A
F93C ; [.9B0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C
FA52 ; [.A4A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52
FA53 ; [.B971.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53
FA1B ; [.8B8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.8B8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956
F9B6 ; [.97FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6
F995 ; [.9538.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995
2F957 ; [.C201.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957
F956 ; [.978F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956
FA54 ; [.9E24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54
2F959 ; [.9E24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959
2F95A ; [.A79C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A
2F95B ; [.D3B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B
FA55 ; [.92B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55
FAAC ; [.9231.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC
F9F7 ; [.9808.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7
2F95F ; [.85BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F
F9F8 ; [.9833.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8
FA56 ; [.A87C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56
FAAD ; [.A87C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD
2F962 ; [.BB3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962
2F963 ; [.BA5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963
F9A6 ; [.9992.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6
F944 ; [.9BF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944
FAAE ; [.9686.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE
F9F9 ; [.9834.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.AB32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D
2F966 ; [.8114.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966
FA03 ; [.915F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03
2F969 ; [.C8EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F969
F97B ; [.9A24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B
2F968 ; [.AB10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968
2F96A ; [.A778.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A
F9CF ; [.952E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF
F96A ; [.C970.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.9689.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F
FAAF ; [.90A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF
2F96C ; [.81D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C
F93D ; [.9C4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D
F957 ; [.9A73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957
2F96E ; [.C427.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E
F996 ; [.99BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996
FA57 ; [.99BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57
FAB0 ; [.99BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0
2F96F ; [.C61F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96F
FA58 ; [.AAC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58
F950 ; [.9C3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950
FA59 ; [.8A28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59
2F970 ; [.C8A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970
FAB1 ; [.85D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1
FA5A ; [.C20E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.97C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6
2F976 ; [.BCA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976
F90F ; [.9B52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F
2F978 ; [.D0D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978
F9AF ; [.9A62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.D47D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E
2F979 ; [.CB06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979
F934 ; [.96B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934
FA5B ; [.B856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.B856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.B856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A
F9B0 ; [.9A64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0
2F97D ; [.85BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97D
F997 ; [.9989.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997
2F97F ; [.C7D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F
F945 ; [.9BF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945
F953 ; [.9600.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.93E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.D4B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F983 ; [.C780.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F983
2F985 ; [.851D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985
F926 ; [.95F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926
F9F6 ; [.99E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6
FA5C ; [.BCE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F893 ; [.D42F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.D42F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B
2F98C ; [.B23F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C
FA6D ; [.9F3F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D
F97C ; [.9A16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C
FA5D ; [.C6CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D
FA5E ; [.C6CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E
2F990 ; [.D4AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F98F ; [.ADCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F
2F991 ; [.B6F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.A43F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.8AA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.CD7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.C386.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.C386.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.A0F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996
2F999 ; [.BC82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999
2F99C ; [.D198.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C
F9FE ; [.BC3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.A5F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F9A0 ; [.85CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0
2F99A ; [.C3D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A
2F99B ; [.A86D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99B
2F99D ; [.87E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D
F93E ; [.9B03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E
2F9A1 ; [.ABC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.ACE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.C6B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
2F99E ; [.8DE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E
FAB4 ; [.A44D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4
F958 ; [.9A69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.9B7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918
F96E ; [.CDE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E
FA5F ; [.B86A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.B86A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F999 ; [.9980.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999
2F9A8 ; [.85DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
2F9A9 ; [.AA97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9
F9C2 ; [.98FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2
2F9AA ; [.C74F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA
2F9AC ; [.C399.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
F923 ; [.971B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923
F9F0 ; [.9A11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0
F935 ; [.9AC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935
FA20 ; [.AEF5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA20
F91F ; [.9728.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F
F910 ; [.9B5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910
2F9B3 ; [.95D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
F936 ; [.9AD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936
2F9B4 ; [.9AD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
2F9B5 ; [.A14D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
2F9B6 ; [.B256.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6
2F9B8 ; [.AF15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B8
2F9B7 ; [.BBB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
2F9BA ; [.85D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA
2F9B9 ; [.D57F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9
2F9BC ; [.8E3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
2F9BD ; [.BA44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD
FAB5 ; [.D5EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5
2F9BB ; [.D5EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB
2F9BE ; [.C674.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BE
F911 ; [.9B51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911
2F9C0 ; [.9EFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0
2F9C1 ; [.B510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1
F927 ; [.95F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927
FA08 ; [.B543.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F9C3 ; [.BB4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C3
2F9C4 ; [.CBE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
F9A0 ; [.98B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0
F9E7 ; [.97F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7
2F9C6 ; [.9919.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6
2F9C7 ; [.C276.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7
F9E8 ; [.989C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8
F912 ; [.9B67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912
2F9C9 ; [.CF76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9
FA60 ; [.A282.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.B011.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6
F924 ; [.9724.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924
FAB7 ; [.8BFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7
FA0A ; [.AA1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A
FA61 ; [.BFE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61
FAB8 ; [.BFE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8
2F9CF ; [.BE22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
F96F ; [.C24F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F
F9A1 ; [.C24F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1
FAB9 ; [.8E75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9
FABB ; [.B047.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB
F97D ; [.9A3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D
F941 ; [.9BCB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941
FABE ; [.D502.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE
2F9D0 ; [.D502.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
FA22 ; [.BA48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22
FABA ; [.BA48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA
F95D ; [.95A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D
FABD ; [.95A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD
FA62 ; [.CDF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62
FABC ; [.CDF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC
FA63 ; [.AA9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63
FABF ; [.AA9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF
F9FC ; [.C017.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC
F95A ; [.8F10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A
FAC0 ; [.831E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0
2F9D1 ; [.831E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
F900 ; [.ADCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900
2F9D2 ; [.BFAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F9D4 ; [.9F4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
2F9D5 ; [.8245.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
F948 ; [.9B0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948
F903 ; [.A822.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903
FA64 ; [.8331.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64
FA65 ; [.C56B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65
FAC1 ; [.C56B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1
2F9D6 ; [.9D8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
2F9D7 ; [.ADCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9DB ; [.A9FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
2F9DA ; [.8024.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.9B0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937
2F9DC ; [.8589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC
F902 ; [.BC58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902
2F9DE ; [.C321.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE
F998 ; [.9549.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998
F9D7 ; [.9BC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7
FAC2 ; [.C1FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2
2F9DF ; [.C1FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
FA07 ; [.8B97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07
F98D ; [.988A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D
2F98D ; [.C64B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D
F971 ; [.BD5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971
FA66 ; [.BE9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66
F99A ; [.996B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A
FA25 ; [.CCEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.CCEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67
FAC3 ; [.BBE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3
F9C3 ; [.98E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3
F913 ; [.9B5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913
2F9E2 ; [.ADC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2
F92C ; [.975C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C
FA2E ; [.975F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E
2F9E3 ; [.85CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3
FA26 ; [.8CC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26
2F9E4 ; [.C423.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4
2F9E6 ; [.BC9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6
F919 ; [.96C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919
FAC4 ; [.C8CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4
F9B7 ; [.97FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7
F9E9 ; [.97EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9
F97E ; [.9A3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.AA72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A
F9B1 ; [.9A6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1
2F9E7 ; [.8086.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
FAC5 ; [.B553.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5
2F9EA ; [.8369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
2F9E8 ; [.B62C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
2F9E9 ; [.A455.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9
F93F ; [.9B23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F
F99B ; [.99BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B
2F9EB ; [.B013.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB
2F9EC ; [.C516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC
2F9EE ; [.A032.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
F986 ; [.9C1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986
2F9F0 ; [.C083.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0
F9C6 ; [.C3B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.96FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.AB03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.9A68.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959
F9D3 ; [.9AFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3
FAC6 ; [.BA71.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6
F9DC ; [.9BDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9F1 ; [.99DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1
FA2F ; [.9859.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F
F9B8 ; [.985F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8
2F9F3 ; [.AF18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3
F9EA ; [.97D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA
FA68 ; [.9467.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68
FAC7 ; [.9467.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7
F9B2 ; [.9A70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.964D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949
2F9F5 ; [.D625.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
F938 ; [.9B37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938
F9B3 ; [.9A8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3
FA1C ; [.AB77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.AB77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8
FAC9 ; [.80D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC9
2F9FA ; [.8286.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA
FA69 ; [.B512.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69
FACA ; [.B512.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA
FACB ; [.CA47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACB
2F9FE ; [.CA47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FE
2F9FF ; [.CA47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FF
F9B4 ; [.9A99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4
2FA00 ; [.85BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00
FA6A ; [.85A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A
FACC ; [.85A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC
F9D0 ; [.9693.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0
2FA02 ; [.A6B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02
FA2A ; [.8A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A
FA2B ; [.C84E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B
FA2C ; [.9F41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C
2FA04 ; [.CA8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04
2FA05 ; [.D5F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05
2FA06 ; [.813C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06
F91A ; [.9B82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A
2FA07 ; [.9361.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07
F987 ; [.97E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987
FACD ; [.B997.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD
2FA0A ; [.B997.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
F939 ; [.9ADD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939
2FA0B ; [.A7C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B
F9F2 ; [.99F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2
2FA0C ; [.A9BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C
2FA0F ; [.8528.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F
FA2D ; [.A28C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D
F93A ; [.9B3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A
F920 ; [.9BA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920
F940 ; [.9AFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940
F988 ; [.9871.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988
F9F3 ; [.99F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FA15 ; [.862D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15
F989 ; [.97C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989
2FA17 ; [.B762.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17
2FA18 ; [.88D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18
2FA19 ; [.B715.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA19
2FA1A ; [.8885.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A
2FA1B ; [.8A85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B
2FA1C ; [.81FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
FAD8 ; [.CA9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8
F9C4 ; [.9BE4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4
FAD9 ; [.8497.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9
F907 ; [.9ED7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907
F908 ; [.9ED7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908
FACE ; [.9ED7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE
2F81F ; [.8505.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81F
2F888 ; [.87AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F888
2F8D0 ; [.D37C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D0
2F8CE ; [.D2E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CE
2F8DE ; [.A447.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DE
2F8EE ; [.CC56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EE
2F90A ; [.9C08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90A
2F92C ; [.85CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92C
2F92D ; [.85CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92D
FAD4 ; [.A871.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD4
2F949 ; [.A871.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F949
2F960 ; [.85E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F960
2F96D ; [.CE1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96D
2F8D7 ; [.9118.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D7
2FA0E ; [.A746.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0E
ENTRY
};
Unicode/Collate/Locale/haw.pl 0000644 00000002746 15033552504 0012043 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0065 ; [.1C48.0020.0002][.FFF1.0000.0000] # LATIN SMALL LETTER E
0045 ; [.1C48.0020.0008][.FFF1.0000.0000] # LATIN CAPITAL LETTER E
0069 ; [.1C48.0020.0002][.FFF2.0000.0000] # LATIN SMALL LETTER I
0049 ; [.1C48.0020.0008][.FFF2.0000.0000] # LATIN CAPITAL LETTER I
006F ; [.1C48.0020.0002][.FFF3.0000.0000] # LATIN SMALL LETTER O
004F ; [.1C48.0020.0008][.FFF3.0000.0000] # LATIN CAPITAL LETTER O
0075 ; [.1C48.0020.0002][.FFF4.0000.0000] # LATIN SMALL LETTER U
0055 ; [.1C48.0020.0008][.FFF4.0000.0000] # LATIN CAPITAL LETTER U
02BB ; [.1EF6.0020.0002] # MODIFIER LETTER TURNED COMMA
0113 ; [.1C48.0020.0002][.FFF1.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1C48.0020.0008][.FFF1.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON
012B ; [.1C48.0020.0002][.FFF2.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1C48.0020.0008][.FFF2.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON
014D ; [.1C48.0020.0002][.FFF3.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1C48.0020.0008][.FFF3.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON
016B ; [.1C48.0020.0002][.FFF4.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1C48.0020.0008][.FFF4.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON
ENTRY
};
Unicode/Collate/Locale/nb.pl 0000644 00000012412 15033552504 0011652 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH
00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN
00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE
00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F98.0020.0008] # ANGSTROM SIGN
01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
0061 0061 ; [.1F98.0021.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A>
0041 0061 ; [.1F98.0021.0007] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A>
0041 0041 ; [.1F98.0021.0008] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A>
ENTRY
};
Unicode/Collate/Locale/mk.pl 0000644 00000001726 15033552504 0011670 0 ustar 00 +{
locale_version => 1.25,
suppress => [0x0418, 0x0438],
entry => <<'ENTRY', # for DUCET v9.0.0
0453 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER GJE
0433 0301 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER GJE
0433 0341 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER GJE
0403 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER GJE
0413 0301 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER GJE
0413 0341 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER GJE
045C ; [.211A.0020.0002] # CYRILLIC SMALL LETTER KJE
043A 0301 ; [.211A.0020.0002] # CYRILLIC SMALL LETTER KJE
043A 0341 ; [.211A.0020.0002] # CYRILLIC SMALL LETTER KJE
040C ; [.211A.0020.0008] # CYRILLIC CAPITAL LETTER KJE
041A 0301 ; [.211A.0020.0008] # CYRILLIC CAPITAL LETTER KJE
041A 0341 ; [.211A.0020.0008] # CYRILLIC CAPITAL LETTER KJE
0439 ; [.2080.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I
0419 ; [.2080.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I
ENTRY
};
Unicode/Collate/Locale/hi.pl 0000644 00000000560 15033552504 0011654 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA
0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM
ENTRY
};
Unicode/Collate/Locale/zh_pin.pl 0000644 00000306015 15033552504 0012547 0 ustar 00 use Unicode::Collate::CJK::Pinyin;
+{
locale_version => 1.25,
overrideCJK => \&Unicode::Collate::CJK::Pinyin::weightPinyin,
entry => <<'ENTRY', # for DUCET v9.0.0
0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON>
004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON>
1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON>
004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON>
006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT>
006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK>
004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT>
004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK>
006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON>
004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON>
0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON>
00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON>
01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON>
00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON>
01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
FDD0 0041 ; [.8000.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER A>
FDD0 0042 ; [.80C5.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER B>
FDD0 0043 ; [.8441.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER C>
FDD0 0044 ; [.897D.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER D>
FDD0 0045 ; [.8D61.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER E>
FDD0 0046 ; [.8E1B.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER F>
FDD0 0047 ; [.9089.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER G>
FDD0 0048 ; [.93C4.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER H>
FDD0 004A ; [.97EC.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER J>
FDD0 004B ; [.9E32.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER K>
FDD0 004C ; [.A05D.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER L>
3007 ; [.A401.0020.0002] # IDEOGRAPHIC NUMBER ZERO
FDD0 004D ; [.A680.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER M>
FDD0 004E ; [.A9A9.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER N>
FDD0 004F ; [.AB89.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER O>
FDD0 0050 ; [.ABAC.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER P>
FDD0 0051 ; [.AE02.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER Q>
FDD0 0052 ; [.B1F1.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER R>
FDD0 0053 ; [.B337.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER S>
FDD0 0054 ; [.B858.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER T>
FDD0 0057 ; [.BBD3.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER W>
FDD0 0058 ; [.BE4A.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER X>
FDD0 0059 ; [.C382.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER Y>
FDD0 005A ; [.CB22.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER Z>
3220 ; [*0317.0020.0004][.C5CF.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE
3226 ; [*0317.0020.0004][.AE03.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN
3222 ; [*0317.0020.0004][.B35F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE
3228 ; [*0317.0020.0004][.9C92.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE
3221 ; [*0317.0020.0004][.8E0E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO
3224 ; [*0317.0020.0004][.BDF1.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE
3239 ; [*0317.0020.0004][.89B6.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT
323D ; [*0317.0020.0004][.AE82.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE
3241 ; [*0317.0020.0004][.C1F9.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST
3227 ; [*0317.0020.0004][.80C6.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT
3225 ; [*0317.0020.0004][.A49F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX
3238 ; [*0317.0020.0004][.A132.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR
3229 ; [*0317.0020.0004][.B57B.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN
323F ; [*0317.0020.0004][.C10A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE
3234 ; [*0317.0020.0004][.A8EB.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME
323A ; [*0317.0020.0004][.9589.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL
3223 ; [*0317.0020.0004][.B715.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR
322F ; [*0317.0020.0004][.BB2D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH
323B ; [*0317.0020.0004][.C304.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY
3230 ; [*0317.0020.0004][.B272.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN
322A ; [*0317.0020.0004][.CA96.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON
3232 ; [*0317.0020.0004][.C8D2.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE
322D ; [*0317.0020.0004][.A98A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD
3231 ; [*0317.0020.0004][.CF58.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK
322C ; [*0317.0020.0004][.B6BA.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER
322B ; [*0317.0020.0004][.97BC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE
3235 ; [*0317.0020.0004][.B980.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL
323C ; [*0317.0020.0004][.999B.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE
3233 ; [*0317.0020.0004][.B4AC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY
3237 ; [*0317.0020.0004][.CFAD.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION
3240 ; [*0317.0020.0004][.98D6.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL
3242 ; [*0317.0020.0004][.D0D4.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF
3243 ; [*0317.0020.0004][.CE51.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH
3236 ; [*0317.0020.0004][.844F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL
323E ; [*0317.0020.0004][.D0A3.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE
322E ; [*0317.0020.0004][.9B96.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL
3358 ; [.1C3D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
336A ; [.1C3E.0020.0004][.1C45.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
336B ; [.1C3E.0020.0004][.1C46.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
33E0 ; [.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
32C0 ; [.1C3E.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
3359 ; [.1C3E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
336F ; [.1C3F.0020.0004][.1C40.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
33E1 ; [.1C3F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
32C1 ; [.1C3F.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
335A ; [.1C3F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
33E2 ; [.1C40.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
32C2 ; [.1C40.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
335B ; [.1C40.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
33E3 ; [.1C41.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
32C3 ; [.1C41.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
335C ; [.1C41.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
33E4 ; [.1C42.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
32C4 ; [.1C42.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
335D ; [.1C42.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
33E5 ; [.1C43.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
32C5 ; [.1C43.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
335E ; [.1C43.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
33E6 ; [.1C44.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
32C6 ; [.1C44.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
335F ; [.1C44.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
33E7 ; [.1C45.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
32C7 ; [.1C45.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
3360 ; [.1C45.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
33E8 ; [.1C46.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
32C8 ; [.1C46.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
3361 ; [.1C46.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
1F241 ; [*0379.0020.0004][.B35F.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
1F242 ; [*0379.0020.0004][.8E0E.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
1F247 ; [*0379.0020.0004][.B548.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
1F243 ; [*0379.0020.0004][.8049.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
1F245 ; [*0379.0020.0004][.89A6.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
1F248 ; [*0379.0020.0004][.811B.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F240 ; [*0379.0020.0004][.81FC.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
1F244 ; [*0379.0020.0004][.8B60.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
1F246 ; [*0379.0020.0004][.8A91.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
2F00 ; [.C5CF.0020.0004] # KANGXI RADICAL ONE
3192 ; [.C5CF.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK
3280 ; [.C5CF.0020.0006] # CIRCLED IDEOGRAPH ONE
1F229 ; [.C5CF.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E00
319C ; [.8BE6.0020.0014] # IDEOGRAPHIC ANNOTATION FOURTH MARK
3286 ; [.AE03.0020.0006] # CIRCLED IDEOGRAPH SEVEN
3194 ; [.B35F.0020.0014] # IDEOGRAPHIC ANNOTATION THREE MARK
3282 ; [.B35F.0020.0006] # CIRCLED IDEOGRAPH THREE
1F22A ; [.B35F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E09
3196 ; [.B46D.0020.0014] # IDEOGRAPHIC ANNOTATION TOP MARK
32A4 ; [.B46D.0020.0006] # CIRCLED IDEOGRAPH HIGH
3198 ; [.BF75.0020.0014] # IDEOGRAPHIC ANNOTATION BOTTOM MARK
32A6 ; [.BF75.0020.0006] # CIRCLED IDEOGRAPH LOW
319B ; [.8382.0020.0014] # IDEOGRAPHIC ANNOTATION THIRD MARK
2F01 ; [.937A.0020.0004] # KANGXI RADICAL LINE
3197 ; [.CECC.0020.0014] # IDEOGRAPHIC ANNOTATION MIDDLE MARK
32A5 ; [.CECC.0020.0006] # CIRCLED IDEOGRAPH CENTRE
1F22D ; [.CECC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D
2F02 ; [.CF8B.0020.0004] # KANGXI RADICAL DOT
2F03 ; [.AD44.0020.0004] # KANGXI RADICAL SLASH
2F04 ; [.C643.0020.0004] # KANGXI RADICAL SECOND
319A ; [.C643.0020.0014] # IDEOGRAPHIC ANNOTATION SECOND MARK
3288 ; [.9C92.0020.0006] # CIRCLED IDEOGRAPH NINE
2F05 ; [.9D9D.0020.0004] # KANGXI RADICAL HOOK
2F06 ; [.8E0E.0020.0004] # KANGXI RADICAL TWO
3193 ; [.8E0E.0020.0014] # IDEOGRAPHIC ANNOTATION TWO MARK
3281 ; [.8E0E.0020.0006] # CIRCLED IDEOGRAPH TWO
1F214 ; [.8E0E.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C
3284 ; [.BDF1.0020.0006] # CIRCLED IDEOGRAPH FIVE
2F07 ; [.BAE9.0020.0004] # KANGXI RADICAL LID
1F218 ; [.9A8F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4
2F08 ; [.B22F.0020.0004] # KANGXI RADICAL MAN
319F ; [.B22F.0020.0014] # IDEOGRAPHIC ANNOTATION MAN MARK
32AD ; [.AE82.0020.0006] # CIRCLED IDEOGRAPH ENTERPRISE
32A1 ; [.C1F9.0020.0006] # CIRCLED IDEOGRAPH REST
329D ; [.C8A5.0020.0006] # CIRCLED IDEOGRAPH EXCELLENT
2F09 ; [.8DE5.0020.0004] # KANGXI RADICAL LEGS
2F0A ; [.B2E8.0020.0004] # KANGXI RADICAL ENTER
2F0B ; [.80C6.0020.0004] # KANGXI RADICAL EIGHT
3287 ; [.80C6.0020.0006] # CIRCLED IDEOGRAPH EIGHT
3285 ; [.A49F.0020.0006] # CIRCLED IDEOGRAPH SIX
2F0C ; [.9C60.0020.0004] # KANGXI RADICAL DOWN BOX
1F21E ; [.CB49.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-518D
2F0D ; [.A832.0020.0004] # KANGXI RADICAL COVER
32A2 ; [.C132.0020.0006] # CIRCLED IDEOGRAPH COPY
2F0E ; [.837B.0020.0004] # KANGXI RADICAL ICE
2F0F ; [.989A.0020.0004] # KANGXI RADICAL TABLE
2F10 ; [.AF3D.0020.0004] # KANGXI RADICAL OPEN BOX
2F11 ; [.8A71.0020.0004] # KANGXI RADICAL KNIFE
1F220 ; [.8779.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-521D
1F21C ; [.AF1F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-524D
1F239 ; [.9162.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5272
2F12 ; [.A237.0020.0004] # KANGXI RADICAL POWER
3298 ; [.A132.0020.0006] # CIRCLED IDEOGRAPH LABOR
2F13 ; [.8175.0020.0004] # KANGXI RADICAL WRAP
2F14 ; [.8238.0020.0004] # KANGXI RADICAL SPOON
2F15 ; [.8E8F.0020.0004] # KANGXI RADICAL RIGHT OPEN BOX
2F16 ; [.BF01.0020.0004] # KANGXI RADICAL HIDING ENCLOSURE
32A9 ; [.C5D4.0020.0006] # CIRCLED IDEOGRAPH MEDICINE
2F17 ; [.B57B.0020.0004] # KANGXI RADICAL TEN
3038 ; [.B57B.0020.0004] # HANGZHOU NUMERAL TEN
3289 ; [.B57B.0020.0006] # CIRCLED IDEOGRAPH TEN
3039 ; [.AAA8.0020.0004] # HANGZHOU NUMERAL TWENTY
303A ; [.B342.0020.0004] # HANGZHOU NUMERAL THIRTY
32AF ; [.C10A.0020.0006] # CIRCLED IDEOGRAPH ALLIANCE
2F18 ; [.8410.0020.0004] # KANGXI RADICAL DIVINATION
2F19 ; [.9B2A.0020.0004] # KANGXI RADICAL SEAL
329E ; [.C7AF.0020.0006] # CIRCLED IDEOGRAPH PRINT
2F1A ; [.85AC.0020.0004] # KANGXI RADICAL CLIFF
2F1B ; [.B6E4.0020.0004] # KANGXI RADICAL PRIVATE
2F1C ; [.C8E8.0020.0004] # KANGXI RADICAL AGAIN
1F212 ; [.B6A1.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53CC
2F1D ; [.9F2E.0020.0004] # KANGXI RADICAL MOUTH
1F251 ; [.9ED7.0020.0006] # CIRCLED IDEOGRAPH ACCEPT
32A8 ; [.C8E9.0020.0006] # CIRCLED IDEOGRAPH RIGHT
1F22E ; [.C8E9.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53F3
1F234 ; [.9499.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5408
3294 ; [.A8EB.0020.0006] # CIRCLED IDEOGRAPH NAME
1F225 ; [.8816.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5439
3244 ; [.BD6F.0020.0006] # CIRCLED IDEOGRAPH QUESTION
1F23A ; [.C804.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-55B6
2F1E ; [.BC8F.0020.0004] # KANGXI RADICAL ENCLOSURE
3195 ; [.B715.0020.0014] # IDEOGRAPHIC ANNOTATION FOUR MARK
3283 ; [.B715.0020.0006] # CIRCLED IDEOGRAPH FOUR
2F1F ; [.BB2D.0020.0004] # KANGXI RADICAL EARTH
328F ; [.BB2D.0020.0006] # CIRCLED IDEOGRAPH EARTH
319E ; [.8AAF.0020.0014] # IDEOGRAPHIC ANNOTATION EARTH MARK
2F20 ; [.B5A9.0020.0004] # KANGXI RADICAL SCHOLAR
1F224 ; [.B526.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-58F0
2F21 ; [.CE2D.0020.0004] # KANGXI RADICAL GO
2F22 ; [.B7D9.0020.0004] # KANGXI RADICAL GO SLOWLY
2F23 ; [.BE4B.0020.0004] # KANGXI RADICAL EVENING
1F215 ; [.8D1C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-591A
32B0 ; [.C59A.0020.0006] # CIRCLED IDEOGRAPH NIGHT
2F24 ; [.89A7.0020.0004] # KANGXI RADICAL BIG
337D ; [.89A7.0020.001C][.CDCB.0020.001C] # SQUARE ERA NAME TAISYOU
319D ; [.B9F9.0020.0014] # IDEOGRAPHIC ANNOTATION HEAVEN MARK
1F217 ; [.B9F9.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5929
2F25 ; [.AB5E.0020.0004] # KANGXI RADICAL WOMAN
329B ; [.AB5E.0020.0006] # CIRCLED IDEOGRAPH FEMALE
2F26 ; [.D0E1.0020.0004] # KANGXI RADICAL CHILD
1F211 ; [.D0D3.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5B57
32AB ; [.C304.0020.0006] # CIRCLED IDEOGRAPH STUDY
2F27 ; [.A858.0020.0004] # KANGXI RADICAL ROOF
32AA ; [.D0E4.0020.0006] # CIRCLED IDEOGRAPH RELIGION
2F28 ; [.8955.0020.0004] # KANGXI RADICAL INCH
2F29 ; [.C0DE.0020.0004] # KANGXI RADICAL SMALL
2F2A ; [.C8AC.0020.0004] # KANGXI RADICAL LAME
2F2B ; [.B554.0020.0004] # KANGXI RADICAL CORPSE
2F2C ; [.85F7.0020.0004] # KANGXI RADICAL SPROUT
2F2D ; [.B3FD.0020.0004] # KANGXI RADICAL MOUNTAIN
2F2E ; [.87DC.0020.0004] # KANGXI RADICAL RIVER
2F2F ; [.91CB.0020.0004] # KANGXI RADICAL WORK
32A7 ; [.D19D.0020.0006] # CIRCLED IDEOGRAPH LEFT
1F22C ; [.D19D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6
2F30 ; [.989B.0020.0004] # KANGXI RADICAL ONESELF
2F31 ; [.9B91.0020.0004] # KANGXI RADICAL TURBAN
2F32 ; [.90EE.0020.0004] # KANGXI RADICAL DRY
337B ; [.AD6D.0020.001C][.866D.0020.001C] # SQUARE ERA NAME HEISEI
2F33 ; [.C50D.0020.0004] # KANGXI RADICAL SHORT THREAD
3245 ; [.C8EA.0020.0006] # CIRCLED IDEOGRAPH KINDERGARTEN
2F34 ; [.9307.0020.0004] # KANGXI RADICAL DOTTED CLIFF
2F35 ; [.C792.0020.0004] # KANGXI RADICAL LONG STRIDE
2F36 ; [.91E7.0020.0004] # KANGXI RADICAL TWO HANDS
2F37 ; [.C66C.0020.0004] # KANGXI RADICAL SHOOT
2F38 ; [.91CC.0020.0004] # KANGXI RADICAL BOW
2F39 ; [.98AF.0020.0004] # KANGXI RADICAL SNOUT
2F3A ; [.B3FE.0020.0004] # KANGXI RADICAL BRISTLE
2F3B ; [.86F1.0020.0004] # KANGXI RADICAL STEP
1F21D ; [.957C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C
1F250 ; [.8AB1.0020.0006] # CIRCLED IDEOGRAPH ADVANTAGE
2F3C ; [.C178.0020.0004] # KANGXI RADICAL HEART
2F3D ; [.9153.0020.0004] # KANGXI RADICAL HALBERD
2F3E ; [.95D9.0020.0004] # KANGXI RADICAL DOOR
2F3F ; [.B60C.0020.0004] # KANGXI RADICAL HAND
1F210 ; [.B60C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-624B
1F231 ; [.89A6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6253
1F227 ; [.BAEB.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6295
1F22F ; [.CE40.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6307
1F228 ; [.8420.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6355
2F40 ; [.CDDA.0020.0004] # KANGXI RADICAL BRANCH
2F41 ; [.ADCC.0020.0004] # KANGXI RADICAL RAP
2F42 ; [.BD44.0020.0004] # KANGXI RADICAL SCRIPT
3246 ; [.BD44.0020.0006] # CIRCLED IDEOGRAPH SCHOOL
2F43 ; [.8C5E.0020.0004] # KANGXI RADICAL DIPPER
1F21B ; [.A385.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6599
2F44 ; [.9B93.0020.0004] # KANGXI RADICAL AXE
1F21F ; [.C188.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-65B0
2F45 ; [.8E90.0020.0004] # KANGXI RADICAL SQUARE
2F46 ; [.BDD2.0020.0004] # KANGXI RADICAL NOT
2F47 ; [.B272.0020.0004] # KANGXI RADICAL SUN
3290 ; [.B272.0020.0006] # CIRCLED IDEOGRAPH SUN
337E ; [.A8EC.0020.001C][.CE5C.0020.001C] # SQUARE ERA NAME MEIZI
1F219 ; [.C83C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6620
337C ; [.CCD5.0020.001C][.949E.0020.001C] # SQUARE ERA NAME SYOUWA
2F48 ; [.CA8E.0020.0004] # KANGXI RADICAL SAY
2F49 ; [.CA96.0020.0004] # KANGXI RADICAL MOON
328A ; [.CA96.0020.0006] # CIRCLED IDEOGRAPH MOON
1F237 ; [.CA96.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6708
3292 ; [.C8D2.0020.0006] # CIRCLED IDEOGRAPH HAVE
1F236 ; [.C8D2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6709
2F4A ; [.A98A.0020.0004] # KANGXI RADICAL TREE
328D ; [.A98A.0020.0006] # CIRCLED IDEOGRAPH WOOD
3291 ; [.CF58.0020.0006] # CIRCLED IDEOGRAPH STOCK
337F ; [.CF58.0020.001C][.B5B3.0020.001C][.9737.0020.001C][.B4AC.0020.001C] # SQUARE CORPORATION
2F4B ; [.AF4C.0020.0004] # KANGXI RADICAL LACK
2F4C ; [.CE2E.0020.0004] # KANGXI RADICAL STOP
32A3 ; [.CDCB.0020.0006] # CIRCLED IDEOGRAPH CORRECT
2F4D ; [.89B3.0020.0004] # KANGXI RADICAL DEATH
2F4E ; [.B623.0020.0004] # KANGXI RADICAL WEAPON
2F4F ; [.BDD3.0020.0004] # KANGXI RADICAL DO NOT
2E9F ; [.A97A.0020.0004] # CJK RADICAL MOTHER
2F50 ; [.8239.0020.0004] # KANGXI RADICAL COMPARE
2F51 ; [.A71D.0020.0004] # KANGXI RADICAL FUR
2F52 ; [.B5AA.0020.0004] # KANGXI RADICAL CLAN
2F53 ; [.AE99.0020.0004] # KANGXI RADICAL STEAM
2F54 ; [.B6BA.0020.0004] # KANGXI RADICAL WATER
328C ; [.B6BA.0020.0006] # CIRCLED IDEOGRAPH WATER
329F ; [.CFA5.0020.0006] # CIRCLED IDEOGRAPH ATTENTION
1F235 ; [.A6DD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6E80
1F226 ; [.C445.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6F14
2F55 ; [.97BC.0020.0004] # KANGXI RADICAL FIRE
328B ; [.97BC.0020.0006] # CIRCLED IDEOGRAPH FIRE
1F21A ; [.BDE3.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7121
2F56 ; [.CCDE.0020.0004] # KANGXI RADICAL CLAW
2F57 ; [.9046.0020.0004] # KANGXI RADICAL FATHER
2F58 ; [.C51B.0020.0004] # KANGXI RADICAL DOUBLE X
2F59 ; [.ABD3.0020.0004] # KANGXI RADICAL HALF TREE TRUNK
2F5A ; [.AD1C.0020.0004] # KANGXI RADICAL SLICE
2F5B ; [.C397.0020.0004] # KANGXI RADICAL FANG
2F5C ; [.AB21.0020.0004] # KANGXI RADICAL COW
3295 ; [.B980.0020.0006] # CIRCLED IDEOGRAPH SPECIAL
2F5D ; [.B1B4.0020.0004] # KANGXI RADICAL DOG
2F5E ; [.C2C8.0020.0004] # KANGXI RADICAL PROFOUND
2F5F ; [.C99A.0020.0004] # KANGXI RADICAL JADE
2F60 ; [.928E.0020.0004] # KANGXI RADICAL MELON
2F61 ; [.BBE5.0020.0004] # KANGXI RADICAL TILE
2F62 ; [.90BE.0020.0004] # KANGXI RADICAL SWEET
2F63 ; [.B523.0020.0004] # KANGXI RADICAL LIFE
1F222 ; [.B523.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-751F
2F64 ; [.C894.0020.0004] # KANGXI RADICAL USE
2F65 ; [.BA01.0020.0004] # KANGXI RADICAL FIELD
3199 ; [.9955.0020.0014] # IDEOGRAPHIC ANNOTATION FIRST MARK
1F238 ; [.B4C6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7533
329A ; [.A9E0.0020.0006] # CIRCLED IDEOGRAPH MALE
2F66 ; [.ACE2.0020.0004] # KANGXI RADICAL BOLT OF CLOTH
2F67 ; [.AA2F.0020.0004] # KANGXI RADICAL SICKNESS
2F68 ; [.83AC.0020.0004] # KANGXI RADICAL DOTTED TENT
2F69 ; [.810B.0020.0004] # KANGXI RADICAL WHITE
2F6A ; [.ACBB.0020.0004] # KANGXI RADICAL SKIN
2F6B ; [.A8CF.0020.0004] # KANGXI RADICAL DISH
32AC ; [.999B.0020.0006] # CIRCLED IDEOGRAPH SUPERVISE
2F6C ; [.A98D.0020.0004] # KANGXI RADICAL EYE
2F6D ; [.A71E.0020.0004] # KANGXI RADICAL SPEAR
2F6E ; [.B59D.0020.0004] # KANGXI RADICAL ARROW
2F6F ; [.B57D.0020.0004] # KANGXI RADICAL STONE
2F70 ; [.B5B0.0020.0004] # KANGXI RADICAL SPIRIT
3293 ; [.B4AC.0020.0006] # CIRCLED IDEOGRAPH SOCIETY
3297 ; [.CFAD.0020.0006] # CIRCLED IDEOGRAPH CONGRATULATION
1F232 ; [.9BD6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7981
2F71 ; [.B2AC.0020.0004] # KANGXI RADICAL TRACK
2F72 ; [.9498.0020.0004] # KANGXI RADICAL GRAIN
3299 ; [.A83C.0020.0006] # CIRCLED IDEOGRAPH SECRET
2F73 ; [.C301.0020.0004] # KANGXI RADICAL CAVE
1F233 ; [.9F18.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A
2F74 ; [.A23B.0020.0004] # KANGXI RADICAL STAND
2F75 ; [.CF74.0020.0004] # KANGXI RADICAL BAMBOO
3247 ; [.CDBB.0020.0006] # CIRCLED IDEOGRAPH KOTO
2F76 ; [.A821.0020.0004] # KANGXI RADICAL RICE
2F77 ; [.A833.0020.0004] # KANGXI RADICAL SILK
1F221 ; [.CEDC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7D42
2F78 ; [.8F9E.0020.0004] # KANGXI RADICAL JAR
2F79 ; [.BC56.0020.0004] # KANGXI RADICAL NET
2F7A ; [.C4C4.0020.0004] # KANGXI RADICAL SHEEP
2F7B ; [.C975.0020.0004] # KANGXI RADICAL FEATHER
2F7C ; [.A149.0020.0004] # KANGXI RADICAL OLD
2F7D ; [.8DE6.0020.0004] # KANGXI RADICAL AND
2F7E ; [.A19B.0020.0004] # KANGXI RADICAL PLOW
2F7F ; [.8E00.0020.0004] # KANGXI RADICAL EAR
2F80 ; [.C99D.0020.0004] # KANGXI RADICAL BRUSH
2F81 ; [.B2C1.0020.0004] # KANGXI RADICAL MEAT
2F82 ; [.8612.0020.0004] # KANGXI RADICAL MINISTER
2F83 ; [.D0D4.0020.0004] # KANGXI RADICAL SELF
2F84 ; [.CE51.0020.0004] # KANGXI RADICAL ARRIVE
2F85 ; [.9CA1.0020.0004] # KANGXI RADICAL MORTAR
2F86 ; [.B4A3.0020.0004] # KANGXI RADICAL TONGUE
2F87 ; [.87EF.0020.0004] # KANGXI RADICAL OPPOSE
2F88 ; [.CF09.0020.0004] # KANGXI RADICAL BOAT
2F89 ; [.91A3.0020.0004] # KANGXI RADICAL STOPPING
2F8A ; [.B3A0.0020.0004] # KANGXI RADICAL COLOR
2F8B ; [.84B1.0020.0004] # KANGXI RADICAL GRASS
2F8C ; [.9588.0020.0004] # KANGXI RADICAL TIGER
2F8D ; [.872E.0020.0004] # KANGXI RADICAL INSECT
2F8E ; [.C317.0020.0004] # KANGXI RADICAL BLOOD
2F8F ; [.C1BA.0020.0004] # KANGXI RADICAL WALK ENCLOSURE
2F90 ; [.C5D3.0020.0004] # KANGXI RADICAL CLOTHES
2F91 ; [.C3B8.0020.0004] # KANGXI RADICAL WEST
2F92 ; [.99FE.0020.0004] # KANGXI RADICAL SEE
2F93 ; [.9AB8.0020.0004] # KANGXI RADICAL HORN
1F216 ; [.9B6C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-89E3
2F94 ; [.C3F5.0020.0004] # KANGXI RADICAL SPEECH
2F95 ; [.924B.0020.0004] # KANGXI RADICAL VALLEY
2F96 ; [.8C5F.0020.0004] # KANGXI RADICAL BEAN
2F97 ; [.B59F.0020.0004] # KANGXI RADICAL PIG
2F98 ; [.CE56.0020.0004] # KANGXI RADICAL BADGER
2F99 ; [.81CA.0020.0004] # KANGXI RADICAL SHELL
3296 ; [.844F.0020.0006] # CIRCLED IDEOGRAPH FINANCIAL
1F223 ; [.8E87.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9
32AE ; [.D0A3.0020.0006] # CIRCLED IDEOGRAPH RESOURCE
2F9A ; [.86F6.0020.0004] # KANGXI RADICAL RED
2F9B ; [.D138.0020.0004] # KANGXI RADICAL RUN
1F230 ; [.D138.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8D70
2F9C ; [.D141.0020.0004] # KANGXI RADICAL FOOT
2F9D ; [.B4CA.0020.0004] # KANGXI RADICAL BODY
2F9E ; [.85ED.0020.0004] # KANGXI RADICAL CART
2F9F ; [.C17D.0020.0004] # KANGXI RADICAL BITTER
2FA0 ; [.8616.0020.0004] # KANGXI RADICAL MORNING
2FA1 ; [.8858.0020.0004] # KANGXI RADICAL WALK
1F22B ; [.C8C4.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-904A
329C ; [.B5EC.0020.0006] # CIRCLED IDEOGRAPH SUITABLE
2FA2 ; [.C682.0020.0004] # KANGXI RADICAL CITY
2FA3 ; [.C8D6.0020.0004] # KANGXI RADICAL WINE
2FA4 ; [.82F0.0020.0004] # KANGXI RADICAL DISTINGUISH
2FA5 ; [.A21E.0020.0004] # KANGXI RADICAL VILLAGE
2FA6 ; [.9B96.0020.0004] # KANGXI RADICAL GOLD
328E ; [.9B96.0020.0006] # CIRCLED IDEOGRAPH METAL
2FA7 ; [.CCB5.0020.0004] # KANGXI RADICAL LONG
2FA8 ; [.A7B4.0020.0004] # KANGXI RADICAL GATE
2FA9 ; [.904E.0020.0004] # KANGXI RADICAL MOUND
2FAA ; [.A24C.0020.0004] # KANGXI RADICAL SLAVE
2FAB ; [.D014.0020.0004] # KANGXI RADICAL SHORT TAILED BIRD
2FAC ; [.C976.0020.0004] # KANGXI RADICAL RAIN
2FAD ; [.B063.0020.0004] # KANGXI RADICAL BLUE
2FAE ; [.8EB9.0020.0004] # KANGXI RADICAL WRONG
2FAF ; [.A882.0020.0004] # KANGXI RADICAL FACE
2FB0 ; [.9173.0020.0004] # KANGXI RADICAL LEATHER
2FB1 ; [.BC9A.0020.0004] # KANGXI RADICAL TANNED LEATHER
2FB2 ; [.9C9A.0020.0004] # KANGXI RADICAL LEEK
2FB3 ; [.C745.0020.0004] # KANGXI RADICAL SOUND
2FB4 ; [.C59E.0020.0004] # KANGXI RADICAL LEAF
32A0 ; [.C084.0020.0006] # CIRCLED IDEOGRAPH ITEM
2FB5 ; [.8F57.0020.0004] # KANGXI RADICAL WIND
2FB6 ; [.8EBA.0020.0004] # KANGXI RADICAL FLY
2FB7 ; [.B58A.0020.0004] # KANGXI RADICAL EAT
2FB8 ; [.B60F.0020.0004] # KANGXI RADICAL HEAD
2FB9 ; [.C044.0020.0004] # KANGXI RADICAL FRAGRANT
2FBA ; [.A690.0020.0004] # KANGXI RADICAL HORSE
2FBB ; [.924E.0020.0004] # KANGXI RADICAL BONE
2FBC ; [.9124.0020.0004] # KANGXI RADICAL TALL
2FBD ; [.830C.0020.0004] # KANGXI RADICAL HAIR
2FBE ; [.8C65.0020.0004] # KANGXI RADICAL FIGHT
2FBF ; [.85BA.0020.0004] # KANGXI RADICAL SACRIFICIAL WINE
2FC0 ; [.9176.0020.0004] # KANGXI RADICAL CAULDRON
2FC1 ; [.934D.0020.0004] # KANGXI RADICAL GHOST
2FC2 ; [.C936.0020.0004] # KANGXI RADICAL FISH
2FC3 ; [.AABB.0020.0004] # KANGXI RADICAL BIRD
2FC4 ; [.A552.0020.0004] # KANGXI RADICAL SALT
2FC5 ; [.A57C.0020.0004] # KANGXI RADICAL DEER
2FC6 ; [.A6C0.0020.0004] # KANGXI RADICAL WHEAT
2FC7 ; [.A687.0020.0004] # KANGXI RADICAL HEMP
2FC8 ; [.96C2.0020.0004] # KANGXI RADICAL YELLOW
2FC9 ; [.B656.0020.0004] # KANGXI RADICAL MILLET
2FCA ; [.94F2.0020.0004] # KANGXI RADICAL BLACK
2FCB ; [.CE4C.0020.0004] # KANGXI RADICAL EMBROIDERY
2FCC ; [.A87C.0020.0004] # KANGXI RADICAL FROG
2FCD ; [.8BF6.0020.0004] # KANGXI RADICAL TRIPOD
2FCE ; [.9261.0020.0004] # KANGXI RADICAL DRUM
2FCF ; [.B659.0020.0004] # KANGXI RADICAL RAT
2FD0 ; [.8237.0020.0004] # KANGXI RADICAL NOSE
2FD1 ; [.AE64.0020.0004] # KANGXI RADICAL EVEN
2FD2 ; [.86F0.0020.0004] # KANGXI RADICAL TOOTH
2FD3 ; [.A4C6.0020.0004] # KANGXI RADICAL DRAGON
2FD4 ; [.9336.0020.0004] # KANGXI RADICAL TURTLE
2EF3 ; [.9317.0020.0004] # CJK RADICAL C-SIMPLIFIED TURTLE
2FD5 ; [.CAB5.0020.0004] # KANGXI RADICAL FLUTE
F967 ; [.8424.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
FA70 ; [.839A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70
F905 ; [.87F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905
2F801 ; [.BC07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.89E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E
2F800 ; [.A23E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800
2F802 ; [.C5F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F802
F91B ; [.A613.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B
F9BA ; [.A17A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA
F977 ; [.A342.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977
F9FD ; [.B4F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD
2F819 ; [.837C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F819
F9A8 ; [.A453.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8
2F804 ; [.AA66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804
FA73 ; [.C1BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73
F92D ; [.A084.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D
F9B5 ; [.A245.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.BDFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.BDFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805
2F806 ; [.BB64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806
F965 ; [.82F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965
2F807 ; [.839E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807
F9D4 ; [.A624.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4
2F808 ; [.CB31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808
2F809 ; [.81DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809
2F80B ; [.C085.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.A356.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.B3C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.B3C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A
FA0C ; [.BE12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.871C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.A86B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.A86B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F80F ; [.BB34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F
2F810 ; [.96DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F810
2F814 ; [.AA3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814
FA72 ; [.B186.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72
F978 ; [.A338.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978
F9D1 ; [.A49F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1
2F811 ; [.9D2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.98F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F815 ; [.CB49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815
2F8D2 ; [.A744.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.A872.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F817 ; [.B2A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817
2F818 ; [.CA20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F81A ; [.8C16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A
FA71 ; [.9FAC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71
2F81B ; [.9FAC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B
F92E ; [.A1CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E
F979 ; [.A329.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979
F955 ; [.A412.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955
F954 ; [.A3E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954
FA15 ; [.BEA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15
2F81D ; [.AF3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D
2F81E ; [.B244.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.AFFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.AFFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.A38C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C
F9DD ; [.A23F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.88A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.9EE2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F821 ; [.A65E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821
2F822 ; [.9162.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822
2F823 ; [.8564.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823
F9C7 ; [.A474.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7
F98A ; [.A237.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A
F99D ; [.A38D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D
2F992 ; [.A131.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992
FA76 ; [.C87B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.C87B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.A86E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.A86E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.A17D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952
F92F ; [.A139.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F
FA34 ; [.B039.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.B039.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827
F97F ; [.A284.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F
FA77 ; [.B486.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.B486.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.8176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829
2F82A ; [.88AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A
F963 ; [.81C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.81C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B
F9EB ; [.AA7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F82C ; [.9735.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.81B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.81B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D
2F82E ; [.83E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F82F ; [.9856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.A610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F830 ; [.985E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830
2F831 ; [.B068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.B068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.B068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833
F96B ; [.8464.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B
2F836 ; [.984E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836
2F837 ; [.B77F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837
F906 ; [.9D21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.9AED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839
2F83A ; [.86F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A
2F83B ; [.C50F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B
F9DE ; [.A23C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.A3EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.BE4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D
F980 ; [.A5C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980
2F83E ; [.866F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.CF0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F
2F83C ; [.C009.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83C
2F840 ; [.8D98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840
F99E ; [.C468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F841 ; [.A8A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F841
2F842 ; [.B912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842
2F843 ; [.AE8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843
FA79 ; [.B968.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79
2F844 ; [.BFC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844
2F845 ; [.B434.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.B434.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.A06A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.9747.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.9747.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.9494.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.9494.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F848 ; [.86B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848
2F849 ; [.CC0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849
FA0D ; [.95EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D
2F84A ; [.C52C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A
FA7B ; [.BBEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B
FA37 ; [.B8FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37
2F84C ; [.B8FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C
2F84E ; [.9460.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84E
FA38 ; [.AEBB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38
2F84F ; [.AC52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F
F9A9 ; [.A404.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F84B ; [.BB20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B
2F84D ; [.BB21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84D
2F855 ; [.C1C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.CE0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F854 ; [.BB35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854
2F857 ; [.81A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857
2F856 ; [.887F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856
FA39 ; [.AD95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39
FA10 ; [.CEEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10
FA7C ; [.CEEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C
F96C ; [.B352.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.A952.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A
2F858 ; [.8B3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858
FA7D ; [.8F25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D
F94A ; [.A1A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A
F942 ; [.A4EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942
2F851 ; [.D00A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851
2F85A ; [.A6BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A
2F85B ; [.95AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B
2F85C ; [.8F78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C
2F85D ; [.8D1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D
2F85E ; [.A7F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E
FA7E ; [.C42B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.A9D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.AEA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.81F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.B49A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.AB5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981
2F865 ; [.AD48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865
2F862 ; [.9802.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862
2F863 ; [.C92A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863
2F864 ; [.BB66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864
FA80 ; [.826B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F866 ; [.905C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866
2F986 ; [.C83F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986
2F869 ; [.B221.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869
FA81 ; [.888D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81
2F86A ; [.A0ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A
2F86B ; [.A0ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B
FA04 ; [.CC49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04
2F86D ; [.CA24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D
2F86E ; [.CE90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E
F95F ; [.AB0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F
F9AA ; [.AB0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA
2F86F ; [.AB0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F
F9BC ; [.A35E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC
2F870 ; [.819A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870
2F872 ; [.B611.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872
2F873 ; [.9A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873
2F875 ; [.C8AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875
F9BD ; [.AAC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.BB13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877
F94B ; [.A5D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B
FA3B ; [.84DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B
F9DF ; [.A5D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF
FA3C ; [.85F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C
2F878 ; [.85F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878
2F87A ; [.AEE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A
2F879 ; [.C218.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879
F9D5 ; [.A629.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5
2F87C ; [.C438.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C
F921 ; [.A0B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921
2F87F ; [.D096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F
2F87E ; [.8B4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87E
2F880 ; [.8565.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880
2F9F4 ; [.BE9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4
F9AB ; [.A452.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB
2F881 ; [.C33F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F882 ; [.85D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882
2F884 ; [.C372.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F885 ; [.B6BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885
2F886 ; [.A74C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886
2F887 ; [.8F26.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887
F98E ; [.AA90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E
FA01 ; [.8CB0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88B ; [.839D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B
2F88C ; [.826C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C
2F88D ; [.B673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.A2D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.A10D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.A10D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA82 ; [.8093.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82
FA0B ; [.A051.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B
FA83 ; [.C6DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83
F982 ; [.A537.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982
2F890 ; [.91E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890
F943 ; [.AB44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943
2F894 ; [.B94A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894
2F895 ; [.B94A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895
2F874 ; [.8A3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874
2F899 ; [.C1BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.8458.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84
2F89A ; [.8B8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A
F9D8 ; [.A5E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8
2F89C ; [.8C26.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89C
F966 ; [.9060.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966
FA85 ; [.C52E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F89D ; [.B23C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.CE53.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.AAAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3
2F89F ; [.9F9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89F
F960 ; [.AB5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.A2CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC
FA6B ; [.9741.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B
2F8A0 ; [.CA21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
FA3D ; [.972E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.972E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
2F8A5 ; [.8CF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
FA86 ; [.BC5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86
F9B9 ; [.8DAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9
FA88 ; [.C9CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88
F9D9 ; [.A276.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9
2F8A6 ; [.8883.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.96B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.96B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA87 ; [.B516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87
2F8A8 ; [.B516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
FA8A ; [.80BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A
FA3E ; [.9E4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E
2F8AA ; [.A500.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
FA3F ; [.CBF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.CBF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.CBF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
F98F ; [.A2E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F
2F8AD ; [.8F40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
2F8AE ; [.847C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
2F8AC ; [.C030.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
2F8AF ; [.A7D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
FA40 ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40
FA8B ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B
2F8B0 ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
F90D ; [.A0EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D
2F8B1 ; [.A0EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
F990 ; [.A324.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990
2F8B2 ; [.866D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
2F8B3 ; [.9945.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
F9D2 ; [.A591.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.89D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F8B4 ; [.9F3F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B4
2F8B5 ; [.819F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.A05F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925
F95B ; [.A9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B
FA02 ; [.B86F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.80E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
2F8BA ; [.AD49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
F973 ; [.B600.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973
2F8B9 ; [.BC1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.9D69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
2F8BB ; [.B4A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
F9A4 ; [.AA99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4
2F8BC ; [.B397.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
F975 ; [.8DA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.C433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.C93D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D
2F8C0 ; [.C40D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0
2F8BD ; [.9865.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD
FA8E ; [.B76C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E
2F8BF ; [.9BD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
FA8F ; [.8391.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F
2F8C3 ; [.A914.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
2F8C6 ; [.9AD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6
2F8C4 ; [.9A82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C4
F991 ; [.AA9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991
2F8C5 ; [.9712.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
F930 ; [.A55B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930
FA41 ; [.A8D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.A8D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.808D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90
2F8C9 ; [.9C49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F969 ; [.B682.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969
F9BE ; [.A385.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE
F983 ; [.A5CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983
FA42 ; [.98C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42
2F8CB ; [.98D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB
F9E0 ; [.C689.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0
2F8CD ; [.9BCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
FA12 ; [.B07B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.B07B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91
F9C5 ; [.CAC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5
FA43 ; [.B654.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.B654.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
2F8D5 ; [.9BDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D5
FA06 ; [.81AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06
F98B ; [.A285.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B
F901 ; [.91C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8CC ; [.B62E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
2F8D4 ; [.D171.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
F929 ; [.A11F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.A11F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.A11F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.BC6C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.BC6C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
2F8DA ; [.D0F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA
F9E1 ; [.A2BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.8308.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.CCBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.AE88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
F9C8 ; [.876A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8
2F8E0 ; [.97FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
F9F4 ; [.A3B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.A490.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9
2F8DF ; [.92B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF
F9DA ; [.A259.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA
2F8E5 ; [.81F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5
2F8E1 ; [.B37D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E1
F97A ; [.A32A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.A76C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.A76C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
2F8E4 ; [.808A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E4
F9E2 ; [.A1DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2
2F8E6 ; [.D097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6
2F8E8 ; [.CC12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
2F8E9 ; [.C536.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9
2F8EA ; [.90BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA
F914 ; [.A176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914
F95C ; [.A176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C
F9BF ; [.A176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF
F94C ; [.A504.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C
2F8EB ; [.B4A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB
F931 ; [.A562.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931
2F8ED ; [.CEB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
F91D ; [.A0D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D
2F8EF ; [.889D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
2F8F1 ; [.C249.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
2F8F3 ; [.B7FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
F98C ; [.A286.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C
FA95 ; [.89B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95
2F8F4 ; [.BD36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4
F9A5 ; [.A31E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5
F970 ; [.B3CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970
FA96 ; [.B3CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96
2F8F5 ; [.B3CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
2F8F6 ; [.AFE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6
2F8FA ; [.8E7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
2F8FE ; [.AEE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE
F972 ; [.8614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.C3F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.A837.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968
2F8FD ; [.81F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD
F9E3 ; [.AA4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3
2F8FF ; [.BDDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF
F915 ; [.A66A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.8C3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F907 ; [.AD78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907
2F900 ; [.ABCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.9477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.A129.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.93D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.93D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.9BCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.AACC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.A3BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5
F94D ; [.A1B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D
F9D6 ; [.A62B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6
2F90E ; [.C3DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.CF91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.911B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.C3E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909
F9CB ; [.A45B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.AA85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC
2F90C ; [.8B4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C
FA99 ; [.D099.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.D099.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.9618.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904
FA98 ; [.C781.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA98
F94E ; [.A51A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E
FA47 ; [.942D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47
FA9A ; [.942D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A
F992 ; [.A2D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992
2F90F ; [.85DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F912 ; [.8F27.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912
F922 ; [.A0FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922
F984 ; [.A5EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984
2F915 ; [.C823.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915
FA9B ; [.9C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B
2F914 ; [.9C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914
2F913 ; [.CAB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913
2F917 ; [.AF3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917
2F835 ; [.96F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835
2F919 ; [.CFEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F919
2F918 ; [.CB3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918
F9FB ; [.CE5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.B8F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A
F99F ; [.A39A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.A157.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916
2F91C ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C
F993 ; [.A318.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993
FA48 ; [.CF92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.CF92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C
2F91E ; [.88BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E
F9C0 ; [.A366.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0
F9EE ; [.A3CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE
F932 ; [.A53F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932
F91E ; [.A0FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E
2F920 ; [.891A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920
FA49 ; [.CCFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA49
FA9E ; [.9DDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.9DDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921
2F922 ; [.CC22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F922
F946 ; [.A133.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946
2F924 ; [.BE7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924
2F925 ; [.81E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925
FA9F ; [.8E7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F9FA ; [.D00D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA
F92B ; [.A10A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B
FA16 ; [.CF5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16
FAA0 ; [.CF5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0
F9A7 ; [.A3AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7
2F928 ; [.B86C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928
F961 ; [.A5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.A5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F929 ; [.BC50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929
2F92B ; [.CA9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B
F9AD ; [.A410.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.A66F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.A226.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.A465.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.D199.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92E ; [.89CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92E
2F92F ; [.C94D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F
F9AE ; [.C813.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE
FAA1 ; [.CD92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1
2F930 ; [.CD92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930
2F931 ; [.B84D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931
F994 ; [.A303.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994
F9EF ; [.A3CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF
2F932 ; [.B0BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932
FAA2 ; [.8884.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA2
2F934 ; [.B309.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F934
FAA3 ; [.9628.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3
2F936 ; [.CB3F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936
F9CD ; [.A463.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.8DA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976
F962 ; [.C6B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962
2F938 ; [.C6B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938
F9E5 ; [.A26F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5
2F93A ; [.C98A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A
FAA4 ; [.92C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4
FAA5 ; [.BD3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5
F9C1 ; [.A369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1
F90E ; [.A0B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E
FA17 ; [.C6A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.C6A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7 ; [.B546.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7
F933 ; [.A533.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933
FAA8 ; [.CE08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.CE08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.B53E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F945 ; [.CD43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945
2F946 ; [.CD44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946
2F947 ; [.CD44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947
FAAA ; [.CD35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA
FAA9 ; [.9D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9
2F948 ; [.9D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948
2F94A ; [.860C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A
FA9D ; [.AFD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D
2F94E ; [.C1C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E
F9CE ; [.A467.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.A586.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.A586.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.81C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.A1A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947
FAAB ; [.BA14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB
2F950 ; [.BA14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950
F964 ; [.ABDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964
F985 ; [.A29F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985
FA18 ; [.A21D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18
FA4C ; [.B4AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C
FA4E ; [.AE35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.CE3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA4F ; [.C8F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F
FA50 ; [.D153.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.D153.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.CFAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51
FA19 ; [.B4F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.C062.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A
F93C ; [.A580.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C
FA52 ; [.97D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52
FA53 ; [.CD54.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53
FA1B ; [.900A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.900A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956
F9B6 ; [.A22F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6
F995 ; [.AA91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995
2F957 ; [.B64A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957
F956 ; [.A1CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956
FA54 ; [.9267.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54
2F959 ; [.9267.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959
2F95A ; [.98E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A
2F95B ; [.BD69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B
FA55 ; [.BAFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55
FAAC ; [.BA57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC
F9F7 ; [.A23B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7
2F95F ; [.AD6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F
F9F8 ; [.A265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8
FA56 ; [.9B51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56
FAAD ; [.9B51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD
2F962 ; [.CFF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962
2F963 ; [.CF80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963
F9A6 ; [.A2F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6
F944 ; [.A4D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944
FAAE ; [.A1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE
F9F9 ; [.A266.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.9C0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D
2F966 ; [.81EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966
FA03 ; [.B929.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03
2F969 ; [.B36D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F969
F97B ; [.A335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B
2F968 ; [.9A87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968
2F96A ; [.98C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A
F9CF ; [.AB29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF
F96A ; [.B844.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.A1B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F
FAAF ; [.B94E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF
2F96C ; [.8211.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C
F93D ; [.A5E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D
F957 ; [.A432.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957
2F96E ; [.D0A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E
F996 ; [.A31B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996
FA57 ; [.A31B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57
FAB0 ; [.A31B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0
2F96F ; [.D113.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96F
FA58 ; [.9BE4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58
F950 ; [.A5DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950
FA59 ; [.8E69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59
2F970 ; [.B38F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970
FAB1 ; [.AD85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1
FA5A ; [.B657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.A1FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6
2F976 ; [.85DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976
F90F ; [.A64E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F
2F978 ; [.C504.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978
F9AF ; [.A422.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.C975.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E
2F979 ; [.80A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979
F934 ; [.A149.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934
FA5B ; [.CD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.CD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.CD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A
F9B0 ; [.A424.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0
2F97D ; [.AD69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97D
F997 ; [.A2F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997
2F97F ; [.88C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F
F945 ; [.A4DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945
F953 ; [.A167.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.A9B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.C9A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F983 ; [.8934.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F983
2F985 ; [.ACD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985
F926 ; [.A078.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926
F9F6 ; [.A3D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6
FA5C ; [.8772.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F893 ; [.C928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.C928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B
2F98C ; [.BF1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C
FA6D ; [.92D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D
F97C ; [.A327.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C
FA5D ; [.84B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D
FA5E ; [.84B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E
2F990 ; [.C99E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F98F ; [.AE85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F
2F991 ; [.CDDD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.960B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.8E93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.C39B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.B328.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.B328.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.9F4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996
2F999 ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999
2F99C ; [.BDDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C
F9FE ; [.84F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.96AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F9A0 ; [.AD7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0
2F99A ; [.B27F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A
2F99B ; [.9B40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99B
2F99D ; [.A713.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D
F93E ; [.A57A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E
2F9A1 ; [.9CF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.9E06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.845F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
2F99E ; [.8B10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E
FAB4 ; [.9614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4
F958 ; [.A426.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.A673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918
F96E ; [.C5A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E
FA5F ; [.CD36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.CD36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F999 ; [.A2D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999
2F9A8 ; [.AD86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
2F9A9 ; [.9BB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9
F9C2 ; [.A37C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2
2F9AA ; [.8966.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA
2F9AC ; [.B30B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
F923 ; [.A0C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923
F9F0 ; [.A3FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0
F935 ; [.A53C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935
FA20 ; [.B110.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA20
F91F ; [.A0D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F
F910 ; [.A656.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910
2F9B3 ; [.AB6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
F936 ; [.A555.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936
2F9B4 ; [.A555.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
2F9B5 ; [.9FD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
2F9B6 ; [.BF2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6
2F9B8 ; [.AEF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B8
2F9B7 ; [.86AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
2F9BA ; [.AD87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA
2F9B9 ; [.CA2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9
2F9BC ; [.8BD5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
2F9BD ; [.CF66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD
FAB5 ; [.CACA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5
2F9BB ; [.CACA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB
2F9BE ; [.88A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BE
F911 ; [.A64D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911
2F9C0 ; [.9359.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0
2F9C1 ; [.C072.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1
F927 ; [.A07D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927
FA08 ; [.C1BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F9C3 ; [.D03A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C3
2F9C4 ; [.C5D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
F9A0 ; [.A39F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0
F9E7 ; [.A229.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7
2F9C6 ; [.A468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6
2F9C7 ; [.B6C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7
F9E8 ; [.A2C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8
F912 ; [.A661.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912
2F9C9 ; [.C444.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9
FA60 ; [.94E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.AFA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6
F924 ; [.A0CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924
FAB7 ; [.907C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7
FA0A ; [.99FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A
FA61 ; [.B5D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61
FAB8 ; [.B5D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8
2F9CF ; [.8692.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
F96F ; [.B6D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F
F9A1 ; [.B6D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1
FAB9 ; [.8BAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9
FABB ; [.B08C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB
F97D ; [.A34C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D
F941 ; [.A63B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941
FABE ; [.C9F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE
2F9D0 ; [.C9F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
FA22 ; [.CF69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22
FABA ; [.CF69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA
F95D ; [.AB81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D
FABD ; [.AB81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD
FA62 ; [.C5BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62
FABC ; [.C5BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC
FA63 ; [.9BBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63
FABF ; [.9BBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF
F9FC ; [.B608.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC
F95A ; [.8C98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A
FAC0 ; [.8304.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0
2F9D1 ; [.8304.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
F900 ; [.AE8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900
2F9D2 ; [.B59F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F9D4 ; [.92E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
2F9D5 ; [.827C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
F948 ; [.A588.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948
F903 ; [.9963.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903
FA64 ; [.835E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64
FA65 ; [.CC04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65
FAC1 ; [.CC04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1
2F9D6 ; [.90FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
2F9D7 ; [.AE8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9DB ; [.99CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
2F9DA ; [.80E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.A589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937
2F9DC ; [.AD12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC
F902 ; [.85ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902
2F9DE ; [.B25D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE
F998 ; [.AAA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998
F9D7 ; [.A632.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7
FAC2 ; [.B644.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2
2F9DF ; [.B644.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
FA07 ; [.901F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07
F98D ; [.A2B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D
2F98D ; [.8885.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D
F971 ; [.8616.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971
FA66 ; [.8857.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66
F99A ; [.A2CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A
FA25 ; [.C6BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.C6BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67
FAC3 ; [.86DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3
F9C3 ; [.A364.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3
F913 ; [.A657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913
2F9E2 ; [.AE81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2
F92C ; [.A107.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C
FA2E ; [.A108.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E
2F9E3 ; [.AD74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3
FA26 ; [.8C50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26
2F9E4 ; [.D09D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4
2F9E6 ; [.85D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6
F919 ; [.A159.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919
FAC4 ; [.B778.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4
F9B7 ; [.A232.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7
F9E9 ; [.A21E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9
F97E ; [.A34A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.9B96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A
F9B1 ; [.A42E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1
2F9E7 ; [.83E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
FAC5 ; [.C1CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5
2F9EA ; [.8395.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
2F9E8 ; [.C2BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
2F9E9 ; [.961F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9
F93F ; [.A59D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F
F99B ; [.A31F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B
2F9EB ; [.AFA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB
2F9EC ; [.CB58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC
2F9EE ; [.9E42.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
F986 ; [.A5BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986
2F9F0 ; [.B3FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0
F9C6 ; [.B2FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.A518.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.9A78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.A418.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959
F9D3 ; [.A574.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3
FAC6 ; [.CF90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6
F9DC ; [.A4BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9F1 ; [.A3C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1
FA2F ; [.A288.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F
F9B8 ; [.A28E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8
2F9F3 ; [.AEFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3
F9EA ; [.A206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA
FA68 ; [.A9EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68
FAC7 ; [.A9EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7
F9B2 ; [.A430.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.A17E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949
2F9F5 ; [.CB01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
F938 ; [.A5AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938
F9B3 ; [.A448.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3
FA1C ; [.9C4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.9C4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8
FAC9 ; [.8121.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC9
2F9FA ; [.82B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA
FA69 ; [.C075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69
FACA ; [.C075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA
FACB ; [.8D88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACB
2F9FE ; [.8D88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FE
2F9FF ; [.8D88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FF
F9B4 ; [.A451.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4
2FA00 ; [.AD6C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00
FA6A ; [.AD55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A
FACC ; [.AD55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC
F9D0 ; [.A1BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0
2FA02 ; [.9806.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02
FA2A ; [.8E89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A
FA2B ; [.B734.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B
FA2C ; [.92D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C
2FA04 ; [.8DCB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04
2FA05 ; [.CACE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05
2FA06 ; [.8195.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06
F91A ; [.A67A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A
2FA07 ; [.BB6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07
F987 ; [.A21A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987
FACD ; [.CD7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD
2FA0A ; [.CD7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
F939 ; [.A55A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939
2FA0B ; [.990A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B
F9F2 ; [.A3DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2
2FA0C ; [.99A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C
2FA0F ; [.ACDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F
FA2D ; [.94EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D
F93A ; [.A5B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A
F920 ; [.A60F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920
F940 ; [.A57C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940
F988 ; [.A2A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988
F9F3 ; [.A3DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FA15 ; [.A687.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15
F989 ; [.A1FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989
2FA17 ; [.CE4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17
2FA18 ; [.A86D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18
2FA19 ; [.CE04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA19
2FA1A ; [.A84E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A
2FA1B ; [.8F2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B
2FA1C ; [.8237.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
FAD8 ; [.8DD6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8
F9C4 ; [.A4C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4
FAD9 ; [.AC0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9
F907 ; [.9336.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907
F908 ; [.9336.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908
FACE ; [.9336.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE
ENTRY
};
Unicode/Collate/Locale/dsb.pl 0000644 00000007145 15033552504 0012032 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0107 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0063 0301 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0063 0341 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0106 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0043 0301 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0043 0341 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
011B ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CARON
0065 030C ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CARON
0045 030C ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CARON
0063 0068 ; [.1D19.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0063 0048 ; [.1D19.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H>
0043 0068 ; [.1D19.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1D19.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
0142 ; [.1D76.0020.0002] # LATIN SMALL LETTER L WITH STROKE
006C 0335 ; [.1D76.0020.0002] # LATIN SMALL LETTER L WITH STROKE
0141 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE
004C 0335 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE
0144 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE
0155 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH ACUTE
0072 0301 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH ACUTE
0072 0341 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH ACUTE
0154 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH ACUTE
0052 0301 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH ACUTE
0052 0341 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH ACUTE
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
015B ; [.1E73.0020.0002] # LATIN SMALL LETTER S WITH ACUTE
0073 0301 ; [.1E73.0020.0002] # LATIN SMALL LETTER S WITH ACUTE
0073 0341 ; [.1E73.0020.0002] # LATIN SMALL LETTER S WITH ACUTE
015A ; [.1E73.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE
0053 0301 ; [.1E73.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE
0053 0341 ; [.1E73.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE
017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
017A ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE
007A 0301 ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE
007A 0341 ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE
0179 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE
005A 0301 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE
005A 0341 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE
ENTRY
};
Unicode/Collate/Locale/ha.pl 0000644 00000001624 15033552504 0011646 0 ustar 00 +{
locale_version => 1.25,
# b-hook, d-hook, k-hook, y-hook don't require tailoring
entry => <<'ENTRY', # for DUCET v9.0.0
0073 0068 ; [.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H>
0053 0068 ; [.1E72.0020.0007] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H>
0053 0048 ; [.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER H>
0074 0073 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER S>
0054 0073 ; [.1E96.0020.0007] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER S>
0054 0053 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER S>
02BC 0079 ; [.1F17.0020.0003] # <MODIFIER LETTER APOSTROPHE, LATIN SMALL LETTER Y>
02BC 0059 ; [.1F17.0020.0009] # <MODIFIER LETTER APOSTROPHE, LATIN CAPITAL LETTER Y>
0027 0079 ; [.1F17.0020.0004] # <APOSTROPHE, LATIN SMALL LETTER Y>
0027 0059 ; [.1F17.0020.000A] # <APOSTROPHE, LATIN CAPITAL LETTER Y>
ENTRY
};
Unicode/Collate/Locale/mr.pl 0000644 00000001516 15033552504 0011674 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA
0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM
0933 ; [.269E.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA
0934 ; [.269E.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA
0915 094D 0937 ; [.269E.0020.0002][.FFF2.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA>
091C 094D 091E ; [.269E.0020.0002][.FFF3.0000.0000] # <DEVANAGARI LETTER JA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER NYA>
0939 ; [.269E.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA
ENTRY
};
Unicode/Collate/Locale/ee.pl 0000644 00000004773 15033552504 0011657 0 ustar 00 +{
locale_version => 1.25,
# d-tail, open-e, f-hook, gamma, eng, open-o, v-hook don't require tailoring
entry => <<'ENTRY', # for DUCET v9.0.0
0302 ; [.0000.0029.0002] # COMBINING CIRCUMFLEX ACCENT
00E2 ; [.1C47.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX
00C2 ; [.1C47.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
00EA ; [.1CAA.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
00EE ; [.1D32.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX
00CE ; [.1D32.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
00F4 ; [.1DDD.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1DDD.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
00FB ; [.1EB5.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX
00DB ; [.1EB5.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0177 ; [.1F0B.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX
0176 ; [.1F0B.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
0064 007A ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z>
0044 007A ; [.1C90.0020.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z>
0044 005A ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z>
0067 0062 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER B>
0047 0062 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER B>
0047 0042 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER B>
0078 ; [.1D19.0020.0002] # LATIN SMALL LETTER X
0058 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER X
006B 0070 ; [.1D66.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER P>
004B 0070 ; [.1D66.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER P>
004B 0050 ; [.1D66.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER P>
006E 0079 ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y>
004E 0079 ; [.1DBA.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y>
004E 0059 ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y>
0074 0073 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER S>
0054 0073 ; [.1E96.0020.0007] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER S>
0054 0053 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER S>
ENTRY
};
Unicode/Collate/Locale/sq.pl 0000644 00000007277 15033552504 0011713 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00E7 ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
0063 0327 ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
00C7 ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA
0043 0327 ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA
0064 0068 ; [.1CA9.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER H>
0064 0048 ; [.1CA9.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER H>
0044 0068 ; [.1CA9.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER H>
0044 0048 ; [.1CA9.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER H>
00EB ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS
0065 0308 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS
00CB ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS
0045 0308 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS
0067 006A ; [.1D17.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER J>
0067 004A ; [.1D17.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER J>
0047 006A ; [.1D17.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER J>
0047 004A ; [.1D17.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER J>
006C 006C ; [.1DA9.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L>
006C 004C ; [.1DA9.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L>
004C 006C ; [.1DA9.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L>
004C 004C ; [.1DA9.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L>
006E 006A ; [.1DDC.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER J>
006E 004A ; [.1DDC.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER J>
004E 006A ; [.1DDC.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER J>
004E 004A ; [.1DDC.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER J>
0072 0072 ; [.1E70.0020.0002] # <LATIN SMALL LETTER R, LATIN SMALL LETTER R>
0072 0052 ; [.1E70.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER R, LATIN CAPITAL LETTER R>
0052 0072 ; [.1E70.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER R, LATIN SMALL LETTER R>
0052 0052 ; [.1E70.0020.0008] # <LATIN CAPITAL LETTER R, LATIN CAPITAL LETTER R>
0073 0068 ; [.1E94.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H>
0073 0048 ; [.1E94.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER H>
0053 0068 ; [.1E94.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H>
0053 0048 ; [.1E94.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER H>
0074 0068 ; [.1EB4.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER H>
0074 0048 ; [.1EB4.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER H>
0054 0068 ; [.1EB4.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER H>
0054 0048 ; [.1EB4.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER H>
0078 0068 ; [.1F0A.0020.0002] # <LATIN SMALL LETTER X, LATIN SMALL LETTER H>
0078 0048 ; [.1F0A.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER X, LATIN CAPITAL LETTER H>
0058 0068 ; [.1F0A.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER X, LATIN SMALL LETTER H>
0058 0048 ; [.1F0A.0020.0008] # <LATIN CAPITAL LETTER X, LATIN CAPITAL LETTER H>
007A 0068 ; [.1F3D.0020.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER H>
007A 0048 ; [.1F3D.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER H>
005A 0068 ; [.1F3D.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER H>
005A 0048 ; [.1F3D.0020.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER H>
ENTRY
};
Unicode/Collate/Locale/or.pl 0000644 00000001102 15033552504 0011665 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0B01 ; [.278B.0020.0002][.FFF1.0000.0000] # ORIYA SIGN CANDRABINDU
0B02 ; [.278B.0020.0002][.FFF2.0000.0000] # ORIYA SIGN ANUSVARA
0B03 ; [.278B.0020.0002][.FFF3.0000.0000] # ORIYA SIGN VISARGA
0B14 ; [.278B.0020.0002][.FFF0.0000.0000] # ORIYA LETTER AU
0B15 0B4D 0B37 ; [.27AF.0020.0002][.FFF1.0000.0000] # <ORIYA LETTER KA, ORIYA SIGN VIRAMA, ORIYA LETTER SSA>
0B39 ; [.27AF.0020.0002][.FFF0.0000.0000] # ORIYA LETTER HA
0B5F ; [.27A5.0021.0002] # ORIYA LETTER YYA
ENTRY
};
Unicode/Collate/Locale/ig.pl 0000644 00000007474 15033552504 0011666 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0063 0068 ; [.1C61.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0043 0068 ; [.1C61.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1C61.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
0067 0062 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER B>
0047 0062 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER B>
0047 0042 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER B>
0067 0068 ; [.1CF6.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER H>
0047 0068 ; [.1CF6.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER H>
0047 0048 ; [.1CF6.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER H>
0067 0077 ; [.1CF7.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER W>
0047 0077 ; [.1CF7.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER W>
0047 0057 ; [.1CF7.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER W>
1ECB ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW
0069 0323 ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW
1ECA ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW
0049 0323 ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW
006B 0070 ; [.1D66.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER P>
004B 0070 ; [.1D66.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER P>
004B 0050 ; [.1D66.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER P>
006B 0077 ; [.1D67.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER W>
004B 0077 ; [.1D67.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER W>
004B 0057 ; [.1D67.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER W>
1E45 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE
006E 0307 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE
1E44 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE
004E 0307 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE
006E 0077 ; [.1DBB.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER W>
004E 0077 ; [.1DBB.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER W>
004E 0057 ; [.1DBB.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER W>
006E 0079 ; [.1DBC.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y>
004E 0079 ; [.1DBC.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y>
004E 0059 ; [.1DBC.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y>
1ECD ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW
006F 0323 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW
1ECC ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW
004F 0323 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW
1ED9 ; [.1DDE.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1DDE.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1EE3 ; [.1DDE.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
1EE2 ; [.1DDE.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
0073 0068 ; [.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H>
0053 0068 ; [.1E72.0020.0007] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H>
0053 0048 ; [.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER H>
1EE5 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW
0075 0323 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW
1EE4 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW
0055 0323 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW
1EF1 ; [.1EB6.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
1EF0 ; [.1EB6.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
ENTRY
};
Unicode/Collate/Locale/kn.pl 0000644 00000000665 15033552504 0011672 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0C82 ; [.284C.0020.0002][.FFF1.0000.0000] # KANNADA SIGN ANUSVARA
0C83 ; [.284C.0020.0002][.FFF2.0000.0000] # KANNADA SIGN VISARGA
0CF1 ; [.284C.0020.0002][.FFF3.0000.0000] # KANNADA SIGN JIHVAMULIYA
0CF2 ; [.284C.0020.0002][.FFF4.0000.0000] # KANNADA SIGN UPADHMANIYA
0C94 ; [.284C.0020.0002][.FFF0.0000.0000] # KANNADA LETTER AU
ENTRY
};
Unicode/Collate/Locale/om.pl 0000644 00000002616 15033552504 0011673 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0063 0068 ; [.1F22.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0043 0068 ; [.1F22.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1F22.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
0064 0068 ; [.1F23.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER H>
0044 0068 ; [.1F23.0020.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER H>
0044 0048 ; [.1F23.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER H>
006B 0068 ; [.1F24.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER H>
004B 0068 ; [.1F24.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER H>
004B 0048 ; [.1F24.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER H>
006E 0079 ; [.1F25.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y>
004E 0079 ; [.1F25.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y>
004E 0059 ; [.1F25.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y>
0070 0068 ; [.1F26.0020.0002] # <LATIN SMALL LETTER P, LATIN SMALL LETTER H>
0050 0068 ; [.1F26.0020.0007] # <LATIN CAPITAL LETTER P, LATIN SMALL LETTER H>
0050 0048 ; [.1F26.0020.0008] # <LATIN CAPITAL LETTER P, LATIN CAPITAL LETTER H>
0073 0068 ; [.1F27.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H>
0053 0068 ; [.1F27.0020.0007] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H>
ENTRY
};
Unicode/Collate/Locale/cs.pl 0000644 00000002677 15033552504 0011674 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0063 0068 ; [.1D19.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0063 0048 ; [.1D19.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H>
0043 0068 ; [.1D19.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1D19.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
0159 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON
0072 030C ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON
0158 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON
0052 030C ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
ENTRY
};
Unicode/Collate/Locale/ur.pl 0000644 00000014337 15033552504 0011711 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0623 ; [.230B.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
0627 0654 ; [.230B.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
0622 ; [.230C.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
0627 0653 ; [.230C.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
0628 ; [.230C.0020.0002][.FFC1.0000.0000] # ARABIC LETTER BEH
0628 06BE ; [.230C.0020.0002][.FFC2.0000.0000] # <ARABIC LETTER BEH, ARABIC LETTER HEH DOACHASHMEE>
067E ; [.230C.0020.0002][.FFC3.0000.0000] # ARABIC LETTER PEH
067E 06BE ; [.230C.0020.0002][.FFC4.0000.0000] # <ARABIC LETTER PEH, ARABIC LETTER HEH DOACHASHMEE>
062A ; [.230C.0020.0002][.FFC5.0000.0000] # ARABIC LETTER TEH
062A 06BE ; [.230C.0020.0002][.FFC6.0000.0000] # <ARABIC LETTER TEH, ARABIC LETTER HEH DOACHASHMEE>
0679 ; [.230C.0020.0002][.FFC7.0000.0000] # ARABIC LETTER TTEH
0679 06BE ; [.230C.0020.0002][.FFC8.0000.0000] # <ARABIC LETTER TTEH, ARABIC LETTER HEH DOACHASHMEE>
062B ; [.230C.0020.0002][.FFC9.0000.0000] # ARABIC LETTER THEH
062C ; [.230C.0020.0002][.FFCA.0000.0000] # ARABIC LETTER JEEM
062C 06BE ; [.230C.0020.0002][.FFCB.0000.0000] # <ARABIC LETTER JEEM, ARABIC LETTER HEH DOACHASHMEE>
0686 ; [.230C.0020.0002][.FFCC.0000.0000] # ARABIC LETTER TCHEH
0686 06BE ; [.230C.0020.0002][.FFCD.0000.0000] # <ARABIC LETTER TCHEH, ARABIC LETTER HEH DOACHASHMEE>
062D ; [.230C.0020.0002][.FFCE.0000.0000] # ARABIC LETTER HAH
062E ; [.230C.0020.0002][.FFCF.0000.0000] # ARABIC LETTER KHAH
062F ; [.230C.0020.0002][.FFD0.0000.0000] # ARABIC LETTER DAL
062F 06BE ; [.230C.0020.0002][.FFD1.0000.0000] # <ARABIC LETTER DAL, ARABIC LETTER HEH DOACHASHMEE>
0688 ; [.230C.0020.0002][.FFD2.0000.0000] # ARABIC LETTER DDAL
0688 06BE ; [.230C.0020.0002][.FFD3.0000.0000] # <ARABIC LETTER DDAL, ARABIC LETTER HEH DOACHASHMEE>
0630 ; [.230C.0020.0002][.FFD4.0000.0000] # ARABIC LETTER THAL
0631 ; [.230C.0020.0002][.FFD5.0000.0000] # ARABIC LETTER REH
0631 06BE ; [.230C.0020.0002][.FFD6.0000.0000] # <ARABIC LETTER REH, ARABIC LETTER HEH DOACHASHMEE>
0691 ; [.230C.0020.0002][.FFD7.0000.0000] # ARABIC LETTER RREH
0691 06BE ; [.230C.0020.0002][.FFD8.0000.0000] # <ARABIC LETTER RREH, ARABIC LETTER HEH DOACHASHMEE>
0632 ; [.230C.0020.0002][.FFD9.0000.0000] # ARABIC LETTER ZAIN
0698 ; [.230C.0020.0002][.FFDA.0000.0000] # ARABIC LETTER JEH
0633 ; [.230C.0020.0002][.FFDB.0000.0000] # ARABIC LETTER SEEN
0634 ; [.230C.0020.0002][.FFDC.0000.0000] # ARABIC LETTER SHEEN
0635 ; [.230C.0020.0002][.FFDD.0000.0000] # ARABIC LETTER SAD
0636 ; [.230C.0020.0002][.FFDE.0000.0000] # ARABIC LETTER DAD
0637 ; [.230C.0020.0002][.FFDF.0000.0000] # ARABIC LETTER TAH
0638 ; [.230C.0020.0002][.FFE0.0000.0000] # ARABIC LETTER ZAH
0639 ; [.230C.0020.0002][.FFE1.0000.0000] # ARABIC LETTER AIN
063A ; [.230C.0020.0002][.FFE2.0000.0000] # ARABIC LETTER GHAIN
0641 ; [.230C.0020.0002][.FFE3.0000.0000] # ARABIC LETTER FEH
0642 ; [.230C.0020.0002][.FFE4.0000.0000] # ARABIC LETTER QAF
06A9 ; [.230C.0020.0002][.FFE5.0000.0000] # ARABIC LETTER KEHEH
06A9 06BE ; [.230C.0020.0002][.FFE6.0000.0000] # <ARABIC LETTER KEHEH, ARABIC LETTER HEH DOACHASHMEE>
06AF ; [.230C.0020.0002][.FFE7.0000.0000] # ARABIC LETTER GAF
06AF 06BE ; [.230C.0020.0002][.FFE8.0000.0000] # <ARABIC LETTER GAF, ARABIC LETTER HEH DOACHASHMEE>
0644 ; [.230C.0020.0002][.FFE9.0000.0000] # ARABIC LETTER LAM
0644 06BE ; [.230C.0020.0002][.FFEA.0000.0000] # <ARABIC LETTER LAM, ARABIC LETTER HEH DOACHASHMEE>
0645 ; [.230C.0020.0002][.FFEB.0000.0000] # ARABIC LETTER MEEM
0645 06BE ; [.230C.0020.0002][.FFEC.0000.0000] # <ARABIC LETTER MEEM, ARABIC LETTER HEH DOACHASHMEE>
0646 ; [.230C.0020.0002][.FFED.0000.0000] # ARABIC LETTER NOON
0646 06BE ; [.230C.0020.0002][.FFEE.0000.0000] # <ARABIC LETTER NOON, ARABIC LETTER HEH DOACHASHMEE>
06BA ; [.230C.0020.0002][.FFEF.0000.0000] # ARABIC LETTER NOON GHUNNA
06BA 06BE ; [.230C.0020.0002][.FFF0.0000.0000] # <ARABIC LETTER NOON GHUNNA, ARABIC LETTER HEH DOACHASHMEE>
0648 ; [.230C.0020.0002][.FFF1.0000.0000] # ARABIC LETTER WAW
0624 ; [.230C.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
0648 0654 ; [.230C.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
0648 06BE ; [.230C.0020.0002][.FFF2.0000.0000] # <ARABIC LETTER WAW, ARABIC LETTER HEH DOACHASHMEE>
06C1 ; [.230C.0020.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL
06C2 ; [.230C.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
06C1 0654 ; [.230C.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
06BE ; [.230C.0020.0002][.FFF4.0000.0000] # ARABIC LETTER HEH DOACHASHMEE
06C3 ; [.230C.0020.0002][.FFF5.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL
0621 ; [.230C.0020.0002][.FFF6.0000.0000] # ARABIC LETTER HAMZA
06CC ; [.230C.0020.0002][.FFF7.0000.0000] # ARABIC LETTER FARSI YEH
0626 ; [.230C.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
064A 0654 ; [.230C.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
06CC 06BE ; [.230C.0020.0002][.FFF8.0000.0000] # <ARABIC LETTER FARSI YEH, ARABIC LETTER HEH DOACHASHMEE>
06D2 ; [.230C.0020.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE
06D3 ; [.230C.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
06D2 0654 ; [.230C.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
066E ; [.230C.0020.0002][.FFFA.0000.0000] # ARABIC LETTER DOTLESS BEH
0652 ; [.0000.0074.0002] # ARABIC SUKUN
064E ; [.0000.0075.0002] # ARABIC FATHA
0650 ; [.0000.0076.0002] # ARABIC KASRA
064F ; [.0000.0077.0002] # ARABIC DAMMA
0670 ; [.0000.0078.0002] # ARABIC LETTER SUPERSCRIPT ALEF
0656 ; [.0000.0079.0002] # ARABIC SUBSCRIPT ALEF
0657 ; [.0000.007A.0002] # ARABIC INVERTED DAMMA
064B ; [.0000.007B.0002] # ARABIC FATHATAN
064D ; [.0000.007C.0002] # ARABIC KASRATAN
064C ; [.0000.007D.0002] # ARABIC DAMMATAN
0654 ; [.0000.007E.0002] # ARABIC HAMZA ABOVE
0651 ; [.0000.007F.0002] # ARABIC SHADDA
0658 ; [.0000.0080.0002] # ARABIC MARK NOON GHUNNA
0653 ; [.0000.0081.0002] # ARABIC MADDAH ABOVE
ENTRY
};
Unicode/Collate/Locale/sr.pl 0000644 00000000422 15033552504 0011675 0 ustar 00 +{
locale_version => 1.25,
suppress => [0x0418, 0x0438],
entry => <<'ENTRY', # for DUCET v9.0.0
0439 ; [.2080.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I
0419 ; [.2080.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I
ENTRY
};
Unicode/Collate/Locale/sl.pl 0000644 00000001535 15033552504 0011675 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
ENTRY
};
Unicode/Collate/Locale/es_trad.pl 0000644 00000001457 15033552504 0012703 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0043 0068 ; [.1C7B.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
006C 006C ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L>
004C 006C ; [.1D78.0020.0007] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L>
004C 004C ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L>
00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
ENTRY
};
Unicode/Collate/Locale/he.pl 0000644 00000000310 15033552504 0011641 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
05F3 ; [*0305.001F.0002] # HEBREW PUNCTUATION GERESH
05F4 ; [*030C.001F.0002] # HEBREW PUNCTUATION GERSHAYIM
ENTRY
};
Unicode/Collate/Locale/fi_phone.pl 0000644 00000011061 15033552504 0013041 0 ustar 00 +{
locale_version => 1.25,
# in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ?
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE
01E5 ; [.1CF4.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE
01E4 ; [.1CF4.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE
014B ; [.1DB9.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG
014A ; [.1DB9.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG
0167 ; [.1E95.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE
0166 ; [.1E95.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0292 ; [.1F21.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH
01B7 ; [.1F21.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH
01EF ; [.1F21.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON
01EE ; [.1F21.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON
00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F96.0020.0008] # ANGSTROM SIGN
01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
ENTRY
};
Unicode/Collate/Locale/sv.pl 0000644 00000014575 15033552504 0011717 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH
00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN
00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN
0077 ; [.1EE3.0021.0002] # LATIN SMALL LETTER W
0057 ; [.1EE3.0021.0008] # LATIN CAPITAL LETTER W
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F96.0020.0008] # ANGSTROM SIGN
01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
0119 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
0151 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0153 ; [.1F98.0023.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F98.0023.0008] # LATIN CAPITAL LIGATURE OE
00F4 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
006F 0302 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
004F 0302 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED3 ; [.1F98.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1F98.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED1 ; [.1F98.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1F98.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED7 ; [.1F98.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1F98.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1F98.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1F98.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED9 ; [.1F98.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1F98.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
ENTRY
};
Unicode/Collate/Locale/nso.pl 0000644 00000005475 15033552504 0012065 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00EA ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC1 ; [.1CAB.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAB.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
1EBF ; [.1CAB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
1EC5 ; [.1CAB.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAB.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAB.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAB.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED1 ; [.1DDE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1DDE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED7 ; [.1DDE.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1DDE.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1DDE.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1DDE.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED9 ; [.1DDE.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1DDE.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
ENTRY
};
Unicode/Collate/Locale/pa.pl 0000644 00000002506 15033552504 0011656 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0A71 ; [.0000.00C3.0002] # GURMUKHI ADDAK
0A03 ; [.0000.00C2.0002] # GURMUKHI SIGN VISARGA
0A70 ; [.0000.00C4.0002] # GURMUKHI TIPPI
0A02 ; [.0000.00C5.0002] # GURMUKHI SIGN BINDI
0A01 ; [.0000.00C6.0002] # GURMUKHI SIGN ADAK BINDI
0A3C ; [.0000.00C7.0002] # GURMUKHI SIGN NUKTA
0A33 ; [.272C.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER LLA
0A36 ; [.270D.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER SHA
0A59 ; [.2711.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER KHHA
0A5A ; [.2712.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER GHHA
0A5B ; [.2717.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER ZA
0A5E ; [.2725.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER FA
0A4D ; [.272F.0020.0002] # GURMUKHI SIGN VIRAMA
0A3E ; [.2730.0020.0002] # GURMUKHI VOWEL SIGN AA
0A3F ; [.2731.0020.0002] # GURMUKHI VOWEL SIGN I
0A40 ; [.2732.0020.0002] # GURMUKHI VOWEL SIGN II
0A41 ; [.2733.0020.0002] # GURMUKHI VOWEL SIGN U
0A42 ; [.2734.0020.0002] # GURMUKHI VOWEL SIGN UU
0A47 ; [.2735.0020.0002] # GURMUKHI VOWEL SIGN EE
0A48 ; [.2736.0020.0002] # GURMUKHI VOWEL SIGN AI
0A4B ; [.2737.0020.0002] # GURMUKHI VOWEL SIGN OO
0A4C ; [.2738.0020.0002] # GURMUKHI VOWEL SIGN AU
ENTRY
};
Unicode/Collate/Locale/ml.pl 0000644 00000003152 15033552504 0011664 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0D3D ; [.0000.00C6.0002] # MALAYALAM SIGN AVAGRAHA
0D57 ; [.28CD.0020.0002] # MALAYALAM AU LENGTH MARK
0D4C ; [.28CD.0020.0003] # MALAYALAM VOWEL SIGN AU
0D46 0D57 ; [.28CD.0020.0003] # MALAYALAM VOWEL SIGN AU
0D15 0D4D 200D ; [.2898.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER KA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
0D7F ; [.2898.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU K
0D23 0D4D 200D ; [.28A6.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER NNA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
0D7A ; [.28A6.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU NN
0D28 0D4D 200D ; [.28AB.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER NA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
0D7B ; [.28AB.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU N
0D30 0D4D 200D ; [.28B3.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER RA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
0D7C ; [.28B3.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU RR
0D32 0D4D 200D ; [.28B4.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER LA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
0D7D ; [.28B4.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU L
0D33 0D4D 200D ; [.28BA.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER LLA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
0D7E ; [.28BA.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU LL
0D02 ; [.28B1.0020.0002][.28CF.0021.0002] # MALAYALAM SIGN ANUSVARA
0D7B 0D4D ; [.28AB.0020.0002][.28CF.0020.0003] # <MALAYALAM LETTER CHILLU N, MALAYALAM SIGN VIRAMA>
ENTRY
};
Unicode/Collate/Locale/ta.pl 0000644 00000007565 15033552504 0011674 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0B82 ; [.27CE.0020.0002][.FFF0.0000.0000] # TAMIL SIGN ANUSVARA
0B83 ; [.27CE.0020.0002][.FFF1.0000.0000] # TAMIL SIGN VISARGA
0B95 0BCD 0BB7 0BCD ; [.27E5.0020.0002][.FFF2.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA, TAMIL LETTER SSA, TAMIL SIGN VIRAMA>
0B95 0BCD 0BB7 ; [.27E5.0020.0002][.FFF3.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA, TAMIL LETTER SSA>
0B95 0BCD ; [.27CF.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA>
0B95 ; [.27CF.0020.0002][.FFF1.0000.0000] # TAMIL LETTER KA
0B99 0BCD ; [.27D0.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NGA, TAMIL SIGN VIRAMA>
0B99 ; [.27D0.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NGA
0B9A 0BCD ; [.27D1.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER CA, TAMIL SIGN VIRAMA>
0B9A ; [.27D1.0020.0002][.FFF1.0000.0000] # TAMIL LETTER CA
0B9E 0BCD ; [.27D2.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NYA, TAMIL SIGN VIRAMA>
0B9E ; [.27D2.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NYA
0B9F 0BCD ; [.27D3.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER TTA, TAMIL SIGN VIRAMA>
0B9F ; [.27D3.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TTA
0BA3 0BCD ; [.27D4.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NNA, TAMIL SIGN VIRAMA>
0BA3 ; [.27D4.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNA
0BA4 0BCD ; [.27D5.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER TA, TAMIL SIGN VIRAMA>
0BA4 ; [.27D5.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TA
0BA8 0BCD ; [.27D6.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NA, TAMIL SIGN VIRAMA>
0BA8 ; [.27D6.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NA
0BAA 0BCD ; [.27D7.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER PA, TAMIL SIGN VIRAMA>
0BAA ; [.27D7.0020.0002][.FFF1.0000.0000] # TAMIL LETTER PA
0BAE 0BCD ; [.27D8.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER MA, TAMIL SIGN VIRAMA>
0BAE ; [.27D8.0020.0002][.FFF1.0000.0000] # TAMIL LETTER MA
0BAF 0BCD ; [.27D9.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER YA, TAMIL SIGN VIRAMA>
0BAF ; [.27D9.0020.0002][.FFF1.0000.0000] # TAMIL LETTER YA
0BB0 0BCD ; [.27DA.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER RA, TAMIL SIGN VIRAMA>
0BB0 ; [.27DA.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RA
0BB2 0BCD ; [.27DB.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER LA, TAMIL SIGN VIRAMA>
0BB2 ; [.27DB.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LA
0BB5 0BCD ; [.27DC.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER VA, TAMIL SIGN VIRAMA>
0BB5 ; [.27DC.0020.0002][.FFF1.0000.0000] # TAMIL LETTER VA
0BB4 0BCD ; [.27DD.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER LLLA, TAMIL SIGN VIRAMA>
0BB4 ; [.27DD.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLLA
0BB3 0BCD ; [.27DE.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER LLA, TAMIL SIGN VIRAMA>
0BB3 ; [.27DE.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLA
0BB1 0BCD ; [.27DF.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER RRA, TAMIL SIGN VIRAMA>
0BB1 ; [.27DF.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RRA
0BA9 0BCD ; [.27E0.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NNNA, TAMIL SIGN VIRAMA>
0BA9 ; [.27E0.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNNA
0B9C 0BCD ; [.27E1.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER JA, TAMIL SIGN VIRAMA>
0B9C ; [.27E1.0020.0002][.FFF1.0000.0000] # TAMIL LETTER JA
0BB6 0BCD ; [.27E2.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER SHA, TAMIL SIGN VIRAMA>
0BB6 ; [.27E2.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SHA
0BB7 0BCD ; [.27E3.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER SSA, TAMIL SIGN VIRAMA>
0BB7 ; [.27E3.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SSA
0BB8 0BCD ; [.27E4.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER SA, TAMIL SIGN VIRAMA>
0BB8 ; [.27E4.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SA
0BB9 0BCD ; [.27E5.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER HA, TAMIL SIGN VIRAMA>
0BB9 ; [.27E5.0020.0002][.FFF1.0000.0000] # TAMIL LETTER HA
ENTRY
};
Unicode/Collate/Locale/cy.pl 0000644 00000003671 15033552504 0011675 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0043 0068 ; [.1C7B.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
0064 0064 ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D>
0044 0064 ; [.1C90.0020.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D>
0044 0044 ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D>
0066 0066 ; [.1CE6.0020.0002] # <LATIN SMALL LETTER F, LATIN SMALL LETTER F>
0046 0066 ; [.1CE6.0020.0007] # <LATIN CAPITAL LETTER F, LATIN SMALL LETTER F>
0046 0046 ; [.1CE6.0020.0008] # <LATIN CAPITAL LETTER F, LATIN CAPITAL LETTER F>
006E 0067 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER G>
004E 0067 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER G>
004E 0047 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER G>
006C 006C ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L>
004C 006C ; [.1D78.0020.0007] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L>
004C 004C ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L>
0070 0068 ; [.1E0D.0020.0002] # <LATIN SMALL LETTER P, LATIN SMALL LETTER H>
0050 0068 ; [.1E0D.0020.0007] # <LATIN CAPITAL LETTER P, LATIN SMALL LETTER H>
0050 0048 ; [.1E0D.0020.0008] # <LATIN CAPITAL LETTER P, LATIN CAPITAL LETTER H>
0072 0068 ; [.1E34.0020.0002] # <LATIN SMALL LETTER R, LATIN SMALL LETTER H>
0052 0068 ; [.1E34.0020.0007] # <LATIN CAPITAL LETTER R, LATIN SMALL LETTER H>
0052 0048 ; [.1E34.0020.0008] # <LATIN CAPITAL LETTER R, LATIN CAPITAL LETTER H>
0074 0068 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER H>
0054 0068 ; [.1E96.0020.0007] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER H>
0054 0048 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER H>
ENTRY
};
Unicode/Collate/Locale/ug_cyrl.pl 0000644 00000000313 15033552504 0012714 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
04D9 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER SCHWA
04D8 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA
ENTRY
};
Unicode/Collate/Locale/fr_ca.pl 0000644 00000000064 15033552504 0012325 0 ustar 00 +{
locale_version => 1.25,
backwards => 2,
};
Unicode/Collate/Locale/zh_gb.pl 0000644 00000122571 15033552504 0012354 0 ustar 00 use Unicode::Collate::CJK::GB2312;
+{
locale_version => 1.25,
overrideCJK => \&Unicode::Collate::CJK::GB2312::weightGB2312,
entry => <<'ENTRY', # for DUCET v9.0.0
0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON>
004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON>
1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON>
004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON>
006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT>
006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK>
004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT>
004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK>
006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON>
004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON>
0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON>
00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON>
01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON>
00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON>
01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
E2D8 ; [.8EAB.0020.0002] # <unknown>
E2D9 ; [.8EAC.0020.0002] # <unknown>
E2DA ; [.8EAD.0020.0002] # <unknown>
E2DB ; [.8EAE.0020.0002] # <unknown>
E2DC ; [.8EAF.0020.0002] # <unknown>
F967 ; [.80D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
F905 ; [.8185.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905
2F801 ; [.8AED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.81D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E
2F800 ; [.8635.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800
F9BA ; [.8668.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA
F977 ; [.865E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977
F9FD ; [.899D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD
F9A8 ; [.868B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8
2F804 ; [.879A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804
F9B5 ; [.863C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.8B4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.8B4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805
F965 ; [.80A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965
2F80B ; [.8BB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.8662.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.893B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.893B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A
FA0C ; [.8EB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.815D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.873B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.873B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F80F ; [.8AC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F
FA72 ; [.88DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72
F9D1 ; [.8696.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1
2F811 ; [.8562.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.8484.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F815 ; [.8D70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815
2F8D2 ; [.8709.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.873A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F817 ; [.890E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817
2F818 ; [.8D40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F81A ; [.823F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A
FA71 ; [.85D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71
2F81B ; [.85D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B
F92E ; [.8623.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E
F979 ; [.8656.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979
F955 ; [.8685.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955
2F81D ; [.8FF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D
2F81E ; [.88FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.88A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.88A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.866D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C
F9DD ; [.863A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.81A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.85AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F822 ; [.833D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822
F98A ; [.8643.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A
F99D ; [.8670.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D
2F992 ; [.860C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992
FA76 ; [.8CFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.8CFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.873C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.873C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.8614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952
FA34 ; [.88AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.88AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827
FA77 ; [.8964.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.8964.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.805B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829
2F82A ; [.81A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A
F963 ; [.806E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.806E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B
F9EB ; [.879B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F82C ; [.8445.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.806D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.806D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D
2F82E ; [.80C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F82F ; [.847B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.86CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F831 ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833
2F836 ; [.8477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836
2F837 ; [.8FEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837
F906 ; [.8567.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.84F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839
2F83A ; [.9154.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A
2F83B ; [.915B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B
F9DE ; [.8633.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.867C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.8B5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D
2F83E ; [.8143.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.8E2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F
F99E ; [.8C47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F842 ; [.8A6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842
FA79 ; [.919C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79
2F845 ; [.8953.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.8953.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.85ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.91B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.91B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.83D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.83D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F849 ; [.8D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849
FA38 ; [.886A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38
F9A9 ; [.91F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F855 ; [.8BEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.8140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.9023.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F854 ; [.9029.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854
F96C ; [.892A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.8762.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A
2F851 ; [.8E64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851
2F85D ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D
FA7E ; [.8C56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.8785.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.8868.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.8079.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.896A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.87C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981
2F865 ; [.93E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865
2F862 ; [.846E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862
FA80 ; [.93F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F986 ; [.95FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986
FA04 ; [.8DA1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04
F9BC ; [.9391.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC
2F872 ; [.89C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872
2F873 ; [.84D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873
2F875 ; [.910F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875
F9BD ; [.87A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.8AC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877
F9DF ; [.86BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF
FA3C ; [.93CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C
2F878 ; [.93CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878
2F87A ; [.9206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A
2F87F ; [.922E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F
2F881 ; [.8C2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F882 ; [.812B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882
2F884 ; [.8F50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F886 ; [.870A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886
F98E ; [.87A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E
FA01 ; [.825B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88C ; [.9293.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C
2F88D ; [.89E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.864B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.8607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.8607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA82 ; [.9295.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82
FA0B ; [.85E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B
2F890 ; [.9106.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890
F943 ; [.87BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943
2F874 ; [.81E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874
2F899 ; [.8BED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.80E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84
F9D8 ; [.86C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8
FA85 ; [.9243.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F89D ; [.88FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.8E11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.87A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3
F960 ; [.87C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.864C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC
FA3D ; [.8443.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.8443.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
FA86 ; [.92C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86
FA88 ; [.8D33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88
2F8A6 ; [.819F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.842E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.842E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA87 ; [.8984.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87
2F8A8 ; [.8984.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
FA3E ; [.858F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E
FA3F ; [.8D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.8D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.8D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
2F8B2 ; [.8142.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
2F8B3 ; [.9554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
F9D2 ; [.86B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.81CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F8B5 ; [.8064.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.85EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925
FA02 ; [.8ADD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.802D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
2F8BA ; [.8827.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
F973 ; [.899B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973
2F8B9 ; [.8AF1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.856B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
F9A4 ; [.87A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4
F975 ; [.86CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.8C57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.9130.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D
FA8E ; [.8A1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E
FA8F ; [.9133.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F
2F8C3 ; [.875D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
FA41 ; [.874D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.874D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.801C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90
2F8C9 ; [.8537.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F9BE ; [.866C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE
F983 ; [.86BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983
FA42 ; [.848F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42
F9E0 ; [.8CB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0
FA12 ; [.88B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.88B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91
FA43 ; [.89D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.89D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
FA06 ; [.8066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06
F901 ; [.834B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8D4 ; [.8E9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
F929 ; [.8609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.8609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.8609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.8B00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.8B00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
F9E1 ; [.862D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.94AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.8DBD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.94AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
F9F4 ; [.8673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.8695.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9
F9DA ; [.8634.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA
F97A ; [.8657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
F9E2 ; [.8625.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2
2F8E8 ; [.94F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
2F8EF ; [.81A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
FA95 ; [.81CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95
F972 ; [.897F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.8C55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.8733.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968
F9E3 ; [.8797.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3
F915 ; [.86E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.8247.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F900 ; [.87DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.8694.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.8694.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.8694.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.83D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.860A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.83AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.83AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.8523.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.87B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.8679.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5
2F90E ; [.8C4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.9335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.832A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.9345.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909
F9CB ; [.868C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.879E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC
2F90C ; [.8216.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C
FA99 ; [.8E7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.8E7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.8415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904
F94E ; [.86A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E
2F90F ; [.812A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F915 ; [.9382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915
2F913 ; [.9383.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913
2F835 ; [.843B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835
F9FB ; [.8E1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.8A66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A
F99F ; [.866F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.8612.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916
2F91C ; [.9638.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C
FA48 ; [.8E46.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.8E46.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C
F9C0 ; [.8664.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0
2F920 ; [.9647.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920
FA9E ; [.8577.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.8577.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921
F946 ; [.860D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946
2F924 ; [.8B6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924
FA9F ; [.82A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F92B ; [.8606.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B
FA16 ; [.8E40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16
FAA0 ; [.8E40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0
F961 ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F929 ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929
F9AD ; [.867E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.9484.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.862C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.868D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.8E72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92F ; [.9493.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F
FAA3 ; [.8416.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3
2F936 ; [.946F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936
F9CD ; [.8691.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.86CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976
F9E5 ; [.863E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5
2F93A ; [.97D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A
FAA5 ; [.8B24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5
FA17 ; [.8CC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.8CC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7 ; [.898D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7
FAA8 ; [.8E04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.8E04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.898C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F946 ; [.8DDB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946
2F947 ; [.8DDB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947
FAAA ; [.8E76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA
FA9D ; [.8897.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D
2F94E ; [.968F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E
F9CE ; [.868F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.86B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.86B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.806B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.8619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947
FA18 ; [.8630.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18
FA4C ; [.8974.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C
FA4E ; [.8860.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.9654.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA50 ; [.8E97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.8E97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.8E54.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51
FA19 ; [.897E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.8BAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A
FA1B ; [.82F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.82F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956
2F957 ; [.9779.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957
FA55 ; [.8AC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55
F9F7 ; [.863F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7
F9F8 ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8
2F962 ; [.8E5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962
FAAE ; [.861F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE
F9F9 ; [.8640.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.852E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D
FA03 ; [.8A6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03
2F968 ; [.9934.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968
F96A ; [.8A40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.861A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F
FA59 ; [.82A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59
FA5A ; [.89DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.96E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6
F9AF ; [.8684.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.8D29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E
F934 ; [.860E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934
FA5B ; [.8DD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.8DD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.8DD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A
F9B0 ; [.9833.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0
F953 ; [.861E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.95D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.8D36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F985 ; [.8815.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985
FA5C ; [.816D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F893 ; [.98FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.98FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B
2F98C ; [.9901.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C
F97C ; [.8659.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C
FA5D ; [.903A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D
FA5E ; [.903A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E
2F990 ; [.8D2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F98F ; [.9042.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F
2F991 ; [.8DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.8411.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.82AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.8C3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.8923.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.8923.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.85C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996
F9FE ; [.8103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.842D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F99A ; [.8908.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A
2F99D ; [.8700.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D
2F9A1 ; [.8558.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.857D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.80E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
F958 ; [.867F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.86DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918
FA5F ; [.8E4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.8E4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F9C2 ; [.90E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2
2F9AC ; [.90EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
2F9B3 ; [.87C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
2F9B7 ; [.985A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
F911 ; [.86D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911
FA08 ; [.8BEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F9C4 ; [.8C9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
F9A0 ; [.866E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0
F912 ; [.86DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912
FA60 ; [.83E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.981C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6
FAB7 ; [.8301.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7
2F9D2 ; [.996E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F9D7 ; [.8863.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9DB ; [.9977.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
2F9DA ; [.802E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.86B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937
2F98D ; [.819E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D
F971 ; [.8136.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971
FA66 ; [.9396.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66
FA25 ; [.8CB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.8CB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67
F92C ; [.8608.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C
FA26 ; [.824F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26
F919 ; [.8611.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919
F9B7 ; [.996C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7
F9E9 ; [.862E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9
F97E ; [.865C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.8515.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A
F9C6 ; [.891D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.86A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.84DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.8687.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959
F9DC ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9B2 ; [.8680.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.8616.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949
F938 ; [.86B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938
FA1C ; [.853B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.853B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8
F940 ; [.86B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940
F9F3 ; [.9A5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FA15 ; [.86E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15
F989 ; [.8627.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989
2FA17 ; [.96AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17
2FA18 ; [.99CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18
2FA1C ; [.8084.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
ENTRY
};
Unicode/Collate/Locale/te.pl 0000644 00000000547 15033552504 0011671 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0C01 ; [.2802.0020.0002][.FFF1.0000.0000] # TELUGU SIGN CANDRABINDU
0C02 ; [.2802.0020.0002][.FFF2.0000.0000] # TELUGU SIGN ANUSVARA
0C03 ; [.2802.0020.0002][.FFF3.0000.0000] # TELUGU SIGN VISARGA
0C14 ; [.2802.0020.0002][.FFF0.0000.0000] # TELUGU LETTER AU
ENTRY
};
Unicode/Collate/Locale/hy.pl 0000644 00000000646 15033552504 0011701 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0587 ; [.22B3.0020.0002][.FFF1.0000.0000] # ARMENIAN SMALL LIGATURE ECH YIWN
0584 ; [.22B3.0020.0002][.FFF0.0000.0000] # ARMENIAN SMALL LETTER KEH
0535 0582 ; [.22B3.0020.0008][.FFF1.0000.0000] # <ARMENIAN CAPITAL LETTER ECH, ARMENIAN SMALL LETTER YIWN>
0554 ; [.22B3.0020.0008][.FFF0.0000.0000] # ARMENIAN CAPITAL LETTER KEH
ENTRY
};
Unicode/Collate/Locale/fo.pl 0000644 00000012635 15033552504 0011666 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH
00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN
00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE
00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F98.0020.0008] # ANGSTROM SIGN
01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
0061 0061 ; [.1F98.0020.001C][.0000.0000.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A>
0061 0041 ; [.1F98.0020.001C][.0000.0000.0008] # <LATIN SMALL LETTER A, LATIN CAPITAL LETTER A>
0041 0061 ; [.1F98.0020.001D][.0000.0000.0002] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A>
0041 0041 ; [.1F98.0020.001D][.0000.0000.0008] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A>
ENTRY
};
Unicode/Collate/Locale/vo.pl 0000644 00000004023 15033552504 0011676 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00E4 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1C48.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1C48.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
ENTRY
};
Unicode/Collate/Locale/sa.pl 0000644 00000001516 15033552504 0011661 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA
0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM
0933 ; [.269E.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA
0934 ; [.269E.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA
0915 094D 0937 ; [.269E.0020.0002][.FFF2.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA>
091C 094D 091E ; [.269E.0020.0002][.FFF3.0000.0000] # <DEVANAGARI LETTER JA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER NYA>
0939 ; [.269E.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA
ENTRY
};
Unicode/Collate/Locale/is.pl 0000644 00000012333 15033552504 0011670 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00E1 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C90.0020.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C90.0020.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C90.0020.0008] # LATIN CAPITAL LETTER ETH
00E9 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE
00ED ; [.1D4B.0020.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D4B.0020.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D4B.0020.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D4B.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D4B.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D4B.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE
00F3 ; [.1E0B.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1E0B.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1E0B.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1E0B.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1E0B.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1E0B.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
00FA ; [.1EE2.0020.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EE2.0020.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EE2.0020.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EE2.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EE2.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EE2.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE
00FD ; [.1F20.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE
0079 0301 ; [.1F20.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE
0079 0341 ; [.1F20.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE
00DD ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE
0059 0301 ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE
0059 0341 ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE
00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00F6 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00F8 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F98.0020.0008] # ANGSTROM SIGN
01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
ENTRY
};
Unicode/Collate/Locale/de_at_ph.pl 0000644 00000004255 15033552504 0013024 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00E4 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1C48.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1C48.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
00DF ; [.1E71.0020.0002][.1E72.0020.0002] # LATIN SMALL LETTER SHARP S
1E9E ; [.1E71.0020.0008][.1E72.0020.0008] # LATIN CAPITAL LETTER SHARP S
ENTRY
};
Unicode/Collate/Locale/be.pl 0000644 00000001065 15033552504 0011643 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0451 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
0435 0308 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
0401 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO
0415 0308 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO
045E ; [.211E.0020.0002] # CYRILLIC SMALL LETTER SHORT U
0443 0306 ; [.211E.0020.0002] # CYRILLIC SMALL LETTER SHORT U
040E ; [.211E.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U
0423 0306 ; [.211E.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U
ENTRY
};
Unicode/Collate/Locale/to.pl 0000644 00000007360 15033552504 0011703 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
006E 0067 ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER G>
004E 0067 ; [.1DBA.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER G>
004E 0047 ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER G>
014B ; [.1DBA.0020.001C] # LATIN SMALL LETTER ENG
014A ; [.1DBA.0020.001D] # LATIN CAPITAL LETTER ENG
02BB ; [.1F22.0020.0002] # MODIFIER LETTER TURNED COMMA
02BD ; [.1F22.0020.0003] # MODIFIER LETTER REVERSED COMMA
00E1 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0101 ; [.1C47.0022.0002] # LATIN SMALL LETTER A WITH MACRON
0061 0304 ; [.1C47.0022.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON
0041 0304 ; [.1C47.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON
00E9 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0113 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH MACRON
0065 0304 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON
0045 0304 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON
00ED ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE
012B ; [.1D32.0022.0002] # LATIN SMALL LETTER I WITH MACRON
0069 0304 ; [.1D32.0022.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON
0049 0304 ; [.1D32.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON
00F3 ; [.1DDD.0021.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDD.0021.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDD.0021.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE
014D ; [.1DDD.0022.0002] # LATIN SMALL LETTER O WITH MACRON
006F 0304 ; [.1DDD.0022.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON
004F 0304 ; [.1DDD.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON
00FA ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE
016B ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON
ENTRY
};
Unicode/Collate/Locale/yo.pl 0000644 00000003314 15033552504 0011703 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
1EB9 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW
0065 0323 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW
1EB8 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW
0045 0323 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW
1EC7 ; [.1CAB.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAB.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
0067 0062 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER B>
0047 0062 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER B>
0047 0042 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER B>
1ECD ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW
006F 0323 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW
1ECC ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW
004F 0323 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW
1ED9 ; [.1DDE.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1DDE.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1EE3 ; [.1DDE.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
1EE2 ; [.1DDE.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
1E63 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW
0073 0323 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW
1E62 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW
0053 0323 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW
ENTRY
};
Unicode/Collate/Locale/as.pl 0000644 00000001440 15033552504 0011655 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0982 ; [.26CD.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA
0981 ; [.26CD.0020.0002][.FFF2.0000.0000] # BENGALI SIGN CANDRABINDU
0983 ; [.26CD.0020.0002][.FFF3.0000.0000] # BENGALI SIGN VISARGA
0994 ; [.26CD.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU
09CE ; [.26DD.0020.0002][.FFF0.0000.0000] # BENGALI LETTER KHANDA TA
09A4 09CD 200D ; [.26DD.0020.0002][.FFF0.0000.0000] # <BENGALI LETTER TA, BENGALI SIGN VIRAMA, ZERO WIDTH JOINER>
09A4 ; [.26DD.0020.0002][.FFF1.0000.0000] # BENGALI LETTER TA
0995 09CD 09B7 ; [.26EF.0020.0002][.FFF1.0000.0000] # <BENGALI LETTER KA, BENGALI SIGN VIRAMA, BENGALI LETTER SSA>
09B9 ; [.26EF.0020.0002][.FFF0.0000.0000] # BENGALI LETTER HA
ENTRY
};
Unicode/Collate/Locale/wo.pl 0000644 00000003433 15033552504 0011703 0 ustar 00 +{
locale_version => 1.25,
# eng doesn't require tailoring
entry => <<'ENTRY', # for DUCET v9.0.0
00E0 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0300 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0340 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0300 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0340 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE
00E9 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE
00EB ; [.1CAC.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS
0065 0308 ; [.1CAC.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS
00CB ; [.1CAC.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS
0045 0308 ; [.1CAC.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS
00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
00F3 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
ENTRY
};
Unicode/Collate/Locale/tn.pl 0000644 00000005475 15033552504 0011707 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00EA ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC1 ; [.1CAB.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAB.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
1EBF ; [.1CAB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
1EC5 ; [.1CAB.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAB.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAB.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAB.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED1 ; [.1DDE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1DDE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED7 ; [.1DDE.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1DDE.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1DDE.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1DDE.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED9 ; [.1DDE.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1DDE.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
ENTRY
};
Unicode/Collate/Locale/mt.pl 0000644 00000004155 15033552504 0011700 0 ustar 00 +{
locale_version => 1.25,
upper_before_lower => 1,
entry => <<'ENTRY', # for DUCET v9.0.0
010B ; [.1C79.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE
0063 0307 ; [.1C79.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE
010A ; [.1C79.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE
0043 0307 ; [.1C79.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE
0121 ; [.1CF3.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE
0067 0307 ; [.1CF3.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE
0120 ; [.1CF3.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE
0047 0307 ; [.1CF3.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE
0067 0127 ; [.1D17.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER H WITH STROKE>
0067 0126 ; [.1D17.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER H WITH STROKE>
0047 0127 ; [.1D17.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER H WITH STROKE>
0047 0126 ; [.1D17.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER H WITH STROKE>
0067 0068 0335 ; [.1D17.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER H, COMBINING SHORT STROKE OVERLAY>
0067 0048 0335 ; [.1D17.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER H, COMBINING SHORT STROKE OVERLAY>
0047 0068 0335 ; [.1D17.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER H, COMBINING SHORT STROKE OVERLAY>
0047 0048 0335 ; [.1D17.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER H, COMBINING SHORT STROKE OVERLAY>
0127 ; [.1D31.0020.0002] # LATIN SMALL LETTER H WITH STROKE
0068 0335 ; [.1D31.0020.0002] # LATIN SMALL LETTER H WITH STROKE
210F ; [.1D31.0020.0002] # PLANCK CONSTANT OVER TWO PI
0126 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE
0048 0335 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE
017C ; [.1F20.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE
007A 0307 ; [.1F20.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE
017B ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE
005A 0307 ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE
ENTRY
};
Unicode/Collate/Locale/ro.pl 0000644 00000007533 15033552504 0011703 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0103 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE
0061 0306 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE
0102 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE
0041 0306 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE
1EB1 ; [.1C48.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE
1EB0 ; [.1C48.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
1EAF ; [.1C48.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE
1EAE ; [.1C48.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
1EB5 ; [.1C48.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE
1EB4 ; [.1C48.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
1EB3 ; [.1C48.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
1EB2 ; [.1C48.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
1EB7 ; [.1C48.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
1EB6 ; [.1C48.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
00E2 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX
0061 0302 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX
00C2 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0041 0302 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
1EA7 ; [.1C49.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
1EA6 ; [.1C49.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
1EA5 ; [.1C49.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
1EA4 ; [.1C49.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
1EAB ; [.1C49.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
1EAA ; [.1C49.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
1EA9 ; [.1C49.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
1EA8 ; [.1C49.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
1EAD ; [.1C49.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
1EAC ; [.1C49.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
00EE ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX
0069 0302 ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX
00CE ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0049 0302 ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
015F ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA
0073 0327 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA
0219 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW
0073 0326 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW
015E ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA
0053 0327 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA
0218 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW
0053 0326 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW
0163 ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA
0074 0327 ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA
021B ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW
0074 0326 ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW
0162 ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA
0054 0327 ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA
021A ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW
0054 0326 ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW
ENTRY
};
Unicode/Collate/Locale/eo.pl 0000644 00000003315 15033552504 0011660 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0109 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX
0063 0302 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX
0108 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
0043 0302 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
011D ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX
0067 0302 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX
011C ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
0047 0302 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
0125 ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX
0068 0302 ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX
0124 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
0048 0302 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
0135 ; [.1D4D.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX
006A 0302 ; [.1D4D.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX
0134 ; [.1D4D.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
004A 0302 ; [.1D4D.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
015D ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX
0073 0302 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX
015C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
0053 0302 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
016D ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH BREVE
0075 0306 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH BREVE
016C ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE
0055 0306 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE
ENTRY
};
Unicode/Collate/Locale/si.pl 0000644 00000000670 15033552504 0011671 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0D82 ; [.28E1.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA
0D83 ; [.28E1.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA
0D96 ; [.28E1.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA
0DA5 ; [.28EC.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
0DA4 ; [.28ED.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA
ENTRY
};
Unicode/Collate/Locale/et.pl 0000644 00000007163 15033552504 0011672 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0161 ; [.1E92.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E92.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E92.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E92.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
007A ; [.1E93.0020.0002] # LATIN SMALL LETTER Z
005A ; [.1E93.0020.0008] # LATIN CAPITAL LETTER Z
017E ; [.1E94.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1E94.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1E94.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1E94.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
00F5 ; [.1EFB.0020.0002] # LATIN SMALL LETTER O WITH TILDE
006F 0303 ; [.1EFB.0020.0002] # LATIN SMALL LETTER O WITH TILDE
00D5 ; [.1EFB.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE
004F 0303 ; [.1EFB.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE
1E4D ; [.1EFB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE
1E4C ; [.1EFB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
022D ; [.1EFB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON
022C ; [.1EFB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
1E4F ; [.1EFB.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
1E4E ; [.1EFB.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
1EE1 ; [.1EFB.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE
1EE0 ; [.1EFB.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE
00E4 ; [.1EFC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1EFC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1EFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1EFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00F6 ; [.1EFD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1EFD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1EFD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1EFD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1EFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1EFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00FC ; [.1EFE.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EFE.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EFE.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EFE.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1EFE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EFE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1EFE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EFE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1EFE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EFE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1EFE.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EFE.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
ENTRY
};
Unicode/Collate/Locale/ja.pl 0000644 00000611243 15033552504 0011654 0 ustar 00 use Unicode::Collate::CJK::JISX0208;
+{
locale_version => 1.25,
overrideCJK => \&Unicode::Collate::CJK::JISX0208::weightJISX0208,
entry => <<'ENTRY', # for DUCET v9.0.0
30A1 ; [.3D5A.0020.000F.0002] # KATAKANA LETTER SMALL A
30A2 ; [.3D5A.0020.0011.0002] # KATAKANA LETTER A
30A3 ; [.3D5B.0020.000F.0002] # KATAKANA LETTER SMALL I
30A4 ; [.3D5B.0020.0011.0002] # KATAKANA LETTER I
30A5 ; [.3D5C.0020.000F.0002] # KATAKANA LETTER SMALL U
30A6 ; [.3D5C.0020.0011.0002] # KATAKANA LETTER U
30A7 ; [.3D5E.0020.000F.0002] # KATAKANA LETTER SMALL E
30A8 ; [.3D5E.0020.0011.0002] # KATAKANA LETTER E
30A9 ; [.3D5F.0020.000F.0002] # KATAKANA LETTER SMALL O
30AA ; [.3D5F.0020.0011.0002] # KATAKANA LETTER O
30AB ; [.3D60.0020.0011.0002] # KATAKANA LETTER KA
30AC ; [.3D60.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GA
30AD ; [.3D61.0020.0011.0002] # KATAKANA LETTER KI
30AE ; [.3D61.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GI
30AF ; [.3D62.0020.0011.0002] # KATAKANA LETTER KU
30B0 ; [.3D62.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GU
30B1 ; [.3D63.0020.0011.0002] # KATAKANA LETTER KE
30B2 ; [.3D63.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GE
30B3 ; [.3D64.0020.0011.0002] # KATAKANA LETTER KO
30B4 ; [.3D64.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GO
30B5 ; [.3D65.0020.0011.0002] # KATAKANA LETTER SA
30B6 ; [.3D65.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZA
30B7 ; [.3D66.0020.0011.0002] # KATAKANA LETTER SI
30B8 ; [.3D66.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZI
30B9 ; [.3D67.0020.0011.0002] # KATAKANA LETTER SU
30BA ; [.3D67.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZU
30BB ; [.3D68.0020.0011.0002] # KATAKANA LETTER SE
30BC ; [.3D68.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZE
30BD ; [.3D69.0020.0011.0002] # KATAKANA LETTER SO
30BE ; [.3D69.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZO
30BF ; [.3D6A.0020.0011.0002] # KATAKANA LETTER TA
30C0 ; [.3D6A.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DA
30C1 ; [.3D6B.0020.0011.0002] # KATAKANA LETTER TI
30C2 ; [.3D6B.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DI
30C3 ; [.3D6C.0020.000F.0002] # KATAKANA LETTER SMALL TU
30C4 ; [.3D6C.0020.0011.0002] # KATAKANA LETTER TU
30C5 ; [.3D6C.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DU
30C6 ; [.3D6D.0020.0011.0002] # KATAKANA LETTER TE
30C7 ; [.3D6D.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DE
30C8 ; [.3D6E.0020.0011.0002] # KATAKANA LETTER TO
30C9 ; [.3D6E.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DO
30CA ; [.3D6F.0020.0011.0002] # KATAKANA LETTER NA
30CB ; [.3D70.0020.0011.0002] # KATAKANA LETTER NI
30CC ; [.3D71.0020.0011.0002] # KATAKANA LETTER NU
30CD ; [.3D72.0020.0011.0002] # KATAKANA LETTER NE
30CE ; [.3D73.0020.0011.0002] # KATAKANA LETTER NO
30CF ; [.3D74.0020.0011.0002] # KATAKANA LETTER HA
30D0 ; [.3D74.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BA
30D1 ; [.3D74.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PA
30D2 ; [.3D75.0020.0011.0002] # KATAKANA LETTER HI
30D3 ; [.3D75.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BI
30D4 ; [.3D75.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PI
30D5 ; [.3D76.0020.0011.0002] # KATAKANA LETTER HU
30D6 ; [.3D76.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BU
30D7 ; [.3D76.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PU
30D8 ; [.3D77.0020.0011.0002] # KATAKANA LETTER HE
30D9 ; [.3D77.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BE
30DA ; [.3D77.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PE
30DB ; [.3D78.0020.0011.0002] # KATAKANA LETTER HO
30DC ; [.3D78.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BO
30DD ; [.3D78.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PO
30DE ; [.3D79.0020.0011.0002] # KATAKANA LETTER MA
30DF ; [.3D7A.0020.0011.0002] # KATAKANA LETTER MI
30E0 ; [.3D7B.0020.0011.0002] # KATAKANA LETTER MU
30E1 ; [.3D7C.0020.0011.0002] # KATAKANA LETTER ME
30E2 ; [.3D7D.0020.0011.0002] # KATAKANA LETTER MO
30E3 ; [.3D7E.0020.000F.0002] # KATAKANA LETTER SMALL YA
30E4 ; [.3D7E.0020.0011.0002] # KATAKANA LETTER YA
30E5 ; [.3D7F.0020.000F.0002] # KATAKANA LETTER SMALL YU
30E6 ; [.3D7F.0020.0011.0002] # KATAKANA LETTER YU
30E7 ; [.3D81.0020.000F.0002] # KATAKANA LETTER SMALL YO
30E8 ; [.3D81.0020.0011.0002] # KATAKANA LETTER YO
30E9 ; [.3D82.0020.0011.0002] # KATAKANA LETTER RA
30EA ; [.3D83.0020.0011.0002] # KATAKANA LETTER RI
30EB ; [.3D84.0020.0011.0002] # KATAKANA LETTER RU
30EC ; [.3D85.0020.0011.0002] # KATAKANA LETTER RE
30ED ; [.3D86.0020.0011.0002] # KATAKANA LETTER RO
30EE ; [.3D87.0020.000F.0002] # KATAKANA LETTER SMALL WA
30EF ; [.3D87.0020.0011.0002] # KATAKANA LETTER WA
30F0 ; [.3D88.0020.0011.0002] # KATAKANA LETTER WI
30F1 ; [.3D89.0020.0011.0002] # KATAKANA LETTER WE
30F2 ; [.3D8A.0020.0011.0002] # KATAKANA LETTER WO
30F3 ; [.3D8B.0020.0011.0002] # KATAKANA LETTER N
30F4 ; [.3D5C.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VU
30F5 ; [.3D60.0020.000F.0002] # KATAKANA LETTER SMALL KA
30F6 ; [.3D63.0020.000F.0002] # KATAKANA LETTER SMALL KE
30F7 ; [.3D87.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VA
30F8 ; [.3D88.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VI
30F9 ; [.3D89.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VE
30FA ; [.3D8A.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VO
30FD ; [.1C0F.0020.0002.0002] # KATAKANA ITERATION MARK
30FE ; [.1C0F.0020.0002.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK
3041 ; [.3D5A.0020.000F.0001] # HIRAGANA LETTER SMALL A
3042 ; [.3D5A.0020.0011.0001] # HIRAGANA LETTER A
3043 ; [.3D5B.0020.000F.0001] # HIRAGANA LETTER SMALL I
3044 ; [.3D5B.0020.0011.0001] # HIRAGANA LETTER I
3045 ; [.3D5C.0020.000F.0001] # HIRAGANA LETTER SMALL U
3046 ; [.3D5C.0020.0011.0001] # HIRAGANA LETTER U
3047 ; [.3D5E.0020.000F.0001] # HIRAGANA LETTER SMALL E
3048 ; [.3D5E.0020.0011.0001] # HIRAGANA LETTER E
3049 ; [.3D5F.0020.000F.0001] # HIRAGANA LETTER SMALL O
304A ; [.3D5F.0020.0011.0001] # HIRAGANA LETTER O
304B ; [.3D60.0020.0011.0001] # HIRAGANA LETTER KA
304C ; [.3D60.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GA
304D ; [.3D61.0020.0011.0001] # HIRAGANA LETTER KI
304E ; [.3D61.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GI
304F ; [.3D62.0020.0011.0001] # HIRAGANA LETTER KU
3050 ; [.3D62.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GU
3051 ; [.3D63.0020.0011.0001] # HIRAGANA LETTER KE
3052 ; [.3D63.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GE
3053 ; [.3D64.0020.0011.0001] # HIRAGANA LETTER KO
3054 ; [.3D64.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GO
3055 ; [.3D65.0020.0011.0001] # HIRAGANA LETTER SA
3056 ; [.3D65.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZA
3057 ; [.3D66.0020.0011.0001] # HIRAGANA LETTER SI
3058 ; [.3D66.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZI
3059 ; [.3D67.0020.0011.0001] # HIRAGANA LETTER SU
305A ; [.3D67.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZU
305B ; [.3D68.0020.0011.0001] # HIRAGANA LETTER SE
305C ; [.3D68.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZE
305D ; [.3D69.0020.0011.0001] # HIRAGANA LETTER SO
305E ; [.3D69.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZO
305F ; [.3D6A.0020.0011.0001] # HIRAGANA LETTER TA
3060 ; [.3D6A.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DA
3061 ; [.3D6B.0020.0011.0001] # HIRAGANA LETTER TI
3062 ; [.3D6B.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DI
3063 ; [.3D6C.0020.000F.0001] # HIRAGANA LETTER SMALL TU
3064 ; [.3D6C.0020.0011.0001] # HIRAGANA LETTER TU
3065 ; [.3D6C.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DU
3066 ; [.3D6D.0020.0011.0001] # HIRAGANA LETTER TE
3067 ; [.3D6D.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DE
3068 ; [.3D6E.0020.0011.0001] # HIRAGANA LETTER TO
3069 ; [.3D6E.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DO
306A ; [.3D6F.0020.0011.0001] # HIRAGANA LETTER NA
306B ; [.3D70.0020.0011.0001] # HIRAGANA LETTER NI
306C ; [.3D71.0020.0011.0001] # HIRAGANA LETTER NU
306D ; [.3D72.0020.0011.0001] # HIRAGANA LETTER NE
306E ; [.3D73.0020.0011.0001] # HIRAGANA LETTER NO
306F ; [.3D74.0020.0011.0001] # HIRAGANA LETTER HA
3070 ; [.3D74.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BA
3071 ; [.3D74.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PA
3072 ; [.3D75.0020.0011.0001] # HIRAGANA LETTER HI
3073 ; [.3D75.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BI
3074 ; [.3D75.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PI
3075 ; [.3D76.0020.0011.0001] # HIRAGANA LETTER HU
3076 ; [.3D76.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BU
3077 ; [.3D76.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PU
3078 ; [.3D77.0020.0011.0001] # HIRAGANA LETTER HE
3079 ; [.3D77.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BE
307A ; [.3D77.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PE
307B ; [.3D78.0020.0011.0001] # HIRAGANA LETTER HO
307C ; [.3D78.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BO
307D ; [.3D78.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PO
307E ; [.3D79.0020.0011.0001] # HIRAGANA LETTER MA
307F ; [.3D7A.0020.0011.0001] # HIRAGANA LETTER MI
3080 ; [.3D7B.0020.0011.0001] # HIRAGANA LETTER MU
3081 ; [.3D7C.0020.0011.0001] # HIRAGANA LETTER ME
3082 ; [.3D7D.0020.0011.0001] # HIRAGANA LETTER MO
3083 ; [.3D7E.0020.000F.0001] # HIRAGANA LETTER SMALL YA
3084 ; [.3D7E.0020.0011.0001] # HIRAGANA LETTER YA
3085 ; [.3D7F.0020.000F.0001] # HIRAGANA LETTER SMALL YU
3086 ; [.3D7F.0020.0011.0001] # HIRAGANA LETTER YU
3087 ; [.3D81.0020.000F.0001] # HIRAGANA LETTER SMALL YO
3088 ; [.3D81.0020.0011.0001] # HIRAGANA LETTER YO
3089 ; [.3D82.0020.0011.0001] # HIRAGANA LETTER RA
308A ; [.3D83.0020.0011.0001] # HIRAGANA LETTER RI
308B ; [.3D84.0020.0011.0001] # HIRAGANA LETTER RU
308C ; [.3D85.0020.0011.0001] # HIRAGANA LETTER RE
308D ; [.3D86.0020.0011.0001] # HIRAGANA LETTER RO
308E ; [.3D87.0020.000F.0001] # HIRAGANA LETTER SMALL WA
308F ; [.3D87.0020.0011.0001] # HIRAGANA LETTER WA
3090 ; [.3D88.0020.0011.0001] # HIRAGANA LETTER WI
3091 ; [.3D89.0020.0011.0001] # HIRAGANA LETTER WE
3092 ; [.3D8A.0020.0011.0001] # HIRAGANA LETTER WO
3093 ; [.3D8B.0020.0011.0001] # HIRAGANA LETTER N
3094 ; [.3D5C.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER VU
3095 ; [.3D60.0020.000F.0001] # HIRAGANA LETTER SMALL KA
3096 ; [.3D63.0020.000F.0001] # HIRAGANA LETTER SMALL KE
309D ; [.1C0F.0020.0002.0001] # HIRAGANA ITERATION MARK
309E ; [.1C0F.0020.0002.0001][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK
3000 ; [*0209.0020.0002] # IDEOGRAPHIC SPACE
FF01 ; [*0260.0020.0002] # FULLWIDTH EXCLAMATION MARK
FF02 ; [*030C.0020.0002] # FULLWIDTH QUOTATION MARK
FF03 ; [*0398.0020.0002] # FULLWIDTH NUMBER SIGN
FF04 ; [.1C12.0020.0002] # FULLWIDTH DOLLAR SIGN
FF05 ; [*0399.0020.0002] # FULLWIDTH PERCENT SIGN
FF06 ; [*0396.0020.0002] # FULLWIDTH AMPERSAND
FF07 ; [*0305.0020.0002] # FULLWIDTH APOSTROPHE
FF08 ; [*0317.0020.0002] # FULLWIDTH LEFT PARENTHESIS
FF09 ; [*0318.0020.0002] # FULLWIDTH RIGHT PARENTHESIS
FF0A ; [*038F.0020.0002] # FULLWIDTH ASTERISK
FF0B ; [*0616.0020.0002] # FULLWIDTH PLUS SIGN
FF0C ; [*0222.0020.0002] # FULLWIDTH COMMA
FF0D ; [*020D.0020.0002] # FULLWIDTH HYPHEN-MINUS
FF0E ; [*0277.0020.0002] # FULLWIDTH FULL STOP
FF0F ; [*0394.0020.0002] # FULLWIDTH SOLIDUS
FF10 ; [.1C3D.0020.0002] # FULLWIDTH DIGIT ZERO
FF11 ; [.1C3E.0020.0002] # FULLWIDTH DIGIT ONE
FF12 ; [.1C3F.0020.0002] # FULLWIDTH DIGIT TWO
FF13 ; [.1C40.0020.0002] # FULLWIDTH DIGIT THREE
FF14 ; [.1C41.0020.0002] # FULLWIDTH DIGIT FOUR
FF15 ; [.1C42.0020.0002] # FULLWIDTH DIGIT FIVE
FF16 ; [.1C43.0020.0002] # FULLWIDTH DIGIT SIX
FF17 ; [.1C44.0020.0002] # FULLWIDTH DIGIT SEVEN
FF18 ; [.1C45.0020.0002] # FULLWIDTH DIGIT EIGHT
FF19 ; [.1C46.0020.0002] # FULLWIDTH DIGIT NINE
FF1A ; [*0239.0020.0002] # FULLWIDTH COLON
FF1B ; [*0234.0020.0002] # FULLWIDTH SEMICOLON
FF1C ; [*061A.0020.0002] # FULLWIDTH LESS-THAN SIGN
FF1D ; [*061B.0020.0002] # FULLWIDTH EQUALS SIGN
FF1E ; [*061C.0020.0002] # FULLWIDTH GREATER-THAN SIGN
FF1F ; [*0266.0020.0002] # FULLWIDTH QUESTION MARK
FF20 ; [*038E.0020.0002] # FULLWIDTH COMMERCIAL AT
FF21 ; [.1C47.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER A
FF22 ; [.1C60.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER B
FF23 ; [.1C7A.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER C
FF24 ; [.1C8F.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER D
FF25 ; [.1CAA.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER E
FF26 ; [.1CE5.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER F
FF27 ; [.1CF4.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER G
FF28 ; [.1D18.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER H
FF29 ; [.1D32.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER I
FF2A ; [.1D4C.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER J
FF2B ; [.1D65.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER K
FF2C ; [.1D77.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER L
FF2D ; [.1DAA.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER M
FF2E ; [.1DB9.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER N
FF2F ; [.1DDD.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER O
FF30 ; [.1E0C.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER P
FF31 ; [.1E21.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Q
FF32 ; [.1E33.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER R
FF33 ; [.1E71.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER S
FF34 ; [.1E95.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER T
FF35 ; [.1EB5.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER U
FF36 ; [.1EE3.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER V
FF37 ; [.1EF5.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER W
FF38 ; [.1EFF.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER X
FF39 ; [.1F0B.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Y
FF3A ; [.1F21.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Z
FF3B ; [*0319.0020.0002] # FULLWIDTH LEFT SQUARE BRACKET
FF3C ; [*0305.0020.0002] # FULLWIDTH REVERSE SOLIDUS
FF3D ; [*031A.0020.0002] # FULLWIDTH RIGHT SQUARE BRACKET
FF3E ; [*0485.0020.0002] # FULLWIDTH CIRCUMFLEX ACCENT
FF3F ; [*020B.0020.0002] # FULLWIDTH LOW LINE
FF40 ; [*0482.0020.0002] # FULLWIDTH GRAVE ACCENT
FF41 ; [.1C47.0020.0002] # FULLWIDTH LATIN SMALL LETTER A
FF42 ; [.1C60.0020.0002] # FULLWIDTH LATIN SMALL LETTER B
FF43 ; [.1C7A.0020.0002] # FULLWIDTH LATIN SMALL LETTER C
FF44 ; [.1C8F.0020.0002] # FULLWIDTH LATIN SMALL LETTER D
FF45 ; [.1CAA.0020.0002] # FULLWIDTH LATIN SMALL LETTER E
FF46 ; [.1CE5.0020.0002] # FULLWIDTH LATIN SMALL LETTER F
FF47 ; [.1CF4.0020.0002] # FULLWIDTH LATIN SMALL LETTER G
FF48 ; [.1D18.0020.0002] # FULLWIDTH LATIN SMALL LETTER H
FF49 ; [.1D32.0020.0002] # FULLWIDTH LATIN SMALL LETTER I
FF4A ; [.1D4C.0020.0002] # FULLWIDTH LATIN SMALL LETTER J
FF4B ; [.1D65.0020.0002] # FULLWIDTH LATIN SMALL LETTER K
FF4C ; [.1D77.0020.0002] # FULLWIDTH LATIN SMALL LETTER L
FF4D ; [.1DAA.0020.0002] # FULLWIDTH LATIN SMALL LETTER M
FF4E ; [.1DB9.0020.0002] # FULLWIDTH LATIN SMALL LETTER N
FF4F ; [.1DDD.0020.0002] # FULLWIDTH LATIN SMALL LETTER O
FF50 ; [.1E0C.0020.0002] # FULLWIDTH LATIN SMALL LETTER P
FF51 ; [.1E21.0020.0002] # FULLWIDTH LATIN SMALL LETTER Q
FF52 ; [.1E33.0020.0002] # FULLWIDTH LATIN SMALL LETTER R
FF53 ; [.1E71.0020.0002] # FULLWIDTH LATIN SMALL LETTER S
FF54 ; [.1E95.0020.0002] # FULLWIDTH LATIN SMALL LETTER T
FF55 ; [.1EB5.0020.0002] # FULLWIDTH LATIN SMALL LETTER U
FF56 ; [.1EE3.0020.0002] # FULLWIDTH LATIN SMALL LETTER V
FF57 ; [.1EF5.0020.0002] # FULLWIDTH LATIN SMALL LETTER W
FF58 ; [.1EFF.0020.0002] # FULLWIDTH LATIN SMALL LETTER X
FF59 ; [.1F0B.0020.0002] # FULLWIDTH LATIN SMALL LETTER Y
FF5A ; [.1F21.0020.0002] # FULLWIDTH LATIN SMALL LETTER Z
FF5B ; [*031B.0020.0002] # FULLWIDTH LEFT CURLY BRACKET
FF5C ; [*061E.0020.0002] # FULLWIDTH VERTICAL LINE
FF5D ; [*031C.0020.0002] # FULLWIDTH RIGHT CURLY BRACKET
FF5E ; [*0620.0020.0002] # FULLWIDTH TILDE
FF5F ; [*032D.0020.0002] # FULLWIDTH LEFT WHITE PARENTHESIS
FF60 ; [*032E.0020.0002] # FULLWIDTH RIGHT WHITE PARENTHESIS
FF61 ; [*028A.0020.0002] # HALFWIDTH IDEOGRAPHIC FULL STOP
FF62 ; [*0373.0020.0002] # HALFWIDTH LEFT CORNER BRACKET
FF63 ; [*0374.0020.0002] # HALFWIDTH RIGHT CORNER BRACKET
FF64 ; [*0231.0020.0002] # HALFWIDTH IDEOGRAPHIC COMMA
FF65 ; [*0221.0020.0002] # HALFWIDTH KATAKANA MIDDLE DOT
FF66 ; [.3D8A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WO
FF67 ; [.3D5A.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL A
FF68 ; [.3D5B.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL I
FF69 ; [.3D5C.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL U
FF6A ; [.3D5E.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL E
FF6B ; [.3D5F.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL O
FF6C ; [.3D7E.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YA
FF6D ; [.3D7F.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YU
FF6E ; [.3D81.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YO
FF6F ; [.3D6C.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL TU
FF70 ; [.1C0E.0020.0002] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
FF71 ; [.3D5A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER A
FF72 ; [.3D5B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER I
FF73 ; [.3D5C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER U
FF74 ; [.3D5E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER E
FF75 ; [.3D5F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER O
FF76 ; [.3D60.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KA
FF77 ; [.3D61.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KI
FF78 ; [.3D62.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KU
FF79 ; [.3D63.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KE
FF7A ; [.3D64.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KO
FF7B ; [.3D65.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SA
FF7C ; [.3D66.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SI
FF7D ; [.3D67.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SU
FF7E ; [.3D68.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SE
FF7F ; [.3D69.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SO
FF80 ; [.3D6A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TA
FF81 ; [.3D6B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TI
FF82 ; [.3D6C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TU
FF83 ; [.3D6D.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TE
FF84 ; [.3D6E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TO
FF85 ; [.3D6F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NA
FF86 ; [.3D70.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NI
FF87 ; [.3D71.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NU
FF88 ; [.3D72.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NE
FF89 ; [.3D73.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NO
FF8A ; [.3D74.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HA
FF8B ; [.3D75.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HI
FF8C ; [.3D76.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HU
FF8D ; [.3D77.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HE
FF8E ; [.3D78.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HO
FF8F ; [.3D79.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MA
FF90 ; [.3D7A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MI
FF91 ; [.3D7B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MU
FF92 ; [.3D7C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER ME
FF93 ; [.3D7D.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MO
FF94 ; [.3D7E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YA
FF95 ; [.3D7F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YU
FF96 ; [.3D81.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YO
FF97 ; [.3D82.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RA
FF98 ; [.3D83.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RI
FF99 ; [.3D84.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RU
FF9A ; [.3D85.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RE
FF9B ; [.3D86.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RO
FF9C ; [.3D87.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WA
FF9D ; [.3D8B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER N
FF9E ; [.0000.0037.0002] # HALFWIDTH KATAKANA VOICED SOUND MARK
FF9F ; [.0000.0038.0002] # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
FFE0 ; [.1C11.0020.0002] # FULLWIDTH CENT SIGN
FFE1 ; [.1C13.0020.0002] # FULLWIDTH POUND SIGN
FFE2 ; [*061D.0020.0002] # FULLWIDTH NOT SIGN
FFE3 ; [*0209.0020.0002] # FULLWIDTH MACRON
FFE4 ; [*061F.0020.0002] # FULLWIDTH BROKEN BAR
FFE5 ; [.1C14.0020.0002] # FULLWIDTH YEN SIGN
FFE6 ; [.1C27.0020.0002] # FULLWIDTH WON SIGN
FFE8 ; [*081A.0020.0002] # HALFWIDTH FORMS LIGHT VERTICAL
FFE9 ; [*059C.0020.0002] # HALFWIDTH LEFTWARDS ARROW
FFEA ; [*059E.0020.0002] # HALFWIDTH UPWARDS ARROW
FFEB ; [*059D.0020.0002] # HALFWIDTH RIGHTWARDS ARROW
FFEC ; [*059F.0020.0002] # HALFWIDTH DOWNWARDS ARROW
FFED ; [*08B8.0020.0002] # HALFWIDTH BLACK SQUARE
FFEE ; [*08E3.0020.0002] # HALFWIDTH WHITE CIRCLE
30A1 30FC ; [.3D5A.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL A, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF67 30FC ; [.3D5A.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL A, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF67 FF70 ; [.3D5A.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL A, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3041 30FC ; [.3D5A.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL A, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A2 30FC ; [.3D5A.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER A, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF71 30FC ; [.3D5A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER A, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF71 FF70 ; [.3D5A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER A, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3042 30FC ; [.3D5A.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER A, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AB 30FC ; [.3D60.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF76 30FC ; [.3D60.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF76 FF70 ; [.3D60.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304B 30FC ; [.3D60.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AC 30FC ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER GA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AB 3099 30FC ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF76 FF9E 30FC ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF76 FF9E FF70 ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304C 30FC ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER GA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304B 3099 30FC ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B5 30FC ; [.3D65.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7B 30FC ; [.3D65.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7B FF70 ; [.3D65.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3055 30FC ; [.3D65.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B6 30FC ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER ZA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B5 3099 30FC ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7B FF9E 30FC ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7B FF9E FF70 ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3056 30FC ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER ZA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3055 3099 30FC ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BF 30FC ; [.3D6A.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER TA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF80 30FC ; [.3D6A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF80 FF70 ; [.3D6A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305F 30FC ; [.3D6A.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER TA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C0 30FC ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER DA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BF 3099 30FC ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF80 FF9E 30FC ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF80 FF9E FF70 ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3060 30FC ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER DA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305F 3099 30FC ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CA 30FC ; [.3D6F.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER NA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF85 30FC ; [.3D6F.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF85 FF70 ; [.3D6F.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306A 30FC ; [.3D6F.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER NA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CF 30FC ; [.3D74.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8A 30FC ; [.3D74.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8A FF70 ; [.3D74.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306F 30FC ; [.3D74.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D0 30FC ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER BA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CF 3099 30FC ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8A FF9E 30FC ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8A FF9E FF70 ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3070 30FC ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER BA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306F 3099 30FC ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D1 30FC ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER PA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CF 309A 30FC ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8A FF9F 30FC ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8A FF9F FF70 ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3071 30FC ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER PA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306F 309A 30FC ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DE 30FC ; [.3D79.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER MA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8F 30FC ; [.3D79.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8F FF70 ; [.3D79.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307E 30FC ; [.3D79.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER MA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E3 30FC ; [.3D7E.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6C 30FC ; [.3D7E.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6C FF70 ; [.3D7E.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3083 30FC ; [.3D7E.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E4 30FC ; [.3D7E.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF94 30FC ; [.3D7E.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF94 FF70 ; [.3D7E.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3084 30FC ; [.3D7E.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E9 30FC ; [.3D82.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF97 30FC ; [.3D82.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF97 FF70 ; [.3D82.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3089 30FC ; [.3D82.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30EE 30FC ; [.3D87.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
308E 30FC ; [.3D87.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30EF 30FC ; [.3D87.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9C 30FC ; [.3D87.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9C FF70 ; [.3D87.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
308F 30FC ; [.3D87.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F7 30FC ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER VA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30EF 3099 30FC ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER WA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9C FF9E 30FC ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9C FF9E FF70 ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F5 30FC ; [.3D60.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3095 30FC ; [.3D60.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F5 30FC ; [.3D74.0020.000F][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31FB 30FC ; [.3D82.0020.000F][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A3 30FC ; [.3D5B.0020.000F.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL I, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF68 30FC ; [.3D5B.0020.000F.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL I, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF68 FF70 ; [.3D5B.0020.000F.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL I, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3043 30FC ; [.3D5B.0020.000F.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER SMALL I, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A4 30FC ; [.3D5B.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER I, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF72 30FC ; [.3D5B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER I, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF72 FF70 ; [.3D5B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER I, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3044 30FC ; [.3D5B.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER I, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AD 30FC ; [.3D61.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER KI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF77 30FC ; [.3D61.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF77 FF70 ; [.3D61.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304D 30FC ; [.3D61.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER KI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AE 30FC ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER GI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AD 3099 30FC ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF77 FF9E 30FC ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF77 FF9E FF70 ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304E 30FC ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER GI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304D 3099 30FC ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B7 30FC ; [.3D66.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7C 30FC ; [.3D66.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7C FF70 ; [.3D66.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3057 30FC ; [.3D66.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B8 30FC ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER ZI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B7 3099 30FC ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7C FF9E 30FC ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7C FF9E FF70 ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3058 30FC ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER ZI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3057 3099 30FC ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C1 30FC ; [.3D6B.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER TI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF81 30FC ; [.3D6B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF81 FF70 ; [.3D6B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3061 30FC ; [.3D6B.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER TI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C2 30FC ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER DI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C1 3099 30FC ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF81 FF9E 30FC ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF81 FF9E FF70 ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3062 30FC ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER DI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3061 3099 30FC ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CB 30FC ; [.3D70.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER NI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF86 30FC ; [.3D70.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF86 FF70 ; [.3D70.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306B 30FC ; [.3D70.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER NI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D2 30FC ; [.3D75.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8B 30FC ; [.3D75.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8B FF70 ; [.3D75.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3072 30FC ; [.3D75.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D3 30FC ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER BI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D2 3099 30FC ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8B FF9E 30FC ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8B FF9E FF70 ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3073 30FC ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER BI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3072 3099 30FC ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D4 30FC ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER PI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D2 309A 30FC ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8B FF9F 30FC ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8B FF9F FF70 ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3074 30FC ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER PI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3072 309A 30FC ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DF 30FC ; [.3D7A.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER MI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF90 30FC ; [.3D7A.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF90 FF70 ; [.3D7A.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307F 30FC ; [.3D7A.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER MI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30EA 30FC ; [.3D83.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF98 30FC ; [.3D83.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF98 FF70 ; [.3D83.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
308A 30FC ; [.3D83.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F0 30FC ; [.3D88.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER WI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3090 30FC ; [.3D88.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER WI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F8 30FC ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER VI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F0 3099 30FC ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER WI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F1 30FC ; [.3D66.0020.000F][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F6 30FC ; [.3D75.0020.000F][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31FC 30FC ; [.3D83.0020.000F][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A5 30FC ; [.3D5C.0020.000F.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL U, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF69 30FC ; [.3D5C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF69 FF70 ; [.3D5C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3045 30FC ; [.3D5C.0020.000F.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SMALL U, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A6 30FC ; [.3D5C.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER U, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF73 30FC ; [.3D5C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF73 FF70 ; [.3D5C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3046 30FC ; [.3D5C.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER U, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AF 30FC ; [.3D62.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF78 30FC ; [.3D62.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF78 FF70 ; [.3D62.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304F 30FC ; [.3D62.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B0 30FC ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER GU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AF 3099 30FC ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF78 FF9E 30FC ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF78 FF9E FF70 ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3050 30FC ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER GU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304F 3099 30FC ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B9 30FC ; [.3D67.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7D 30FC ; [.3D67.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7D FF70 ; [.3D67.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3059 30FC ; [.3D67.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BA 30FC ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER ZU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B9 3099 30FC ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7D FF9E 30FC ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7D FF9E FF70 ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305A 30FC ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER ZU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3059 3099 30FC ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C3 30FC ; [.3D6C.0020.000F.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6F 30FC ; [.3D6C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6F FF70 ; [.3D6C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3063 30FC ; [.3D6C.0020.000F.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SMALL TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C4 30FC ; [.3D6C.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF82 30FC ; [.3D6C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF82 FF70 ; [.3D6C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3064 30FC ; [.3D6C.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C5 30FC ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER DU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C4 3099 30FC ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF82 FF9E 30FC ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF82 FF9E FF70 ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3065 30FC ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER DU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3064 3099 30FC ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CC 30FC ; [.3D71.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF87 30FC ; [.3D71.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF87 FF70 ; [.3D71.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306C 30FC ; [.3D71.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D5 30FC ; [.3D76.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8C 30FC ; [.3D76.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8C FF70 ; [.3D76.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3075 30FC ; [.3D76.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D6 30FC ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER BU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D5 3099 30FC ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8C FF9E 30FC ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8C FF9E FF70 ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3076 30FC ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER BU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3075 3099 30FC ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D7 30FC ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER PU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D5 309A 30FC ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8C FF9F 30FC ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8C FF9F FF70 ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3077 30FC ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER PU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3075 309A 30FC ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E0 30FC ; [.3D7B.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF91 30FC ; [.3D7B.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF91 FF70 ; [.3D7B.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3080 30FC ; [.3D7B.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E5 30FC ; [.3D7F.0020.000F.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6D 30FC ; [.3D7F.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6D FF70 ; [.3D7F.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3085 30FC ; [.3D7F.0020.000F.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SMALL YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E6 30FC ; [.3D7F.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF95 30FC ; [.3D7F.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF95 FF70 ; [.3D7F.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3086 30FC ; [.3D7F.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30EB 30FC ; [.3D84.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF99 30FC ; [.3D84.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF99 FF70 ; [.3D84.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
308B 30FC ; [.3D84.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F4 30FC ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER VU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A6 3099 30FC ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF73 FF9E 30FC ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF73 FF9E FF70 ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3094 30FC ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER VU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3046 3099 30FC ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F0 30FC ; [.3D62.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F2 30FC ; [.3D67.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F4 30FC ; [.3D71.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F7 30FC ; [.3D76.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31FA 30FC ; [.3D7B.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31FD 30FC ; [.3D84.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A7 30FC ; [.3D5E.0020.000F.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL E, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6A 30FC ; [.3D5E.0020.000F.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL E, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6A FF70 ; [.3D5E.0020.000F.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL E, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3047 30FC ; [.3D5E.0020.000F.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SMALL E, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A8 30FC ; [.3D5E.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER E, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF74 30FC ; [.3D5E.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER E, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF74 FF70 ; [.3D5E.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER E, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3048 30FC ; [.3D5E.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER E, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B1 30FC ; [.3D63.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF79 30FC ; [.3D63.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF79 FF70 ; [.3D63.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3051 30FC ; [.3D63.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B2 30FC ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER GE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B1 3099 30FC ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF79 FF9E 30FC ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF79 FF9E FF70 ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3052 30FC ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER GE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3051 3099 30FC ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BB 30FC ; [.3D68.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7E 30FC ; [.3D68.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7E FF70 ; [.3D68.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305B 30FC ; [.3D68.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BC 30FC ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER ZE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BB 3099 30FC ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7E FF9E 30FC ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7E FF9E FF70 ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305C 30FC ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER ZE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305B 3099 30FC ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C6 30FC ; [.3D6D.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER TE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF83 30FC ; [.3D6D.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF83 FF70 ; [.3D6D.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3066 30FC ; [.3D6D.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER TE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C7 30FC ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER DE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C6 3099 30FC ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF83 FF9E 30FC ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF83 FF9E FF70 ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3067 30FC ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER DE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3066 3099 30FC ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CD 30FC ; [.3D72.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER NE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF88 30FC ; [.3D72.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF88 FF70 ; [.3D72.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306D 30FC ; [.3D72.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER NE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D8 30FC ; [.3D77.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8D 30FC ; [.3D77.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8D FF70 ; [.3D77.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3078 30FC ; [.3D77.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D9 30FC ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER BE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D8 3099 30FC ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8D FF9E 30FC ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8D FF9E FF70 ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3079 30FC ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER BE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3078 3099 30FC ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DA 30FC ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER PE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30D8 309A 30FC ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8D FF9F 30FC ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8D FF9F FF70 ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307A 30FC ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER PE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3078 309A 30FC ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E1 30FC ; [.3D7C.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER ME, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF92 30FC ; [.3D7C.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER ME, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF92 FF70 ; [.3D7C.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER ME, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3081 30FC ; [.3D7C.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER ME, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30EC 30FC ; [.3D85.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9A 30FC ; [.3D85.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9A FF70 ; [.3D85.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
308C 30FC ; [.3D85.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F1 30FC ; [.3D89.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER WE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3091 30FC ; [.3D89.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER WE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F9 30FC ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER VE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F1 3099 30FC ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER WE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F6 30FC ; [.3D63.0020.000F.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3096 30FC ; [.3D63.0020.000F.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SMALL KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F8 30FC ; [.3D77.0020.000F][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31FE 30FC ; [.3D85.0020.000F][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A9 30FC ; [.3D5F.0020.000F.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL O, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6B 30FC ; [.3D5F.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL O, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6B FF70 ; [.3D5F.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL O, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3049 30FC ; [.3D5F.0020.000F.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SMALL O, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30AA 30FC ; [.3D5F.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER O, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF75 30FC ; [.3D5F.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER O, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF75 FF70 ; [.3D5F.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER O, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
304A 30FC ; [.3D5F.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER O, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B3 30FC ; [.3D64.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER KO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7A 30FC ; [.3D64.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7A FF70 ; [.3D64.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3053 30FC ; [.3D64.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER KO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B4 30FC ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER GO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30B3 3099 30FC ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7A FF9E 30FC ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7A FF9E FF70 ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3054 30FC ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER GO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3053 3099 30FC ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BD 30FC ; [.3D69.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7F 30FC ; [.3D69.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7F FF70 ; [.3D69.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305D 30FC ; [.3D69.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BE 30FC ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER ZO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30BD 3099 30FC ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7F FF9E 30FC ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF7F FF9E FF70 ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305E 30FC ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER ZO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
305D 3099 30FC ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C8 30FC ; [.3D6E.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF84 30FC ; [.3D6E.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF84 FF70 ; [.3D6E.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3068 30FC ; [.3D6E.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C9 30FC ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER DO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30C8 3099 30FC ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF84 FF9E 30FC ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF84 FF9E FF70 ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3069 30FC ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER DO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3068 3099 30FC ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30CE 30FC ; [.3D73.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER NO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF89 30FC ; [.3D73.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF89 FF70 ; [.3D73.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
306E 30FC ; [.3D73.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER NO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DB 30FC ; [.3D78.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8E 30FC ; [.3D78.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8E FF70 ; [.3D78.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307B 30FC ; [.3D78.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DC 30FC ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER BO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DB 3099 30FC ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8E FF9E 30FC ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8E FF9E FF70 ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307C 30FC ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER BO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307B 3099 30FC ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DD 30FC ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER PO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30DB 309A 30FC ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8E FF9F 30FC ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF8E FF9F FF70 ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307D 30FC ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER PO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
307B 309A 30FC ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E2 30FC ; [.3D7D.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER MO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF93 30FC ; [.3D7D.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF93 FF70 ; [.3D7D.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3082 30FC ; [.3D7D.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER MO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E7 30FC ; [.3D81.0020.000F.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6E 30FC ; [.3D81.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF6E FF70 ; [.3D81.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3087 30FC ; [.3D81.0020.000F.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SMALL YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30E8 30FC ; [.3D81.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF96 30FC ; [.3D81.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF96 FF70 ; [.3D81.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3088 30FC ; [.3D81.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30ED 30FC ; [.3D86.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9B 30FC ; [.3D86.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF9B FF70 ; [.3D86.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
308D 30FC ; [.3D86.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F2 30FC ; [.3D8A.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER WO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF66 30FC ; [.3D8A.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF66 FF70 ; [.3D8A.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
3092 30FC ; [.3D8A.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER WO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30FA 30FC ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER VO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30F2 3099 30FC ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER WO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF66 FF9E 30FC ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
FF66 FF9E FF70 ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F3 30FC ; [.3D6E.0020.000F][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31F9 30FC ; [.3D78.0020.000F][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
31FF 30FC ; [.3D86.0020.000F][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK>
30A1 30FD ; [.3D5A.0020.000F.0002][.3D5A.0020.0010.0002] # <KATAKANA LETTER SMALL A, KATAKANA ITERATION MARK>
FF67 30FD ; [.3D5A.0020.000F.0002][.3D5A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL A, KATAKANA ITERATION MARK>
3041 309D ; [.3D5A.0020.000F.0001][.3D5A.0020.0010.0002] # <HIRAGANA LETTER SMALL A, HIRAGANA ITERATION MARK>
30A2 30FD ; [.3D5A.0020.0011.0002][.3D5A.0020.0010.0002] # <KATAKANA LETTER A, KATAKANA ITERATION MARK>
FF71 30FD ; [.3D5A.0020.0011.0002][.3D5A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER A, KATAKANA ITERATION MARK>
3042 309D ; [.3D5A.0020.0011.0001][.3D5A.0020.0010.0002] # <HIRAGANA LETTER A, HIRAGANA ITERATION MARK>
30A3 30FD ; [.3D5B.0020.000F.0002][.3D5B.0020.0010.0002] # <KATAKANA LETTER SMALL I, KATAKANA ITERATION MARK>
FF68 30FD ; [.3D5B.0020.000F.0002][.3D5B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL I, KATAKANA ITERATION MARK>
3043 309D ; [.3D5B.0020.000F.0001][.3D5B.0020.0010.0002] # <HIRAGANA LETTER SMALL I, HIRAGANA ITERATION MARK>
30A4 30FD ; [.3D5B.0020.0011.0002][.3D5B.0020.0010.0002] # <KATAKANA LETTER I, KATAKANA ITERATION MARK>
FF72 30FD ; [.3D5B.0020.0011.0002][.3D5B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER I, KATAKANA ITERATION MARK>
3044 309D ; [.3D5B.0020.0011.0001][.3D5B.0020.0010.0002] # <HIRAGANA LETTER I, HIRAGANA ITERATION MARK>
30A5 30FD ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER SMALL U, KATAKANA ITERATION MARK>
FF69 30FD ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, KATAKANA ITERATION MARK>
3045 309D ; [.3D5C.0020.000F.0001][.3D5C.0020.0010.0002] # <HIRAGANA LETTER SMALL U, HIRAGANA ITERATION MARK>
30A5 30FE ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL U, KATAKANA VOICED ITERATION MARK>
FF69 30FE ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, KATAKANA VOICED ITERATION MARK>
3045 309E ; [.3D5C.0020.000F.0001][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL U, HIRAGANA VOICED ITERATION MARK>
30A6 30FD ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER U, KATAKANA ITERATION MARK>
FF73 30FD ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER U, KATAKANA ITERATION MARK>
3046 309D ; [.3D5C.0020.0011.0001][.3D5C.0020.0010.0002] # <HIRAGANA LETTER U, HIRAGANA ITERATION MARK>
30A6 30FE ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER U, KATAKANA VOICED ITERATION MARK>
FF73 30FE ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER U, KATAKANA VOICED ITERATION MARK>
3046 309E ; [.3D5C.0020.0011.0001][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER U, HIRAGANA VOICED ITERATION MARK>
30A7 30FD ; [.3D5E.0020.000F.0002][.3D5E.0020.0010.0002] # <KATAKANA LETTER SMALL E, KATAKANA ITERATION MARK>
FF6A 30FD ; [.3D5E.0020.000F.0002][.3D5E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL E, KATAKANA ITERATION MARK>
3047 309D ; [.3D5E.0020.000F.0001][.3D5E.0020.0010.0002] # <HIRAGANA LETTER SMALL E, HIRAGANA ITERATION MARK>
30A8 30FD ; [.3D5E.0020.0011.0002][.3D5E.0020.0010.0002] # <KATAKANA LETTER E, KATAKANA ITERATION MARK>
FF74 30FD ; [.3D5E.0020.0011.0002][.3D5E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER E, KATAKANA ITERATION MARK>
3048 309D ; [.3D5E.0020.0011.0001][.3D5E.0020.0010.0002] # <HIRAGANA LETTER E, HIRAGANA ITERATION MARK>
30A9 30FD ; [.3D5F.0020.000F.0002][.3D5F.0020.0010.0002] # <KATAKANA LETTER SMALL O, KATAKANA ITERATION MARK>
FF6B 30FD ; [.3D5F.0020.000F.0002][.3D5F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL O, KATAKANA ITERATION MARK>
3049 309D ; [.3D5F.0020.000F.0001][.3D5F.0020.0010.0002] # <HIRAGANA LETTER SMALL O, HIRAGANA ITERATION MARK>
30AA 30FD ; [.3D5F.0020.0011.0002][.3D5F.0020.0010.0002] # <KATAKANA LETTER O, KATAKANA ITERATION MARK>
FF75 30FD ; [.3D5F.0020.0011.0002][.3D5F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER O, KATAKANA ITERATION MARK>
304A 309D ; [.3D5F.0020.0011.0001][.3D5F.0020.0010.0002] # <HIRAGANA LETTER O, HIRAGANA ITERATION MARK>
30AB 30FD ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER KA, KATAKANA ITERATION MARK>
FF76 30FD ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KA, KATAKANA ITERATION MARK>
304B 309D ; [.3D60.0020.0011.0001][.3D60.0020.0010.0002] # <HIRAGANA LETTER KA, HIRAGANA ITERATION MARK>
30AB 30FE ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KA, KATAKANA VOICED ITERATION MARK>
FF76 30FE ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KA, KATAKANA VOICED ITERATION MARK>
304B 309E ; [.3D60.0020.0011.0001][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KA, HIRAGANA VOICED ITERATION MARK>
30AC 30FD ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER GA, KATAKANA ITERATION MARK>
30AB 3099 30FD ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF76 FF9E 30FD ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
304C 309D ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002] # <HIRAGANA LETTER GA, HIRAGANA ITERATION MARK>
304B 3099 309D ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002] # <HIRAGANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30AC 30FE ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GA, KATAKANA VOICED ITERATION MARK>
30AB 3099 30FE ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF76 FF9E 30FE ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
304C 309E ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GA, HIRAGANA VOICED ITERATION MARK>
304B 3099 309E ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30AD 30FD ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002] # <KATAKANA LETTER KI, KATAKANA ITERATION MARK>
FF77 30FD ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KI, KATAKANA ITERATION MARK>
304D 309D ; [.3D61.0020.0011.0001][.3D61.0020.0010.0002] # <HIRAGANA LETTER KI, HIRAGANA ITERATION MARK>
30AD 30FE ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KI, KATAKANA VOICED ITERATION MARK>
FF77 30FE ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KI, KATAKANA VOICED ITERATION MARK>
304D 309E ; [.3D61.0020.0011.0001][.3D61.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KI, HIRAGANA VOICED ITERATION MARK>
30AE 30FD ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002] # <KATAKANA LETTER GI, KATAKANA ITERATION MARK>
30AD 3099 30FD ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002] # <KATAKANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF77 FF9E 30FD ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
304E 309D ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002] # <HIRAGANA LETTER GI, HIRAGANA ITERATION MARK>
304D 3099 309D ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002] # <HIRAGANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30AE 30FE ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GI, KATAKANA VOICED ITERATION MARK>
30AD 3099 30FE ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF77 FF9E 30FE ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
304E 309E ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GI, HIRAGANA VOICED ITERATION MARK>
304D 3099 309E ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30AF 30FD ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002] # <KATAKANA LETTER KU, KATAKANA ITERATION MARK>
FF78 30FD ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KU, KATAKANA ITERATION MARK>
304F 309D ; [.3D62.0020.0011.0001][.3D62.0020.0010.0002] # <HIRAGANA LETTER KU, HIRAGANA ITERATION MARK>
30AF 30FE ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KU, KATAKANA VOICED ITERATION MARK>
FF78 30FE ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KU, KATAKANA VOICED ITERATION MARK>
304F 309E ; [.3D62.0020.0011.0001][.3D62.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KU, HIRAGANA VOICED ITERATION MARK>
30B0 30FD ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002] # <KATAKANA LETTER GU, KATAKANA ITERATION MARK>
30AF 3099 30FD ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002] # <KATAKANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF78 FF9E 30FD ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3050 309D ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002] # <HIRAGANA LETTER GU, HIRAGANA ITERATION MARK>
304F 3099 309D ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002] # <HIRAGANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30B0 30FE ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GU, KATAKANA VOICED ITERATION MARK>
30AF 3099 30FE ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF78 FF9E 30FE ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3050 309E ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GU, HIRAGANA VOICED ITERATION MARK>
304F 3099 309E ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30B1 30FD ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER KE, KATAKANA ITERATION MARK>
FF79 30FD ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KE, KATAKANA ITERATION MARK>
3051 309D ; [.3D63.0020.0011.0001][.3D63.0020.0010.0002] # <HIRAGANA LETTER KE, HIRAGANA ITERATION MARK>
30B1 30FE ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KE, KATAKANA VOICED ITERATION MARK>
FF79 30FE ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KE, KATAKANA VOICED ITERATION MARK>
3051 309E ; [.3D63.0020.0011.0001][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KE, HIRAGANA VOICED ITERATION MARK>
30B2 30FD ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER GE, KATAKANA ITERATION MARK>
30B1 3099 30FD ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF79 FF9E 30FD ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3052 309D ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002] # <HIRAGANA LETTER GE, HIRAGANA ITERATION MARK>
3051 3099 309D ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002] # <HIRAGANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30B2 30FE ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GE, KATAKANA VOICED ITERATION MARK>
30B1 3099 30FE ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF79 FF9E 30FE ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3052 309E ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GE, HIRAGANA VOICED ITERATION MARK>
3051 3099 309E ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30B3 30FD ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002] # <KATAKANA LETTER KO, KATAKANA ITERATION MARK>
FF7A 30FD ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KO, KATAKANA ITERATION MARK>
3053 309D ; [.3D64.0020.0011.0001][.3D64.0020.0010.0002] # <HIRAGANA LETTER KO, HIRAGANA ITERATION MARK>
30B3 30FE ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KO, KATAKANA VOICED ITERATION MARK>
FF7A 30FE ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KO, KATAKANA VOICED ITERATION MARK>
3053 309E ; [.3D64.0020.0011.0001][.3D64.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KO, HIRAGANA VOICED ITERATION MARK>
30B4 30FD ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002] # <KATAKANA LETTER GO, KATAKANA ITERATION MARK>
30B3 3099 30FD ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002] # <KATAKANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF7A FF9E 30FD ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3054 309D ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002] # <HIRAGANA LETTER GO, HIRAGANA ITERATION MARK>
3053 3099 309D ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002] # <HIRAGANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30B4 30FE ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GO, KATAKANA VOICED ITERATION MARK>
30B3 3099 30FE ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF7A FF9E 30FE ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3054 309E ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GO, HIRAGANA VOICED ITERATION MARK>
3053 3099 309E ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30B5 30FD ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002] # <KATAKANA LETTER SA, KATAKANA ITERATION MARK>
FF7B 30FD ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SA, KATAKANA ITERATION MARK>
3055 309D ; [.3D65.0020.0011.0001][.3D65.0020.0010.0002] # <HIRAGANA LETTER SA, HIRAGANA ITERATION MARK>
30B5 30FE ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SA, KATAKANA VOICED ITERATION MARK>
FF7B 30FE ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SA, KATAKANA VOICED ITERATION MARK>
3055 309E ; [.3D65.0020.0011.0001][.3D65.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SA, HIRAGANA VOICED ITERATION MARK>
30B6 30FD ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002] # <KATAKANA LETTER ZA, KATAKANA ITERATION MARK>
30B5 3099 30FD ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002] # <KATAKANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF7B FF9E 30FD ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3056 309D ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002] # <HIRAGANA LETTER ZA, HIRAGANA ITERATION MARK>
3055 3099 309D ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002] # <HIRAGANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30B6 30FE ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZA, KATAKANA VOICED ITERATION MARK>
30B5 3099 30FE ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF7B FF9E 30FE ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3056 309E ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZA, HIRAGANA VOICED ITERATION MARK>
3055 3099 309E ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30B7 30FD ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002] # <KATAKANA LETTER SI, KATAKANA ITERATION MARK>
FF7C 30FD ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SI, KATAKANA ITERATION MARK>
3057 309D ; [.3D66.0020.0011.0001][.3D66.0020.0010.0002] # <HIRAGANA LETTER SI, HIRAGANA ITERATION MARK>
30B7 30FE ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SI, KATAKANA VOICED ITERATION MARK>
FF7C 30FE ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SI, KATAKANA VOICED ITERATION MARK>
3057 309E ; [.3D66.0020.0011.0001][.3D66.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SI, HIRAGANA VOICED ITERATION MARK>
30B8 30FD ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002] # <KATAKANA LETTER ZI, KATAKANA ITERATION MARK>
30B7 3099 30FD ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002] # <KATAKANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF7C FF9E 30FD ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3058 309D ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002] # <HIRAGANA LETTER ZI, HIRAGANA ITERATION MARK>
3057 3099 309D ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002] # <HIRAGANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30B8 30FE ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZI, KATAKANA VOICED ITERATION MARK>
30B7 3099 30FE ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF7C FF9E 30FE ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3058 309E ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZI, HIRAGANA VOICED ITERATION MARK>
3057 3099 309E ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30B9 30FD ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002] # <KATAKANA LETTER SU, KATAKANA ITERATION MARK>
FF7D 30FD ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SU, KATAKANA ITERATION MARK>
3059 309D ; [.3D67.0020.0011.0001][.3D67.0020.0010.0002] # <HIRAGANA LETTER SU, HIRAGANA ITERATION MARK>
30B9 30FE ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SU, KATAKANA VOICED ITERATION MARK>
FF7D 30FE ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SU, KATAKANA VOICED ITERATION MARK>
3059 309E ; [.3D67.0020.0011.0001][.3D67.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SU, HIRAGANA VOICED ITERATION MARK>
30BA 30FD ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002] # <KATAKANA LETTER ZU, KATAKANA ITERATION MARK>
30B9 3099 30FD ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002] # <KATAKANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF7D FF9E 30FD ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
305A 309D ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002] # <HIRAGANA LETTER ZU, HIRAGANA ITERATION MARK>
3059 3099 309D ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002] # <HIRAGANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30BA 30FE ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZU, KATAKANA VOICED ITERATION MARK>
30B9 3099 30FE ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF7D FF9E 30FE ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
305A 309E ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZU, HIRAGANA VOICED ITERATION MARK>
3059 3099 309E ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30BB 30FD ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002] # <KATAKANA LETTER SE, KATAKANA ITERATION MARK>
FF7E 30FD ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SE, KATAKANA ITERATION MARK>
305B 309D ; [.3D68.0020.0011.0001][.3D68.0020.0010.0002] # <HIRAGANA LETTER SE, HIRAGANA ITERATION MARK>
30BB 30FE ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SE, KATAKANA VOICED ITERATION MARK>
FF7E 30FE ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SE, KATAKANA VOICED ITERATION MARK>
305B 309E ; [.3D68.0020.0011.0001][.3D68.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SE, HIRAGANA VOICED ITERATION MARK>
30BC 30FD ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002] # <KATAKANA LETTER ZE, KATAKANA ITERATION MARK>
30BB 3099 30FD ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002] # <KATAKANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF7E FF9E 30FD ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
305C 309D ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002] # <HIRAGANA LETTER ZE, HIRAGANA ITERATION MARK>
305B 3099 309D ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002] # <HIRAGANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30BC 30FE ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZE, KATAKANA VOICED ITERATION MARK>
30BB 3099 30FE ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF7E FF9E 30FE ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
305C 309E ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZE, HIRAGANA VOICED ITERATION MARK>
305B 3099 309E ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30BD 30FD ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002] # <KATAKANA LETTER SO, KATAKANA ITERATION MARK>
FF7F 30FD ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SO, KATAKANA ITERATION MARK>
305D 309D ; [.3D69.0020.0011.0001][.3D69.0020.0010.0002] # <HIRAGANA LETTER SO, HIRAGANA ITERATION MARK>
30BD 30FE ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SO, KATAKANA VOICED ITERATION MARK>
FF7F 30FE ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SO, KATAKANA VOICED ITERATION MARK>
305D 309E ; [.3D69.0020.0011.0001][.3D69.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SO, HIRAGANA VOICED ITERATION MARK>
30BE 30FD ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002] # <KATAKANA LETTER ZO, KATAKANA ITERATION MARK>
30BD 3099 30FD ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002] # <KATAKANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF7F FF9E 30FD ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
305E 309D ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002] # <HIRAGANA LETTER ZO, HIRAGANA ITERATION MARK>
305D 3099 309D ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002] # <HIRAGANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30BE 30FE ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZO, KATAKANA VOICED ITERATION MARK>
30BD 3099 30FE ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF7F FF9E 30FE ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
305E 309E ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZO, HIRAGANA VOICED ITERATION MARK>
305D 3099 309E ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30BF 30FD ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002] # <KATAKANA LETTER TA, KATAKANA ITERATION MARK>
FF80 30FD ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TA, KATAKANA ITERATION MARK>
305F 309D ; [.3D6A.0020.0011.0001][.3D6A.0020.0010.0002] # <HIRAGANA LETTER TA, HIRAGANA ITERATION MARK>
30BF 30FE ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TA, KATAKANA VOICED ITERATION MARK>
FF80 30FE ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TA, KATAKANA VOICED ITERATION MARK>
305F 309E ; [.3D6A.0020.0011.0001][.3D6A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TA, HIRAGANA VOICED ITERATION MARK>
30C0 30FD ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002] # <KATAKANA LETTER DA, KATAKANA ITERATION MARK>
30BF 3099 30FD ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002] # <KATAKANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF80 FF9E 30FD ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3060 309D ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002] # <HIRAGANA LETTER DA, HIRAGANA ITERATION MARK>
305F 3099 309D ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002] # <HIRAGANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30C0 30FE ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DA, KATAKANA VOICED ITERATION MARK>
30BF 3099 30FE ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF80 FF9E 30FE ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3060 309E ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DA, HIRAGANA VOICED ITERATION MARK>
305F 3099 309E ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30C1 30FD ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002] # <KATAKANA LETTER TI, KATAKANA ITERATION MARK>
FF81 30FD ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TI, KATAKANA ITERATION MARK>
3061 309D ; [.3D6B.0020.0011.0001][.3D6B.0020.0010.0002] # <HIRAGANA LETTER TI, HIRAGANA ITERATION MARK>
30C1 30FE ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TI, KATAKANA VOICED ITERATION MARK>
FF81 30FE ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TI, KATAKANA VOICED ITERATION MARK>
3061 309E ; [.3D6B.0020.0011.0001][.3D6B.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TI, HIRAGANA VOICED ITERATION MARK>
30C2 30FD ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002] # <KATAKANA LETTER DI, KATAKANA ITERATION MARK>
30C1 3099 30FD ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002] # <KATAKANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF81 FF9E 30FD ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3062 309D ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002] # <HIRAGANA LETTER DI, HIRAGANA ITERATION MARK>
3061 3099 309D ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002] # <HIRAGANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30C2 30FE ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DI, KATAKANA VOICED ITERATION MARK>
30C1 3099 30FE ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF81 FF9E 30FE ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3062 309E ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DI, HIRAGANA VOICED ITERATION MARK>
3061 3099 309E ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30C3 30FD ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER SMALL TU, KATAKANA ITERATION MARK>
FF6F 30FD ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, KATAKANA ITERATION MARK>
3063 309D ; [.3D6C.0020.000F.0001][.3D6C.0020.0010.0002] # <HIRAGANA LETTER SMALL TU, HIRAGANA ITERATION MARK>
30C3 30FE ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL TU, KATAKANA VOICED ITERATION MARK>
FF6F 30FE ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, KATAKANA VOICED ITERATION MARK>
3063 309E ; [.3D6C.0020.000F.0001][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL TU, HIRAGANA VOICED ITERATION MARK>
30C4 30FD ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER TU, KATAKANA ITERATION MARK>
FF82 30FD ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TU, KATAKANA ITERATION MARK>
3064 309D ; [.3D6C.0020.0011.0001][.3D6C.0020.0010.0002] # <HIRAGANA LETTER TU, HIRAGANA ITERATION MARK>
30C4 30FE ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TU, KATAKANA VOICED ITERATION MARK>
FF82 30FE ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TU, KATAKANA VOICED ITERATION MARK>
3064 309E ; [.3D6C.0020.0011.0001][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TU, HIRAGANA VOICED ITERATION MARK>
30C5 30FD ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER DU, KATAKANA ITERATION MARK>
30C4 3099 30FD ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF82 FF9E 30FD ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3065 309D ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002] # <HIRAGANA LETTER DU, HIRAGANA ITERATION MARK>
3064 3099 309D ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002] # <HIRAGANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30C5 30FE ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DU, KATAKANA VOICED ITERATION MARK>
30C4 3099 30FE ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF82 FF9E 30FE ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3065 309E ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DU, HIRAGANA VOICED ITERATION MARK>
3064 3099 309E ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30C6 30FD ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002] # <KATAKANA LETTER TE, KATAKANA ITERATION MARK>
FF83 30FD ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TE, KATAKANA ITERATION MARK>
3066 309D ; [.3D6D.0020.0011.0001][.3D6D.0020.0010.0002] # <HIRAGANA LETTER TE, HIRAGANA ITERATION MARK>
30C6 30FE ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TE, KATAKANA VOICED ITERATION MARK>
FF83 30FE ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TE, KATAKANA VOICED ITERATION MARK>
3066 309E ; [.3D6D.0020.0011.0001][.3D6D.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TE, HIRAGANA VOICED ITERATION MARK>
30C7 30FD ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002] # <KATAKANA LETTER DE, KATAKANA ITERATION MARK>
30C6 3099 30FD ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002] # <KATAKANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF83 FF9E 30FD ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3067 309D ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002] # <HIRAGANA LETTER DE, HIRAGANA ITERATION MARK>
3066 3099 309D ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002] # <HIRAGANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30C7 30FE ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DE, KATAKANA VOICED ITERATION MARK>
30C6 3099 30FE ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF83 FF9E 30FE ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3067 309E ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DE, HIRAGANA VOICED ITERATION MARK>
3066 3099 309E ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30C8 30FD ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002] # <KATAKANA LETTER TO, KATAKANA ITERATION MARK>
FF84 30FD ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TO, KATAKANA ITERATION MARK>
3068 309D ; [.3D6E.0020.0011.0001][.3D6E.0020.0010.0002] # <HIRAGANA LETTER TO, HIRAGANA ITERATION MARK>
30C8 30FE ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TO, KATAKANA VOICED ITERATION MARK>
FF84 30FE ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TO, KATAKANA VOICED ITERATION MARK>
3068 309E ; [.3D6E.0020.0011.0001][.3D6E.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TO, HIRAGANA VOICED ITERATION MARK>
30C9 30FD ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002] # <KATAKANA LETTER DO, KATAKANA ITERATION MARK>
30C8 3099 30FD ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002] # <KATAKANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF84 FF9E 30FD ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3069 309D ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002] # <HIRAGANA LETTER DO, HIRAGANA ITERATION MARK>
3068 3099 309D ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002] # <HIRAGANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30C9 30FE ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DO, KATAKANA VOICED ITERATION MARK>
30C8 3099 30FE ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF84 FF9E 30FE ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3069 309E ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DO, HIRAGANA VOICED ITERATION MARK>
3068 3099 309E ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30CA 30FD ; [.3D6F.0020.0011.0002][.3D6F.0020.0010.0002] # <KATAKANA LETTER NA, KATAKANA ITERATION MARK>
FF85 30FD ; [.3D6F.0020.0011.0002][.3D6F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NA, KATAKANA ITERATION MARK>
306A 309D ; [.3D6F.0020.0011.0001][.3D6F.0020.0010.0002] # <HIRAGANA LETTER NA, HIRAGANA ITERATION MARK>
30CB 30FD ; [.3D70.0020.0011.0002][.3D70.0020.0010.0002] # <KATAKANA LETTER NI, KATAKANA ITERATION MARK>
FF86 30FD ; [.3D70.0020.0011.0002][.3D70.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NI, KATAKANA ITERATION MARK>
306B 309D ; [.3D70.0020.0011.0001][.3D70.0020.0010.0002] # <HIRAGANA LETTER NI, HIRAGANA ITERATION MARK>
30CC 30FD ; [.3D71.0020.0011.0002][.3D71.0020.0010.0002] # <KATAKANA LETTER NU, KATAKANA ITERATION MARK>
FF87 30FD ; [.3D71.0020.0011.0002][.3D71.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NU, KATAKANA ITERATION MARK>
306C 309D ; [.3D71.0020.0011.0001][.3D71.0020.0010.0002] # <HIRAGANA LETTER NU, HIRAGANA ITERATION MARK>
30CD 30FD ; [.3D72.0020.0011.0002][.3D72.0020.0010.0002] # <KATAKANA LETTER NE, KATAKANA ITERATION MARK>
FF88 30FD ; [.3D72.0020.0011.0002][.3D72.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NE, KATAKANA ITERATION MARK>
306D 309D ; [.3D72.0020.0011.0001][.3D72.0020.0010.0002] # <HIRAGANA LETTER NE, HIRAGANA ITERATION MARK>
30CE 30FD ; [.3D73.0020.0011.0002][.3D73.0020.0010.0002] # <KATAKANA LETTER NO, KATAKANA ITERATION MARK>
FF89 30FD ; [.3D73.0020.0011.0002][.3D73.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NO, KATAKANA ITERATION MARK>
306E 309D ; [.3D73.0020.0011.0001][.3D73.0020.0010.0002] # <HIRAGANA LETTER NO, HIRAGANA ITERATION MARK>
30CF 30FD ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER HA, KATAKANA ITERATION MARK>
FF8A 30FD ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HA, KATAKANA ITERATION MARK>
306F 309D ; [.3D74.0020.0011.0001][.3D74.0020.0010.0002] # <HIRAGANA LETTER HA, HIRAGANA ITERATION MARK>
30CF 30FE ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HA, KATAKANA VOICED ITERATION MARK>
FF8A 30FE ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HA, KATAKANA VOICED ITERATION MARK>
306F 309E ; [.3D74.0020.0011.0001][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HA, HIRAGANA VOICED ITERATION MARK>
30D0 30FD ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER BA, KATAKANA ITERATION MARK>
30CF 3099 30FD ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8A FF9E 30FD ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3070 309D ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER BA, HIRAGANA ITERATION MARK>
306F 3099 309D ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30D0 30FE ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BA, KATAKANA VOICED ITERATION MARK>
30CF 3099 30FE ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8A FF9E 30FE ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3070 309E ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BA, HIRAGANA VOICED ITERATION MARK>
306F 3099 309E ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30D1 30FD ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER PA, KATAKANA ITERATION MARK>
30CF 309A 30FD ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8A FF9F 30FD ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
3071 309D ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER PA, HIRAGANA ITERATION MARK>
306F 309A 309D ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30D1 30FE ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PA, KATAKANA VOICED ITERATION MARK>
30CF 309A 30FE ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8A FF9F 30FE ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3071 309E ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PA, HIRAGANA VOICED ITERATION MARK>
306F 309A 309E ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30D2 30FD ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER HI, KATAKANA ITERATION MARK>
FF8B 30FD ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HI, KATAKANA ITERATION MARK>
3072 309D ; [.3D75.0020.0011.0001][.3D75.0020.0010.0002] # <HIRAGANA LETTER HI, HIRAGANA ITERATION MARK>
30D2 30FE ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HI, KATAKANA VOICED ITERATION MARK>
FF8B 30FE ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HI, KATAKANA VOICED ITERATION MARK>
3072 309E ; [.3D75.0020.0011.0001][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HI, HIRAGANA VOICED ITERATION MARK>
30D3 30FD ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER BI, KATAKANA ITERATION MARK>
30D2 3099 30FD ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8B FF9E 30FD ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3073 309D ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER BI, HIRAGANA ITERATION MARK>
3072 3099 309D ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30D3 30FE ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BI, KATAKANA VOICED ITERATION MARK>
30D2 3099 30FE ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8B FF9E 30FE ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3073 309E ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BI, HIRAGANA VOICED ITERATION MARK>
3072 3099 309E ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30D4 30FD ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER PI, KATAKANA ITERATION MARK>
30D2 309A 30FD ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8B FF9F 30FD ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
3074 309D ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER PI, HIRAGANA ITERATION MARK>
3072 309A 309D ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30D4 30FE ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PI, KATAKANA VOICED ITERATION MARK>
30D2 309A 30FE ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8B FF9F 30FE ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3074 309E ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PI, HIRAGANA VOICED ITERATION MARK>
3072 309A 309E ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30D5 30FD ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER HU, KATAKANA ITERATION MARK>
FF8C 30FD ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HU, KATAKANA ITERATION MARK>
3075 309D ; [.3D76.0020.0011.0001][.3D76.0020.0010.0002] # <HIRAGANA LETTER HU, HIRAGANA ITERATION MARK>
30D5 30FE ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HU, KATAKANA VOICED ITERATION MARK>
FF8C 30FE ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HU, KATAKANA VOICED ITERATION MARK>
3075 309E ; [.3D76.0020.0011.0001][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HU, HIRAGANA VOICED ITERATION MARK>
30D6 30FD ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER BU, KATAKANA ITERATION MARK>
30D5 3099 30FD ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8C FF9E 30FD ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3076 309D ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER BU, HIRAGANA ITERATION MARK>
3075 3099 309D ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30D6 30FE ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BU, KATAKANA VOICED ITERATION MARK>
30D5 3099 30FE ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8C FF9E 30FE ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3076 309E ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BU, HIRAGANA VOICED ITERATION MARK>
3075 3099 309E ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30D7 30FD ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER PU, KATAKANA ITERATION MARK>
30D5 309A 30FD ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8C FF9F 30FD ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
3077 309D ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER PU, HIRAGANA ITERATION MARK>
3075 309A 309D ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30D7 30FE ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PU, KATAKANA VOICED ITERATION MARK>
30D5 309A 30FE ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8C FF9F 30FE ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3077 309E ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PU, HIRAGANA VOICED ITERATION MARK>
3075 309A 309E ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30D8 30FD ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER HE, KATAKANA ITERATION MARK>
FF8D 30FD ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HE, KATAKANA ITERATION MARK>
3078 309D ; [.3D77.0020.0011.0001][.3D77.0020.0010.0002] # <HIRAGANA LETTER HE, HIRAGANA ITERATION MARK>
30D8 30FE ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HE, KATAKANA VOICED ITERATION MARK>
FF8D 30FE ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HE, KATAKANA VOICED ITERATION MARK>
3078 309E ; [.3D77.0020.0011.0001][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HE, HIRAGANA VOICED ITERATION MARK>
30D9 30FD ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER BE, KATAKANA ITERATION MARK>
30D8 3099 30FD ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8D FF9E 30FD ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3079 309D ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER BE, HIRAGANA ITERATION MARK>
3078 3099 309D ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30D9 30FE ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BE, KATAKANA VOICED ITERATION MARK>
30D8 3099 30FE ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8D FF9E 30FE ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3079 309E ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BE, HIRAGANA VOICED ITERATION MARK>
3078 3099 309E ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30DA 30FD ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER PE, KATAKANA ITERATION MARK>
30D8 309A 30FD ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8D FF9F 30FD ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
307A 309D ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER PE, HIRAGANA ITERATION MARK>
3078 309A 309D ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30DA 30FE ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PE, KATAKANA VOICED ITERATION MARK>
30D8 309A 30FE ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8D FF9F 30FE ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
307A 309E ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PE, HIRAGANA VOICED ITERATION MARK>
3078 309A 309E ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30DB 30FD ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER HO, KATAKANA ITERATION MARK>
FF8E 30FD ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HO, KATAKANA ITERATION MARK>
307B 309D ; [.3D78.0020.0011.0001][.3D78.0020.0010.0002] # <HIRAGANA LETTER HO, HIRAGANA ITERATION MARK>
30DB 30FE ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HO, KATAKANA VOICED ITERATION MARK>
FF8E 30FE ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HO, KATAKANA VOICED ITERATION MARK>
307B 309E ; [.3D78.0020.0011.0001][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HO, HIRAGANA VOICED ITERATION MARK>
30DC 30FD ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER BO, KATAKANA ITERATION MARK>
30DB 3099 30FD ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8E FF9E 30FD ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
307C 309D ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER BO, HIRAGANA ITERATION MARK>
307B 3099 309D ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30DC 30FE ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BO, KATAKANA VOICED ITERATION MARK>
30DB 3099 30FE ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8E FF9E 30FE ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
307C 309E ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BO, HIRAGANA VOICED ITERATION MARK>
307B 3099 309E ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30DD 30FD ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER PO, KATAKANA ITERATION MARK>
30DB 309A 30FD ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF8E FF9F 30FD ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK>
307D 309D ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER PO, HIRAGANA ITERATION MARK>
307B 309A 309D ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30DD 30FE ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PO, KATAKANA VOICED ITERATION MARK>
30DB 309A 30FE ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF8E FF9F 30FE ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
307D 309E ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PO, HIRAGANA VOICED ITERATION MARK>
307B 309A 309E ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30DE 30FD ; [.3D79.0020.0011.0002][.3D79.0020.0010.0002] # <KATAKANA LETTER MA, KATAKANA ITERATION MARK>
FF8F 30FD ; [.3D79.0020.0011.0002][.3D79.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MA, KATAKANA ITERATION MARK>
307E 309D ; [.3D79.0020.0011.0001][.3D79.0020.0010.0002] # <HIRAGANA LETTER MA, HIRAGANA ITERATION MARK>
30DF 30FD ; [.3D7A.0020.0011.0002][.3D7A.0020.0010.0002] # <KATAKANA LETTER MI, KATAKANA ITERATION MARK>
FF90 30FD ; [.3D7A.0020.0011.0002][.3D7A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MI, KATAKANA ITERATION MARK>
307F 309D ; [.3D7A.0020.0011.0001][.3D7A.0020.0010.0002] # <HIRAGANA LETTER MI, HIRAGANA ITERATION MARK>
30E0 30FD ; [.3D7B.0020.0011.0002][.3D7B.0020.0010.0002] # <KATAKANA LETTER MU, KATAKANA ITERATION MARK>
FF91 30FD ; [.3D7B.0020.0011.0002][.3D7B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MU, KATAKANA ITERATION MARK>
3080 309D ; [.3D7B.0020.0011.0001][.3D7B.0020.0010.0002] # <HIRAGANA LETTER MU, HIRAGANA ITERATION MARK>
30E1 30FD ; [.3D7C.0020.0011.0002][.3D7C.0020.0010.0002] # <KATAKANA LETTER ME, KATAKANA ITERATION MARK>
FF92 30FD ; [.3D7C.0020.0011.0002][.3D7C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER ME, KATAKANA ITERATION MARK>
3081 309D ; [.3D7C.0020.0011.0001][.3D7C.0020.0010.0002] # <HIRAGANA LETTER ME, HIRAGANA ITERATION MARK>
30E2 30FD ; [.3D7D.0020.0011.0002][.3D7D.0020.0010.0002] # <KATAKANA LETTER MO, KATAKANA ITERATION MARK>
FF93 30FD ; [.3D7D.0020.0011.0002][.3D7D.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MO, KATAKANA ITERATION MARK>
3082 309D ; [.3D7D.0020.0011.0001][.3D7D.0020.0010.0002] # <HIRAGANA LETTER MO, HIRAGANA ITERATION MARK>
30E3 30FD ; [.3D7E.0020.000F.0002][.3D7E.0020.0010.0002] # <KATAKANA LETTER SMALL YA, KATAKANA ITERATION MARK>
FF6C 30FD ; [.3D7E.0020.000F.0002][.3D7E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL YA, KATAKANA ITERATION MARK>
3083 309D ; [.3D7E.0020.000F.0001][.3D7E.0020.0010.0002] # <HIRAGANA LETTER SMALL YA, HIRAGANA ITERATION MARK>
30E4 30FD ; [.3D7E.0020.0011.0002][.3D7E.0020.0010.0002] # <KATAKANA LETTER YA, KATAKANA ITERATION MARK>
FF94 30FD ; [.3D7E.0020.0011.0002][.3D7E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER YA, KATAKANA ITERATION MARK>
3084 309D ; [.3D7E.0020.0011.0001][.3D7E.0020.0010.0002] # <HIRAGANA LETTER YA, HIRAGANA ITERATION MARK>
30E5 30FD ; [.3D7F.0020.000F.0002][.3D7F.0020.0010.0002] # <KATAKANA LETTER SMALL YU, KATAKANA ITERATION MARK>
FF6D 30FD ; [.3D7F.0020.000F.0002][.3D7F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL YU, KATAKANA ITERATION MARK>
3085 309D ; [.3D7F.0020.000F.0001][.3D7F.0020.0010.0002] # <HIRAGANA LETTER SMALL YU, HIRAGANA ITERATION MARK>
30E6 30FD ; [.3D7F.0020.0011.0002][.3D7F.0020.0010.0002] # <KATAKANA LETTER YU, KATAKANA ITERATION MARK>
FF95 30FD ; [.3D7F.0020.0011.0002][.3D7F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER YU, KATAKANA ITERATION MARK>
3086 309D ; [.3D7F.0020.0011.0001][.3D7F.0020.0010.0002] # <HIRAGANA LETTER YU, HIRAGANA ITERATION MARK>
30E7 30FD ; [.3D81.0020.000F.0002][.3D81.0020.0010.0002] # <KATAKANA LETTER SMALL YO, KATAKANA ITERATION MARK>
FF6E 30FD ; [.3D81.0020.000F.0002][.3D81.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL YO, KATAKANA ITERATION MARK>
3087 309D ; [.3D81.0020.000F.0001][.3D81.0020.0010.0002] # <HIRAGANA LETTER SMALL YO, HIRAGANA ITERATION MARK>
30E8 30FD ; [.3D81.0020.0011.0002][.3D81.0020.0010.0002] # <KATAKANA LETTER YO, KATAKANA ITERATION MARK>
FF96 30FD ; [.3D81.0020.0011.0002][.3D81.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER YO, KATAKANA ITERATION MARK>
3088 309D ; [.3D81.0020.0011.0001][.3D81.0020.0010.0002] # <HIRAGANA LETTER YO, HIRAGANA ITERATION MARK>
30E9 30FD ; [.3D82.0020.0011.0002][.3D82.0020.0010.0002] # <KATAKANA LETTER RA, KATAKANA ITERATION MARK>
FF97 30FD ; [.3D82.0020.0011.0002][.3D82.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RA, KATAKANA ITERATION MARK>
3089 309D ; [.3D82.0020.0011.0001][.3D82.0020.0010.0002] # <HIRAGANA LETTER RA, HIRAGANA ITERATION MARK>
30EA 30FD ; [.3D83.0020.0011.0002][.3D83.0020.0010.0002] # <KATAKANA LETTER RI, KATAKANA ITERATION MARK>
FF98 30FD ; [.3D83.0020.0011.0002][.3D83.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RI, KATAKANA ITERATION MARK>
308A 309D ; [.3D83.0020.0011.0001][.3D83.0020.0010.0002] # <HIRAGANA LETTER RI, HIRAGANA ITERATION MARK>
30EB 30FD ; [.3D84.0020.0011.0002][.3D84.0020.0010.0002] # <KATAKANA LETTER RU, KATAKANA ITERATION MARK>
FF99 30FD ; [.3D84.0020.0011.0002][.3D84.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RU, KATAKANA ITERATION MARK>
308B 309D ; [.3D84.0020.0011.0001][.3D84.0020.0010.0002] # <HIRAGANA LETTER RU, HIRAGANA ITERATION MARK>
30EC 30FD ; [.3D85.0020.0011.0002][.3D85.0020.0010.0002] # <KATAKANA LETTER RE, KATAKANA ITERATION MARK>
FF9A 30FD ; [.3D85.0020.0011.0002][.3D85.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RE, KATAKANA ITERATION MARK>
308C 309D ; [.3D85.0020.0011.0001][.3D85.0020.0010.0002] # <HIRAGANA LETTER RE, HIRAGANA ITERATION MARK>
30ED 30FD ; [.3D86.0020.0011.0002][.3D86.0020.0010.0002] # <KATAKANA LETTER RO, KATAKANA ITERATION MARK>
FF9B 30FD ; [.3D86.0020.0011.0002][.3D86.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RO, KATAKANA ITERATION MARK>
308D 309D ; [.3D86.0020.0011.0001][.3D86.0020.0010.0002] # <HIRAGANA LETTER RO, HIRAGANA ITERATION MARK>
30EE 30FD ; [.3D87.0020.000F.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER SMALL WA, KATAKANA ITERATION MARK>
308E 309D ; [.3D87.0020.000F.0001][.3D87.0020.0010.0002] # <HIRAGANA LETTER SMALL WA, HIRAGANA ITERATION MARK>
30EE 30FE ; [.3D87.0020.000F.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL WA, KATAKANA VOICED ITERATION MARK>
308E 309E ; [.3D87.0020.000F.0001][.3D87.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL WA, HIRAGANA VOICED ITERATION MARK>
30EF 30FD ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER WA, KATAKANA ITERATION MARK>
FF9C 30FD ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WA, KATAKANA ITERATION MARK>
308F 309D ; [.3D87.0020.0011.0001][.3D87.0020.0010.0002] # <HIRAGANA LETTER WA, HIRAGANA ITERATION MARK>
30EF 30FE ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WA, KATAKANA VOICED ITERATION MARK>
FF9C 30FE ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WA, KATAKANA VOICED ITERATION MARK>
308F 309E ; [.3D87.0020.0011.0001][.3D87.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WA, HIRAGANA VOICED ITERATION MARK>
30F0 30FD ; [.3D88.0020.0011.0002][.3D88.0020.0010.0002] # <KATAKANA LETTER WI, KATAKANA ITERATION MARK>
3090 309D ; [.3D88.0020.0011.0001][.3D88.0020.0010.0002] # <HIRAGANA LETTER WI, HIRAGANA ITERATION MARK>
30F0 30FE ; [.3D88.0020.0011.0002][.3D88.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WI, KATAKANA VOICED ITERATION MARK>
3090 309E ; [.3D88.0020.0011.0001][.3D88.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WI, HIRAGANA VOICED ITERATION MARK>
30F1 30FD ; [.3D89.0020.0011.0002][.3D89.0020.0010.0002] # <KATAKANA LETTER WE, KATAKANA ITERATION MARK>
3091 309D ; [.3D89.0020.0011.0001][.3D89.0020.0010.0002] # <HIRAGANA LETTER WE, HIRAGANA ITERATION MARK>
30F1 30FE ; [.3D89.0020.0011.0002][.3D89.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WE, KATAKANA VOICED ITERATION MARK>
3091 309E ; [.3D89.0020.0011.0001][.3D89.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WE, HIRAGANA VOICED ITERATION MARK>
30F2 30FD ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002] # <KATAKANA LETTER WO, KATAKANA ITERATION MARK>
FF66 30FD ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WO, KATAKANA ITERATION MARK>
3092 309D ; [.3D8A.0020.0011.0001][.3D8A.0020.0010.0002] # <HIRAGANA LETTER WO, HIRAGANA ITERATION MARK>
30F2 30FE ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WO, KATAKANA VOICED ITERATION MARK>
FF66 30FE ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WO, KATAKANA VOICED ITERATION MARK>
3092 309E ; [.3D8A.0020.0011.0001][.3D8A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WO, HIRAGANA VOICED ITERATION MARK>
30F3 30FD ; [.3D8B.0020.0011.0002][.3D8B.0020.0010.0002] # <KATAKANA LETTER N, KATAKANA ITERATION MARK>
FF9D 30FD ; [.3D8B.0020.0011.0002][.3D8B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER N, KATAKANA ITERATION MARK>
3093 309D ; [.3D8B.0020.0011.0001][.3D8B.0020.0010.0002] # <HIRAGANA LETTER N, HIRAGANA ITERATION MARK>
30F4 30FD ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER VU, KATAKANA ITERATION MARK>
30A6 3099 30FD ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF73 FF9E 30FD ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
3094 309D ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002] # <HIRAGANA LETTER VU, HIRAGANA ITERATION MARK>
3046 3099 309D ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002] # <HIRAGANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK>
30F4 30FE ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VU, KATAKANA VOICED ITERATION MARK>
30A6 3099 30FE ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF73 FF9E 30FE ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
3094 309E ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER VU, HIRAGANA VOICED ITERATION MARK>
3046 3099 309E ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK>
30F5 30FD ; [.3D60.0020.000F.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER SMALL KA, KATAKANA ITERATION MARK>
3095 309D ; [.3D60.0020.000F.0001][.3D60.0020.0010.0002] # <HIRAGANA LETTER SMALL KA, HIRAGANA ITERATION MARK>
30F5 30FE ; [.3D60.0020.000F.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL KA, KATAKANA VOICED ITERATION MARK>
3095 309E ; [.3D60.0020.000F.0001][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL KA, HIRAGANA VOICED ITERATION MARK>
30F6 30FD ; [.3D63.0020.000F.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER SMALL KE, KATAKANA ITERATION MARK>
3096 309D ; [.3D63.0020.000F.0001][.3D63.0020.0010.0002] # <HIRAGANA LETTER SMALL KE, HIRAGANA ITERATION MARK>
30F6 30FE ; [.3D63.0020.000F.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL KE, KATAKANA VOICED ITERATION MARK>
3096 309E ; [.3D63.0020.000F.0001][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL KE, HIRAGANA VOICED ITERATION MARK>
30F7 30FD ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER VA, KATAKANA ITERATION MARK>
30EF 3099 30FD ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER WA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF9C FF9E 30FD ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
30F7 30FE ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VA, KATAKANA VOICED ITERATION MARK>
30EF 3099 30FE ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF9C FF9E 30FE ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
30F8 30FD ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002] # <KATAKANA LETTER VI, KATAKANA ITERATION MARK>
30F0 3099 30FD ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002] # <KATAKANA LETTER WI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
30F8 30FE ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VI, KATAKANA VOICED ITERATION MARK>
30F0 3099 30FE ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
30F9 30FD ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002] # <KATAKANA LETTER VE, KATAKANA ITERATION MARK>
30F1 3099 30FD ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002] # <KATAKANA LETTER WE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
30F9 30FE ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VE, KATAKANA VOICED ITERATION MARK>
30F1 3099 30FE ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
30FA 30FD ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002] # <KATAKANA LETTER VO, KATAKANA ITERATION MARK>
30F2 3099 30FD ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002] # <KATAKANA LETTER WO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
FF66 FF9E 30FD ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK>
30FA 30FE ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VO, KATAKANA VOICED ITERATION MARK>
30F2 3099 30FE ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
FF66 FF9E 30FE ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK>
31F0 30FD ; [.3D62.0020.000F][.3D62.0020.0010.0002] # <KATAKANA LETTER SMALL KU, KATAKANA ITERATION MARK>
31F0 30FE ; [.3D62.0020.000F][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL KU, KATAKANA VOICED ITERATION MARK>
31F1 30FD ; [.3D66.0020.000F][.3D66.0020.0010.0002] # <KATAKANA LETTER SMALL SI, KATAKANA ITERATION MARK>
31F1 30FE ; [.3D66.0020.000F][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL SI, KATAKANA VOICED ITERATION MARK>
31F2 30FD ; [.3D67.0020.000F][.3D67.0020.0010.0002] # <KATAKANA LETTER SMALL SU, KATAKANA ITERATION MARK>
31F2 30FE ; [.3D67.0020.000F][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL SU, KATAKANA VOICED ITERATION MARK>
31F3 30FD ; [.3D6E.0020.000F][.3D6E.0020.0010.0002] # <KATAKANA LETTER SMALL TO, KATAKANA ITERATION MARK>
31F3 30FE ; [.3D6E.0020.000F][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL TO, KATAKANA VOICED ITERATION MARK>
31F4 30FD ; [.3D71.0020.000F][.3D71.0020.0010.0002] # <KATAKANA LETTER SMALL NU, KATAKANA ITERATION MARK>
31F5 30FD ; [.3D74.0020.000F][.3D74.0020.0010.0002] # <KATAKANA LETTER SMALL HA, KATAKANA ITERATION MARK>
31F5 30FE ; [.3D74.0020.000F][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HA, KATAKANA VOICED ITERATION MARK>
31F6 30FD ; [.3D75.0020.000F][.3D75.0020.0010.0002] # <KATAKANA LETTER SMALL HI, KATAKANA ITERATION MARK>
31F6 30FE ; [.3D75.0020.000F][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HI, KATAKANA VOICED ITERATION MARK>
31F7 30FD ; [.3D76.0020.000F][.3D76.0020.0010.0002] # <KATAKANA LETTER SMALL HU, KATAKANA ITERATION MARK>
31F7 30FE ; [.3D76.0020.000F][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HU, KATAKANA VOICED ITERATION MARK>
31F8 30FD ; [.3D77.0020.000F][.3D77.0020.0010.0002] # <KATAKANA LETTER SMALL HE, KATAKANA ITERATION MARK>
31F8 30FE ; [.3D77.0020.000F][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HE, KATAKANA VOICED ITERATION MARK>
31F9 30FD ; [.3D78.0020.000F][.3D78.0020.0010.0002] # <KATAKANA LETTER SMALL HO, KATAKANA ITERATION MARK>
31F9 30FE ; [.3D78.0020.000F][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HO, KATAKANA VOICED ITERATION MARK>
31FA 30FD ; [.3D7B.0020.000F][.3D7B.0020.0010.0002] # <KATAKANA LETTER SMALL MU, KATAKANA ITERATION MARK>
31FB 30FD ; [.3D82.0020.000F][.3D82.0020.0010.0002] # <KATAKANA LETTER SMALL RA, KATAKANA ITERATION MARK>
31FC 30FD ; [.3D83.0020.000F][.3D83.0020.0010.0002] # <KATAKANA LETTER SMALL RI, KATAKANA ITERATION MARK>
31FD 30FD ; [.3D84.0020.000F][.3D84.0020.0010.0002] # <KATAKANA LETTER SMALL RU, KATAKANA ITERATION MARK>
31FE 30FD ; [.3D85.0020.000F][.3D85.0020.0010.0002] # <KATAKANA LETTER SMALL RE, KATAKANA ITERATION MARK>
31FF 30FD ; [.3D86.0020.000F][.3D86.0020.0010.0002] # <KATAKANA LETTER SMALL RO, KATAKANA ITERATION MARK>
F967 ; [.8961.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
FA70 ; [.89AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70
F905 ; [.828D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905
2F801 ; [.81B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.8709.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E
F91B ; [.8BA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B
F9BA ; [.8B1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA
F977 ; [.8B1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977
F9FD ; [.84DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD
F9A8 ; [.8B44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8
F92D ; [.8BC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D
F9B5 ; [.8B46.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.897B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.897B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805
F965 ; [.89C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965
F9D4 ; [.8B34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4
2F809 ; [.8926.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809
2F80B ; [.8699.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.8B20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.866B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.866B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A
FA0C ; [.8C0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.84E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.8A6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.8A6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F80F ; [.8C0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F
FA72 ; [.8651.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72
F978 ; [.8C12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978
F9D1 ; [.8B7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1
2F811 ; [.8284.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.8C15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F815 ; [.83D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815
2F8D2 ; [.8A0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.8C1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F817 ; [.856C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817
2F818 ; [.8C1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F81A ; [.87F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A
FA71 ; [.8C29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71
2F81B ; [.8C29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B
F92E ; [.8B47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E
F979 ; [.8C2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979
F955 ; [.8B22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955
F954 ; [.98D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954
2F81D ; [.8C33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D
2F81E ; [.85B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.8619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.8619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.8B56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C
F9DD ; [.8AFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.8432.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.839C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F822 ; [.815D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822
F9C7 ; [.8B10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7
F98A ; [.8B32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A
F99D ; [.8B57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D
FA76 ; [.8AAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.8AAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.89C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.89C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.9789.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952
F92F ; [.8C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F
FA34 ; [.8263.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.8263.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827
F97F ; [.8C5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F
FA77 ; [.84A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.84A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.89DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829
2F82A ; [.8C62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A
F963 ; [.8A15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.8A15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B
F9EB ; [.8832.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F82C ; [.8C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.890B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.890B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D
2F82E ; [.88BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F82F ; [.86A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.8AF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F831 ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833
F96B ; [.8C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B
2F836 ; [.820F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836
2F837 ; [.8C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837
F906 ; [.827A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.823E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839
2F83A ; [.847F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A
F9DE ; [.8AFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.8C97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.8210.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D
F980 ; [.8B65.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980
2F83E ; [.879F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.84C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F
2F840 ; [.8CA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840
F99E ; [.8055.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F842 ; [.87F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842
2F843 ; [.82AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843
2F844 ; [.8CC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844
2F845 ; [.864E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.864E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.8CD7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.815E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.815E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F848 ; [.81FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848
FA37 ; [.870B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37
2F84C ; [.870B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C
FA38 ; [.81C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38
2F84F ; [.8999.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F
F9A9 ; [.8D08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F84B ; [.8D12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B
2F855 ; [.82B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.856E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.8580.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F857 ; [.89DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857
FA39 ; [.89A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39
FA10 ; [.8784.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10
FA7C ; [.8784.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C
F96C ; [.83D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.8A18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A
FA7D ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D
F94A ; [.8D4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A
F942 ; [.8D4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942
2F851 ; [.8671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851
2F85A ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A
2F85B ; [.8792.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B
2F85D ; [.86BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D
2F85E ; [.8A5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E
FA7E ; [.809F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.8853.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.82B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.8A24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.851C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981
FA80 ; [.8D83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F866 ; [.8965.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866
2F86A ; [.8D99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A
2F86B ; [.8D99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B
FA04 ; [.86EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04
2F86D ; [.8DAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D
F95F ; [.887C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F
F9AA ; [.887C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA
2F86F ; [.887C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F
F9BC ; [.8B23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC
2F870 ; [.8DBA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870
2F872 ; [.84BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872
2F873 ; [.8530.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873
2F875 ; [.8DC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875
F9BD ; [.8873.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.87E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877
FA3B ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B
F9DF ; [.8AFF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF
FA3C ; [.8DCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C
2F878 ; [.8DCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878
F9D5 ; [.8DEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5
F921 ; [.8AF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921
F9AB ; [.8B49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB
2F881 ; [.8509.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F884 ; [.8700.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F886 ; [.8A02.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886
F98E ; [.8880.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E
FA01 ; [.87EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88D ; [.8513.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.8B5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.8B6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.8B6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA0B ; [.8140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B
F982 ; [.8E30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982
2F890 ; [.8E36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890
F943 ; [.8B6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943
2F874 ; [.880B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874
2F899 ; [.82B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.83D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84
2F89A ; [.875D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A
F9D8 ; [.8B0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8
F966 ; [.8989.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966
FA85 ; [.8E5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F89D ; [.8877.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.843F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.8881.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3
F960 ; [.87F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.8B4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC
FA6B ; [.82B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B
2F8A0 ; [.8E80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
FA3D ; [.8114.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.8114.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
2F8A5 ; [.884A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
FA86 ; [.8E95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86
F9B9 ; [.8E8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9
FA88 ; [.8AA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88
F9D9 ; [.8EAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9
2F8A6 ; [.8465.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.835F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.835F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA87 ; [.8596.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87
2F8A8 ; [.8596.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
FA3E ; [.812D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E
FA3F ; [.869B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.869B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.869B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
F98F ; [.8B5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F
2F8AD ; [.899B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
2F8AC ; [.82EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
FA40 ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40
FA8B ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B
2F8B0 ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
F90D ; [.8ED5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D
2F8B1 ; [.8ED5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
F990 ; [.8EDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990
2F8B2 ; [.85ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
2F8B3 ; [.8EE2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
F9D2 ; [.8EE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.86D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F8B5 ; [.89E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.8F09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925
F95B ; [.8EFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B
FA02 ; [.86EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.8EF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
F973 ; [.84CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973
2F8B9 ; [.8903.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.8F12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
2F8BB ; [.8495.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
F9A4 ; [.8882.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4
2F8BC ; [.867A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
F975 ; [.8B0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.80A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.8F2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D
FA8E ; [.8F15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E
2F8C3 ; [.8A29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
F991 ; [.8883.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991
FA41 ; [.895F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.895F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.8F64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90
2F8C9 ; [.82BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F969 ; [.8F6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969
F9BE ; [.8B24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE
F983 ; [.8B1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983
FA42 ; [.81D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42
F9E0 ; [.8036.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0
2F8CD ; [.8F89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
FA12 ; [.85F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.85F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91
F9C5 ; [.8F94.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5
FA43 ; [.8510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.8510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
FA06 ; [.8A06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06
F901 ; [.8366.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8CC ; [.8516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
2F8D4 ; [.83D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
F929 ; [.8B70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.8B70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.8B70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.8A07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.8A07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
F9E1 ; [.8B00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.84A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.8576.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.8FB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
2F8E0 ; [.8FC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
F9F4 ; [.8B36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.8A9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9
F9DA ; [.829B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA
F97A ; [.8B25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.88B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.88B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
F9E2 ; [.8B01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2
F914 ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914
F95C ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C
F9BF ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF
F94C ; [.9048.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C
F931 ; [.8B67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931
2F8ED ; [.828E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
F91D ; [.8AF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D
2F8EF ; [.8468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
2F8F1 ; [.907B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
FA95 ; [.9080.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95
F970 ; [.840F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970
FA96 ; [.840F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96
2F8F5 ; [.840F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
2F8F6 ; [.8145.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6
2F8FA ; [.88F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
F972 ; [.8777.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.80A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.8916.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968
F9E3 ; [.87BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3
F915 ; [.8AF1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.8829.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F900 ; [.889A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.8B11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.8B11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.8B11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.836D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.8B73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.811D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.811D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.859C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.90D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.8B37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5
F9D6 ; [.90E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6
2F90E ; [.90D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.8512.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.836E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.90E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909
F9CB ; [.8B12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.87C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC
FA99 ; [.8469.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.8469.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.8163.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904
F94E ; [.8B74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E
FA47 ; [.8198.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47
FA9A ; [.8198.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A
F992 ; [.8B5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992
2F90F ; [.8763.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F912 ; [.912F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912
F922 ; [.8AF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922
F984 ; [.913F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984
2F915 ; [.9140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915
FA9B ; [.8847.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B
2F914 ; [.8847.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914
2F835 ; [.811E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835
2F918 ; [.83DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918
F9FB ; [.914B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.8713.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A
F99F ; [.8B58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.9156.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916
F993 ; [.8B5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993
FA48 ; [.8498.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.8498.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C
F9C0 ; [.916F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0
F9EE ; [.8B38.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE
F932 ; [.9178.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932
F91E ; [.9179.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E
2F920 ; [.917A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920
FA9E ; [.84A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.84A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921
F946 ; [.8B75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946
2F924 ; [.83DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924
FA9F ; [.88F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F92B ; [.8B76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B
FA16 ; [.874F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16
FAA0 ; [.874F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0
F9A7 ; [.91AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7
2F928 ; [.91B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928
F961 ; [.8B0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.8B0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F929 ; [.80C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929
F9AD ; [.8B4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.91B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.8B02.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.8B13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.86F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92F ; [.91C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F
F9AE ; [.91C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE
2F932 ; [.91CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932
FAA3 ; [.8103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3
F9CD ; [.8B14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.8B0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976
F962 ; [.803A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962
2F938 ; [.803A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938
F9E5 ; [.8B04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5
FAA5 ; [.921B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5
F9C1 ; [.8B28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1
F90E ; [.922C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E
FA17 ; [.8094.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.8094.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7 ; [.85F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7
F933 ; [.924A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933
FAA8 ; [.8775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.8775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.854D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F945 ; [.9253.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945
2F946 ; [.85A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946
2F947 ; [.85A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947
FAAA ; [.873E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA
2F94A ; [.9263.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A
F9CE ; [.8B15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.9281.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.9281.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.8919.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.928D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947
F985 ; [.927A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985
FA18 ; [.8B4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18
FA4C ; [.8499.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C
FA4E ; [.81DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.844C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA4F ; [.8AB9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F
FA50 ; [.8661.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.8661.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.84F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51
FA19 ; [.85A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.8550.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A
F93C ; [.92A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C
FA52 ; [.80ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52
FA53 ; [.87AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53
FA1B ; [.898C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.898C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956
F9B6 ; [.92A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6
F956 ; [.8B2A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956
FA54 ; [.839F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54
2F959 ; [.839F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959
2F95B ; [.80D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B
FA55 ; [.8840.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55
F9F7 ; [.8B0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7
F9F8 ; [.8157.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8
FA56 ; [.8620.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56
FAAD ; [.8620.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD
2F962 ; [.930B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962
2F963 ; [.8734.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963
F9A6 ; [.8B5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6
F944 ; [.9312.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944
F9F9 ; [.8B16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.85F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D
2F966 ; [.9341.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966
FA03 ; [.8811.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03
F97B ; [.8B2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B
2F96A ; [.81DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A
F9CF ; [.8940.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF
F96A ; [.8402.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.8B42.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F
FAAF ; [.9360.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF
2F96C ; [.935D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C
F957 ; [.801C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957
2F96E ; [.9368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E
F996 ; [.8B60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996
FA57 ; [.8B60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57
FAB0 ; [.8B60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0
FA58 ; [.9380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58
F950 ; [.9389.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950
FA59 ; [.88FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59
FA5A ; [.8515.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.8ED1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6
F90F ; [.8AEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F
F9AF ; [.93C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.8066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E
F934 ; [.8B78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934
FA5B ; [.849B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.849B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.849B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A
F9B0 ; [.93E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0
F997 ; [.8B61.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997
2F97F ; [.93EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F
F945 ; [.8B79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945
F953 ; [.8B7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.93F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.8048.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F985 ; [.9409.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985
F926 ; [.942A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926
F9F6 ; [.8B3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6
FA5C ; [.84D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F893 ; [.9433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.9433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B
FA6D ; [.81B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D
F97C ; [.8B2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C
2F990 ; [.8051.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F991 ; [.848E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.80F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.89F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.8105.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.84AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.84AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.827F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996
2F99C ; [.9478.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C
F9FE ; [.873C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.8380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F99D ; [.9493.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D
2F9A1 ; [.81FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.8270.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.83E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
FAB4 ; [.80F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4
F958 ; [.8936.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.8AF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918
F96E ; [.8ADA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E
FA5F ; [.8751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.8751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F999 ; [.8B62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999
F9C2 ; [.94BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2
F923 ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923
F9F0 ; [.94E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0
F935 ; [.94E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935
F91F ; [.8AFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F
F910 ; [.94E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910
2F9B3 ; [.8209.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
F936 ; [.8B1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936
2F9B4 ; [.8B1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
2F9B5 ; [.94EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
2F9B7 ; [.94F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
F911 ; [.8AEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911
FA08 ; [.8381.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F9C4 ; [.8040.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
F9A0 ; [.8B59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0
F9E7 ; [.8B05.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7
F9E8 ; [.8B06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8
F912 ; [.8AEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912
FA60 ; [.8165.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.9576.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6
F924 ; [.9580.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924
FAB7 ; [.898F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7
FA0A ; [.82FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A
FA61 ; [.8454.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61
FAB8 ; [.8454.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8
2F9CF ; [.85FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
FAB9 ; [.876B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9
FABB ; [.8600.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB
F97D ; [.8B2D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D
F941 ; [.8B81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941
FABE ; [.8AA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE
2F9D0 ; [.8AA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
FA22 ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22
FABA ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA
F95D ; [.86F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D
FABD ; [.86F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD
FA62 ; [.8097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62
FABC ; [.8097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC
FA63 ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63
FABF ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF
F9FC ; [.8478.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC
F95A ; [.95E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A
FAC0 ; [.8F6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0
2F9D1 ; [.8F6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
F900 ; [.95ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900
2F9D2 ; [.95F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F9D4 ; [.81AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
2F9D5 ; [.9608.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
F948 ; [.8B69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948
F903 ; [.9607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903
FA64 ; [.895D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64
FA65 ; [.869E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65
FAC1 ; [.869E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1
2F9D7 ; [.81E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9DA ; [.9629.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.8B6A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937
F902 ; [.849D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902
F998 ; [.966D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998
F9D7 ; [.8B3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7
FAC2 ; [.8AA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2
2F9DF ; [.8AA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
FA07 ; [.966F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07
F98D ; [.967A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D
2F98D ; [.8474.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D
F971 ; [.86FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971
F99A ; [.8B63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A
FA25 ; [.804E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.804E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67
FAC3 ; [.96A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3
F9C3 ; [.8B2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3
F913 ; [.96AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913
F92C ; [.8B7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C
FA26 ; [.87E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26
F919 ; [.8AF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919
F9B7 ; [.96CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7
F9E9 ; [.8B07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9
F97E ; [.8B2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.8275.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A
F9B1 ; [.8B4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1
2F9EE ; [.8124.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
F986 ; [.9739.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986
F9C6 ; [.974C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.9751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.838C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.8B30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959
F9D3 ; [.8B09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3
F9DC ; [.8B17.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9F1 ; [.8B3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1
FA2F ; [.8B4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F
F9B8 ; [.9765.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8
F9EA ; [.8B08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA
FA68 ; [.8864.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68
FAC7 ; [.8864.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7
F9B2 ; [.8B50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.8AF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949
F938 ; [.8B6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938
F9B3 ; [.9781.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3
FA1C ; [.8A9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.8A9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8
FA69 ; [.8254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69
FACA ; [.8254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA
F9B4 ; [.8B31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4
FA6A ; [.895E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A
FACC ; [.895E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC
F9D0 ; [.8B43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0
2FA02 ; [.81E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02
FA2A ; [.8902.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A
FA2B ; [.845D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B
FA2C ; [.81B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C
F91A ; [.97E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A
F987 ; [.97FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987
F939 ; [.8B66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939
F9F2 ; [.8B3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2
FA2D ; [.8798.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D
F93A ; [.83F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A
F920 ; [.9890.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920
F940 ; [.8476.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940
F988 ; [.8B52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988
F9F3 ; [.8B3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FA15 ; [.8A2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15
F989 ; [.98A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989
2FA17 ; [.98B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17
2FA1C ; [.892E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
F9C4 ; [.8B19.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4
F907 ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907
F908 ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908
FACE ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE
ENTRY
};
Unicode/Collate/Locale/sv_refo.pl 0000644 00000014421 15033552504 0012720 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH
00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN
00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F96.0020.0008] # ANGSTROM SIGN
01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
0119 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
0151 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0153 ; [.1F98.0023.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F98.0023.0008] # LATIN CAPITAL LIGATURE OE
00F4 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
006F 0302 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
004F 0302 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED3 ; [.1F98.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1F98.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED1 ; [.1F98.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1F98.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED7 ; [.1F98.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1F98.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1F98.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1F98.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED9 ; [.1F98.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1F98.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
ENTRY
};
Unicode/Collate/Locale/nn.pl 0000644 00000012412 15033552504 0011666 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH
00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN
00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE
00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F98.0020.0008] # ANGSTROM SIGN
01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
0061 0061 ; [.1F98.0021.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A>
0041 0061 ; [.1F98.0021.0007] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A>
0041 0041 ; [.1F98.0021.0008] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A>
ENTRY
};
Unicode/Collate/Locale/vi.pl 0000644 00000054400 15033552504 0011674 0 ustar 00 +{
locale_version => 1.25,
# 0306 is not a Vietnamese tone, just to avoid \x{306} eq. to something.
entry => <<'ENTRY', # for DUCET v9.0.0
0309 ; [.0000.0026.0002][.0000.00F0.0000] # COMBINING HOOK ABOVE
1EA3 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH HOOK ABOVE
1EA2 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH HOOK ABOVE
1EBB ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH HOOK ABOVE
1EBA ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH HOOK ABOVE
1EC9 ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER I WITH HOOK ABOVE
1EC8 ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER I WITH HOOK ABOVE
1ECF ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HOOK ABOVE
1ECE ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HOOK ABOVE
1EE7 ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HOOK ABOVE
1EE6 ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HOOK ABOVE
1EF7 ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER Y WITH HOOK ABOVE
1EF6 ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
0303 ; [.0000.0026.0002][.0000.00F1.0000] # COMBINING TILDE
00E3 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH TILDE
00C3 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH TILDE
1EBD ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH TILDE
1EBC ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH TILDE
0129 ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER I WITH TILDE
0128 ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER I WITH TILDE
00F5 ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH TILDE
00D5 ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH TILDE
0169 ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH TILDE
0168 ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH TILDE
1EF9 ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER Y WITH TILDE
1EF8 ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER Y WITH TILDE
0301 ; [.0000.0026.0002][.0000.00F2.0000] # COMBINING ACUTE ACCENT
00E1 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH ACUTE
00E9 ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH ACUTE
00ED ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER I WITH ACUTE
00F3 ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH ACUTE
00FA ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH ACUTE
00FD ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER Y WITH ACUTE
00DD ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER Y WITH ACUTE
0341 ; [.0000.0026.0002][.0000.00F2.0000] # COMBINING ACUTE TONE MARK
0323 ; [.0000.0026.0002][.0000.00F3.0000] # COMBINING DOT BELOW
1EA1 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH DOT BELOW
1EA0 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH DOT BELOW
1EB9 ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH DOT BELOW
1EB8 ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH DOT BELOW
1ECB ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER I WITH DOT BELOW
1ECA ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER I WITH DOT BELOW
1ECD ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH DOT BELOW
1ECC ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH DOT BELOW
1EE5 ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH DOT BELOW
1EE4 ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH DOT BELOW
1EF5 ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER Y WITH DOT BELOW
1EF4 ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER Y WITH DOT BELOW
0306 ; [.0000.0026.0002][.0000.00F4.0000] # COMBINING BREVE
0115 ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER E WITH BREVE
0114 ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER E WITH BREVE
012D ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER I WITH BREVE
012C ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER I WITH BREVE
014F ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER O WITH BREVE
014E ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER O WITH BREVE
016D ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER U WITH BREVE
016C ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER U WITH BREVE
0103 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE
0061 0306 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE
0102 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE
0041 0306 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE
1EB1 ; [.1C48.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE
1EB0 ; [.1C48.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
1EAF ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH BREVE AND ACUTE
1EAE ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
1EB5 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH BREVE AND TILDE
1EB4 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
1EB3 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
1EB2 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
1EB7 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
1EB6 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
00E2 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX
0061 0302 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX
00C2 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0041 0302 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
1EA7 ; [.1C49.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
1EA6 ; [.1C49.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
1EA5 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
1EA4 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
1EAB ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
1EAA ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
1EA9 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
1EA8 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
1EAD ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
1EAC ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
0111 ; [.1C90.0020.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C90.0020.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C90.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C90.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE
00EA ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC1 ; [.1CAB.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAB.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
1EBF ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
1EC5 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED1 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED7 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED9 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
01A1 ; [.1DDF.0020.0002] # LATIN SMALL LETTER O WITH HORN
006F 031B ; [.1DDF.0020.0002] # LATIN SMALL LETTER O WITH HORN
01A0 ; [.1DDF.0020.0008] # LATIN CAPITAL LETTER O WITH HORN
004F 031B ; [.1DDF.0020.0008] # LATIN CAPITAL LETTER O WITH HORN
1EDD ; [.1DDF.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE
1EDC ; [.1DDF.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
1EDB ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH HORN AND ACUTE
1EDA ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
1EE1 ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH HORN AND TILDE
1EE0 ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH HORN AND TILDE
1EDF ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
1EDE ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
1EE3 ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
1EE2 ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
01B0 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH HORN
0075 031B ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH HORN
01AF ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH HORN
0055 031B ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH HORN
1EEB ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE
1EEA ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
1EE9 ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH HORN AND ACUTE
1EE8 ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
1EEF ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH HORN AND TILDE
1EEE ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH HORN AND TILDE
1EED ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
1EEC ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
1EF1 ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
1EF0 ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
1EA1 0306 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A WITH DOT BELOW, COMBINING BREVE>
1EA0 0306 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A WITH DOT BELOW, COMBINING BREVE>
1EA1 0302 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
1EA0 0302 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
1EB9 0302 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER E WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
1EB8 0302 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER E WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
1ECD 0302 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
1ECC 0302 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
00F2 031B ; [.1DDF.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER O WITH GRAVE, COMBINING HORN>
1ECF 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER O WITH HOOK ABOVE, COMBINING HORN>
00F5 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER O WITH TILDE, COMBINING HORN>
00F3 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER O WITH ACUTE, COMBINING HORN>
1ECD 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O WITH DOT BELOW, COMBINING HORN>
00D2 031B ; [.1DDF.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER O WITH GRAVE, COMBINING HORN>
1ECE 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER O WITH HOOK ABOVE, COMBINING HORN>
00D5 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER O WITH TILDE, COMBINING HORN>
00D3 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER O WITH ACUTE, COMBINING HORN>
1ECC 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O WITH DOT BELOW, COMBINING HORN>
00F9 031B ; [.1EB6.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER U WITH GRAVE, COMBINING HORN>
1EE7 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER U WITH HOOK ABOVE, COMBINING HORN>
0169 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER U WITH TILDE, COMBINING HORN>
00FA 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER U WITH ACUTE, COMBINING HORN>
1EE5 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER U WITH DOT BELOW, COMBINING HORN>
00D9 031B ; [.1EB6.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER U WITH GRAVE, COMBINING HORN>
1EE6 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER U WITH HOOK ABOVE, COMBINING HORN>
0168 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER U WITH TILDE, COMBINING HORN>
00DA 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER U WITH ACUTE, COMBINING HORN>
1EE4 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER U WITH DOT BELOW, COMBINING HORN>
0061 0323 0306 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A, COMBINING DOT BELOW, COMBINING BREVE>
0041 0323 0306 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A, COMBINING DOT BELOW, COMBINING BREVE>
0061 0323 0302 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
0041 0323 0302 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
0065 0323 0302 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER E, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
0045 0323 0302 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER E, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
006F 0323 0302 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
004F 0323 0302 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT>
006F 0300 031B ; [.1DDF.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER O, COMBINING GRAVE ACCENT, COMBINING HORN>
006F 0340 031B ; [.1DDF.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER O, COMBINING GRAVE TONE MARK, COMBINING HORN>
006F 0309 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER O, COMBINING HOOK ABOVE, COMBINING HORN>
006F 0303 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER O, COMBINING TILDE, COMBINING HORN>
006F 0301 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER O, COMBINING ACUTE ACCENT, COMBINING HORN>
006F 0341 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER O, COMBINING ACUTE TONE MARK, COMBINING HORN>
006F 0323 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O, COMBINING DOT BELOW, COMBINING HORN>
004F 0300 031B ; [.1DDF.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER O, COMBINING GRAVE ACCENT, COMBINING HORN>
004F 0340 031B ; [.1DDF.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER O, COMBINING GRAVE TONE MARK, COMBINING HORN>
004F 0309 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER O, COMBINING HOOK ABOVE, COMBINING HORN>
004F 0303 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER O, COMBINING TILDE, COMBINING HORN>
004F 0301 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER O, COMBINING ACUTE ACCENT, COMBINING HORN>
004F 0341 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER O, COMBINING ACUTE TONE MARK, COMBINING HORN>
004F 0323 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O, COMBINING DOT BELOW, COMBINING HORN>
0075 0300 031B ; [.1EB6.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER U, COMBINING GRAVE ACCENT, COMBINING HORN>
0075 0340 031B ; [.1EB6.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER U, COMBINING GRAVE TONE MARK, COMBINING HORN>
0075 0309 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER U, COMBINING HOOK ABOVE, COMBINING HORN>
0075 0303 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER U, COMBINING TILDE, COMBINING HORN>
0075 0301 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER U, COMBINING ACUTE ACCENT, COMBINING HORN>
0075 0341 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER U, COMBINING ACUTE TONE MARK, COMBINING HORN>
0075 0323 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER U, COMBINING DOT BELOW, COMBINING HORN>
0055 0300 031B ; [.1EB6.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER U, COMBINING GRAVE ACCENT, COMBINING HORN>
0055 0340 031B ; [.1EB6.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER U, COMBINING GRAVE TONE MARK, COMBINING HORN>
0055 0309 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER U, COMBINING HOOK ABOVE, COMBINING HORN>
0055 0303 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER U, COMBINING TILDE, COMBINING HORN>
0055 0301 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER U, COMBINING ACUTE ACCENT, COMBINING HORN>
0055 0341 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER U, COMBINING ACUTE TONE MARK, COMBINING HORN>
0055 0323 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER U, COMBINING DOT BELOW, COMBINING HORN>
ENTRY
};
Unicode/Collate/Locale/zh.pl 0000644 00000035675 15033552504 0011714 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON>
004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON>
1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON>
004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON>
006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT>
006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK>
004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT>
004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK>
006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON>
004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON>
0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON>
00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON>
01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON>
00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON>
01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
ENTRY
};
Unicode/Collate/Locale/se.pl 0000644 00000024705 15033552504 0011672 0 ustar 00 +{
locale_version => 1.25,
# eng, g-stroke, t-stroke don't require tailoring
entry => <<'ENTRY', # for DUCET v9.0.0
00E1 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE
010D ; [.1C8C.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C8C.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C8C.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C8C.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0292 ; [.1C8D.0020.0002] # LATIN SMALL LETTER EZH
01B7 ; [.1C8D.0020.0008] # LATIN CAPITAL LETTER EZH
01EF ; [.1C8E.0020.0002] # LATIN SMALL LETTER EZH WITH CARON
0292 030C ; [.1C8E.0020.0002] # LATIN SMALL LETTER EZH WITH CARON
01EE ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON
01B7 030C ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON
0111 ; [.1CA9.0020.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1CA9.0020.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1CA9.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1CA9.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1CA9.0021.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1CA9.0021.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1CA9.0021.0008] # LATIN CAPITAL LETTER ETH
01E7 ; [.1D00.0020.0002] # LATIN SMALL LETTER G WITH CARON
0067 030C ; [.1D00.0020.0002] # LATIN SMALL LETTER G WITH CARON
01E6 ; [.1D00.0020.0008] # LATIN CAPITAL LETTER G WITH CARON
0047 030C ; [.1D00.0020.0008] # LATIN CAPITAL LETTER G WITH CARON
01E9 ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CARON
006B 030C ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CARON
01E8 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CARON
004B 030C ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CARON
0144 ; [.1DD8.0021.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DD8.0021.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DD8.0021.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DD8.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DD8.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DD8.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE
00F1 ; [.1DD8.0022.0002] # LATIN SMALL LETTER N WITH TILDE
006E 0303 ; [.1DD8.0022.0002] # LATIN SMALL LETTER N WITH TILDE
00D1 ; [.1DD8.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE
004E 0303 ; [.1DD8.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE
0161 ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
00FE ; [.1E9A.0021.0002] # LATIN SMALL LETTER THORN
00DE ; [.1E9A.0021.0008] # LATIN CAPITAL LETTER THORN
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
017E ; [.1F92.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F92.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F92.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F92.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
00F8 ; [.1F93.0020.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F93.0020.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F93.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F93.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F93.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F93.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
0153 ; [.1F93.0021.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F93.0021.0008] # LATIN CAPITAL LIGATURE OE
00E6 ; [.1F94.0020.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F94.0020.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F94.0020.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F94.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F94.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F94.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F94.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F94.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F96.0020.0008] # ANGSTROM SIGN
01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
0227 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE
0061 0307 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE
0226 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE
0041 0307 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE
00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00E3 ; [.1F97.0021.0002] # LATIN SMALL LETTER A WITH TILDE
0061 0303 ; [.1F97.0021.0002] # LATIN SMALL LETTER A WITH TILDE
00C3 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE
0041 0303 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE
00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
00F5 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH TILDE
006F 0303 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH TILDE
00D5 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE
004F 0303 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE
1E4D ; [.1F98.0022.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE
1E4C ; [.1F98.0022.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
022D ; [.1F98.0022.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON
022C ; [.1F98.0022.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
1E4F ; [.1F98.0022.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
1E4E ; [.1F98.0022.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
1EE1 ; [.1F98.0022.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE
1EE0 ; [.1F98.0022.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE
00F4 ; [.1F98.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
006F 0302 ; [.1F98.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1F98.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
004F 0302 ; [.1F98.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED3 ; [.1F98.0023.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1F98.0023.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED1 ; [.1F98.0023.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1F98.0023.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED7 ; [.1F98.0023.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1F98.0023.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1F98.0023.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1F98.0023.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED9 ; [.1F98.0023.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1F98.0023.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
01EB ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH OGONEK
006F 0328 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH OGONEK
01EA ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK
004F 0328 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK
ENTRY
};
Unicode/Collate/Locale/kl.pl 0000644 00000012231 15033552504 0011660 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH
0138 ; [.1E21.0021.0002] # LATIN SMALL LETTER KRA
004B 0027 ; [.1E21.0021.0008] # <LATIN CAPITAL LETTER K, APOSTROPHE>
00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN
00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE
00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F98.0020.0008] # ANGSTROM SIGN
01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
ENTRY
};
Unicode/Collate/Locale/kk.pl 0000644 00000001135 15033552504 0011660 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0451 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
0435 0308 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
0401 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO
0415 0308 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO
04AF ; [.2126.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U
04AE ; [.2126.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U
0456 ; [.2197.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0406 ; [.2197.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
ENTRY
};
Unicode/Collate/Locale/ar.pl 0000644 00000001534 15033552504 0011660 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0629 ; [.231D.0021.0002] # ARABIC LETTER TEH MARBUTA
FE94 ; [.231D.0021.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM
FE93 ; [.231D.0021.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM
0649 ; [.23C6.0021.0002] # ARABIC LETTER ALEF MAKSURA
FBE8 ; [.23C6.0021.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
FBE9 ; [.23C6.0021.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
FEF0 ; [.23C6.0021.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM
FEEF ; [.23C6.0021.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM
FC90 ; [.23C6.0021.001B] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
FC5D ; [.23C6.0021.001C] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
ENTRY
};
Unicode/Collate/Locale/hr.pl 0000644 00000006305 15033552504 0011670 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0107 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0063 0301 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0063 0341 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0106 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0043 0301 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0043 0341 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0064 017E ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z WITH CARON>
01C6 ; [.1C90.0020.0003] # LATIN SMALL LETTER DZ WITH CARON
0044 017E ; [.1C90.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z WITH CARON>
01C5 ; [.1C90.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
0044 017D ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z WITH CARON>
01C4 ; [.1C90.0020.0009] # LATIN CAPITAL LETTER DZ WITH CARON
0064 007A 030C ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z, COMBINING CARON>
0044 007A 030C ; [.1C90.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, COMBINING CARON>
0044 005A 030C ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, COMBINING CARON>
0111 ; [.1C91.0020.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C91.0020.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C91.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C91.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE
006C 006A ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER J>
01C9 ; [.1D78.0020.0003] # LATIN SMALL LETTER LJ
004C 006A ; [.1D78.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER J>
01C8 ; [.1D78.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER L WITH SMALL LETTER J
004C 004A ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER J>
01C7 ; [.1D78.0020.0009] # LATIN CAPITAL LETTER LJ
006E 006A ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER J>
01CC ; [.1DBA.0020.0003] # LATIN SMALL LETTER NJ
004E 006A ; [.1DBA.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER J>
01CB ; [.1DBA.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER N WITH SMALL LETTER J
004E 004A ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER J>
01CA ; [.1DBA.0020.0009] # LATIN CAPITAL LETTER NJ
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
ENTRY
};
Unicode/Collate/Locale/si_dict.pl 0000644 00000000630 15033552504 0012670 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0D82 ; [.28E1.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA
0D83 ; [.28E1.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA
0D96 ; [.28E1.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA
0DA5 ; [.28EA.0020.0002][.291C.0020.0002][.28EC.0021.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
ENTRY
};
Unicode/Collate/Locale/ko.pl 0000644 00000172311 15033552504 0011671 0 ustar 00 use Unicode::Collate::CJK::Korean;
+{
locale_version => 1.25,
overrideCJK => \&Unicode::Collate::CJK::Korean::weightKorean,
entry => <<'ENTRY', # for DUCET v9.0.0
F967 ; [.3BFC.0021.0002.4E0D][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
FA70 ; [.3BFC.0032.0002.4E26][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70
F905 ; [.3BF5.0021.0002.4E32][.3C7B.0020.0002][.3CE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905
2F801 ; [.3C07.0021.0002.4E38][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.3BF8.0021.0002.4E39][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E
F91B ; [.3BFA.0021.0002.4E82][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B
F9BA ; [.3BFA.0021.0002.4E86][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA
F977 ; [.3BFA.0021.0002.4EAE][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977
F9FD ; [.3BFE.0021.0002.4EC0][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD
F9A8 ; [.3BFA.0021.0002.4EE4][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8
F92D ; [.3BFA.0021.0002.4F86][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D
F9B5 ; [.3BFA.0021.0002.4F8B][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.3BFB.0021.0002.4FAE][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.3BFB.0021.0002.4FAE][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805
2F806 ; [.3C05.0023.0002.4FBB][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806
F965 ; [.3C06.0021.0002.4FBF][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965
2F807 ; [.3BFC.0022.0002.5002][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807
F9D4 ; [.3BFA.0022.0002.502B][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4
2F809 ; [.3BFC.0022.0002.5099][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809
2F80B ; [.3BFE.0023.0002.50CF][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.3BFA.0022.0002.50DA][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.3BFE.0023.0002.50E7][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.3BFE.0023.0002.50E7][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A
FA0C ; [.3C00.0021.0002.5140][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.3C03.0021.0002.5145][.3C80.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.3BFB.0021.0002.514D][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.3BFB.0021.0002.514D][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F814 ; [.3BF7.0022.0002.5167][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814
FA72 ; [.3C01.0024.0002.5168][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72
F978 ; [.3BFA.0023.0002.5169][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978
F9D1 ; [.3BFA.0021.0002.516D][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1
2F811 ; [.3BF5.0026.0002.5177][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.3BF5.0024.0002.5180][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F815 ; [.3C01.0021.0002.518D][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815
2F8D2 ; [.3BFB.0022.0002.5192][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.3BFB.0022.0002.5195][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F817 ; [.3C00.0023.0002.5197][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817
2F818 ; [.3C00.003B.0002.51A4][.3C81.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F81A ; [.3BF8.0022.0002.51AC][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A
F92E ; [.3BFA.0021.0002.51B7][.3C74.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E
F979 ; [.3BFA.0024.0002.51C9][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979
F955 ; [.3BFA.0021.0002.51CC][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955
F954 ; [.3BFA.0021.0002.51DC][.3C85.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954
FA15 ; [.3C07.0022.0002.51DE][.3C86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15
2F81E ; [.3C00.0023.0002.5203][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.3C01.0021.0002.5207][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.3C01.0021.0002.5207][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.3BFA.0022.0002.5217][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C
F9DD ; [.3BFA.0022.0002.5229][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.3C01.0022.0002.523A][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.3BF5.0021.0002.523B][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F822 ; [.3C07.0021.0002.5272][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822
2F823 ; [.3BFE.002D.0002.5277][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823
F9C7 ; [.3BFA.0021.0002.5289][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7
F98A ; [.3BFA.0021.0002.529B][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A
F99D ; [.3BFA.0023.0002.52A3][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D
FA76 ; [.3C00.0024.0002.52C7][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.3C00.0024.0002.52C7][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.3BFB.0023.0002.52C9][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.3BFB.0023.0002.52C9][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.3BFA.0021.0002.52D2][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952
F92F ; [.3BFA.0021.0002.52DE][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F
FA34 ; [.3BF5.0023.0002.52E4][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.3BF5.0023.0002.52E4][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827
F97F ; [.3BFA.0023.0002.52F5][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F
FA77 ; [.3C01.0022.0002.52FA][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.3C01.0022.0002.52FA][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.3C06.0022.0002.5305][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829
F963 ; [.3BFC.0021.0002.5317][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.3BFC.0021.0002.5317][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B
F9EB ; [.3BF7.0021.0002.533F][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F82C ; [.3C07.0021.0002.5349][.3C82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.3BFC.0025.0002.5351][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.3BFC.0025.0002.5351][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D
2F82E ; [.3BFC.0022.0002.535A][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F82F ; [.3C01.0022.0002.5373][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.3BFA.0022.0002.5375][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F830 ; [.3C01.0021.0002.537D][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830
2F831 ; [.3BF5.0028.0002.537F][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.3BF5.0028.0002.537F][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.3BF5.0028.0002.537F][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833
F96B ; [.3C03.0022.0002.53C3][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B
2F836 ; [.3BF5.0022.0002.53CA][.3C85.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836
2F837 ; [.3BFE.005E.0002.53DF][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837
F906 ; [.3BF5.002A.0002.53E5][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.3BF5.0021.0002.53EB][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839
2F83A ; [.3C01.0022.0002.53F1][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A
F9DE ; [.3BFA.0024.0002.540F][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.3BFA.0021.0002.541D][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.3C07.0021.0002.5438][.3C85.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D
F980 ; [.3BFA.0024.0002.5442][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980
2F83E ; [.3C01.0026.0002.5448][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.3C01.0028.0002.5468][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F
2F840 ; [.3C00.0031.0002.54A2][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840
F99E ; [.3C00.0025.0002.54BD][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F842 ; [.3BF8.0021.0002.5510][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842
2F843 ; [.3BF5.0022.0002.5553][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843
2F844 ; [.3C07.0024.0002.5563][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844
2F845 ; [.3BFE.0024.0002.5584][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.3BFE.0024.0002.5584][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.3BFA.0021.0002.5587][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.3C07.0022.0002.5599][.3C82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.3C07.0022.0002.5599][.3C82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.3BF5.0022.0002.559D][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.3BF5.0022.0002.559D][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F848 ; [.3BF6.0021.0002.55AB][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848
FA7B ; [.3C00.0022.0002.55E2][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B
FA37 ; [.3C05.0022.0002.5606][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37
2F84C ; [.3C05.0022.0002.5606][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C
FA38 ; [.3BF5.0026.0002.5668][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38
2F84F ; [.3BFC.0023.0002.5674][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F
F9A9 ; [.3BFA.0023.0002.56F9][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F84B ; [.3BF8.0024.0002.5716][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B
2F855 ; [.3C07.0024.0002.578B][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.3BFE.0021.0002.57CE][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.3BFE.0021.0002.57F4][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F857 ; [.3BFC.0023.0002.5831][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857
FA39 ; [.3BFC.0033.0002.5840][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39
FA10 ; [.3C03.0022.0002.585A][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10
FA7C ; [.3C03.0022.0002.585A][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C
F96C ; [.3BFE.0021.0002.585E][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.3BFB.0021.0002.58A8][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A
FA7D ; [.3BFC.0024.0002.58B3][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D
F94A ; [.3BFA.0021.0002.58D8][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A
F942 ; [.3BFA.0021.0002.58DF][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942
2F85C ; [.3BFC.0032.0002.5906][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C
2F85D ; [.3BF8.0021.0002.591A][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D
2F85E ; [.3BFB.0021.0002.5922][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E
FA7E ; [.3C00.0024.0002.5944][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.3BF7.0023.0002.5948][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.3BF5.0024.0002.5951][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.3BFC.0025.0002.5954][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.3BFE.0030.0002.5962][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.3BF7.0021.0002.5973][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981
2F862 ; [.3C07.0026.0002.59EC][.3C86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862
2F863 ; [.3C00.002C.0002.5A1B][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863
2F864 ; [.3C05.0030.0002.5A27][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864
FA80 ; [.3BFC.0027.0002.5A62][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F866 ; [.3BFC.002B.0002.5A66][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866
2F986 ; [.3C00.0025.0002.5AB5][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986
2F869 ; [.3C00.0041.0002.5B08][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869
FA81 ; [.3C01.003C.0002.5B28][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81
2F86A ; [.3BFA.0029.0002.5B3E][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A
2F86B ; [.3BFA.0029.0002.5B3E][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B
FA04 ; [.3BF8.0021.0002.5B85][.3C74.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04
2F86D ; [.3C00.0029.0002.5BC3][.3C81.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D
2F86E ; [.3C03.003B.0002.5BD8][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E
F95F ; [.3BF7.0021.0002.5BE7][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F
F9AA ; [.3BF7.0021.0002.5BE7][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA
2F86F ; [.3BF7.0021.0002.5BE7][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F
F9BC ; [.3BFA.0023.0002.5BEE][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC
F9BD ; [.3BF7.0021.0002.5C3F][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.3BF8.0028.0002.5C60][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877
F94B ; [.3BFA.0023.0002.5C62][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B
FA3B ; [.3C03.0021.0002.5C64][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B
F9DF ; [.3BFA.0026.0002.5C65][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF
2F879 ; [.3BFE.002A.0002.5CC0][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879
F9D5 ; [.3BFA.0023.0002.5D19][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5
F921 ; [.3BFA.0021.0002.5D50][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921
F9AB ; [.3BFA.0025.0002.5DBA][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB
2F881 ; [.3BFE.0021.0002.5DE1][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F882 ; [.3BFE.0027.0002.5DE2][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882
2F884 ; [.3BFE.0022.0002.5DFD][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F885 ; [.3BFE.0029.0002.5E28][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885
2F886 ; [.3BFB.0025.0002.5E3D][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886
F98E ; [.3BF7.0021.0002.5E74][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E
FA01 ; [.3BF8.002B.0002.5EA6][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88C ; [.3BFC.0052.0002.5EB3][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C
2F88D ; [.3BFE.0025.0002.5EB6][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.3BFA.0021.0002.5EC9][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.3BFA.0021.0002.5ECA][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.3BFA.0021.0002.5ECA][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA0B ; [.3BF5.0021.0002.5ED3][.3C7C.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B
F982 ; [.3BFA.0025.0002.5EEC][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982
F943 ; [.3BFA.0022.0002.5F04][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943
2F894 ; [.3BF8.004B.0002.5F22][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894
2F895 ; [.3BF8.004B.0002.5F22][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895
2F899 ; [.3C07.0025.0002.5F62][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.3C03.0025.0002.5F69][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84
2F89A ; [.3C01.0027.0002.5F6B][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A
F9D8 ; [.3BFA.0021.0002.5F8B][.3C84.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8
F966 ; [.3BFC.0026.0002.5FA9][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966
FA85 ; [.3C00.0043.0002.5FAD][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F89D ; [.3C00.002A.0002.5FCD][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.3C01.0026.0002.5FD7][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.3BF7.0021.0002.5FF5][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3
F960 ; [.3BF7.0024.0002.6012][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.3BFA.0026.0002.601C][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC
2F8A0 ; [.3C00.0042.0002.6081][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
FA3D ; [.3C07.0026.0002.6094][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.3C07.0026.0002.6094][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
2F8A5 ; [.3BF8.0022.0002.60C7][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
FA86 ; [.3BFB.002D.0002.60D8][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86
F9B9 ; [.3C00.0025.0002.60E1][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9
FA88 ; [.3C00.002E.0002.6108][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88
F9D9 ; [.3BFA.0022.0002.6144][.3C84.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9
2F8A6 ; [.3C01.002A.0002.6148][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.3C07.0027.0002.614C][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.3C07.0027.0002.614C][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA8A ; [.3C00.0047.0002.6160][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A
FA3E ; [.3BF5.0028.0002.6168][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E
2F8AA ; [.3BFA.0031.0002.617A][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
FA3F ; [.3C01.0022.0002.618E][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.3C01.0022.0002.618E][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.3C01.0022.0002.618E][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
F98F ; [.3BFA.0021.0002.6190][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F
2F8AD ; [.3BFC.0028.0002.61A4][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
2F8AE ; [.3C03.0030.0002.61AF][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
2F8AC ; [.3C07.0021.0002.61B2][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
2F8AF ; [.3BFB.0025.0002.61DE][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
FA40 ; [.3C01.0022.0002.61F2][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40
FA8B ; [.3C01.0022.0002.61F2][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B
2F8B0 ; [.3C01.0022.0002.61F2][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
F90D ; [.3BFA.0022.0002.61F6][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D
2F8B1 ; [.3BFA.0022.0002.61F6][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
F990 ; [.3BFA.0022.0002.6200][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990
2F8B2 ; [.3BFE.0026.0002.6210][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
F9D2 ; [.3BFA.0022.0002.622E][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.3BF8.0029.0002.6234][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F8B5 ; [.3C06.002B.0002.62B1][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.3BFA.0021.0002.62C9][.3C73.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925
F95B ; [.3BF7.0024.0002.62CF][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B
FA02 ; [.3C03.0026.0002.62D3][.3C77.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.3BFC.0022.0002.62D4][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
F973 ; [.3BFE.0022.0002.62FE][.3C85.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973
2F8B9 ; [.3BFB.0027.0002.633D][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.3C00.0027.0002.6350][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
2F8BB ; [.3BFE.0039.0002.6368][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
F9A4 ; [.3BF7.0024.0002.637B][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4
2F8BC ; [.3BFE.0029.0002.6383][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
F975 ; [.3BFA.0021.0002.63A0][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.3C00.0025.0002.63A9][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.3C00.0030.0002.63C4][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D
FA8E ; [.3BFE.0030.0002.641C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E
2F8BF ; [.3C01.0025.0002.6422][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
2F8C3 ; [.3BFB.0021.0002.6469][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
F991 ; [.3BF7.0022.0002.649A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991
2F8C5 ; [.3C07.0029.0002.649D][.3C83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
F930 ; [.3BFA.0023.0002.64C4][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930
FA41 ; [.3BFB.0025.0002.654F][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.3BFB.0025.0002.654F][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.3C00.0030.0002.6556][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90
2F8C9 ; [.3BF5.0030.0002.656C][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F969 ; [.3BFE.0032.0002.6578][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969
F9BE ; [.3BFA.0025.0002.6599][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE
F983 ; [.3BFA.0028.0002.65C5][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983
2F8CB ; [.3BF5.0035.0002.65E3][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB
F9E0 ; [.3C00.0024.0002.6613][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0
2F8CD ; [.3C01.0026.0002.6649][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
FA12 ; [.3C03.0022.0002.6674][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.3C03.0022.0002.6674][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91
F9C5 ; [.3C07.002A.0002.6688][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5
FA43 ; [.3BFE.002B.0002.6691][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.3BFE.002B.0002.6691][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
FA06 ; [.3C06.0022.0002.66B4][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06
F98B ; [.3BFA.0022.0002.66C6][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B
F901 ; [.3BF5.0033.0002.66F4][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8CC ; [.3BFE.002D.0002.66F8][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
2F8D4 ; [.3C03.0023.0002.6700][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
F929 ; [.3BFA.0022.0002.6717][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.3BFA.0022.0002.6717][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.3BFA.0022.0002.6717][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.3BFB.0025.0002.671B][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.3BFB.0025.0002.671B][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
F9E1 ; [.3BFA.0028.0002.674E][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.3C06.0025.0002.6753][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.3C01.002E.0002.6756][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.3BF5.0038.0002.675E][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
F9C8 ; [.3BF7.0021.0002.677B][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8
F9F4 ; [.3BFA.0021.0002.6797][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.3BFA.0023.0002.67F3][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9
F9DA ; [.3BFA.0023.0002.6817][.3C84.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA
F97A ; [.3BFA.0025.0002.6881][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.3BFB.0027.0002.6885][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.3BFB.0027.0002.6885][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
F9E2 ; [.3BFA.0029.0002.68A8][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2
2F8E8 ; [.3BFE.0062.0002.6942][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
2F8EA ; [.3BF5.002A.0002.69EA][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA
F914 ; [.3C00.0028.0002.6A02][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914
F95C ; [.3C00.0028.0002.6A02][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C
F9BF ; [.3C00.0028.0002.6A02][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF
F94C ; [.3BFA.0024.0002.6A13][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C
F931 ; [.3BFA.0024.0002.6AD3][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931
2F8ED ; [.3C01.0021.0002.6ADB][.3C85.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
F91D ; [.3BFA.0023.0002.6B04][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D
2F8EF ; [.3C03.0028.0002.6B21][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
2F8F1 ; [.3C07.0025.0002.6B54][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
2F8F3 ; [.3BFE.0023.0002.6B72][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
F98C ; [.3BFA.0023.0002.6B77][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C
F9A5 ; [.3BFA.0023.0002.6BAE][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5
F970 ; [.3BFE.0023.0002.6BBA][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970
FA96 ; [.3BFE.0023.0002.6BBA][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96
2F8F5 ; [.3BFE.0023.0002.6BBA][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
2F8FA ; [.3BFC.0025.0002.6C4E][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
F972 ; [.3C03.0024.0002.6C88][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.3C00.002B.0002.6CBF][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.3C06.0024.0002.6CCC][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968
F9E3 ; [.3BF7.0022.0002.6CE5][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3
F915 ; [.3BFA.0021.0002.6D1B][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.3BF8.002A.0002.6D1E][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F900 ; [.3C06.0029.0002.6D3E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.3BFA.0025.0002.6D41][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.3BFA.0025.0002.6D41][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.3BFA.0025.0002.6D41][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.3C07.002E.0002.6D69][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.3BFA.0023.0002.6D6A][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.3C07.002A.0002.6D77][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.3C07.002A.0002.6D77][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.3C03.0025.0002.6D78][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.3C00.0022.0002.6D85][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.3BFA.0022.0002.6DCB][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5
F94D ; [.3BFA.0025.0002.6DDA][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D
F9D6 ; [.3BFA.0024.0002.6DEA][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6
2F90E ; [.3C00.0026.0002.6DF9][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.3C01.002C.0002.6E1A][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.3C07.002B.0002.6E2F][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.3C00.002B.0002.6E6E][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909
F9CB ; [.3BFA.0026.0002.6E9C][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.3BF7.0022.0002.6EBA][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC
FA99 ; [.3C01.002B.0002.6ECB][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.3C01.002B.0002.6ECB][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.3C07.0022.0002.6ED1][.3C7C.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904
F94E ; [.3BFA.0026.0002.6F0F][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E
FA47 ; [.3C07.0026.0002.6F22][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47
FA9A ; [.3C07.0026.0002.6F22][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A
F992 ; [.3BFA.0024.0002.6F23][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992
2F90F ; [.3C01.0033.0002.6F6E][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F912 ; [.3BFC.003C.0002.6FC6][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912
F922 ; [.3BFA.0025.0002.6FEB][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922
F984 ; [.3BFA.002A.0002.6FFE][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984
2F915 ; [.3C00.002D.0002.701B][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915
FA9B ; [.3C01.003D.0002.701E][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B
2F914 ; [.3C01.003D.0002.701E][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914
2F835 ; [.3C07.002D.0002.7070][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835
2F918 ; [.3C01.002B.0002.707D][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918
F9FB ; [.3C01.002C.0002.7099][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.3C05.0028.0002.70AD][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A
F99F ; [.3BFA.0025.0002.70C8][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.3BFA.0022.0002.70D9][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916
F993 ; [.3BFA.0025.0002.7149][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993
FA48 ; [.3C01.002D.0002.716E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.3C01.002D.0002.716E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C
F9C0 ; [.3BFA.0026.0002.71CE][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0
F9EE ; [.3BFA.0023.0002.71D0][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE
F932 ; [.3BFA.0027.0002.7210][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932
F91E ; [.3BFA.0026.0002.721B][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E
2F920 ; [.3C03.0036.0002.7228][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920
FA9E ; [.3C01.0028.0002.7235][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.3C01.0028.0002.7235][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921
F946 ; [.3BFA.0023.0002.7262][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946
2F924 ; [.3BFE.0030.0002.7280][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924
FA9F ; [.3BFC.0027.0002.72AF][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F9FA ; [.3BFE.0035.0002.72C0][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA
F92B ; [.3BFA.0024.0002.72FC][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B
FA16 ; [.3C01.002E.0002.732A][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16
FAA0 ; [.3C01.002E.0002.732A][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0
F9A7 ; [.3BFA.0021.0002.7375][.3C79.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7
2F928 ; [.3BF8.0023.0002.737A][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928
F961 ; [.3BFE.0021.0002.7387][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.3BFE.0021.0002.7387][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F929 ; [.3C00.0025.0002.738B][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929
F9AD ; [.3BFA.0027.0002.73B2][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.3BFA.0023.0002.73DE][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.3BFA.002D.0002.7406][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.3BFA.0028.0002.7409][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.3C05.002B.0002.7422][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92F ; [.3C00.003D.0002.745C][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F
F9AE ; [.3C07.002D.0002.7469][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE
FAA1 ; [.3C01.0057.0002.7471][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1
2F930 ; [.3C01.0057.0002.7471][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930
F994 ; [.3BFA.0026.0002.7489][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994
F9EF ; [.3BFA.0024.0002.7498][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF
2F932 ; [.3BF5.003A.0002.74CA][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932
F9CD ; [.3BFA.002A.0002.7559][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.3BFA.0022.0002.7565][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976
F962 ; [.3C00.002C.0002.7570][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962
2F938 ; [.3C00.002C.0002.7570][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938
F9E5 ; [.3BFA.002F.0002.75E2][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5
2F93A ; [.3C00.0059.0002.7610][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A
FAA5 ; [.3C00.0023.0002.761F][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5
F9C1 ; [.3BFA.0027.0002.7642][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1
F90E ; [.3BFA.0023.0002.7669][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E
FA17 ; [.3C00.0022.0002.76CA][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.3C00.0022.0002.76CA][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7 ; [.3BFE.002B.0002.76DB][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7
F933 ; [.3BFA.0028.0002.76E7][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933
FAA8 ; [.3C01.0021.0002.76F4][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.3C01.0021.0002.76F4][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.3BFE.002C.0002.7701][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F945 ; [.3C01.0033.0002.771E][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945
FAAA ; [.3C03.0023.0002.7740][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA
2F94A ; [.3C01.0034.0002.778B][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A
F9CE ; [.3BFA.002C.0002.786B][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.3BFA.0021.0002.788C][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.3BFA.0021.0002.788C][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.3BFC.0038.0002.7891][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.3BFA.0024.0002.78CA][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947
F964 ; [.3BFC.0032.0002.78FB][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964
F985 ; [.3BFA.002B.0002.792A][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985
FA4C ; [.3BFE.0046.0002.793E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C
FA4E ; [.3BF5.004C.0002.7948][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.3C01.0035.0002.7949][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA4F ; [.3C00.0032.0002.7950][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F
FA50 ; [.3C01.0039.0002.7956][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.3C01.0039.0002.7956][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.3C03.0023.0002.795D][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51
FA19 ; [.3BFE.002C.0002.795E][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.3BFE.0037.0002.7965][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A
F93C ; [.3BFA.0022.0002.797F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C
FA52 ; [.3C07.0027.0002.798D][.3C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52
FA53 ; [.3C01.0044.0002.798E][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53
FA1B ; [.3BFC.0028.0002.798F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.3BFC.0028.0002.798F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956
F9B6 ; [.3BFA.0023.0002.79AE][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6
F995 ; [.3BF7.0023.0002.79CA][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995
2F957 ; [.3C03.0024.0002.79EB][.3C80.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957
F956 ; [.3BFA.0023.0002.7A1C][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956
FA54 ; [.3BF5.0025.0002.7A40][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54
2F959 ; [.3BF5.0025.0002.7A40][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959
FA55 ; [.3BF8.0022.0002.7A81][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55
F9F7 ; [.3BFA.0022.0002.7ACB][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7
F9F8 ; [.3BFA.0023.0002.7B20][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8
FA56 ; [.3C01.0027.0002.7BC0][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56
FAAD ; [.3C01.0027.0002.7BC0][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD
2F962 ; [.3C01.003D.0002.7BC6][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962
2F963 ; [.3C03.0026.0002.7BC9][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963
F9A6 ; [.3BFA.0025.0002.7C3E][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6
F944 ; [.3BFA.0026.0002.7C60][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944
F9F9 ; [.3BFA.0024.0002.7C92][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.3C01.0047.0002.7CBE][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D
FA03 ; [.3BF8.0029.0002.7CD6][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03
F97B ; [.3BFA.0029.0002.7CE7][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B
2F96A ; [.3BF5.004F.0002.7D00][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A
F9CF ; [.3BF7.0022.0002.7D10][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF
F96A ; [.3BFE.0023.0002.7D22][.3C74.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.3BFA.0028.0002.7D2F][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F
FAAF ; [.3C01.0063.0002.7D5B][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF
2F96C ; [.3BFC.0034.0002.7D63][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C
F93D ; [.3BFA.0023.0002.7DA0][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D
F957 ; [.3BFA.0024.0002.7DBE][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957
2F96E ; [.3C03.0030.0002.7DC7][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E
F996 ; [.3BFA.0027.0002.7DF4][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996
FA57 ; [.3BFA.0027.0002.7DF4][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57
FAB0 ; [.3BFA.0027.0002.7DF4][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0
FA58 ; [.3C01.0036.0002.7E09][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58
F950 ; [.3BFA.0029.0002.7E37][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950
FA59 ; [.3BFC.0026.0002.7E41][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59
2F970 ; [.3BFE.0052.0002.7E45][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970
FAB1 ; [.3BFC.0035.0002.7F3E][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1
FA5A ; [.3BFE.0035.0002.7F72][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.3BFA.0031.0002.7F79][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6
F90F ; [.3BFA.0024.0002.7F85][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F
F9AF ; [.3BFA.0029.0002.7F9A][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.3C00.0036.0002.7FBD][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E
2F979 ; [.3BF5.005A.0002.7FFA][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979
F934 ; [.3BFA.0029.0002.8001][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934
FA5B ; [.3C01.0033.0002.8005][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.3C01.0033.0002.8005][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.3C01.0033.0002.8005][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A
F9B0 ; [.3BFA.002B.0002.8046][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0
F997 ; [.3BFA.0028.0002.806F][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997
2F97F ; [.3C03.0028.0002.8070][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F
F945 ; [.3BFA.0027.0002.807E][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945
F953 ; [.3BFA.0022.0002.808B][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.3BF7.0023.0002.80AD][.3C80.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.3C00.0024.0002.80B2][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F985 ; [.3BFC.003F.0002.813E][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985
F926 ; [.3BFA.0022.0002.81D8][.3C73.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926
F9F6 ; [.3BFA.0024.0002.81E8][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6
FA5C ; [.3C03.002A.0002.81ED][.3C83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F893 ; [.3C00.002E.0002.8201][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.3C00.002E.0002.8201][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B
F97C ; [.3BFA.002A.0002.826F][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C
2F990 ; [.3C00.0037.0002.828B][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F991 ; [.3C01.003B.0002.829D][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.3C07.0029.0002.82B1][.3C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.3BFC.0035.0002.82B3][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.3C00.0029.0002.82BD][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.3C00.0023.0002.82E5][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.3C00.0023.0002.82E5][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.3BF5.003A.0002.82E6][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996
2F999 ; [.3C03.002E.0002.831D][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999
2F99C ; [.3C00.004C.0002.8323][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C
F9FE ; [.3BF8.0022.0002.8336][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.3C07.0034.0002.8352][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F99D ; [.3BFB.002A.0002.83BD][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D
F93E ; [.3BFA.0024.0002.83C9][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E
2F9A1 ; [.3BF5.0023.0002.83CA][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.3BF5.0025.0002.83CC][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.3C03.0029.0002.83DC][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
FAB4 ; [.3C07.002A.0002.83EF][.3C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4
F958 ; [.3BFA.0025.0002.83F1][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.3BFA.0025.0002.843D][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918
F96E ; [.3C00.0023.0002.8449][.3C79.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E
FA5F ; [.3C01.0034.0002.8457][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.3C01.0034.0002.8457][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F999 ; [.3BFA.0029.0002.84EE][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999
2F9A8 ; [.3C06.002A.0002.84F1][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
F9C2 ; [.3BFA.002A.0002.84FC][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2
2F9AC ; [.3C00.0062.0002.8564][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
F923 ; [.3BFA.0028.0002.85CD][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923
F9F0 ; [.3BFA.0025.0002.85FA][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0
F935 ; [.3BFA.002A.0002.8606][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935
F91F ; [.3BFA.0027.0002.862D][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F
F910 ; [.3BFA.0025.0002.863F][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910
2F9B3 ; [.3C07.0023.0002.8650][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
F936 ; [.3BFA.002B.0002.865C][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936
2F9B4 ; [.3BFA.002B.0002.865C][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
2F9B5 ; [.3C07.0025.0002.8667][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
2F9B7 ; [.3C03.0034.0002.86A9][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
2F9BC ; [.3C01.0026.0002.8728][.3C77.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
F911 ; [.3BFA.0026.0002.87BA][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911
F927 ; [.3BFA.0023.0002.881F][.3C73.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927
FA08 ; [.3C07.0025.0002.884C][.3C74.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F9C4 ; [.3C00.0030.0002.8863][.3C86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
F9A0 ; [.3BFA.0026.0002.88C2][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0
F9E7 ; [.3BFA.0034.0002.88CF][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7
F9E8 ; [.3BFA.0035.0002.88E1][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8
F912 ; [.3BFA.0027.0002.88F8][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912
FA60 ; [.3BF5.0028.0002.8910][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.3BF5.0034.0002.8941][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6
F924 ; [.3BFA.0029.0002.8964][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924
FAB7 ; [.3BFC.002D.0002.8986][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7
FA0A ; [.3BF5.0028.0002.898B][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A
FA61 ; [.3BFE.0037.0002.8996][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61
FAB8 ; [.3BFE.0037.0002.8996][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8
2F9CF ; [.3BFE.0031.0002.8AA0][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
F96F ; [.3BFE.002B.0002.8AAA][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F
F9A1 ; [.3BFE.002B.0002.8AAA][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1
FAB9 ; [.3C01.0046.0002.8ABF][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9
FABB ; [.3C03.0026.0002.8ACB][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB
F97D ; [.3BFA.002B.0002.8AD2][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D
F941 ; [.3BFA.0021.0002.8AD6][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941
FABE ; [.3C00.0046.0002.8AED][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE
2F9D0 ; [.3C00.0046.0002.8AED][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
FA22 ; [.3C01.0030.0002.8AF8][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22
FABA ; [.3C01.0030.0002.8AF8][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA
F95D ; [.3BF7.0021.0002.8AFE][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D
FABD ; [.3BF7.0021.0002.8AFE][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD
FA62 ; [.3C00.0022.0002.8B01][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62
FABC ; [.3C00.0022.0002.8B01][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC
FA63 ; [.3BF5.002D.0002.8B39][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63
FABF ; [.3BF5.002D.0002.8B39][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF
F9FC ; [.3BFE.002C.0002.8B58][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC
F95A ; [.3BF8.002A.0002.8B80][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A
FAC0 ; [.3BFC.0023.0002.8B8A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0
2F9D1 ; [.3BFC.0023.0002.8B8A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
F900 ; [.3BF5.0057.0002.8C48][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900
2F9D2 ; [.3BFE.003B.0002.8C55][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F9D4 ; [.3BF5.002E.0002.8CAB][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
2F9D5 ; [.3BFC.0032.0002.8CC1][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
F948 ; [.3BFA.0025.0002.8CC2][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948
F903 ; [.3BF5.0039.0002.8CC8][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903
FA64 ; [.3BFC.002D.0002.8CD3][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64
FA65 ; [.3C01.002B.0002.8D08][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65
FAC1 ; [.3C01.002B.0002.8D08][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1
2F9D6 ; [.3BF5.0039.0002.8D1B][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
2F9D7 ; [.3BF5.0058.0002.8D77][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9DA ; [.3BFC.0027.0002.8DCB][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.3BFA.002C.0002.8DEF][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937
F902 ; [.3C03.002D.0002.8ECA][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902
F998 ; [.3BFA.002A.0002.8F26][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998
F9D7 ; [.3BFA.0026.0002.8F2A][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7
FAC2 ; [.3BFE.004F.0002.8F38][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2
2F9DF ; [.3BFE.004F.0002.8F38][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
FA07 ; [.3BFC.002F.0002.8F3B][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07
F98D ; [.3BFA.0026.0002.8F62][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D
F971 ; [.3C01.003E.0002.8FB0][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971
F99A ; [.3BFA.002B.0002.9023][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A
FA25 ; [.3C00.0027.0002.9038][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.3C00.0027.0002.9038][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67
FAC3 ; [.3C01.0041.0002.9072][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3
F9C3 ; [.3BFA.002B.0002.907C][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3
F913 ; [.3BFA.0028.0002.908F][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913
FA2E ; [.3BFA.0028.0002.90DE][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E
FA26 ; [.3BF8.0045.0002.90FD][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26
F919 ; [.3BFA.0026.0002.916A][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919
F9B7 ; [.3BFA.0024.0002.91B4][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7
F9E9 ; [.3BFA.0036.0002.91CC][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9
F97E ; [.3BFA.002D.0002.91CF][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.3BF5.0021.0002.91D1][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A
F9B1 ; [.3BFA.002D.0002.9234][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1
2F9E7 ; [.3BFC.002F.0002.9238][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
2F9EA ; [.3BFC.0039.0002.927C][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
2F9E8 ; [.3C07.003F.0002.92D7][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
F93F ; [.3BFA.0025.0002.9304][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F
F99B ; [.3BFA.002C.0002.934A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B
2F9EE ; [.3BF5.0033.0002.958B][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
F986 ; [.3BFA.002E.0002.95AD][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986
F9C6 ; [.3C00.0031.0002.962E][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.3BFA.002D.0002.964B][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.3BF5.0037.0002.964D][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.3BFA.0026.0002.9675][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959
F9D3 ; [.3BFA.0023.0002.9678][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3
FAC6 ; [.3C01.004E.0002.967C][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6
F9DC ; [.3BFA.0021.0002.9686][.3C84.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9F1 ; [.3BFA.0027.0002.96A3][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1
FA2F ; [.3BFA.0025.0002.96B7][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F
F9B8 ; [.3BFA.0026.0002.96B8][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8
F9EA ; [.3BFA.0038.0002.96E2][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA
FA68 ; [.3BF7.0023.0002.96E3][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68
FAC7 ; [.3BF7.0023.0002.96E3][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7
F9B2 ; [.3BFA.002E.0002.96F6][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.3BFA.0028.0002.96F7][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949
2F9F5 ; [.3C00.0031.0002.9723][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
F938 ; [.3BFA.002E.0002.9732][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938
F9B3 ; [.3BFA.002F.0002.9748][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3
FA1C ; [.3C01.0054.0002.9756][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.3C01.0054.0002.9756][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8
2F9FA ; [.3C06.0034.0002.97E0][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA
FA69 ; [.3C07.0026.0002.97FF][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69
FACA ; [.3C07.0026.0002.97FF][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA
F9B4 ; [.3BFA.0030.0002.9818][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4
FA6A ; [.3BFC.002E.0002.983B][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A
FACC ; [.3BFC.002E.0002.983B][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC
F9D0 ; [.3BFA.002E.0002.985E][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0
2FA02 ; [.3BF5.005B.0002.98E2][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02
FA2A ; [.3BFC.0039.0002.98EF][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A
FA2B ; [.3BFE.005A.0002.98FC][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B
FA2C ; [.3BF5.0030.0002.9928][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C
F91A ; [.3BFA.0027.0002.99F1][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A
F987 ; [.3BFA.0030.0002.9A6A][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987
FACD ; [.3C01.004C.0002.9B12][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD
2FA0A ; [.3C01.004C.0002.9B12][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
F939 ; [.3BFA.002F.0002.9B6F][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939
F9F2 ; [.3BFA.0028.0002.9C57][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2
FA2D ; [.3C07.0025.0002.9DB4][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D
F93A ; [.3BFA.0030.0002.9DFA][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A
F920 ; [.3BFA.0028.0002.9E1E][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920
F940 ; [.3BFA.0026.0002.9E7F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940
F988 ; [.3BFA.0031.0002.9E97][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988
F9F3 ; [.3BFA.0029.0002.9E9F][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FA15 ; [.3BFB.0028.0002.9EBB][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15
F989 ; [.3BFA.0032.0002.9ECE][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989
2FA1C ; [.3BFC.004A.0002.9F3B][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
F9C4 ; [.3BFA.0021.0002.9F8D][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4
FAD9 ; [.3BFA.002E.0002.9F8E][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9
F907 ; [.3BF5.0056.0002.9F9C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907
F908 ; [.3BF5.0056.0002.9F9C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908
FACE ; [.3BF5.0056.0002.9F9C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE
ENTRY
};
Unicode/Collate/Locale/es.pl 0000644 00000000525 15033552504 0011664 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
ENTRY
};
Unicode/Collate/Locale/tr.pl 0000644 00000006251 15033552504 0011704 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00E7 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
0063 0327 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
00C7 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA
0043 0327 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA
011F ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE
0067 0306 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE
011E ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE
0047 0306 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE
0131 ; [.1D31.0020.0002] # LATIN SMALL LETTER DOTLESS I
0049 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER I
00CC ; [.1D31.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE
00CD ; [.1D31.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE
00CE ; [.1D31.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
00CF ; [.1D31.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS
012A ; [.1D31.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON
012C ; [.1D31.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE
012E ; [.1D31.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK
0130 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE
0049 0307 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE
00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
015F ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA
0073 0327 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA
015E ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA
0053 0327 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA
00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
ENTRY
};
Unicode/Collate/Locale/hu.pl 0000644 00000041711 15033552504 0011673 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0063 0073 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER S>
0063 0053 ; [.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER S>
0043 0073 ; [.1C7B.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER S>
0043 0053 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER S>
0064 007A ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z>
0064 005A ; [.1C90.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z>
0044 007A ; [.1C90.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z>
0044 005A ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z>
0064 007A 0073 ; [.1C91.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
0064 007A 0053 ; [.1C91.0020.0007][.0000.0000.0002][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
0064 005A 0073 ; [.1C91.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
0064 005A 0053 ; [.1C91.0020.0007][.0000.0000.0002][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
0044 007A 0073 ; [.1C91.0020.0007][.0000.0000.0008][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
0044 007A 0053 ; [.1C91.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
0044 005A 0073 ; [.1C91.0020.0007][.0000.0000.0008][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
0044 005A 0053 ; [.1C91.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
0067 0079 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER Y>
0067 0059 ; [.1CF5.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER Y>
0047 0079 ; [.1CF5.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER Y>
0047 0059 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER Y>
006C 0079 ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER Y>
006C 0059 ; [.1D78.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER Y>
004C 0079 ; [.1D78.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER Y>
004C 0059 ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER Y>
006E 0079 ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y>
006E 0059 ; [.1DBA.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER Y>
004E 0079 ; [.1DBA.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y>
004E 0059 ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y>
0073 007A ; [.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER Z>
0073 005A ; [.1E72.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER Z>
0053 007A ; [.1E72.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER Z>
0053 005A ; [.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER Z>
0074 0079 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER Y>
0074 0059 ; [.1E96.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER Y>
0054 0079 ; [.1E96.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER Y>
0054 0059 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER Y>
007A 0073 ; [.1F22.0020.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
007A 0053 ; [.1F22.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
005A 0073 ; [.1F22.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
005A 0053 ; [.1F22.0020.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1DDE.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1DDE.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1DDE.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1DDE.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1EB6.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1EB6.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1EB6.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1EB6.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0063 0063 0073 ; [.1C7B.0020.0002][.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER C, LATIN SMALL LETTER S>
0063 0063 0053 ; [.1C7B.0020.0002][.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER C, LATIN CAPITAL LETTER S>
0063 0043 0073 ; [.1C7B.0020.0002][.1C7B.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, LATIN SMALL LETTER S>
0063 0043 0053 ; [.1C7B.0020.0002][.1C7B.0020.0008] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER S>
0043 0063 0073 ; [.1C7B.0020.0008][.1C7B.0020.0002] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER C, LATIN SMALL LETTER S>
0043 0063 0053 ; [.1C7B.0020.0008][.1C7B.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER C, LATIN CAPITAL LETTER S>
0043 0043 0073 ; [.1C7B.0020.0008][.1C7B.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER C, LATIN SMALL LETTER S>
0043 0043 0053 ; [.1C7B.0020.0008][.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER S>
0064 0064 007A ; [.1C90.0020.0002][.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z>
0064 0064 005A ; [.1C90.0020.0002][.1C90.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z>
0064 0044 007A ; [.1C90.0020.0002][.1C90.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z>
0064 0044 005A ; [.1C90.0020.0002][.1C90.0020.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z>
0044 0064 007A ; [.1C90.0020.0008][.1C90.0020.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z>
0044 0064 005A ; [.1C90.0020.0008][.1C90.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z>
0044 0044 007A ; [.1C90.0020.0008][.1C90.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z>
0044 0044 005A ; [.1C90.0020.0008][.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z>
0064 0064 007A 0073 ; [.1C91.0020.0002][.1C91.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
0064 0064 007A 0053 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
0064 0064 005A 0073 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
0064 0064 005A 0053 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
0064 0044 007A 0073 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
0064 0044 007A 0053 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
0064 0044 005A 0073 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
0064 0044 005A 0053 ; [.1C91.0020.0002][.1C91.0020.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
0044 0064 007A 0073 ; [.1C91.0020.0008][.1C91.0020.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
0044 0064 007A 0053 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
0044 0064 005A 0073 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
0044 0064 005A 0053 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
0044 0044 007A 0073 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
0044 0044 007A 0053 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
0044 0044 005A 0073 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
0044 0044 005A 0053 ; [.1C91.0020.0008][.1C91.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
0067 0067 0079 ; [.1CF5.0020.0002][.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER G, LATIN SMALL LETTER Y>
0067 0067 0059 ; [.1CF5.0020.0002][.1CF5.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER G, LATIN CAPITAL LETTER Y>
0067 0047 0079 ; [.1CF5.0020.0002][.1CF5.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, LATIN SMALL LETTER Y>
0067 0047 0059 ; [.1CF5.0020.0002][.1CF5.0020.0008] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER Y>
0047 0067 0079 ; [.1CF5.0020.0008][.1CF5.0020.0002] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER G, LATIN SMALL LETTER Y>
0047 0067 0059 ; [.1CF5.0020.0008][.1CF5.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER G, LATIN CAPITAL LETTER Y>
0047 0047 0079 ; [.1CF5.0020.0008][.1CF5.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER G, LATIN SMALL LETTER Y>
0047 0047 0059 ; [.1CF5.0020.0008][.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER Y>
006C 006C 0079 ; [.1D78.0020.0002][.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L, LATIN SMALL LETTER Y>
006C 006C 0059 ; [.1D78.0020.0002][.1D78.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L, LATIN CAPITAL LETTER Y>
006C 004C 0079 ; [.1D78.0020.0002][.1D78.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, LATIN SMALL LETTER Y>
006C 004C 0059 ; [.1D78.0020.0002][.1D78.0020.0008] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER Y>
004C 006C 0079 ; [.1D78.0020.0008][.1D78.0020.0002] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L, LATIN SMALL LETTER Y>
004C 006C 0059 ; [.1D78.0020.0008][.1D78.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L, LATIN CAPITAL LETTER Y>
004C 004C 0079 ; [.1D78.0020.0008][.1D78.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L, LATIN SMALL LETTER Y>
004C 004C 0059 ; [.1D78.0020.0008][.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER Y>
006E 006E 0079 ; [.1DBA.0020.0002][.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER N, LATIN SMALL LETTER Y>
006E 006E 0059 ; [.1DBA.0020.0002][.1DBA.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER N, LATIN CAPITAL LETTER Y>
006E 004E 0079 ; [.1DBA.0020.0002][.1DBA.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y>
006E 004E 0059 ; [.1DBA.0020.0002][.1DBA.0020.0008] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y>
004E 006E 0079 ; [.1DBA.0020.0008][.1DBA.0020.0002] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER N, LATIN SMALL LETTER Y>
004E 006E 0059 ; [.1DBA.0020.0008][.1DBA.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER N, LATIN CAPITAL LETTER Y>
004E 004E 0079 ; [.1DBA.0020.0008][.1DBA.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y>
004E 004E 0059 ; [.1DBA.0020.0008][.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y>
0073 0073 007A ; [.1E72.0020.0002][.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER S, LATIN SMALL LETTER Z>
0073 0073 005A ; [.1E72.0020.0002][.1E72.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER S, LATIN CAPITAL LETTER Z>
0073 0053 007A ; [.1E72.0020.0002][.1E72.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, LATIN SMALL LETTER Z>
0073 0053 005A ; [.1E72.0020.0002][.1E72.0020.0008] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER Z>
0053 0073 007A ; [.1E72.0020.0008][.1E72.0020.0002] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER S, LATIN SMALL LETTER Z>
0053 0073 005A ; [.1E72.0020.0008][.1E72.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER S, LATIN CAPITAL LETTER Z>
0053 0053 007A ; [.1E72.0020.0008][.1E72.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER S, LATIN SMALL LETTER Z>
0053 0053 005A ; [.1E72.0020.0008][.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER Z>
0074 0074 0079 ; [.1E96.0020.0002][.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER T, LATIN SMALL LETTER Y>
0074 0074 0059 ; [.1E96.0020.0002][.1E96.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER T, LATIN CAPITAL LETTER Y>
0074 0054 0079 ; [.1E96.0020.0002][.1E96.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, LATIN SMALL LETTER Y>
0074 0054 0059 ; [.1E96.0020.0002][.1E96.0020.0008] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER Y>
0054 0074 0079 ; [.1E96.0020.0008][.1E96.0020.0002] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER T, LATIN SMALL LETTER Y>
0054 0074 0059 ; [.1E96.0020.0008][.1E96.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER T, LATIN CAPITAL LETTER Y>
0054 0054 0079 ; [.1E96.0020.0008][.1E96.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER T, LATIN SMALL LETTER Y>
0054 0054 0059 ; [.1E96.0020.0008][.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER Y>
007A 007A 0073 ; [.1F22.0020.0002][.1F22.0020.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
007A 007A 0053 ; [.1F22.0020.0002][.1F22.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
007A 005A 0073 ; [.1F22.0020.0002][.1F22.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
007A 005A 0053 ; [.1F22.0020.0002][.1F22.0020.0008] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
005A 007A 0073 ; [.1F22.0020.0008][.1F22.0020.0002] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER Z, LATIN SMALL LETTER S>
005A 007A 0053 ; [.1F22.0020.0008][.1F22.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S>
005A 005A 0073 ; [.1F22.0020.0008][.1F22.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S>
005A 005A 0053 ; [.1F22.0020.0008][.1F22.0020.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S>
ENTRY
};
Unicode/Collate/Locale/kok.pl 0000644 00000001322 15033552504 0012035 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA
0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM
0933 ; [.269E.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA
0934 ; [.269E.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA
0915 094D 0937 ; [.269E.0020.0002][.FFF2.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA>
0939 ; [.269E.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA
ENTRY
};
Unicode/Collate/Locale/da.pl 0000644 00000013060 15033552504 0011637 0 ustar 00 +{
locale_version => 1.25,
upper_before_lower => 1,
entry => <<'ENTRY', # for DUCET v9.0.0
0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE
00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH
00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN
00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN
00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE
1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE
1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK
00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE
0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE
00E5 ; [.1F98.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE
0061 030A ; [.1F98.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1F98.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE
0041 030A ; [.1F98.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1F98.0020.0008][.0000.0000.0001] # ANGSTROM SIGN
01FB ; [.1F98.0020.0002][.0000.0000.0001][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1F98.0020.0008][.0000.0000.0001][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
0061 0061 ; [.1F98.0020.0002][.0000.0000.0007] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A>
0041 0061 ; [.1F98.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A>
0061 0041 ; [.1F98.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER A, LATIN CAPITAL LETTER A>
0041 0041 ; [.1F98.0020.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A>
ENTRY
};
Unicode/Collate/Locale/lv.pl 0000644 00000004231 15033552504 0011674 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
010D ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0123 ; [.1D17.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA
0067 0327 ; [.1D17.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA
0122 ; [.1D17.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA
0047 0327 ; [.1D17.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA
0137 ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA
006B 0327 ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA
0136 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA
004B 0327 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA
013C ; [.1DA9.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA
006C 0327 ; [.1DA9.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA
013B ; [.1DA9.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA
004C 0327 ; [.1DA9.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA
0146 ; [.1DDC.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA
006E 0327 ; [.1DDC.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA
0145 ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA
004E 0327 ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA
0157 ; [.1E70.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA
0072 0327 ; [.1E70.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA
0156 ; [.1E70.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA
0052 0327 ; [.1E70.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA
0161 ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
017E ; [.1F3D.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F3D.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F3D.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F3D.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
ENTRY
};
Unicode/Collate/Locale/gu.pl 0000644 00000000550 15033552504 0011666 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0A82 ; [.2739.0020.0002][.FFF1.0000.0000] # GUJARATI SIGN ANUSVARA
0A81 ; [.2739.0021.0002][.FFF1.0000.0000] # GUJARATI SIGN CANDRABINDU
0A83 ; [.2739.0020.0002][.FFF2.0000.0000] # GUJARATI SIGN VISARGA
0AD0 ; [.2739.0020.0002][.FFF0.0000.0000] # GUJARATI OM
ENTRY
};
Unicode/Collate/Locale/af.pl 0000644 00000000235 15033552504 0011641 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0149 ; [.1DB9.0020.0009] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
ENTRY
};
Unicode/Collate/Locale/sk.pl 0000644 00000006211 15033552504 0011670 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00E4 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
00C4 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
0041 0308 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS
01DF ; [.1C48.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1C48.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0063 0068 ; [.1D19.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0063 0048 ; [.1D19.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H>
0043 0068 ; [.1D19.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1D19.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED1 ; [.1DDE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1DDE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED7 ; [.1DDE.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1DDE.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1DDE.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1DDE.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED9 ; [.1DDE.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1DDE.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0159 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON
0072 030C ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON
0158 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON
0052 030C ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
ENTRY
};
Unicode/Collate/Locale/az.pl 0000644 00000007017 15033552504 0011672 0 ustar 00 +{
locale_version => 1.25,
# schwa doesn't require tailoring
entry => <<'ENTRY', # for DUCET v9.0.0
00E7 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
0063 0327 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
00C7 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA
0043 0327 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA
011F ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE
0067 0306 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE
011E ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE
0047 0306 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE
0131 ; [.1D31.0020.0002] # LATIN SMALL LETTER DOTLESS I
0049 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER I
00CC ; [.1D31.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE
00CD ; [.1D31.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE
00CE ; [.1D31.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
00CF ; [.1D31.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS
012A ; [.1D31.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON
012C ; [.1D31.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE
012E ; [.1D31.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK
0130 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE
0049 0307 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE
00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS
00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS
022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
015F ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA
0073 0327 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA
015E ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA
0053 0327 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA
00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0071 ; [.1D66.0020.0002] # LATIN SMALL LETTER Q
0051 ; [.1D66.0020.0008] # LATIN CAPITAL LETTER Q
0078 ; [.1D19.0020.0002] # LATIN SMALL LETTER X
0058 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER X
0077 ; [.1F22.0020.0002] # LATIN SMALL LETTER W
0057 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER W
ENTRY
};
Unicode/Collate/Locale/zh_big5.pl 0000644 00000173455 15033552504 0012621 0 ustar 00 use Unicode::Collate::CJK::Big5;
+{
locale_version => 1.25,
overrideCJK => \&Unicode::Collate::CJK::Big5::weightBig5,
entry => <<'ENTRY', # for DUCET v9.0.0
0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON>
004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON>
1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON>
004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON>
006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT>
006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK>
004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT>
004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK>
006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON>
004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON>
0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON>
00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON>
01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON>
00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON>
01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
F967 ; [.804A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
FA70 ; [.82DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70
F905 ; [.81CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905
2F801 ; [.8022.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.804D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E
F91B ; [.8B74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B
F9BA ; [.800F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA
F977 ; [.845B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977
F9FD ; [.8057.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD
F9A8 ; [.80B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8
2F804 ; [.81E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804
FA73 ; [.96AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73
F92D ; [.82EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D
F9B5 ; [.82ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.846A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.846A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805
2F806 ; [.981A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806
F965 ; [.845F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965
F9D4 ; [.8607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4
2F808 ; [.87B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808
2F809 ; [.89A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809
2F80B ; [.8D3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.8D39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.8D34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.8D34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A
FA0C ; [.802A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.80B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.81EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.81EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F80F ; [.82FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F
2F814 ; [.8061.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814
FA72 ; [.8142.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72
F978 ; [.82FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978
F9D1 ; [.8062.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1
2F811 ; [.82FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.9045.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F815 ; [.8144.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815
2F8D2 ; [.8473.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.87C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F817 ; [.8065.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817
2F818 ; [.860A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F81A ; [.80BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A
F92E ; [.81EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E
F955 ; [.860E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955
F954 ; [.8EC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954
FA15 ; [.A8BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15
2F81D ; [.9524.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D
2F81E ; [.802B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.8068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.8068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.8146.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C
F9DD ; [.81F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.8306.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.8303.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F821 ; [.96CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821
2F822 ; [.89A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822
2F823 ; [.8B81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823
F9C7 ; [.8EC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7
F98A ; [.8018.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A
F99D ; [.814B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D
FA76 ; [.847D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.847D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.847E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.847E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.87CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952
F92F ; [.89AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F
FA34 ; [.8B85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.8B85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827
F97F ; [.916E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F
FA77 ; [.802C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.802C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.80C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829
2F82A ; [.80C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A
F963 ; [.80C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.80C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B
F9EB ; [.87D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F82C ; [.80C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.8310.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.8310.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D
2F82E ; [.89AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F82F ; [.81F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.81FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F831 ; [.8617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.8617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.8617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833
F96B ; [.87D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B
2F836 ; [.8075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836
2F837 ; [.861A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837
F906 ; [.80DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.80D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839
2F83A ; [.80DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A
2F83B ; [.815E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B
F9DE ; [.8152.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.81FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.820C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D
F980 ; [.8206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980
2F83E ; [.8205.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.832A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F
2F840 ; [.983D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840
F99E ; [.8490.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F842 ; [.861C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842
FA79 ; [.87E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79
2F844 ; [.87E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844
2F845 ; [.8AD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.8AD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.89BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.89CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.89CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.89B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.89B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F848 ; [.89CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848
2F849 ; [.89BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849
FA0D ; [.A137.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D
2F84A ; [.A146.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A
FA7B ; [.A140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B
FA37 ; [.8D4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37
2F84C ; [.8D4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C
FA38 ; [.9052.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38
2F84F ; [.8ED2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F
F9A9 ; [.96EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F84B ; [.8D57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B
2F855 ; [.849E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.84A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.9C30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F854 ; [.9C49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854
2F857 ; [.89D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857
2F856 ; [.9A14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856
FA10 ; [.8BA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10
FA7C ; [.8BA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C
F96C ; [.8B9C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.903E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A
2F858 ; [.A65C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858
FA7D ; [.8ED9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D
F94A ; [.9282.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A
F942 ; [.932E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942
2F85C ; [.960C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C
2F85D ; [.816B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D
2F85E ; [.8D62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E
FA7E ; [.833B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.833A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.84A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.833C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.87FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.8034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981
2F865 ; [.84AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865
2F862 ; [.8641.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862
2F863 ; [.863F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863
FA80 ; [.8803.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F866 ; [.87FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866
2F986 ; [.A15F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986
2F869 ; [.8EE4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869
FA81 ; [.A8D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81
2F86A ; [.AE41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A
2F86B ; [.AE41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B
FA04 ; [.8179.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04
2F86E ; [.A16E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E
F95F ; [.8D6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F
F9AA ; [.8D6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA
2F86F ; [.8D6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F
F9BC ; [.8EE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC
2F875 ; [.803A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875
F9BD ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.8811.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877
F94B ; [.8D78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B
FA3B ; [.8EE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B
F9DF ; [.8EEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF
FA3C ; [.952C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C
2F878 ; [.952C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878
2F87A ; [.961C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A
F9D5 ; [.881D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5
2F87C ; [.9ECC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C
F921 ; [.89E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921
2F87F ; [.9ECD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F
2F880 ; [.A424.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880
2F9F4 ; [.A8E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4
F9AB ; [.9180.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB
2F881 ; [.82D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F882 ; [.8821.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882
2F884 ; [.89EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F885 ; [.9A3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885
2F886 ; [.89EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886
2F887 ; [.A67A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887
F98E ; [.8181.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E
FA01 ; [.84C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88B ; [.9885.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B
2F88C ; [.9C88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C
2F88D ; [.8828.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.8BB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.89F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.89F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA82 ; [.A432.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82
FA0B ; [.8D80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B
FA83 ; [.A431.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83
F982 ; [.9332.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982
2F890 ; [.8044.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890
F943 ; [.8249.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943
2F894 ; [.9729.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894
2F895 ; [.9729.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895
2F899 ; [.824C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.882F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84
2F89A ; [.8830.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A
F9D8 ; [.84D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8
F966 ; [.89F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966
FA85 ; [.A189.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F89D ; [.8252.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.8251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.8378.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3
F960 ; [.84D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.9746.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC
2F8A0 ; [.9A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
FA3D ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
2F8A5 ; [.884C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
FA86 ; [.8846.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86
F9B9 ; [.89FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9
FA88 ; [.8BC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88
F9D9 ; [.8BC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9
2F8A6 ; [.8BBF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.8BC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.8BC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA87 ; [.8BC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87
2F8A8 ; [.8BC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
FA3E ; [.8A07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E
2F8AA ; [.A445.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
FA3F ; [.8F07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.8F07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.8F07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
F98F ; [.8F05.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F
2F8AD ; [.8F0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
2F8AE ; [.A68D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
2F8AC ; [.9064.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
2F8AF ; [.AB1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
FA40 ; [.9333.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40
FA8B ; [.9333.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B
2F8B0 ; [.9333.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
F90D ; [.9335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D
2F8B1 ; [.9335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
F990 ; [.94AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990
2F8B2 ; [.8189.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
2F8B3 ; [.884E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
F9D2 ; [.8F0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.918C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F8B5 ; [.83A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.838C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925
F95B ; [.98A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B
FA02 ; [.8395.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.8396.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
2F8BA ; [.84E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
F973 ; [.84F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973
2F8B9 ; [.8687.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.8686.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
2F8BB ; [.886B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
F9A4 ; [.8869.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4
2F8BC ; [.885D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
F975 ; [.8850.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.885B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.9F18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D
2F8C0 ; [.A19C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0
2F8BD ; [.9A60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD
FA8E ; [.8BDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E
2F8BF ; [.A1AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
FA8F ; [.8A23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F
2F8C3 ; [.8F0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
2F8C6 ; [.A469.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6
F991 ; [.8F1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991
2F8C5 ; [.9F0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
F930 ; [.9074.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930
FA41 ; [.8873.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.8873.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.886E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90
2F8C9 ; [.8BE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F969 ; [.8F25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969
F9BE ; [.868F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE
F983 ; [.8691.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983
FA42 ; [.84FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42
F9E0 ; [.83AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0
2F8CD ; [.8693.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
FA12 ; [.8A2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.8A2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91
F9C5 ; [.8BE7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5
FA43 ; [.8A32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.8A32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
FA06 ; [.8F28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06
F98B ; [.907D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B
F901 ; [.8271.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8CC ; [.869A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
2F8D4 ; [.89A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
F929 ; [.869D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.869D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.869D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.8886.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.8886.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
2F8DA ; [.A2D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA
F9E1 ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.827D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.8278.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.8279.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
F9C8 ; [.976E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8
2F8E0 ; [.9769.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
F9F4 ; [.83C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9
2F8DF ; [.98ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF
F9DA ; [.86A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA
2F8E5 ; [.9A80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5
F97A ; [.8887.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.8896.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.8896.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
F9E2 ; [.8899.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2
2F8E6 ; [.9F53.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6
2F8E8 ; [.A1D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
2F8E9 ; [.8DB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9
F914 ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914
F95C ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C
F9BF ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF
F94C ; [.8F32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C
2F8EB ; [.AB36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB
F931 ; [.933E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931
2F8ED ; [.91A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
F91D ; [.942D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D
2F8EF ; [.8199.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
2F8F1 ; [.A93D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
2F8F3 ; [.8C01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
F98C ; [.9093.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C
FA95 ; [.8096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95
2F8F4 ; [.A49C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4
F9A5 ; [.91A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5
F970 ; [.889E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970
FA96 ; [.889E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96
2F8F5 ; [.889E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
2F8FA ; [.81A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
2F8FE ; [.9667.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE
F972 ; [.8285.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.83EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.83DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968
2F8FD ; [.979E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD
F9E3 ; [.83DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3
2F8FF ; [.9ACA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF
F915 ; [.8534.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.852E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F907 ; [.98FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907
2F900 ; [.8532.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.852A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.852A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.852A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.86CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.86BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.86C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.86D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.88AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5
F94D ; [.88BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D
F9D6 ; [.88BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6
2F90E ; [.88B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.88B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.8A5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.8A6A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909
F9CB ; [.8C16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.8C12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC
2F90C ; [.8C0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C
FA99 ; [.8A75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.8A75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.8C14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904
F94E ; [.8DC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E
FA47 ; [.8DC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47
FA9A ; [.8DC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A
F992 ; [.8DCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992
2F90F ; [.8F48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F912 ; [.A6E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912
F922 ; [.91B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922
F984 ; [.929E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984
2F915 ; [.933F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915
2F913 ; [.AFA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913
2F917 ; [.B08F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917
2F835 ; [.81A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835
2F918 ; [.829E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918
F9FB ; [.83FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.8543.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A
F99F ; [.86D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.86D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916
F993 ; [.8C20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993
FA48 ; [.8A84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.8A84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C
2F91E ; [.A719.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E
F9C0 ; [.90AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0
F9EE ; [.90A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE
F932 ; [.93D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932
F91E ; [.9431.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E
2F920 ; [.951C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920
FA9E ; [.91C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.91C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921
F946 ; [.82A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946
2F924 ; [.8A88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924
2F925 ; [.A4DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925
FA9F ; [.810B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F9FA ; [.8401.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA
F92B ; [.86DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B
F9A7 ; [.92A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7
2F928 ; [.934B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928
F961 ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F929 ; [.80A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929
2F92B ; [.840A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B
F9AD ; [.8551.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.86E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.88D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.86E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.8A90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92F ; [.8C3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F
F9AE ; [.8F5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE
FAA1 ; [.A4E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1
2F930 ; [.A4E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930
2F931 ; [.A72F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931
F994 ; [.A72A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994
F9EF ; [.90B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF
2F932 ; [.934D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932
2F936 ; [.97C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936
F9CD ; [.86EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.88E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976
F962 ; [.88E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962
2F938 ; [.88E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938
F9E5 ; [.8A9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5
2F93A ; [.A26E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A
FAA4 ; [.A739.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4
FAA5 ; [.8F63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5
F9C1 ; [.91CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1
F90E ; [.9435.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E
FA17 ; [.86F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.86F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7 ; [.88EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7
F933 ; [.90BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933
FAA8 ; [.8412.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.8412.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.8568.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F946 ; [.86FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946
2F947 ; [.86FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947
FAA9 ; [.9FEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9
2F948 ; [.9FEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948
2F94A ; [.8F6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A
FA9D ; [.91D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D
2F94E ; [.88F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E
F9CE ; [.88F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.8C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.8C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.8C5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.8F73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947
FAAB ; [.A74A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB
2F950 ; [.A74A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950
F964 ; [.AB7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964
F985 ; [.93DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985
FA4C ; [.8415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C
FA4E ; [.8577.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.8576.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA4F ; [.870D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F
FA50 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.8712.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51
FA19 ; [.8711.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.88F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A
F93C ; [.8C60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C
FA52 ; [.8DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52
FA53 ; [.8DFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53
FA1B ; [.8DFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.8DFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956
F9B6 ; [.92B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6
2F957 ; [.9B31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957
F956 ; [.8C64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956
FA54 ; [.8F7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54
2F959 ; [.8F7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959
2F95A ; [.A517.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A
FA55 ; [.857F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55
FAAC ; [.A9B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC
F9F7 ; [.8123.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7
2F95F ; [.A51F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F
F9F8 ; [.88FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8
FA56 ; [.8C6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56
FAAD ; [.8C6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD
2F962 ; [.8F84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962
2F963 ; [.90CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963
F9A6 ; [.9358.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6
F944 ; [.9486.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944
F9F9 ; [.8906.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.8E10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D
2F966 ; [.A9C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966
FA03 ; [.90D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03
F97B ; [.92C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B
2F968 ; [.ABA1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968
2F96A ; [.8585.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A
F9CF ; [.8729.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF
F96A ; [.8727.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.8913.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F
FAAF ; [.8C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF
2F96C ; [.A019.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C
F93D ; [.8E16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D
F957 ; [.8E15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957
2F96E ; [.8E22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E
F996 ; [.8F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996
FA57 ; [.8F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57
FAB0 ; [.8F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0
FA58 ; [.90DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58
F950 ; [.91EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950
FA59 ; [.91F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59
2F970 ; [.91F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970
FAB1 ; [.A028.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1
FA5A ; [.8C7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.90DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6
2F976 ; [.A9DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976
F90F ; [.9363.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F
2F978 ; [.9DAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978
F9AF ; [.8919.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.81B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E
F934 ; [.81B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934
FA5B ; [.8421.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.8421.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.8421.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A
F9B0 ; [.891F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0
F997 ; [.9202.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997
2F97F ; [.9201.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F
F945 ; [.9488.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945
F953 ; [.81B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.97E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.82B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F985 ; [.8ADE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985
F926 ; [.9368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926
F9F6 ; [.920D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6
FA5C ; [.874A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F893 ; [.9B73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.9B73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B
2F98C ; [.A042.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C
F97C ; [.82BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C
2F990 ; [.82BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F98F ; [.9698.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F
2F991 ; [.8430.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.8436.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.842F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.8433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.85A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.85A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.85A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996
F9FE ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.8754.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F9A0 ; [.9B92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0
2F99D ; [.8932.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D
F93E ; [.A062.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E
2F9A1 ; [.8AF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.8AF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
2F99E ; [.A04E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E
FAB4 ; [.8AEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4
F958 ; [.8AED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.8C93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918
F96E ; [.8C98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E
FA5F ; [.8AEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.8AEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F999 ; [.8FA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999
2F9A8 ; [.A2E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
2F9A9 ; [.A7A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9
F9C2 ; [.A7AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2
2F9AA ; [.A7AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA
2F9AC ; [.A9FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
F923 ; [.92D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923
F9F0 ; [.93F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0
F935 ; [.93F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935
F91F ; [.943C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F
F910 ; [.94BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910
2F9B3 ; [.85B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
F936 ; [.8CA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936
2F9B4 ; [.8CA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
2F9B5 ; [.921B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
2F9B6 ; [.AD63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6
2F9B7 ; [.876A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
2F9BA ; [.A07B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA
2F9B9 ; [.A327.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9
2F9BC ; [.A587.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
2F9BD ; [.A588.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD
FAB5 ; [.AA1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5
2F9BB ; [.AA1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB
F911 ; [.9223.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911
2F9C0 ; [.A7C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0
2F9C1 ; [.AD77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1
F927 ; [.9441.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927
FA08 ; [.81C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F9C4 ; [.81C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
F9A0 ; [.8B09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0
2F9C6 ; [.A08D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6
2F9C7 ; [.A331.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7
F9E8 ; [.8CB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8
F912 ; [.8E56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912
2F9C9 ; [.A5A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9
FA60 ; [.8FC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.AC06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6
F924 ; [.93F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924
FAB7 ; [.92DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7
FA0A ; [.82BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A
FA61 ; [.8B0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61
FAB8 ; [.8B0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8
2F9CF ; [.8CC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
F96F ; [.8E63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F
F9A1 ; [.8E63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1
FAB9 ; [.8FD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9
FABB ; [.8FCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB
F97D ; [.8FC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D
F941 ; [.8FD3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941
FABE ; [.910F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE
2F9D0 ; [.910F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
FA22 ; [.8FCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22
FABA ; [.8FCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA
F95D ; [.910B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D
FABD ; [.910B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD
FA62 ; [.910C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62
FABC ; [.910C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC
FA63 ; [.92E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63
FABF ; [.92E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF
F9FC ; [.937B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC
F95A ; [.948E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A
FAC0 ; [.94C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0
2F9D1 ; [.94C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
F900 ; [.877F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900
2F9D2 ; [.82C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F9D4 ; [.8961.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
2F9D5 ; [.8B21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
F948 ; [.8CDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948
F903 ; [.8CD6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903
FA64 ; [.8E6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64
FA65 ; [.9382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65
FAC1 ; [.9382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1
2F9D6 ; [.94E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
2F9D7 ; [.8784.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9DB ; [.9E2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
2F9DA ; [.8B2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.8CDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937
2F9DC ; [.A362.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC
F902 ; [.82C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902
2F9DE ; [.8787.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE
F998 ; [.8FF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998
F9D7 ; [.8FF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7
FAC2 ; [.911F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2
2F9DF ; [.911F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
FA07 ; [.911D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07
F98D ; [.B17B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D
F971 ; [.82CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971
F99A ; [.896F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A
FA25 ; [.8B3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.8B3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67
FAC3 ; [.9126.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3
F9C3 ; [.9127.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3
F913 ; [.94C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913
2F9E2 ; [.95D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2
F92C ; [.85D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C
2F9E3 ; [.99C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3
FA26 ; [.897D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26
2F9E4 ; [.A380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4
2F9E6 ; [.A5E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6
F919 ; [.8CFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919
FAC4 ; [.AC37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4
F9B7 ; [.9406.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7
F9E9 ; [.82D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9
F97E ; [.8B44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.844C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A
F9B1 ; [.8D0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1
2F9E7 ; [.8D03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
FAC5 ; [.A5E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5
2F9EA ; [.8E92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
2F9E8 ; [.A850.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
2F9E9 ; [.A84E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9
F93F ; [.9133.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F
F99B ; [.9255.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B
2F9EB ; [.AF08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB
2F9EC ; [.B00B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC
2F9EE ; [.8B50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
F986 ; [.9016.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986
2F9F0 ; [.AC62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0
F9C6 ; [.82DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.85DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.85DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.8988.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959
F9D3 ; [.898A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3
FAC6 ; [.9E5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6
F9DC ; [.8B5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9B8 ; [.9265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8
2F9F3 ; [.A10C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3
F9EA ; [.9304.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA
FA68 ; [.93A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68
FAC7 ; [.93A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7
F9B2 ; [.8D1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.8D1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949
2F9F5 ; [.ADDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
F938 ; [.9459.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938
F9B3 ; [.94E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3
FA1C ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8
FA69 ; [.945A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69
FACA ; [.945A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA
F9B4 ; [.8EA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4
2FA00 ; [.A87A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00
FA6A ; [.914C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A
FACC ; [.914C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC
F9D0 ; [.93A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0
2FA02 ; [.87AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02
FA2A ; [.8B6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A
FA2B ; [.8D27.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B
FA2C ; [.9152.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C
2FA04 ; [.AAB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04
2FA05 ; [.AF33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05
2FA06 ; [.A624.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06
F91A ; [.9159.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A
2FA07 ; [.AC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07
F987 ; [.951D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987
FACD ; [.B044.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD
2FA0A ; [.B044.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
F939 ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939
2FA0B ; [.B04C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B
F9F2 ; [.94D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2
2FA0C ; [.A8A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C
2FA0F ; [.ACA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F
FA2D ; [.9468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D
F93A ; [.94F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A
F920 ; [.9520.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920
F940 ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940
F988 ; [.93BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988
F9F3 ; [.94D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FA15 ; [.899C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15
F989 ; [.903D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989
2FA17 ; [.A116.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17
2FA1A ; [.A8B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A
2FA1B ; [.AE29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B
2FA1C ; [.8EB5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
FAD8 ; [.B230.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8
F9C4 ; [.9168.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4
F907 ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907
F908 ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908
FACE ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE
ENTRY
};
Unicode/Collate/Locale/th.pl 0000644 00000002240 15033552504 0011664 0 ustar 00 +{
locale_version => 1.25,
variable => 'shifted',
alternate => 'shifted',
entry => <<'ENTRY', # for DUCET v9.0.0
0E2F ; [*03EF.0020.0002][*FFF0.0000.0000] # THAI CHARACTER PAIYANNOI
0E5A ; [*03EF.0020.0002][*FFF1.0000.0000] # THAI CHARACTER ANGKHANKHU
0E46 ; [*03F0.0020.0002][*FFF1.0000.0000] # THAI CHARACTER MAIYAMOK
0E5B ; [*03F0.0020.0002][*FFF0.0000.0000] # THAI CHARACTER KHOMUT
0E4C ; [.0000.00D2.0002] # THAI CHARACTER THANTHAKHAT
0E47 ; [.0000.00D3.0002] # THAI CHARACTER MAITAIKHU
0E48 ; [.0000.00D4.0002] # THAI CHARACTER MAI EK
0E49 ; [.0000.00D5.0002] # THAI CHARACTER MAI THO
0E4A ; [.0000.00D6.0002] # THAI CHARACTER MAI TRI
0E4B ; [.0000.00D7.0002] # THAI CHARACTER MAI CHATTAWA
0E4D ; [.2DA1.0020.0002] # THAI CHARACTER NIKHAHIT
0E45 ; [.2DA4.0020.0003] # THAI CHARACTER LAKKHANGYAO
0E4D 0E32 ; [.2DA4.0020.0002][.2DA1.0020.0003] # THAI CHARACTER SARA AM
0E33 ; [.2DA4.0020.0002][.2DA1.0020.0004] # THAI CHARACTER SARA AM
0E45 0E4D ; [.2DA1.0020.0002][.2DA4.0020.0004] # <THAI CHARACTER LAKKHANGYAO, THAI CHARACTER NIKHAHIT>
0E3A ; [.2DB2.0020.0002] # THAI CHARACTER PHINTHU
ENTRY
};
Unicode/Collate/Locale/ca.pl 0000644 00000002467 15033552504 0011647 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
0063 0048 ; [.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H>
0043 0068 ; [.1C7B.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
0043 0048 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H>
006C 006C ; [.1D78.0020.0002][.0000.0000.0001] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L>
006C 00B7 006C ; [.1D78.0020.0002][.0000.0000.0007] # <LATIN SMALL LETTER L, MIDDLE DOT, LATIN SMALL LETTER L>
006C 004C ; [.1D78.0020.0007][.0000.0000.0002][.0000.0000.0001] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L>
006C 00B7 004C ; [.1D78.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN SMALL LETTER L, MIDDLE DOT, LATIN CAPITAL LETTER L>
004C 006C ; [.1D78.0020.0007][.0000.0000.0008][.0000.0000.0001] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L>
004C 00B7 006C ; [.1D78.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER L, MIDDLE DOT, LATIN SMALL LETTER L>
004C 004C ; [.1D78.0020.0008][.0000.0000.0001] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L>
004C 00B7 004C ; [.1D78.0020.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER L, MIDDLE DOT, LATIN CAPITAL LETTER L>
ENTRY
};
Unicode/Collate/Locale/bn.pl 0000644 00000000553 15033552504 0011655 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0982 ; [.26CD.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA
0983 ; [.26CD.0020.0002][.FFF2.0000.0000] # BENGALI SIGN VISARGA
0981 ; [.26CD.0020.0002][.FFF3.0000.0000] # BENGALI SIGN CANDRABINDU
0994 ; [.26CD.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU
ENTRY
};
Unicode/Collate/Locale/pl.pl 0000644 00000006033 15033552504 0011670 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0105 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH OGONEK
0061 0328 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH OGONEK
0104 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK
0041 0328 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK
0107 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0063 0301 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0063 0341 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH ACUTE
0106 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0043 0301 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0043 0341 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE
0119 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0142 ; [.1D78.0020.0002] # LATIN SMALL LETTER L WITH STROKE
006C 0335 ; [.1D78.0020.0002] # LATIN SMALL LETTER L WITH STROKE
0141 ; [.1D78.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE
004C 0335 ; [.1D78.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE
0144 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE
00F3 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE
015B ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH ACUTE
0073 0301 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH ACUTE
0073 0341 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH ACUTE
015A ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE
0053 0301 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE
0053 0341 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE
017A ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE
007A 0301 ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE
007A 0341 ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE
0179 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE
005A 0301 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE
005A 0341 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE
017C ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE
007A 0307 ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE
017B ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE
005A 0307 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE
ENTRY
};
Unicode/Collate/Locale/zh_strk.pl 0000644 00000320164 15033552504 0012745 0 ustar 00 use Unicode::Collate::CJK::Stroke;
+{
locale_version => 1.25,
overrideCJK => \&Unicode::Collate::CJK::Stroke::weightStroke,
entry => <<'ENTRY', # for DUCET v9.0.0
0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON
00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE
01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON
01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON
00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE
0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON
00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE
011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON
00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE
00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE
00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON
00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE
01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON
01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON
00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE
00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE
006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON>
004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON>
1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE
1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE
006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON>
004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON>
006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT>
006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK>
004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT>
004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK>
006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON>
004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON>
0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE
0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON
0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON
01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE
01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE
014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON
00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE
01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON
01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON
00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE
00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE
016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON
00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE
01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON
01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON
00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE
00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE
01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON>
00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON>
01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON>
00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON>
01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS
00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS
FDD0 2801 ; [.8000.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1>
2E84 ; [.8007.0020.0002] # CJK RADICAL SECOND THREE
3006 ; [.8012.0020.0002] # IDEOGRAPHIC CLOSING MARK
3007 ; [.8013.0020.0002] # IDEOGRAPHIC NUMBER ZERO
3021 ; [.8014.0020.0002] # HANGZHOU NUMERAL ONE
3025 ; [.8015.0020.0002] # HANGZHOU NUMERAL FIVE
303B ; [.8016.0020.0002] # VERTICAL IDEOGRAPHIC ITERATION MARK
FDD0 2802 ; [.8017.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-2>
2E86 ; [.8031.0020.0002] # CJK RADICAL BOX
2E87 ; [.8035.0020.0002] # CJK RADICAL TABLE
2E88 ; [.8038.0020.0002] # CJK RADICAL KNIFE ONE
2E8A ; [.8042.0020.0002] # CJK RADICAL DIVINATION
2E80 ; [.8047.0020.0002] # CJK RADICAL REPEAT
2ECF ; [.804B.0020.0002] # CJK RADICAL CITY
2ED6 ; [.804C.0020.0002] # CJK RADICAL MOUND TWO
3022 ; [.804E.0020.0002] # HANGZHOU NUMERAL TWO
3024 ; [.804F.0020.0002] # HANGZHOU NUMERAL FOUR
3026 ; [.8050.0020.0002] # HANGZHOU NUMERAL SIX
FDD0 2803 ; [.8051.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-12>
2E8C ; [.808F.0020.0002] # CJK RADICAL SMALL ONE
2E8D ; [.8090.0020.0002] # CJK RADICAL SMALL TWO
2E95 ; [.80A8.0020.0002] # CJK RADICAL SNOUT TWO
2EBE ; [.80B3.0020.0002] # CJK RADICAL GRASS ONE
2ECC ; [.80B5.0020.0002] # CJK RADICAL SIMPLIFIED WALK
3005 ; [.80BB.0020.0002] # IDEOGRAPHIC ITERATION MARK
3023 ; [.80BC.0020.0002] # HANGZHOU NUMERAL THREE
3027 ; [.80BD.0020.0002] # HANGZHOU NUMERAL SEVEN
FDD0 2804 ; [.80BE.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-3>
2E9C ; [.815B.0020.0002] # CJK RADICAL SUN
2E9D ; [.815E.0020.0002] # CJK RADICAL MOON
2EA5 ; [.8170.0020.0002] # CJK RADICAL PAW TWO
2EA7 ; [.817A.0020.0002] # CJK RADICAL COW
2EBC ; [.8185.0020.0002] # CJK RADICAL MEAT
2ECD ; [.818E.0020.0002] # CJK RADICAL WALK ONE
3028 ; [.8193.0020.0002] # HANGZHOU NUMERAL EIGHT
3029 ; [.8194.0020.0002] # HANGZHOU NUMERAL NINE
FDD0 2805 ; [.8195.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-13>
2EAA ; [.82B3.0020.0002] # CJK RADICAL BOLT OF CLOTH
2EAC ; [.82BF.0020.0002] # CJK RADICAL SPIRIT ONE
FDD0 2806 ; [.82E7.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-23>
2EAE ; [.84B2.0020.0002] # CJK RADICAL BAMBOO
2EB6 ; [.84C6.0020.0002] # CJK RADICAL SHEEP
FDD0 2807 ; [.8529.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-123>
2EC6 ; [.887A.0020.0002] # CJK RADICAL SIMPLIFIED HORN
2ECA ; [.889A.0020.0002] # CJK RADICAL FOOT
FDD0 2808 ; [.88FA.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-4>
FA24 ; [.8E20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA24
2ED7 ; [.8E5B.0020.0002] # CJK RADICAL RAIN
FDD0 2809 ; [.8E7C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-14>
2EDE ; [.94AC.0020.0002] # CJK RADICAL EAT TWO
2EE3 ; [.94C3.0020.0002] # CJK RADICAL BONE
FDD0 280A ; [.94CA.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-24>
FA0F ; [.95F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0F
FDD0 280B ; [.9C16.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-124>
FA21 ; [.A279.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA21
FA23 ; [.A312.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA23
FDD0 280C ; [.A41D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-34>
FA11 ; [.A5A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA11
FDD0 280D ; [.AC7F.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-134>
FA0E ; [.ACD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0E
FA13 ; [.AEF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA13
FA29 ; [.B3B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA29
FDD0 280E ; [.B44A.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-234>
FA14 ; [.B690.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA14
FDD0 280F ; [.BB5A.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1234>
FA27 ; [.C173.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA27
FDD0 2810 ; [.C276.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-5>
FA28 ; [.C748.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA28
FDD0 2811 ; [.C860.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-15>
FDD0 2812 ; [.CD3D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-25>
FDD0 2813 ; [.D0E6.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-125>
FA1F ; [.D23D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1F
FDD0 2814 ; [.D41B.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-35>
FDD0 2815 ; [.D68C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-135>
FDD0 2816 ; [.D846.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-235>
FDD0 2817 ; [.D993.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1235>
FDD0 2818 ; [.DA95.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-45>
FDD0 2819 ; [.DB3D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-145>
FDD0 281A ; [.DBB4.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-245>
FDD0 281B ; [.DBF1.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1245>
FDD0 281C ; [.DC29.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-345>
FDD0 281D ; [.DC4D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1345>
FDD0 281E ; [.DC5C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-2345>
FDD0 281F ; [.DC6C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-12345>
FDD0 2820 ; [.DC71.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-6>
FDD0 2821 ; [.DC76.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-16>
FDD0 2823 ; [.DC7C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-126>
FDD0 2824 ; [.DC7E.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-36>
FDD0 2827 ; [.DC80.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1236>
FDD0 2830 ; [.DC82.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-56>
3220 ; [*0317.0020.0004][.8001.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE
3226 ; [*0317.0020.0004][.801A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN
3222 ; [*0317.0020.0004][.8054.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE
3228 ; [*0317.0020.0004][.8027.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE
3221 ; [*0317.0020.0004][.802A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO
3224 ; [*0317.0020.0004][.80D7.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE
3239 ; [*0317.0020.0004][.81C2.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT
323D ; [*0317.0020.0004][.831C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE
3241 ; [*0317.0020.0004][.832C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST
3227 ; [*0317.0020.0004][.8030.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT
3225 ; [*0317.0020.0004][.80F5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX
3238 ; [*0317.0020.0004][.85A8.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR
3229 ; [*0317.0020.0004][.8041.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN
323F ; [*0317.0020.0004][.899D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE
3234 ; [*0317.0020.0004][.839D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME
323A ; [*0317.0020.0004][.89D5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL
3223 ; [*0317.0020.0004][.822D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR
322F ; [*0317.0020.0004][.8081.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH
323B ; [*0317.0020.0004][.8A8D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY
3230 ; [*0317.0020.0004][.815C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN
322A ; [*0317.0020.0004][.815F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON
3232 ; [*0317.0020.0004][.845A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE
322D ; [*0317.0020.0004][.8160.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD
3231 ; [*0317.0020.0004][.979F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK
322C ; [*0317.0020.0004][.816D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER
322B ; [*0317.0020.0004][.816E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE
3235 ; [*0317.0020.0004][.9895.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL
323C ; [*0317.0020.0004][.B79A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE
3233 ; [*0317.0020.0004][.8D2E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY
3237 ; [*0317.0020.0004][.9970.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION
3240 ; [*0317.0020.0004][.A100.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL
3242 ; [*0317.0020.0004][.84D8.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF
3243 ; [*0317.0020.0004][.84D9.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH
3236 ; [*0317.0020.0004][.9B3B.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL
323E ; [*0317.0020.0004][.B2A5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE
322E ; [*0317.0020.0004][.8E33.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL
3358 ; [.1C3D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
336A ; [.1C3E.0020.0004][.1C45.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
336B ; [.1C3E.0020.0004][.1C46.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
33E0 ; [.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
32C0 ; [.1C3E.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
3359 ; [.1C3E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
336F ; [.1C3F.0020.0004][.1C40.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
33E1 ; [.1C3F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
32C1 ; [.1C3F.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
335A ; [.1C3F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
33E2 ; [.1C40.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
32C2 ; [.1C40.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
335B ; [.1C40.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
33E3 ; [.1C41.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
32C3 ; [.1C41.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
335C ; [.1C41.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
33E4 ; [.1C42.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
32C4 ; [.1C42.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
335D ; [.1C42.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
33E5 ; [.1C43.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
32C5 ; [.1C43.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
335E ; [.1C43.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
33E6 ; [.1C44.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
32C6 ; [.1C44.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
335F ; [.1C44.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
33E7 ; [.1C45.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
32C7 ; [.1C45.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
3360 ; [.1C45.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
33E8 ; [.1C46.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
32C8 ; [.1C46.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
3361 ; [.1C46.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
1F241 ; [*0379.0020.0004][.8054.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
1F242 ; [*0379.0020.0004][.802A.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
1F247 ; [*0379.0020.0004][.A465.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
1F243 ; [*0379.0020.0004][.83F0.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
1F245 ; [*0379.0020.0004][.8277.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
1F248 ; [*0379.0020.0004][.9EDA.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F240 ; [*0379.0020.0004][.8283.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
1F244 ; [*0379.0020.0004][.9216.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
1F246 ; [*0379.0020.0004][.A0BD.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
2F00 ; [.8001.0020.0004] # KANGXI RADICAL ONE
3192 ; [.8001.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK
3280 ; [.8001.0020.0006] # CIRCLED IDEOGRAPH ONE
1F229 ; [.8001.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E00
319C ; [.8018.0020.0014] # IDEOGRAPHIC ANNOTATION FOURTH MARK
3286 ; [.801A.0020.0006] # CIRCLED IDEOGRAPH SEVEN
3194 ; [.8054.0020.0014] # IDEOGRAPHIC ANNOTATION THREE MARK
3282 ; [.8054.0020.0006] # CIRCLED IDEOGRAPH THREE
1F22A ; [.8054.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E09
3196 ; [.8055.0020.0014] # IDEOGRAPHIC ANNOTATION TOP MARK
32A4 ; [.8055.0020.0006] # CIRCLED IDEOGRAPH HIGH
3198 ; [.8056.0020.0014] # IDEOGRAPHIC ANNOTATION BOTTOM MARK
32A6 ; [.8056.0020.0006] # CIRCLED IDEOGRAPH LOW
319B ; [.819C.0020.0014] # IDEOGRAPHIC ANNOTATION THIRD MARK
2F01 ; [.8002.0020.0004] # KANGXI RADICAL LINE
3197 ; [.80C6.0020.0014] # IDEOGRAPHIC ANNOTATION MIDDLE MARK
32A5 ; [.80C6.0020.0006] # CIRCLED IDEOGRAPH CENTRE
1F22D ; [.80C6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D
2F02 ; [.8003.0020.0004] # KANGXI RADICAL DOT
2F03 ; [.8004.0020.0004] # KANGXI RADICAL SLASH
2F04 ; [.8008.0020.0004] # KANGXI RADICAL SECOND
319A ; [.8008.0020.0014] # IDEOGRAPHIC ANNOTATION SECOND MARK
3288 ; [.8027.0020.0006] # CIRCLED IDEOGRAPH NINE
2F05 ; [.8010.0020.0004] # KANGXI RADICAL HOOK
2F06 ; [.802A.0020.0004] # KANGXI RADICAL TWO
3193 ; [.802A.0020.0014] # IDEOGRAPHIC ANNOTATION TWO MARK
3281 ; [.802A.0020.0006] # CIRCLED IDEOGRAPH TWO
1F214 ; [.802A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C
3284 ; [.80D7.0020.0006] # CIRCLED IDEOGRAPH FIVE
2F07 ; [.802B.0020.0004] # KANGXI RADICAL LID
1F218 ; [.8300.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4
2F08 ; [.802C.0020.0004] # KANGXI RADICAL MAN
319F ; [.802C.0020.0014] # IDEOGRAPHIC ANNOTATION MAN MARK
32AD ; [.831C.0020.0006] # CIRCLED IDEOGRAPH ENTERPRISE
32A1 ; [.832C.0020.0006] # CIRCLED IDEOGRAPH REST
329D ; [.C86C.0020.0006] # CIRCLED IDEOGRAPH EXCELLENT
2F09 ; [.802E.0020.0004] # KANGXI RADICAL LEGS
2F0A ; [.802F.0020.0004] # KANGXI RADICAL ENTER
2F0B ; [.8030.0020.0004] # KANGXI RADICAL EIGHT
3287 ; [.8030.0020.0006] # CIRCLED IDEOGRAPH EIGHT
3285 ; [.80F5.0020.0006] # CIRCLED IDEOGRAPH SIX
2F0C ; [.8032.0020.0004] # KANGXI RADICAL DOWN BOX
1F21E ; [.8356.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-518D
2F0D ; [.8033.0020.0004] # KANGXI RADICAL COVER
32A2 ; [.81D8.0020.0006] # CIRCLED IDEOGRAPH COPY
2F0E ; [.8034.0020.0004] # KANGXI RADICAL ICE
2F0F ; [.8036.0020.0004] # KANGXI RADICAL TABLE
2F10 ; [.8037.0020.0004] # KANGXI RADICAL OPEN BOX
2F11 ; [.8039.0020.0004] # KANGXI RADICAL KNIFE
1F220 ; [.858C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-521D
1F21C ; [.8EE7.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-524D
1F239 ; [.A45F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5272
2F12 ; [.803C.0020.0004] # KANGXI RADICAL POWER
3298 ; [.85A8.0020.0006] # CIRCLED IDEOGRAPH LABOR
2F13 ; [.803D.0020.0004] # KANGXI RADICAL WRAP
2F14 ; [.803E.0020.0004] # KANGXI RADICAL SPOON
2F15 ; [.803F.0020.0004] # KANGXI RADICAL RIGHT OPEN BOX
2F16 ; [.8040.0020.0004] # KANGXI RADICAL HIDING ENCLOSURE
32A9 ; [.85B0.0020.0006] # CIRCLED IDEOGRAPH MEDICINE
2F17 ; [.8041.0020.0004] # KANGXI RADICAL TEN
3038 ; [.8041.0020.0004] # HANGZHOU NUMERAL TEN
3289 ; [.8041.0020.0006] # CIRCLED IDEOGRAPH TEN
3039 ; [.8059.0020.0004] # HANGZHOU NUMERAL TWENTY
303A ; [.8118.0020.0004] # HANGZHOU NUMERAL THIRTY
32AF ; [.899D.0020.0006] # CIRCLED IDEOGRAPH ALLIANCE
2F18 ; [.8043.0020.0004] # KANGXI RADICAL DIVINATION
2F19 ; [.8044.0020.0004] # KANGXI RADICAL SEAL
329E ; [.8384.0020.0006] # CIRCLED IDEOGRAPH PRINT
2F1A ; [.8045.0020.0004] # KANGXI RADICAL CLIFF
2F1B ; [.8046.0020.0004] # KANGXI RADICAL PRIVATE
2F1C ; [.8048.0020.0004] # KANGXI RADICAL AGAIN
1F212 ; [.8128.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53CC
2F1D ; [.807F.0020.0004] # KANGXI RADICAL MOUTH
1F251 ; [.8218.0020.0006] # CIRCLED IDEOGRAPH ACCEPT
32A8 ; [.821C.0020.0006] # CIRCLED IDEOGRAPH RIGHT
1F22E ; [.821C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53F3
1F234 ; [.8398.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5408
3294 ; [.839D.0020.0006] # CIRCLED IDEOGRAPH NAME
1F225 ; [.85E1.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5439
3244 ; [.9CC0.0020.0006] # CIRCLED IDEOGRAPH QUESTION
1F23A ; [.9CFD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-55B6
2F1E ; [.8080.0020.0004] # KANGXI RADICAL ENCLOSURE
3195 ; [.822D.0020.0014] # IDEOGRAPHIC ANNOTATION FOUR MARK
3283 ; [.822D.0020.0006] # CIRCLED IDEOGRAPH FOUR
2F1F ; [.8081.0020.0004] # KANGXI RADICAL EARTH
328F ; [.8081.0020.0006] # CIRCLED IDEOGRAPH EARTH
319E ; [.83B9.0020.0014] # IDEOGRAPHIC ANNOTATION EARTH MARK
2F20 ; [.8082.0020.0004] # KANGXI RADICAL SCHOLAR
1F224 ; [.8649.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-58F0
2F21 ; [.8083.0020.0004] # KANGXI RADICAL GO
2F22 ; [.8084.0020.0004] # KANGXI RADICAL GO SLOWLY
2F23 ; [.8085.0020.0004] # KANGXI RADICAL EVENING
1F215 ; [.83C8.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-591A
32B0 ; [.8A3E.0020.0006] # CIRCLED IDEOGRAPH NIGHT
2F24 ; [.8086.0020.0004] # KANGXI RADICAL BIG
337D ; [.8086.0020.001C][.8288.0020.001C] # SQUARE ERA NAME TAISYOU
319D ; [.8130.0020.0014] # IDEOGRAPHIC ANNOTATION HEAVEN MARK
1F217 ; [.8130.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5929
2F25 ; [.8088.0020.0004] # KANGXI RADICAL WOMAN
329B ; [.8088.0020.0006] # CIRCLED IDEOGRAPH FEMALE
2F26 ; [.8089.0020.0004] # KANGXI RADICAL CHILD
1F211 ; [.83E8.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5B57
32AB ; [.8A8D.0020.0006] # CIRCLED IDEOGRAPH STUDY
2F27 ; [.808D.0020.0004] # KANGXI RADICAL ROOF
32AA ; [.8A94.0020.0006] # CIRCLED IDEOGRAPH RELIGION
2F28 ; [.808E.0020.0004] # KANGXI RADICAL INCH
2F29 ; [.8091.0020.0004] # KANGXI RADICAL SMALL
2F2A ; [.8092.0020.0004] # KANGXI RADICAL LAME
2F2B ; [.8095.0020.0004] # KANGXI RADICAL CORPSE
2F2C ; [.8096.0020.0004] # KANGXI RADICAL SPROUT
2F2D ; [.8097.0020.0004] # KANGXI RADICAL MOUNTAIN
2F2E ; [.8098.0020.0004] # KANGXI RADICAL RIVER
2F2F ; [.809B.0020.0004] # KANGXI RADICAL WORK
32A7 ; [.8256.0020.0006] # CIRCLED IDEOGRAPH LEFT
1F22C ; [.8256.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6
2F30 ; [.809C.0020.0004] # KANGXI RADICAL ONESELF
2F31 ; [.809F.0020.0004] # KANGXI RADICAL TURBAN
2F32 ; [.80A0.0020.0004] # KANGXI RADICAL DRY
337B ; [.825F.0020.001C][.8435.0020.001C] # SQUARE ERA NAME HEISEI
2F33 ; [.80A2.0020.0004] # KANGXI RADICAL SHORT THREAD
3245 ; [.8260.0020.0006] # CIRCLED IDEOGRAPH KINDERGARTEN
2F34 ; [.80A3.0020.0004] # KANGXI RADICAL DOTTED CLIFF
2F35 ; [.80A4.0020.0004] # KANGXI RADICAL LONG STRIDE
2F36 ; [.80A5.0020.0004] # KANGXI RADICAL TWO HANDS
2F37 ; [.80A6.0020.0004] # KANGXI RADICAL SHOOT
2F38 ; [.80A7.0020.0004] # KANGXI RADICAL BOW
2F39 ; [.80A9.0020.0004] # KANGXI RADICAL SNOUT
2F3A ; [.80AB.0020.0004] # KANGXI RADICAL BRISTLE
2F3B ; [.80AC.0020.0004] # KANGXI RADICAL STEP
1F21D ; [.9050.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C
1F250 ; [.9E0E.0020.0006] # CIRCLED IDEOGRAPH ADVANTAGE
2F3C ; [.8149.0020.0004] # KANGXI RADICAL HEART
2F3D ; [.814B.0020.0004] # KANGXI RADICAL HALBERD
2F3E ; [.814C.0020.0004] # KANGXI RADICAL DOOR
2F3F ; [.814F.0020.0004] # KANGXI RADICAL HAND
1F210 ; [.814F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-624B
1F231 ; [.8277.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6253
1F227 ; [.873A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6295
1F22F ; [.90B6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6307
1F228 ; [.9724.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6355
2F40 ; [.8152.0020.0004] # KANGXI RADICAL BRANCH
2F41 ; [.8153.0020.0004] # KANGXI RADICAL RAP
2F42 ; [.8155.0020.0004] # KANGXI RADICAL SCRIPT
3246 ; [.8155.0020.0006] # CIRCLED IDEOGRAPH SCHOOL
2F43 ; [.8156.0020.0004] # KANGXI RADICAL DIPPER
1F21B ; [.9745.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6599
2F44 ; [.8157.0020.0004] # KANGXI RADICAL AXE
1F21F ; [.AE69.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-65B0
2F45 ; [.8158.0020.0004] # KANGXI RADICAL SQUARE
2F46 ; [.8159.0020.0004] # KANGXI RADICAL NOT
2F47 ; [.815C.0020.0004] # KANGXI RADICAL SUN
3290 ; [.815C.0020.0006] # CIRCLED IDEOGRAPH SUN
337E ; [.8BBF.0020.001C][.8C54.0020.001C] # SQUARE ERA NAME MEIZI
1F219 ; [.90F3.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6620
337C ; [.9100.0020.001C][.89E5.0020.001C] # SQUARE ERA NAME SYOUWA
2F48 ; [.815D.0020.0004] # KANGXI RADICAL SAY
2F49 ; [.815F.0020.0004] # KANGXI RADICAL MOON
328A ; [.815F.0020.0006] # CIRCLED IDEOGRAPH MOON
1F237 ; [.815F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6708
3292 ; [.845A.0020.0006] # CIRCLED IDEOGRAPH HAVE
1F236 ; [.845A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6709
2F4A ; [.8160.0020.0004] # KANGXI RADICAL TREE
328D ; [.8160.0020.0006] # CIRCLED IDEOGRAPH WOOD
3291 ; [.979F.0020.0006] # CIRCLED IDEOGRAPH STOCK
337F ; [.979F.0020.001C][.841D.0020.001C][.8335.0020.001C][.8D2E.0020.001C] # SQUARE CORPORATION
2F4B ; [.8163.0020.0004] # KANGXI RADICAL LACK
2F4C ; [.8164.0020.0004] # KANGXI RADICAL STOP
32A3 ; [.8288.0020.0006] # CIRCLED IDEOGRAPH CORRECT
2F4D ; [.8165.0020.0004] # KANGXI RADICAL DEATH
2F4E ; [.8166.0020.0004] # KANGXI RADICAL WEAPON
2F4F ; [.8167.0020.0004] # KANGXI RADICAL DO NOT
2E9F ; [.828A.0020.0004] # CJK RADICAL MOTHER
2F50 ; [.8169.0020.0004] # KANGXI RADICAL COMPARE
2F51 ; [.816A.0020.0004] # KANGXI RADICAL FUR
2F52 ; [.816B.0020.0004] # KANGXI RADICAL CLAN
2F53 ; [.816C.0020.0004] # KANGXI RADICAL STEAM
2F54 ; [.816D.0020.0004] # KANGXI RADICAL WATER
328C ; [.816D.0020.0006] # CIRCLED IDEOGRAPH WATER
329F ; [.8C7F.0020.0006] # CIRCLED IDEOGRAPH ATTENTION
1F235 ; [.A7C6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6E80
1F226 ; [.B6D2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6F14
2F55 ; [.816E.0020.0004] # KANGXI RADICAL FIRE
328B ; [.816E.0020.0006] # CIRCLED IDEOGRAPH FIRE
1F21A ; [.A7EB.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7121
2F56 ; [.8171.0020.0004] # KANGXI RADICAL CLAW
2F57 ; [.8173.0020.0004] # KANGXI RADICAL FATHER
2F58 ; [.8174.0020.0004] # KANGXI RADICAL DOUBLE X
2F59 ; [.8176.0020.0004] # KANGXI RADICAL HALF TREE TRUNK
2F5A ; [.8177.0020.0004] # KANGXI RADICAL SLICE
2F5B ; [.8179.0020.0004] # KANGXI RADICAL FANG
2F5C ; [.817B.0020.0004] # KANGXI RADICAL COW
3295 ; [.9895.0020.0006] # CIRCLED IDEOGRAPH SPECIAL
2F5D ; [.817D.0020.0004] # KANGXI RADICAL DOG
2F5E ; [.82A2.0020.0004] # KANGXI RADICAL PROFOUND
2F5F ; [.82A3.0020.0004] # KANGXI RADICAL JADE
2F60 ; [.82A7.0020.0004] # KANGXI RADICAL MELON
2F61 ; [.82A8.0020.0004] # KANGXI RADICAL TILE
2F62 ; [.82A9.0020.0004] # KANGXI RADICAL SWEET
2F63 ; [.82AA.0020.0004] # KANGXI RADICAL LIFE
1F222 ; [.82AA.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-751F
2F64 ; [.82AB.0020.0004] # KANGXI RADICAL USE
2F65 ; [.82AD.0020.0004] # KANGXI RADICAL FIELD
3199 ; [.82AF.0020.0014] # IDEOGRAPHIC ANNOTATION FIRST MARK
1F238 ; [.82B0.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7533
329A ; [.8815.0020.0006] # CIRCLED IDEOGRAPH MALE
2F66 ; [.82B4.0020.0004] # KANGXI RADICAL BOLT OF CLOTH
2F67 ; [.82B6.0020.0004] # KANGXI RADICAL SICKNESS
2F68 ; [.82B7.0020.0004] # KANGXI RADICAL DOTTED TENT
2F69 ; [.82B8.0020.0004] # KANGXI RADICAL WHITE
2F6A ; [.82B9.0020.0004] # KANGXI RADICAL SKIN
2F6B ; [.82BA.0020.0004] # KANGXI RADICAL DISH
32AC ; [.B79A.0020.0006] # CIRCLED IDEOGRAPH SUPERVISE
2F6C ; [.82BB.0020.0004] # KANGXI RADICAL EYE
2F6D ; [.82BC.0020.0004] # KANGXI RADICAL SPEAR
2F6E ; [.82BD.0020.0004] # KANGXI RADICAL ARROW
2F6F ; [.82BE.0020.0004] # KANGXI RADICAL STONE
2F70 ; [.82C0.0020.0004] # KANGXI RADICAL SPIRIT
3293 ; [.8D2E.0020.0006] # CIRCLED IDEOGRAPH SOCIETY
3297 ; [.9970.0020.0006] # CIRCLED IDEOGRAPH CONGRATULATION
1F232 ; [.B0A6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7981
2F71 ; [.82C1.0020.0004] # KANGXI RADICAL TRACK
2F72 ; [.82C2.0020.0004] # KANGXI RADICAL GRAIN
3299 ; [.9977.0020.0006] # CIRCLED IDEOGRAPH SECRET
2F73 ; [.82C3.0020.0004] # KANGXI RADICAL CAVE
1F233 ; [.8D3E.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A
2F74 ; [.82C4.0020.0004] # KANGXI RADICAL STAND
2F75 ; [.84B5.0020.0004] # KANGXI RADICAL BAMBOO
3247 ; [.B822.0020.0006] # CIRCLED IDEOGRAPH KOTO
2F76 ; [.84B6.0020.0004] # KANGXI RADICAL RICE
2F77 ; [.84B7.0020.0004] # KANGXI RADICAL SILK
1F221 ; [.A172.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7D42
2F78 ; [.84C4.0020.0004] # KANGXI RADICAL JAR
2F79 ; [.84C5.0020.0004] # KANGXI RADICAL NET
2F7A ; [.84C7.0020.0004] # KANGXI RADICAL SHEEP
2F7B ; [.84CA.0020.0004] # KANGXI RADICAL FEATHER
2F7C ; [.84CB.0020.0004] # KANGXI RADICAL OLD
2F7D ; [.84CD.0020.0004] # KANGXI RADICAL AND
2F7E ; [.84CE.0020.0004] # KANGXI RADICAL PLOW
2F7F ; [.84CF.0020.0004] # KANGXI RADICAL EAR
2F80 ; [.84D0.0020.0004] # KANGXI RADICAL BRUSH
2F81 ; [.84D2.0020.0004] # KANGXI RADICAL MEAT
2F82 ; [.84D7.0020.0004] # KANGXI RADICAL MINISTER
2F83 ; [.84D8.0020.0004] # KANGXI RADICAL SELF
2F84 ; [.84D9.0020.0004] # KANGXI RADICAL ARRIVE
2F85 ; [.84DA.0020.0004] # KANGXI RADICAL MORTAR
2F86 ; [.84DC.0020.0004] # KANGXI RADICAL TONGUE
2F87 ; [.84DD.0020.0004] # KANGXI RADICAL OPPOSE
2F88 ; [.84DE.0020.0004] # KANGXI RADICAL BOAT
2F89 ; [.84DF.0020.0004] # KANGXI RADICAL STOPPING
2F8A ; [.84E0.0020.0004] # KANGXI RADICAL COLOR
2F8B ; [.84E1.0020.0004] # KANGXI RADICAL GRASS
2F8C ; [.84EA.0020.0004] # KANGXI RADICAL TIGER
2F8D ; [.84EB.0020.0004] # KANGXI RADICAL INSECT
2F8E ; [.84EC.0020.0004] # KANGXI RADICAL BLOOD
2F8F ; [.84ED.0020.0004] # KANGXI RADICAL WALK ENCLOSURE
2F90 ; [.84EE.0020.0004] # KANGXI RADICAL CLOTHES
2F91 ; [.84EF.0020.0004] # KANGXI RADICAL WEST
2F92 ; [.8878.0020.0004] # KANGXI RADICAL SEE
2F93 ; [.887B.0020.0004] # KANGXI RADICAL HORN
1F216 ; [.B258.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-89E3
2F94 ; [.887D.0020.0004] # KANGXI RADICAL SPEECH
2F95 ; [.8891.0020.0004] # KANGXI RADICAL VALLEY
2F96 ; [.8892.0020.0004] # KANGXI RADICAL BEAN
2F97 ; [.8893.0020.0004] # KANGXI RADICAL PIG
2F98 ; [.8894.0020.0004] # KANGXI RADICAL BADGER
2F99 ; [.8895.0020.0004] # KANGXI RADICAL SHELL
3296 ; [.9B3B.0020.0006] # CIRCLED IDEOGRAPH FINANCIAL
1F223 ; [.A2FD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9
32AE ; [.B2A5.0020.0006] # CIRCLED IDEOGRAPH RESOURCE
2F9A ; [.8898.0020.0004] # KANGXI RADICAL RED
2F9B ; [.8899.0020.0004] # KANGXI RADICAL RUN
1F230 ; [.8899.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8D70
2F9C ; [.889B.0020.0004] # KANGXI RADICAL FOOT
2F9D ; [.889C.0020.0004] # KANGXI RADICAL BODY
2F9E ; [.889D.0020.0004] # KANGXI RADICAL CART
2F9F ; [.88A1.0020.0004] # KANGXI RADICAL BITTER
2FA0 ; [.88A2.0020.0004] # KANGXI RADICAL MORNING
2FA1 ; [.88A3.0020.0004] # KANGXI RADICAL WALK
1F22B ; [.B30B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-904A
329C ; [.C10A.0020.0006] # CIRCLED IDEOGRAPH SUITABLE
2FA2 ; [.88B4.0020.0004] # KANGXI RADICAL CITY
2FA3 ; [.88C5.0020.0004] # KANGXI RADICAL WINE
2FA4 ; [.88C6.0020.0004] # KANGXI RADICAL DISTINGUISH
2FA5 ; [.88C7.0020.0004] # KANGXI RADICAL VILLAGE
2FA6 ; [.8E33.0020.0004] # KANGXI RADICAL GOLD
328E ; [.8E33.0020.0006] # CIRCLED IDEOGRAPH METAL
2FA7 ; [.8E40.0020.0004] # KANGXI RADICAL LONG
2FA8 ; [.8E42.0020.0004] # KANGXI RADICAL GATE
2FA9 ; [.8E45.0020.0004] # KANGXI RADICAL MOUND
2FAA ; [.8E59.0020.0004] # KANGXI RADICAL SLAVE
2FAB ; [.8E5A.0020.0004] # KANGXI RADICAL SHORT TAILED BIRD
2FAC ; [.8E5C.0020.0004] # KANGXI RADICAL RAIN
2FAD ; [.8E5D.0020.0004] # KANGXI RADICAL BLUE
2FAE ; [.8E5F.0020.0004] # KANGXI RADICAL WRONG
2FAF ; [.949C.0020.0004] # KANGXI RADICAL FACE
2FB0 ; [.949D.0020.0004] # KANGXI RADICAL LEATHER
2FB1 ; [.949E.0020.0004] # KANGXI RADICAL TANNED LEATHER
2FB2 ; [.94A0.0020.0004] # KANGXI RADICAL LEEK
2FB3 ; [.94A1.0020.0004] # KANGXI RADICAL SOUND
2FB4 ; [.94A2.0020.0004] # KANGXI RADICAL LEAF
32A0 ; [.AC44.0020.0006] # CIRCLED IDEOGRAPH ITEM
2FB5 ; [.94A7.0020.0004] # KANGXI RADICAL WIND
2FB6 ; [.94AB.0020.0004] # KANGXI RADICAL FLY
2FB7 ; [.94AD.0020.0004] # KANGXI RADICAL EAT
2FB8 ; [.94B7.0020.0004] # KANGXI RADICAL HEAD
2FB9 ; [.94B9.0020.0004] # KANGXI RADICAL FRAGRANT
2FBA ; [.9BF9.0020.0004] # KANGXI RADICAL HORSE
2FBB ; [.9C00.0020.0004] # KANGXI RADICAL BONE
2FBC ; [.9C01.0020.0004] # KANGXI RADICAL TALL
2FBD ; [.9C02.0020.0004] # KANGXI RADICAL HAIR
2FBE ; [.9C03.0020.0004] # KANGXI RADICAL FIGHT
2FBF ; [.9C04.0020.0004] # KANGXI RADICAL SACRIFICIAL WINE
2FC0 ; [.9C05.0020.0004] # KANGXI RADICAL CAULDRON
2FC1 ; [.9C06.0020.0004] # KANGXI RADICAL GHOST
2FC2 ; [.A408.0020.0004] # KANGXI RADICAL FISH
2FC3 ; [.A40A.0020.0004] # KANGXI RADICAL BIRD
2FC4 ; [.A414.0020.0004] # KANGXI RADICAL SALT
2FC5 ; [.A415.0020.0004] # KANGXI RADICAL DEER
2FC6 ; [.A416.0020.0004] # KANGXI RADICAL WHEAT
2FC7 ; [.A418.0020.0004] # KANGXI RADICAL HEMP
2FC8 ; [.AC78.0020.0004] # KANGXI RADICAL YELLOW
2FC9 ; [.AC7A.0020.0004] # KANGXI RADICAL MILLET
2FCA ; [.AC7B.0020.0004] # KANGXI RADICAL BLACK
2FCB ; [.AC7C.0020.0004] # KANGXI RADICAL EMBROIDERY
2FCC ; [.B440.0020.0004] # KANGXI RADICAL FROG
2FCD ; [.B442.0020.0004] # KANGXI RADICAL TRIPOD
2FCE ; [.B443.0020.0004] # KANGXI RADICAL DRUM
2FCF ; [.B445.0020.0004] # KANGXI RADICAL RAT
2FD0 ; [.BB56.0020.0004] # KANGXI RADICAL NOSE
2FD1 ; [.BB57.0020.0004] # KANGXI RADICAL EVEN
2FD2 ; [.C273.0020.0004] # KANGXI RADICAL TOOTH
2FD3 ; [.C85E.0020.0004] # KANGXI RADICAL DRAGON
2FD4 ; [.C85F.0020.0004] # KANGXI RADICAL TURTLE
2EF3 ; [.88F9.0020.0004] # CJK RADICAL C-SIMPLIFIED TURTLE
2FD5 ; [.CD3C.0020.0004] # KANGXI RADICAL FLUTE
F967 ; [.80BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
FA70 ; [.88FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70
F905 ; [.852F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905
2F801 ; [.805D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.80CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E
2F800 ; [.852D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800
2F802 ; [.8006.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F802
F91B ; [.AC80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B
F9BA ; [.8028.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA
F977 ; [.8E86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977
F9FD ; [.80DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD
2F819 ; [.80E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F819
F9A8 ; [.81C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8
2F804 ; [.856D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804
FA73 ; [.8928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73
F92D ; [.892E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D
F9B5 ; [.8933.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.8E8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.8E8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805
2F806 ; [.8E98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806
F965 ; [.8E9C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965
2F807 ; [.94E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807
F9D4 ; [.950F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4
2F808 ; [.9C54.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808
2F809 ; [.A43E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809
2F80B ; [.B44E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.B459.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.B466.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.B466.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A
FA0C ; [.8070.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.81D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.8578.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.8578.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F80F ; [.895B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F
2F810 ; [.D692.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F810
2F814 ; [.80F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814
FA72 ; [.8350.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72
F978 ; [.895F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978
F9D1 ; [.80F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1
2F811 ; [.8961.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.C28C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F815 ; [.8356.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815
2F8D2 ; [.8ED4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.9C63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F817 ; [.80FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817
2F818 ; [.9535.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F81A ; [.81DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A
FA71 ; [.8582.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71
2F81B ; [.8582.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B
F92E ; [.8584.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E
F979 ; [.953F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979
F955 ; [.9542.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955
F954 ; [.BB7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954
FA15 ; [.C28F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15
2F81D ; [.8037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D
2F81E ; [.8075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.8107.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.8107.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.836E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C
F9DD ; [.8598.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.897C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.897D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F821 ; [.8986.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821
2F822 ; [.A45F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822
2F823 ; [.ACB4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823
F9C7 ; [.BB84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7
F98A ; [.803C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A
F99D ; [.8373.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D
2F992 ; [.85A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992
FA76 ; [.8EF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.8EF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.8EF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.8EF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.9C76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952
F92F ; [.A466.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F
FA34 ; [.ACC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.ACC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827
F97F ; [.C879.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F
FA77 ; [.8078.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.8078.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.81F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829
2F82A ; [.81F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A
F963 ; [.81F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.81F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B
F9EB ; [.9C89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F82C ; [.81F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D
2F82E ; [.A46C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F82F ; [.85B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.85B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F830 ; [.8F00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830
2F831 ; [.9569.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.9569.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.9569.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833
F96B ; [.9C93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B
2F836 ; [.8126.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836
2F837 ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837
F906 ; [.820E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.8214.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839
2F83A ; [.821A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A
2F83B ; [.8396.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B
F9DE ; [.839F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.85C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.85E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D
F980 ; [.85EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980
2F83E ; [.85F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.89C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F
2F83C ; [.8F0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83C
2F840 ; [.8F13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840
F99E ; [.8F2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F841 ; [.9589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F841
2F842 ; [.95A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842
2F843 ; [.9CC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843
FA79 ; [.9CC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79
2F844 ; [.9CD2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844
2F845 ; [.A485.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.A485.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.A488.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.A499.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.A499.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.A49D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.A49D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F848 ; [.A4AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848
2F849 ; [.A4B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849
FA0D ; [.ACD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D
2F84A ; [.ACDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A
FA7B ; [.ACF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B
FA37 ; [.B4AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37
2F84C ; [.B4AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C
2F84E ; [.B4CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84E
FA38 ; [.C2AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38
2F84F ; [.BBCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F
F9A9 ; [.8A04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F84B ; [.B4DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B
2F84D ; [.B4DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84D
2F855 ; [.8F63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.8F8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.9D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F854 ; [.9D37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854
2F857 ; [.A4EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857
2F856 ; [.95F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856
FA39 ; [.A4F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39
FA10 ; [.AD39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10
FA7C ; [.AD39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C
F96C ; [.AD3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.C26D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A
2F858 ; [.BBE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858
FA7D ; [.BBEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D
F94A ; [.CD66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A
F942 ; [.D106.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942
2F851 ; [.83C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851
2F85A ; [.864B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A
2F85B ; [.9D44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B
2F85C ; [.864D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C
2F85D ; [.83C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D
2F85E ; [.B513.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E
FA7E ; [.8A41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.8A45.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.8F99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.8A4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.9D4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.8088.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981
2F865 ; [.8FA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865
2F862 ; [.960A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862
2F863 ; [.961C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863
2F864 ; [.9628.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864
FA80 ; [.9D80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F866 ; [.9D84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866
2F986 ; [.AD61.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986
2F869 ; [.BC16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869
FA81 ; [.C2FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81
2F86A ; [.D110.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A
2F86B ; [.D110.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B
FA04 ; [.83EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04
2F86D ; [.9DA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D
2F86E ; [.AD8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E
F95F ; [.B554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F
F9AA ; [.B554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA
2F86F ; [.B554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F
F9BC ; [.BC2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC
2F870 ; [.D116.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870
2F872 ; [.868E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872
2F873 ; [.8FE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873
2F875 ; [.8092.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875
F9BD ; [.8695.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.9DB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877
F94B ; [.B558.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B
FA3B ; [.BC33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B
F9DF ; [.BC34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF
FA3C ; [.8096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C
2F878 ; [.8096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878
2F87A ; [.86B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A
2F879 ; [.8AD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879
F9D5 ; [.9DCB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5
2F87C ; [.A589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C
F921 ; [.A595.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921
2F87F ; [.A5A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F
2F87E ; [.ADAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87E
2F880 ; [.B563.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880
2F9F4 ; [.C30C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4
F9AB ; [.C8D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB
2F881 ; [.88A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F882 ; [.9DE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882
2F884 ; [.A5AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F885 ; [.9681.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885
2F886 ; [.A5AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886
2F887 ; [.BC5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887
F98E ; [.8414.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E
FA01 ; [.9036.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88B ; [.9038.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B
2F88C ; [.9DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C
2F88D ; [.9DFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.ADC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.A5C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.A5C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA82 ; [.B587.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82
FA0B ; [.B588.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B
FA83 ; [.B58E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83
F982 ; [.D123.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982
2F890 ; [.80A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890
F943 ; [.86D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943
2F894 ; [.8AF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894
2F895 ; [.8AF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895
2F874 ; [.8423.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874
2F899 ; [.86D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.9E0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84
2F89A ; [.9E0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A
F9D8 ; [.904F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8
2F89C ; [.A5CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89C
F966 ; [.A5D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966
FA85 ; [.ADD2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F89D ; [.86E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.86E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.8B15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3
2F89F ; [.8702.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89F
F960 ; [.9054.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.8B2D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC
FA6B ; [.96BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B
2F8A0 ; [.96C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
FA3D ; [.96D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.96D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
2F8A5 ; [.9E43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
FA86 ; [.9E4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86
F9B9 ; [.A5E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9
FA88 ; [.ADDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88
F9D9 ; [.ADFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9
2F8A6 ; [.B5A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.AE01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.AE01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA87 ; [.AE03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87
2F8A8 ; [.AE03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
FA8A ; [.B5B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A
FA3E ; [.A614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E
2F8AA ; [.B5C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
FA3F ; [.BC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.BC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.BC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
F98F ; [.BC91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F
2F8AD ; [.BC9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
2F8AE ; [.BCA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
2F8AC ; [.C332.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
2F8AF ; [.C8EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
FA40 ; [.D12A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40
FA8B ; [.D12A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B
2F8B0 ; [.D12A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
F90D ; [.D12C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D
2F8B1 ; [.D12C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
F990 ; [.D9A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990
2F8B2 ; [.8435.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
2F8B3 ; [.9E66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
F9D2 ; [.BCAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.C8FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F8B4 ; [.843C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B4
2F8B5 ; [.8B64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.8B7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925
F95B ; [.9096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B
FA02 ; [.8B85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.8B86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
2F8BA ; [.90AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
F973 ; [.90AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973
2F8B9 ; [.970C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.971F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
2F8BB ; [.9E77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
F9A4 ; [.9E8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4
2F8BC ; [.9E92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
F975 ; [.9EAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.9EB5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.A62A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D
2F8C0 ; [.AE5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0
2F8BD ; [.9737.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD
FA8E ; [.AE2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E
2F8BF ; [.AE34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
FA8F ; [.A667.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F
2F8C3 ; [.BCB3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
2F8C6 ; [.B603.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6
2F8C4 ; [.B609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C4
F991 ; [.BCCE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991
2F8C5 ; [.BCD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
F930 ; [.C35E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930
FA41 ; [.9ED2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.9ED2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.9ED9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90
2F8C9 ; [.AE62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F969 ; [.BCF5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969
F9BE ; [.9745.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE
F983 ; [.974C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983
FA42 ; [.90EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42
2F8CB ; [.9EF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB
F9E0 ; [.8BC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0
2F8CD ; [.9758.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
FA12 ; [.A69D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.A69D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91
F9C5 ; [.AE80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5
FA43 ; [.A6AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.A6AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
2F8D5 ; [.B627.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D5
FA06 ; [.BD0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06
F98B ; [.C39E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B
F901 ; [.875D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8CC ; [.976A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
2F8D4 ; [.A454.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
F929 ; [.9773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.9773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.9773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.9F11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.9F11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
2F8DA ; [.AE99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA
F9E1 ; [.876E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.8773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.8776.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.877E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
F9C8 ; [.8BEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8
2F8E0 ; [.8BF5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
F9F4 ; [.8C07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.9164.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9
2F8DF ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF
F9DA ; [.978C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA
2F8E5 ; [.9794.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5
2F8E1 ; [.9181.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E1
F97A ; [.9F37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.9F3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.9F3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
2F8E4 ; [.9F44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E4
F9E2 ; [.9F5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2
2F8E6 ; [.A716.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6
2F8E8 ; [.AEAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
2F8E9 ; [.B650.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9
2F8EA ; [.BD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA
F914 ; [.BD3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914
F95C ; [.BD3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C
F9BF ; [.BD3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF
F94C ; [.BD4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C
2F8EB ; [.C959.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB
F931 ; [.D157.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931
2F8ED ; [.C962.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
F91D ; [.D6D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D
2F8EF ; [.846F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
2F8F1 ; [.C403.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
2F8F3 ; [.AF0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
F98C ; [.C40A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C
FA95 ; [.8165.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95
2F8F4 ; [.B6A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4
F9A5 ; [.C969.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5
F970 ; [.9F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970
FA96 ; [.9F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96
2F8F5 ; [.9F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
2F8F6 ; [.9F8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6
2F8FA ; [.847F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
2F8FE ; [.879D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE
F972 ; [.87BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.8C58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.8C64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968
2F8FD ; [.8C65.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD
F9E3 ; [.8C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3
2F8FF ; [.980A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF
F915 ; [.91C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.91C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F907 ; [.91D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907
2F900 ; [.91E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.91E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.91E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.91E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.981E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.981F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.982C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.982C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.982D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.983A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.9FBA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5
F94D ; [.9FC9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D
F9D6 ; [.9FD9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6
2F90E ; [.9FE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.A004.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.A777.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.A7B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909
F9CB ; [.AF31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.AF4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC
2F90C ; [.AF5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C
FA99 ; [.A7D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.A7D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.AF63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904
FA98 ; [.AF6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA98
F94E ; [.B6CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E
FA47 ; [.B6E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47
FA9A ; [.B6E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A
F992 ; [.B6E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992
2F90F ; [.BDAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F912 ; [.BDE2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912
F922 ; [.C98A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922
F984 ; [.CDED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984
2F915 ; [.D17C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915
FA9B ; [.D17F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B
2F914 ; [.D17F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914
2F913 ; [.D488.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913
2F917 ; [.D6DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917
2F835 ; [.8497.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835
2F919 ; [.87E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F919
2F918 ; [.87E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918
F9FB ; [.8CB0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.920A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A
F99F ; [.9864.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.9875.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916
2F91C ; [.AF89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C
F993 ; [.AF8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993
FA48 ; [.A80B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.A80B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C
2F91E ; [.BDE7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E
F9C0 ; [.C477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0
F9EE ; [.C479.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE
F932 ; [.D496.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932
F91E ; [.D6E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E
2F920 ; [.DC4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920
FA49 ; [.8172.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA49
FA9E ; [.C9BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.C9BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921
2F922 ; [.AFC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F922
F946 ; [.87ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946
2F924 ; [.A81A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924
2F925 ; [.B745.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925
FA9F ; [.82A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F9FA ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA
F92B ; [.98A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B
FA16 ; [.A066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16
FAA0 ; [.A066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0
F9A7 ; [.CE18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7
2F928 ; [.D1A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928
F961 ; [.A067.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.A067.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F929 ; [.817E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929
2F92B ; [.8CEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B
F9AD ; [.924C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.98BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.A07D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.98D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.A852.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92E ; [.AFF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92E
2F92F ; [.B008.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F
F9AE ; [.BE24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE
FAA1 ; [.B763.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1
2F930 ; [.B763.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930
2F931 ; [.BE35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931
F994 ; [.BE39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994
F9EF ; [.C4A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF
2F932 ; [.D1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932
FAA2 ; [.B77A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA2
2F934 ; [.A882.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F934
FAA3 ; [.8D01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3
2F936 ; [.8D03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936
F9CD ; [.98E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.A09D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976
F962 ; [.A0A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962
2F938 ; [.A0A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938
F9E5 ; [.A8A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5
2F93A ; [.B047.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A
FAA4 ; [.BE59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4
FAA5 ; [.BE52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5
F9C1 ; [.C9EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1
F90E ; [.D6F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E
FA17 ; [.990E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.990E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7 ; [.A0BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7
F933 ; [.C4E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933
FAA8 ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.92B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F945 ; [.9928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945
2F946 ; [.9929.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946
2F947 ; [.9929.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947
FAAA ; [.A0D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA
FAA9 ; [.A8C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9
2F948 ; [.A8C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948
2F94A ; [.BE77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A
FA9D ; [.CA05.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D
2F94E ; [.A0E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E
F9CE ; [.A8DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.B08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.B08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.B090.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.BE90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947
FAAB ; [.BE92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB
2F950 ; [.BE92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950
F964 ; [.CA26.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964
F985 ; [.D4C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985
FA18 ; [.84B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18
FA4C ; [.8D2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C
FA4E ; [.92EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.92ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA4F ; [.9963.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F
FA50 ; [.9969.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.9969.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.9970.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51
FA19 ; [.9971.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.A0F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A
F93C ; [.B0A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C
FA52 ; [.B7DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52
FA53 ; [.B7DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53
FA1B ; [.B7DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.B7DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956
F9B6 ; [.CE6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6
F995 ; [.8D3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995
2F957 ; [.998A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957
F956 ; [.B0BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956
FA54 ; [.BEBC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54
2F959 ; [.BEBC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959
2F95A ; [.B7F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A
2F95B ; [.C523.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B
FA55 ; [.930C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55
FAAC ; [.BEC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC
F9F7 ; [.82C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7
2F95F ; [.B805.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F
F9F8 ; [.A12C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8
FA56 ; [.B101.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56
FAAD ; [.B101.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD
2F962 ; [.BEEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962
2F963 ; [.C53D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963
F9A6 ; [.D1F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6
F944 ; [.D8B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944
FAAE ; [.9327.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE
F9F9 ; [.A14C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.B84B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D
2F966 ; [.C563.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966
FA03 ; [.C567.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03
2F969 ; [.CE97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F969
F97B ; [.CE9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B
2F968 ; [.CA8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968
2F96A ; [.9332.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A
F9CF ; [.99CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF
F96A ; [.99E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.A15F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F
FAAF ; [.B111.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF
2F96C ; [.A95F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C
F93D ; [.B85B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D
F957 ; [.B879.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957
2F96E ; [.B882.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E
F996 ; [.BF35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996
FA57 ; [.BF35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57
FAB0 ; [.BF35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0
2F96F ; [.BF43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96F
FA58 ; [.C56B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58
F950 ; [.CA9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950
FA59 ; [.CAA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59
2F970 ; [.CAA9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970
FAB1 ; [.A98D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1
FA5A ; [.B149.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.C591.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6
2F976 ; [.C592.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976
F90F ; [.D220.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F
2F978 ; [.A19D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978
F9AF ; [.A19E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.84CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E
2F979 ; [.CEC9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979
F934 ; [.84CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934
FA5B ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A
F9B0 ; [.A1BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0
2F97D ; [.A9A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97D
F997 ; [.CAC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997
2F97F ; [.CAC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F
F945 ; [.D8C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945
F953 ; [.84D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.8D78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.8D7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F983 ; [.9A39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F983
2F985 ; [.A9B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985
F926 ; [.D22E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926
F9F6 ; [.CAE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6
FA5C ; [.9A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F893 ; [.9A50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.9A50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B
2F98C ; [.A9E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C
FA6D ; [.C5C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D
F97C ; [.885F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C
FA5D ; [.80B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D
FA5E ; [.80B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E
2F990 ; [.8868.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F98F ; [.886E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F
2F991 ; [.8D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.8DAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.8DB1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.8DBA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.93A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.93A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.93A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996
2F999 ; [.A1FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999
2F99C ; [.A1FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C
F9FE ; [.9A84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.9A9C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F9A0 ; [.9ABD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0
2F99A ; [.9AAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A
2F99B ; [.A24D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99B
2F99D ; [.A249.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D
F93E ; [.A9FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E
2F9A1 ; [.A9FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.AA00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.AA0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
2F99E ; [.AA1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E
FAB4 ; [.AA22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4
F958 ; [.AA24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.B1A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918
F96E ; [.B1B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E
FA5F ; [.AA5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.AA5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F999 ; [.BF9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999
2F9A8 ; [.B208.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
2F9A9 ; [.BF9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9
F9C2 ; [.BFA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2
2F9AA ; [.BFC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA
2F9AC ; [.C5F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
F923 ; [.CF09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923
F9F0 ; [.D510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0
F935 ; [.D51C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935
FA20 ; [.D52F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA20
F91F ; [.D73C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F
F910 ; [.D9F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910
2F9B3 ; [.93DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
F936 ; [.B20A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936
2F9B4 ; [.B20A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
2F9B5 ; [.CB2D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
2F9B6 ; [.CF14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6
2F9B8 ; [.AA6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B8
2F9B7 ; [.9AE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
2F9BA ; [.AA7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA
2F9B9 ; [.B227.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9
2F9BC ; [.B95E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
2F9BD ; [.B981.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD
FAB5 ; [.C612.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5
2F9BB ; [.C612.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB
2F9BE ; [.C617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BE
F911 ; [.CB41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911
2F9C0 ; [.C027.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0
2F9C1 ; [.D264.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1
F927 ; [.D748.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927
FA08 ; [.84ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F9C3 ; [.C63E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C3
2F9C4 ; [.84EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
F9A0 ; [.AAAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0
F9E7 ; [.B239.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7
2F9C6 ; [.AAB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6
2F9C7 ; [.B247.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7
F9E8 ; [.B24A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8
F912 ; [.B995.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912
2F9C9 ; [.B997.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9
FA60 ; [.C03D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.CB6A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6
F924 ; [.D53F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924
FAB7 ; [.CF49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7
FA0A ; [.8878.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A
FA61 ; [.A103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61
FAB8 ; [.A103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8
2F9CF ; [.B289.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
F96F ; [.B9C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F
F9A1 ; [.B9C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1
FAB9 ; [.C06A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9
FABB ; [.C076.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB
F97D ; [.C07D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D
F941 ; [.C081.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941
FABE ; [.C671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE
2F9D0 ; [.C671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
FA22 ; [.C08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22
FABA ; [.C08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA
F95D ; [.C681.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D
FABD ; [.C681.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD
FA62 ; [.C684.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62
FABC ; [.C684.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC
FA63 ; [.CF67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63
FABF ; [.CF67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF
F9FC ; [.D2AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC
F95A ; [.D8E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A
FAC0 ; [.DA06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0
2F9D1 ; [.DA06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
F900 ; [.9B36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900
2F9D2 ; [.8893.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F9D4 ; [.A2FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
2F9D5 ; [.AB15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
F948 ; [.B2A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948
F903 ; [.B2A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903
FA64 ; [.B9E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64
FA65 ; [.D2BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65
FAC1 ; [.D2BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1
2F9D6 ; [.DADB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
2F9D7 ; [.9B4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9DB ; [.B2C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
2F9DA ; [.AB38.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.B2D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937
2F9DC ; [.B2D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC
F902 ; [.889D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902
2F9DE ; [.9B5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE
F998 ; [.C0FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998
F9D7 ; [.C0FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7
FAC2 ; [.C6C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2
2F9DF ; [.C6C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
FA07 ; [.C6CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07
F98D ; [.D8FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D
2F98D ; [.B2F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D
F971 ; [.88A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971
FA66 ; [.818F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66
F99A ; [.A353.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A
FA25 ; [.AB86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.AB86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67
FAC3 ; [.C6D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3
F9C3 ; [.C6DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3
F913 ; [.DA18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913
2F9E2 ; [.850D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2
F92C ; [.945D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C
FA2E ; [.9B86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E
2F9E3 ; [.9465.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3
FA26 ; [.A369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26
2F9E4 ; [.B321.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4
2F9E6 ; [.BA32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6
F919 ; [.B32C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919
FAC4 ; [.CBE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4
F9B7 ; [.D582.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7
F9E9 ; [.88C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9
F97E ; [.ABA9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.8E33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A
F9B1 ; [.B33B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1
2F9E7 ; [.B33F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
FAC5 ; [.BA52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5
2F9EA ; [.BA91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
2F9E8 ; [.C154.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
2F9E9 ; [.C155.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9
F93F ; [.C705.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F
F99B ; [.CBF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B
2F9EB ; [.D330.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB
2F9EC ; [.D5A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC
2F9EE ; [.ABFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
F986 ; [.C18F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986
2F9F0 ; [.CC4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0
F9C6 ; [.88DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.948F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.9491.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.A3DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959
F9D3 ; [.A3E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3
FAC6 ; [.A3E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6
F9DC ; [.AC1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9F1 ; [.C19A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1
FA2F ; [.C776.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F
F9B8 ; [.CC60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8
2F9F3 ; [.AC28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3
F9EA ; [.D014.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA
FA68 ; [.D345.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68
FAC7 ; [.D345.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7
F9B2 ; [.B3BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.B3BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949
2F9F5 ; [.D017.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
F938 ; [.D7AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938
F9B3 ; [.DAFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3
FA1C ; [.B3C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.B3C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8
FAC9 ; [.D5DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC9
2F9FA ; [.D5DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA
FA69 ; [.D5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69
FACA ; [.D5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA
FACB ; [.B3D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACB
2F9FE ; [.B3D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FE
2F9FF ; [.B3D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FF
F9B4 ; [.BAE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4
2FA00 ; [.C1C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00
FA6A ; [.C7A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A
FACC ; [.C7A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC
F9D0 ; [.D369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0
2FA02 ; [.9BF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02
FA2A ; [.AC59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A
FA2B ; [.B3F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B
FA2C ; [.C7C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C
2FA04 ; [.C7C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04
2FA05 ; [.D37A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05
2FA06 ; [.BB13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06
F91A ; [.C7DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A
2FA07 ; [.CCB3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07
F987 ; [.DC56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987
FACD ; [.D619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD
2FA0A ; [.D619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
F939 ; [.C225.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939
2FA0B ; [.D645.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B
F9F2 ; [.DA5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2
2FA0C ; [.C247.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C
2FA0F ; [.CD1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F
FA2D ; [.D80D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D
F93A ; [.DB1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A
F920 ; [.DC69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920
F940 ; [.A415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940
F988 ; [.D407.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988
F9F3 ; [.DA80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FA15 ; [.A418.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15
F989 ; [.C26C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989
2FA17 ; [.AC7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17
2FA18 ; [.8E79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18
2FA19 ; [.D834.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA19
2FA1A ; [.C26F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A
2FA1B ; [.D0DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B
2FA1C ; [.BB56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
FAD8 ; [.DA8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8
F9C4 ; [.C85E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4
FAD9 ; [.D0E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9
F907 ; [.C85F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907
F908 ; [.C85F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908
FACE ; [.C85F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE
2F81F ; [.858A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81F
2F888 ; [.C311.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F888
2F8D0 ; [.AE77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D0
2F8CE ; [.C38A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CE
2F8DE ; [.8BD3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DE
2F8EE ; [.D879.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EE
2F90A ; [.AF20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90A
2F92C ; [.98A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92C
2F92D ; [.98A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92D
FAD4 ; [.A8B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD4
2F949 ; [.A8B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F949
2F960 ; [.B808.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F960
2F96D ; [.BF14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96D
2F8D7 ; [.8D6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D7
2FA0E ; [.D64A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0E
2F8F9 ; [.B6A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F9
FA6C ; [.AFBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6C
2F93C ; [.D6F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93C
ENTRY
};
Unicode/Collate/Locale/lt.pl 0000644 00000005622 15033552504 0011677 0 ustar 00 +{
locale_version => 1.25,
# in cldr test/lt.xml why I-dot-acute > I-dot though i-dot-acute < i-dot ?
entry => <<'ENTRY', # for DUCET v9.0.0
0049 0307 ; [.1D32.0020.0008][.0000.002E.0002] # <LATIN CAPITAL LETTER I, COMBINING DOT ABOVE>
0307 0300 ; [.0000.0025.0002] # <COMBINING DOT ABOVE, COMBINING GRAVE ACCENT>
0307 0301 ; [.0000.0024.0002] # <COMBINING DOT ABOVE, COMBINING ACUTE ACCENT>
0307 0303 ; [.0000.002D.0002] # <COMBINING DOT ABOVE, COMBINING TILDE>
0105 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH OGONEK
0061 0328 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH OGONEK
0104 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK
0041 0328 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK
010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0119 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH OGONEK
0065 0328 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0045 0328 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK
0117 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE
0065 0307 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE
0116 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE
0045 0307 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE
012F ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH OGONEK
0069 0328 ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH OGONEK
012E ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK
0049 0328 ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK
0079 ; [.1D32.0022.0002] # LATIN SMALL LETTER Y
0059 ; [.1D32.0022.0008] # LATIN CAPITAL LETTER Y
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0173 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH OGONEK
0075 0328 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH OGONEK
0172 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK
0055 0328 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK
016B ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON
0075 0304 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON
0055 0304 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON
017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
ENTRY
};
Unicode/Collate/Locale/fa.pl 0000644 00000006521 15033552504 0011645 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
0650 ; [.0000.0077.0002] # ARABIC KASRA
064B ; [.0000.007B.0002] # ARABIC FATHATAN
064D ; [.0000.007C.0002] # ARABIC KASRATAN
064C ; [.0000.007D.0002] # ARABIC DAMMATAN
0622 ; [.230A.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
0627 0653 ; [.230A.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
08AC ; [.230A.0020.0002][.FFF0.0000.0000] # ARABIC LETTER ROHINGYA YEH
0671 ; [.230B.0021.0002] # ARABIC LETTER ALEF WASLA
0621 ; [.230C.0020.0002][.FFF0.0000.0000] # ARABIC LETTER HAMZA
0623 ; [.230C.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE
0627 0654 ; [.230C.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE
0672 ; [.230C.0022.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
0625 ; [.230C.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW
0627 0655 ; [.230C.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW
0673 ; [.230C.0024.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
0624 ; [.230C.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
0648 0654 ; [.230C.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
06CC 0654 ; [.230C.0026.0002][.FFF0.0000.0000] # <ARABIC LETTER FARSI YEH, ARABIC HAMZA ABOVE>
0649 0654 ; [.230C.0026.0003][.FFF0.0000.0000] # <ARABIC LETTER ALEF MAKSURA, ARABIC HAMZA ABOVE>
0626 ; [.230C.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
064A 0654 ; [.230C.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
066E ; [.230C.0020.0002][.FFF1.0000.0000] # ARABIC LETTER DOTLESS BEH
06AA ; [.2388.0021.0002] # ARABIC LETTER SWASH KAF
06AB ; [.2388.0022.0002] # ARABIC LETTER KAF WITH RING
0643 ; [.2388.0023.0002] # ARABIC LETTER KAF
06AC ; [.2388.0024.0002] # ARABIC LETTER KAF WITH DOT ABOVE
06AD ; [.2388.0025.0002] # ARABIC LETTER NG
06AE ; [.2388.0026.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW
0647 ; [.23C1.0020.0002][.FFF1.0000.0000] # ARABIC LETTER HEH
06D5 ; [.23C1.0021.0002][.FFF1.0000.0000] # ARABIC LETTER AE
06C1 ; [.23C1.0022.0002][.FFF1.0000.0000] # ARABIC LETTER HEH GOAL
06C2 ; [.23C1.0022.0002][.FFF1.0000.0000][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
0629 ; [.23C1.0023.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA
06C3 ; [.23C1.0024.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL
06C0 ; [.23C1.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE
06D5 0654 ; [.23C1.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE
06BE ; [.23C1.0026.0002][.FFF1.0000.0000] # ARABIC LETTER HEH DOACHASHMEE
06CF ; [.23C1.0020.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH DOT ABOVE
0649 ; [.23C7.0021.0002] # ARABIC LETTER ALEF MAKSURA
06D2 ; [.23C7.0022.0002] # ARABIC LETTER YEH BARREE
06D3 ; [.23C7.0022.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
064A ; [.23C7.0023.0002] # ARABIC LETTER YEH
06D0 ; [.23C7.0024.0002] # ARABIC LETTER E
06D1 ; [.23C7.0025.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW
06CD ; [.23C7.0026.0002] # ARABIC LETTER YEH WITH TAIL
06CE ; [.23C7.0027.0002] # ARABIC LETTER YEH WITH SMALL V
ENTRY
};
Unicode/Collate/Locale/lkt.pl 0000644 00000002545 15033552504 0012053 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON
01E7 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CARON
0067 030C ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CARON
01E6 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CARON
0047 030C ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CARON
021F ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CARON
0068 030C ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CARON
021E ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CARON
0048 030C ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CARON
0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON
017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON
ENTRY
};
Unicode/Collate/Locale/fil.pl 0000644 00000001102 15033552504 0012017 0 ustar 00 +{
locale_version => 1.25,
entry => <<'ENTRY', # for DUCET v9.0.0
00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE
006E 0067 ; [.1DBB.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER G>
004E 0067 ; [.1DBB.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER G>
004E 0047 ; [.1DBB.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER G>
ENTRY
};
Unicode/Collate/keys.txt 0000644 00000147146 15033552504 0011250 0 ustar 00 #### This file is generated from allkeys-3.1.1.txt (unicode.org)
#### by deleting many many entries.
####
#### This table is intended ONLY for doing a test
#### of Unicode/Collate.pm, a Perl module.
####
#### The entries contained here ARE:
#### 0000..007F # Basic Latin
#### 0080..00FF # Latin-1 Supplement
#### 0300..036F # Combining Diacritical Marks
#### 1100..11FF # Hangul Jamo
#### 2000..206F # General Punctuation
#### 3040..309F # Hiragana
#### 30A0..30FF # Katakana
####
#### To fetch the original file, access to this:
#### http://www.unicode.org/reports/tr10/allkeys.txt
####
@version 3.1.1
0000 ; [.0000.0000.0000.0000] # [0000] NULL (in 6429)
0001 ; [.0000.0000.0000.0000] # [0001] START OF HEADING (in 6429)
0002 ; [.0000.0000.0000.0000] # [0002] START OF TEXT (in 6429)
0003 ; [.0000.0000.0000.0000] # [0003] END OF TEXT (in 6429)
0004 ; [.0000.0000.0000.0000] # [0004] END OF TRANSMISSION (in 6429)
0005 ; [.0000.0000.0000.0000] # [0005] ENQUIRY (in 6429)
0006 ; [.0000.0000.0000.0000] # [0006] ACKNOWLEDGE (in 6429)
0007 ; [.0000.0000.0000.0000] # [0007] BELL (in 6429)
0008 ; [.0000.0000.0000.0000] # [0008] BACKSPACE (in 6429)
000E ; [.0000.0000.0000.0000] # [000E] SHIFT OUT (in 6429)
000F ; [.0000.0000.0000.0000] # [000F] SHIFT IN (in 6429)
0010 ; [.0000.0000.0000.0000] # [0010] DATA LINK ESCAPE (in 6429)
0011 ; [.0000.0000.0000.0000] # [0011] DEVICE CONTROL ONE (in 6429)
0012 ; [.0000.0000.0000.0000] # [0012] DEVICE CONTROL TWO (in 6429)
0013 ; [.0000.0000.0000.0000] # [0013] DEVICE CONTROL THREE (in 6429)
0014 ; [.0000.0000.0000.0000] # [0014] DEVICE CONTROL FOUR (in 6429)
0015 ; [.0000.0000.0000.0000] # [0015] NEGATIVE ACKNOWLEDGE (in 6429)
0016 ; [.0000.0000.0000.0000] # [0016] SYNCHRONOUS IDLE (in 6429)
0017 ; [.0000.0000.0000.0000] # [0017] END OF TRANSMISSION BLOCK (in 6429)
0018 ; [.0000.0000.0000.0000] # [0018] CANCEL (in 6429)
0019 ; [.0000.0000.0000.0000] # [0019] END OF MEDIUM (in 6429)
001A ; [.0000.0000.0000.0000] # [001A] SUBSTITUTE (in 6429)
001B ; [.0000.0000.0000.0000] # [001B] ESCAPE (in 6429)
001C ; [.0000.0000.0000.0000] # [001C] FILE SEPARATOR (in 6429)
001D ; [.0000.0000.0000.0000] # [001D] GROUP SEPARATOR (in 6429)
001E ; [.0000.0000.0000.0000] # [001E] RECORD SEPARATOR (in 6429)
001F ; [.0000.0000.0000.0000] # [001F] UNIT SEPARATOR (in 6429)
007F ; [.0000.0000.0000.0000] # [007F] DELETE (in 6429)
0080 ; [.0000.0000.0000.0000] # [0080] <control>
0081 ; [.0000.0000.0000.0000] # [0081] <control>
0082 ; [.0000.0000.0000.0000] # [0082] BREAK PERMITTED HERE (in 6429)
0083 ; [.0000.0000.0000.0000] # [0083] NO BREAK HERE (in 6429)
0084 ; [.0000.0000.0000.0000] # [0084] <control>
0086 ; [.0000.0000.0000.0000] # [0086] START OF SELECTED AREA (in 6429)
0087 ; [.0000.0000.0000.0000] # [0087] END OF SELECTED AREA (in 6429)
0088 ; [.0000.0000.0000.0000] # [0088] CHARACTER TABULATION SET (in 6429)
0089 ; [.0000.0000.0000.0000] # [0089] CHARACTER TABULATION WITH JUSTIFICATION (in 6429)
008A ; [.0000.0000.0000.0000] # [008A] LINE TABULATION SET (in 6429)
008B ; [.0000.0000.0000.0000] # [008B] PARTIAL LINE FORWARD (in 6429)
008C ; [.0000.0000.0000.0000] # [008C] PARTIAL LINE BACKWARD (in 6429)
008D ; [.0000.0000.0000.0000] # [008D] PARTIAL LINE FEED (in 6429)
008E ; [.0000.0000.0000.0000] # [008E] SINGLE SHIFT TWO (in 6429)
008F ; [.0000.0000.0000.0000] # [008F] SINGLE SHIFT THREE (in 6429)
0090 ; [.0000.0000.0000.0000] # [0090] DEVICE CONTROL STRING (in 6429)
0091 ; [.0000.0000.0000.0000] # [0091] PRIVATE USE ONE (in 6429)
0092 ; [.0000.0000.0000.0000] # [0092] PRIVATE USE TWO (in 6429)
0093 ; [.0000.0000.0000.0000] # [0093] SET TRANSMIT STATE (in 6429)
0094 ; [.0000.0000.0000.0000] # [0094] CANCEL CHARACTER (in 6429)
0095 ; [.0000.0000.0000.0000] # [0095] MESSAGE WAITING (in 6429)
0096 ; [.0000.0000.0000.0000] # [0096] START OF GUARDED AREA (in 6429)
0097 ; [.0000.0000.0000.0000] # [0097] END OF GUARDED AREA (in 6429)
0098 ; [.0000.0000.0000.0000] # [0098] START OF STRING (in 6429)
0099 ; [.0000.0000.0000.0000] # [0099] <control>
009A ; [.0000.0000.0000.0000] # [009A] SINGLE CHARACTER INTRODUCER (in 6429)
009B ; [.0000.0000.0000.0000] # [009B] CONTROL SEQUENCE INTRODUCER (in 6429)
009C ; [.0000.0000.0000.0000] # [009C] STRING TERMINATOR (in 6429)
009D ; [.0000.0000.0000.0000] # [009D] OPERATING SYSTEM COMMAND (in 6429)
009E ; [.0000.0000.0000.0000] # [009E] PRIVACY MESSAGE (in 6429)
009F ; [.0000.0000.0000.0000] # [009F] APPLICATION PROGRAM COMMAND (in 6429)
200B ; [.0000.0000.0000.0000] # [200B] ZERO WIDTH SPACE
200C ; [.0000.0000.0000.0000] # [200C] ZERO WIDTH NON-JOINER
200D ; [.0000.0000.0000.0000] # [200D] ZERO WIDTH JOINER
200E ; [.0000.0000.0000.0000] # [200E] LEFT-TO-RIGHT MARK
200F ; [.0000.0000.0000.0000] # [200F] RIGHT-TO-LEFT MARK
202A ; [.0000.0000.0000.0000] # [202A] LEFT-TO-RIGHT EMBEDDING
202B ; [.0000.0000.0000.0000] # [202B] RIGHT-TO-LEFT EMBEDDING
202C ; [.0000.0000.0000.0000] # [202C] POP DIRECTIONAL FORMATTING
202D ; [.0000.0000.0000.0000] # [202D] LEFT-TO-RIGHT OVERRIDE
202E ; [.0000.0000.0000.0000] # [202E] RIGHT-TO-LEFT OVERRIDE
206A ; [.0000.0000.0000.0000] # [206A] INHIBIT SYMMETRIC SWAPPING
206B ; [.0000.0000.0000.0000] # [206B] ACTIVATE SYMMETRIC SWAPPING
206C ; [.0000.0000.0000.0000] # [206C] INHIBIT ARABIC FORM SHAPING
206D ; [.0000.0000.0000.0000] # [206D] ACTIVATE ARABIC FORM SHAPING
206E ; [.0000.0000.0000.0000] # [206E] NATIONAL DIGIT SHAPES
206F ; [.0000.0000.0000.0000] # [206F] NOMINAL DIGIT SHAPES
0009 ; [*0201.0020.0002.0009] # HORIZONTAL TABULATION (in 6429)
000A ; [*0202.0020.0002.000A] # LINE FEED (in 6429)
000B ; [*0203.0020.0002.000B] # VERTICAL TABULATION (in 6429)
000C ; [*0204.0020.0002.000C] # FORM FEED (in 6429)
000D ; [*0205.0020.0002.000D] # CARRIAGE RETURN (in 6429)
0020 ; [*0209.0020.0002.0020] # SPACE
0021 ; [*024B.0020.0002.0021] # EXCLAMATION MARK
0022 ; [*0270.0020.0002.0022] # QUOTATION MARK
0023 ; [*02A9.0020.0002.0023] # NUMBER SIGN
0025 ; [*02AA.0020.0002.0025] # PERCENT SIGN
0026 ; [*02A7.0020.0002.0026] # AMPERSAND
0027 ; [*0269.0020.0002.0027] # APOSTROPHE
0028 ; [*027A.0020.0002.0028] # LEFT PARENTHESIS
0029 ; [*027B.0020.0002.0029] # RIGHT PARENTHESIS
002A ; [*02A2.0020.0002.002A] # ASTERISK
002B ; [*039F.0020.0002.002B] # PLUS SIGN
002C ; [*022D.0020.0002.002C] # COMMA
002D ; [*0221.0020.0002.002D] # HYPHEN-MINUS
002E ; [*0255.0020.0002.002E] # FULL STOP
002F ; [*02A4.0020.0002.002F] # SOLIDUS
003A ; [*0237.0020.0002.003A] # COLON
003B ; [*0235.0020.0002.003B] # SEMICOLON
003C ; [*03A3.0020.0002.003C] # LESS-THAN SIGN
003D ; [*03A4.0020.0002.003D] # EQUALS SIGN
003E ; [*03A5.0020.0002.003E] # GREATER-THAN SIGN
003F ; [*024E.0020.0002.003F] # QUESTION MARK
0040 ; [*02A1.0020.0002.0040] # COMMERCIAL AT
005B ; [*027C.0020.0002.005B] # LEFT SQUARE BRACKET
005C ; [*02A6.0020.0002.005C] # REVERSE SOLIDUS
005D ; [*027D.0020.0002.005D] # RIGHT SQUARE BRACKET
005E ; [*020F.0020.0002.005E] # CIRCUMFLEX ACCENT
005F ; [*021B.0020.0002.005F] # LOW LINE
0060 ; [*020C.0020.0002.0060] # GRAVE ACCENT
007B ; [*027E.0020.0002.007B] # LEFT CURLY BRACKET
007C ; [*03A7.0020.0002.007C] # VERTICAL LINE
007D ; [*027F.0020.0002.007D] # RIGHT CURLY BRACKET
007E ; [*03AA.0020.0002.007E] # TILDE
0085 ; [*0206.0020.0002.0085] # NEXT LINE (in 6429)
00A0 ; [*0209.0020.001B.00A0] # NO-BREAK SPACE; QQK
00A1 ; [*024C.0020.0002.00A1] # INVERTED EXCLAMATION MARK
00A6 ; [*03A8.0020.0002.00A6] # BROKEN BAR
00A7 ; [*029C.0020.0002.00A7] # SECTION SIGN
00A8 ; [*0214.0020.0002.00A8] # DIAERESIS
00A9 ; [*029F.0020.0002.00A9] # COPYRIGHT SIGN
00AB ; [*0278.0020.0002.00AB] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
00AC ; [*03A6.0020.0002.00AC] # NOT SIGN
00AD ; [*0220.0020.0002.00AD] # SOFT HYPHEN
00AE ; [*02A0.0020.0002.00AE] # REGISTERED SIGN
00AF ; [*0210.0020.0002.00AF] # MACRON
00B0 ; [*030A.0020.0002.00B0] # DEGREE SIGN
00B1 ; [*03A0.0020.0002.00B1] # PLUS-MINUS SIGN
00B4 ; [*020D.0020.0002.00B4] # ACUTE ACCENT
00B6 ; [*029D.0020.0002.00B6] # PILCROW SIGN
00B7 ; [*025F.0020.0002.00B7] # MIDDLE DOT
00B8 ; [*0219.0020.0002.00B8] # CEDILLA
00BB ; [*0279.0020.0002.00BB] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
00BF ; [*024F.0020.0002.00BF] # INVERTED QUESTION MARK
00D7 ; [*03A2.0020.0002.00D7] # MULTIPLICATION SIGN
00F7 ; [*03A1.0020.0002.00F7] # DIVISION SIGN
2000 ; [*0209.0020.0004.2000] # EN QUAD; QQK
2001 ; [*0209.0020.0004.2001] # EM QUAD; QQK
2002 ; [*0209.0020.0004.2002] # EN SPACE; QQK
2003 ; [*0209.0020.0004.2003] # EM SPACE; QQK
2004 ; [*0209.0020.0004.2004] # THREE-PER-EM SPACE; QQK
2005 ; [*0209.0020.0004.2005] # FOUR-PER-EM SPACE; QQK
2006 ; [*0209.0020.0004.2006] # SIX-PER-EM SPACE; QQK
2007 ; [*0209.0020.001B.2007] # FIGURE SPACE; QQK
2008 ; [*0209.0020.0004.2008] # PUNCTUATION SPACE; QQK
2009 ; [*0209.0020.0004.2009] # THIN SPACE; QQK
200A ; [*0209.0020.0004.200A] # HAIR SPACE; QQK
2010 ; [*0225.0020.0002.2010] # HYPHEN
2011 ; [*0225.0020.001B.2011] # NON-BREAKING HYPHEN; QQK
2012 ; [*0226.0020.0002.2012] # FIGURE DASH
2013 ; [*0227.0020.0002.2013] # EN DASH
2014 ; [*0228.0020.0002.2014] # EM DASH
2015 ; [*0229.0020.0002.2015] # HORIZONTAL BAR
2016 ; [*03A9.0020.0002.2016] # DOUBLE VERTICAL LINE
2017 ; [*021C.0020.0002.2017] # DOUBLE LOW LINE
2018 ; [*026A.0020.0002.2018] # LEFT SINGLE QUOTATION MARK
2019 ; [*026B.0020.0002.2019] # RIGHT SINGLE QUOTATION MARK
201A ; [*026C.0020.0002.201A] # SINGLE LOW-9 QUOTATION MARK
201B ; [*026D.0020.0002.201B] # SINGLE HIGH-REVERSED-9 QUOTATION MARK
201C ; [*0271.0020.0002.201C] # LEFT DOUBLE QUOTATION MARK
201D ; [*0272.0020.0002.201D] # RIGHT DOUBLE QUOTATION MARK
201E ; [*0273.0020.0002.201E] # DOUBLE LOW-9 QUOTATION MARK
201F ; [*0274.0020.0002.201F] # DOUBLE HIGH-REVERSED-9 QUOTATION MARK
2020 ; [*02AE.0020.0002.2020] # DAGGER
2021 ; [*02AF.0020.0002.2021] # DOUBLE DAGGER
2022 ; [*02B0.0020.0002.2022] # BULLET
2023 ; [*02B1.0020.0002.2023] # TRIANGULAR BULLET
2024 ; [*0255.0020.0004.2024] # ONE DOT LEADER; QQK
2025 ; [*0255.0020.0004.2025][*0255.0020.0004.2025] # TWO DOT LEADER; QQKN
2026 ; [*0255.0020.0004.2026][*0255.0020.0004.2026][*0255.0020.001F.2026] # HORIZONTAL ELLIPSIS; QQKN
2027 ; [*02B2.0020.0002.2027] # HYPHENATION POINT
2028 ; [*0207.0020.0002.2028] # LINE SEPARATOR
2029 ; [*0208.0020.0002.2029] # PARAGRAPH SEPARATOR
202F ; [*0209.0020.001B.202F] # NARROW NO-BREAK SPACE; QQK
2030 ; [*02AC.0020.0002.2030] # PER MILLE SIGN
2031 ; [*02AD.0020.0002.2031] # PER TEN THOUSAND SIGN
2032 ; [*02B6.0020.0002.2032] # PRIME
2033 ; [*02B6.0020.0004.2033][*02B6.0020.0004.2033] # DOUBLE PRIME; QQKN
2034 ; [*02B6.0020.0004.2034][*02B6.0020.0004.2034][*02B6.0020.001F.2034] # TRIPLE PRIME; QQKN
2035 ; [*02B7.0020.0002.2035] # REVERSED PRIME
2036 ; [*02B7.0020.0004.2036][*02B7.0020.0004.2036] # REVERSED DOUBLE PRIME; QQKN
2037 ; [*02B7.0020.0004.2037][*02B7.0020.0004.2037][*02B7.0020.001F.2037] # REVERSED TRIPLE PRIME; QQKN
2038 ; [*02B9.0020.0002.2038] # CARET
2039 ; [*026E.0020.0002.2039] # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
203A ; [*026F.0020.0002.203A] # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
203B ; [*02BA.0020.0002.203B] # REFERENCE MARK
203C ; [*024B.0020.0004.203C][*024B.0020.0004.203C] # DOUBLE EXCLAMATION MARK; QQKN
203D ; [*0254.0020.0002.203D] # INTERROBANG
203E ; [*0211.0020.0002.203E] # OVERLINE
203F ; [*02BB.0020.0002.203F] # UNDERTIE
2040 ; [*02BC.0020.0002.2040] # CHARACTER TIE
2041 ; [*02BD.0020.0002.2041] # CARET INSERTION POINT
2042 ; [*02BE.0020.0002.2042] # ASTERISM
2043 ; [*02B3.0020.0002.2043] # HYPHEN BULLET
2044 ; [*02A5.0020.0002.2044] # FRACTION SLASH
2045 ; [*0286.0020.0002.2045] # LEFT SQUARE BRACKET WITH QUILL
2046 ; [*0287.0020.0002.2046] # RIGHT SQUARE BRACKET WITH QUILL
2048 ; [*024E.0020.0004.2048][*024B.0020.0004.2048] # QUESTION EXCLAMATION MARK; QQKN
2049 ; [*024B.0020.0004.2049][*024E.0020.0004.2049] # EXCLAMATION QUESTION MARK; QQKN
204A ; [*02A8.0020.0002.204A] # TIRONIAN SIGN ET
204B ; [*029E.0020.0002.204B] # REVERSED PILCROW SIGN
204C ; [*02B4.0020.0002.204C] # BLACK LEFTWARDS BULLET
204D ; [*02B5.0020.0002.204D] # BLACK RIGHTWARDS BULLET
309B ; [*021E.0020.0002.309B] # KATAKANA-HIRAGANA VOICED SOUND MARK
309C ; [*021F.0020.0002.309C] # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
30FB ; [*022C.0020.0002.30FB] # KATAKANA MIDDLE DOT
0332 ; [.0000.0021.0002.0332] # COMBINING LOW LINE
0313 ; [.0000.0022.0002.0313] # COMBINING COMMA ABOVE
0343 ; [.0000.0022.0002.0343] # COMBINING GREEK KORONIS; QQC
0314 ; [.0000.002A.0002.0314] # COMBINING REVERSED COMMA ABOVE
0301 ; [.0000.0032.0002.0301] # COMBINING ACUTE ACCENT
0341 ; [.0000.0032.0002.0341] # COMBINING ACUTE TONE MARK; QQC
0300 ; [.0000.0035.0002.0300] # COMBINING GRAVE ACCENT
0340 ; [.0000.0035.0002.0340] # COMBINING GRAVE TONE MARK; QQC
0306 ; [.0000.0037.0002.0306] # COMBINING BREVE
0302 ; [.0000.003C.0002.0302] # COMBINING CIRCUMFLEX ACCENT
030C ; [.0000.0041.0002.030C] # COMBINING CARON
030A ; [.0000.0043.0002.030A] # COMBINING RING ABOVE
0342 ; [.0000.0045.0002.0342] # COMBINING GREEK PERISPOMENI
0308 ; [.0000.0047.0002.0308] # COMBINING DIAERESIS
0344 ; [.0000.0047.0002.0308][.0000.0032.0002.0301] # COMBINING GREEK DIALYTIKA TONOS; QQCM
030B ; [.0000.004D.0002.030B] # COMBINING DOUBLE ACUTE ACCENT
0303 ; [.0000.004E.0002.0303] # COMBINING TILDE
0307 ; [.0000.0052.0002.0307] # COMBINING DOT ABOVE
0338 ; [.0000.0054.0002.0338] # COMBINING LONG SOLIDUS OVERLAY
0327 ; [.0000.0055.0002.0327] # COMBINING CEDILLA
0328 ; [.0000.0058.0002.0328] # COMBINING OGONEK
0304 ; [.0000.005A.0002.0304] # COMBINING MACRON
0305 ; [.0000.005E.0002.0305] # COMBINING OVERLINE
0309 ; [.0000.005F.0002.0309] # COMBINING HOOK ABOVE
030D ; [.0000.0060.0002.030D] # COMBINING VERTICAL LINE ABOVE
030E ; [.0000.0061.0002.030E] # COMBINING DOUBLE VERTICAL LINE ABOVE
030F ; [.0000.0062.0002.030F] # COMBINING DOUBLE GRAVE ACCENT
0310 ; [.0000.0063.0002.0310] # COMBINING CANDRABINDU
0311 ; [.0000.0064.0002.0311] # COMBINING INVERTED BREVE
0312 ; [.0000.0065.0002.0312] # COMBINING TURNED COMMA ABOVE
0315 ; [.0000.0066.0002.0315] # COMBINING COMMA ABOVE RIGHT
0316 ; [.0000.0067.0002.0316] # COMBINING GRAVE ACCENT BELOW
0317 ; [.0000.0068.0002.0317] # COMBINING ACUTE ACCENT BELOW
0318 ; [.0000.0069.0002.0318] # COMBINING LEFT TACK BELOW
0319 ; [.0000.006A.0002.0319] # COMBINING RIGHT TACK BELOW
031A ; [.0000.006B.0002.031A] # COMBINING LEFT ANGLE ABOVE
031B ; [.0000.006C.0002.031B] # COMBINING HORN
031C ; [.0000.0072.0002.031C] # COMBINING LEFT HALF RING BELOW
031D ; [.0000.0073.0002.031D] # COMBINING UP TACK BELOW
031E ; [.0000.0074.0002.031E] # COMBINING DOWN TACK BELOW
031F ; [.0000.0075.0002.031F] # COMBINING PLUS SIGN BELOW
0320 ; [.0000.0076.0002.0320] # COMBINING MINUS SIGN BELOW
0321 ; [.0000.0077.0002.0321] # COMBINING PALATALIZED HOOK BELOW
0322 ; [.0000.0078.0002.0322] # COMBINING RETROFLEX HOOK BELOW
0323 ; [.0000.0079.0002.0323] # COMBINING DOT BELOW
0324 ; [.0000.007E.0002.0324] # COMBINING DIAERESIS BELOW
0325 ; [.0000.007F.0002.0325] # COMBINING RING BELOW
0326 ; [.0000.0080.0002.0326] # COMBINING COMMA BELOW
0329 ; [.0000.0081.0002.0329] # COMBINING VERTICAL LINE BELOW
032A ; [.0000.0082.0002.032A] # COMBINING BRIDGE BELOW
032B ; [.0000.0083.0002.032B] # COMBINING INVERTED DOUBLE ARCH BELOW
032C ; [.0000.0084.0002.032C] # COMBINING CARON BELOW
032D ; [.0000.0085.0002.032D] # COMBINING CIRCUMFLEX ACCENT BELOW
032E ; [.0000.0086.0002.032E] # COMBINING BREVE BELOW
032F ; [.0000.0087.0002.032F] # COMBINING INVERTED BREVE BELOW
0330 ; [.0000.0088.0002.0330] # COMBINING TILDE BELOW
0331 ; [.0000.0089.0002.0331] # COMBINING MACRON BELOW
0333 ; [.0000.008A.0002.0333] # COMBINING DOUBLE LOW LINE
0334 ; [.0000.008B.0002.0334] # COMBINING TILDE OVERLAY
0335 ; [.0000.008C.0002.0335] # COMBINING SHORT STROKE OVERLAY
0336 ; [.0000.008D.0002.0336] # COMBINING LONG STROKE OVERLAY
0337 ; [.0000.008E.0002.0337] # COMBINING SHORT SOLIDUS OVERLAY
0339 ; [.0000.008F.0002.0339] # COMBINING RIGHT HALF RING BELOW
033A ; [.0000.0090.0002.033A] # COMBINING INVERTED BRIDGE BELOW
033B ; [.0000.0091.0002.033B] # COMBINING SQUARE BELOW
033C ; [.0000.0092.0002.033C] # COMBINING SEAGULL BELOW
033D ; [.0000.0093.0002.033D] # COMBINING X ABOVE
033E ; [.0000.0094.0002.033E] # COMBINING VERTICAL TILDE
033F ; [.0000.0095.0002.033F] # COMBINING DOUBLE OVERLINE
0345 ; [.0000.0096.0002.0345] # COMBINING GREEK YPOGEGRAMMENI
0346 ; [.0000.0097.0002.0346] # COMBINING BRIDGE ABOVE
0347 ; [.0000.0098.0002.0347] # COMBINING EQUALS SIGN BELOW
0348 ; [.0000.0099.0002.0348] # COMBINING DOUBLE VERTICAL LINE BELOW
0349 ; [.0000.009A.0002.0349] # COMBINING LEFT ANGLE BELOW
034A ; [.0000.009B.0002.034A] # COMBINING NOT TILDE ABOVE
034B ; [.0000.009C.0002.034B] # COMBINING HOMOTHETIC ABOVE
034C ; [.0000.009D.0002.034C] # COMBINING ALMOST EQUAL TO ABOVE
034D ; [.0000.009E.0002.034D] # COMBINING LEFT RIGHT ARROW BELOW
034E ; [.0000.009F.0002.034E] # COMBINING UPWARDS ARROW BELOW
0360 ; [.0000.00A0.0002.0360] # COMBINING DOUBLE TILDE
0361 ; [.0000.00A1.0002.0361] # COMBINING DOUBLE INVERTED BREVE
0362 ; [.0000.00A2.0002.0362] # COMBINING DOUBLE RIGHTWARDS ARROW BELOW
3099 ; [.0000.013D.0002.3099] # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
309A ; [.0000.013E.0002.309A] # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
309D ; [.09DB.0020.0002.309D] # HIRAGANA ITERATION MARK
309E ; [.09DB.0020.0002.309D][.0000.013D.0002.3099] # HIRAGANA VOICED ITERATION MARK; QQCM
30FC ; [.09DC.0020.0002.30FC] # KATAKANA-HIRAGANA PROLONGED SOUND MARK
30FD ; [.09DD.0020.0002.30FD] # KATAKANA ITERATION MARK
30FE ; [.09DD.0020.0002.30FD][.0000.013D.0002.3099] # KATAKANA VOICED ITERATION MARK; QQCM
00A4 ; [.09DE.0020.0002.00A4] # CURRENCY SIGN
00A2 ; [.09DF.0020.0002.00A2] # CENT SIGN
0024 ; [.09E0.0020.0002.0024] # DOLLAR SIGN
00A3 ; [.09E1.0020.0002.00A3] # POUND SIGN
00A5 ; [.09E2.0020.0002.00A5] # YEN SIGN
0030 ; [.0A0B.0020.0002.0030] # DIGIT ZERO
0031 ; [.0A0C.0020.0002.0031] # DIGIT ONE
00B9 ; [.0A0C.0020.0014.00B9] # SUPERSCRIPT ONE; QQK
00BD ; [.0A0C.0020.001E.00BD][*02A5.0020.001E.00BD][.0A0D.0020.001F.00BD] # VULGAR FRACTION ONE HALF; QQKN
00BC ; [.0A0C.0020.001E.00BC][*02A5.0020.001E.00BC][.0A0F.0020.001F.00BC] # VULGAR FRACTION ONE QUARTER; QQKN
0032 ; [.0A0D.0020.0002.0032] # DIGIT TWO
00B2 ; [.0A0D.0020.0014.00B2] # SUPERSCRIPT TWO; QQK
0033 ; [.0A0E.0020.0002.0033] # DIGIT THREE
00B3 ; [.0A0E.0020.0014.00B3] # SUPERSCRIPT THREE; QQK
00BE ; [.0A0E.0020.001E.00BE][*02A5.0020.001E.00BE][.0A0F.0020.001F.00BE] # VULGAR FRACTION THREE QUARTERS; QQKN
0034 ; [.0A0F.0020.0002.0034] # DIGIT FOUR
0035 ; [.0A10.0020.0002.0035] # DIGIT FIVE
0036 ; [.0A11.0020.0002.0036] # DIGIT SIX
0037 ; [.0A12.0020.0002.0037] # DIGIT SEVEN
0038 ; [.0A13.0020.0002.0038] # DIGIT EIGHT
0039 ; [.0A14.0020.0002.0039] # DIGIT NINE
0061 ; [.0A15.0020.0002.0061] # LATIN SMALL LETTER A
0041 ; [.0A15.0020.0008.0041] # LATIN CAPITAL LETTER A
00AA ; [.0A15.0020.0014.00AA] # FEMININE ORDINAL INDICATOR; QQK
00E1 ; [.0A15.0020.0002.0061][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH ACUTE; QQCM
00C1 ; [.0A15.0020.0008.0041][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH ACUTE; QQCM
00E0 ; [.0A15.0020.0002.0061][.0000.0035.0002.0300] # LATIN SMALL LETTER A WITH GRAVE; QQCM
00C0 ; [.0A15.0020.0008.0041][.0000.0035.0002.0300] # LATIN CAPITAL LETTER A WITH GRAVE; QQCM
00E2 ; [.0A15.0020.0002.0061][.0000.003C.0002.0302] # LATIN SMALL LETTER A WITH CIRCUMFLEX; QQCM
00C2 ; [.0A15.0020.0008.0041][.0000.003C.0002.0302] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX; QQCM
00E5 ; [.0A15.0020.0002.0061][.0000.0043.0002.030A] # LATIN SMALL LETTER A WITH RING ABOVE; QQCM
00C5 ; [.0A15.0020.0008.0041][.0000.0043.0002.030A] # LATIN CAPITAL LETTER A WITH RING ABOVE; QQCM
00E4 ; [.0A15.0020.0002.0061][.0000.0047.0002.0308] # LATIN SMALL LETTER A WITH DIAERESIS; QQCM
00C4 ; [.0A15.0020.0008.0041][.0000.0047.0002.0308] # LATIN CAPITAL LETTER A WITH DIAERESIS; QQCM
00E3 ; [.0A15.0020.0002.0061][.0000.004E.0002.0303] # LATIN SMALL LETTER A WITH TILDE; QQCM
00C3 ; [.0A15.0020.0008.0041][.0000.004E.0002.0303] # LATIN CAPITAL LETTER A WITH TILDE; QQCM
00E6 ; [.0A19.0020.0002.00E6] # LATIN SMALL LETTER AE
00C6 ; [.0A19.0020.0008.00C6] # LATIN CAPITAL LETTER AE
0062 ; [.0A29.0020.0002.0062] # LATIN SMALL LETTER B
0042 ; [.0A29.0020.0008.0042] # LATIN CAPITAL LETTER B
0063 ; [.0A3D.0020.0002.0063] # LATIN SMALL LETTER C
0043 ; [.0A3D.0020.0008.0043] # LATIN CAPITAL LETTER C
00E7 ; [.0A3D.0020.0002.0063][.0000.0055.0002.0327] # LATIN SMALL LETTER C WITH CEDILLA; QQCM
00C7 ; [.0A3D.0020.0008.0043][.0000.0055.0002.0327] # LATIN CAPITAL LETTER C WITH CEDILLA; QQCM
0064 ; [.0A49.0020.0002.0064] # LATIN SMALL LETTER D
0044 ; [.0A49.0020.0008.0044] # LATIN CAPITAL LETTER D
00F0 ; [.0A5D.0020.0002.00F0] # LATIN SMALL LETTER ETH
00D0 ; [.0A5D.0020.0008.00D0] # LATIN CAPITAL LETTER ETH
0065 ; [.0A65.0020.0002.0065] # LATIN SMALL LETTER E
0045 ; [.0A65.0020.0008.0045] # LATIN CAPITAL LETTER E
00E9 ; [.0A65.0020.0002.0065][.0000.0032.0002.0301] # LATIN SMALL LETTER E WITH ACUTE; QQCM
00C9 ; [.0A65.0020.0008.0045][.0000.0032.0002.0301] # LATIN CAPITAL LETTER E WITH ACUTE; QQCM
00E8 ; [.0A65.0020.0002.0065][.0000.0035.0002.0300] # LATIN SMALL LETTER E WITH GRAVE; QQCM
00C8 ; [.0A65.0020.0008.0045][.0000.0035.0002.0300] # LATIN CAPITAL LETTER E WITH GRAVE; QQCM
00EA ; [.0A65.0020.0002.0065][.0000.003C.0002.0302] # LATIN SMALL LETTER E WITH CIRCUMFLEX; QQCM
00CA ; [.0A65.0020.0008.0045][.0000.003C.0002.0302] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX; QQCM
00EB ; [.0A65.0020.0002.0065][.0000.0047.0002.0308] # LATIN SMALL LETTER E WITH DIAERESIS; QQCM
00CB ; [.0A65.0020.0008.0045][.0000.0047.0002.0308] # LATIN CAPITAL LETTER E WITH DIAERESIS; QQCM
0066 ; [.0A91.0020.0002.0066] # LATIN SMALL LETTER F
0046 ; [.0A91.0020.0008.0046] # LATIN CAPITAL LETTER F
0067 ; [.0A99.0020.0002.0067] # LATIN SMALL LETTER G
0047 ; [.0A99.0020.0008.0047] # LATIN CAPITAL LETTER G
0068 ; [.0AB9.0020.0002.0068] # LATIN SMALL LETTER H
0048 ; [.0AB9.0020.0008.0048] # LATIN CAPITAL LETTER H
0069 ; [.0AD3.0020.0002.0069] # LATIN SMALL LETTER I
0049 ; [.0AD3.0020.0008.0049] # LATIN CAPITAL LETTER I
00ED ; [.0AD3.0020.0002.0069][.0000.0032.0002.0301] # LATIN SMALL LETTER I WITH ACUTE; QQCM
00CD ; [.0AD3.0020.0008.0049][.0000.0032.0002.0301] # LATIN CAPITAL LETTER I WITH ACUTE; QQCM
00EC ; [.0AD3.0020.0002.0069][.0000.0035.0002.0300] # LATIN SMALL LETTER I WITH GRAVE; QQCM
00CC ; [.0AD3.0020.0008.0049][.0000.0035.0002.0300] # LATIN CAPITAL LETTER I WITH GRAVE; QQCM
00EE ; [.0AD3.0020.0002.0069][.0000.003C.0002.0302] # LATIN SMALL LETTER I WITH CIRCUMFLEX; QQCM
00CE ; [.0AD3.0020.0008.0049][.0000.003C.0002.0302] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX; QQCM
00EF ; [.0AD3.0020.0002.0069][.0000.0047.0002.0308] # LATIN SMALL LETTER I WITH DIAERESIS; QQCM
00CF ; [.0AD3.0020.0008.0049][.0000.0047.0002.0308] # LATIN CAPITAL LETTER I WITH DIAERESIS; QQCM
006A ; [.0AE7.0020.0002.006A] # LATIN SMALL LETTER J
004A ; [.0AE7.0020.0008.004A] # LATIN CAPITAL LETTER J
006B ; [.0AF7.0020.0002.006B] # LATIN SMALL LETTER K
004B ; [.0AF7.0020.0008.004B] # LATIN CAPITAL LETTER K
006C ; [.0B03.0020.0002.006C] # LATIN SMALL LETTER L
004C ; [.0B03.0020.0008.004C] # LATIN CAPITAL LETTER L
006D ; [.0B2B.0020.0002.006D] # LATIN SMALL LETTER M
004D ; [.0B2B.0020.0008.004D] # LATIN CAPITAL LETTER M
006E ; [.0B33.0020.0002.006E] # LATIN SMALL LETTER N
004E ; [.0B33.0020.0008.004E] # LATIN CAPITAL LETTER N
00F1 ; [.0B33.0020.0002.006E][.0000.004E.0002.0303] # LATIN SMALL LETTER N WITH TILDE; QQCM
00D1 ; [.0B33.0020.0008.004E][.0000.004E.0002.0303] # LATIN CAPITAL LETTER N WITH TILDE; QQCM
006F ; [.0B4B.0020.0002.006F] # LATIN SMALL LETTER O
004F ; [.0B4B.0020.0008.004F] # LATIN CAPITAL LETTER O
00BA ; [.0B4B.0020.0014.00BA] # MASCULINE ORDINAL INDICATOR; QQK
00F3 ; [.0B4B.0020.0002.006F][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH ACUTE; QQCM
00D3 ; [.0B4B.0020.0008.004F][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH ACUTE; QQCM
00F2 ; [.0B4B.0020.0002.006F][.0000.0035.0002.0300] # LATIN SMALL LETTER O WITH GRAVE; QQCM
00D2 ; [.0B4B.0020.0008.004F][.0000.0035.0002.0300] # LATIN CAPITAL LETTER O WITH GRAVE; QQCM
00F4 ; [.0B4B.0020.0002.006F][.0000.003C.0002.0302] # LATIN SMALL LETTER O WITH CIRCUMFLEX; QQCM
00D4 ; [.0B4B.0020.0008.004F][.0000.003C.0002.0302] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX; QQCM
00F6 ; [.0B4B.0020.0002.006F][.0000.0047.0002.0308] # LATIN SMALL LETTER O WITH DIAERESIS; QQCM
00D6 ; [.0B4B.0020.0008.004F][.0000.0047.0002.0308] # LATIN CAPITAL LETTER O WITH DIAERESIS; QQCM
00F5 ; [.0B4B.0020.0002.006F][.0000.004E.0002.0303] # LATIN SMALL LETTER O WITH TILDE; QQCM
00D5 ; [.0B4B.0020.0008.004F][.0000.004E.0002.0303] # LATIN CAPITAL LETTER O WITH TILDE; QQCM
00F8 ; [.0B53.0020.0002.00F8] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.0B53.0020.0008.00D8] # LATIN CAPITAL LETTER O WITH STROKE
0070 ; [.0B67.0020.0002.0070] # LATIN SMALL LETTER P
0050 ; [.0B67.0020.0008.0050] # LATIN CAPITAL LETTER P
0071 ; [.0B73.0020.0002.0071] # LATIN SMALL LETTER Q
0051 ; [.0B73.0020.0008.0051] # LATIN CAPITAL LETTER Q
0072 ; [.0B7F.0020.0002.0072] # LATIN SMALL LETTER R
0052 ; [.0B7F.0020.0008.0052] # LATIN CAPITAL LETTER R
0073 ; [.0BA7.0020.0002.0073] # LATIN SMALL LETTER S
0053 ; [.0BA7.0020.0008.0053] # LATIN CAPITAL LETTER S
00DF ; [.0BA7.0020.0004.00DF][.0000.0153.0004.00DF][.0BA7.0020.001F.00DF] # LATIN SMALL LETTER SHARP S; QQKN
0074 ; [.0BBF.0020.0002.0074] # LATIN SMALL LETTER T
0054 ; [.0BBF.0020.0008.0054] # LATIN CAPITAL LETTER T
0075 ; [.0BD7.0020.0002.0075] # LATIN SMALL LETTER U
0055 ; [.0BD7.0020.0008.0055] # LATIN CAPITAL LETTER U
00FA ; [.0BD7.0020.0002.0075][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH ACUTE; QQCM
00DA ; [.0BD7.0020.0008.0055][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH ACUTE; QQCM
00F9 ; [.0BD7.0020.0002.0075][.0000.0035.0002.0300] # LATIN SMALL LETTER U WITH GRAVE; QQCM
00D9 ; [.0BD7.0020.0008.0055][.0000.0035.0002.0300] # LATIN CAPITAL LETTER U WITH GRAVE; QQCM
00FB ; [.0BD7.0020.0002.0075][.0000.003C.0002.0302] # LATIN SMALL LETTER U WITH CIRCUMFLEX; QQCM
00DB ; [.0BD7.0020.0008.0055][.0000.003C.0002.0302] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX; QQCM
00FC ; [.0BD7.0020.0002.0075][.0000.0047.0002.0308] # LATIN SMALL LETTER U WITH DIAERESIS; QQCM
00DC ; [.0BD7.0020.0008.0055][.0000.0047.0002.0308] # LATIN CAPITAL LETTER U WITH DIAERESIS; QQCM
0076 ; [.0BEF.0020.0002.0076] # LATIN SMALL LETTER V
0056 ; [.0BEF.0020.0008.0056] # LATIN CAPITAL LETTER V
0077 ; [.0BFB.0020.0002.0077] # LATIN SMALL LETTER W
0057 ; [.0BFB.0020.0008.0057] # LATIN CAPITAL LETTER W
0078 ; [.0C03.0020.0002.0078] # LATIN SMALL LETTER X
0058 ; [.0C03.0020.0008.0058] # LATIN CAPITAL LETTER X
0079 ; [.0C07.0020.0002.0079] # LATIN SMALL LETTER Y
0059 ; [.0C07.0020.0008.0059] # LATIN CAPITAL LETTER Y
00FD ; [.0C07.0020.0002.0079][.0000.0032.0002.0301] # LATIN SMALL LETTER Y WITH ACUTE; QQCM
00DD ; [.0C07.0020.0008.0059][.0000.0032.0002.0301] # LATIN CAPITAL LETTER Y WITH ACUTE; QQCM
00FF ; [.0C07.0020.0002.0079][.0000.0047.0002.0308] # LATIN SMALL LETTER Y WITH DIAERESIS; QQCM
007A ; [.0C13.0020.0002.007A] # LATIN SMALL LETTER Z
005A ; [.0C13.0020.0008.005A] # LATIN CAPITAL LETTER Z
00FE ; [.0C3B.0020.0002.00FE] # LATIN SMALL LETTER THORN
00DE ; [.0C3B.0020.0008.00DE] # LATIN CAPITAL LETTER THORN
00B5 ; [.0C9F.0020.0004.00B5] # MICRO SIGN; QQK
1100 ; [.1831.0020.0002.1100] # HANGUL CHOSEONG KIYEOK
1101 ; [.1832.0020.0002.1101] # HANGUL CHOSEONG SSANGKIYEOK
1102 ; [.1833.0020.0002.1102] # HANGUL CHOSEONG NIEUN
1103 ; [.1834.0020.0002.1103] # HANGUL CHOSEONG TIKEUT
1104 ; [.1835.0020.0002.1104] # HANGUL CHOSEONG SSANGTIKEUT
1105 ; [.1836.0020.0002.1105] # HANGUL CHOSEONG RIEUL
1106 ; [.1837.0020.0002.1106] # HANGUL CHOSEONG MIEUM
1107 ; [.1838.0020.0002.1107] # HANGUL CHOSEONG PIEUP
1108 ; [.1839.0020.0002.1108] # HANGUL CHOSEONG SSANGPIEUP
1109 ; [.183A.0020.0002.1109] # HANGUL CHOSEONG SIOS
110A ; [.183B.0020.0002.110A] # HANGUL CHOSEONG SSANGSIOS
110B ; [.183C.0020.0002.110B] # HANGUL CHOSEONG IEUNG
110C ; [.183D.0020.0002.110C] # HANGUL CHOSEONG CIEUC
110D ; [.183E.0020.0002.110D] # HANGUL CHOSEONG SSANGCIEUC
110E ; [.183F.0020.0002.110E] # HANGUL CHOSEONG CHIEUCH
110F ; [.1840.0020.0002.110F] # HANGUL CHOSEONG KHIEUKH
1110 ; [.1841.0020.0002.1110] # HANGUL CHOSEONG THIEUTH
1111 ; [.1842.0020.0002.1111] # HANGUL CHOSEONG PHIEUPH
1112 ; [.1843.0020.0002.1112] # HANGUL CHOSEONG HIEUH
1113 ; [.1844.0020.0002.1113] # HANGUL CHOSEONG NIEUN-KIYEOK
1114 ; [.1845.0020.0002.1114] # HANGUL CHOSEONG SSANGNIEUN
1115 ; [.1846.0020.0002.1115] # HANGUL CHOSEONG NIEUN-TIKEUT
1116 ; [.1847.0020.0002.1116] # HANGUL CHOSEONG NIEUN-PIEUP
1117 ; [.1848.0020.0002.1117] # HANGUL CHOSEONG TIKEUT-KIYEOK
1118 ; [.1849.0020.0002.1118] # HANGUL CHOSEONG RIEUL-NIEUN
1119 ; [.184A.0020.0002.1119] # HANGUL CHOSEONG SSANGRIEUL
111A ; [.184B.0020.0002.111A] # HANGUL CHOSEONG RIEUL-HIEUH
111B ; [.184C.0020.0002.111B] # HANGUL CHOSEONG KAPYEOUNRIEUL
111C ; [.184D.0020.0002.111C] # HANGUL CHOSEONG MIEUM-PIEUP
111D ; [.184E.0020.0002.111D] # HANGUL CHOSEONG KAPYEOUNMIEUM
111E ; [.184F.0020.0002.111E] # HANGUL CHOSEONG PIEUP-KIYEOK
111F ; [.1850.0020.0002.111F] # HANGUL CHOSEONG PIEUP-NIEUN
1120 ; [.1851.0020.0002.1120] # HANGUL CHOSEONG PIEUP-TIKEUT
1121 ; [.1852.0020.0002.1121] # HANGUL CHOSEONG PIEUP-SIOS
1122 ; [.1853.0020.0002.1122] # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
1123 ; [.1854.0020.0002.1123] # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
1124 ; [.1855.0020.0002.1124] # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
1125 ; [.1856.0020.0002.1125] # HANGUL CHOSEONG PIEUP-SSANGSIOS
1126 ; [.1857.0020.0002.1126] # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
1127 ; [.1858.0020.0002.1127] # HANGUL CHOSEONG PIEUP-CIEUC
1128 ; [.1859.0020.0002.1128] # HANGUL CHOSEONG PIEUP-CHIEUCH
1129 ; [.185A.0020.0002.1129] # HANGUL CHOSEONG PIEUP-THIEUTH
112A ; [.185B.0020.0002.112A] # HANGUL CHOSEONG PIEUP-PHIEUPH
112B ; [.185C.0020.0002.112B] # HANGUL CHOSEONG KAPYEOUNPIEUP
112C ; [.185D.0020.0002.112C] # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
112D ; [.185E.0020.0002.112D] # HANGUL CHOSEONG SIOS-KIYEOK
112E ; [.185F.0020.0002.112E] # HANGUL CHOSEONG SIOS-NIEUN
112F ; [.1860.0020.0002.112F] # HANGUL CHOSEONG SIOS-TIKEUT
1130 ; [.1861.0020.0002.1130] # HANGUL CHOSEONG SIOS-RIEUL
1131 ; [.1862.0020.0002.1131] # HANGUL CHOSEONG SIOS-MIEUM
1132 ; [.1863.0020.0002.1132] # HANGUL CHOSEONG SIOS-PIEUP
1133 ; [.1864.0020.0002.1133] # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
1134 ; [.1865.0020.0002.1134] # HANGUL CHOSEONG SIOS-SSANGSIOS
1135 ; [.1866.0020.0002.1135] # HANGUL CHOSEONG SIOS-IEUNG
1136 ; [.1867.0020.0002.1136] # HANGUL CHOSEONG SIOS-CIEUC
1137 ; [.1868.0020.0002.1137] # HANGUL CHOSEONG SIOS-CHIEUCH
1138 ; [.1869.0020.0002.1138] # HANGUL CHOSEONG SIOS-KHIEUKH
1139 ; [.186A.0020.0002.1139] # HANGUL CHOSEONG SIOS-THIEUTH
113A ; [.186B.0020.0002.113A] # HANGUL CHOSEONG SIOS-PHIEUPH
113B ; [.186C.0020.0002.113B] # HANGUL CHOSEONG SIOS-HIEUH
113C ; [.186D.0020.0002.113C] # HANGUL CHOSEONG CHITUEUMSIOS
113D ; [.186E.0020.0002.113D] # HANGUL CHOSEONG CHITUEUMSSANGSIOS
113E ; [.186F.0020.0002.113E] # HANGUL CHOSEONG CEONGCHIEUMSIOS
113F ; [.1870.0020.0002.113F] # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
1140 ; [.1871.0020.0002.1140] # HANGUL CHOSEONG PANSIOS
1141 ; [.1872.0020.0002.1141] # HANGUL CHOSEONG IEUNG-KIYEOK
1142 ; [.1873.0020.0002.1142] # HANGUL CHOSEONG IEUNG-TIKEUT
1143 ; [.1874.0020.0002.1143] # HANGUL CHOSEONG IEUNG-MIEUM
1144 ; [.1875.0020.0002.1144] # HANGUL CHOSEONG IEUNG-PIEUP
1145 ; [.1876.0020.0002.1145] # HANGUL CHOSEONG IEUNG-SIOS
1146 ; [.1877.0020.0002.1146] # HANGUL CHOSEONG IEUNG-PANSIOS
1147 ; [.1878.0020.0002.1147] # HANGUL CHOSEONG SSANGIEUNG
1148 ; [.1879.0020.0002.1148] # HANGUL CHOSEONG IEUNG-CIEUC
1149 ; [.187A.0020.0002.1149] # HANGUL CHOSEONG IEUNG-CHIEUCH
114A ; [.187B.0020.0002.114A] # HANGUL CHOSEONG IEUNG-THIEUTH
114B ; [.187C.0020.0002.114B] # HANGUL CHOSEONG IEUNG-PHIEUPH
114C ; [.187D.0020.0002.114C] # HANGUL CHOSEONG YESIEUNG
114D ; [.187E.0020.0002.114D] # HANGUL CHOSEONG CIEUC-IEUNG
114E ; [.187F.0020.0002.114E] # HANGUL CHOSEONG CHITUEUMCIEUC
114F ; [.1880.0020.0002.114F] # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
1150 ; [.1881.0020.0002.1150] # HANGUL CHOSEONG CEONGCHIEUMCIEUC
1151 ; [.1882.0020.0002.1151] # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
1152 ; [.1883.0020.0002.1152] # HANGUL CHOSEONG CHIEUCH-KHIEUKH
1153 ; [.1884.0020.0002.1153] # HANGUL CHOSEONG CHIEUCH-HIEUH
1154 ; [.1885.0020.0002.1154] # HANGUL CHOSEONG CHITUEUMCHIEUCH
1155 ; [.1886.0020.0002.1155] # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
1156 ; [.1887.0020.0002.1156] # HANGUL CHOSEONG PHIEUPH-PIEUP
1157 ; [.1888.0020.0002.1157] # HANGUL CHOSEONG KAPYEOUNPHIEUPH
1158 ; [.1889.0020.0002.1158] # HANGUL CHOSEONG SSANGHIEUH
1159 ; [.188A.0020.0002.1159] # HANGUL CHOSEONG YEORINHIEUH
115F ; [.188B.0020.0002.115F] # HANGUL CHOSEONG FILLER
1160 ; [.188C.0020.0002.1160] # HANGUL JUNGSEONG FILLER
1161 ; [.188D.0020.0002.1161] # HANGUL JUNGSEONG A
1162 ; [.188E.0020.0002.1162] # HANGUL JUNGSEONG AE
1163 ; [.188F.0020.0002.1163] # HANGUL JUNGSEONG YA
1164 ; [.1890.0020.0002.1164] # HANGUL JUNGSEONG YAE
1165 ; [.1891.0020.0002.1165] # HANGUL JUNGSEONG EO
1166 ; [.1892.0020.0002.1166] # HANGUL JUNGSEONG E
1167 ; [.1893.0020.0002.1167] # HANGUL JUNGSEONG YEO
1168 ; [.1894.0020.0002.1168] # HANGUL JUNGSEONG YE
1169 ; [.1895.0020.0002.1169] # HANGUL JUNGSEONG O
116A ; [.1896.0020.0002.116A] # HANGUL JUNGSEONG WA
116B ; [.1897.0020.0002.116B] # HANGUL JUNGSEONG WAE
116C ; [.1898.0020.0002.116C] # HANGUL JUNGSEONG OE
116D ; [.1899.0020.0002.116D] # HANGUL JUNGSEONG YO
116E ; [.189A.0020.0002.116E] # HANGUL JUNGSEONG U
116F ; [.189B.0020.0002.116F] # HANGUL JUNGSEONG WEO
1170 ; [.189C.0020.0002.1170] # HANGUL JUNGSEONG WE
1171 ; [.189D.0020.0002.1171] # HANGUL JUNGSEONG WI
1172 ; [.189E.0020.0002.1172] # HANGUL JUNGSEONG YU
1173 ; [.189F.0020.0002.1173] # HANGUL JUNGSEONG EU
1174 ; [.18A0.0020.0002.1174] # HANGUL JUNGSEONG YI
1175 ; [.18A1.0020.0002.1175] # HANGUL JUNGSEONG I
1176 ; [.18A2.0020.0002.1176] # HANGUL JUNGSEONG A-O
1177 ; [.18A3.0020.0002.1177] # HANGUL JUNGSEONG A-U
1178 ; [.18A4.0020.0002.1178] # HANGUL JUNGSEONG YA-O
1179 ; [.18A5.0020.0002.1179] # HANGUL JUNGSEONG YA-YO
117A ; [.18A6.0020.0002.117A] # HANGUL JUNGSEONG EO-O
117B ; [.18A7.0020.0002.117B] # HANGUL JUNGSEONG EO-U
117C ; [.18A8.0020.0002.117C] # HANGUL JUNGSEONG EO-EU
117D ; [.18A9.0020.0002.117D] # HANGUL JUNGSEONG YEO-O
117E ; [.18AA.0020.0002.117E] # HANGUL JUNGSEONG YEO-U
117F ; [.18AB.0020.0002.117F] # HANGUL JUNGSEONG O-EO
1180 ; [.18AC.0020.0002.1180] # HANGUL JUNGSEONG O-E
1181 ; [.18AD.0020.0002.1181] # HANGUL JUNGSEONG O-YE
1182 ; [.18AE.0020.0002.1182] # HANGUL JUNGSEONG O-O
1183 ; [.18AF.0020.0002.1183] # HANGUL JUNGSEONG O-U
1184 ; [.18B0.0020.0002.1184] # HANGUL JUNGSEONG YO-YA
1185 ; [.18B1.0020.0002.1185] # HANGUL JUNGSEONG YO-YAE
1186 ; [.18B2.0020.0002.1186] # HANGUL JUNGSEONG YO-YEO
1187 ; [.18B3.0020.0002.1187] # HANGUL JUNGSEONG YO-O
1188 ; [.18B4.0020.0002.1188] # HANGUL JUNGSEONG YO-I
1189 ; [.18B5.0020.0002.1189] # HANGUL JUNGSEONG U-A
118A ; [.18B6.0020.0002.118A] # HANGUL JUNGSEONG U-AE
118B ; [.18B7.0020.0002.118B] # HANGUL JUNGSEONG U-EO-EU
118C ; [.18B8.0020.0002.118C] # HANGUL JUNGSEONG U-YE
118D ; [.18B9.0020.0002.118D] # HANGUL JUNGSEONG U-U
118E ; [.18BA.0020.0002.118E] # HANGUL JUNGSEONG YU-A
118F ; [.18BB.0020.0002.118F] # HANGUL JUNGSEONG YU-EO
1190 ; [.18BC.0020.0002.1190] # HANGUL JUNGSEONG YU-E
1191 ; [.18BD.0020.0002.1191] # HANGUL JUNGSEONG YU-YEO
1192 ; [.18BE.0020.0002.1192] # HANGUL JUNGSEONG YU-YE
1193 ; [.18BF.0020.0002.1193] # HANGUL JUNGSEONG YU-U
1194 ; [.18C0.0020.0002.1194] # HANGUL JUNGSEONG YU-I
1195 ; [.18C1.0020.0002.1195] # HANGUL JUNGSEONG EU-U
1196 ; [.18C2.0020.0002.1196] # HANGUL JUNGSEONG EU-EU
1197 ; [.18C3.0020.0002.1197] # HANGUL JUNGSEONG YI-U
1198 ; [.18C4.0020.0002.1198] # HANGUL JUNGSEONG I-A
1199 ; [.18C5.0020.0002.1199] # HANGUL JUNGSEONG I-YA
119A ; [.18C6.0020.0002.119A] # HANGUL JUNGSEONG I-O
119B ; [.18C7.0020.0002.119B] # HANGUL JUNGSEONG I-U
119C ; [.18C8.0020.0002.119C] # HANGUL JUNGSEONG I-EU
119D ; [.18C9.0020.0002.119D] # HANGUL JUNGSEONG I-ARAEA
119E ; [.18CA.0020.0002.119E] # HANGUL JUNGSEONG ARAEA
119F ; [.18CB.0020.0002.119F] # HANGUL JUNGSEONG ARAEA-EO
11A0 ; [.18CC.0020.0002.11A0] # HANGUL JUNGSEONG ARAEA-U
11A1 ; [.18CD.0020.0002.11A1] # HANGUL JUNGSEONG ARAEA-I
11A2 ; [.18CE.0020.0002.11A2] # HANGUL JUNGSEONG SSANGARAEA
11A8 ; [.18CF.0020.0002.11A8] # HANGUL JONGSEONG KIYEOK
11A9 ; [.18D0.0020.0002.11A9] # HANGUL JONGSEONG SSANGKIYEOK
11AA ; [.18D1.0020.0002.11AA] # HANGUL JONGSEONG KIYEOK-SIOS
11AB ; [.18D2.0020.0002.11AB] # HANGUL JONGSEONG NIEUN
11AC ; [.18D3.0020.0002.11AC] # HANGUL JONGSEONG NIEUN-CIEUC
11AD ; [.18D4.0020.0002.11AD] # HANGUL JONGSEONG NIEUN-HIEUH
11AE ; [.18D5.0020.0002.11AE] # HANGUL JONGSEONG TIKEUT
11AF ; [.18D6.0020.0002.11AF] # HANGUL JONGSEONG RIEUL
11B0 ; [.18D7.0020.0002.11B0] # HANGUL JONGSEONG RIEUL-KIYEOK
11B1 ; [.18D8.0020.0002.11B1] # HANGUL JONGSEONG RIEUL-MIEUM
11B2 ; [.18D9.0020.0002.11B2] # HANGUL JONGSEONG RIEUL-PIEUP
11B3 ; [.18DA.0020.0002.11B3] # HANGUL JONGSEONG RIEUL-SIOS
11B4 ; [.18DB.0020.0002.11B4] # HANGUL JONGSEONG RIEUL-THIEUTH
11B5 ; [.18DC.0020.0002.11B5] # HANGUL JONGSEONG RIEUL-PHIEUPH
11B6 ; [.18DD.0020.0002.11B6] # HANGUL JONGSEONG RIEUL-HIEUH
11B7 ; [.18DE.0020.0002.11B7] # HANGUL JONGSEONG MIEUM
11B8 ; [.18DF.0020.0002.11B8] # HANGUL JONGSEONG PIEUP
11B9 ; [.18E0.0020.0002.11B9] # HANGUL JONGSEONG PIEUP-SIOS
11BA ; [.18E1.0020.0002.11BA] # HANGUL JONGSEONG SIOS
11BB ; [.18E2.0020.0002.11BB] # HANGUL JONGSEONG SSANGSIOS
11BC ; [.18E3.0020.0002.11BC] # HANGUL JONGSEONG IEUNG
11BD ; [.18E4.0020.0002.11BD] # HANGUL JONGSEONG CIEUC
11BE ; [.18E5.0020.0002.11BE] # HANGUL JONGSEONG CHIEUCH
11BF ; [.18E6.0020.0002.11BF] # HANGUL JONGSEONG KHIEUKH
11C0 ; [.18E7.0020.0002.11C0] # HANGUL JONGSEONG THIEUTH
11C1 ; [.18E8.0020.0002.11C1] # HANGUL JONGSEONG PHIEUPH
11C2 ; [.18E9.0020.0002.11C2] # HANGUL JONGSEONG HIEUH
11C3 ; [.18EA.0020.0002.11C3] # HANGUL JONGSEONG KIYEOK-RIEUL
11C4 ; [.18EB.0020.0002.11C4] # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
11C5 ; [.18EC.0020.0002.11C5] # HANGUL JONGSEONG NIEUN-KIYEOK
11C6 ; [.18ED.0020.0002.11C6] # HANGUL JONGSEONG NIEUN-TIKEUT
11C7 ; [.18EE.0020.0002.11C7] # HANGUL JONGSEONG NIEUN-SIOS
11C8 ; [.18EF.0020.0002.11C8] # HANGUL JONGSEONG NIEUN-PANSIOS
11C9 ; [.18F0.0020.0002.11C9] # HANGUL JONGSEONG NIEUN-THIEUTH
11CA ; [.18F1.0020.0002.11CA] # HANGUL JONGSEONG TIKEUT-KIYEOK
11CB ; [.18F2.0020.0002.11CB] # HANGUL JONGSEONG TIKEUT-RIEUL
11CC ; [.18F3.0020.0002.11CC] # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
11CD ; [.18F4.0020.0002.11CD] # HANGUL JONGSEONG RIEUL-NIEUN
11CE ; [.18F5.0020.0002.11CE] # HANGUL JONGSEONG RIEUL-TIKEUT
11CF ; [.18F6.0020.0002.11CF] # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
11D0 ; [.18F7.0020.0002.11D0] # HANGUL JONGSEONG SSANGRIEUL
11D1 ; [.18F8.0020.0002.11D1] # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
11D2 ; [.18F9.0020.0002.11D2] # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
11D3 ; [.18FA.0020.0002.11D3] # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
11D4 ; [.18FB.0020.0002.11D4] # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
11D5 ; [.18FC.0020.0002.11D5] # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
11D6 ; [.18FD.0020.0002.11D6] # HANGUL JONGSEONG RIEUL-SSANGSIOS
11D7 ; [.18FE.0020.0002.11D7] # HANGUL JONGSEONG RIEUL-PANSIOS
11D8 ; [.18FF.0020.0002.11D8] # HANGUL JONGSEONG RIEUL-KHIEUKH
11D9 ; [.1900.0020.0002.11D9] # HANGUL JONGSEONG RIEUL-YEORINHIEUH
11DA ; [.1901.0020.0002.11DA] # HANGUL JONGSEONG MIEUM-KIYEOK
11DB ; [.1902.0020.0002.11DB] # HANGUL JONGSEONG MIEUM-RIEUL
11DC ; [.1903.0020.0002.11DC] # HANGUL JONGSEONG MIEUM-PIEUP
11DD ; [.1904.0020.0002.11DD] # HANGUL JONGSEONG MIEUM-SIOS
11DE ; [.1905.0020.0002.11DE] # HANGUL JONGSEONG MIEUM-SSANGSIOS
11DF ; [.1906.0020.0002.11DF] # HANGUL JONGSEONG MIEUM-PANSIOS
11E0 ; [.1907.0020.0002.11E0] # HANGUL JONGSEONG MIEUM-CHIEUCH
11E1 ; [.1908.0020.0002.11E1] # HANGUL JONGSEONG MIEUM-HIEUH
11E2 ; [.1909.0020.0002.11E2] # HANGUL JONGSEONG KAPYEOUNMIEUM
11E3 ; [.190A.0020.0002.11E3] # HANGUL JONGSEONG PIEUP-RIEUL
11E4 ; [.190B.0020.0002.11E4] # HANGUL JONGSEONG PIEUP-PHIEUPH
11E5 ; [.190C.0020.0002.11E5] # HANGUL JONGSEONG PIEUP-HIEUH
11E6 ; [.190D.0020.0002.11E6] # HANGUL JONGSEONG KAPYEOUNPIEUP
11E7 ; [.190E.0020.0002.11E7] # HANGUL JONGSEONG SIOS-KIYEOK
11E8 ; [.190F.0020.0002.11E8] # HANGUL JONGSEONG SIOS-TIKEUT
11E9 ; [.1910.0020.0002.11E9] # HANGUL JONGSEONG SIOS-RIEUL
11EA ; [.1911.0020.0002.11EA] # HANGUL JONGSEONG SIOS-PIEUP
11EB ; [.1912.0020.0002.11EB] # HANGUL JONGSEONG PANSIOS
11EC ; [.1913.0020.0002.11EC] # HANGUL JONGSEONG IEUNG-KIYEOK
11ED ; [.1914.0020.0002.11ED] # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
11EE ; [.1915.0020.0002.11EE] # HANGUL JONGSEONG SSANGIEUNG
11EF ; [.1916.0020.0002.11EF] # HANGUL JONGSEONG IEUNG-KHIEUKH
11F0 ; [.1917.0020.0002.11F0] # HANGUL JONGSEONG YESIEUNG
11F1 ; [.1918.0020.0002.11F1] # HANGUL JONGSEONG YESIEUNG-SIOS
11F2 ; [.1919.0020.0002.11F2] # HANGUL JONGSEONG YESIEUNG-PANSIOS
11F3 ; [.191A.0020.0002.11F3] # HANGUL JONGSEONG PHIEUPH-PIEUP
11F4 ; [.191B.0020.0002.11F4] # HANGUL JONGSEONG KAPYEOUNPHIEUPH
11F5 ; [.191C.0020.0002.11F5] # HANGUL JONGSEONG HIEUH-NIEUN
11F6 ; [.191D.0020.0002.11F6] # HANGUL JONGSEONG HIEUH-RIEUL
11F7 ; [.191E.0020.0002.11F7] # HANGUL JONGSEONG HIEUH-MIEUM
11F8 ; [.191F.0020.0002.11F8] # HANGUL JONGSEONG HIEUH-PIEUP
11F9 ; [.1920.0020.0002.11F9] # HANGUL JONGSEONG YEORINHIEUH
3041 ; [.1921.0020.000D.3041] # HIRAGANA LETTER SMALL A
3042 ; [.1921.0020.000E.3042] # HIRAGANA LETTER A
30A1 ; [.1921.0020.000F.30A1] # KATAKANA LETTER SMALL A
30A2 ; [.1921.0020.0011.30A2] # KATAKANA LETTER A
3043 ; [.1922.0020.000D.3043] # HIRAGANA LETTER SMALL I
3044 ; [.1922.0020.000E.3044] # HIRAGANA LETTER I
30A3 ; [.1922.0020.000F.30A3] # KATAKANA LETTER SMALL I
30A4 ; [.1922.0020.0011.30A4] # KATAKANA LETTER I
3045 ; [.1923.0020.000D.3045] # HIRAGANA LETTER SMALL U
3046 ; [.1923.0020.000E.3046] # HIRAGANA LETTER U
30A5 ; [.1923.0020.000F.30A5] # KATAKANA LETTER SMALL U
30A6 ; [.1923.0020.0011.30A6] # KATAKANA LETTER U
3094 ; [.1923.0020.000E.3046][.0000.013D.0002.3099] # HIRAGANA LETTER VU; QQCM
30F4 ; [.1923.0020.0011.30A6][.0000.013D.0002.3099] # KATAKANA LETTER VU; QQCM
3047 ; [.1924.0020.000D.3047] # HIRAGANA LETTER SMALL E
3048 ; [.1924.0020.000E.3048] # HIRAGANA LETTER E
30A7 ; [.1924.0020.000F.30A7] # KATAKANA LETTER SMALL E
30A8 ; [.1924.0020.0011.30A8] # KATAKANA LETTER E
3049 ; [.1925.0020.000D.3049] # HIRAGANA LETTER SMALL O
304A ; [.1925.0020.000E.304A] # HIRAGANA LETTER O
30A9 ; [.1925.0020.000F.30A9] # KATAKANA LETTER SMALL O
30AA ; [.1925.0020.0011.30AA] # KATAKANA LETTER O
304B ; [.1926.0020.000E.304B] # HIRAGANA LETTER KA
30F5 ; [.1926.0020.000F.30F5] # KATAKANA LETTER SMALL KA
30AB ; [.1926.0020.0011.30AB] # KATAKANA LETTER KA
304C ; [.1926.0020.000E.304B][.0000.013D.0002.3099] # HIRAGANA LETTER GA; QQCM
30AC ; [.1926.0020.0011.30AB][.0000.013D.0002.3099] # KATAKANA LETTER GA; QQCM
304D ; [.1927.0020.000E.304D] # HIRAGANA LETTER KI
30AD ; [.1927.0020.0011.30AD] # KATAKANA LETTER KI
304E ; [.1927.0020.000E.304D][.0000.013D.0002.3099] # HIRAGANA LETTER GI; QQCM
30AE ; [.1927.0020.0011.30AD][.0000.013D.0002.3099] # KATAKANA LETTER GI; QQCM
304F ; [.1928.0020.000E.304F] # HIRAGANA LETTER KU
30AF ; [.1928.0020.0011.30AF] # KATAKANA LETTER KU
3050 ; [.1928.0020.000E.304F][.0000.013D.0002.3099] # HIRAGANA LETTER GU; QQCM
30B0 ; [.1928.0020.0011.30AF][.0000.013D.0002.3099] # KATAKANA LETTER GU; QQCM
3051 ; [.1929.0020.000E.3051] # HIRAGANA LETTER KE
30F6 ; [.1929.0020.000F.30F6] # KATAKANA LETTER SMALL KE
30B1 ; [.1929.0020.0011.30B1] # KATAKANA LETTER KE
3052 ; [.1929.0020.000E.3051][.0000.013D.0002.3099] # HIRAGANA LETTER GE; QQCM
30B2 ; [.1929.0020.0011.30B1][.0000.013D.0002.3099] # KATAKANA LETTER GE; QQCM
3053 ; [.192A.0020.000E.3053] # HIRAGANA LETTER KO
30B3 ; [.192A.0020.0011.30B3] # KATAKANA LETTER KO
3054 ; [.192A.0020.000E.3053][.0000.013D.0002.3099] # HIRAGANA LETTER GO; QQCM
30B4 ; [.192A.0020.0011.30B3][.0000.013D.0002.3099] # KATAKANA LETTER GO; QQCM
3055 ; [.192B.0020.000E.3055] # HIRAGANA LETTER SA
30B5 ; [.192B.0020.0011.30B5] # KATAKANA LETTER SA
3056 ; [.192B.0020.000E.3055][.0000.013D.0002.3099] # HIRAGANA LETTER ZA; QQCM
30B6 ; [.192B.0020.0011.30B5][.0000.013D.0002.3099] # KATAKANA LETTER ZA; QQCM
3057 ; [.192C.0020.000E.3057] # HIRAGANA LETTER SI
30B7 ; [.192C.0020.0011.30B7] # KATAKANA LETTER SI
3058 ; [.192C.0020.000E.3057][.0000.013D.0002.3099] # HIRAGANA LETTER ZI; QQCM
30B8 ; [.192C.0020.0011.30B7][.0000.013D.0002.3099] # KATAKANA LETTER ZI; QQCM
3059 ; [.192D.0020.000E.3059] # HIRAGANA LETTER SU
30B9 ; [.192D.0020.0011.30B9] # KATAKANA LETTER SU
305A ; [.192D.0020.000E.3059][.0000.013D.0002.3099] # HIRAGANA LETTER ZU; QQCM
30BA ; [.192D.0020.0011.30B9][.0000.013D.0002.3099] # KATAKANA LETTER ZU; QQCM
305B ; [.192E.0020.000E.305B] # HIRAGANA LETTER SE
30BB ; [.192E.0020.0011.30BB] # KATAKANA LETTER SE
305C ; [.192E.0020.000E.305B][.0000.013D.0002.3099] # HIRAGANA LETTER ZE; QQCM
30BC ; [.192E.0020.0011.30BB][.0000.013D.0002.3099] # KATAKANA LETTER ZE; QQCM
305D ; [.192F.0020.000E.305D] # HIRAGANA LETTER SO
30BD ; [.192F.0020.0011.30BD] # KATAKANA LETTER SO
305E ; [.192F.0020.000E.305D][.0000.013D.0002.3099] # HIRAGANA LETTER ZO; QQCM
30BE ; [.192F.0020.0011.30BD][.0000.013D.0002.3099] # KATAKANA LETTER ZO; QQCM
305F ; [.1930.0020.000E.305F] # HIRAGANA LETTER TA
30BF ; [.1930.0020.0011.30BF] # KATAKANA LETTER TA
3060 ; [.1930.0020.000E.305F][.0000.013D.0002.3099] # HIRAGANA LETTER DA; QQCM
30C0 ; [.1930.0020.0011.30BF][.0000.013D.0002.3099] # KATAKANA LETTER DA; QQCM
3061 ; [.1931.0020.000E.3061] # HIRAGANA LETTER TI
30C1 ; [.1931.0020.0011.30C1] # KATAKANA LETTER TI
3062 ; [.1931.0020.000E.3061][.0000.013D.0002.3099] # HIRAGANA LETTER DI; QQCM
30C2 ; [.1931.0020.0011.30C1][.0000.013D.0002.3099] # KATAKANA LETTER DI; QQCM
3063 ; [.1932.0020.000D.3063] # HIRAGANA LETTER SMALL TU
3064 ; [.1932.0020.000E.3064] # HIRAGANA LETTER TU
30C3 ; [.1932.0020.000F.30C3] # KATAKANA LETTER SMALL TU
30C4 ; [.1932.0020.0011.30C4] # KATAKANA LETTER TU
3065 ; [.1932.0020.000E.3064][.0000.013D.0002.3099] # HIRAGANA LETTER DU; QQCM
30C5 ; [.1932.0020.0011.30C4][.0000.013D.0002.3099] # KATAKANA LETTER DU; QQCM
3066 ; [.1933.0020.000E.3066] # HIRAGANA LETTER TE
30C6 ; [.1933.0020.0011.30C6] # KATAKANA LETTER TE
3067 ; [.1933.0020.000E.3066][.0000.013D.0002.3099] # HIRAGANA LETTER DE; QQCM
30C7 ; [.1933.0020.0011.30C6][.0000.013D.0002.3099] # KATAKANA LETTER DE; QQCM
3068 ; [.1934.0020.000E.3068] # HIRAGANA LETTER TO
30C8 ; [.1934.0020.0011.30C8] # KATAKANA LETTER TO
3069 ; [.1934.0020.000E.3068][.0000.013D.0002.3099] # HIRAGANA LETTER DO; QQCM
30C9 ; [.1934.0020.0011.30C8][.0000.013D.0002.3099] # KATAKANA LETTER DO; QQCM
306A ; [.1935.0020.000E.306A] # HIRAGANA LETTER NA
30CA ; [.1935.0020.0011.30CA] # KATAKANA LETTER NA
306B ; [.1936.0020.000E.306B] # HIRAGANA LETTER NI
30CB ; [.1936.0020.0011.30CB] # KATAKANA LETTER NI
306C ; [.1937.0020.000E.306C] # HIRAGANA LETTER NU
30CC ; [.1937.0020.0011.30CC] # KATAKANA LETTER NU
306D ; [.1938.0020.000E.306D] # HIRAGANA LETTER NE
30CD ; [.1938.0020.0011.30CD] # KATAKANA LETTER NE
306E ; [.1939.0020.000E.306E] # HIRAGANA LETTER NO
30CE ; [.1939.0020.0011.30CE] # KATAKANA LETTER NO
306F ; [.193A.0020.000E.306F] # HIRAGANA LETTER HA
30CF ; [.193A.0020.0011.30CF] # KATAKANA LETTER HA
3070 ; [.193A.0020.000E.306F][.0000.013D.0002.3099] # HIRAGANA LETTER BA; QQCM
30D0 ; [.193A.0020.0011.30CF][.0000.013D.0002.3099] # KATAKANA LETTER BA; QQCM
3071 ; [.193A.0020.000E.306F][.0000.013E.0002.309A] # HIRAGANA LETTER PA; QQCM
30D1 ; [.193A.0020.0011.30CF][.0000.013E.0002.309A] # KATAKANA LETTER PA; QQCM
3072 ; [.193B.0020.000E.3072] # HIRAGANA LETTER HI
30D2 ; [.193B.0020.0011.30D2] # KATAKANA LETTER HI
3073 ; [.193B.0020.000E.3072][.0000.013D.0002.3099] # HIRAGANA LETTER BI; QQCM
30D3 ; [.193B.0020.0011.30D2][.0000.013D.0002.3099] # KATAKANA LETTER BI; QQCM
3074 ; [.193B.0020.000E.3072][.0000.013E.0002.309A] # HIRAGANA LETTER PI; QQCM
30D4 ; [.193B.0020.0011.30D2][.0000.013E.0002.309A] # KATAKANA LETTER PI; QQCM
3075 ; [.193C.0020.000E.3075] # HIRAGANA LETTER HU
30D5 ; [.193C.0020.0011.30D5] # KATAKANA LETTER HU
3076 ; [.193C.0020.000E.3075][.0000.013D.0002.3099] # HIRAGANA LETTER BU; QQCM
30D6 ; [.193C.0020.0011.30D5][.0000.013D.0002.3099] # KATAKANA LETTER BU; QQCM
3077 ; [.193C.0020.000E.3075][.0000.013E.0002.309A] # HIRAGANA LETTER PU; QQCM
30D7 ; [.193C.0020.0011.30D5][.0000.013E.0002.309A] # KATAKANA LETTER PU; QQCM
3078 ; [.193D.0020.000E.3078] # HIRAGANA LETTER HE
30D8 ; [.193D.0020.0011.30D8] # KATAKANA LETTER HE
3079 ; [.193D.0020.000E.3078][.0000.013D.0002.3099] # HIRAGANA LETTER BE; QQCM
30D9 ; [.193D.0020.0011.30D8][.0000.013D.0002.3099] # KATAKANA LETTER BE; QQCM
307A ; [.193D.0020.000E.3078][.0000.013E.0002.309A] # HIRAGANA LETTER PE; QQCM
30DA ; [.193D.0020.0011.30D8][.0000.013E.0002.309A] # KATAKANA LETTER PE; QQCM
307B ; [.193E.0020.000E.307B] # HIRAGANA LETTER HO
30DB ; [.193E.0020.0011.30DB] # KATAKANA LETTER HO
307C ; [.193E.0020.000E.307B][.0000.013D.0002.3099] # HIRAGANA LETTER BO; QQCM
30DC ; [.193E.0020.0011.30DB][.0000.013D.0002.3099] # KATAKANA LETTER BO; QQCM
307D ; [.193E.0020.000E.307B][.0000.013E.0002.309A] # HIRAGANA LETTER PO; QQCM
30DD ; [.193E.0020.0011.30DB][.0000.013E.0002.309A] # KATAKANA LETTER PO; QQCM
307E ; [.193F.0020.000E.307E] # HIRAGANA LETTER MA
30DE ; [.193F.0020.0011.30DE] # KATAKANA LETTER MA
307F ; [.1940.0020.000E.307F] # HIRAGANA LETTER MI
30DF ; [.1940.0020.0011.30DF] # KATAKANA LETTER MI
3080 ; [.1941.0020.000E.3080] # HIRAGANA LETTER MU
30E0 ; [.1941.0020.0011.30E0] # KATAKANA LETTER MU
3081 ; [.1942.0020.000E.3081] # HIRAGANA LETTER ME
30E1 ; [.1942.0020.0011.30E1] # KATAKANA LETTER ME
3082 ; [.1943.0020.000E.3082] # HIRAGANA LETTER MO
30E2 ; [.1943.0020.0011.30E2] # KATAKANA LETTER MO
3083 ; [.1944.0020.000D.3083] # HIRAGANA LETTER SMALL YA
3084 ; [.1944.0020.000E.3084] # HIRAGANA LETTER YA
30E3 ; [.1944.0020.000F.30E3] # KATAKANA LETTER SMALL YA
30E4 ; [.1944.0020.0011.30E4] # KATAKANA LETTER YA
3085 ; [.1945.0020.000D.3085] # HIRAGANA LETTER SMALL YU
3086 ; [.1945.0020.000E.3086] # HIRAGANA LETTER YU
30E5 ; [.1945.0020.000F.30E5] # KATAKANA LETTER SMALL YU
30E6 ; [.1945.0020.0011.30E6] # KATAKANA LETTER YU
3087 ; [.1946.0020.000D.3087] # HIRAGANA LETTER SMALL YO
3088 ; [.1946.0020.000E.3088] # HIRAGANA LETTER YO
30E7 ; [.1946.0020.000F.30E7] # KATAKANA LETTER SMALL YO
30E8 ; [.1946.0020.0011.30E8] # KATAKANA LETTER YO
3089 ; [.1947.0020.000E.3089] # HIRAGANA LETTER RA
30E9 ; [.1947.0020.0011.30E9] # KATAKANA LETTER RA
308A ; [.1948.0020.000E.308A] # HIRAGANA LETTER RI
30EA ; [.1948.0020.0011.30EA] # KATAKANA LETTER RI
308B ; [.1949.0020.000E.308B] # HIRAGANA LETTER RU
30EB ; [.1949.0020.0011.30EB] # KATAKANA LETTER RU
308C ; [.194A.0020.000E.308C] # HIRAGANA LETTER RE
30EC ; [.194A.0020.0011.30EC] # KATAKANA LETTER RE
308D ; [.194B.0020.000E.308D] # HIRAGANA LETTER RO
30ED ; [.194B.0020.0011.30ED] # KATAKANA LETTER RO
308E ; [.194C.0020.000D.308E] # HIRAGANA LETTER SMALL WA
308F ; [.194C.0020.000E.308F] # HIRAGANA LETTER WA
30EE ; [.194C.0020.000F.30EE] # KATAKANA LETTER SMALL WA
30EF ; [.194C.0020.0011.30EF] # KATAKANA LETTER WA
30F7 ; [.194C.0020.0011.30EF][.0000.013D.0002.3099] # KATAKANA LETTER VA; QQCM
3090 ; [.194D.0020.000E.3090] # HIRAGANA LETTER WI
30F0 ; [.194D.0020.0011.30F0] # KATAKANA LETTER WI
30F8 ; [.194D.0020.0011.30F0][.0000.013D.0002.3099] # KATAKANA LETTER VI; QQCM
3091 ; [.194E.0020.000E.3091] # HIRAGANA LETTER WE
30F1 ; [.194E.0020.0011.30F1] # KATAKANA LETTER WE
30F9 ; [.194E.0020.0011.30F1][.0000.013D.0002.3099] # KATAKANA LETTER VE; QQCM
3092 ; [.194F.0020.000E.3092] # HIRAGANA LETTER WO
30F2 ; [.194F.0020.0011.30F2] # KATAKANA LETTER WO
30FA ; [.194F.0020.0011.30F2][.0000.013D.0002.3099] # KATAKANA LETTER VO; QQCM
3093 ; [.1950.0020.000E.3093] # HIRAGANA LETTER N
30F3 ; [.1950.0020.0011.30F3] # KATAKANA LETTER N
Unicode/Collate/CJK/Big5.pm 0000644 00000201644 15033552504 0011261 0 ustar 00 package Unicode::Collate::CJK::Big5;
use 5.006;
use strict;
use warnings;
our $VERSION = '1.25';
my %u2p;
my $wt = 0x8000;
while (<DATA>) {
last if /^__END__/;
my @c = split;
for my $c (@c) {
next if !$c;
$u2p{hex($c)} = $wt;
$wt++;
}
}
sub weightBig5 {
my $u = shift;
return exists $u2p{$u} ? $u2p{$u} : undef;
}
1;
__DATA__
5159 515B 515E 515D 5161 5163 55E7 74E9 7CCE 4E00
4E59 4E01 4E03 4E43 4E5D 4E86 4E8C 4EBA 513F 5165
516B 51E0 5200 5201 529B 5315 5341 535C 53C8 4E09
4E0B 4E08 4E0A 4E2B 4E38 51E1 4E45 4E48 4E5F 4E5E
4E8E 4EA1 5140 5203 52FA 5343 53C9 53E3 571F 58EB
5915 5927 5973 5B50 5B51 5B53 5BF8 5C0F 5C22 5C38
5C71 5DDD 5DE5 5DF1 5DF2 5DF3 5DFE 5E72 5EFE 5F0B
5F13 624D 4E11 4E10 4E0D 4E2D 4E30 4E39 4E4B 5C39
4E88 4E91 4E95 4E92 4E94 4EA2 4EC1 4EC0 4EC3 4EC6
4EC7 4ECD 4ECA 4ECB 4EC4 5143 5141 5167 516D 516E
516C 5197 51F6 5206 5207 5208 52FB 52FE 52FF 5316
5339 5348 5347 5345 535E 5384 53CB 53CA 53CD 58EC
5929 592B 592A 592D 5B54 5C11 5C24 5C3A 5C6F 5DF4
5E7B 5EFF 5F14 5F15 5FC3 6208 6236 624B 624E 652F
6587 6597 65A4 65B9 65E5 66F0 6708 6728 6B20 6B62
6B79 6BCB 6BD4 6BDB 6C0F 6C34 706B 722A 7236 723B
7247 7259 725B 72AC 738B 4E19 4E16 4E15 4E14 4E18
4E3B 4E4D 4E4F 4E4E 4EE5 4ED8 4ED4 4ED5 4ED6 4ED7
4EE3 4EE4 4ED9 4EDE 5145 5144 5189 518A 51AC 51F9
51FA 51F8 520A 52A0 529F 5305 5306 5317 531D 4EDF
534A 5349 5361 5360 536F 536E 53BB 53EF 53E4 53F3
53EC 53EE 53E9 53E8 53FC 53F8 53F5 53EB 53E6 53EA
53F2 53F1 53F0 53E5 53ED 53FB 56DB 56DA 5916 592E
5931 5974 5976 5B55 5B83 5C3C 5DE8 5DE7 5DE6 5E02
5E03 5E73 5E7C 5F01 5F18 5F17 5FC5 620A 6253 6254
6252 6251 65A5 65E6 672E 672C 672A 672B 672D 6B63
6BCD 6C11 6C10 6C38 6C41 6C40 6C3E 72AF 7384 7389
74DC 74E6 7518 751F 7528 7529 7530 7531 7532 7533
758B 767D 76AE 76BF 76EE 77DB 77E2 77F3 793A 79BE
7A74 7ACB 4E1E 4E1F 4E52 4E53 4E69 4E99 4EA4 4EA6
4EA5 4EFF 4F09 4F19 4F0A 4F15 4F0D 4F10 4F11 4F0F
4EF2 4EF6 4EFB 4EF0 4EF3 4EFD 4F01 4F0B 5149 5147
5146 5148 5168 5171 518D 51B0 5217 5211 5212 520E
5216 52A3 5308 5321 5320 5370 5371 5409 540F 540C
540A 5410 5401 540B 5404 5411 540D 5408 5403 540E
5406 5412 56E0 56DE 56DD 5733 5730 5728 572D 572C
572F 5729 5919 591A 5937 5938 5984 5978 5983 597D
5979 5982 5981 5B57 5B58 5B87 5B88 5B85 5B89 5BFA
5C16 5C79 5DDE 5E06 5E76 5E74 5F0F 5F1B 5FD9 5FD6
620E 620C 620D 6210 6263 625B 6258 6536 65E9 65E8
65EC 65ED 66F2 66F3 6709 673D 6734 6731 6735 6B21
6B64 6B7B 6C16 6C5D 6C57 6C59 6C5F 6C60 6C50 6C55
6C61 6C5B 6C4D 6C4E 7070 725F 725D 767E 7AF9 7C73
7CF8 7F36 7F8A 7FBD 8001 8003 800C 8012 8033 807F
8089 808B 808C 81E3 81EA 81F3 81FC 820C 821B 821F
826E 8272 827E 866B 8840 884C 8863 897F 9621 4E32
4EA8 4F4D 4F4F 4F47 4F57 4F5E 4F34 4F5B 4F55 4F30
4F50 4F51 4F3D 4F3A 4F38 4F43 4F54 4F3C 4F46 4F63
4F5C 4F60 4F2F 4F4E 4F36 4F59 4F5D 4F48 4F5A 514C
514B 514D 5175 51B6 51B7 5225 5224 5229 522A 5228
52AB 52A9 52AA 52AC 5323 5373 5375 541D 542D 541E
543E 5426 544E 5427 5446 5443 5433 5448 5442 541B
5429 544A 5439 543B 5438 542E 5435 5436 5420 543C
5440 5431 542B 541F 542C 56EA 56F0 56E4 56EB 574A
5751 5740 574D 5747 574E 573E 5750 574F 573B 58EF
593E 599D 5992 59A8 599E 59A3 5999 5996 598D 59A4
5993 598A 59A5 5B5D 5B5C 5B5A 5B5B 5B8C 5B8B 5B8F
5C2C 5C40 5C41 5C3F 5C3E 5C90 5C91 5C94 5C8C 5DEB
5E0C 5E8F 5E87 5E8A 5EF7 5F04 5F1F 5F64 5F62 5F77
5F79 5FD8 5FCC 5FD7 5FCD 5FF1 5FEB 5FF8 5FEA 6212
6211 6284 6297 6296 6280 6276 6289 626D 628A 627C
627E 6279 6273 6292 626F 6298 626E 6295 6293 6291
6286 6539 653B 6538 65F1 66F4 675F 674E 674F 6750
6751 675C 6756 675E 6749 6746 6760 6753 6757 6B65
6BCF 6C42 6C5E 6C99 6C81 6C88 6C89 6C85 6C9B 6C6A
6C7A 6C90 6C70 6C8C 6C68 6C96 6C92 6C7D 6C83 6C72
6C7E 6C74 6C86 6C76 6C8D 6C94 6C98 6C82 7076 707C
707D 7078 7262 7261 7260 72C4 72C2 7396 752C 752B
7537 7538 7682 76EF 77E3 79C1 79C0 79BF 7A76 7CFB
7F55 8096 8093 809D 8098 809B 809A 80B2 826F 8292
828B 828D 898B 89D2 8A00 8C37 8C46 8C55 8C9D 8D64
8D70 8DB3 8EAB 8ECA 8F9B 8FB0 8FC2 8FC6 8FC5 8FC4
5DE1 9091 90A2 90AA 90A6 90A3 9149 91C6 91CC 9632
962E 9631 962A 962C 4E26 4E56 4E73 4E8B 4E9B 4E9E
4EAB 4EAC 4F6F 4F9D 4F8D 4F73 4F7F 4F6C 4F9B 4F8B
4F86 4F83 4F70 4F75 4F88 4F69 4F7B 4F96 4F7E 4F8F
4F91 4F7A 5154 5152 5155 5169 5177 5176 5178 51BD
51FD 523B 5238 5237 523A 5230 522E 5236 5241 52BE
52BB 5352 5354 5353 5351 5366 5377 5378 5379 53D6
53D4 53D7 5473 5475 5496 5478 5495 5480 547B 5477
5484 5492 5486 547C 5490 5471 5476 548C 549A 5462
5468 548B 547D 548E 56FA 5783 5777 576A 5769 5761
5766 5764 577C 591C 5949 5947 5948 5944 5954 59BE
59BB 59D4 59B9 59AE 59D1 59C6 59D0 59CD 59CB 59D3
59CA 59AF 59B3 59D2 59C5 5B5F 5B64 5B63 5B97 5B9A
5B98 5B9C 5B99 5B9B 5C1A 5C48 5C45 5C46 5CB7 5CA1
5CB8 5CA9 5CAB 5CB1 5CB3 5E18 5E1A 5E16 5E15 5E1B
5E11 5E78 5E9A 5E97 5E9C 5E95 5E96 5EF6 5F26 5F27
5F29 5F80 5F81 5F7F 5F7C 5FDD 5FE0 5FFD 5FF5 5FFF
600F 6014 602F 6035 6016 602A 6015 6021 6027 6029
602B 601B 6216 6215 623F 623E 6240 627F 62C9 62CC
62C4 62BF 62C2 62B9 62D2 62DB 62AB 62D3 62D4 62CB
62C8 62A8 62BD 62BC 62D0 62D9 62C7 62CD 62B5 62DA
62B1 62D8 62D6 62D7 62C6 62AC 62CE 653E 65A7 65BC
65FA 6614 6613 660C 6606 6602 660E 6600 660F 6615
660A 6607 670D 670B 676D 678B 6795 6771 679C 6773
6777 6787 679D 6797 676F 6770 677F 6789 677E 6790
6775 679A 6793 677C 676A 6772 6B23 6B66 6B67 6B7F
6C13 6C1B 6CE3 6CE8 6CF3 6CB1 6CCC 6CE5 6CB3 6CBD
6CBE 6CBC 6CE2 6CAB 6CD5 6CD3 6CB8 6CC4 6CB9 6CC1
6CAE 6CD7 6CC5 6CF1 6CBF 6CBB 6CE1 6CDB 6CCA 6CAC
6CEF 6CDC 6CD6 6CE0 7095 708E 7092 708A 7099 722C
722D 7238 7248 7267 7269 72C0 72CE 72D9 72D7 72D0
73A9 73A8 739F 73AB 73A5 753D 759D 7599 759A 7684
76C2 76F2 76F4 77E5 77FD 793E 7940 7941 79C9 79C8
7A7A 7A79 7AFA 7CFE 7F54 7F8C 7F8B 8005 80BA 80A5
80A2 80B1 80A1 80AB 80A9 80B4 80AA 80AF 81E5 81FE
820D 82B3 829D 8299 82AD 82BD 829F 82B9 82B1 82AC
82A5 82AF 82B8 82A3 82B0 82BE 82B7 864E 8671 521D
8868 8ECB 8FCE 8FD4 8FD1 90B5 90B8 90B1 90B6 91C7
91D1 9577 9580 961C 9640 963F 963B 9644 9642 96B9
96E8 9752 975E 4E9F 4EAD 4EAE 4FE1 4FB5 4FAF 4FBF
4FE0 4FD1 4FCF 4FDD 4FC3 4FB6 4FD8 4FDF 4FCA 4FD7
4FAE 4FD0 4FC4 4FC2 4FDA 4FCE 4FDE 4FB7 5157 5192
5191 51A0 524E 5243 524A 524D 524C 524B 5247 52C7
52C9 52C3 52C1 530D 5357 537B 539A 53DB 54AC 54C0
54A8 54CE 54C9 54B8 54A6 54B3 54C7 54C2 54BD 54AA
54C1 54C4 54C8 54AF 54AB 54B1 54BB 54A9 54A7 54BF
56FF 5782 578B 57A0 57A3 57A2 57CE 57AE 5793 5955
5951 594F 594E 5950 59DC 59D8 59FF 59E3 59E8 5A03
59E5 59EA 59DA 59E6 5A01 59FB 5B69 5BA3 5BA6 5BA4
5BA2 5BA5 5C01 5C4E 5C4F 5C4D 5C4B 5CD9 5CD2 5DF7
5E1D 5E25 5E1F 5E7D 5EA0 5EA6 5EFA 5F08 5F2D 5F65
5F88 5F85 5F8A 5F8B 5F87 5F8C 5F89 6012 601D 6020
6025 600E 6028 604D 6070 6068 6062 6046 6043 606C
606B 606A 6064 6241 62DC 6316 6309 62FC 62ED 6301
62EE 62FD 6307 62F1 62F7 62EF 62EC 62FE 62F4 6311
6302 653F 6545 65AB 65BD 65E2 6625 662D 6620 6627
662F 661F 6628 6631 6624 66F7 67FF 67D3 67F1 67D4
67D0 67EC 67B6 67AF 67F5 67E9 67EF 67C4 67D1 67B4
67DA 67E5 67B8 67CF 67DE 67F3 67B0 67D9 67E2 67DD
67D2 6B6A 6B83 6B86 6BB5 6BD2 6BD7 6C1F 6CC9 6D0B
6D32 6D2A 6D41 6D25 6D0C 6D31 6D1E 6D17 6D3B 6D3D
6D3E 6D36 6D1B 6CF5 6D39 6D27 6D38 6D29 6D2E 6D35
6D0E 6D2B 70AB 70BA 70B3 70AC 70AF 70AD 70B8 70AE
70A4 7230 7272 726F 7274 72E9 72E0 72E1 73B7 73CA
73BB 73B2 73CD 73C0 73B3 751A 752D 754F 754C 754E
754B 75AB 75A4 75A5 75A2 75A3 7678 7686 7687 7688
76C8 76C6 76C3 76C5 7701 76F9 76F8 7709 770B 76FE
76FC 7707 77DC 7802 7814 780C 780D 7946 7949 7948
7947 79B9 79BA 79D1 79D2 79CB 7A7F 7A81 7AFF 7AFD
7C7D 7D02 7D05 7D00 7D09 7D07 7D04 7D06 7F38 7F8E
7FBF 8004 8010 800D 8011 8036 80D6 80E5 80DA 80C3
80C4 80CC 80E1 80DB 80CE 80DE 80E4 80DD 81F4 8222
82E7 8303 8305 82E3 82DB 82E6 8304 82E5 8302 8309
82D2 82D7 82F1 8301 82DC 82D4 82D1 82DE 82D3 82DF
82EF 8306 8650 8679 867B 867A 884D 886B 8981 89D4
8A08 8A02 8A03 8C9E 8CA0 8D74 8D73 8DB4 8ECD 8ECC
8FF0 8FE6 8FE2 8FEA 8FE5 8FED 8FEB 8FE4 8FE8 90CA
90CE 90C1 90C3 914B 914A 91CD 9582 9650 964B 964C
964D 9762 9769 97CB 97ED 97F3 9801 98A8 98DB 98DF
9996 9999 4E58 4EB3 500C 500D 5023 4FEF 5026 5025
4FF8 5029 5016 5006 503C 501F 501A 5012 5011 4FFA
5000 5014 5028 4FF1 5021 500B 5019 5018 4FF3 4FEE
502D 502A 4FFE 502B 5009 517C 51A4 51A5 51A2 51CD
51CC 51C6 51CB 5256 525C 5254 525B 525D 532A 537F
539F 539D 53DF 54E8 5510 5501 5537 54FC 54E5 54F2
5506 54FA 5514 54E9 54ED 54E1 5509 54EE 54EA 54E6
5527 5507 54FD 550F 5703 5704 57C2 57D4 57CB 57C3
5809 590F 5957 5958 595A 5A11 5A18 5A1C 5A1F 5A1B
5A13 59EC 5A20 5A23 5A29 5A25 5A0C 5A09 5B6B 5C58
5BB0 5BB3 5BB6 5BB4 5BAE 5BB5 5BB9 5BB8 5C04 5C51
5C55 5C50 5CED 5CFD 5CFB 5CEA 5CE8 5CF0 5CF6 5D01
5CF4 5DEE 5E2D 5E2B 5EAB 5EAD 5EA7 5F31 5F92 5F91
5F90 6059 6063 6065 6050 6055 606D 6069 606F 6084
609F 609A 608D 6094 608C 6085 6096 6247 62F3 6308
62FF 634E 633E 632F 6355 6342 6346 634F 6349 633A
6350 633D 632A 632B 6328 634D 634C 6548 6549 6599
65C1 65C5 6642 6649 664F 6643 6652 664C 6645 6641
66F8 6714 6715 6717 6821 6838 6848 6846 6853 6839
6842 6854 6829 68B3 6817 684C 6851 683D 67F4 6850
6840 683C 6843 682A 6845 6813 6818 6841 6B8A 6B89
6BB7 6C23 6C27 6C28 6C26 6C24 6CF0 6D6A 6D95 6D88
6D87 6D66 6D78 6D77 6D59 6D93 6D6C 6D89 6D6E 6D5A
6D74 6D69 6D8C 6D8A 6D79 6D85 6D65 6D94 70CA 70D8
70E4 70D9 70C8 70CF 7239 7279 72FC 72F9 72FD 72F8
72F7 7386 73ED 7409 73EE 73E0 73EA 73DE 7554 755D
755C 755A 7559 75BE 75C5 75C7 75B2 75B3 75BD 75BC
75B9 75C2 75B8 768B 76B0 76CA 76CD 76CE 7729 771F
7720 7728 77E9 7830 7827 7838 781D 7834 7837 7825
782D 7820 781F 7832 7955 7950 7960 795F 7956 795E
795D 7957 795A 79E4 79E3 79E7 79DF 79E6 79E9 79D8
7A84 7A88 7AD9 7B06 7B11 7C89 7D21 7D17 7D0B 7D0A
7D20 7D22 7D14 7D10 7D15 7D1A 7D1C 7D0D 7D19 7D1B
7F3A 7F5F 7F94 7FC5 7FC1 8006 8018 8015 8019 8017
803D 803F 80F1 8102 80F0 8105 80ED 80F4 8106 80F8
80F3 8108 80FD 810A 80FC 80EF 81ED 81EC 8200 8210
822A 822B 8228 822C 82BB 832B 8352 8354 834A 8338
8350 8349 8335 8334 834F 8332 8339 8336 8317 8340
8331 8328 8343 8654 868A 86AA 8693 86A4 86A9 868C
86A3 869C 8870 8877 8881 8882 887D 8879 8A18 8A10
8A0E 8A0C 8A15 8A0A 8A17 8A13 8A16 8A0F 8A11 8C48
8C7A 8C79 8CA1 8CA2 8D77 8EAC 8ED2 8ED4 8ECF 8FB1
9001 9006 8FF7 9000 8FFA 8FF4 9003 8FFD 9005 8FF8
9095 90E1 90DD 90E2 9152 914D 914C 91D8 91DD 91D7
91DC 91D9 9583 9662 9663 9661 965B 965D 9664 9658
965E 96BB 98E2 99AC 9AA8 9AD8 9B25 9B32 9B3C 4E7E
507A 507D 505C 5047 5043 504C 505A 5049 5065 5076
504E 5055 5075 5074 5077 504F 500F 506F 506D 515C
5195 51F0 526A 526F 52D2 52D9 52D8 52D5 5310 530F
5319 533F 5340 533E 53C3 66FC 5546 556A 5566 5544
555E 5561 5543 554A 5531 5556 554F 5555 552F 5564
5538 552E 555C 552C 5563 5533 5541 5557 5708 570B
5709 57DF 5805 580A 5806 57E0 57E4 57FA 5802 5835
57F7 57F9 5920 5962 5A36 5A41 5A49 5A66 5A6A 5A40
5A3C 5A62 5A5A 5A46 5A4A 5B70 5BC7 5BC5 5BC4 5BC2
5BBF 5BC6 5C09 5C08 5C07 5C60 5C5C 5C5D 5D07 5D06
5D0E 5D1B 5D16 5D22 5D11 5D29 5D14 5D19 5D24 5D27
5D17 5DE2 5E38 5E36 5E33 5E37 5EB7 5EB8 5EB6 5EB5
5EBE 5F35 5F37 5F57 5F6C 5F69 5F6B 5F97 5F99 5F9E
5F98 5FA1 5FA0 5F9C 607F 60A3 6089 60A0 60A8 60CB
60B4 60E6 60BD 60C5 60BB 60B5 60DC 60BC 60D8 60D5
60C6 60DF 60B8 60DA 60C7 621A 621B 6248 63A0 63A7
6372 6396 63A2 63A5 6377 6367 6398 63AA 6371 63A9
6389 6383 639B 636B 63A8 6384 6388 6399 63A1 63AC
6392 638F 6380 637B 6369 6368 637A 655D 6556 6551
6559 6557 555F 654F 6558 6555 6554 659C 659B 65AC
65CF 65CB 65CC 65CE 665D 665A 6664 6668 6666 665E
66F9 52D7 671B 6881 68AF 68A2 6893 68B5 687F 6876
68B1 68A7 6897 68B0 6883 68C4 68AD 6886 6885 6894
689D 68A8 689F 68A1 6882 6B32 6BBA 6BEB 6BEC 6C2B
6D8E 6DBC 6DF3 6DD9 6DB2 6DE1 6DCC 6DE4 6DFB 6DFA
6E05 6DC7 6DCB 6DAF 6DD1 6DAE 6DDE 6DF9 6DB8 6DF7
6DF5 6DC5 6DD2 6E1A 6DB5 6DDA 6DEB 6DD8 6DEA 6DF1
6DEE 6DE8 6DC6 6DC4 6DAA 6DEC 6DBF 6DE6 70F9 7109
710A 70FD 70EF 723D 727D 7281 731C 731B 7316 7313
7319 7387 7405 740A 7403 7406 73FE 740D 74E0 74F6
74F7 751C 7522 7565 7566 7562 7570 758F 75D4 75D5
75B5 75CA 75CD 768E 76D4 76D2 76DB 7737 773E 773C
7736 7738 773A 786B 7843 784E 7965 7968 796D 79FB
7A92 7A95 7B20 7B28 7B1B 7B2C 7B26 7B19 7B1E 7B2E
7C92 7C97 7C95 7D46 7D43 7D71 7D2E 7D39 7D3C 7D40
7D30 7D33 7D44 7D2F 7D42 7D32 7D31 7F3D 7F9E 7F9A
7FCC 7FCE 7FD2 801C 804A 8046 812F 8116 8123 812B
8129 8130 8124 8202 8235 8237 8236 8239 838E 839E
8398 8378 83A2 8396 83BD 83AB 8392 838A 8393 8389
83A0 8377 837B 837C 8386 83A7 8655 5F6A 86C7 86C0
86B6 86C4 86B5 86C6 86CB 86B1 86AF 86C9 8853 889E
8888 88AB 8892 8896 888D 888B 8993 898F 8A2A 8A1D
8A23 8A25 8A31 8A2D 8A1F 8A1B 8A22 8C49 8C5A 8CA9
8CAC 8CAB 8CA8 8CAA 8CA7 8D67 8D66 8DBE 8DBA 8EDB
8EDF 9019 900D 901A 9017 9023 901F 901D 9010 9015
901E 9020 900F 9022 9016 901B 9014 90E8 90ED 90FD
9157 91CE 91F5 91E6 91E3 91E7 91ED 91E9 9589 966A
9675 9673 9678 9670 9674 9676 9677 966C 96C0 96EA
96E9 7AE0 7ADF 9802 9803 9B5A 9CE5 9E75 9E7F 9EA5
9EBB 50A2 508D 5085 5099 5091 5080 5096 5098 509A
6700 51F1 5272 5274 5275 5269 52DE 52DD 52DB 535A
53A5 557B 5580 55A7 557C 558A 559D 5598 5582 559C
55AA 5594 5587 558B 5583 55B3 55AE 559F 553E 55B2
559A 55BB 55AC 55B1 557E 5589 55AB 5599 570D 582F
582A 5834 5824 5830 5831 5821 581D 5820 58F9 58FA
5960 5A77 5A9A 5A7F 5A92 5A9B 5AA7 5B73 5B71 5BD2
5BCC 5BD3 5BD0 5C0A 5C0B 5C31 5D4C 5D50 5D34 5D47
5DFD 5E45 5E3D 5E40 5E43 5E7E 5ECA 5EC1 5EC2 5EC4
5F3C 5F6D 5FA9 5FAA 5FA8 60D1 60E1 60B2 60B6 60E0
611C 6123 60FA 6115 60F0 60FB 60F4 6168 60F1 610E
60F6 6109 6100 6112 621F 6249 63A3 638C 63CF 63C0
63E9 63C9 63C6 63CD 63D2 63E3 63D0 63E1 63D6 63ED
63EE 6376 63F4 63EA 63DB 6452 63DA 63F9 655E 6566
6562 6563 6591 6590 65AF 666E 6670 6674 6676 666F
6691 667A 667E 6677 66FE 66FF 671F 671D 68FA 68D5
68E0 68D8 68D7 6905 68DF 68F5 68EE 68E7 68F9 68D2
68F2 68E3 68CB 68CD 690D 6912 690E 68C9 68DA 696E
68FB 6B3E 6B3A 6B3D 6B98 6B96 6BBC 6BEF 6C2E 6C2F
6C2C 6E2F 6E38 6E54 6E21 6E32 6E67 6E4A 6E20 6E25
6E23 6E1B 6E5B 6E58 6E24 6E56 6E6E 6E2D 6E26 6E6F
6E34 6E4D 6E3A 6E2C 6E43 6E1D 6E3E 6ECB 6E89 6E19
6E4E 6E63 6E44 6E72 6E69 6E5F 7119 711A 7126 7130
7121 7136 716E 711C 724C 7284 7280 7336 7325 7334
7329 743A 742A 7433 7422 7425 7435 7436 7434 742F
741B 7426 7428 7525 7526 756B 756A 75E2 75DB 75E3
75D9 75D8 75DE 75E0 767B 767C 7696 7693 76B4 76DC
774F 77ED 785D 786C 786F 7A0D 7A08 7A0B 7A05 7A00
7A98 7A97 7A96 7AE5 7AE3 7B49 7B56 7B46 7B50 7B52
7B54 7B4D 7B4B 7B4F 7B51 7C9F 7CA5 7D5E 7D50 7D68
7D55 7D2B 7D6E 7D72 7D61 7D66 7D62 7D70 7D73 5584
7FD4 7FD5 800B 8052 8085 8155 8154 814B 8151 814E
8139 8146 813E 814C 8153 8174 8212 821C 83E9 8403
83F8 840D 83E0 83C5 840B 83C1 83EF 83F1 83F4 8457
840A 83F0 840C 83CC 83FD 83F2 83CA 8438 840E 8404
83DC 8407 83D4 83DF 865B 86DF 86D9 86ED 86D4 86DB
86E4 86D0 86DE 8857 88C1 88C2 88B1 8983 8996 8A3B
8A60 8A55 8A5E 8A3C 8A41 8A54 8A5B 8A50 8A46 8A34
8A3A 8A36 8A56 8C61 8C82 8CAF 8CBC 8CB3 8CBD 8CC1
8CBB 8CC0 8CB4 8CB7 8CB6 8CBF 8CB8 8D8A 8D85 8D81
8DCE 8DDD 8DCB 8DDA 8DD1 8DCC 8DDB 8DC6 8EFB 8EF8
8EFC 8F9C 902E 9035 9031 9038 9032 9036 9102 90F5
9109 90FE 9163 9165 91CF 9214 9215 9223 9209 921E
920D 9210 9207 9211 9594 958F 958B 9591 9593 9592
958E 968A 968E 968B 967D 9685 9686 968D 9672 9684
96C1 96C5 96C4 96C6 96C7 96EF 96F2 97CC 9805 9806
9808 98E7 98EA 98EF 98E9 98F2 98ED 99AE 99AD 9EC3
9ECD 9ED1 4E82 50AD 50B5 50B2 50B3 50C5 50BE 50AC
50B7 50BB 50AF 50C7 527F 5277 527D 52DF 52E6 52E4
52E2 52E3 532F 55DF 55E8 55D3 55E6 55CE 55DC 55C7
55D1 55E3 55E4 55EF 55DA 55E1 55C5 55C6 55E5 55C9
5712 5713 585E 5851 5858 5857 585A 5854 586B 584C
586D 584A 5862 5852 584B 5967 5AC1 5AC9 5ACC 5ABE
5ABD 5ABC 5AB3 5AC2 5AB2 5D69 5D6F 5E4C 5E79 5EC9
5EC8 5F12 5F59 5FAC 5FAE 611A 610F 6148 611F 60F3
611B 60F9 6101 6108 614E 614C 6144 614D 613E 6134
6127 610D 6106 6137 6221 6222 6413 643E 641E 642A
642D 643D 642C 640F 641C 6414 640D 6436 6416 6417
6406 656C 659F 65B0 6697 6689 6687 6688 6696 6684
6698 668D 6703 6994 696D 695A 6977 6960 6954 6975
6930 6982 694A 6968 696B 695E 6953 6979 6986 695D
6963 695B 6B47 6B72 6BC0 6BBF 6BD3 6BFD 6EA2 6EAF
6ED3 6EB6 6EC2 6E90 6E9D 6EC7 6EC5 6EA5 6E98 6EBC
6EBA 6EAB 6ED1 6E96 6E9C 6EC4 6ED4 6EAA 6EA7 6EB4
714E 7159 7169 7164 7149 7167 715C 716C 7166 714C
7165 715E 7146 7168 7156 723A 7252 7337 7345 733F
733E 746F 745A 7455 745F 745E 7441 743F 7459 745B
745C 7576 7578 7600 75F0 7601 75F2 75F1 75FA 75FF
75F4 75F3 76DE 76DF 775B 776B 7766 775E 7763 7779
776A 776C 775C 7765 7768 7762 77EE 788E 78B0 7897
7898 788C 7889 787C 7891 7893 787F 797A 797F 7981
842C 79BD 7A1C 7A1A 7A20 7A14 7A1F 7A1E 7A9F 7AA0
7B77 7BC0 7B60 7B6E 7B67 7CB1 7CB3 7CB5 7D93 7D79
7D91 7D81 7D8F 7D5B 7F6E 7F69 7F6A 7F72 7FA9 7FA8
7FA4 8056 8058 8086 8084 8171 8170 8178 8165 816E
8173 816B 8179 817A 8166 8205 8247 8482 8477 843D
8431 8475 8466 846B 8449 846C 845B 843C 8435 8461
8463 8469 846D 8446 865E 865C 865F 86F9 8713 8708
8707 8700 86FE 86FB 8702 8703 8706 870A 8859 88DF
88D4 88D9 88DC 88D8 88DD 88E1 88CA 88D5 88D2 899C
89E3 8A6B 8A72 8A73 8A66 8A69 8A70 8A87 8A7C 8A63
8AA0 8A71 8A85 8A6D 8A62 8A6E 8A6C 8A79 8A7B 8A3E
8A68 8C62 8C8A 8C89 8CCA 8CC7 8CC8 8CC4 8CB2 8CC3
8CC2 8CC5 8DE1 8DDF 8DE8 8DEF 8DF3 8DFA 8DEA 8DE4
8DE6 8EB2 8F03 8F09 8EFE 8F0A 8F9F 8FB2 904B 904A
9053 9042 9054 903C 9055 9050 9047 904F 904E 904D
9051 903E 9041 9112 9117 916C 916A 9169 91C9 9237
9257 9238 923D 9240 923E 925B 924B 9264 9251 9234
9249 924D 9245 9239 923F 925A 9598 9698 9694 9695
96CD 96CB 96C9 96CA 96F7 96FB 96F9 96F6 9756 9774
9776 9810 9811 9813 980A 9812 980C 98FC 98F4 98FD
98FE 99B3 99B1 99B4 9AE1 9CE9 9E82 9F0E 9F13 9F20
50E7 50EE 50E5 50D6 50ED 50DA 50D5 50CF 50D1 50F1
50CE 50E9 5162 51F3 5283 5282 5331 53AD 55FE 5600
561B 5617 55FD 5614 5606 5609 560D 560E 55F7 5616
561F 5608 5610 55F6 5718 5716 5875 587E 5883 5893
588A 5879 5885 587D 58FD 5925 5922 5924 596A 5969
5AE1 5AE6 5AE9 5AD7 5AD6 5AD8 5AE3 5B75 5BDE 5BE7
5BE1 5BE5 5BE6 5BE8 5BE2 5BE4 5BDF 5C0D 5C62 5D84
5D87 5E5B 5E63 5E55 5E57 5E54 5ED3 5ED6 5F0A 5F46
5F70 5FB9 6147 613F 614B 6177 6162 6163 615F 615A
6158 6175 622A 6487 6458 6454 64A4 6478 645F 647A
6451 6467 6434 646D 647B 6572 65A1 65D7 65D6 66A2
66A8 669D 699C 69A8 6995 69C1 69AE 69D3 69CB 699B
69B7 69BB 69AB 69B4 69D0 69CD 69AD 69CC 69A6 69C3
69A3 6B49 6B4C 6C33 6F33 6F14 6EFE 6F13 6EF4 6F29
6F3E 6F20 6F2C 6F0F 6F02 6F22 6EFF 6EEF 6F06 6F31
6F38 6F32 6F23 6F15 6F2B 6F2F 6F88 6F2A 6EEC 6F01
6EF2 6ECC 6EF7 7194 7199 717D 718A 7184 7192 723E
7292 7296 7344 7350 7464 7463 746A 7470 746D 7504
7591 7627 760D 760B 7609 7613 76E1 76E3 7784 777D
777F 7761 78C1 789F 78A7 78B3 78A9 78A3 798E 798F
798D 7A2E 7A31 7AAA 7AA9 7AED 7AEF 7BA1 7B95 7B8B
7B75 7B97 7B9D 7B94 7B8F 7BB8 7B87 7B84 7CB9 7CBD
7CBE 7DBB 7DB0 7D9C 7DBD 7DBE 7DA0 7DCA 7DB4 7DB2
7DB1 7DBA 7DA2 7DBF 7DB5 7DB8 7DAD 7DD2 7DC7 7DAC
7F70 7FE0 7FE1 7FDF 805E 805A 8087 8150 8180 818F
8188 818A 817F 8182 81E7 81FA 8207 8214 821E 824B
84C9 84BF 84C6 84C4 8499 849E 84B2 849C 84CB 84B8
84C0 84D3 8490 84BC 84D1 84CA 873F 871C 873B 8722
8725 8734 8718 8755 8737 8729 88F3 8902 88F4 88F9
88F8 88FD 88E8 891A 88EF 8AA6 8A8C 8A9E 8AA3 8A8D
8AA1 8A93 8AA4 8AAA 8AA5 8AA8 8A98 8A91 8A9A 8AA7
8C6A 8C8D 8C8C 8CD3 8CD1 8CD2 8D6B 8D99 8D95 8DFC
8F14 8F12 8F15 8F13 8FA3 9060 9058 905C 9063 9059
905E 9062 905D 905B 9119 9118 911E 9175 9178 9177
9174 9278 9280 9285 9298 9296 927B 9293 929C 92A8
927C 9291 95A1 95A8 95A9 95A3 95A5 95A4 9699 969C
969B 96CC 96D2 9700 977C 9785 97F6 9817 9818 98AF
98B1 9903 9905 990C 9909 99C1 9AAF 9AB0 9AE6 9B41
9B42 9CF4 9CF6 9CF3 9EBC 9F3B 9F4A 5104 5100 50FB
50F5 50F9 5102 5108 5109 5105 51DC 5287 5288 5289
528D 528A 52F0 53B2 562E 563B 5639 5632 563F 5634
5629 5653 564E 5657 5674 5636 562F 5630 5880 589F
589E 58B3 589C 58AE 58A9 58A6 596D 5B09 5AFB 5B0B
5AF5 5B0C 5B08 5BEE 5BEC 5BE9 5BEB 5C64 5C65 5D9D
5D94 5E62 5E5F 5E61 5EE2 5EDA 5EDF 5EDD 5EE3 5EE0
5F48 5F71 5FB7 5FB5 6176 6167 616E 615D 6155 6182
617C 6170 616B 617E 61A7 6190 61AB 618E 61AC 619A
61A4 6194 61AE 622E 6469 646F 6479 649E 64B2 6488
6490 64B0 64A5 6493 6495 64A9 6492 64AE 64AD 64AB
649A 64AC 6499 64A2 64B3 6575 6577 6578 66AE 66AB
66B4 66B1 6A23 6A1F 69E8 6A01 6A1E 6A19 69FD 6A21
6A13 6A0A 69F3 6A02 6A05 69ED 6A11 6B50 6B4E 6BA4
6BC5 6BC6 6F3F 6F7C 6F84 6F51 6F66 6F54 6F86 6F6D
6F5B 6F78 6F6E 6F8E 6F7A 6F70 6F64 6F97 6F58 6ED5
6F6F 6F60 6F5F 719F 71AC 71B1 71A8 7256 729B 734E
7357 7469 748B 7483 747E 7480 757F 7620 7629 761F
7624 7626 7621 7622 769A 76BA 76E4 778E 7787 778C
7791 778B 78CB 78C5 78BA 78CA 78BE 78D5 78BC 78D0
7A3F 7A3C 7A40 7A3D 7A37 7A3B 7AAF 7AAE 7BAD 7BB1
7BC4 7BB4 7BC6 7BC7 7BC1 7BA0 7BCC 7CCA 7DE0 7DF4
7DEF 7DFB 7DD8 7DEC 7DDD 7DE8 7DE3 7DDA 7DDE 7DE9
7D9E 7DD9 7DF2 7DF9 7F75 7F77 7FAF 7FE9 8026 819B
819C 819D 81A0 819A 8198 8517 853D 851A 84EE 852C
852D 8513 8511 8523 8521 8514 84EC 8525 84FF 8506
8782 8774 8776 8760 8766 8778 8768 8759 8757 874C
8753 885B 885D 8910 8907 8912 8913 8915 890A 8ABC
8AD2 8AC7 8AC4 8A95 8ACB 8AF8 8AB2 8AC9 8AC2 8ABF
8AB0 8AD6 8ACD 8AB6 8AB9 8ADB 8C4C 8C4E 8C6C 8CE0
8CDE 8CE6 8CE4 8CEC 8CED 8CE2 8CE3 8CDC 8CEA 8CE1
8D6D 8D9F 8DA3 8E2B 8E10 8E1D 8E22 8E0F 8E29 8E1F
8E21 8E1E 8EBA 8F1D 8F1B 8F1F 8F29 8F26 8F2A 8F1C
8F1E 8F25 9069 906E 9068 906D 9077 9130 912D 9127
9131 9187 9189 918B 9183 92C5 92BB 92B7 92EA 92AC
92E4 92C1 92B3 92BC 92D2 92C7 92F0 92B2 95AD 95B1
9704 9706 9707 9709 9760 978D 978B 978F 9821 982B
981C 98B3 990A 9913 9912 9918 99DD 99D0 99DF 99DB
99D1 99D5 99D2 99D9 9AB7 9AEE 9AEF 9B27 9B45 9B44
9B77 9B6F 9D06 9D09 9D03 9EA9 9EBE 9ECE 58A8 9F52
5112 5118 5114 5110 5115 5180 51AA 51DD 5291 5293
52F3 5659 566B 5679 5669 5664 5678 566A 5668 5665
5671 566F 566C 5662 5676 58C1 58BE 58C7 58C5 596E
5B1D 5B34 5B78 5BF0 5C0E 5F4A 61B2 6191 61A9 618A
61CD 61B6 61BE 61CA 61C8 6230 64C5 64C1 64CB 64BB
64BC 64DA 64C4 64C7 64C2 64CD 64BF 64D2 64D4 64BE
6574 66C6 66C9 66B9 66C4 66C7 66B8 6A3D 6A38 6A3A
6A59 6A6B 6A58 6A39 6A44 6A62 6A61 6A4B 6A47 6A35
6A5F 6A48 6B59 6B77 6C05 6FC2 6FB1 6FA1 6FC3 6FA4
6FC1 6FA7 6FB3 6FC0 6FB9 6FB6 6FA6 6FA0 6FB4 71BE
71C9 71D0 71D2 71C8 71D5 71B9 71CE 71D9 71DC 71C3
71C4 7368 749C 74A3 7498 749F 749E 74E2 750C 750D
7634 7638 763A 76E7 76E5 77A0 779E 779F 77A5 78E8
78DA 78EC 78E7 79A6 7A4D 7A4E 7A46 7A4C 7A4B 7ABA
7BD9 7C11 7BC9 7BE4 7BDB 7BE1 7BE9 7BE6 7CD5 7CD6
7E0A 7E11 7E08 7E1B 7E23 7E1E 7E1D 7E09 7E10 7F79
7FB2 7FF0 7FF1 7FEE 8028 81B3 81A9 81A8 81FB 8208
8258 8259 854A 8559 8548 8568 8569 8543 8549 856D
856A 855E 8783 879F 879E 87A2 878D 8861 892A 8932
8925 892B 8921 89AA 89A6 8AE6 8AFA 8AEB 8AF1 8B00
8ADC 8AE7 8AEE 8AFE 8B01 8B02 8AF7 8AED 8AF3 8AF6
8AFC 8C6B 8C6D 8C93 8CF4 8E44 8E31 8E34 8E42 8E39
8E35 8F3B 8F2F 8F38 8F33 8FA8 8FA6 9075 9074 9078
9072 907C 907A 9134 9192 9320 9336 92F8 9333 932F
9322 92FC 932B 9304 931A 9310 9326 9321 9315 932E
9319 95BB 96A7 96A8 96AA 96D5 970E 9711 9716 970D
9713 970F 975B 975C 9766 9798 9830 9838 983B 9837
982D 9839 9824 9910 9928 991E 991B 9921 991A 99ED
99E2 99F1 9AB8 9ABC 9AFB 9AED 9B28 9B91 9D15 9D23
9D26 9D28 9D12 9D1B 9ED8 9ED4 9F8D 9F9C 512A 511F
5121 5132 52F5 568E 5680 5690 5685 5687 568F 58D5
58D3 58D1 58CE 5B30 5B2A 5B24 5B7A 5C37 5C68 5DBC
5DBA 5DBD 5DB8 5E6B 5F4C 5FBD 61C9 61C2 61C7 61E6
61CB 6232 6234 64CE 64CA 64D8 64E0 64F0 64E6 64EC
64F1 64E2 64ED 6582 6583 66D9 66D6 6A80 6A94 6A84
6AA2 6A9C 6ADB 6AA3 6A7E 6A97 6A90 6AA0 6B5C 6BAE
6BDA 6C08 6FD8 6FF1 6FDF 6FE0 6FDB 6FE4 6FEB 6FEF
6F80 6FEC 6FE1 6FE9 6FD5 6FEE 6FF0 71E7 71DF 71EE
71E6 71E5 71ED 71EC 71F4 71E0 7235 7246 7370 7372
74A9 74B0 74A6 74A8 7646 7642 764C 76EA 77B3 77AA
77B0 77AC 77A7 77AD 77EF 78F7 78FA 78F4 78EF 7901
79A7 79AA 7A57 7ABF 7C07 7C0D 7BFE 7BF7 7C0C 7BE0
7CE0 7CDC 7CDE 7CE2 7CDF 7CD9 7CDD 7E2E 7E3E 7E46
7E37 7E32 7E43 7E2B 7E3D 7E31 7E45 7E41 7E34 7E39
7E48 7E35 7E3F 7E2F 7F44 7FF3 7FFC 8071 8072 8070
806F 8073 81C6 81C3 81BA 81C2 81C0 81BF 81BD 81C9
81BE 81E8 8209 8271 85AA 8584 857E 859C 8591 8594
85AF 859B 8587 85A8 858A 8667 87C0 87D1 87B3 87D2
87C6 87AB 87BB 87BA 87C8 87CB 893B 8936 8944 8938
893D 89AC 8B0E 8B17 8B19 8B1B 8B0A 8B20 8B1D 8B04
8B10 8C41 8C3F 8C73 8CFA 8CFD 8CFC 8CF8 8CFB 8DA8
8E49 8E4B 8E48 8E4A 8F44 8F3E 8F42 8F45 8F3F 907F
907D 9084 9081 9082 9080 9139 91A3 919E 919C 934D
9382 9328 9375 934A 9365 934B 9318 937E 936C 935B
9370 935A 9354 95CA 95CB 95CC 95C8 95C6 96B1 96B8
96D6 971C 971E 97A0 97D3 9846 98B6 9935 9A01 99FF
9BAE 9BAB 9BAA 9BAD 9D3B 9D3F 9E8B 9ECF 9EDE 9EDC
9EDD 9EDB 9F3E 9F4B 53E2 5695 56AE 58D9 58D8 5B38
5F5D 61E3 6233 64F4 64F2 64FE 6506 64FA 64FB 64F7
65B7 66DC 6726 6AB3 6AAC 6AC3 6ABB 6AB8 6AC2 6AAE
6AAF 6B5F 6B78 6BAF 7009 700B 6FFE 7006 6FFA 7011
700F 71FB 71FC 71FE 71F8 7377 7375 74A7 74BF 7515
7656 7658 7652 77BD 77BF 77BB 77BC 790E 79AE 7A61
7A62 7A60 7AC4 7AC5 7C2B 7C27 7C2A 7C1E 7C23 7C21
7CE7 7E54 7E55 7E5E 7E5A 7E61 7E52 7E59 7F48 7FF9
7FFB 8077 8076 81CD 81CF 820A 85CF 85A9 85CD 85D0
85C9 85B0 85BA 85B9 85A6 87EF 87EC 87F2 87E0 8986
89B2 89F4 8B28 8B39 8B2C 8B2B 8C50 8D05 8E59 8E63
8E66 8E64 8E5F 8E55 8EC0 8F49 8F4D 9087 9083 9088
91AB 91AC 91D0 9394 938A 9396 93A2 93B3 93AE 93AC
93B0 9398 939A 9397 95D4 95D6 95D0 95D5 96E2 96DC
96D9 96DB 96DE 9724 97A3 97A6 97AD 97F9 984D 984F
984C 984E 9853 98BA 993E 993F 993D 992E 99A5 9A0E
9AC1 9B03 9B06 9B4F 9B4E 9B4D 9BCA 9BC9 9BFD 9BC8
9BC0 9D51 9D5D 9D60 9EE0 9F15 9F2C 5133 56A5 58DE
58DF 58E2 5BF5 9F90 5EEC 61F2 61F7 61F6 61F5 6500
650F 66E0 66DD 6AE5 6ADD 6ADA 6AD3 701B 701F 7028
701A 701D 7015 7018 7206 720D 7258 72A2 7378 737A
74BD 74CA 74E3 7587 7586 765F 7661 77C7 7919 79B1
7A6B 7A69 7C3E 7C3F 7C38 7C3D 7C37 7C40 7E6B 7E6D
7E79 7E69 7E6A 7F85 7E73 7FB6 7FB9 7FB8 81D8 85E9
85DD 85EA 85D5 85E4 85E5 85F7 87FB 8805 880D 87F9
87FE 8960 895F 8956 895E 8B41 8B5C 8B58 8B49 8B5A
8B4E 8B4F 8B46 8B59 8D08 8D0A 8E7C 8E72 8E87 8E76
8E6C 8E7A 8E74 8F54 8F4E 8FAD 908A 908B 91B1 91AE
93E1 93D1 93DF 93C3 93C8 93DC 93DD 93D6 93E2 93CD
93D8 93E4 93D7 93E8 95DC 96B4 96E3 972A 9727 9761
97DC 97FB 985E 9858 985B 98BC 9945 9949 9A16 9A19
9B0D 9BE8 9BE7 9BD6 9BDB 9D89 9D61 9D72 9D6A 9D6C
9E92 9E97 9E93 9EB4 52F8 56A8 56B7 56B6 56B4 56BC
58E4 5B40 5B43 5B7D 5BF6 5DC9 61F8 61FA 6518 6514
6519 66E6 6727 6AEC 703E 7030 7032 7210 737B 74CF
7662 7665 7926 792A 792C 792B 7AC7 7AF6 7C4C 7C43
7C4D 7CEF 7CF0 8FAE 7E7D 7E7C 7E82 7F4C 8000 81DA
8266 85FB 85F9 8611 85FA 8606 860B 8607 860A 8814
8815 8964 89BA 89F8 8B70 8B6C 8B66 8B6F 8B5F 8B6B
8D0F 8D0D 8E89 8E81 8E85 8E82 91B4 91CB 9418 9403
93FD 95E1 9730 98C4 9952 9951 99A8 9A2B 9A30 9A37
9A35 9C13 9C0D 9E79 9EB5 9EE8 9F2F 9F5F 9F63 9F61
5137 5138 56C1 56C0 56C2 5914 5C6C 5DCD 61FC 61FE
651D 651C 6595 66E9 6AFB 6B04 6AFA 6BB2 704C 721B
72A7 74D6 74D4 7669 77D3 7C50 7E8F 7E8C 7FBC 8617
862D 861A 8823 8822 8821 881F 896A 896C 89BD 8B74
8B77 8B7D 8D13 8E8A 8E8D 8E8B 8F5F 8FAF 91BA 942E
9433 9435 943A 9438 9432 942B 95E2 9738 9739 9732
97FF 9867 9865 9957 9A45 9A43 9A40 9A3E 9ACF 9B54
9B51 9C2D 9C25 9DAF 9DB4 9DC2 9DB8 9E9D 9EEF 9F19
9F5C 9F66 9F67 513C 513B 56C8 56CA 56C9 5B7F 5DD4
5DD2 5F4E 61FF 6524 6B0A 6B61 7051 7058 7380 74E4
758A 766E 766C 79B3 7C60 7C5F 807E 807D 81DF 8972
896F 89FC 8B80 8D16 8D17 8E91 8E93 8F61 9148 9444
9451 9452 973D 973E 97C3 97C1 986B 9955 9A55 9A4D
9AD2 9B1A 9C49 9C31 9C3E 9C3B 9DD3 9DD7 9F34 9F6C
9F6A 9F94 56CC 5DD6 6200 6523 652B 652A 66EC 6B10
74DA 7ACA 7C64 7C63 7C65 7E93 7E96 7E94 81E2 8638
863F 8831 8B8A 9090 908F 9463 9460 9464 9768 986F
995C 9A5A 9A5B 9A57 9AD3 9AD4 9AD1 9C54 9C57 9C56
9DE5 9E9F 9EF4 56D1 58E9 652C 705E 7671 7672 77D7
7F50 7F88 8836 8839 8862 8B93 8B92 8B96 8277 8D1B
91C0 946A 9742 9748 9744 97C6 9870 9A5F 9B22 9B58
9C5F 9DF9 9DFA 9E7C 9E7D 9F07 9F77 9F72 5EF3 6B16
7063 7C6C 7C6E 883B 89C0 8EA1 91C1 9472 9470 9871
995E 9AD6 9B23 9ECC 7064 77DA 8B9A 9477 97C9 9A62
9A65 7E9C 8B9C 8EAA 91C5 947D 947E 947C 9C77 9C78
9EF7 8C54 947F 9E1A 7228 9A6A 9B31 9E1B 9E1E 7C72
4E42 4E5C 51F5 531A 5382 4E07 4E0C 4E47 4E8D 56D7
5C6E 5F73 4E0F 5187 4E0E 4E2E 4E93 4EC2 4EC9 4EC8
5198 52FC 536C 53B9 5720 5903 592C 5C10 5DFF 65E1
6BB3 6BCC 6C14 723F 4E31 4E3C 4EE8 4EDC 4EE9 4EE1
4EDD 4EDA 520C 531C 534C 5722 5723 5917 592F 5B81
5B84 5C12 5C3B 5C74 5C73 5E04 5E80 5E82 5FC9 6209
6250 6C15 6C36 6C43 6C3F 6C3B 72AE 72B0 738A 79B8
808A 961E 4F0E 4F18 4F2C 4EF5 4F14 4EF1 4F00 4EF7
4F08 4F1D 4F02 4F05 4F22 4F13 4F04 4EF4 4F12 51B1
5213 5209 5210 52A6 5322 531F 534D 538A 5407 56E1
56DF 572E 572A 5734 593C 5980 597C 5985 597B 597E
5977 597F 5B56 5C15 5C25 5C7C 5C7A 5C7B 5C7E 5DDF
5E75 5E84 5F02 5F1A 5F74 5FD5 5FD4 5FCF 625C 625E
6264 6261 6266 6262 6259 6260 625A 6265 65EF 65EE
673E 6739 6738 673B 673A 673F 673C 6733 6C18 6C46
6C52 6C5C 6C4F 6C4A 6C54 6C4B 6C4C 7071 725E 72B4
72B5 738E 752A 767F 7A75 7F51 8278 827C 8280 827D
827F 864D 897E 9099 9097 9098 909B 9094 9622 9624
9620 9623 4F56 4F3B 4F62 4F49 4F53 4F64 4F3E 4F67
4F52 4F5F 4F41 4F58 4F2D 4F33 4F3F 4F61 518F 51B9
521C 521E 5221 52AD 52AE 5309 5363 5372 538E 538F
5430 5437 542A 5454 5445 5419 541C 5425 5418 543D
544F 5441 5428 5424 5447 56EE 56E7 56E5 5741 5745
574C 5749 574B 5752 5906 5940 59A6 5998 59A0 5997
598E 59A2 5990 598F 59A7 59A1 5B8E 5B92 5C28 5C2A
5C8D 5C8F 5C88 5C8B 5C89 5C92 5C8A 5C86 5C93 5C95
5DE0 5E0A 5E0E 5E8B 5E89 5E8C 5E88 5E8D 5F05 5F1D
5F78 5F76 5FD2 5FD1 5FD0 5FED 5FE8 5FEE 5FF3 5FE1
5FE4 5FE3 5FFA 5FEF 5FF7 5FFB 6000 5FF4 623A 6283
628C 628E 628F 6294 6287 6271 627B 627A 6270 6281
6288 6277 627D 6272 6274 6537 65F0 65F4 65F3 65F2
65F5 6745 6747 6759 6755 674C 6748 675D 674D 675A
674B 6BD0 6C19 6C1A 6C78 6C67 6C6B 6C84 6C8B 6C8F
6C71 6C6F 6C69 6C9A 6C6D 6C87 6C95 6C9C 6C66 6C73
6C65 6C7B 6C8E 7074 707A 7263 72BF 72BD 72C3 72C6
72C1 72BA 72C5 7395 7397 7393 7394 7392 753A 7539
7594 7595 7681 793D 8034 8095 8099 8090 8092 809C
8290 828F 8285 828E 8291 8293 828A 8283 8284 8C78
8FC9 8FBF 909F 90A1 90A5 909E 90A7 90A0 9630 9628
962F 962D 4E33 4F98 4F7C 4F85 4F7D 4F80 4F87 4F76
4F74 4F89 4F84 4F77 4F4C 4F97 4F6A 4F9A 4F79 4F81
4F78 4F90 4F9C 4F94 4F9E 4F92 4F82 4F95 4F6B 4F6E
519E 51BC 51BE 5235 5232 5233 5246 5231 52BC 530A
530B 533C 5392 5394 5487 547F 5481 5491 5482 5488
546B 547A 547E 5465 546C 5474 5466 548D 546F 5461
5460 5498 5463 5467 5464 56F7 56F9 576F 5772 576D
576B 5771 5770 5776 5780 5775 577B 5773 5774 5762
5768 577D 590C 5945 59B5 59BA 59CF 59CE 59B2 59CC
59C1 59B6 59BC 59C3 59D6 59B1 59BD 59C0 59C8 59B4
59C7 5B62 5B65 5B93 5B95 5C44 5C47 5CAE 5CA4 5CA0
5CB5 5CAF 5CA8 5CAC 5C9F 5CA3 5CAD 5CA2 5CAA 5CA7
5C9D 5CA5 5CB6 5CB0 5CA6 5E17 5E14 5E19 5F28 5F22
5F23 5F24 5F54 5F82 5F7E 5F7D 5FDE 5FE5 602D 6026
6019 6032 600B 6034 600A 6017 6033 601A 601E 602C
6022 600D 6010 602E 6013 6011 600C 6009 601C 6214
623D 62AD 62B4 62D1 62BE 62AA 62B6 62CA 62AE 62B3
62AF 62BB 62A9 62B0 62B8 653D 65A8 65BB 6609 65FC
6604 6612 6608 65FB 6603 660B 660D 6605 65FD 6611
6610 66F6 670A 6785 676C 678E 6792 6776 677B 6798
6786 6784 6774 678D 678C 677A 679F 6791 6799 6783
677D 6781 6778 6779 6794 6B25 6B80 6B7E 6BDE 6C1D
6C93 6CEC 6CEB 6CEE 6CD9 6CB6 6CD4 6CAD 6CE7 6CB7
6CD0 6CC2 6CBA 6CC3 6CC6 6CED 6CF2 6CD2 6CDD 6CB4
6C8A 6C9D 6C80 6CDE 6CC0 6D30 6CCD 6CC7 6CB0 6CF9
6CCF 6CE9 6CD1 7094 7098 7085 7093 7086 7084 7091
7096 7082 709A 7083 726A 72D6 72CB 72D8 72C9 72DC
72D2 72D4 72DA 72CC 72D1 73A4 73A1 73AD 73A6 73A2
73A0 73AC 739D 74DD 74E8 753F 7540 753E 758C 7598
76AF 76F3 76F1 76F0 76F5 77F8 77FC 77F9 77FB 77FA
77F7 7942 793F 79C5 7A78 7A7B 7AFB 7C75 7CFD 8035
808F 80AE 80A3 80B8 80B5 80AD 8220 82A0 82C0 82AB
829A 8298 829B 82B5 82A7 82AE 82BC 829E 82BA 82B4
82A8 82A1 82A9 82C2 82A4 82C3 82B6 82A2 8670 866F
866D 866E 8C56 8FD2 8FCB 8FD3 8FCD 8FD6 8FD5 8FD7
90B2 90B4 90AF 90B3 90B0 9639 963D 963C 963A 9643
4FCD 4FC5 4FD3 4FB2 4FC9 4FCB 4FC1 4FD4 4FDC 4FD9
4FBB 4FB3 4FDB 4FC7 4FD6 4FBA 4FC0 4FB9 4FEC 5244
5249 52C0 52C2 533D 537C 5397 5396 5399 5398 54BA
54A1 54AD 54A5 54CF 54C3 830D 54B7 54AE 54D6 54B6
54C5 54C6 54A0 5470 54BC 54A2 54BE 5472 54DE 54B0
57B5 579E 579F 57A4 578C 5797 579D 579B 5794 5798
578F 5799 57A5 579A 5795 58F4 590D 5953 59E1 59DE
59EE 5A00 59F1 59DD 59FA 59FD 59FC 59F6 59E4 59F2
59F7 59DB 59E9 59F3 59F5 59E0 59FE 59F4 59ED 5BA8
5C4C 5CD0 5CD8 5CCC 5CD7 5CCB 5CDB 5CDE 5CDA 5CC9
5CC7 5CCA 5CD6 5CD3 5CD4 5CCF 5CC8 5CC6 5CCE 5CDF
5CF8 5DF9 5E21 5E22 5E23 5E20 5E24 5EB0 5EA4 5EA2
5E9B 5EA3 5EA5 5F07 5F2E 5F56 5F86 6037 6039 6054
6072 605E 6045 6053 6047 6049 605B 604C 6040 6042
605F 6024 6044 6058 6066 606E 6242 6243 62CF 630D
630B 62F5 630E 6303 62EB 62F9 630F 630C 62F8 62F6
6300 6313 6314 62FA 6315 62FB 62F0 6541 6543 65AA
65BF 6636 6621 6632 6635 661C 6626 6622 6633 662B
663A 661D 6634 6639 662E 670F 6710 67C1 67F2 67C8
67BA 67DC 67BB 67F8 67D8 67C0 67B7 67C5 67EB 67E4
67DF 67B5 67CD 67B3 67F7 67F6 67EE 67E3 67C2 67B9
67CE 67E7 67F0 67B2 67FC 67C6 67ED 67CC 67AE 67E6
67DB 67FA 67C9 67CA 67C3 67EA 67CB 6B28 6B82 6B84
6BB6 6BD6 6BD8 6BE0 6C20 6C21 6D28 6D34 6D2D 6D1F
6D3C 6D3F 6D12 6D0A 6CDA 6D33 6D04 6D19 6D3A 6D1A
6D11 6D00 6D1D 6D42 6D01 6D18 6D37 6D03 6D0F 6D40
6D07 6D20 6D2C 6D08 6D22 6D09 6D10 70B7 709F 70BE
70B1 70B0 70A1 70B4 70B5 70A9 7241 7249 724A 726C
7270 7273 726E 72CA 72E4 72E8 72EB 72DF 72EA 72E6
72E3 7385 73CC 73C2 73C8 73C5 73B9 73B6 73B5 73B4
73EB 73BF 73C7 73BE 73C3 73C6 73B8 73CB 74EC 74EE
752E 7547 7548 75A7 75AA 7679 76C4 7708 7703 7704
7705 770A 76F7 76FB 76FA 77E7 77E8 7806 7811 7812
7805 7810 780F 780E 7809 7803 7813 794A 794C 794B
7945 7944 79D5 79CD 79CF 79D6 79CE 7A80 7A7E 7AD1
7B00 7B01 7C7A 7C78 7C79 7C7F 7C80 7C81 7D03 7D08
7D01 7F58 7F91 7F8D 7FBE 8007 800E 800F 8014 8037
80D8 80C7 80E0 80D1 80C8 80C2 80D0 80C5 80E3 80D9
80DC 80CA 80D5 80C9 80CF 80D7 80E6 80CD 81FF 8221
8294 82D9 82FE 82F9 8307 82E8 8300 82D5 833A 82EB
82D6 82F4 82EC 82E1 82F2 82F5 830C 82FB 82F6 82F0
82EA 82E4 82E0 82FA 82F3 82ED 8677 8674 867C 8673
8841 884E 8867 886A 8869 89D3 8A04 8A07 8D72 8FE3
8FE1 8FEE 8FE0 90F1 90BD 90BF 90D5 90C5 90BE 90C7
90CB 90C8 91D4 91D3 9654 964F 9651 9653 964A 964E
501E 5005 5007 5013 5022 5030 501B 4FF5 4FF4 5033
5037 502C 4FF6 4FF7 5017 501C 5020 5027 5035 502F
5031 500E 515A 5194 5193 51CA 51C4 51C5 51C8 51CE
5261 525A 5252 525E 525F 5255 5262 52CD 530E 539E
5526 54E2 5517 5512 54E7 54F3 54E4 551A 54FF 5504
5508 54EB 5511 5505 54F1 550A 54FB 54F7 54F8 54E0
550E 5503 550B 5701 5702 57CC 5832 57D5 57D2 57BA
57C6 57BD 57BC 57B8 57B6 57BF 57C7 57D0 57B9 57C1
590E 594A 5A19 5A16 5A2D 5A2E 5A15 5A0F 5A17 5A0A
5A1E 5A33 5B6C 5BA7 5BAD 5BAC 5C03 5C56 5C54 5CEC
5CFF 5CEE 5CF1 5CF7 5D00 5CF9 5E29 5E28 5EA8 5EAE
5EAA 5EAC 5F33 5F30 5F67 605D 605A 6067 6041 60A2
6088 6080 6092 6081 609D 6083 6095 609B 6097 6087
609C 608E 6219 6246 62F2 6310 6356 632C 6344 6345
6336 6343 63E4 6339 634B 634A 633C 6329 6341 6334
6358 6354 6359 632D 6347 6333 635A 6351 6338 6357
6340 6348 654A 6546 65C6 65C3 65C4 65C2 664A 665F
6647 6651 6712 6713 681F 681A 6849 6832 6833 683B
684B 684F 6816 6831 681C 6835 682B 682D 682F 684E
6844 6834 681D 6812 6814 6826 6828 682E 684D 683A
6825 6820 6B2C 6B2F 6B2D 6B31 6B34 6B6D 8082 6B88
6BE6 6BE4 6BE8 6BE3 6BE2 6BE7 6C25 6D7A 6D63 6D64
6D76 6D0D 6D61 6D92 6D58 6D62 6D6D 6D6F 6D91 6D8D
6DEF 6D7F 6D86 6D5E 6D67 6D60 6D97 6D70 6D7C 6D5F
6D82 6D98 6D2F 6D68 6D8B 6D7E 6D80 6D84 6D16 6D83
6D7B 6D7D 6D75 6D90 70DC 70D3 70D1 70DD 70CB 7F39
70E2 70D7 70D2 70DE 70E0 70D4 70CD 70C5 70C6 70C7
70DA 70CE 70E1 7242 7278 7277 7276 7300 72FA 72F4
72FE 72F6 72F3 72FB 7301 73D3 73D9 73E5 73D6 73BC
73E7 73E3 73E9 73DC 73D2 73DB 73D4 73DD 73DA 73D7
73D8 73E8 74DE 74DF 74F4 74F5 7521 755B 755F 75B0
75C1 75BB 75C4 75C0 75BF 75B6 75BA 768A 76C9 771D
771B 7710 7713 7712 7723 7711 7715 7719 771A 7722
7727 7823 782C 7822 7835 782F 7828 782E 782B 7821
7829 7833 782A 7831 7954 795B 794F 795C 7953 7952
7951 79EB 79EC 79E0 79EE 79ED 79EA 79DC 79DE 79DD
7A86 7A89 7A85 7A8B 7A8C 7A8A 7A87 7AD8 7B10 7B04
7B13 7B05 7B0F 7B08 7B0A 7B0E 7B09 7B12 7C84 7C91
7C8A 7C8C 7C88 7C8D 7C85 7D1E 7D1D 7D11 7D0E 7D18
7D16 7D13 7D1F 7D12 7D0F 7D0C 7F5C 7F61 7F5E 7F60
7F5D 7F5B 7F96 7F92 7FC3 7FC2 7FC0 8016 803E 8039
80FA 80F2 80F9 80F5 8101 80FB 8100 8201 822F 8225
8333 832D 8344 8319 8351 8325 8356 833F 8341 8326
831C 8322 8342 834E 831B 832A 8308 833C 834D 8316
8324 8320 8337 832F 8329 8347 8345 834C 8353 831E
832C 834B 8327 8348 8653 8652 86A2 86A8 8696 868D
8691 869E 8687 8697 8686 868B 869A 8685 86A5 8699
86A1 86A7 8695 8698 868E 869D 8690 8694 8843 8844
886D 8875 8876 8872 8880 8871 887F 886F 8883 887E
8874 887C 8A12 8C47 8C57 8C7B 8CA4 8CA3 8D76 8D78
8DB5 8DB7 8DB6 8ED1 8ED3 8FFE 8FF5 9002 8FFF 8FFB
9004 8FFC 8FF6 90D6 90E0 90D9 90DA 90E3 90DF 90E5
90D8 90DB 90D7 90DC 90E4 9150 914E 914F 91D5 91E2
91DA 965C 965F 96BC 98E3 9ADF 9B2F 4E7F 5070 506A
5061 505E 5060 5053 504B 505D 5072 5048 504D 5041
505B 504A 5062 5015 5045 505F 5069 506B 5063 5064
5046 5040 506E 5073 5057 5051 51D0 526B 526D 526C
526E 52D6 52D3 532D 539C 5575 5576 553C 554D 5550
5534 552A 5551 5562 5536 5535 5530 5552 5545 550C
5532 5565 554E 5539 5548 552D 553B 5540 554B 570A
5707 57FB 5814 57E2 57F6 57DC 57F4 5800 57ED 57FD
5808 57F8 580B 57F3 57CF 5807 57EE 57E3 57F2 57E5
57EC 57E1 580E 57FC 5810 57E7 5801 580C 57F1 57E9
57F0 580D 5804 595C 5A60 5A58 5A55 5A67 5A5E 5A38
5A35 5A6D 5A50 5A5F 5A65 5A6C 5A53 5A64 5A57 5A43
5A5D 5A52 5A44 5A5B 5A48 5A8E 5A3E 5A4D 5A39 5A4C
5A70 5A69 5A47 5A51 5A56 5A42 5A5C 5B72 5B6E 5BC1
5BC0 5C59 5D1E 5D0B 5D1D 5D1A 5D20 5D0C 5D28 5D0D
5D26 5D25 5D0F 5D30 5D12 5D23 5D1F 5D2E 5E3E 5E34
5EB1 5EB4 5EB9 5EB2 5EB3 5F36 5F38 5F9B 5F96 5F9F
608A 6090 6086 60BE 60B0 60BA 60D3 60D4 60CF 60E4
60D9 60DD 60C8 60B1 60DB 60B7 60CA 60BF 60C3 60CD
60C0 6332 6365 638A 6382 637D 63BD 639E 63AD 639D
6397 63AB 638E 636F 6387 6390 636E 63AF 6375 639C
636D 63AE 637C 63A4 633B 639F 6378 6385 6381 6391
638D 6370 6553 65CD 6665 6661 665B 6659 665C 6662
6718 6879 6887 6890 689C 686D 686E 68AE 68AB 6956
686F 68A3 68AC 68A9 6875 6874 68B2 688F 6877 6892
687C 686B 6872 68AA 6880 6871 687E 689B 6896 688B
68A0 6889 68A4 6878 687B 6891 688C 688A 687D 6B36
6B33 6B37 6B38 6B91 6B8F 6B8D 6B8E 6B8C 6C2A 6DC0
6DAB 6DB4 6DB3 6E74 6DAC 6DE9 6DE2 6DB7 6DF6 6DD4
6E00 6DC8 6DE0 6DDF 6DD6 6DBE 6DE5 6DDC 6DDD 6DDB
6DF4 6DCA 6DBD 6DED 6DF0 6DBA 6DD5 6DC2 6DCF 6DC9
6DD0 6DF2 6DD3 6DFD 6DD7 6DCD 6DE3 6DBB 70FA 710D
70F7 7117 70F4 710C 70F0 7104 70F3 7110 70FC 70FF
7106 7113 7100 70F8 70F6 710B 7102 710E 727E 727B
727C 727F 731D 7317 7307 7311 7318 730A 7308 72FF
730F 731E 7388 73F6 73F8 73F5 7404 7401 73FD 7407
7400 73FA 73FC 73FF 740C 740B 73F4 7408 7564 7563
75CE 75D2 75CF 75CB 75CC 75D1 75D0 768F 7689 76D3
7739 772F 772D 7731 7732 7734 7733 773D 7725 773B
7735 7848 7852 7849 784D 784A 784C 7826 7845 7850
7964 7967 7969 796A 7963 796B 7961 79BB 79FA 79F8
79F6 79F7 7A8F 7A94 7A90 7B35 7B47 7B34 7B25 7B30
7B22 7B24 7B33 7B18 7B2A 7B1D 7B31 7B2B 7B2D 7B2F
7B32 7B38 7B1A 7B23 7C94 7C98 7C96 7CA3 7D35 7D3D
7D38 7D36 7D3A 7D45 7D2C 7D29 7D41 7D47 7D3E 7D3F
7D4A 7D3B 7D28 7F63 7F95 7F9C 7F9D 7F9B 7FCA 7FCB
7FCD 7FD0 7FD1 7FC7 7FCF 7FC9 801F 801E 801B 8047
8043 8048 8118 8125 8119 811B 812D 811F 812C 811E
8121 8115 8127 811D 8122 8211 8238 8233 823A 8234
8232 8274 8390 83A3 83A8 838D 837A 8373 83A4 8374
838F 8381 8395 8399 8375 8394 83A9 837D 8383 838C
839D 839B 83AA 838B 837E 83A5 83AF 8388 8397 83B0
837F 83A6 8387 83AE 8376 839A 8659 8656 86BF 86B7
86C2 86C1 86C5 86BA 86B0 86C8 86B9 86B3 86B8 86CC
86B4 86BB 86BC 86C3 86BD 86BE 8852 8889 8895 88A8
88A2 88AA 889A 8891 88A1 889F 8898 88A7 8899 889B
8897 88A4 88AC 888C 8893 888E 8982 89D6 89D9 89D5
8A30 8A27 8A2C 8A1E 8C39 8C3B 8C5C 8C5D 8C7D 8CA5
8D7D 8D7B 8D79 8DBC 8DC2 8DB9 8DBF 8DC1 8ED8 8EDE
8EDD 8EDC 8ED7 8EE0 8EE1 9024 900B 9011 901C 900C
9021 90EF 90EA 90F0 90F4 90F2 90F3 90D4 90EB 90EC
90E9 9156 9158 915A 9153 9155 91EC 91F4 91F1 91F3
91F8 91E4 91F9 91EA 91EB 91F7 91E8 91EE 957A 9586
9588 967C 966D 966B 9671 966F 96BF 976A 9804 98E5
9997 509B 5095 5094 509E 508B 50A3 5083 508C 508E
509D 5068 509C 5092 5082 5087 515F 51D4 5312 5311
53A4 53A7 5591 55A8 55A5 55AD 5577 5645 55A2 5593
5588 558F 55B5 5581 55A3 5592 55A4 557D 558C 55A6
557F 5595 55A1 558E 570C 5829 5837 5819 581E 5827
5823 5828 57F5 5848 5825 581C 581B 5833 583F 5836
582E 5839 5838 582D 582C 583B 5961 5AAF 5A94 5A9F
5A7A 5AA2 5A9E 5A78 5AA6 5A7C 5AA5 5AAC 5A95 5AAE
5A37 5A84 5A8A 5A97 5A83 5A8B 5AA9 5A7B 5A7D 5A8C
5A9C 5A8F 5A93 5A9D 5BEA 5BCD 5BCB 5BD4 5BD1 5BCA
5BCE 5C0C 5C30 5D37 5D43 5D6B 5D41 5D4B 5D3F 5D35
5D51 5D4E 5D55 5D33 5D3A 5D52 5D3D 5D31 5D59 5D42
5D39 5D49 5D38 5D3C 5D32 5D36 5D40 5D45 5E44 5E41
5F58 5FA6 5FA5 5FAB 60C9 60B9 60CC 60E2 60CE 60C4
6114 60F2 610A 6116 6105 60F5 6113 60F8 60FC 60FE
60C1 6103 6118 611D 6110 60FF 6104 610B 624A 6394
63B1 63B0 63CE 63E5 63E8 63EF 63C3 649D 63F3 63CA
63E0 63F6 63D5 63F2 63F5 6461 63DF 63BE 63DD 63DC
63C4 63D8 63D3 63C2 63C7 63CC 63CB 63C8 63F0 63D7
63D9 6532 6567 656A 6564 655C 6568 6565 658C 659D
659E 65AE 65D0 65D2 667C 666C 667B 6680 6671 6679
666A 6672 6701 690C 68D3 6904 68DC 692A 68EC 68EA
68F1 690F 68D6 68F7 68EB 68E4 68F6 6913 6910 68F3
68E1 6907 68CC 6908 6970 68B4 6911 68EF 68C6 6914
68F8 68D0 68FD 68FC 68E8 690B 690A 6917 68CE 68C8
68DD 68DE 68E6 68F4 68D1 6906 68D4 68E9 6915 6925
68C7 6B39 6B3B 6B3F 6B3C 6B94 6B97 6B99 6B95 6BBD
6BF0 6BF2 6BF3 6C30 6DFC 6E46 6E47 6E1F 6E49 6E88
6E3C 6E3D 6E45 6E62 6E2B 6E3F 6E41 6E5D 6E73 6E1C
6E33 6E4B 6E40 6E51 6E3B 6E03 6E2E 6E5E 6E68 6E5C
6E61 6E31 6E28 6E60 6E71 6E6B 6E39 6E22 6E30 6E53
6E65 6E27 6E78 6E64 6E77 6E55 6E79 6E52 6E66 6E35
6E36 6E5A 7120 711E 712F 70FB 712E 7131 7123 7125
7122 7132 711F 7128 713A 711B 724B 725A 7288 7289
7286 7285 728B 7312 730B 7330 7322 7331 7333 7327
7332 732D 7326 7323 7335 730C 742E 742C 7430 742B
7416 741A 7421 742D 7431 7424 7423 741D 7429 7420
7432 74FB 752F 756F 756C 75E7 75DA 75E1 75E6 75DD
75DF 75E4 75D7 7695 7692 76DA 7746 7747 7744 774D
7745 774A 774E 774B 774C 77DE 77EC 7860 7864 7865
785C 786D 7871 786A 786E 7870 7869 7868 785E 7862
7974 7973 7972 7970 7A02 7A0A 7A03 7A0C 7A04 7A99
7AE6 7AE4 7B4A 7B3B 7B44 7B48 7B4C 7B4E 7B40 7B58
7B45 7CA2 7C9E 7CA8 7CA1 7D58 7D6F 7D63 7D53 7D56
7D67 7D6A 7D4F 7D6D 7D5C 7D6B 7D52 7D54 7D69 7D51
7D5F 7D4E 7F3E 7F3F 7F65 7F66 7FA2 7FA0 7FA1 7FD7
8051 804F 8050 80FE 80D4 8143 814A 8152 814F 8147
813D 814D 813A 81E6 81EE 81F7 81F8 81F9 8204 823C
823D 823F 8275 833B 83CF 83F9 8423 83C0 83E8 8412
83E7 83E4 83FC 83F6 8410 83C6 83C8 83EB 83E3 83BF
8401 83DD 83E5 83D8 83FF 83E1 83CB 83CE 83D6 83F5
83C9 8409 840F 83DE 8411 8406 83C2 83F3 83D5 83FA
83C7 83D1 83EA 8413 83C3 83EC 83EE 83C4 83FB 83D7
83E2 841B 83DB 83FE 86D8 86E2 86E6 86D3 86E3 86DA
86EA 86DD 86EB 86DC 86EC 86E9 86D7 86E8 86D1 8848
8856 8855 88BA 88D7 88B9 88B8 88C0 88BE 88B6 88BC
88B7 88BD 88B2 8901 88C9 8995 8998 8997 89DD 89DA
89DB 8A4E 8A4D 8A39 8A59 8A40 8A57 8A58 8A44 8A45
8A52 8A48 8A51 8A4A 8A4C 8A4F 8C5F 8C81 8C80 8CBA
8CBE 8CB0 8CB9 8CB5 8D84 8D80 8D89 8DD8 8DD3 8DCD
8DC7 8DD6 8DDC 8DCF 8DD5 8DD9 8DC8 8DD7 8DC5 8EEF
8EF7 8EFA 8EF9 8EE6 8EEE 8EE5 8EF5 8EE7 8EE8 8EF6
8EEB 8EF1 8EEC 8EF4 8EE9 902D 9034 902F 9106 912C
9104 90FF 90FC 9108 90F9 90FB 9101 9100 9107 9105
9103 9161 9164 915F 9162 9160 9201 920A 9225 9203
921A 9226 920F 920C 9200 9212 91FF 91FD 9206 9204
9227 9202 921C 9224 9219 9217 9205 9216 957B 958D
958C 9590 9687 967E 9688 9689 9683 9680 96C2 96C8
96C3 96F1 96F0 976C 9770 976E 9807 98A9 98EB 9CE6
9EF9 4E83 4E84 4EB6 50BD 50BF 50C6 50AE 50C4 50CA
50B4 50C8 50C2 50B0 50C1 50BA 50B1 50CB 50C9 50B6
50B8 51D7 527A 5278 527B 527C 55C3 55DB 55CC 55D0
55CB 55CA 55DD 55C0 55D4 55C4 55E9 55BF 55D2 558D
55CF 55D5 55E2 55D6 55C8 55F2 55CD 55D9 55C2 5714
5853 5868 5864 584F 584D 5849 586F 5855 584E 585D
5859 5865 585B 583D 5863 5871 58FC 5AC7 5AC4 5ACB
5ABA 5AB8 5AB1 5AB5 5AB0 5ABF 5AC8 5ABB 5AC6 5AB7
5AC0 5ACA 5AB4 5AB6 5ACD 5AB9 5A90 5BD6 5BD8 5BD9
5C1F 5C33 5D71 5D63 5D4A 5D65 5D72 5D6C 5D5E 5D68
5D67 5D62 5DF0 5E4F 5E4E 5E4A 5E4D 5E4B 5EC5 5ECC
5EC6 5ECB 5EC7 5F40 5FAF 5FAD 60F7 6149 614A 612B
6145 6136 6132 612E 6146 612F 614F 6129 6140 6220
9168 6223 6225 6224 63C5 63F1 63EB 6410 6412 6409
6420 6424 6433 6443 641F 6415 6418 6439 6437 6422
6423 640C 6426 6430 6428 6441 6435 642F 640A 641A
6440 6425 6427 640B 63E7 641B 642E 6421 640E 656F
6592 65D3 6686 668C 6695 6690 668B 668A 6699 6694
6678 6720 6966 695F 6938 694E 6962 6971 693F 6945
696A 6939 6942 6957 6959 697A 6948 6949 6935 696C
6933 693D 6965 68F0 6978 6934 6969 6940 696F 6944
6976 6958 6941 6974 694C 693B 694B 6937 695C 694F
6951 6932 6952 692F 697B 693C 6B46 6B45 6B43 6B42
6B48 6B41 6B9B 6BFB 6BFC 6BF9 6BF7 6BF8 6E9B 6ED6
6EC8 6E8F 6EC0 6E9F 6E93 6E94 6EA0 6EB1 6EB9 6EC6
6ED2 6EBD 6EC1 6E9E 6EC9 6EB7 6EB0 6ECD 6EA6 6ECF
6EB2 6EBE 6EC3 6EDC 6ED8 6E99 6E92 6E8E 6E8D 6EA4
6EA1 6EBF 6EB3 6ED0 6ECA 6E97 6EAE 6EA3 7147 7154
7152 7163 7160 7141 715D 7162 7172 7178 716A 7161
7142 7158 7143 714B 7170 715F 7150 7153 7144 714D
715A 724F 728D 728C 7291 7290 728E 733C 7342 733B
733A 7340 734A 7349 7444 744A 744B 7452 7451 7457
7440 744F 7450 744E 7442 7446 744D 7454 74E1 74FF
74FE 74FD 751D 7579 7577 6983 75EF 760F 7603 75F7
75FE 75FC 75F9 75F8 7610 75FB 75F6 75ED 75F5 75FD
7699 76B5 76DD 7755 775F 7760 7752 7756 775A 7769
7767 7754 7759 776D 77E0 7887 789A 7894 788F 7884
7895 7885 7886 78A1 7883 7879 7899 7880 7896 787B
797C 7982 797D 7979 7A11 7A18 7A19 7A12 7A17 7A15
7A22 7A13 7A1B 7A10 7AA3 7AA2 7A9E 7AEB 7B66 7B64
7B6D 7B74 7B69 7B72 7B65 7B73 7B71 7B70 7B61 7B78
7B76 7B63 7CB2 7CB4 7CAF 7D88 7D86 7D80 7D8D 7D7F
7D85 7D7A 7D8E 7D7B 7D83 7D7C 7D8C 7D94 7D84 7D7D
7D92 7F6D 7F6B 7F67 7F68 7F6C 7FA6 7FA5 7FA7 7FDB
7FDC 8021 8164 8160 8177 815C 8169 815B 8162 8172
6721 815E 8176 8167 816F 8144 8161 821D 8249 8244
8240 8242 8245 84F1 843F 8456 8476 8479 848F 848D
8465 8451 8440 8486 8467 8430 844D 847D 845A 8459
8474 8473 845D 8507 845E 8437 843A 8434 847A 8443
8478 8432 8445 8429 83D9 844B 842F 8442 842D 845F
8470 8439 844E 844C 8452 846F 84C5 848E 843B 8447
8436 8433 8468 847E 8444 842B 8460 8454 846E 8450
870B 8704 86F7 870C 86FA 86D6 86F5 874D 86F8 870E
8709 8701 86F6 870D 8705 88D6 88CB 88CD 88CE 88DE
88DB 88DA 88CC 88D0 8985 899B 89DF 89E5 89E4 89E1
89E0 89E2 89DC 89E6 8A76 8A86 8A7F 8A61 8A3F 8A77
8A82 8A84 8A75 8A83 8A81 8A74 8A7A 8C3C 8C4B 8C4A
8C65 8C64 8C66 8C86 8C84 8C85 8CCC 8D68 8D69 8D91
8D8C 8D8E 8D8F 8D8D 8D93 8D94 8D90 8D92 8DF0 8DE0
8DEC 8DF1 8DEE 8DD0 8DE9 8DE3 8DE2 8DE7 8DF2 8DEB
8DF4 8F06 8EFF 8F01 8F00 8F05 8F07 8F08 8F02 8F0B
9052 903F 9044 9049 903D 9110 910D 910F 9111 9116
9114 910B 910E 916E 916F 9248 9252 9230 923A 9266
9233 9265 925E 9283 922E 924A 9246 926D 926C 924F
9260 9267 926F 9236 9261 9270 9231 9254 9263 9250
9272 924E 9253 924C 9256 9232 959F 959C 959E 959B
9692 9693 9691 9697 96CE 96FA 96FD 96F8 96F5 9773
9777 9778 9772 980F 980D 980E 98AC 98F6 98F9 99AF
99B2 99B0 99B5 9AAD 9AAB 9B5B 9CEA 9CED 9CE7 9E80
9EFD 50E6 50D4 50D7 50E8 50F3 50DB 50EA 50DD 50E4
50D3 50EC 50F0 50EF 50E3 50E0 51D8 5280 5281 52E9
52EB 5330 53AC 5627 5615 560C 5612 55FC 560F 561C
5601 5613 5602 55FA 561D 5604 55FF 55F9 5889 587C
5890 5898 5886 5881 587F 5874 588B 587A 5887 5891
588E 5876 5882 5888 587B 5894 588F 58FE 596B 5ADC
5AEE 5AE5 5AD5 5AEA 5ADA 5AED 5AEB 5AF3 5AE2 5AE0
5ADB 5AEC 5ADE 5ADD 5AD9 5AE8 5ADF 5B77 5BE0 5BE3
5C63 5D82 5D80 5D7D 5D86 5D7A 5D81 5D77 5D8A 5D89
5D88 5D7E 5D7C 5D8D 5D79 5D7F 5E58 5E59 5E53 5ED8
5ED1 5ED7 5ECE 5EDC 5ED5 5ED9 5ED2 5ED4 5F44 5F43
5F6F 5FB6 612C 6128 6141 615E 6171 6173 6152 6153
6172 616C 6180 6174 6154 617A 615B 6165 613B 616A
6161 6156 6229 6227 622B 642B 644D 645B 645D 6474
6476 6472 6473 647D 6475 6466 64A6 644E 6482 645E
645C 644B 6453 6460 6450 647F 643F 646C 646B 6459
6465 6477 6573 65A0 66A1 66A0 669F 6705 6704 6722
69B1 69B6 69C9 69A0 69CE 6996 69B0 69AC 69BC 6991
6999 698E 69A7 698D 69A9 69BE 69AF 69BF 69C4 69BD
69A4 69D4 69B9 69CA 699A 69CF 69B3 6993 69AA 69A1
699E 69D9 6997 6990 69C2 69B5 69A5 69C6 6B4A 6B4D
6B4B 6B9E 6B9F 6BA0 6BC3 6BC4 6BFE 6ECE 6EF5 6EF1
6F03 6F25 6EF8 6F37 6EFB 6F2E 6F09 6F4E 6F19 6F1A
6F27 6F18 6F3B 6F12 6EED 6F0A 6F36 6F73 6EF9 6EEE
6F2D 6F40 6F30 6F3C 6F35 6EEB 6F07 6F0E 6F43 6F05
6EFD 6EF6 6F39 6F1C 6EFC 6F3A 6F1F 6F0D 6F1E 6F08
6F21 7187 7190 7189 7180 7185 7182 718F 717B 7186
7181 7197 7244 7253 7297 7295 7293 7343 734D 7351
734C 7462 7473 7471 7475 7472 7467 746E 7500 7502
7503 757D 7590 7616 7608 760C 7615 7611 760A 7614
76B8 7781 777C 7785 7782 776E 7780 776F 777E 7783
78B2 78AA 78B4 78AD 78A8 787E 78AB 789E 78A5 78A0
78AC 78A2 78A4 7998 798A 798B 7996 7995 7994 7993
7997 7988 7992 7990 7A2B 7A4A 7A30 7A2F 7A28 7A26
7AA8 7AAB 7AAC 7AEE 7B88 7B9C 7B8A 7B91 7B90 7B96
7B8D 7B8C 7B9B 7B8E 7B85 7B98 5284 7B99 7BA4 7B82
7CBB 7CBF 7CBC 7CBA 7DA7 7DB7 7DC2 7DA3 7DAA 7DC1
7DC0 7DC5 7D9D 7DCE 7DC4 7DC6 7DCB 7DCC 7DAF 7DB9
7D96 7DBC 7D9F 7DA6 7DAE 7DA9 7DA1 7DC9 7F73 7FE2
7FE3 7FE5 7FDE 8024 805D 805C 8189 8186 8183 8187
818D 818C 818B 8215 8497 84A4 84A1 849F 84BA 84CE
84C2 84AC 84AE 84AB 84B9 84B4 84C1 84CD 84AA 849A
84B1 84D0 849D 84A7 84BB 84A2 8494 84C7 84CC 849B
84A9 84AF 84A8 84D6 8498 84B6 84CF 84A0 84D7 84D4
84D2 84DB 84B0 8491 8661 8733 8723 8728 876B 8740
872E 871E 8721 8719 871B 8743 872C 8741 873E 8746
8720 8732 872A 872D 873C 8712 873A 8731 8735 8742
8726 8727 8738 8724 871A 8730 8711 88F7 88E7 88F1
88F2 88FA 88FE 88EE 88FC 88F6 88FB 88F0 88EC 88EB
899D 89A1 899F 899E 89E9 89EB 89E8 8AAB 8A99 8A8B
8A92 8A8F 8A96 8C3D 8C68 8C69 8CD5 8CCF 8CD7 8D96
8E09 8E02 8DFF 8E0D 8DFD 8E0A 8E03 8E07 8E06 8E05
8DFE 8E00 8E04 8F10 8F11 8F0E 8F0D 9123 911C 9120
9122 911F 911D 911A 9124 9121 911B 917A 9172 9179
9173 92A5 92A4 9276 929B 927A 92A0 9294 92AA 928D
92A6 929A 92AB 9279 9297 927F 92A3 92EE 928E 9282
9295 92A2 927D 9288 92A1 928A 9286 928C 9299 92A7
927E 9287 92A9 929D 928B 922D 969E 96A1 96FF 9758
977D 977A 977E 9783 9780 9782 977B 9784 9781 977F
97CE 97CD 9816 98AD 98AE 9902 9900 9907 999D 999C
99C3 99B9 99BB 99BA 99C2 99BD 99C7 9AB1 9AE3 9AE7
9B3E 9B3F 9B60 9B61 9B5F 9CF1 9CF2 9CF5 9EA7 50FF
5103 5130 50F8 5106 5107 50F6 50FE 510B 510C 50FD
510A 528B 528C 52F1 52EF 5648 5642 564C 5635 5641
564A 5649 5646 5658 565A 5640 5633 563D 562C 563E
5638 562A 563A 571A 58AB 589D 58B1 58A0 58A3 58AF
58AC 58A5 58A1 58FF 5AFF 5AF4 5AFD 5AF7 5AF6 5B03
5AF8 5B02 5AF9 5B01 5B07 5B05 5B0F 5C67 5D99 5D97
5D9F 5D92 5DA2 5D93 5D95 5DA0 5D9C 5DA1 5D9A 5D9E
5E69 5E5D 5E60 5E5C 7DF3 5EDB 5EDE 5EE1 5F49 5FB2
618B 6183 6179 61B1 61B0 61A2 6189 619B 6193 61AF
61AD 619F 6192 61AA 61A1 618D 6166 61B3 622D 646E
6470 6496 64A0 6485 6497 649C 648F 648B 648A 648C
64A3 649F 6468 64B1 6498 6576 657A 6579 657B 65B2
65B3 66B5 66B0 66A9 66B2 66B7 66AA 66AF 6A00 6A06
6A17 69E5 69F8 6A15 69F1 69E4 6A20 69FF 69EC 69E2
6A1B 6A1D 69FE 6A27 69F2 69EE 6A14 69F7 69E7 6A40
6A08 69E6 69FB 6A0D 69FC 69EB 6A09 6A04 6A18 6A25
6A0F 69F6 6A26 6A07 69F4 6A16 6B51 6BA5 6BA3 6BA2
6BA6 6C01 6C00 6BFF 6C02 6F41 6F26 6F7E 6F87 6FC6
6F92 6F8D 6F89 6F8C 6F62 6F4F 6F85 6F5A 6F96 6F76
6F6C 6F82 6F55 6F72 6F52 6F50 6F57 6F94 6F93 6F5D
6F00 6F61 6F6B 6F7D 6F67 6F90 6F53 6F8B 6F69 6F7F
6F95 6F63 6F77 6F6A 6F7B 71B2 71AF 719B 71B0 71A0
719A 71A9 71B5 719D 71A5 719E 71A4 71A1 71AA 719C
71A7 71B3 7298 729A 7358 7352 735E 735F 7360 735D
735B 7361 735A 7359 7362 7487 7489 748A 7486 7481
747D 7485 7488 747C 7479 7508 7507 757E 7625 761E
7619 761D 761C 7623 761A 7628 761B 769C 769D 769E
769B 778D 778F 7789 7788 78CD 78BB 78CF 78CC 78D1
78CE 78D4 78C8 78C3 78C4 78C9 799A 79A1 79A0 799C
79A2 799B 6B76 7A39 7AB2 7AB4 7AB3 7BB7 7BCB 7BBE
7BAC 7BCE 7BAF 7BB9 7BCA 7BB5 7CC5 7CC8 7CCC 7CCB
7DF7 7DDB 7DEA 7DE7 7DD7 7DE1 7E03 7DFA 7DE6 7DF6
7DF1 7DF0 7DEE 7DDF 7F76 7FAC 7FB0 7FAD 7FED 7FEB
7FEA 7FEC 7FE6 7FE8 8064 8067 81A3 819F 819E 8195
81A2 8199 8197 8216 824F 8253 8252 8250 824E 8251
8524 853B 850F 8500 8529 850E 8509 850D 851F 850A
8527 851C 84FB 852B 84FA 8508 850C 84F4 852A 84F2
8515 84F7 84EB 84F3 84FC 8512 84EA 84E9 8516 84FE
8528 851D 852E 8502 84FD 851E 84F6 8531 8526 84E7
84E8 84F0 84EF 84F9 8518 8520 8530 850B 8519 852F
8662 8756 8763 8764 8777 87E1 8773 8758 8754 875B
8752 8761 875A 8751 875E 876D 876A 8750 874E 875F
875D 876F 876C 877A 876E 875C 8765 874F 877B 8775
8762 8767 8769 885A 8905 890C 8914 890B 8917 8918
8919 8906 8916 8911 890E 8909 89A2 89A4 89A3 89ED
89F0 89EC 8ACF 8AC6 8AB8 8AD3 8AD1 8AD4 8AD5 8ABB
8AD7 8ABE 8AC0 8AC5 8AD8 8AC3 8ABA 8ABD 8AD9 8C3E
8C4D 8C8F 8CE5 8CDF 8CD9 8CE8 8CDA 8CDD 8CE7 8DA0
8D9C 8DA1 8D9B 8E20 8E23 8E25 8E24 8E2E 8E15 8E1B
8E16 8E11 8E19 8E26 8E27 8E14 8E12 8E18 8E13 8E1C
8E17 8E1A 8F2C 8F24 8F18 8F1A 8F20 8F23 8F16 8F17
9073 9070 906F 9067 906B 912F 912B 9129 912A 9132
9126 912E 9185 9186 918A 9181 9182 9184 9180 92D0
92C3 92C4 92C0 92D9 92B6 92CF 92F1 92DF 92D8 92E9
92D7 92DD 92CC 92EF 92C2 92E8 92CA 92C8 92CE 92E6
92CD 92D5 92C9 92E0 92DE 92E7 92D1 92D3 92B5 92E1
92C6 92B4 957C 95AC 95AB 95AE 95B0 96A4 96A2 96D3
9705 9708 9702 975A 978A 978E 9788 97D0 97CF 981E
981D 9826 9829 9828 9820 981B 9827 98B2 9908 98FA
9911 9914 9916 9917 9915 99DC 99CD 99CF 99D3 99D4
99CE 99C9 99D6 99D8 99CB 99D7 99CC 9AB3 9AEC 9AEB
9AF3 9AF2 9AF1 9B46 9B43 9B67 9B74 9B71 9B66 9B76
9B75 9B70 9B68 9B64 9B6C 9CFC 9CFA 9CFD 9CFF 9CF7
9D07 9D00 9CF9 9CFB 9D08 9D05 9D04 9E83 9ED3 9F0F
9F10 511C 5113 5117 511A 5111 51DE 5334 53E1 5670
5660 566E 5673 5666 5663 566D 5672 565E 5677 571C
571B 58C8 58BD 58C9 58BF 58BA 58C2 58BC 58C6 5B17
5B19 5B1B 5B21 5B14 5B13 5B10 5B16 5B28 5B1A 5B20
5B1E 5BEF 5DAC 5DB1 5DA9 5DA7 5DB5 5DB0 5DAE 5DAA
5DA8 5DB2 5DAD 5DAF 5DB4 5E67 5E68 5E66 5E6F 5EE9
5EE7 5EE6 5EE8 5EE5 5F4B 5FBC 619D 61A8 6196 61C5
61B4 61C6 61C1 61CC 61BA 61BF 61B8 618C 64D7 64D6
64D0 64CF 64C9 64BD 6489 64C3 64DB 64F3 64D9 6533
657F 657C 65A2 66C8 66BE 66C0 66CA 66CB 66CF 66BD
66BB 66BA 66CC 6723 6A34 6A66 6A49 6A67 6A32 6A68
6A3E 6A5D 6A6D 6A76 6A5B 6A51 6A28 6A5A 6A3B 6A3F
6A41 6A6A 6A64 6A50 6A4F 6A54 6A6F 6A69 6A60 6A3C
6A5E 6A56 6A55 6A4D 6A4E 6A46 6B55 6B54 6B56 6BA7
6BAA 6BAB 6BC8 6BC7 6C04 6C03 6C06 6FAD 6FCB 6FA3
6FC7 6FBC 6FCE 6FC8 6F5E 6FC4 6FBD 6F9E 6FCA 6FA8
7004 6FA5 6FAE 6FBA 6FAC 6FAA 6FCF 6FBF 6FB8 6FA2
6FC9 6FAB 6FCD 6FAF 6FB2 6FB0 71C5 71C2 71BF 71B8
71D6 71C0 71C1 71CB 71D4 71CA 71C7 71CF 71BD 71D8
71BC 71C6 71DA 71DB 729D 729E 7369 7366 7367 736C
7365 736B 736A 747F 749A 74A0 7494 7492 7495 74A1
750B 7580 762F 762D 7631 763D 7633 763C 7635 7632
7630 76BB 76E6 779A 779D 77A1 779C 779B 77A2 77A3
7795 7799 7797 78DD 78E9 78E5 78EA 78DE 78E3 78DB
78E1 78E2 78ED 78DF 78E0 79A4 7A44 7A48 7A47 7AB6
7AB8 7AB5 7AB1 7AB7 7BDE 7BE3 7BE7 7BDD 7BD5 7BE5
7BDA 7BE8 7BF9 7BD4 7BEA 7BE2 7BDC 7BEB 7BD8 7BDF
7CD2 7CD4 7CD7 7CD0 7CD1 7E12 7E21 7E17 7E0C 7E1F
7E20 7E13 7E0E 7E1C 7E15 7E1A 7E22 7E0B 7E0F 7E16
7E0D 7E14 7E25 7E24 7F43 7F7B 7F7C 7F7A 7FB1 7FEF
802A 8029 806C 81B1 81A6 81AE 81B9 81B5 81AB 81B0
81AC 81B4 81B2 81B7 81A7 81F2 8255 8256 8257 8556
8545 856B 854D 8553 8561 8558 8540 8546 8564 8541
8562 8544 8551 8547 8563 853E 855B 8571 854E 856E
8575 8555 8567 8560 858C 8566 855D 8554 8565 856C
8663 8665 8664 879B 878F 8797 8793 8792 8788 8781
8796 8798 8779 8787 87A3 8785 8790 8791 879D 8784
8794 879C 879A 8789 891E 8926 8930 892D 892E 8927
8931 8922 8929 8923 892F 892C 891F 89F1 8AE0 8AE2
8AF2 8AF4 8AF5 8ADD 8B14 8AE4 8ADF 8AF0 8AC8 8ADE
8AE1 8AE8 8AFF 8AEF 8AFB 8C91 8C92 8C90 8CF5 8CEE
8CF1 8CF0 8CF3 8D6C 8D6E 8DA5 8DA7 8E33 8E3E 8E38
8E40 8E45 8E36 8E3C 8E3D 8E41 8E30 8E3F 8EBD 8F36
8F2E 8F35 8F32 8F39 8F37 8F34 9076 9079 907B 9086
90FA 9133 9135 9136 9193 9190 9191 918D 918F 9327
931E 9308 931F 9306 930F 937A 9338 933C 931B 9323
9312 9301 9346 932D 930E 930D 92CB 931D 92FA 9325
9313 92F9 92F7 9334 9302 9324 92FF 9329 9339 9335
932A 9314 930C 930B 92FE 9309 9300 92FB 9316 95BC
95CD 95BE 95B9 95BA 95B6 95BF 95B5 95BD 96A9 96D4
970B 9712 9710 9799 9797 9794 97F0 97F8 9835 982F
9832 9924 991F 9927 9929 999E 99EE 99EC 99E5 99E4
99F0 99E3 99EA 99E9 99E7 9AB9 9ABF 9AB4 9ABB 9AF6
9AFA 9AF9 9AF7 9B33 9B80 9B85 9B87 9B7C 9B7E 9B7B
9B82 9B93 9B92 9B90 9B7A 9B95 9B7D 9B88 9D25 9D17
9D20 9D1E 9D14 9D29 9D1D 9D18 9D22 9D10 9D19 9D1F
9E88 9E86 9E87 9EAE 9EAD 9ED5 9ED6 9EFA 9F12 9F3D
5126 5125 5122 5124 5120 5129 52F4 5693 568C 568D
5686 5684 5683 567E 5682 567F 5681 58D6 58D4 58CF
58D2 5B2D 5B25 5B32 5B23 5B2C 5B27 5B26 5B2F 5B2E
5B7B 5BF1 5BF2 5DB7 5E6C 5E6A 5FBE 5FBB 61C3 61B5
61BC 61E7 61E0 61E5 61E4 61E8 61DE 64EF 64E9 64E3
64EB 64E4 64E8 6581 6580 65B6 65DA 66D2 6A8D 6A96
6A81 6AA5 6A89 6A9F 6A9B 6AA1 6A9E 6A87 6A93 6A8E
6A95 6A83 6AA8 6AA4 6A91 6A7F 6AA6 6A9A 6A85 6A8C
6A92 6B5B 6BAD 6C09 6FCC 6FA9 6FF4 6FD4 6FE3 6FDC
6FED 6FE7 6FE6 6FDE 6FF2 6FDD 6FE2 6FE8 71E1 71F1
71E8 71F2 71E4 71F0 71E2 7373 736E 736F 7497 74B2
74AB 7490 74AA 74AD 74B1 74A5 74AF 7510 7511 7512
750F 7584 7643 7648 7649 7647 76A4 76E9 77B5 77AB
77B2 77B7 77B6 77B4 77B1 77A8 77F0 78F3 78FD 7902
78FB 78FC 78F2 7905 78F9 78FE 7904 79AB 79A8 7A5C
7A5B 7A56 7A58 7A54 7A5A 7ABE 7AC0 7AC1 7C05 7C0F
7BF2 7C00 7BFF 7BFB 7C0E 7BF4 7C0B 7BF3 7C02 7C09
7C03 7C01 7BF8 7BFD 7C06 7BF0 7BF1 7C10 7C0A 7CE8
7E2D 7E3C 7E42 7E33 9848 7E38 7E2A 7E49 7E40 7E47
7E29 7E4C 7E30 7E3B 7E36 7E44 7E3A 7F45 7F7F 7F7E
7F7D 7FF4 7FF2 802C 81BB 81C4 81CC 81CA 81C5 81C7
81BC 81E9 825B 825A 825C 8583 8580 858F 85A7 8595
85A0 858B 85A3 857B 85A4 859A 859E 8577 857C 8589
85A1 857A 8578 8557 858E 8596 8586 858D 8599 859D
8581 85A2 8582 8588 8585 8579 8576 8598 8590 859F
8668 87BE 87AA 87AD 87C5 87B0 87AC 87B9 87B5 87BC
87AE 87C9 87C3 87C2 87CC 87B7 87AF 87C4 87CA 87B4
87B6 87BF 87B8 87BD 87DE 87B2 8935 8933 893C 893E
8941 8952 8937 8942 89AD 89AF 89AE 89F2 89F3 8B1E
8B18 8B16 8B11 8B05 8B0B 8B22 8B0F 8B12 8B15 8B07
8B0D 8B08 8B06 8B1C 8B13 8B1A 8C4F 8C70 8C72 8C71
8C6F 8C95 8C94 8CF9 8D6F 8E4E 8E4D 8E53 8E50 8E4C
8E47 8F43 8F40 9085 907E 9138 919A 91A2 919B 9199
919F 91A1 919D 91A0 93A1 9383 93AF 9364 9356 9347
937C 9358 935C 9376 9349 9350 9351 9360 936D 938F
934C 936A 9379 9357 9355 9352 934F 9371 9377 937B
9361 935E 9363 9367 9380 934E 9359 95C7 95C0 95C9
95C3 95C5 95B7 96AE 96B0 96AC 9720 971F 9718 971D
9719 979A 97A1 979C 979E 979D 97D5 97D4 97F1 9841
9844 984A 9849 9845 9843 9925 992B 992C 992A 9933
9932 992F 992D 9931 9930 9998 99A3 99A1 9A02 99FA
99F4 99F7 99F9 99F8 99F6 99FB 99FD 99FE 99FC 9A03
9ABE 9AFE 9AFD 9B01 9AFC 9B48 9B9A 9BA8 9B9E 9B9B
9BA6 9BA1 9BA5 9BA4 9B86 9BA2 9BA0 9BAF 9D33 9D41
9D67 9D36 9D2E 9D2F 9D31 9D38 9D30 9D45 9D42 9D43
9D3E 9D37 9D40 9D3D 7FF5 9D2D 9E8A 9E89 9E8D 9EB0
9EC8 9EDA 9EFB 9EFF 9F24 9F23 9F22 9F54 9FA0 5131
512D 512E 5698 569C 5697 569A 569D 5699 5970 5B3C
5C69 5C6A 5DC0 5E6D 5E6E 61D8 61DF 61ED 61EE 61F1
61EA 61F0 61EB 61D6 61E9 64FF 6504 64FD 64F8 6501
6503 64FC 6594 65DB 66DA 66DB 66D8 6AC5 6AB9 6ABD
6AE1 6AC6 6ABA 6AB6 6AB7 6AC7 6AB4 6AAD 6B5E 6BC9
6C0B 7007 700C 700D 7001 7005 7014 700E 6FFF 7000
6FFB 7026 6FFC 6FF7 700A 7201 71FF 71F9 7203 71FD
7376 74B8 74C0 74B5 74C1 74BE 74B6 74BB 74C2 7514
7513 765C 7664 7659 7650 7653 7657 765A 76A6 76BD
76EC 77C2 77BA 78FF 790C 7913 7914 7909 7910 7912
7911 79AD 79AC 7A5F 7C1C 7C29 7C19 7C20 7C1F 7C2D
7C1D 7C26 7C28 7C22 7C25 7C30 7E5C 7E50 7E56 7E63
7E58 7E62 7E5F 7E51 7E60 7E57 7E53 7FB5 7FB3 7FF7
7FF8 8075 81D1 81D2 81D0 825F 825E 85B4 85C6 85C0
85C3 85C2 85B3 85B5 85BD 85C7 85C4 85BF 85CB 85CE
85C8 85C5 85B1 85B6 85D2 8624 85B8 85B7 85BE 8669
87E7 87E6 87E2 87DB 87EB 87EA 87E5 87DF 87F3 87E4
87D4 87DC 87D3 87ED 87D8 87E3 87A4 87D7 87D9 8801
87F4 87E8 87DD 8953 894B 894F 894C 8946 8950 8951
8949 8B2A 8B27 8B23 8B33 8B30 8B35 8B47 8B2F 8B3C
8B3E 8B31 8B25 8B37 8B26 8B36 8B2E 8B24 8B3B 8B3D
8B3A 8C42 8C75 8C99 8C98 8C97 8CFE 8D04 8D02 8D00
8E5C 8E62 8E60 8E57 8E56 8E5E 8E65 8E67 8E5B 8E5A
8E61 8E5D 8E69 8E54 8F46 8F47 8F48 8F4B 9128 913A
913B 913E 91A8 91A5 91A7 91AF 91AA 93B5 938C 9392
93B7 939B 939D 9389 93A7 938E 93AA 939E 93A6 9395
9388 9399 939F 938D 93B1 9391 93B2 93A4 93A8 93B4
93A3 93A5 95D2 95D3 95D1 96B3 96D7 96DA 5DC2 96DF
96D8 96DD 9723 9722 9725 97AC 97AE 97A8 97AB 97A4
97AA 97A2 97A5 97D7 97D9 97D6 97D8 97FA 9850 9851
9852 98B8 9941 993C 993A 9A0F 9A0B 9A09 9A0D 9A04
9A11 9A0A 9A05 9A07 9A06 9AC0 9ADC 9B08 9B04 9B05
9B29 9B35 9B4A 9B4C 9B4B 9BC7 9BC6 9BC3 9BBF 9BC1
9BB5 9BB8 9BD3 9BB6 9BC4 9BB9 9BBD 9D5C 9D53 9D4F
9D4A 9D5B 9D4B 9D59 9D56 9D4C 9D57 9D52 9D54 9D5F
9D58 9D5A 9E8E 9E8C 9EDF 9F01 9F00 9F16 9F25 9F2B
9F2A 9F29 9F28 9F4C 9F55 5134 5135 5296 52F7 53B4
56AB 56AD 56A6 56A7 56AA 56AC 58DA 58DD 58DB 5912
5B3D 5B3E 5B3F 5DC3 5E70 5FBF 61FB 6507 6510 650D
6509 650C 650E 6584 65DE 65DD 66DE 6AE7 6AE0 6ACC
6AD1 6AD9 6ACB 6ADF 6ADC 6AD0 6AEB 6ACF 6ACD 6ADE
6B60 6BB0 6C0C 7019 7027 7020 7016 702B 7021 7022
7023 7029 7017 7024 701C 702A 720C 720A 7207 7202
7205 72A5 72A6 72A4 72A3 72A1 74CB 74C5 74B7 74C3
7516 7660 77C9 77CA 77C4 77F1 791D 791B 7921 791C
7917 791E 79B0 7A67 7A68 7C33 7C3C 7C39 7C2C 7C3B
7CEC 7CEA 7E76 7E75 7E78 7E70 7E77 7E6F 7E7A 7E72
7E74 7E68 7F4B 7F4A 7F83 7F86 7FB7 7FFD 7FFE 8078
81D7 81D5 8264 8261 8263 85EB 85F1 85ED 85D9 85E1
85E8 85DA 85D7 85EC 85F2 85F8 85D8 85DF 85E3 85DC
85D1 85F0 85E6 85EF 85DE 85E2 8800 87FA 8803 87F6
87F7 8809 880C 880B 8806 87FC 8808 87FF 880A 8802
8962 895A 895B 8957 8961 895C 8958 895D 8959 8988
89B7 89B6 89F6 8B50 8B48 8B4A 8B40 8B53 8B56 8B54
8B4B 8B55 8B51 8B42 8B52 8B57 8C43 8C77 8C76 8C9A
8D06 8D07 8D09 8DAC 8DAA 8DAD 8DAB 8E6D 8E78 8E73
8E6A 8E6F 8E7B 8EC2 8F52 8F51 8F4F 8F50 8F53 8FB4
9140 913F 91B0 91AD 93DE 93C7 93CF 93C2 93DA 93D0
93F9 93EC 93CC 93D9 93A9 93E6 93CA 93D4 93EE 93E3
93D5 93C4 93CE 93C0 93D2 93E7 957D 95DA 95DB 96E1
9729 972B 972C 9728 9726 97B3 97B7 97B6 97DD 97DE
97DF 985C 9859 985D 9857 98BF 98BD 98BB 98BE 9948
9947 9943 99A6 99A7 9A1A 9A15 9A25 9A1D 9A24 9A1B
9A22 9A20 9A27 9A23 9A1E 9A1C 9A14 9AC2 9B0B 9B0A
9B0E 9B0C 9B37 9BEA 9BEB 9BE0 9BDE 9BE4 9BE6 9BE2
9BF0 9BD4 9BD7 9BEC 9BDC 9BD9 9BE5 9BD5 9BE1 9BDA
9D77 9D81 9D8A 9D84 9D88 9D71 9D80 9D78 9D86 9D8B
9D8C 9D7D 9D6B 9D74 9D75 9D70 9D69 9D85 9D73 9D7B
9D82 9D6F 9D79 9D7F 9D87 9D68 9E94 9E91 9EC0 9EFC
9F2D 9F40 9F41 9F4D 9F56 9F57 9F58 5337 56B2 56B5
56B3 58E3 5B45 5DC6 5DC7 5EEE 5EEF 5FC0 5FC1 61F9
6517 6516 6515 6513 65DF 66E8 66E3 66E4 6AF3 6AF0
6AEA 6AE8 6AF9 6AF1 6AEE 6AEF 703C 7035 702F 7037
7034 7031 7042 7038 703F 703A 7039 7040 703B 7033
7041 7213 7214 72A8 737D 737C 74BA 76AB 76AA 76BE
76ED 77CC 77CE 77CF 77CD 77F2 7925 7923 7927 7928
7924 7929 79B2 7A6E 7A6C 7A6D 7AF7 7C49 7C48 7C4A
7C47 7C45 7CEE 7E7B 7E7E 7E81 7E80 7FBA 7FFF 8079
81DB 81D9 820B 8268 8269 8622 85FF 8601 85FE 861B
8600 85F6 8604 8609 8605 860C 85FD 8819 8810 8811
8817 8813 8816 8963 8966 89B9 89F7 8B60 8B6A 8B5D
8B68 8B63 8B65 8B67 8B6D 8DAE 8E86 8E88 8E84 8F59
8F56 8F57 8F55 8F58 8F5A 908D 9143 9141 91B7 91B5
91B2 91B3 940B 9413 93FB 9420 940F 9414 93FE 9415
9410 9428 9419 940D 93F5 9400 93F7 9407 940E 9416
9412 93FA 9409 93F8 940A 93FF 93FC 940C 93F6 9411
9406 95DE 95E0 95DF 972E 972F 97B9 97BB 97FD 97FE
9860 9862 9863 985F 98C1 98C2 9950 994E 9959 994C
994B 9953 9A32 9A34 9A31 9A2C 9A2A 9A36 9A29 9A2E
9A38 9A2D 9AC7 9ACA 9AC6 9B10 9B12 9B11 9C0B 9C08
9BF7 9C05 9C12 9BF8 9C40 9C07 9C0E 9C06 9C17 9C14
9C09 9D9F 9D99 9DA4 9D9D 9D92 9D98 9D90 9D9B 9DA0
9D94 9D9C 9DAA 9D97 9DA1 9D9A 9DA2 9DA8 9D9E 9DA3
9DBF 9DA9 9D96 9DA6 9DA7 9E99 9E9B 9E9A 9EE5 9EE4
9EE7 9EE6 9F30 9F2E 9F5B 9F60 9F5E 9F5D 9F59 9F91
513A 5139 5298 5297 56C3 56BD 56BE 5B48 5B47 5DCB
5DCF 5EF1 61FD 651B 6B02 6AFC 6B03 6AF8 6B00 7043
7044 704A 7048 7049 7045 7046 721D 721A 7219 737E
7517 766A 77D0 792D 7931 792F 7C54 7C53 7CF2 7E8A
7E87 7E88 7E8B 7E86 7E8D 7F4D 7FBB 8030 81DD 8618
862A 8626 861F 8623 861C 8619 8627 862E 8621 8620
8629 861E 8625 8829 881D 881B 8820 8824 881C 882B
884A 896D 8969 896E 896B 89FA 8B79 8B78 8B45 8B7A
8B7B 8D10 8D14 8DAF 8E8E 8E8C 8F5E 8F5B 8F5D 9146
9144 9145 91B9 943F 943B 9436 9429 943D 943C 9430
9439 942A 9437 942C 9440 9431 95E5 95E4 95E3 9735
973A 97BF 97E1 9864 98C9 98C6 98C0 9958 9956 9A39
9A3D 9A46 9A44 9A42 9A41 9A3A 9A3F 9ACD 9B15 9B17
9B18 9B16 9B3A 9B52 9C2B 9C1D 9C1C 9C2C 9C23 9C28
9C29 9C24 9C21 9DB7 9DB6 9DBC 9DC1 9DC7 9DCA 9DCF
9DBE 9DC5 9DC3 9DBB 9DB5 9DCE 9DB9 9DBA 9DAC 9DC8
9DB1 9DAD 9DCC 9DB3 9DCD 9DB2 9E7A 9E9C 9EEB 9EEE
9EED 9F1B 9F18 9F1A 9F31 9F4E 9F65 9F64 9F92 4EB9
56C6 56C5 56CB 5971 5B4B 5B4C 5DD5 5DD1 5EF2 6521
6520 6526 6522 6B0B 6B08 6B09 6C0D 7055 7056 7057
7052 721E 721F 72A9 737F 74D8 74D5 74D9 74D7 766D
76AD 7935 79B4 7A70 7A71 7C57 7C5C 7C59 7C5B 7C5A
7CF4 7CF1 7E91 7F4F 7F87 81DE 826B 8634 8635 8633
862C 8632 8636 882C 8828 8826 882A 8825 8971 89BF
89BE 89FB 8B7E 8B84 8B82 8B86 8B85 8B7F 8D15 8E95
8E94 8E9A 8E92 8E90 8E96 8E97 8F60 8F62 9147 944C
9450 944A 944B 944F 9447 9445 9448 9449 9446 973F
97E3 986A 9869 98CB 9954 995B 9A4E 9A53 9A54 9A4C
9A4F 9A48 9A4A 9A49 9A52 9A50 9AD0 9B19 9B2B 9B3B
9B56 9B55 9C46 9C48 9C3F 9C44 9C39 9C33 9C41 9C3C
9C37 9C34 9C32 9C3D 9C36 9DDB 9DD2 9DDE 9DDA 9DCB
9DD0 9DDC 9DD1 9DDF 9DE9 9DD9 9DD8 9DD6 9DF5 9DD5
9DDD 9EB6 9EF0 9F35 9F33 9F32 9F42 9F6B 9F95 9FA2
513D 5299 58E8 58E7 5972 5B4D 5DD8 882F 5F4F 6201
6203 6204 6529 6525 6596 66EB 6B11 6B12 6B0F 6BCA
705B 705A 7222 7382 7381 7383 7670 77D4 7C67 7C66
7E95 826C 863A 8640 8639 863C 8631 863B 863E 8830
8832 882E 8833 8976 8974 8973 89FE 8B8C 8B8E 8B8B
8B88 8C45 8D19 8E98 8F64 8F63 91BC 9462 9455 945D
9457 945E 97C4 97C5 9800 9A56 9A59 9B1E 9B1F 9B20
9C52 9C58 9C50 9C4A 9C4D 9C4B 9C55 9C59 9C4C 9C4E
9DFB 9DF7 9DEF 9DE3 9DEB 9DF8 9DE4 9DF6 9DE1 9DEE
9DE6 9DF2 9DF0 9DE2 9DEC 9DF4 9DF3 9DE8 9DED 9EC2
9ED0 9EF2 9EF3 9F06 9F1C 9F38 9F37 9F36 9F43 9F4F
9F71 9F70 9F6E 9F6F 56D3 56CD 5B4E 5C6D 652D 66ED
66EE 6B13 705F 7061 705D 7060 7223 74DB 74E5 77D5
7938 79B7 79B6 7C6A 7E97 7F89 826D 8643 8838 8837
8835 884B 8B94 8B95 8E9E 8E9F 8EA0 8E9D 91BE 91BD
91C2 946B 9468 9469 96E5 9746 9743 9747 97C7 97E5
9A5E 9AD5 9B59 9C63 9C67 9C66 9C62 9C5E 9C60 9E02
9DFE 9E07 9E03 9E06 9E05 9E00 9E01 9E09 9DFF 9DFD
9E04 9EA0 9F1E 9F46 9F74 9F75 9F76 56D4 652E 65B8
6B18 6B19 6B17 6B1A 7062 7226 72AA 77D8 77D9 7939
7C69 7C6B 7CF6 7E9A 7E98 7E9B 7E99 81E0 81E1 8646
8647 8648 8979 897A 897C 897B 89FF 8B98 8B99 8EA5
8EA4 8EA3 946E 946D 946F 9471 9473 9749 9872 995F
9C68 9C6E 9C6D 9E0B 9E0D 9E10 9E0F 9E12 9E11 9EA1
9EF5 9F09 9F47 9F78 9F7B 9F7A 9F79 571E 7066 7C6F
883C 8DB2 8EA6 91C3 9474 9478 9476 9475 9A60 9C74
9C73 9C71 9C75 9E14 9E13 9EF6 9F0A 9FA4 7068 7065
7CF7 866A 883E 883D 883F 8B9E 8C9C 8EA9 8EC9 974B
9873 9874 98CC 9961 99AB 9A64 9A66 9A67 9B24 9E15
9E17 9F48 6207 6B1E 7227 864C 8EA8 9482 9480 9481
9A69 9A68 9B2E 9E19 7229 864B 8B9F 9483 9C79 9EB7
7675 9A6B 9C7A 9E1D 7069 706A 9EA4 9F7E 9F49 9F98
__END__
=head1 NAME
Unicode::Collate::CJK::Big5 - weighting CJK Unified Ideographs
for Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate;
use Unicode::Collate::CJK::Big5;
my $collator = Unicode::Collate->new(
overrideCJK => \&Unicode::Collate::CJK::Big5::weightBig5
);
=head1 DESCRIPTION
C<Unicode::Collate::CJK::Big5> provides C<weightBig5()>,
that is adequate for C<overrideCJK> of C<Unicode::Collate>
and makes tailoring of CJK Unified Ideographs in the order
of CLDR's big5han ordering.
=head1 SEE ALSO
=over 4
=item CLDR - Unicode Common Locale Data Repository
L<http://cldr.unicode.org/>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=item L<Unicode::Collate>
=item L<Unicode::Collate::Locale>
=back
=cut
Unicode/Collate/CJK/Korean.pm 0000644 00000137046 15033552504 0011716 0 ustar 00 package Unicode::Collate::CJK::Korean;
use 5.006;
use strict;
use warnings;
our $VERSION = '1.25';
my %jamo2prim = (
'1100', 0x3BF5, '1101', 0x3BF6, '1102', 0x3BF7, '1103', 0x3BF8,
'1105', 0x3BFA, '1106', 0x3BFB, '1107', 0x3BFC, '1109', 0x3BFE,
'110A', 0x3BFF, '110B', 0x3C00, '110C', 0x3C01, '110E', 0x3C03,
'110F', 0x3C04, '1110', 0x3C05, '1111', 0x3C06, '1112', 0x3C07,
'1161', 0x3C73, '1162', 0x3C74, '1163', 0x3C75, '1165', 0x3C77,
'1166', 0x3C78, '1167', 0x3C79, '1168', 0x3C7A, '1169', 0x3C7B,
'116A', 0x3C7C, '116B', 0x3C7D, '116C', 0x3C7E, '116D', 0x3C7F,
'116E', 0x3C80, '116F', 0x3C81, '1170', 0x3C82, '1171', 0x3C83,
'1172', 0x3C84, '1173', 0x3C85, '1174', 0x3C86, '1175', 0x3C87,
'11A8', 0x3CD1, '11AB', 0x3CD4, '11AF', 0x3CD8, '11B7', 0x3CE0,
'11B8', 0x3CE1, '11BC', 0x3CE5, '11BD', 0x3CE6,
); # for DUCET v9.0.0
my(%u2e, $prim, $wt);
while (<DATA>) {
last if /^__END__/;
my @c = split;
if (@c == 1 && $c[0] =~ /^[A-D]/) { # hangul
$c[0] =~ s/^.*://;
$prim = [ map $jamo2prim{$_}, split /-/, $c[0] ];
$wt = 0x20;
} else { # ideographs
for my $c (@c) {
next if !$c;
$wt++;
$u2e{hex($c)} = [ $wt, @$prim ];
}
}
}
sub weightKorean {
my $u = shift;
return undef if !exists $u2e{$u};
my @a = @{ $u2e{$u} };
my $s = shift @a;
my $p = shift @a;
return([ $p, $s, 0x2, $u ], @a);
}
1;
# DATA format
# hangul syllable:jamo-jamo(-jamo)
# equiv. ideographs
__DATA__
AC00:1100-1161
4F3D 4F73 5047 50F9 52A0 53EF 5475 54E5 5609 5AC1
5BB6 6687 67B6 67B7 67EF 6B4C 73C2 75C2 7A3C 82DB
8304 8857 8888 8A36 8CC8 8DCF 8EFB 8FE6 99D5 4EEE
50A2 5496 54FF 5777 5B8A 659D 698E 6A9F 73C8 7B33
801E 8238 846D 8B0C
AC01:1100-1161-11A8
523B 5374 5404 606A 6164 6BBC 73CF 811A 89BA 89D2
95A3 537B 54AF 57C6 6409 64F1 6877
AC04:1100-1161-11AB
4F83 520A 58BE 5978 59E6 5E72 5E79 61C7 63C0 6746
67EC 687F 6F97 764E 770B 78F5 7A08 7AFF 7C21 809D
826E 8271 8AEB 9593 5058 6173 681E 69A6 7395 79C6
831B 884E 8D76 8FC0 9F66
AC08:1100-1161-11AF
4E6B 559D 66F7 6E34 78A3 7AED 845B 8910 874E 97A8
5676 696C 79F8 7FAF 880D 9DA1
AC10:1100-1161-11B7
52D8 574E 582A 5D4C 611F 61BE 6221 6562 67D1 6A44
6E1B 7518 75B3 76E3 77B0 7D3A 90AF 9451 9452 9F95
5769 57F3 5D41 5F07 61A8 64BC 6B3F 6B5B 6CD4 6DE6
6F89 77D9 8F57 9163 9E7B
AC11:1100-1161-11B8
5323 5CAC 7532 80DB 9240 9598 97D0
AC15:1100-1161-11BC
525B 5808 59DC 5CA1 5D17 5EB7 5F3A 5F4A 6177 6C5F
757A 7586 7CE0 7D73 7DB1 7F8C 8154 8221 8591 8941
8B1B 92FC 964D 9C47 508B 50F5 58C3 5FFC 625B 6760
6A7F 6BAD 77FC 7A45 7E48 7F61 7F97 7FAB 8333 8C47
97C1
AC1C:1100-1162
4ECB 4EF7 500B 51F1 584F 6137 613E 6168 6539 69EA
6F11 75A5 7686 76D6 7B87 82A5 84CB 93A7 958B 5274
5303 63E9 69E9 73A0 78D5 95D3
AC1D:1100-1162-11A8
5580 5BA2
AC31:1100-1162-11BC
5751 7CB3 7FB9 785C 8CE1 93D7
AC39:1100-1163-11A8
91B5
AC70:1100-1165
5028 53BB 5C45 5DE8 62D2 636E 64DA 64E7 6E20 70AC
795B 8DDD 8E1E 907D 9245 92F8 547F 661B 79EC 7B65
7C67 80E0 8152 82E3 8392 8556 8627 88AA 88FE 99CF
AC74:1100-1165-11AB
4E7E 4EF6 5065 5DFE 5EFA 6106 6957 8171 8654 8E47
9375 9A2B 63F5 728D 7777 8930 8B07 97AC
AC78:1100-1165-11AF
4E5E 5091 6770 6840 4E6C 6705 69A4
AC80:1100-1165-11B7
5109 528D 5292 6AA2 77BC 9210 9ED4 64BF 82A1
AC81:1100-1165-11B8
52AB 602F 8FF2 5226 5227
AC8C:1100-1166
5048 61A9 63ED
ACA9:1100-1167-11A8
64CA 683C 6A84 6FC0 8188 89A1 9694 630C 6BC4 95C3
9ABC 9B32 9D03
ACAC:1100-1167-11AB
5805 727D 72AC 7504 7D79 7E6D 80A9 898B 8B74 9063
9D51 6A2B 72F7 754E 7B67 7E33 7E7E 7F82 8832 9C39
ACB0:1100-1167-11AF
6289 6C7A 6F54 7D50 7F3A 8A23 73A6 89D6 95CB
ACB8:1100-1167-11B7
517C 614A 7B9D 8B19 9257 938C 5094 55DB 5C92 62D1
6B49 7E11 84B9 9EDA 9F38
ACBD:1100-1167-11BC
4EAC 4FD3 501E 50BE 5106 52C1 52CD 537F 5770 5883
5E9A 5F91 6176 61AC 64CE 656C 666F 66BB 66F4 6897
6D87 7085 70F1 749F 74A5 74CA 75D9 786C 78EC 7ADF
7AF6 7D45 7D93 8015 803F 811B 8396 8B66 8F15 9015
93E1 9803 9838 9A5A 9BE8 518F 5244 54FD 60F8 61BC
6243 6AA0 7162 712D 71B2 754A 7AF8 7D86 9848 7F44
8927 8B26 99C9 9BC1 9EE5
ACC4:1100-1168
4FC2 5553 583A 5951 5B63 5C46 60B8 6212 6842 68B0
68E8 6EAA 754C 7678 78CE 7A3D 7CFB 7E6B 7E7C 8A08
8AA1 8C3F 968E 9DC4 5826 70D3 7608 798A 7B53 7DAE
7E18 7F7D 846A 858A 96DE 9AFB
ACE0:1100-1169
53E4 53E9 544A 5471 56FA 59D1 5B64 5C3B 5EAB 62F7
6537 6545 6572 66A0 67AF 69C1 6CBD 75FC 7690 777E
7A3F 7F94 8003 80A1 818F 82E6 82FD 83F0 85C1 8831
88B4 8AA5 8F9C 932E 96C7 9867 9AD8 9F13 4F30 51C5
5233 5859 6772 6832 69C0 69F9 6ADC 726F 768B 76EC
77BD 7A01 7B8D 7BD9 7CD5 7F5F 7F96 7FFA 80EF 89DA
8A41 90DC 9164 9237 9760 9D23 9DF1
ACE1:1100-1169-11A8
54ED 659B 66F2 688F 7A40 8C37 9D60 56B3 69F2 7E20
89F3 8F42
ACE4:1100-1169-11AB
56F0 5764 5D11 6606 68B1 68CD 6EFE 7428 889E 9BE4
5803 5D10 6083 6346 7DC4 886E 88CD 890C 9315 95AB
9AE1 9D7E 9DA4 9F6B
ACE8:1100-1169-11AF
6C68 9AA8 6430 69BE 77FB 9DBB
ACF5:1100-1169-11BC
4F9B 516C 5171 529F 5B54 5DE5 6050 606D 62F1 63A7
653B 73D9 7A7A 86A3 8CA2 978F 5025 5D06 60BE 6831
69D3 7B9C 86E9 86EC 8D1B 8DEB 91ED 9F94
ACF6:1100-1169-11BD
4E32
ACFC:1100-116A
5BE1 6208 679C 74DC 79D1 83D3 8A87 8AB2 8DE8 904E
934B 9846 4F89 581D 5925 5938 64BE 7313 7A1E 7AA0
874C 88F9 8E1D 9299 9A0D
ACFD:1100-116A-11A8
5ED3 69E8 85FF 90ED 6901 7668 8EA9 970D 97B9
AD00:1100-116A-11AB
51A0 5B98 5BEC 6163 68FA 6B3E 704C 742F 74D8 7BA1
7F50 83C5 89C0 8CAB 95DC 9928 4E31 6DAB 721F 76E5
797C 7ABE 7B66 7DB0 8F28 9327 9475 96DA 9874 9AD6
9E1B
AD04:1100-116A-11AF
522E 605D 62EC 9002 4F78 681D 7B48 8052 9AFA 9D30
AD11:1100-116A-11BC
4F8A 5149 5321 58D9 5EE3 66E0 6D38 709A 72C2 73D6
7B50 80F1 945B 6047 6844 6846 720C 7377 78FA 7D56
7E8A 832A 8A86 8A91
AD18:1100-116B
5366 639B 7F6B 54BC 6302 7F63 8A7F
AD34:1100-116C
4E56 5080 584A 58DE 602A 6127 62D0 69D0 9B41 5ABF
5EE5 6060 7470 749D 84AF 8958
AD35:1100-116C-11A8
9998
AD49:1100-116C-11BC
5B8F 7D18 80B1 8F5F 6D64 89E5 8A07 958E
AD50:1100-116D
4EA4 50D1 54AC 55AC 5B0C 5DA0 5DE7 652A 654E 6821
6A4B 72E1 768E 77EF 7D5E 7FF9 81A0 854E 86DF 8F03
8F4E 90CA 9903 9A55 9BAB 4F7C 5604 5610 566D 5699
59E3 618D 649F 6648 669E 69B7 78FD 7A96 8DAB 8E7B
9278 9AB9 9D41 9F69
AD6C:1100-116E
4E18 4E45 4E5D 4EC7 4FF1 5177 52FE 5340 53E3 53E5
548E 5614 5775 57A2 5BC7 5D87 5ED0 61FC 62D8 6551
67B8 67E9 69CB 6B50 6BC6 6BEC 6C42 6E9D 7078 72D7
7396 7403 77BF 77E9 7A76 7D7F 8009 81FC 8205 820A
82DF 8862 8B33 8CFC 8EC0 9011 90B1 9264 92B6 99D2
9A45 9CE9 9DD7 9F9C 4F49 4F5D 4FC5 50B4 5193 52AC
5336 53B9 53F4 5778 59E4 5ABE 5AD7 5C68 5CA3 5F40
6235 6263 6344 6406 6473 662B 6998 6F1A 7486 750C
759A 75C0 766F 7A9B 7AB6 7BDD 7CD7 80CA 849F 86AF
88D8 89AF 8A6C 9058 91E6 97DD 97ED 97EE 98B6 99C8
9B2E 9DC7 9E1C
AD6D:1100-116E-11A8
570B 5C40 83CA 97A0 97AB 9EB4 530A 63AC 8DFC 9EAF
AD70:1100-116E-11AB
541B 7A98 7FA4 88D9 8ECD 90E1 6343 687E 76B8
AD74:1100-116E-11AF
5800 5C48 6398 7A9F 5014 5D1B 6DC8 8A58
AD81:1100-116E-11BC
5BAE 5F13 7A79 7AAE 828E 8EAC 8EB3
AD8C:1100-116F-11AB
5026 5238 52F8 5377 5708 62F3 6372 6B0A 6DC3 7737
52CC 60D3 68EC 7760 7DA3 8737
AD90:1100-116F-11AF
53A5 7357 8568 8E76 95D5
ADA4:1100-1170
673A 6AC3 6F70 8A6D 8ECC 994B 4F79 51E0 5282 5331
6192 6485 6A3B 6C3F 7C0B 7E62 8DEA 95E0 993D 9E82
ADC0:1100-1171
6677 6B78 8CB4 9B3C
ADDC:1100-1172
53EB 572D 594E 63C6 69FB 73EA 7845 7ABA 7AC5 7CFE
8475 898F 8D73 9035 95A8 5232 5AE2 5B00 5DCB 668C
694F 6A1B 6F59 777D 7CFA 866C 866F 8DEC 90BD 95DA
980D 9997
ADE0:1100-1172-11AB
52FB 5747 7547 7B60 83CC 921E 56F7 9E8F
ADE4:1100-1172-11AF
6A58
ADF9:1100-1173-11A8
514B 524B 5287 621F 68D8 6975 9699 4E9F 5C05 5C50
90C4
ADFC:1100-1173-11AB
50C5 52A4 52E4 61C3 65A4 6839 69FF 747E 7B4B 82B9
83EB 89B2 8B39 8FD1 9949 537A 53AA 5890 5DF9 5ED1
6F0C 89D4 8DDF 91FF 9773
AE08:1100-1173-11B7
4ECA 5997 64D2 6611 6A8E 7434 7981 79BD 82A9 887E
887F 895F 9326 552B 5664 5D94 7B12 9EC5
AE09:1100-1173-11B8
4F0B 53CA 6025 6271 6C72 7D1A 7D66 573E 5C8C 7680
790F 7B08 82A8
AE0D:1100-1173-11BC
4E98 5162 77DC 80AF 4E99 6B91
AE30:1100-1175
4F01 4F0E 5176 5180 55DC 5668 573B 57FA 57FC 5914
5947 5993 5BC4 5C90 5D0E 5DF1 5E7E 5FCC 6280 65D7
65E3 671E 671F 675E 68CB 68C4 6A5F 6B3A 6C23 6C7D
6C82 6DC7 7398 7426 742A 7482 74A3 7578 757F 7881
78EF 7941 7947 7948 797A 7B95 7D00 7DBA 7F88 8006
802D 808C 8A18 8B4F 8C48 8D77 9321 9324 98E2 9951
9A0E 9A0F 9A65 9E92 50DB 525E 588D 5C7A 5E8B 5F03
5FEE 612D 638E 6532 65C2 66A3 66C1 68CA 6B67 7081
7309 79A8 7DA5 7DA6 7F87 80B5 82AA 82B0 8604 8641
871D 87E3 8989 89AC 8DC2 9691 980E 9B10 9C2D 9ED6
AE34:1100-1175-11AB
7DCA
AE38:1100-1175-11AF
4F76 5409 62EE 6854 59DE 86E3
AE40:1100-1175-11B7
91D1
B07D:1101-1175-11A8
55AB
B098:1102-1161
513A 5A1C 61E6 62CF 62FF 90A3 6310 632A 689B 7CE5
7CEF
B099:1102-1161-11A8
8AFE
B09C:1102-1161-11AB
6696 7156 96E3 5044 7157 8D67 992A
B0A0:1102-1161-11AF
634F 637A
B0A8:1102-1161-11B7
5357 678F 6960 6E73 7537 5583 67DF
B0A9:1102-1161-11B8
7D0D 8872
B0AD:1102-1161-11BC
56CA 5A18 66E9
B0B4:1102-1162
4E43 5167 5948 67F0 8010 5302 5976 5B2D 8FFA 9F10
B140:1102-1167
5973
B141:1102-1167-11A8
60C4
B144:1102-1167-11AB
5E74 649A 79CA 78BE
B150:1102-1167-11B7
5FF5 606C 62C8 637B
B155:1102-1167-11BC
5BE7 5BD7 4F5E 511C 5680 6FD8
B178:1102-1169
52AA 5974 5F29 6012 7459 99D1 5476 5B65 5CF1 7331
7B2F 81D1
B18D:1102-1169-11BC
6FC3 81BF 8FB2 5102 5665 7A60 91B2
B1CC:1102-116C
60F1 8166 9912
B1E8:1102-116D
5C3F 5ACB 5B32 6DD6 78E0 88CA 9403
B204:1102-116E
5542 8028
B208:1102-116E-11AB
5AE9
B20C:1102-116E-11AF
8A25 5436 80AD
B274:1102-1172
677B 7D10 5FF8 9775
B275:1102-1172-11A8
8844
B2A5:1102-1173-11BC
80FD
B2C8:1102-1175
5C3C 6CE5 5462 6029 67C5 7962 79B0 81A9
B2C9:1102-1175-11A8
533F 6EBA 6635 66B1
B2E4:1103-1161
591A 8336 7239
B2E8:1103-1161-11AB
4E39 4EB6 4F46 55AE 5718 58C7 5F56 65B7 65E6 6A80
6BB5 6E4D 77ED 7AEF 7C1E 7DDE 86CB 8892 9132 935B
6171 62C5 6934 6F19 7649 8011 80C6 8176 8711
B2EC:1103-1161-11AF
64BB 6FBE 737A 75B8 9054 59B2 601B 95E5 977C 97C3
B2F4:1103-1161-11B7
5556 574D 61BA 64D4 66C7 6DE1 6E5B 6F6D 6FB9 75F0
8043 81BD 8541 8983 8AC7 8B5A 931F 510B 5557 5649
58B0 58DC 6BEF 79AB 7F4E 859D 90EF 9EEE 9EF5
B2F5:1103-1161-11B8
6C93 7553 7B54 8E0F 905D
B2F9:1103-1161-11BC
5510 5802 5858 5E62 6207 649E 68E0 7576 7CD6 87B3
9EE8 5018 513B 515A 642A 6A94 6E8F 746D 74AB 77A0
7911 87F7 8960 8B9C 93DC 943A 9933 9939
B300:1103-1162
4EE3 5788 576E 5927 5C0D 5CB1 5E36 5F85 6234 64E1
73B3 81FA 888B 8CB8 968A 9EDB 5113 61DF 65F2 6C4F
7893 9413
B301:1103-1162-11A8
5B85
B355:1103-1165-11A8
5FB7 60B3
B3C4:1103-1169
5012 5200 5230 5716 5835 5857 5C0E 5C60 5CF6 5D8B
5EA6 5F92 60BC 6311 6389 6417 6843 68F9 6AC2 6DD8
6E21 6ED4 6FE4 71FE 76DC 7779 79B1 7A3B 8404 89A9
8CED 8DF3 8E48 9003 9014 9053 90FD 934D 9676 97DC
53E8 58D4 5F22 5FC9 6146 638F 642F 64E3 6AAE 6D2E
6D82 7A0C 83DF 9174 95CD 9780 97B1 9955 9F17
B3C5:1103-1169-11A8
6BD2 7006 7258 72A2 7368 7763 79BF 7BE4 7E9B 8B80
6ADD 9EF7
B3C8:1103-1169-11AB
58A9 60C7 6566 65FD 66BE 6C8C 711E 71C9 8C5A 9813
5F34 6F61 8E89
B3CC:1103-1169-11AF
4E6D 7A81 5484 5817
B3D9:1103-1169-11BC
4EDD 51AC 51CD 52D5 540C 61A7 6771 6850 68DF 6D1E
6F7C 75BC 77B3 7AE5 80F4 8463 9285 4F97 50EE 54C3
578C 5CD2 5F64 6723 6A66 6DB7 825F 82F3 833C 856B
8740 932C 9B97
B450:1103-116E
515C 6597 675C 6793 75D8 7AC7 8373 8C46 9017 982D
6296 6581 809A 8130 86AA 8839 9661
B454:1103-116E-11AB
5C6F 81C0 829A 9041 906F 920D 7A80 8FCD
B458:1103-116E-11AF
4E67
B4DD:1103-1173-11A8
5F97
B4F1:1103-1173-11BC
5D9D 6A59 71C8 767B 7B49 85E4 8B04 9127 9A30 51F3
58B1 6ED5 78F4 7C50 7E22 87A3 9419
B77C:1105-1161
5587 61F6 7669 7F85 863F 87BA 88F8 908F 502E 56C9
66EA 7630 7822 81DD 947C 9A3E 9A58
B77D:1105-1161-11A8
6D1B 70D9 73DE 7D61 843D 916A 99F1 55E0 7296
B780:1105-1161-11AB
4E82 5375 6B04 6B12 703E 721B 862D 9E1E 5B3E 5E71
6514 7053 8974 947E 95CC
B784:1105-1161-11AF
524C 8FA3 57D2 8FA2
B78C:1105-1161-11B7
5D50 64E5 652C 6B16 6FEB 7C43 7E9C 85CD 8964 89BD
5A6A 60CF
B78D:1105-1161-11B8
62C9 81D8 881F 945E
B791:1105-1161-11BC
5ECA 6717 6D6A 72FC 7405 746F 8782 90DE 6994 7860
7A02 83A8 870B 95AC
B798:1105-1162
4F86 5D0D 5FA0 840A 6DF6 9A0B
B7AD:1105-1162-11BC
51B7
B7B5:1105-1163-11A8
63A0 7565 7567
B7C9:1105-1163-11BC
4EAE 5006 5169 51C9 6881 6A11 7CAE 7CB1 7CE7 826F
8AD2 8F1B 91CF 55A8 60A2 690B 6DBC 8E09 9B4E
B824:1105-1167
4FB6 5137 52F5 5442 5EEC 616E 623E 65C5 6ADA 6FFE
792A 85DC 8823 95AD 9A62 9A6A 9E97 9ECE 5122 53B2
5533 68A0 7658 7CF2 8182 81DA 8821 908C 9462
B825:1105-1167-11A8
529B 66C6 6B77 701D 792B 8F62 9742 650A 6ADF 6AEA
7667 8F63 9148
B828:1105-1167-11AB
6190 6200 6523 6F23 7149 7489 7DF4 806F 84EE 8F26
9023 934A 5B4C 695D 6E45 81E0 93C8 9C0A 9C31
B82C:1105-1167-11AF
51BD 5217 52A3 6D0C 70C8 88C2 6312 6369 98B2
B834:1105-1167-11B7
5EC9 6582 6BAE 6FC2 7C3E 5969 7032 78CF
B835:1105-1167-11B8
7375 8E90 9B23
B839:1105-1167-11BC
4EE4 4F36 56F9 5CBA 5DBA 601C 73B2 7B2D 7F9A 7FCE
8046 901E 9234 96F6 9748 9818 9F61 53E6 5464 59C8
5CAD 6624 6B1E 6CE0 79E2 82D3 86C9 8EE8 9D12 9E77
B840:1105-1168
4F8B 6FA7 79AE 91B4 96B7 96B8 9C67
B85C:1105-1169
52DE 6488 64C4 6AD3 6F5E 7018 7210 76E7 8001 8606
865C 8DEF 8F05 9732 9B6F 9DFA 9E75 58DA 6EF7 7388
7646 7A82 826A 826B 8F64 942A 946A 9871 9AD7 9C78
9E15
B85D:1105-1169-11A8
788C 797F 7DA0 83C9 9304 9E7F 9E93 5725 5F54 6DE5
6F09 7C0F 8F46 9A04
B860:1105-1169-11AB
8AD6
B871:1105-1169-11BC
58DF 5F04 6727 7027 74CF 7C60 807E 5131 650F 66E8
7931 8622 96B4 9F8E
B8B0:1105-116C
5121 7028 7262 78CA 8CC2 8CDA 8CF4 96F7 6502 790C
7927 7C5F 7E87 7F4D 8012 857E 8A84 9179 9842
B8CC:1105-116D
4E86 50DA 5BEE 5ED6 6599 71CE 7642 77AD 804A 84FC
907C 9B27 5639 5AFD 64A9 66B8 6F66 7360 7E5A 818B
91AA 9410 98C2 98C9
B8E1:1105-116D-11BC
9F8D 9F92
B8E8:1105-116E
58D8 5A41 5C62 6A13 6DDA 6F0F 763B 7D2F 7E37 851E
8938 93E4 964B 50C2 560D 5D81 617A 802C 87BB 9ACF
B958:1105-1172
5289 65D2 67F3 69B4 6D41 6E9C 700F 7409 7460 7559
7624 786B 8B2C 985E 6A4A 7E32 7E8D 905B 9DB9
B959:1105-1172-11A8
516D 622E 9678 52E0
B95C:1105-1172-11AB
4F96 502B 5D19 6DEA 7DB8 8F2A 6384
B960:1105-1172-11AF
5F8B 6144 6817 5D42 6EA7
B96D:1105-1172-11BC
9686 7643 7ABF
B975:1105-1173-11A8
52D2 808B 6CD0
B984:1105-1173-11B7
51DC 51DB 5EE9 6F9F
B989:1105-1173-11BC
51CC 695E 7A1C 7DBE 83F1 9675 5030 8506
B9AC:1105-1175
4FDA 5229 5398 540F 550E 5C65 60A7 674E 68A8 6D6C
7281 72F8 7406 7483 75E2 7C6C 7F79 7FB8 8389 88CF
88E1 91CC 91D0 96E2 9BC9 4FD0 527A 54E9 5AE0 6D96
6F13 79BB 8385 870A 87AD 8C8D 9090 9B51 9ED0
B9B0:1105-1175-11AB
541D 6F7E 71D0 7498 85FA 8EAA 96A3 9C57 9E9F 5D99
608B 735C 78F7 7CA6 7CBC 7E57 8E99 8F54 9130 93FB
9A4E
B9BC:1105-1175-11B7
6797 6DCB 7433 81E8 9716 75F3
B9BD:1105-1175-11B8
782C 7ACB 7B20 7C92 5CA6
B9C8:1106-1161
6469 746A 75F2 78BC 78E8 99AC 9B54 9EBB 5298 5ABD
879E 87C7 9EBD 9EBF
B9C9:1106-1161-11A8
5BDE 5E55 6F20 819C 83AB 9088 7799 93CC
B9CC:1106-1161-11AB
4E07 534D 5A29 5DD2 5F4E 6162 633D 6669 66FC 6EFF
6F2B 7063 779E 842C 8513 883B 8F13 9945 9C3B 5881
5ADA 5E54 7E35 8B3E 8E63 93CB 93DD 9B18
B9D0:1106-1161-11AF
551C 62B9 672B 6CAB 8309 896A 977A 5E15 79E3
B9DD:1106-1161-11BC
4EA1 5984 5FD8 5FD9 671B 7DB2 7F54 8292 832B 83BD
8F1E 9099 60D8 6C52 6F2D 83BE 87D2 9B4D
B9E4:1106-1162
57CB 59B9 5A92 5BD0 6627 679A 6885 6BCF 7164 7F75
8CB7 8CE3 9081 9B45 5446 6973 6CAC 73AB 771B 82FA
8393 9176 9709
B9E5:1106-1162-11A8
8108 8C8A 964C 9A40 9EA5 8109 8C83 8C98
B9F9:1106-1162-11BC
5B5F 6C13 731B 76F2 76DF 840C 511A 750D 753F 867B
BA71:1106-1167-11A8
51AA 8993 5E4E 7CF8
BA74:1106-1167-11AB
514D 5195 52C9 68C9 6C94 7704 7720 7DBF 7DEC 9762
9EB5 4FDB 6E4E 7CC6 7DDC 9EAA
BA78:1106-1167-11AF
6EC5 8511 7BFE 884A
BA85:1106-1167-11BC
51A5 540D 547D 660E 669D 6927 6E9F 76BF 7791 8317
84C2 879F 9169 9298 9CF4 6D3A
BA8C:1106-1168
8882
BAA8:1106-1169
4FAE 5192 52DF 59C6 5E3D 6155 6478 6479 66AE 67D0
6A21 6BCD 6BDB 725F 7261 7441 7738 77DB 8017 82BC
8305 8B00 8B28 8C8C 4F94 59E5 5AA2 5AEB 6048 65C4
7683 770A 7C8D 7CE2 8004 8765 87CA 927E 9AE6
BAA9:1106-1169-11A8
6728 6C90 7267 76EE 7766 7A46 9DA9 51E9 82DC
BAB0:1106-1169-11AF
6B7F 6C92
BABD:1106-1169-11BC
5922 6726 8499 5E6A 61DE 66DA 6E95 6FDB 77A2 77C7
8268 96FA 9E0F
BB18:1106-116D
536F 5893 5999 5EDF 63CF 6634 6773 6E3A 732B 7AD7
82D7 9328 6DFC 7707 85D0 8C93
BB34:1106-116E
52D9 5DEB 61AE 61CB 620A 62C7 64AB 65E0 6959 6B66
6BCB 7121 73F7 755D 7E46 821E 8302 856A 8AA3 8CBF
9727 9D61 511B 5638 5EE1 81B4 9A16
BB35:1106-116E-11A8
58A8 9ED8 563F
BB38:1106-116E-11AB
5011 520E 543B 554F 6587 6C76 7D0A 7D0B 805E 868A
9580 96EF 5301 6097 61E3 6286 636B 7086 748A
BB3C:1106-116E-11AF
52FF 6C95 7269
BBF8:1106-1175
5473 5A9A 5C3E 5D4B 5F4C 5FAE 672A 68B6 6963 6E3C
6E44 7709 7C73 7F8E 8587 8B0E 8FF7 9761 9EF4 4EB9
5A13 5A84 5ABA 5F25 5F2D 6549 7030 737C 7CDC 7E3B
82FF 863C 9E8B
BBFC:1106-1175-11AB
5CB7 60B6 610D 61AB 654F 65FB 65FC 6C11 6CEF 739F
73C9 7DE1 9594 5FDE 5FDF 668B 6E63 7DCD 7F60 82E0
95A9 9C35 9EFD
BC00:1106-1175-11AF
5BC6 871C 8B10 6A12 6EF5
BC15:1107-1161-11A8
525D 535A 62CD 640F 64B2 6734 6A38 6CCA 73C0 749E
7B94 7C95 7E1B 818A 8236 8584 8FEB 96F9 99C1 4EB3
6B02 7254 939B 99EE 9AC6
BC18:1107-1161-11AB
4F34 534A 53CD 53DB 62CC 642C 6500 6591 69C3 6CEE
6F58 73ED 7554 7622 76E4 76FC 78D0 78FB 792C 7D46
822C 87E0 8FD4 9812 98EF 5ABB 6273 642B 653D 670C
80D6 878C 9816
BC1C:1107-1161-11AF
52C3 62D4 64A5 6E24 6F51 767C 8DCB 91B1 9262 9AEE
9B43 54F1 6D61 8116 9238 9D53
BC29:1107-1161-11BC
5023 508D 574A 59A8 5C28 5E47 5F77 623F 653E 65B9
65C1 6609 678B 699C 6EC2 78C5 7D21 80AA 8180 822B
82B3 84A1 868C 8A2A 8B17 90A6 9632 9F90 4EFF 5396
5E6B 5FAC 6412 65CA 6886 7253 823D 8783 938A 9AE3
9B74
BC30:1107-1162
500D 4FF3 57F9 5F98 62DC 6392 676F 6E43 7119 76C3
80CC 80DA 88F4 88F5 8919 8CE0 8F29 914D 966A 574F
576F 6252 7432 84D3
BC31:1107-1162-11A8
4F2F 4F70 5E1B 67CF 6822 767D 767E 9B44 7CA8
BC88:1107-1165-11AB
5E61 6A0A 7169 71D4 756A 7E41 8543 85E9 98DC 7E59
7FFB 81B0 8629 88A2
BC8C:1107-1165-11AF
4F10 7B4F 7F70 95A5 6A43 7F78
BC94:1107-1165-11B7
51E1 5E06 68B5 6C3E 6C4E 6CDB 72AF 7BC4 8303 7B35
8A09 98BF
BC95:1107-1165-11B8
6CD5 743A
BCBD:1107-1167-11A8
50FB 5288 58C1 64D8 6A97 74A7 7656 78A7 8617 95E2
9739 64D7 7513 7588 895E 9DFF 9F0A
BCC0:1107-1167-11AB
535E 5F01 8B8A 8FA8 8FAF 908A 5FED 6283 7C69 8FAE
8141 8CC6 99E2 9ABF 9D18
BCC4:1107-1167-11AF
5225 77A5 9C49 9F08 5F46 9DE9
BCD1:1107-1167-11BC
4E19 5002 5175 5C5B 5E77 661E 663A 67C4 68C5 70B3
7501 75C5 79C9 7ADD 8F27 9920 9A08 4E26 5840 7D63
7F3E 8FF8 9235 92F2 927C
BCF4:1107-1169
4FDD 5821 5831 5BF6 666E 6B65 6D11 6E7A 6F7D 73E4
752B 83E9 88DC 8913 8B5C 8F14 4FCC 76D9 7C20 8446
974C 9D07 9EFC
BCF5:1107-1169-11A8
4F0F 50D5 5310 535C 5B93 5FA9 670D 798F 8179 832F
8514 8907 8986 8F39 8F3B 99A5 9C12 58A3 5E5E 6251
6FEE 7B99 83D4 8760 876E 9D69
BCF8:1107-1169-11AB
672C
BCFC:1107-1169-11AF
4E76
BD09:1107-1169-11BC
4FF8 5949 5C01 5CEF 5CF0 6367 68D2 70FD 71A2 742B
7E2B 84EC 8702 9022 92D2 9CF3 4E30 5906 7BF7 7D98
83F6 9D0C
BD80:1107-116E
4E0D 4ED8 4FEF 5085 5256 526F 5426 5490 57E0 592B
5A66 5B5A 5B75 5BCC 5E9C 6276 6577 65A7 6D6E 6EA5
7236 7B26 7C3F 7F36 8150 8151 819A 8240 8299 83A9
8A03 8CA0 8CE6 8CFB 8D74 8DBA 90E8 91DC 961C 9644
99D9 9CE7 4EC6 4FD8 5A8D 6294 62CA 638A 6874 6991
6DAA 739E 7954 7B5F 7F58 7F66 80D5 82A3 82FB 8500
86A8 8709 889D 88D2 8DD7 9207 982B 9B92 9EA9
BD81:1107-116E-11A8
5317
BD84:1107-116E-11AB
5206 5429 5674 58B3 5954 596E 5FFF 61A4 626E 6610
6C7E 711A 76C6 7C89 7CDE 7D1B 82AC 8CC1 96F0 4F53
574C 5E09 678C 68FB 68FC 6C1B 6E53 6FC6 7287 755A
780F 7B28 80A6 81B9 8561 8F52 9EFA 9F22
BD88:1107-116E-11AF
4F5B 5F17 5F7F 62C2 5CAA 7953 7D31 8274 8300 97CD
9AF4 9EFB
BD95:1107-116E-11BC
5D29 670B 68DA 787C 7E43 9D6C 580B 6F30 9B05
BE44:1107-1175
4E15 5099 5315 532A 5351 5983 5A62 5E87 60B2 618A
6249 6279 6590 6787 69A7 6BD4 6BD6 6BD7 6BD8 6CB8
7435 75FA 7812 7891 79D5 79D8 7C83 7DCB 7FE1 80A5
813E 81C2 83F2 871A 88E8 8AB9 8B6C 8CBB 9119 975E
98DB 9F3B 4EF3 4FFE 5255 572E 57E4 59A3 5C41 5EB3
60B1 68D0 6911 6C98 6DDD 6DE0 6FDE 72C9 72D2 75DE
75F9 7765 7955 7BE6 7D15 7F86 8153 8298 82BE 8406
84D6 868D 8C94 8D14 8F61 90B3 90EB 959F 9674 970F
97B4 9A11 9A1B 9AC0 9F19
BE48:1107-1175-11AB
56AC 5B2A 5F6C 658C 6AB3 6BAF 6D5C 6FF1 7015 725D
73AD 8CA7 8CD3 983B 5110 64EF 77C9 7E7D 81CF 860B
8C73 90A0 944C 9726 9870 9B02 9B22
BE59:1107-1175-11BC
6191 6C37 8058 9A01 51B0 51ED 51F4 5A09
C0AC:1109-1161
4E4D 4E8B 4E9B 4ED5 4F3A 4F3C 4F7F 4FDF 50FF 53F2
53F8 5506 55E3 56DB 58EB 5962 5A11 5BEB 5BFA 5C04
5DF3 5E2B 5F99 601D 6368 659C 65AF 67F6 67FB 68AD
6B7B 6C99 6CD7 6E23 7009 7345 7802 793E 7940 7960
79C1 7BE9 7D17 7D72 8086 820D 838E 84D1 86C7 88DF
8A50 8A5E 8B1D 8CDC 8D66 8FAD 90AA 98FC 99DF 9E9D
509E 525A 5378 548B 59D2 6942 69AD 6C5C 75E7 76B6
7AE2 7B25 7F37 8721 8997 99DB 9B66 9BCA 9C24
C0AD:1109-1161-11A8
524A 6714 69CA 720D 84B4 9460
C0B0:1109-1161-11AB
5098 522A 5C71 6563 6C55 73CA 7523 759D 7B97 849C
9178 9730 5277 59CD 5B7F 6A75 6F78 6F98 72FB 7E56
8A15 93DF 958A 6BFF
C0B4:1109-1161-11AF
4E77 6492 6BBA 715E 85A9
C0BC:1109-1161-11B7
4E09 6749 68EE 6E17 829F 8518 886B 7CDD 91E4 9B16
C0BD:1109-1161-11B8
63F7 6F81 9212 98AF 5345 553C 6B43 7FE3 9364 9705
970E
C0C1:1109-1161-11BC
4E0A 50B7 50CF 511F 5546 55AA 5617 5B40 5C19 5CE0
5E38 5E8A 5EA0 5EC2 60F3 6851 6A61 6E58 723D 7240
72C0 76F8 7965 7BB1 7FD4 88F3 89F4 8A73 8C61 8CDE
971C 587D 5F9C 664C 6BA4 751E 7DD7 939F 9859 9B3A
C0C8:1109-1162
585E 74BD 8CFD 9C13
C0C9:1109-1162-11A8
55C7 7A61 7D22 8272 69ED 6FC7 7012
C0DD:1109-1162-11BC
7272 751F 7525 7B19 771A 924E
C11C:1109-1165
5885 58FB 5DBC 5E8F 5EB6 5F90 6055 6292 637F 654D
6691 66D9 66F8 6816 68F2 7280 745E 7B6E 7D6E 7DD6
7F72 80E5 8212 85AF 897F 8A93 901D 92E4 9ECD 9F20
566C 5A7F 63DF 6495 6E51 6FA8 7D13 8021 82A7 924F
C11D:1109-1165-11A8
5915 596D 5E2D 60DC 6614 6673 6790 6C50 6DC5 6F5F
77F3 78A9 84C6 91CB 932B 6670 77FD 814A 8203 8725
9250 9F2B
C120:1109-1165-11AB
4ED9 50CA 5148 5584 5B0B 5BA3 6247 657E 65CB 6E32
717D 7401 7444 7487 74BF 766C 79AA 7DDA 7E55 7FA8
817A 81B3 8239 861A 87EC 8A75 8DE3 9078 9291 9425
994D 9BAE 58A1 5AD9 5C1F 5C20 5C73 6103 6B5A 71AF
7B45 7DAB 8B54 8B71 93C7 9A38 9C53 9C7B
C124:1109-1165-11AF
5368 5C51 6954 6CC4 6D29 6E2B 820C 859B 893B 8A2D
8AAA 96EA 9F67 5070 5A9F 63F2 66AC 7207 789F 7A27
7D32
C12C:1109-1165-11B7
5261 66B9 6BB2 7E96 87FE 8D0D 9583 965D 5B45 61B8
647B 7752 8B6B 929B 97F1
C12D:1109-1165-11B8
651D 6D89 71EE 56C1 61FE 7044 8076 8EA1 9477 9873
C131:1109-1165-11BC
57CE 59D3 5BAC 6027 60FA 6210 661F 665F 7329 73F9
76DB 7701 7B6C 8056 8072 8165 8AA0 9192 7446 9A02
C138:1109-1166
4E16 52E2 6B72 6D17 7A05 7B39 7D30 8CB0 5E28 6D12
7E50 86FB
C18C:1109-1169
53EC 562F 5851 5BB5 5C0F 5C11 5DE2 6240 6383 6414
662D 68B3 6CBC 6D88 6EAF 701F 70A4 71D2 7526 758F
758E 7619 7B11 7BE0 7C2B 7D20 7D39 852C 856D 8607
8A34 900D 9061 90B5 92B7 97F6 9A37 4F4B 4FCF 5372
55C9 57FD 5850 612C 634E 6A14 6CDD 7B71 7BBE 7E45
7FDB 8186 8258 86F8 8E08 9165 9704 9B48 9BB9 9C3A
C18D:1109-1169-11A8
4FD7 5C6C 675F 6D91 7C9F 7E8C 8B16 8D16 901F 6D2C
906C
C190:1109-1169-11AB
5B6B 5DFD 640D 84C0 905C 98E1 98E7 98F1
C194:1109-1169-11AF
7387 7AA3 87C0
C1A1:1109-1169-11BC
5B8B 609A 677E 6DDE 8A1F 8AA6 9001 980C 67D7 7AE6
9B06
C1C4:1109-116B
5237 7051 788E 9396 60E2 66EC 7463
C1E0:1109-116C
8870 91D7
C218:1109-116E
4FEE 53D7 55FD 56DA 5782 58FD 5AC2 5B88 5CAB 5CC0
5E25 6101 620D 624B 6388 641C 6536 6578 6A39 6B8A
6C34 6D19 6F31 71E7 72E9 7378 7407 74B2 7626 7761
79C0 7A57 7AEA 7CB9 7D8F 7DAC 7E61 7F9E 8129 8331
8490 84DA 85EA 8896 8AB0 8B90 8F38 9042 9083 916C
9296 92B9 968B 96A7 96A8 96D6 9700 9808 9996 9AD3
9B1A 53DF 552E 5ECB 666C 6BB3 6CC5 6EB2 6FC9 775F
7762 778D 795F 7C54 813A 8184 81B8 8B8E 8C4E 9672
98BC 9948
C219:1109-116E-11A8
53D4 587E 5919 5B70 5BBF 6DD1 6F5A 719F 7421 74B9
8085 83FD 4FF6 500F 5135 5A4C 6A5A 9A4C 9DEB
C21C:1109-116E-11AB
5DE1 5F87 5FAA 6042 65EC 6812 696F 6A53 6B89 6D35
6DF3 73E3 76FE 77AC 7B4D 7D14 8123 821C 8340 84F4
8563 8A62 8AC4 9187 931E 9806 99B4 4F9A 72E5 76F9
7734 7D03 80AB 99E8 9B0A 9D89
C220:1109-116E-11AF
620C 8853 8FF0 9265 7D49
C22D:1109-116E-11BC
5D07 5D27 5D69 83D8
C26C:1109-1171
5005 6DEC 7120
C2AC:1109-1173-11AF
745F 819D 8768 8671
C2B5:1109-1173-11B8
6FD5 62FE 7FD2 8936 8972 6174 71A0 96B0
C2B9:1109-1173-11BC
4E1E 4E58 50E7 52DD 5347 627F 6607 7E69 8805 965E
584D 9B19
C2DC:1109-1175
4F8D 5319 5636 59CB 5AA4 5C38 5C4E 5C4D 5E02 5F11
6043 65BD 662F 6642 67BE 67F4 731C 77E2 793A 7FC5
8494 84CD 8996 8A66 8A69 8AE1 8C55 8C7A 5072 5155
53AE 557B 5852 5EDD 67B2 67F9 6F8C 7DE6 7FE4 8ADF
8AF0 8C49 91C3 9349 984B
C2DD:1109-1175-11A8
57F4 5BD4 5F0F 606F 62ED 690D 6B96 6E5C 7184 7BD2
8755 8B58 8EFE 98DF 98FE 55B0 5AB3 683B
C2E0:1109-1175-11AB
4F38 4F81 4FE1 547B 5A20 5BB8 613C 65B0 6668 71FC
7533 795E 7D33 814E 81E3 8398 85AA 85CE 8703 8A0A
8EAB 8F9B 8FC5 54C2 567A 56DF 59FA 6C5B 77E7 8124
8D10 9823 99EA
C2E4:1109-1175-11AF
5931 5BA4 5BE6 6089 87CB 98CB
C2EC:1109-1175-11B7
5BE9 5C0B 5FC3 6C81 6DF1 700B 751A 82AF 8AF6 68A3
6F6F 71D6 845A 9414 9C4F
C2ED:1109-1175-11B8
4EC0 5341 8FBB
C30D:110A-1161-11BC
96D9
C528:110A-1175
6C0F
C544:110B-1161
4E9E 4FC4 5152 555E 5A25 5CE8 6211 7259 82BD 83AA
86FE 8859 8A1D 963F 96C5 9913 9D09 9D5D 4E2B 54E6
5A3F 5A40 5CE9 75B4 7811 7B0C 8FD3 930F 9D5E
C545:110B-1161-11A8
580A 5CB3 5DBD 5E44 60E1 6115 63E1 6A02 6E25 9102
9354 984E 9C10 9F77 5053 537E 54A2 5594 5669 816D
843C 89A8 8AE4 9D9A 9F76
C548:110B-1161-11AB
5B89 5CB8 6309 664F 6848 773C 96C1 978D 9854 9B9F
6849 72B4 8D0B 9D08
C54C:110B-1161-11AF
65A1 8B01 8ECB 95BC 560E 621E 63E0 7A75 8A10 904F
981E 9D36
C554:110B-1161-11B7
5535 5CA9 5DD6 5EB5 6697 764C 83F4 95C7 557D 5A95
5D53 667B 8164 844A 84ED 8AF3 9837 99A3 9EEF
C555:110B-1161-11B8
58D3 62BC 72CE 9D28
C559:110B-1161-11BC
4EF0 592E 600F 663B 6B83 79E7 9D26 536C 5771 6CF1
76CE 9785
C560:110B-1162
5393 54C0 57C3 5D16 611B 66D6 6DAF 788D 827E 9698
9744 50FE 5509 5540 566F 5A2D 5D15 6328 6371 6B38
6F04 7343 769A 775A 77B9 78D1 7919 8586 85F9 9749
9A03
C561:110B-1162-11A8
5384 627C 6396 6DB2 7E0A 814B 984D 545D 6239 6424
9628
C575:110B-1162-11BC
6AFB 7F4C 9DAF 9E1A 56B6 5AC8 7F43 9DEA
C57C:110B-1163
4E5F 503B 51B6 591C 60F9 63F6 6930 723A 8036 91CE
57DC
C57D:110B-1163-11A8
5F31 7D04 82E5 846F 84BB 85E5 8E8D 721A 79B4 7BDB
7C65 9470 9C2F 9DB8 9FA0
C591:110B-1163-11BC
4F6F 58E4 5B43 6059 63DA 6518 656D 6698 694A 6A23
6D0B 7001 716C 75D2 760D 79B3 7A70 7F8A 8944 8B93
91C0 967D 990A 5F89 6F3E 703C 70CA 7662 773B 8618
8F30 9472 98BA 9A64
C5B4:110B-1165
5704 5FA1 65BC 6F01 7600 79A6 8A9E 99AD 9B5A 9F6C
5709 6554 6DE4 98EB
C5B5:110B-1165-11A8
5104 61B6 6291 6A8D 81C6 7E76
C5B8:110B-1165-11AB
5043 5830 5F66 7109 8A00 8AFA 50BF 533D 5AE3 8B9E
9122 9F34 9F39
C5BC:110B-1165-11AF
5B7C 8616 81EC
C5C4:110B-1165-11B7
4FFA 513C 56B4 5944 63A9 6DF9 5D26 5E7F 66EE 7F68
9183 95B9
C5C5:110B-1165-11B8
5DAA 696D 5DAB 9134
C5D0:110B-1166
605A 66C0
C5D4:110B-1166-11AB
5186
C5EC:110B-1167
4E88 4F59 5982 6B5F 6C5D 74B5 7916 8207 8245 8339
8F3F 8F5D 9918 8201
C5ED:110B-1167-11A8
4EA6 57DF 5F79 6613 75AB 7E79 8B6F 9006 9A5B 5DA7
61CC 6DE2 95BE
C5F0:110B-1167-11AB
56A5 5827 59F8 5A1F 5BB4 5EF6 6350 633B 693D 6C87
6CBF 6D8E 6D93 6DF5 6F14 70DF 7136 7159 71C3 71D5
784F 786F 7B75 7DE3 7E2F 884D 8EDF 925B 9CF6 5157
56E6 57CF 5B3F 6081 63BE 66E3 6ADE 6E37 81D9 839A
8735 8815 8B8C 9DF0
C5F4:110B-1167-11AF
6085 6D85 71B1 95B1 564E
C5FC:110B-1167-11B7
53AD 67D3 708E 7130 7430 8276 82D2 95BB 9AE5 9E7D
5189 5869 61D5 624A 6ABF 6AB6 704E 7069 91C5 995C
9B58 9EF6
C5FD:110B-1167-11B8
66C4 71C1 8449 66C5 7180 7217 9768
C601:110B-1167-11BC
584B 5DB8 5F71 6620 668E 6979 69AE 6C38 6CF3 6E36
6F41 6FDA 701B 702F 7150 71DF 7370 745B 74D4 76C8
7A4E 7E93 82F1 8A60 8FCE 9348 9719 548F 5B34 5B30
6D67 6FF4 766D 78A4 7E08 8811 8D0F 90E2 97FA
C608:110B-1168
4E42 502A 5208 53E1 66F3 6C6D 6FCA 730A 777F 7A62
82AE 85DD 8602 88D4 8A63 8B7D 8C6B 92B3 9713 9810
56C8 5ADB 62FD 639C 6798 7369 7768 7796 7E44 7FF3
82C5 854A 854B 8589 868B 873A 9BE2 9DD6 9E91
C624:110B-1169
4E94 4F0D 4FC9 50B2 5348 543E 5433 55DA 5862 58BA
5967 5A1B 5BE4 609F 61CA 6556 65FF 6664 68A7 6C5A
6FB3 70CF 71AC 7352 7B7D 8708 8AA4 9C32 9F07 4EF5
4FE3 5514 55F7 5641 572C 5AAA 5AEF 5FE4 6160 6342
6C59 7AB9 8071 8323 8956 8B37 8FC3 8FD5 9068 93CA
93D6 96A9 9A41 9F2F
C625:110B-1169-11A8
5C4B 6C83 7344 7389 923A
C628:110B-1169-11AB
6EAB 7465 761F 7A69 7E15 860A 5ABC 614D 6637 6C33
7185 8580 8F40 919E 97DE 9942 9C2E
C62C:110B-1169-11AF
5140 55E2 8183
C639:110B-1169-11BC
58C5 64C1 74EE 7515 7670 7FC1 9095 96CD 9954 5581
5EF1 6EC3 7655 79BA 7F4B 84CA 96DD 9852
C640:110B-116A
6E26 74E6 7AA9 7AAA 81E5 86D9 8778 8A1B 54C7 56EE
5A50 6799 6D3C 7327 7A8A 8435 8B4C
C644:110B-116A-11AB
5A49 5B8C 5B9B 68A1 6900 6D63 73A9 7413 742C 7897
7DE9 7FEB 8118 8155 839E 8C4C 962E 9811 5213 57B8
59A7 5C8F 5FE8 60CB 6DB4 76CC
C648:110B-116A-11AF
66F0
C655:110B-116A-11BC
5F80 65FA 6789 6C6A 738B 5C2B 7007 8FEC
C65C:110B-116B
502D 5A03 6B6A 77EE 5AA7
C678:110B-116C
5916 5D6C 5DCD 7325 754F 504E 5D34 5D54 6E28 7168
78A8 78C8 8075 9697
C694:110B-116D
50E5 51F9 582F 592D 5996 59DA 5BE5 5DA2 62D7 6416
6493 64FE 66DC 6A48 71FF 7464 7A88 7AAF 7E47 7E5E
8000 8170 87EF 8981 8B20 9059 9080 9952 5060 5593
5773 589D 5B08 5E7A 5FAD 5FBC 6B80 6F86 7945 7A7E
7A85 8558 9076 9DC2
C695:110B-116D-11A8
617E 6B32 6D74 7E1F 8925 8FB1 6EBD 84D0
C6A9:110B-116D-11BC
4FD1 50AD 5197 52C7 57C7 5889 5BB9 5EB8 6142 6995
6D8C 6E67 6EB6 7194 7462 7528 752C 8073 8338 84C9
8E0A 9394 93DE 509B 5B82 5D71 6175 6183 69E6 7867
8202 86F9 8E34
C6B0:110B-116E
4E8E 4F51 5076 512A 53C8 53CB 53F3 5B87 5BD3 5C24
611A 6182 65F4 725B 7397 7440 76C2 7950 7991 79B9
7D06 7FBD 828B 85D5 865E 8FC2 9047 90F5 91EA 9685
96E8 96E9 4E8F 4EB4 4FC1 504A 5401 5823 5D4E 5EBD
6745 75A3 76F1 7AFD 8026 8030 8B23 8E3D 935D 9E80
9E8C 9F72
C6B1:110B-116E-11A8
52D6 5F67 65ED 6631 682F 715C 7A36 90C1 980A 71E0
C6B4:110B-116E-11AB
4E91 6A52 6B9E 6F90 7189 8018 82B8 8553 904B 9695
96F2 97FB 60F2 6C84 7BD4 7D1C 9723 97F5
C6B8:110B-116E-11AF
851A 9B31 4E90
C6C5:110B-116E-11BC
718A 96C4
C6D0:110B-116F-11AB
5143 539F 54E1 5713 5712 57A3 5A9B 5AC4 5BC3 6028
613F 63F4 6C85 6D39 6E72 6E90 7230 733F 7457 82D1
8881 8F45 9060 9662 9858 9D1B 51A4 571C 676C 6965
7328 7DA9 82AB 8597 873F 8B1C 92FA 9A35 9D77 9EFF
C6D4:110B-116F-11AF
6708 8D8A 925E 5216 7CA4
C704:110B-1171
4F4D 5049 50DE 5371 570D 59D4 5A01 5C09 6170 6690
6E2D 7232 744B 7DEF 80C3 840E 8466 853F 875F 885B
8918 8B02 9055 97CB 9B4F 559F 5E43 7152 71A8 75FF
8473 885E 8AC9 9036 95C8 97D9 97E1 9927 9AAA
C720:110B-1172
4E73 4F91 5112 516A 552F 55A9 5B7A 5BA5 5E7C 5E7D
5EBE 60A0 60DF 6108 6109 63C4 6538 6709 67D4 67DA
6961 6962 6CB9 6D27 6E38 6FE1 7336 7337 745C 7531
7652 7DAD 81FE 8438 88D5 8A98 8ADB 8AED 8E30 8E42
904A 903E 907A 9149 91C9 936E 5198 5466 56FF 58DD
5E37 63C9 65BF 6CD1 7256 7609 7610 7AAC 7AB3 7C72
7CC5 7DCC 8174 83A0 8555 8564 86B0 86B4 8764 8915
8B89 900C 97A3 9BAA 9EDD 9F2C 9FA5
C721:110B-1172-11A8
5809 6BD3 8089 80B2 5125
C724:110B-1172-11AB
5141 596B 5C39 6F64 73A7 80E4 8D07 9217 958F 6600
92C6
C728:110B-1172-11AF
807F 6F4F 77DE
C735:110B-1172-11BC
620E 701C 7D68 878D 72E8
C740:110B-1173-11AB
57A0 6069 6147 6BB7 8ABE 9280 96B1 542C 569A 5701
57BD 6196 6ABC 6EB5 72FA 73E2 766E 8A14 911E 9F57
C744:110B-1173-11AF
4E59 9CE6
C74C:110B-1173-11B7
541F 6DEB 852D 9670 97F3 98EE 5591 5D1F 5ED5 6114
972A
C74D:110B-1173-11B8
63D6 6CE3 9091 6092 6339 6D65
C751:110B-1173-11BC
51DD 61C9 81BA 9DF9
C758:110B-1174
4F9D 501A 5100 5B9C 610F 61FF 64EC 6905 6BC5 7591
77E3 7FA9 8264 858F 87FB 8863 8ABC 8B70 91AB 5117
51D2 5293 5DB7 6B39 6F2A 7317 7912 8798 9950
C774:110B-1175
4E8C 4EE5 4F0A 5937 59E8 5DF2 5F1B 5F5B 6021 723E
73E5 7570 75CD 79FB 800C 8033 8084 82E1 8351 8CBD
8CB3 9087 98F4 990C 54BF 5768 5C14 5F5D 682E 6D1F
73C6 8A11 8A51 8FE4 96B6
C775:110B-1175-11A8
7037 76CA 7FCA 7FCC 7FFC 8B1A 5F0B 71A4 9DC1
C778:110B-1175-11AB
4EBA 4EC1 5203 5370 54BD 56E0 59FB 5BC5 5F15 5FCD
6E6E 7D6A 8335 8693 8A8D 976D 9777 4EDE 5819 5924
5A63 6268 6C24 6D07 798B 7C7E 82A2 88C0
C77C:110B-1175-11AF
4E00 4F5A 4F7E 58F9 65E5 6EA2 9038 93B0 99B9 6CC6
8EFC
C784:110B-1175-11B7
4EFB 58EC 598A 59D9 6041 7A14 834F 8CC3 7D4D 887D
928B 98EA
C785:110B-1175-11B8
5165 5344 5EFF
C789:110B-1175-11BC
4ECD 5269 5B55 82BF 5AB5
C790:110C-1161
4ED4 523A 54A8 59C9 59FF 5B50 5B57 5B5C 6063 6148
6ECB 7099 716E 7386 74F7 75B5 78C1 7D2B 8005 81EA
8328 8517 85C9 8AEE 8CC7 96CC 5470 5B28 5B56 5B76
67D8 6CDA 7278 7725 7726 7CA2 8014 80FE 8308 8332
83BF 8678 89DC 8A3E 8CB2 8D6D 93A1 983F 9AED 9B93
9DBF 9DD3
C791:110C-1161-11A8
4F5C 52FA 56BC 65AB 6628 707C 70B8 7235 7DBD 828D
914C 96C0 9D72 5C9D 600D 65B1 67DE 6C4B 712F 72B3
788F
C794:110C-1161-11AB
5B71 68E7 6B98 6F7A 76DE 5257 6214 9A4F
C7A0:110C-1161-11B7
5C91 66AB 6F5B 7BB4 7C2A 8836 6D94 6F5C 6FF3
C7A1:110C-1161-11B8
96DC 5361 56C3 7728 78FC 894D
C7A5:110C-1161-11BC
4E08 4ED7 5320 5834 58BB 58EF 596C 5C07 5E33 5E84
5F35 638C 66B2 6756 6A1F 6AA3 6B0C 6F3F 7246 7350
748B 7AE0 7CA7 8178 81DF 81E7 838A 846C 8523 8594
85CF 88DD 8D13 91AC 9577 969C 50BD 5958 599D 5B19
5D82 5EE7 6215 6F33 7242 7634 7CDA 7F98 8407 88C5
8CEC 9123 93D8 9926 9E9E
C7AC:110C-1162
518D 54C9 5728 5BB0 624D 6750 683D 6893 6E3D 6ED3
707D 7E21 88C1 8CA1 8F09 9F4B 9F4E 5908 5D3D 6257
699F 707E 7E94
C7C1:110C-1162-11BC
722D 7B8F 8ACD 931A 5D22 7319 7424 9397
C800:110C-1165
4F47 4F4E 5132 5480 59D0 5E95 62B5 6775 696E 6A17
6CAE 6E1A 72D9 732A 75BD 7BB8 7D35 82E7 83F9 8457
85F7 8A5B 8CAF 8E87 9019 90B8 96CE 9F5F 5B81 5CA8
677C 67E2 6C10 6F74 7026 7274 7F5D 7F9D 82F4 86C6
889B 891A 89DD 8A46 8C6C 967C
C801:110C-1165-11A8
52E3 540A 5AE1 5BC2 6458 6575 6EF4 72C4 7684 7A4D
7B1B 7C4D 7E3E 7FDF 837B 8B2B 8CCA 8D64 8DE1 8E5F
8FEA 8FF9 9069 93D1 6A00 78E7 7CF4 83C2 89BF 9016
99B0
C804:110C-1165-11AB
4F43 4F7A 50B3 5168 5178 524D 526A 5861 587C 5960
5C08 5C55 5EDB 609B 6230 6813 6BBF 6C08 6FB1 714E
7420 7530 7538 7551 7672 7B4C 7B8B 7BAD 7BC6 7E8F
8A6E 8F3E 8F49 923F 9293 9322 942B 96FB 985A 986B
991E 542E 56C0 5AE5 5C47 5DD3 6229 63C3 65C3 6834
69C7 6E54 6FB6 724B 7471 750E 754B 7560 75CA 765C
78DA 7C5B 7FB6 7FE6 8146 819E 8343 8E94 8F07 9085
913D 92D1 932A 975B 9766 9853 98E6 9930 9B0B 9C63
9E07
C808:110C-1165-11AF
5207 622A 6298 6D59 7664 7ACA 7BC0 7D76 5C8A 6662
7A83
C810:110C-1165-11B7
5360 5CBE 5E97 6F38 70B9 7C98 9711 9B8E 9EDE 4F54
588A 73B7 7B18 7C1F 82EB 852A 86C5 8998 98AD 9ECF
C811:110C-1165-11B8
63A5 647A 8776 6904 696A 8728 8DD5 8E40 9C08
C815:110C-1165-11BC
4E01 4E95 4EAD 505C 5075 5448 59C3 5B9A 5E40 5EAD
5EF7 5F81 60C5 633A 653F 6574 65CC 6676 6678 67FE
6968 6A89 6B63 6C40 6DC0 6DE8 6E1F 6E5E 701E 70A1
738E 73FD 753A 775B 7887 798E 7A0B 7A7D 7CBE 7D8E
8247 8A02 8AEA 8C9E 912D 914A 91D8 9266 92CC 9320
9706 9756 975C 9802 9F0E 4F42 53EE 5A67 5A77 6014
639F 686F 6883 68D6 706F 73F5 7594 7B73 839B 8A3C
9049 9172 92E5 975A
C81C:110C-1166
5236 5291 557C 5824 5E1D 5F1F 608C 63D0 68AF 6FDF
796D 7B2C 81CD 85BA 88FD 8AF8 8E44 918D 9664 969B
973D 984C 9F4A 5115 5A23 64E0 7318 7445 7747 7994
7A0A 7DF9 8E36 8E4F 8E8B 9357 9684 97F2 9BA7 9BF7
C870:110C-1169
4FCE 5146 51CB 52A9 5632 5F14 5F6B 63AA 64CD 65E9
6641 66FA 66F9 671D 689D 68D7 69FD 6F15 6F6E 7167
71E5 722A 74AA 773A 7956 795A 79DF 7A20 7A95 7C97
7CDF 7D44 7E70 8087 85FB 86A4 8A54 8ABF 8D99 8E81
9020 906D 91E3 963B 96D5 9CE5 4F7B 50AE 5201 539D
5608 566A 5B25 5F82 61C6 627E 6B82 6FA1 7431 7681
7967 7AC8 7B0A 7CD9 7CF6 7D69 7D5B 80D9 81CA 825A
8526 8729 8A82 8B5F 921F 929A 92FD 9BDB 9D70 9F02
C871:110C-1169-11A8
65CF 7C07 8DB3 93C3 762F
C874:110C-1169-11AB
5B58 5C0A 62F5
C878:110C-1169-11AF
5352 62D9 731D
C885:110C-1169-11BC
5027 5B97 5F9E 60B0 616B 68D5 6DD9 742E 7A2E 7D42
7D9C 7E31 816B 8E2A 8E35 937E 9418 4F00 6152 67CA
6936 6A05 747D 7607 7CBD 87BD 8E64
C88C:110C-116A
4F50 5750 5DE6 5EA7 632B 5249 75E4 839D 9AFD
C8C4:110C-116C
7F6A
C8FC:110C-116E
4E3B 4F4F 4F8F 505A 59DD 80C4 546A 5468 55FE 594F
5B99 5DDE 5EDA 665D 6731 67F1 682A 6CE8 6D32 6E4A
6F8D 70B7 73E0 7587 7C4C 7D02 7D2C 7DA2 821F 86DB
8A3B 8A85 8D70 8E8A 8F33 9031 914E 9152 9444 99D0
4E1F 4F9C 5114 5C0C 5E6C 62C4 7843 7C52 8098 8160
851F 86C0 88EF 8A4B 8CD9 8D8E 8F08 9052 9252 970C
9714 9F04
C8FD:110C-116E-11A8
7AF9 7CA5
C900:110C-116E-11AB
4FCA 5101 51C6 57C8 5BEF 5CFB 6659 6A3D 6D5A 6E96
6FEC 710C 756F 7AE3 8822 9021 9075 96CB 99FF 5642
57FB 58AB 60F7 6499 76B4 7DA7 7F47 8E06 8E72 940F
96BC 9915 9C52 9D54
C904:110C-116E-11AF
8301 4E7C
C911:110C-116E-11BC
4E2D 4EF2 8846 91CD 773E
C989:110C-1173-11A8
537D 5373 559E
C990:110C-1173-11AF
6ADB 9A2D
C999:110C-1173-11B8
696B 6C41 847A 6A9D 857A
C99D:110C-1173-11BC
589E 618E 66FE 62EF 70DD 7511 75C7 7E52 84B8 8B49
8D08 5D92 77F0 7F7E
C9C0:110C-1175
4E4B 53EA 54AB 5730 5740 5FD7 6301 6307 646F 652F
65E8 667A 679D 67B3 6B62 6C60 6C9A 6F2C 77E5 7825
7949 7957 7D19 80A2 8102 81F3 829D 82B7 8718 8A8C
8D04 8DBE 9072 577B 5880 627A 69B0 6CDC 75E3 79EA
7BEA 8210 8E1F 8E93 8EF9 962F 9BA8 9DD9
C9C1:110C-1175-11A8
76F4 7A19 7A37 7E54 8077 799D
C9C4:110C-1175-11AB
5507 55D4 5875 632F 6422 6649 664B 686D 699B 6B84
6D25 6EB1 73CD 7468 74A1 755B 75B9 76E1 771E 778B
79E6 7E09 7E1D 81FB 852F 8897 8A3A 8CD1 8EEB 8FB0
9032 93AD 9663 9673 9707 4FB2 5118 73D2 7A39 84C1
87B4 8D81 9241 9B12
C9C8:110C-1175-11AF
4F84 53F1 59EA 5AC9 5E19 684E 74C6 75BE 79E9 7A92
81A3 86ED 8CEA 8DCC 8FED 57A4 7D70 84BA 90C5 9455
C9D0:110C-1175-11B7
659F 6715 9D06
C9D1:110C-1175-11B8
57F7 6F57 7DDD 8F2F 93F6 96C6 54A0 6222
C9D5:110C-1175-11BC
5FB5 61F2 6F84 6F82 7013 7665 77AA
CC28:110E-1161
4E14 4F98 501F 53C9 55DF 5D6F 5DEE 6B21 6B64 78CB
7B9A 8E49 8ECA 906E 4F7D 5056 5953 5C94 5FA3 69CE
7473 7868
CC29:110E-1161-11A8
6349 643E 7740 7A84 932F 947F 9F6A 6233 64C9 65B2
CC2C:110E-1161-11AB
64B0 6FAF 71E6 74A8 74DA 7AC4 7C12 7E82 7CB2 7E98
8B9A 8D0A 947D 9910 994C 5127 5139 5297 5DD1 6522
6B11 7228 8DB2
CC30:110E-1161-11AF
5239 5BDF 64E6 672D 7D2E 624E 62F6
CC38:110E-1161-11B7
50ED 53C3 5879 6158 6159 61FA 65AC 7AD9 8B92 8B96
5133 53C5 5D84 5DC9 615A 61AF 6519 69E7 6B03 6BDA
8B56 93E8 9471 995E 9A42 9EF2
CC3D:110E-1161-11BC
5009 5021 5275 5531 5A3C 5EE0 5F70 6134 655E 660C
6636 66A2 69CD 6EC4 6F32 7316 7621 7A93 8139 8259
83D6 84BC 5000 5096 51D4 5231 60B5 60DD 6227 6436
6919 6C05 7472 7A97 7ABB 8E4C 92F9 9306 95B6 9B2F
9DAC
CC44:110E-1162
50B5 57F0 5BC0 5BE8 5F69 63A1 7826 7DB5 83DC 8521
91C7 91F5 68CC 831D
CC45:110E-1162-11A8
518A 67F5 7B56 8CAC 5616 5E58 78D4 7B27 7C00 86B1
CC98:110E-1165
51C4 59BB 60BD 8655 6DD2 840B 8904 89B7 90EA
CC99:110E-1165-11A8
501C 5254 5C3A 617D 621A 62D3 64F2 65A5 6ECC 7620
810A 8E60 965F 96BB 544E 5767 5849 60D5 6357 646D
8734 8DD6 8E91
CC9C:110E-1165-11AB
4EDF 5343 5598 5929 5DDD 64C5 6CC9 6DFA 7394 7A7F
821B 85A6 8CE4 8E10 9077 91E7 95E1 9621 97C6 4FF4
5029 50E2 5103 6D0A 6FFA 74E9 7946 7C81 81F6 828A
831C 8350 84A8 8546 8695 8FBF 975D
CCA0:110E-1165-11AF
51F8 54F2 5586 5FB9 64A4 6F88 7DB4 8F1F 8F4D 9435
525F 555C 57D1 60D9 6387 6B60 9295 9323 98FB 992E
CCA8:110E-1165-11B7
50C9 5C16 6CBE 6DFB 751B 77BB 7C3D 7C64 8A79 8AC2
5E68 5FDD 60C9 6A90 6AFC 7038 7C37 895C
CCA9:110E-1165-11B8
581E 59BE 5E16 6377 7252 758A 776B 8ADC 8CBC 8F12
5022 546B 558B 6017 893A
CCAD:110E-1165-11BC
5EF3 6674 6DF8 807D 83C1 8ACB 9751 9BD6 51CA 570A
873B 9D84
CCB4:110E-1166
5243 66FF 6D95 6EEF 7DE0 8AE6 902E 905E 9AD4 568F
5F58 68E3 6BA2 780C 8482 8515 855E 8EC6 9746 9AF0
CD08:110E-1169
521D 527F 54E8 6194 6284 62DB 68A2 6912 695A 6A35
7092 7126 785D 7901 790E 79D2 7A0D 8096 8278 82D5
8349 8549 8C82 8D85 9162 918B 91AE 5062 50EC 52AD
52E6 564D 5AF6 5CA7 5CED 5D95 600A 6084 6100 676A
71CB 7D83 8016 8A9A 8B59 8DA0 8EFA 8FE2 9214 936B
936C 9798 9866 9AEB 9DE6 9F60
CD09:110E-1169-11A8
4FC3 56D1 71ED 77D7 8700 89F8 66EF 7225 77DA 85A5
8E85 9AD1
CD0C:110E-1169-11AB
5BF8 5FD6 6751 90A8 540B
CD1D:110E-1169-11BC
53E2 585A 5BF5 60A4 6181 6460 7E3D 8070 8525 9283
8471 84EF 93E6 9A18 9A44
CD2C:110E-116A-11AF
64AE
CD5C:110E-116C
50AC 5D14 6700 562C 6467 69B1 6F3C 7480 78EA 7E17
8127
CD94:110E-116E
589C 62BD 63A8 690E 6978 6A1E 6E6B 76BA 79CB 82BB
8429 8ACF 8DA8 8FFD 9112 914B 919C 9310 9318 939A
96DB 9A36 9C0D 50E6 557E 5A35 5E1A 60C6 6376 63EB
6425 7503 7633 9F9D 7B92 7BA0 7C09 7E0B 7E10 84AD
966C 96B9 97A6 9A05 9B4B 9C0C 9D7B 9D96 9DB5 9E84
9EA4
CD95:110E-116E-11A8
4E11 755C 795D 7AFA 7B51 7BC9 7E2E 84C4 8E59 8E74
8EF8 9010 59AF 8233 8C56 8E5C 9F00
CD98:110E-116E-11AB
6625 693F 7443
CD9C:110E-116E-11AF
51FA 672E 9EDC 79EB
CDA9:110E-116E-11BC
5145 5FE0 6C96 87F2 885D 8877 51B2 5FE1 73EB
CDCC:110E-1170
60B4 81B5 8403 8D05 60F4 63E3 75A9 7601 9847
CDE8:110E-1171
53D6 5439 5634 5A36 5C31 708A 7FE0 805A 8106 81ED
8DA3 9189 9A5F 9DF2 51A3 6A47 6BF3
CE21:110E-1173-11A8
5074 4EC4 53A0 60FB 6E2C 5EC1 6603
CE35:110E-1173-11BC
5C64
CE58:110E-1175
4F88 5024 55E4 5CD9 5E5F 6065 6894 6CBB 6DC4 71BE
75D4 75F4 7661 7A1A 7A49 7DC7 7DFB 7F6E 81F4 86A9
8F1C 96C9 99B3 9F52 536E 54C6 5BD8 5DF5 7564 75D3
7D7A 83D1 8599 892B 8C78 8DF1 9319 9624 9BD4 9D19
9D1F 9D44
CE59:110E-1175-11A8
5247 52C5 98ED 6555
CE5C:110E-1175-11AB
89AA 6AEC 85FD 896F 9F54
CE60:110E-1175-11AF
4E03 67D2 6F06
CE68:110E-1175-11B7
4FB5 5BE2 6795 6C88 6D78 741B 7827 91DD 937C 5BD6
5FF1 6939 6C89 90F4 92DF 99F8
CE69:110E-1175-11B8
87C4
CE6D:110E-1175-11BC
79E4 7A31
CF8C:110F-116B
5FEB 5672 592C
D0C0:1110-1161
4ED6 54A4 553E 58AE 59A5 60F0 6253 62D6 6736 6955
8235 9640 99B1 99DD 4F57 579E 62D5 67C1 6A62 6CB1
8A6B 8DCE 8EB1 99DE 9B80 9D15 9F09
D0C1:1110-1161-11A8
502C 5353 5544 577C 6258 64E2 666B 67DD 6FC1 6FEF
7422 7438 8A17 9438 62C6 6A50 6CB0 6DBF 77FA 7C5C
8600 8E14 9034
D0C4:1110-1161-11AB
5451 5606 5766 5F48 619A 6B4E 7058 70AD 7DBB 8A95
61BB 6524 6BAB 7671 9A52
D0C8:1110-1161-11AF
596A 812B 4FBB
D0D0:1110-1161-11B7
63A2 7708 803D 8CAA 55FF 5FD0 9156
D0D1:1110-1161-11B8
5854 642D 69BB 509D 584C 6428
D0D5:1110-1161-11BC
5B95 5E11 6E6F 8569 71D9 76EA 78AD 862F
D0DC:1110-1162
514C 53F0 592A 6020 614B 6B86 6C70 6CF0 7B1E 80CE
82D4 8DC6 90B0 98B1 57ED 5A27 5B61 62AC 8FE8 99C4
99D8
D0DD:1110-1162-11A8
64C7 6FA4
D0F1:1110-1162-11BC
6491 6490 725A
D130:1110-1165
6504
D1A0:1110-1169
514E 5410 571F 8A0E
D1A4:1110-1169-11AB
564B 5678 74F2
D1B5:1110-1169-11BC
615F 6876 75DB 7B52 7D71 901A 606B 6A0B 7B69
D1F4:1110-116C
5806 69CC 817F 892A 9000 9839 96A4
D22C:1110-116E
5078 5957 59AC 6295 900F 9B2A 5992 6E1D 9AB0
D241:1110-116E-11BC
4F5F
D2B9:1110-1173-11A8
615D 7279 5FD2
D2C8:1110-1173-11B7
95D6
D30C:1111-1161
5761 5A46 5DF4 628A 64AD 64FA 6777 6CE2 6D3E 722C
7436 7834 7F77 82AD 8DDB 9817 53F5 5991 5CA5 6015
705E 7238 73BB 76A4 7B06 7C38 8019 83E0 8469 9131
D310:1111-1161-11AB
5224 5742 677F 7248 74E3 8CA9 8FA6 9211 962A 6C74
D314:1111-1161-11AF
516B 53ED 634C 6733 6C43
D328:1111-1162
4F69 5504 6096 6557 6C9B 6D7F 724C 72FD 7A17 8987
8C9D 5B5B 65C6 73EE 9708 9738
D33D:1111-1162-11BC
5F6D 6F8E 70F9 81A8 7830 794A 87DA 87DB
D345:1111-1163-11A8
610E
D3B8:1111-1167-11AB
4FBF 504F 6241 7247 7BC7 7DE8 7FE9 904D 97AD 9A19
533E 5FA7 60FC 7DF6 8251 8439 8759 890A 8ADE
D3C4:1111-1167-11B7
8CB6 782D 7A86
D3C9:1111-1167-11BC
576A 5E73 67B0 840D 8A55 6026 62A8 6CD9 82F9 84F1
9B83
D3D0:1111-1168
5420 5B16 5E63 5EE2 5F0A 6583 80BA 853D 9589 965B
655D 72F4 7358 7648
D3EC:1111-1169
4F48 5305 530D 530F 5486 54FA 5703 5E03 6016 629B
62B1 6355 6CE1 6D66 75B1 7832 80DE 812F 82DE 8461
84B2 888D 8912 900B 92EA 98FD 9B91 5124 5E96 6661
66D3 70AE 70B0 8216 8AA7 924B 9784 9914 9BC6
D3ED:1111-1169-11A8
5E45 66B4 66DD 7011 7206
D45C:1111-116D
4FF5 527D 5F6A 6153 6753 6A19 6F02 74E2 7968 8868
8C79 98C7 98C4 9A43 50C4 52E1 560C 5AD6 647D 6B8D
719B 7E39 88F1 93E2 9463 9ADF 9C3E
D488:1111-116E-11B7
54C1 7A1F 7980
D48D:1111-116E-11BC
6953 8AF7 8C4A 98A8 99AE 760B 8451
D53C:1111-1175
5F7C 62AB 75B2 76AE 88AB 907F 9642 8A56 8F9F 9781
9AF2
D53D:1111-1175-11A8
8177
D544:1111-1175-11AF
5339 5F3C 5FC5 6CCC 73CC 7562 758B 7B46 82FE 999D
4F56 5487 6EED 7BF3 7F7C 84FD 89F1 8E55 97B8 97E0
99DC 9D6F
D54D:1111-1175-11B8
4E4F 903C 506A
D558:1112-1161
4E0B 4F55 53A6 590F 5EC8 6630 6CB3 7455 8377 8766
8CC0 9050 971E 9C15 5440 5687 5C88 61D7 7146 7615
7F45 935C
D559:1112-1161-11A8
58D1 5B78 8650 8B14 9DB4 72E2 7627 76AC 786E 90DD
9DFD
D55C:1112-1161-11AB
5BD2 6068 608D 65F1 6C57 6F22 6FA3 701A 7F55 7FF0
9591 9592 9650 97D3 50E9 5AFA 5AFB 634D 66B5 9588
99FB 9DF3 9F3E
D560:1112-1161-11AF
5272 8F44 778E
D568:1112-1161-11B7
51FD 542B 54B8 5563 558A 6ABB 6DB5 7DD8 8266 929C
9677 9E79 839F 83E1 8AF4 8F5E 95DE
D569:1112-1161-11B8
5408 54C8 76D2 86E4 95A4 95D4 965C 530C 55D1 67D9
69BC 6E98 76CD 90C3
D56D:1112-1161-11BC
4EA2 4F09 59EE 5AE6 5DF7 6052 6297 676D 6841 6C86
6E2F 7F38 809B 822A 9805 592F 6046 7095 7F3F 980F
D574:1112-1162
4EA5 5055 54B3 5793 595A 5B69 5BB3 61C8 6977 6D77
7023 87F9 89E3 8A72 8AE7 9082 99ED 9AB8 548D 5DB0
5EE8 6B2C 736C 744E 75CE 85A4 91A2 9826 9BAD
D575:1112-1162-11A8
52BE 6838 7FEE 8988
D589:1112-1162-11BC
5016 5E78 674F 8347 884C 60BB
D5A5:1112-1163-11BC
4EAB 5411 56AE 73E6 9115 97FF 9909 9957 9999 858C
D5C8:1112-1165
5653 589F 865B 8A31 6B54
D5CC:1112-1165-11AB
61B2 6AF6 737B 8ED2 5DDA 5E70 6507
D5D0:1112-1165-11AF
6B47
D5D8:1112-1165-11B7
96AA 9A57 5DAE 736B 7381
D601:1112-1167-11A8
5955 7200 8D6B 9769 5F08 6D2B 7131 9B29
D604:1112-1167-11AB
4FD4 5CF4 5F26 61F8 665B 6CEB 70AB 7384 73B9 73FE
7729 774D 7D43 7D62 7E23 8237 8852 8CE2 9249 986F
5107 5B1B 6621 7404 75C3 770C 7E6F 7FFE 8706 8AA2
92D7 99FD
D608:1112-1167-11AF
5B51 7A74 8840 9801 7D5C 8D90
D610:1112-1167-11B7
5ACC
D611:1112-1167-11B8
4FE0 5354 593E 5CFD 633E 6D79 72F9 8105 8107 83A2
92CF 9830 5327 53F6 57C9 604A 608F 611C 7BCB
D615:1112-1167-11BC
4EA8 5144 5211 578B 5F62 6CC2 6ECE 7005 7050 70AF
7192 73E9 7469 834A 87A2 8861 9008 90A2 93A3 99A8
5910 5A19 8A57 8FE5 9658
D61C:1112-1168
516E 5F57 60E0 6167 66B3 8559 8E4A 91AF 978B 5092
5612 5BED 5FAF 69E5 76FB 8B11 8B7F
D638:1112-1169
4E4E 4E92 547C 58D5 58FA 597D 5CB5 5F27 6236 6248
660A 6667 6BEB 6D69 6DCF 6E56 6EF8 6F94 6FE0 6FE9
705D 72D0 7425 745A 74E0 7693 795C 7CCA 7E1E 80E1
82A6 846B 84BF 864E 865F 8774 8B77 8C6A 93AC 9800
9865 512B 51B1 5637 5AED 5AEE 6019 6C8D 6EC8 6EEC
7292 7322 769C 769E 7B8E 8055 9190 992C 9B0D
D639:1112-1169-11A8
60D1 6216 9177
D63C:1112-1169-11AB
5A5A 660F 6DF7 6E3E 743F 9B42 5702 60DB 6EB7 711C
95BD
D640:1112-1169-11AF
5FFD 60DA 7B0F 56EB
D64D:1112-1169-11BC
54C4 5F18 6C5E 6CD3 6D2A 70D8 7D05 8679 8A0C 9D3B
664E 6F92 7BCA 9277 9B28
D654:1112-116A
5316 548C 5B05 6A3A 706B 7575 798D 79BE 82B1 83EF
8A71 8B41 8CA8 9774 4FF0 5629 5A72 64ED 756B 9A4A
9FA2
D655:1112-116A-11A8
64F4 652B 78BA 78BB 7A6B 77CD 77E1 792D 944A
D658:1112-116A-11AB
4E38 559A 5950 5BA6 5E7B 60A3 63DB 6B61 6665 6853
6E19 7165 74B0 7D08 9084 9A69 9C25 5BF0 61FD 64D0
74DB 7696 7746 7D59 8C62 8F58 9370 9436 9B1F
D65C:1112-116A-11AF
6D3B 6ED1 733E 8C41 95CA 86DE
D669:1112-116A-11BC
51F0 5E4C 5FA8 604D 60F6 6130 614C 6643 6644 69A5
6CC1 6E5F 6EC9 6F62 714C 749C 7687 7BC1 7C27 8352
8757 9051 968D 9EC3 55A4 5A93 6033 745D 8093 8CBA
93A4
D68C:1112-116C
532F 56DE 5EFB 5F8A 6062 6094 61F7 6666 6703 6A9C
6DEE 6FAE 7070 736A 7E6A 81BE 8334 86D4 8AA8 8CC4
4F6A 6803 6D04 6ED9 76D4 8A7C 8FF4 982E 9C60
D68D:1112-116C-11A8
5283 7372 5684
D6A1:1112-116C-11BC
5B96 6A6B 9404 6F8B 921C 9ECC
D6A8:1112-116D
54EE 5686 5B5D 6548 6585 66C9 689F 6D8D 6DC6 723B
80B4 9175 9A4D 509A 56C2 5D24 6BBD 7187 769B 8653
991A
D6C4:1112-116E
4FAF 5019 539A 540E 543C 5589 55C5 5E3F 5F8C 673D
7166 73DD 9005 543D 55A3 5795 5820 6DB8 7334 7BCC
8A61 8B43 9157 9931
D6C8:1112-116E-11AB
52DB 52F3 5864 58CE 7104 718F 71FB 85B0 8A13 6688
66DB 720B 736F 7E81 8477 9442
D6CC:1112-116E-11AF
6B3B
D6D9:1112-116E-11BC
85A8
D6E4:1112-116F-11AB
55A7 6684 714A 8431 70DC 8AE0 8AFC
D6FC:1112-1170
5349 5599 6BC1 71EC 8294 866B 867A
D718:1112-1171
5F59 5FBD 63EE 6689 7147 8AF1 8F1D 9EBE 649D 7FEC
D734:1112-1172
4F11 643A 70CB 7566 8667 54BB 64D5 96B3 9AF9 9D42
D73C:1112-1172-11AF
6064 8B4E 9DF8 5379
D749:1112-1172-11BC
5147 51F6 5308 6D36 80F8 605F 80F7
D751:1112-1173-11A8
9ED1
D754:1112-1173-11AB
6615 6B23 7098 75D5 5F88 5FFB 6380 712E 8A22 91C1
D758:1112-1173-11AF
5403 5C79 7D07 8A16 4EE1 6C54 7599 8FC4 9F55
D760:1112-1173-11B7
6B20 6B3D 6B46 5EDE
D761:1112-1173-11B8
5438 6070 6D3D 7FD5 564F 6B59 6F5D 7FD6
D765:1112-1173-11BC
8208
D76C:1112-1174
50D6 51DE 559C 566B 56CD 59EC 5B09 5E0C 6199 6198
6231 665E 66E6 7199 71B9 71BA 72A7 79A7 7A00 7FB2
54A5 550F 563B 6095 6232 66BF 6B37 71F9 7214 8C68
993C
D790:1112-1175-11AF
8A70 72B5 7E88 896D 9821 9EE0
__END__
=head1 NAME
Unicode::Collate::CJK::Korean - weighting CJK Unified Ideographs
for Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate;
use Unicode::Collate::CJK::Korean;
my $collator = Unicode::Collate->new(
overrideCJK => \&Unicode::Collate::CJK::Korean::weightKorean
);
=head1 DESCRIPTION
C<Unicode::Collate::CJK::Korean> provides C<weightKorean()>,
that is adequate for C<overrideCJK> of C<Unicode::Collate>
and makes tailoring of CJK Unified Ideographs in the order
of CLDR's Korean ordering.
=head1 SEE ALSO
=over 4
=item CLDR - Unicode Common Locale Data Repository
L<http://cldr.unicode.org/>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=item L<Unicode::Collate>
=item L<Unicode::Collate::Locale>
=back
=cut
Unicode/Collate/CJK/Pinyin.pm 0000644 00000317127 15033552504 0011745 0 ustar 00 package Unicode::Collate::CJK::Pinyin;
use 5.006;
use strict;
use warnings;
our $VERSION = '1.25';
my %u2p;
my $wt = 0x8000;
while (<DATA>) {
last if /^__END__/;
my @c = split;
for my $c (@c) {
next if !$c;
$u2p{hex($c)} = $wt if $c !~ /-/;
$wt++;
}
}
sub weightPinyin {
my $u = shift;
return exists $u2p{$u} ? $u2p{$u} : undef;
}
1;
__DATA__
FDD0-0041
963F 5475 9515
55C4
554A
54CE 54C0 5509 57C3 5A2D 6328 6B38 6EBE 55F3 92B0
953F 566F 9384
5540 6371 7691 6EB0 560A 6571 6573 769A 764C 9A03
6BD0 6639 5A3E 77EE 853C 8EB7 6FED 85F9 972D 9744
827E 4F0C 7231 7839 784B 9698 55CC 5867 5AD2 611B
788D 53C6 66A7 7477 95A1 50FE 58D2 5B21 61D3 8586
9D31 61DD 66D6 74A6 9932 76A7 77B9 99A4 7919 8B6A
8B7A 9440 9749
9C6B
5B89 4F92 5CD6 6849 6C28 5EB5 83F4 8C19 5A95 843B
844A 75F7 8164 9E4C 84ED 8A9D 978C 978D 76E6 8AF3
99A3 76EB 9D6A 97FD 9D95
73B5 557D 96F8 5111
57B5 4FFA 5535 57EF 94F5 968C 63DE 7F6F 92A8
72B4 5CB8 6309 6D1D 834C 6848 80FA 8C7B 5813 5A69
667B 6697 930C 95C7 9B9F 9EEF
80AE 9AAF
536C 5C87 6602 663B
678A 76CE 91A0
51F9 67EA 688E 8EEA 720A
6556 53AB 969E 55F7 55F8 5D85 5ED2 6EF6 7353 851C
9068 646E 71AC 7352 7488 78DD 7FF1 8071 87AF 8B37
8B38 7FFA 9CCC 93D6 9C32 9DD4 9F07
629D 82BA 62D7 8884 957A 5AAA 5ABC 8956
5C99 6277 5773 5787 5CB0 50B2 5961 5965 5967 5AEF
6160 9A9C 96A9 58BA 5DB4 61CA 6FB3 64D9 93CA 9A41
7FF6
FDD0-0042
516B 4EC8 6252 6733 7390 593F 5C9C 82AD 5CC7 67ED
75A4 54F5 5DFC 634C 7C91 7F93 8686 91DB 91DF 8C5D
9C83
53D0 72AE 629C 577A 59AD 62D4 8307 70A6 7679 80C8
83DD 8A59 8DCB 8EF7 98B0 9B43 58A2 9F25
628A 94AF 9200 9776
575D 5F1D 7238 57BB 8019 8DC1 9C85 9C8C 9B8A 8987
77F2 9738 58E9 705E 6B1B
5DF4 53ED 5427 7B06 7D26 7F62 9B5E 7F77
6300 63B0 64D8
767D
767E 4F70 67CF 6822 636D 74F8 7CA8 7D54 6446 64FA
896C
5E8D 62DD 8D25 62DC 6557 7308 7A17 86FD 7CBA 8D01
97DB
7AE1 85AD
6273 653D 73ED 822C 9881 6591 642C 6592 9812 7622
9CFB 878C 8929 764D 8FAC
962A 5742 5C85 6604 677F 7248 74EA 94A3 7C84 8228
9211 8742 9B6C 95C6
529E 534A 4F34 5762 59C5 6011 62CC 7ECA 67C8 79DA
6E74 7D46 9261 977D 8FA6 74E3
626E 8781
90A6 57B9 5E2E 6360 6886 6D5C 90AB 5E47 5E5A 7E0D
5E6B 97A4
7ED1 7D81 699C 7253 8180 9AC8
73A4 868C 508D 68D2 68D3 8C24 585D 6412 7A16 84A1
872F 78C5 9551 8255 8B17 938A
52F9 5305 5B62 82DE 67B9 80DE 7B23 7172 9F85 8554
8912 8943 95C1 9F59
7A87 5AD1 96F9 8584
5B9D 6009 9971 4FDD 9E28 5BB2 73E4 5821 5822 5AAC
8446 5BDA 98FD 8913 99C2 9CF5 7DE5 9D07 8CF2 5BF3
5BF6 974C
52FD 62A5 62B1 8C79 8DB5 94C7 83E2 86AB 888C 5831
924B 9C8D 9764 9AB2 66B4 9AF1 8663 9B91 5124 66D3
7206 5FC1 9464 9E14
4F68 85F5
9642 5351 676F 76C3 686E 60B2 63F9 6911 7986 7891
9E4E 9303 85E3 9D6F
5317 9273
8D1D 5B5B 72C8 8C9D 90B6 5907 6601 726C 82DD 80CC
90E5 94A1 4FFB 500D 6096 72FD 88AB 505D 5079 6896
73FC 9101 5099 50C3 60EB 7119 7432 8EF0 8F88 6102
789A 84D3 7295 8919 8A96 9781 9AB3 8F29 92C7 618A
7CD2 97B4 943E
5457 5504 7999
5954 6CCD 8D32 681F 7287 951B 931B
672C 82EF 5959 755A 7FC9 694D
574B 574C 5034 6379 6873 6E00 7B28 9029 64AA 7356
8F3D
4F3B 794A 595F 5D29 7D63 958D 50B0 5D6D 75ED 5623
7DB3
752D
57C4 57F2 7EF7 83F6 7423 742B 7E43 979B
6CF5 8FF8 902C 5874 750F 955A 8E66 93F0 882F
63FC
5C44 506A 6BF4 903C 6945 8C4D 8795 9D56 9CBE 939E
9C0F
8378 9F3B
5315 6BD4 5936 673C 4F4A 5421 59A3 6C98 7595 5F7C
67C0 79D5 4FFE 7B14 7C83 822D 555A 7B46 9119 7B84
805B 8C8F
5E01 5FC5 6BD5 95ED 4F56 5752 5E87 8BD0 90B2 59BC
602D 6036 6788 7540 82FE 54D4 67F2 6BD6 73CC 75AA
835C 965B 6BD9 72F4 7562 7B13 7C8A 8890 94CB 5A62
5EB3 655D 6890 8406 9587 9589 581B 5F3B 5F3C 610A
610E 6E62 7695 7B5A 8A56 8CB1 8CC1 8D51 55F6 5F43
6ED7 6EED 714F 75F9 75FA 7764 8177 84D6 84FD 870C
88E8 8DF8 924D 959F 98F6 5E63 5F0A 719A 7359 78A7
7B85 7B86 7DBC 853D 912A 999D 6F77 7358 7F7C 99DC
9AF2 58C1 5B16 5EE6 7BE6 7BF3 7E2A 859C 89F1 907F
9B85 6583 6FDE 81C2 8E55 9AC0 5970 74A7 9128 93CE
9946 7E74 895E 8963 97B8 97E0 9B53 8E83 8E84 9A46
8D14 9434 9DDD 9DE9 9F0A
5302 841E 5E64 8945 5B36
8FB9 8FBA 782D 7B3E 63D9 7335 7F16 7178 7251 7502
7BAF 7DE8 8759 9089 937D 9CCA 908A 97AD 9BFE 9BFF
7C69
8D2C 6241 7A86 533E 8CB6 60FC 8439 78A5 7A28 890A
7CC4 9D18 85CA
535E 5F01 5325 5FED 6283 6C73 6C74 82C4 91C6 53D8
73A3 4FBF 5909 662A 898D 5FA7 7F0F 904D 959E 8FA1
7DF6 8251 8FA7 8FA8 8FA9 8FAB 8FAE 8FAF 8B8A
5CC5 709E
706C 6753 6807 98D1 9A89 9ADF 6DF2 5F6A 730B 813F
98A9 5882 5E56 647D 6EEE 8508 98AE 9AA0 6A19 719B
8198 762D 78E6 9556 98D9 98DA 5126 98B7 700C 85E8
8B24 7202 81D5 8D06 93E2 7A6E 9573 98C6 98C7 98C8
9A43 9463 9A6B
8868 5A4A 88F1 8AD8 893E 9336 6AA6
4FF5 9CD4 9C3E
98CA
618B 87DE 9CD6 9C49 9F08 864C 9F9E
5225 522B 5487 8382 86C2 5FB6 8952 8E69
762A 765F
5F46
6C43 90A0 73A2 780F 5BBE 5F6C 68B9 50A7 658C 6915
6EE8 7F24 69DF 7478 8C69 8CD3 8CD4 9554 5110 6FD2
6FF1 8668 8C73 6AB3 74B8 7015 9726 7E7D 944C 986E
6448 6BA1 8191 9AE9 64EF 9B02 6BAF 81CF 9ACC 9B13
9AD5 9B22
6C1E 6FF5
51AB 4ECC 4ED2 6C37 51B0 5175 63A4
4E19 90B4 9643 6032 62A6 79C9 82EA 661E 663A 67C4
70B3 997C 772A 7A89 86C3 6452 7980 7A1F 9235 927C
9905 9920 979E
5E76 4E26 4F75 5E77 5EB0 5002 6824 75C5 7ADD 504B
50A1 5BCE 68C5 8A81 9BA9 9750
57AA 9786 92F2
7676 5E17 62E8 6CE2 7677 73BB 525D 5265 54F1 76CB
7835 889A 94B5 997D 7D34 7F3D 83E0 88B0 7886 9262
50E0 5D93 64A5 64AD 9911 9B81 8E73 9A4B 9C4D
4EE2 4F2F 72BB 8091 9A73 5E1B 72DB 74DD 82E9 4FBC
52C3 80C9 90E3 4EB3 632C 6D61 74DF 79E1 88AF 94B9
94C2 8116 8236 88B9 535A 6E24 8467 9E41 613D 640F
733C 9238 9251 998E 50F0 717F 7254 7B94 824A 8514
999B 99C1 8E23 92CD 9548 999E 99EE 894F 8C70 5697
61EA 7921 7C19 939B 993A 9D53 72A6 9AC6 9AC9 6B02
896E 7934 946E
8DDB 7BA5 7C38
5B79 6A97 7CEA 8B52 8617
535C 5575 8421 818A
5CEC 5EAF 900B 6661 923D 8AA7
9CEA 8F50 91AD
535F 8865 54FA 6355 55B8 88DC 9D4F
4E0D 5E03 4F48 5425 6B65 5498 6016 62AA 6B68 6B69
67E8 949A 52CF 57D4 57D7 6091 6357 8379 90E8 94B8
57E0 74FF 8500 8E04 90F6 9914 7BF0 9922 7C3F
FDD0-0043
5693 64E6 6503
7924
906A 56C3
5072 5A47 731C
624D 72B2 6750 8D22 8CA1 88C1 6EA8 7E94
6BDD 91C7 5038 554B 5BC0 5F69 63A1 776C 8DF4 7DB5
8E29
57F0 83DC 68CC 8521 7E29
53C2 53C3 53C4 98E1 9A96 53C5 55B0 6E4C 50AA 5B20
9910 9A42
6B8B 8695 60ED 6B98 615A 8745 6159 5B31 8836 883A
60E8 6701 6158 61AF 7A47 7BF8 9EEA 9EF2
707F 63BA 5B71 7CB2 647B 6FAF 8592 71E6 74A8 8B32
510F 7218
4ED3 4EFA 4F27 6CA7 82CD 9E27 5009 8231 5096 5D62
6EC4 734A 84BC 8259 87A5 9DAC
85CF 9476
8CF6
6FF8 7F49 6B0C
64A1 64CD 7CD9
66FA 66F9 5608 5D86 6F15 84F8 69FD 893F 825A 87AC
93EA
8278 8349 613A 61C6 9A32
808F 9135 8959
8279
518A 518C 4FA7 5395 607B 62FA 6D4B 6547 755F 5074
53A0 7B27 7CA3 8417 5EC1 60FB 6E2C 7B56 8434 7B5E
7B74 84DB 5884 7BA3 61A1 7C0E
5D7E
5C91 6D94 7B12 68A3
66FD 564C
5C42 66FE 5C64 5D92 7AF2 9A53
8E6D
53C9 6260 6748 809E 81FF 633F 505B 55CF 63D2 63F7
9987 929F 9538 8256 7580 9364 9937
79C5 579E 67E5 832C 8336 5D56 643D 7339 976B 69CE
8A67 5BDF 78B4 6AAB
8869 8E45 9572 9454
597C 6C4A 5C94 4F98 8BE7 59F9 5DEE 7D01 8A6B
8286 62C6 9497 91F5
4FAA 67F4 8C7A 7961 558D 5115 9F5C
831D
867F 8883 8A0D 7625 8806 56C6
8FBF 89C7 68B4 6400 8998 88E7 9246 92D3 5E68 895C
6519
5A75 8C17 68CE 6E79 7985 998B 7158 7F20 50DD 7351
8749 8A97 92CB 5103 5B0B 5EDB 6F79 6F7A 7DFE 6FB6
78DB 79AA 6BDA 913D 9561 700D 87EC 5133 5296 87FE
9141 56B5 5DC9 703A 6B03 7E8F 7E92 8E94 9575 826C
8B92 9471 995E
4EA7 522C 65F5 4E33 65BA 6D50 5257 8C04 5574 7522
7523 94F2 9610 8487 5277 5D7C 644C 6EFB 563D 5E5D
8546 8AC2 95B3 9AA3 71C0 7C05 5181 7E5F 8B42 8FB4
93DF 95E1 56C5 705B 8B87
5FCF 785F 6472 61F4 98A4 61FA 7FBC 97C2 986B
58E5
4F25 660C 5000 5A3C 6DD0 7316 83D6 960A 667F 7429
88EE 9520 9329 95B6 9CB3 9BE7 9F1A
4EE7 514F 80A0 82CC 9578 5C1D 507F 5E38 5F9C 74FA
8407 751E 8178 5617 5872 5AE6 747A 8193 92FF 511F
5690 9CBF 93DB 9C68
5382 573A 6636 60DD 5834 50D8 53B0 5EE0 6C05 92F9
6005 739A 7545 5021 9B2F 5531 60B5 713B 7452 66A2
757C 8AAF 97D4
655E 6919 87D0
6284 5F28 600A 6B29 949E 8A2C 712F 8D85 9214 52E6
724A 6641 5DE2 5DE3 671D 911B 9F0C 6F05 5632 6A14
6F6E 7AB2 7F7A 8F48 9F02 8B3F
5435 7092 7727 7123 717C 9EA8 5DD0
4EE6 4EEF 8016 89D8
8F66 4F21 8ECA 4FE5 7817 5513 8397 7868 86FC
626F 5056 64A6
5C6E 5F7B 577C 8FE0 70E2 8045 63A3 7869 9819 5FB9
64A4 6F88 52F6 77AE 7221
62BB 90F4 6375 741B 55D4 7D9D 778B 8AC3 8CDD 7E1D
8B13
5C18 81E3 5FF1 6C88 6C89 8FB0 9648 8FE7 831E 5BB8
8380 8390 9673 6550 8A26 8C0C 8ED9 6116 63E8 9202
7141 852F 5875 6A04 760E 9703 87B4 8AF6 85BC 9E8E
66DF 9DD0
8DBB 7876 789C 588B 5926 78E3 8E38 9356 8D02 91A6
886C 75A2 9F80 8D81 8D82 6987 9F53 512C 9F54 512D
56AB 8C36 6AEC 896F 8B96
70E5 6668
9637 6CDF 67FD 722F 68E6 6D7E 7424 79F0 5041 86CF
6E5E 725A 8D6A 50DC 6186 645A 7A31 9757 6490 6491
7DFD 6A55 77A0 8D6C 9833 6A89 7AC0 7A6A 87F6 93F3
93FF 9953
4E1E 6210 673E 5448 627F 67A8 8BDA 90D5 4E57 57CE
5A0D 5BAC 5CF8 6D06 837F 4E58 57D5 6330 665F 73F9
8100 6381 73F5 7880 7A9A 812D 94D6 5818 60E9 68D6
6909 7A0B 7B6C 7D7E 88CE 584D 5856 6E97 8AA0 757B
9172 92EE 6195 6F82 6F84 6A59 6A99 7013 61F2 9A2C
4FB1 5F8E 609C 901E 9A8B 5EB1 7748 9A01
79E4
9BCE
5403 4F99 54E7 5F68 80F5 86A9 9E31 74FB 7735 7B1E
55AB 8A35 55E4 5AB8 645B 75F4 7D7A 5644 779D 8ABA
87AD 9D1F 7661 9B51 9F5D 5F72 9ED0
5F1B 6C60 9A70 8FDF 577B 5CBB 830C 6301 7AFE 834E
6B6D 86B3 8D7F 7B42 8CBE 9045 8D8D 905F 99B3 7B8E
5880 6F26 8E1F 9072 7BEA 8B18
5C3A 53FA 544E 4F88 5376 9F7F 5791 80E3 6065 7C8E
803B 8687 88B3 6B3C 6B6F 88B2 88ED 9279 892B 9F52
5F73 53F1 65A5 6758 707B 8D64 996C 62B6 52C5 605C
70BD 52D1 7FC4 7FC5 6555 70FE 75D3 557B 6E41 7873
98ED 50BA 75F8 815F 8DEE 9253 96F4 618F 7608 7FE4
906B 9290 6157 761B 7FE8 71BE 61D8 8DA9 994E 9D92
9DD8
599B 9EB6
5145 51B2 5FE1 6C96 833A 6D7A 73EB 7FC0 8202 5603
644F 5FB8 6183 61A7 885D 7F7F 825F 8E56
866B 5D07 5D08 9680 8908 7DDF 8769 87F2 721E
5BA0 57EB 5BF5
94F3 63F0 9283
62BD 5A64 640A 7633 7BD8 72A8 72AB
4EC7 601E 4FE6 5E31 6826 60C6 7D2C 7EF8 83D7 6906
7574 7D52 6101 7697 7A20 7B79 88EF 9167 7DA2 8E0C
5114 96D4 568B 5B26 5E6C 61E4 85B5 71FD 96E0 7587
7C4C 8E8A 91BB 8B8E 8B90
4E11 4E12 541C 677B 677D 4FB4 5062 7785 919C 77C1
9B57
81ED 81F0 905A 6BA0
916C
51FA 5C80 521D 6474 6A17 8C99 9F63
520D 9664 82BB 53A8 6EC1 84A2 8C60 9504 5AB0 8021
84AD 870D 8D8E 924F 96CF 7293 854F 5EDA 7BE8 92E4
6A71 5E6E 6AC9 85F8 8E87 96DB 6AE5 8E70 9DB5 8E95
51E6 6775 7840 6918 50A8 696E 891A 6FCB 5132 6A9A
790E 9F6D 9E00 9F7C
4E8D 5904 7ACC 6035 62C0 7ECC 8C56 67F7 6B2A 7AD0
4FF6 654A 755C 57F1 73FF 7D40 8655 5097 7421 9110
6410 6EC0 84EB 89E6 8E00 95A6 510A 563C 8AD4 61B7
65B6 6B5C 81C5 9EDC 89F8 77D7
695A 698B 6A7B 74B4 87F5
6B3B 6B58
63E3 640B
8197
555C 562C 81AA 8E39
5DDB 5DDD 6C1A 7A7F 5276 732D 744F
4F1D 4F20 8221 8229 8239 570C 9044 50B3 693D 66B7
7BC5 8F32
821B 8348 5598 6B42 50E2 8E33
6C4C 4E32 7394 948F 91E7 8CD7 9DA8
5205 75AE 7A93 7A97 724E 6450 7255 7621 7ABB
5E8A 7240 5647 5E62
95EF 50B8 6464 78E2 95D6
521B 6006 5231 524F 5259 51D4 5275 6134
5439 708A
5782 5015 57C0 9672 6376 83D9 6425 68F0 690E 8144
69CC 9524 7BA0 9318 939A 9840
9FA1
65FE 6776 6625 8405 583E 5A8B 6699 693F 7443 7BBA
877D 6A41 8F34 81A5 6AC4 9C06 9D9E
7EAF 9659 5507 6D71 7D14 83BC 6DF3 8123 6E7B 7289
6EE3 8493 6F18 84F4 9187 9195 931E 9BD9
5046 8436 60F7 7776 8CF0 8822
9E51 9D89
9034 8E14 6233
8FB6 8FB5 5A15 5A16 5A7C 60D9 6DB0 7EF0 814F 8F8D
916B 7DBD 8DA0 8F1F 9F8A 64C9 78ED 7E5B 6B60 56BD
9F6A 9461
5472 75B5 8D7C 8D80 5068 8DD0 7E12 9AB4 9ACA 8800
9F79
8BCD 73C1 5790 67CC 7960 8308 8328 5832 74F7 8A5E
8F9D 6148 7506 8F9E 78C1 96CC 9E5A 7CCD 8FA4 98FA
9908 5B28 6FE8 858B 9D1C 7920 8FAD 9DBF 9DC0
6B64 4F4C 6CDA 73BC 7689 7D2A 9B86
673F 6B21 4F3A 4F7D 523A 523E 5E9B 8326 6828 83BF
7D58 86D3 8D50 8786 8CDC
5306 56EA 56F1 82C1 5FE9 679E 6031 60A4 68C7 7127
8471 6F17 8061 84EF 8525 9AA2 66B0 6A05 6A2C 719C
747D 7481 7DEB 8066 806A 71EA 779B 7BF5 8070 87CC
936F 7E71 93E6 9A18 9A44
4ECE 4E1B 5F93 5A43 5B6E 5F96 5F9E 60B0 6DD9 742E
6152 6F0E 6F40 6F68 8AB4 8CE8 8CE9 6A37 85C2 53E2
7047 6B09 721C
6181 8B25
8310
51D1 6E4A 8160 8F8F 8F33
7C97 89D5 9E81 9E84 9EA4
5F82 6B82
4FC3 731D 8128 9162 7604 851F 8A8E 8D97 5648 61B1
8E27 918B 762F 7C07 7E2C 8E59 9F00 8E74 8E75 9863
6C46 64BA 92D1 9569 8E7F 651B 8EA5 9479
6AD5 5DD1 6B11 7A73
7A9C 6BA9 71B6 7BE1 7C12 7AC4 7228
5D14 50AC 51D7 7F1E 5894 5D89 615B 6467 69B1 7355
69EF 78EA 7E17 93D9
6F3C 7480 8DA1 76A0
4F1C 5FF0 75A9 5005 7C8B 7D23 7FC6 8103 8106 5550
555B 60B4 6DEC 8403 6BF3 7120 813A 7601 7CB9 7DB7
7FE0 81B5 81AC 6FE2 7AC1 894A 9847 81CE
4E7C
90A8 6751 76B4 8E06 6F8A 7AF4
5B58 4F9F 62F5
520C 5FD6
5BF8 540B 7C7F
6413 7473 9073 78CB 64AE 8E49 919D
8658 5D6F 5D73 75E4 7749 77EC 84AB 8516 9E7E 9142
9E7A 8EA6
811E
5249 5252 539D 590E 632B 839D 83A1 63AA 902A 65AE
68E4 9509 84CC 9519 6B75 92BC 932F
FDD0-0044
5491 54D2 8037 8345 7B1A 55D2 642D 8921 5660 6498
939D
8FBE 8FD6 547E 59B2 601B 6C93 709F 7F8D 8359 7557
5273 5312 7563 7B2A 9039 7B54 8A5A 9054 9618 977C
8598 9791 87FD 9389 8E82 943D 97C3 9F96 9F98
6253
5927 6C4F 7714
57AF 7629 58B6 71F5 7E68
5446 5454 7343 61DB
6B79 902E 50A3
4EE3 8F6A 5788 5CB1 5E12 7519 7ED0 8FE8 9A80 5E26
5F85 6020 67CB 6B86 73B3 8D37 5E2F 8ED1 57ED 5E36
7D3F 888B 8EDA 8CB8 8EE9 7447 5ED7 53C7 66C3 7DFF
9D0F 6234 825C 9EDB 7C24 8E5B 703B 9734 8976 9EF1
9746
9B98
4E39 5989 5355 62C5 5358 7708 7803 803C 803D 90F8
8043 8EAD 55AE 5A85 6B9A 7605 5330 7BAA 891D 9132
9815 510B 52EF 64D4 6BAB 7514 7649 894C 7C1E 8078
4F14 5210 628C 73AC 74ED 80C6 8874 75B8 7D1E 63B8
8D55 4EB6 64A2 64A3 6FB8 9ED5 81BD 9EEE
65E6 4F46 5E0E 6C8A 72DA 8BDE 67E6 758D 5556 5557
5F39 60EE 6DE1 840F 86CB 557F 5F3E 6C2E 8145 8711
89DB 7A9E 8A95 50E4 5649 99BE 9AE7 563E 5F48 619A
61BA 66BA 6FB9 79AB 84DE 99F3 9D20 765A 56AA 7E75
8D09 972E 994F
6CF9
5F53 73F0 88C6 7B5C 7576 5679 6FA2 74AB 8960 7C39
8261 87F7
6321 515A 8C20 64CB 8B61 9EE8 6529 7059 6B13 8B9C
6C39 51FC 5735 5B95 7800 57B1 8361 6863 83EA 5A78
6113 74FD 903F 5D63 96FC 6F52 78AD 5105 778A 8569
8DA4 58CB 6A94 7497 76EA 7911 7C1C 862F 95E3
94DB 943A
5200 5202 53E8 5FC9 6737 6C18 8220 91D6 9C7D 9B5B
636F
5BFC 5C9B 5CF6 6363 7977 7982 6417 969D 5D8B 5D8C
5C0E 96AF 58D4 5DB9 64E3 8E48 79B1
5230 5012 60BC 7118 76D7 83FF 76DC 9053 7A32 7B8C
7FE2 5675 7A3B 885C 6AA4 885F 71FE 7FFF 8EC7 74D9
7E9B
5C76 9666 6921 69DD
561A
6074 6DC2 60EA 68CF 951D 5FB3 5FB7 9340
5730 7684 5F97 8126
6265 627D
706F 767B 8C4B 5654 5B01 71C8 7492 7AF3 7C26 89B4
8E6C
6729 7B49 6225
9093 51F3 9127 96A5 58B1 5D9D 77AA 78F4 956B 6AC8
9419
8260
6C10 4EFE 4F4E 5943 5F7D 889B 7F9D 9684 5824 8D86
6EF4 6A00 955D 78FE 9349 97AE
5EF8 72C4 7C74 82D6 8FEA 5519 654C 6DA4 837B 6891
7B1B 89CC 976E 6ECC 99B0 9AE2 5600 5AE1 7FDF 850B
8510 9814 6575 7BF4 5681 85E1 8C74 8E62 9B04 93D1
7CF4 89BF 9E10
538E 5758 8BCB 90B8 963A 5467 5E95 5F24 62B5 62DE
830B 67E2 7274 7825 57DE 638B 83E7 89DD 8A46 8EE7
805C 9AB6
5754 5F1F 65F3 6755 7393 601F 4FE4 5E1D 57CA 5A23
9012 9013 5059 5547 5572 688A 710D 73F6 7731 7976
7B2C 83C2 8C1B 91F1 5A82 68E3 6E27 7747 7F14 8482
50C0 7998 8163 905E 926A 5891 58AC 6455 78B2 8515
8743 9070 6178 750B 7DE0 5DB3 8AE6 8E36 87AE
9BF3
55F2
7538 6541 6382 508E 53A7 5D6E 6EC7 69C7 69D9 7628
98A0 8E4E 5DC5 985A 985B 766B 5DD3 5DD4 6527 7672
9F7B
5178 594C 70B9 5A70 7320 655F 8DD5 7898 84A7 8547
8E2E 9EDE 56B8
7535 4F43 963D 576B 5E97 57AB 6242 73B7 94BF 5A5D
60E6 6DC0 5960 7414 6BBF 8714 96FB 588A 58C2 6A42
6A5D 6FB1 975B 765C 7C1F 9A54
6923
5201 53FC 6C48 866D 51CB 595D 5F34 5F6B 86C1 7431
8C82 7889 9CED 6BA6 7797 96D5 9B89 9CB7 9F26 9BDB
9D70
625A 5C4C
5F14 4F04 540A 9493 7A8E 8A0B 8C03 6389 91E3 94DE
94EB 7AE8 84E7 92B1 96FF 9B61 8ABF 7639 7AB5 92FD
85CB 9443
7C13
7239 8DCC 893A
82F5 8FED 57A4 5CCC 604E 6315 6633 7ED6 80C5 74DE
7723 621C 8C0D 558B 581E 60F5 63F2 7573 7D70 800B
81F7 8A44 8D83 957B 53E0 6B9C 7243 7252 5D7D 789F
8728 890B 8253 8776 8ADC 8E40 9CBD 66E1 7589 9C08
758A 6C0E
54CB 800A 7730
5E49 7582
4E01 4EC3 53EE 5E04 738E 7594 76EF 9489 8035 8670
914A 91D8 976A
5975 9876 9802 9F0E 5D7F 9F11 6FCE 85A1 9424
8BA2 5FCA 9964 77F4 5B9A 8A02 98E3 5576 94E4 6917
815A 7887 952D 78A0 874A 92CC 9320 78F8 9841
8423 8062
4E1F 4E22 94E5 92A9
4E1C 51AC 549A 5CBD 6771 82F3 6638 6C21 5032 9E2B
57EC 5A3B 5D20 5D2C 6DB7 7B17 83C4 5F9A 6C2D 8740
9D24 9F15 9BDF 9D87
8463 58A5 5B1E 61C2 7BBD 856B 8ACC
52A8 51BB 4F97 578C 59DB 5CD2 606B 630F 680B 6D1E
80E8 8FF5 51CD 6219 80F4 52D5 7850 68DF 6E69 7D67
8156 50CD 99E7 9718
9B97 9DAB
543A 5517 90FD 515C 5160 8538 6A77 7BFC
9627 6296 6793 67A1 9661 551E 86AA 9204
6597 8C46 90D6 6D62 8373 9017 997E 9B25 68AA 6BED
8130 9158 75D8 9597 7AA6 9B26 9916 65A3 95D8 7AC7
9B2A 9B2D 9B2C
4E67 8254
53BE 5262 9607 561F 7763 918F 95CD
6BD2 72EC 6D9C 8BFB 6E0E 691F 724D 728A 78A1 88FB
8AAD 8773 7368 9316 51DF 5335 5B3B 7006 6ADD 6BB0
7258 72A2 74C4 76BE 9A33 9EE9 8B80 8C44 8D15 97E3
9AD1 945F 97C7 97E5 9EF7 8B9F
7B03 5835 5E3E 743D 8D4C 7779 89A9 8CED 7BE4
828F 5992 675C 809A 59AC 5EA6 8370 79FA 6E21 976F
9540 8799 6BAC 934D 7C35 8827 8839
8011 5073 526C 5A8F 7AEF 890D 9374
77ED
6BB5 65AD 5845 7F0E 846E 6934 7145 7456 8176 78AB
953B 7DDE 6BC8 7C16 935B 65B7 8E96 7C6A
8968
5796 5806 5860 5D5F 75FD 78D3 9D2D 941C
9827
961F 5BF9 514A 514C 5151 5BFE 794B 603C 966E 968A
7893 7D90 5C0D 619E 619D 6FE7 85B1 9566 61DF 7029
8B48 9413
5428 60C7 6566 8733 58A9 58AA 64B4 7364 5678 6489
6A54 729C 7905 8E72 8E7E 9A50
76F9 8DB8 8E89
4F05 56E4 5E89 6C8C 7096 76FE 7818 9007 949D 987F
9041 920D 696F 9813 906F 6F61 71C9 8E32
78B7
591A 591B 5484 54C6 7553 525F 5D1C 6387 6560 6BF2
88F0 5689
593A 94CE 526B 6553 655A 55A5 60B3 656A 75E5 922C
596A 51D9 8E31 9BB5 9438
6736 54DA 579B 579C 6305 6306 57F5 7F0D 692F 8D93
8EB1 8EB2 619C 7D9E 4EB8 937A 8EC3 56B2 5972
5234 5241 964A 964F 9973 5C2E 67C1 67EE 70A8 6857
5815 8235 60F0 8DE2 8DE5 8DFA 98FF 58AE 5D9E 58AF
9D7D
6735 67A4
FDD0-0045
59B8 59BF 5A3F 5A40 5C59 94B6 75FE
8BB9 542A 56EE 8FD7 4FC4 5A25 5CE8 5CE9 6D90 83AA
73F4 8A1B 7692 774B 920B 9507 9E45 86FE 78C0 8A90
981F 989D 9B64 96B2 984D 9D5D 9D5E 8B4C 9C2A
6799 7808 980B 5641 9A00
5384 5C75 6239 6B7A 5C8B 9628 5443 627C 82CA 9638
545D 7810 8F6D 54A2 54B9 57A9 59F6 5CC9 530E 6076
7828 8685 997F 5054 537E 580A 60AA 63A0 7565 7846
8C14 8EDB 9102 960F 582E 5D3F 60E1 6115 6E42 843C
8C5F 8EF6 904C 904F 922A 5EC5 6424 6439 7427 816D
8A7B 50EB 8741 9537 9B65 9E57 855A 981E 989A 9913
5669 89A8 8AE4 95BC 9929 8C96 9354 9CC4 6B5E 984E
7918 6AEE 9C10 9D9A 8B8D 9F43 9469 9F76 9C77
64DC 9D48
8BF6 8A92
5940 6069 84BD 717E
5CCE
6441
97A5
513F 800C 5150 4F95 5152 9651 5CCF 6D0F 834B 682D
80F9 5532 88BB 9E38 7CAB 804F 8F00 9C95 96AD 9AF5
9B9E 9D2F 8F5C
53BC 5C12 5C13 5C14 8033 8FE9 6D31 9975 682E 6BE6
73E5 94D2 723E 990C 99EC 85BE 9087 8DB0
4E8C 5F0D 5F10 4F74 5235 54A1 8D30 8CAE 8848 8CB3
8A80 927A 6A32
FDD0-0046
53D1 6CB7 767A 50A0 767C 9166 5F42 91B1
4E4F 4F10 59C2 57A1 6D4C 75BA 7F5A 8337 9600 6830
781D 7B4F 7782 7F70 95A5 7F78 6A43 85C5
4F71 6CD5 704B
73D0 743A 9AEA 855F 9AEE
9345
5E06 8A09 756A 52EB 5643 5B0F 5E61 61A3 8543 65D9
65DB 7E59 7FFB 85E9 8F53 98BF 7C53 98DC 9C55
51E1 51E2 51E3 5FDB 674B 67C9 77FE 7C75 9492 70E6
8227 7B32 68E5 6E22 7169 7DD0 58A6 6A0A 6A4E 71D4
74A0 81B0 85A0 7E41 894E 7FB3 8E6F 702A 703F 792C
8629 9407 9422 881C 9DED
53CD 6255 8FD4 91E9
6C3E 72AF 597F 6C4E 6CDB 996D 8303 8D29 7548 8ED3
5A4F 68B5 76D5 7B35 8CA9 8EEC 98EF 98F0 6EFC 5B0E
7BC4
8224
531A 65B9 90A1 6C78 82B3 678B 7265 94AB 6DD3 8684
9201 9D0B
9632 59A8 623F 80AA 57C5 9C82 9B74 9C1F
4EFF 8BBF 5F77 7EBA 6609 6618 74EC 7706 5023 65CA
7D21 822B 8A2A 9AE3 9DAD
653E 8DBD
574A 580F 933A
98DE 5983 975E 98DB 5561 5A53 6E04 7EEF 83F2 6249
7306 975F 88F6 7DCB 871A 970F 9CB1 9925 99A1 9A11
9A1B 98DD
80A5 6DDD 8153 8730 87E6
670F 532A 8BFD 595C 60B1 6590 68D0 69A7 7FE1 855C
8AB9 7BDA
5420 82BE 5E9F 676E 6CB8 72D2 80BA 6632 80C7 8D39
4FF7 5255 539E 75BF 966B 5C5D 8409 5EC3 8CBB 75F1
9544 5EE2 66CA 7648 9F23 6FF7 6AE0 9BE1 9428 9745
5A54 6683
5206 5429 5E09 7EB7 82AC 6610 6C1B 54DB 886F 517A
7D1B 7FC2 515D 68FB 8A1C 915A 9216 96F0 6706 71D3
9934 9959
575F 59A2 5C8E 6C7E 670C 678C 7083 80A6 7F92 86A0
86A1 68A4 68FC 711A 84B6 999A 96AB 58B3 5E69 6FC6
8561 9B75 6A68 71CC 8C6E 9F22 7FB5 9F16 8C76 8F52
943C 99A9 9EC2
7C89 9EFA
4EFD 5F05 594B 5FFF 79CE 507E 6124 7CAA 50E8 61A4
596E 81B9 7CDE 9CBC 7035 9C5D
7AD5 8EAE
4E30 98CE 4EF9 51E8 51EC 59A6 6CA3 6CA8 51EE 67AB
5C01 75AF 76FD 781C 98A8 5CEF 5CF0 5051 687B 70FD
5D36 7326 8451 950B 6953 728E 8702 760B 78B8 50FC
7BC8 9137 92D2 6A92 95CF 8C50 93E0 9146 5BF7 7043
8634 973B 882D 974A 98CC 9EB7
51AF 5906 6340 6D72 9022 5838 99AE 6453 6F28 7D98
8242
8BBD 8982 552A 8AF7
51E4 5949 752E 4FF8 6E57 7128 7148 7F1D 8D57 9CEF
9CF3 9D0C 7E2B 8CF5
7412 6E84 93BD 8615
8985
4ECF 5772
68BB
7D11 88E6
7F36 5426 599A 7F39 7F3B 6B95 96EC 9D00
4F15 909E 544B 598B 59C7 739E 80A4 6024 67CE 7806
8342 886D 57BA 5A10 5C03 8374 65C9 7D28 8DBA 9EB8
75E1 7A03 8DD7 9207 7B5F 7D92 911C 5B75 8C67 6577
819A 9CFA 9EA9 7CD0 9EAC 9EB1 61EF
4E40 5DFF 5F17 4F0F 51EB 7536 4F5B 51B9 521C 5B5A
6276 8299 82A3 5488 5CAA 5F7F 602B 62C2 670D 678E
6CED 7EC2 7ECB 82FB 8300 4FD8 5798 67EB 6C1F 6D11
70A5 73B8 7549 7550 7953 7F58 832F 90DB 97E8 54F9
683F 6D6E 7829 83A9 86A8 5310 6874 6DAA 70F0 7408
7B26 7B30 7D31 7D3C 7FC7 8274 83D4 8659 5E45 68F4
7D65 7F66 844D 798F 7CB0 7D8D 8240 8709 8F90 9258
925C 98AB 9CE7 6991 7A2A 7B99 97CD 5E5E 6F93 8760
9AF4 9D14 8AE8 8E3E 8F3B 9B84 7641 8946 9EFB 9D69
9D9D
5452 629A 4E76 5E9C 5F23 62CA 65A7 4FCC 4FDB 80D5
90D9 9CEC 4FEF 91DC 91E1 636C 8F85 7124 76D9 8151
6ECF 8705 8150 8F14 5638 64A8 64AB 982B 9B34 7C20
9EFC
961D 7236 8BA3 4ED8 5987 8D1F 9644 577F 7ACE 961C
9A78 590D 5CCA 7954 8A03 8CA0 8D74 86A5 889D 965A
5069 51A8 526F 5A66 86B9 5A8D 5BCC 5FA9 79FF 842F
86D7 8A42 8D4B 5711 6931 7F1A 8179 9C8B 8907 8914
8D59 7DEE 8567 875C 876E 8CE6 99D9 5B14 7E1B 8F39
9B92 8CFB 9351 9362 9CC6 8986 99A5 9C12
592B 752B 5490 88B1 915C 5085 6928 8984 79A3 9BB2
FDD0-0047
65EE 5477 560E 5620
9486 5C1C 5676 9337
5C15 738D
5C2C 9B40
4F85 8BE5 90C2 9654 5793 59DF 5CD0 8344 6650 8D45
7561 7974 7D6F 8A72 8C65 8CC5
5FCB 6539 7D60
4E10 4E62 5303 5304 9623 675A 9499 76D6 6461 6E89
8462 9223 9691 6224 6982 69E9 84CB 8CCC 6F11 69EA
74C2
7518 5FD3 8289 8FC0 653C 6746 7395 809D 5769 6CD4
77F8 82F7 4E79 67D1 7AFF 75B3 9150 4E7E 7C93 4E81
51F2 5C32 5C34 7B78 6F27 9CF1 5C36 5C37 9B50
4EE0 625E 76AF 79C6 8866 8D76 6562 687F 7B34 7A08
611F 6F89 8D95 6A44 64C0 7C33 9C14 9CE1 9C64
5E72 65F0 6C75 76F0 7EC0 501D 51CE 6DE6 7D3A 8A4C
9AAD 5E79 69A6 6A8A 8D11 8D63 8D1B 7068
5188 7F53 51AE 521A 6760 7EB2 809B 5CA1 7268 7598
77FC 7F38 94A2 525B 7F61 5808 6386 91ED 68E1 7285
583D 7DB1 7F41 92FC 93A0
5C97 5D17 6E2F
7135 7B7B 69D3 6205 6206
768B 7F94 7F99 9AD8 7690 9AD9 81EF 6EDC 69D4 777E
818F 69F9 6A70 7BD9 7CD5 993B 6ADC 9DCE 9F1B 9DF1
5930 6772 83D2 641E 7F1F 66A0 69C0 69C1 7A3E 7A3F
9550 7E1E 85C1 6ABA 85F3
543F 544A 52C2 53DD 8BF0 90DC 796E 7970 9506 7170
7B76 799E 8AA5 92EF
97DF
6208 4EE1 572A 72B5 7EA5 6213 8090 726B 7599 54AF
7271 54E5 80F3 88BC 9E3D 5272 6401 6ED2 6228 6B4C
9D10 9D1A 64F1 8B0C 9D3F 93B6
5444 4F6E 530C 630C 8316 9601 9769 654B 683C 9B32
6105 81F5 845B 86D2 88D3 9694 55DD 5865 6EC6 89E1
643F 69C5 8188 95A3 95A4 7366 9549 9788 97D0 9ABC
8AFD 8F35 9BAF 97DA 8F55 97B7 9A14
54FF 8238
4E2A 5404 867C 500B 784C 94EC 55F0 7B87
5F41 6ACA
7ED9 7D66
6839 8DDF
54CF
826E
4E98 4E99 831B 63EF
522F 5E9A 754A 6D6D 8015 83EE 6404 713F 7D5A 8D53
9E52 7DEA 7E06 7FAE 8CE1 7FB9 9D8A
90E0 54FD 57C2 5CFA 632D 7EE0 803F 8384 6897 7D86
9CA0 9ABE 9BC1
66F4 5829 6685
63B6 6929
5DE5 5F13 516C 53B7 529F 653B 675B 4F9B 739C 7CFC
80B1 5BAB 5BAE 606D 8EAC 9F9A 5311 5868 5E4A 6129
89E5 8EB3 7195 78BD 9AF8 89F5 9F8F 9F94
5EFE 5DE9 6C5E 62F1 62F2 6831 73D9 8F01 92DB 978F
5171 8D21 7FBE 551D 8CA2 83BB
86A3 6150
52FE 4F5D 6C9F 94A9 88A7 7F11 920E 6E9D 9264 7DF1
8920 7BDD 97B2 97DD
82B6 5CA3 72D7 82DF 67B8 73BD 8007 8009 7B31 8008
86BC 8C7F
5778 6784 8BDF 8D2D 57A2 59E4 8329 5193 591F 5920
8A3D 5ABE 5F40 6406 8A6C 9058 96CA 69CB 7179 89CF
6480 89AF 8CFC
4F30 5471 59D1 5B64 6CBD 6CD2 82FD 67E7 8F71 5502
7F5B 9E2A 7B1F 83F0 86C4 89DA 8EF1 8EF2 8F9C 9164
9232 7B8D 7B9B 5AF4 6A6D 9B95 9D23
9DBB
5903 53E4 6262 6C69 8BC2 8C37 80A1 726F 9AA8 5503
7F5F 7F96 94B4 5552 6DC8 8135 86CA 86CC 5C33 6132
84C7 8A41 9989 9E44 69BE 6BC2 9237 9F13 9F14 560F
6996 76B7 9E58 7A40 7E0E 7CD3 85A3 6FF2 76BC 81CC
8F42 9936 7014 76EC 77BD 8831
56FA 6545 51C5 987E 580C 5D13 5D2E 688F 727F 68DD
797B 96C7 75FC 7A12 9522 50F1 932E 9CB4 9BDD 9867
5495 5CE0 9027 50A6 83C7 7BD0
74DC 522E 80CD 681D 9E39 6B44 7171 8052 8D8F 5280
7DFA 8E3B 92BD 98B3 9D30 9A27
518E 53E7 5250 526E 5BE1
5366 576C 8BD6 6302 5569 639B 7F63 7D53 7F6B 8902
8A7F
98AA
4E56 63B4 6451
62D0 67B4 67FA 7B89
592C 53CF 602A 6060
5173 89C2 5B98 51A0 898C 500C 68FA 8484 7AA4 95A2
761D 764F 89B3 95D7 9CCF 95DC 9C25 89C0 9C5E
839E 9986 742F 75EF 7B66 7BA1 8F28 8218 9327 9928
9CE4
6BCC 4E31 8D2F 6CF4 60BA 60EF 63BC 6DAB 8CAB 60B9
797C 6163 645C 6F45 9066 6A0C 76E5 7F46 96DA 93C6
704C 721F 74D8 77D4 7936 9E73 7F50 9475 9C79 9E1B
5149 706E 4F8A 7097 709B 54A3 5799 59EF 6D38 832A
6844 70E1 80F1 50D9 8F04 92A7 9EC6
5E7F 5E83 72B7 5EE3 7377 81E9
4FC7 73D6 901B 81E6 6497
709A 6B1F
5F52 572D 59AB 9F9F 89C4 90BD 7688 8325 95FA 5E30
73EA 80FF 4E80 5080 7845 7A90 88BF 898F 5AAF 5EC6
691D 7470 90CC 5AE2 646B 95A8 9C91 5B00 69FB 69FC
879D 749D 81AD 9BAD 9F9C 5DC2 6B78 9B36 9A29 74CC
9B39 6AF7
5B84 6C3F 6739 8F68 5E8B 4F79 5326 8BE1 9652 579D
59FD 6051 6531 7678 8ECC 9B3C 5EAA 796A 532D 6677
6E40 86EB 89E4 8A6D 53AC 77A1 7C0B 87E1
6530 523D 523F 660B 67DC 7094 8D35 6842 6867 7324
7B40 8CB4 84D5 8DEA 5331 528A 528C 5DA1 648C 69F6
6A9C 77B6 79AC 7C02 6AC3 7650 8958 9CDC 97BC 9C56
9C65
6922
4E28 886E 60C3 7EF2 889E 88AC 8F8A 6EDA 84D8 6EFE
7DC4 8509 78D9 8F25 9CA7 9B8C 9BC0
68CD 7754 7774 74AD 8B34
5459 54BC 57DA 90ED 581D 5D1E 921B 9505 588E 7611
5613 5F49 6FC4 8748 934B 5F4D 87C8
56EF 56F6 56FB 56FD 5700 570B 5E3C 8158 5E57 6156
6F0D 805D 852E 8195 8662 9998
679C 60C8 6DC9 7313 83D3 9983 6901 69E8 7CBF 7DB6
873E 88F9 8F20 9301 991C 9439
8FC7 904E
556F
FDD0-0048
54C8 94EA
86E4
5964
4E37
548D 54B3 55E8
8FD8 5B69 9826 9AB8 9084
6D77 80F2 70F8 917C 91A2
4EA5 598E 9A87 5BB3 6C26 55D0 9900 99ED 995A
5870 56A1
4F44 70B6 9878 86B6 9163 9807 5AE8 8C3D 61A8 99A0
6B5B 9F3E
9097 542B 90AF 51FD 5481 80A3 51FE 8677 5505 5705
5A22 6D5B 5D21 6657 6892 6DB5 7113 7400 5BD2 5D45
97E9 751D 7B68 872C 6F8F 92E1 9B7D 97D3
4E06 5388 7F55 6D6B 558A 850A 961A 8C43 9B2B
6C49 5C7D 6C57 95EC 65F1 5CBE 54FB 57BE 608D 634D
6D86 7302 839F 6658 6665 710A 83E1 91EC 9588 7694
7745 50BC 86FF 9894 99AF 6496 6F22 872D 8C8B 66B5
71AF 92B2 92CE 61BE 64BC 7FF0 8792 9837 9844 99FB
8B40 96D7 701A 862B 9DBE
516F 7233
592F
82C0 8FD2 65BB 676D 7ED7 73E9 7B10 822A 86A2 9883
8CA5 7B55 7D4E 980F 9B67
6C86
57B3
8320 84BF 5686 8585 85A7
6BDC 869D 6BEB 6903 55E5 7346 8C89 5651 7354 8C6A
5637 734B 8AD5 512B 568E 58D5 6FE0 7C47 8814 8B79
597D 90DD
53F7 660A 6626 79CF 54E0 5CFC 604F 608E 6D69 8017
6667 6DCF 5090 7693 9117 6EC8 8055 865F 66A4 66AD
6F94 769C 769E 66CD 76A1 8583 76A5 93AC 98A2 704F
9865 9C1D 705D
7AD3
8BC3 62B2 6B31 559D 8A36 55EC 881A
79BE 5408 4F55 52BE 5392 548A 548C 59C0 6CB3 90C3
5CC6 66F7 67C7 72E2 76C7 7C7A 7D07 9602 9978 54EC
6546 6838 76C9 76CD 8377 555D 6DB8 6E2E 76D2 79F4
83CF 8402 86B5 9F81 60D2 8A38 988C 6941 6BFC 6F95
8A65 8C88 8F05 924C 9616 9C84 7186 9E56 9EA7 981C
7BD5 7FEE 879B 9B7A 7909 95D4 97A8 9F55 8988 9DA1
76AC 9449 9FA2
4F6B 578E 8D3A 8894 7103 8CC0 55C3 7142 788B 7187
8910 8D6B 9E64 7A52 7FEF 58D1 764B 8B1E 7200 9DAE
9DB4 974E 9E16 974F
7CAD 974D
9ED2 9ED1 563F 6F76
62EB 75D5 978E
4F77 5F88 72E0 8A6A
6068
4EA8 54FC 6099 5548 811D
59EE 6046 6052 6841 70C6 80FB 9E3B 6A2A 6A6B 8861
9D34 8605 9445
583C
6DA5 9D46
5677
53FF 543D 544D 7074 8F70 54C4 8A07 70D8 8EE3 63C8
6E39 7122 7861 8C3E 85A8 8F37 569D 9367 8F5F
4EDC 5F18 5985 7EA2 5430 5B8F 6C6F 7392 7EAE 95F3
5B96 6CD3 82F0 57AC 5A02 6D2A 7AD1 7D05 836D 8679
5CF5 6D64 7D18 7FC3 803E 7854 7D2D 8C39 9E3F 6E31
7AE4 7CA0 8452 8453 921C 958E 7D8B 7FDD 8C3C 6F42
9277 9783 9B5F 92D0 5F4B 857B 9710 9EC9 971F 9D3B
9ECC
664E 55CA
8BA7 8A0C 95A7 6494 6F8B 6F92 92BE 95C2 9B28
9F41
4FAF 77E6 9107 5589 5E3F 7334 8454 760A 777A 7BCC
7CC7 7FED 9ABA 7FF5 936D 9931 9BF8
543C 72BC
540E 90C8 539A 5795 5F8C 6D09 9005 5820 8C5E 9C8E
9C98 9B9C 9C5F
5019
4E6F 5322 864D 547C 5780 5FFD 6612 66F6 6CD8 82F8
6057 70C0 8F77 532B 553F 60DA 6DF4 8656 8EE4 5611
5BE3 6EF9 96D0 5E60 622F 6B51 81B4 8B3C
56EB 6287 5F27 72D0 74F3 80E1 58F6 96BA 58F7 659B
7100 5596 58FA 5AA9 6430 6E56 7322 7D57 846B 695C
7173 745A 561D 851B 9E55 69F2 7BB6 8774 885A 9B71
7E20 879C 9190 9836 89F3 9378 992C 9D60 702B 9B0D
9C17 9D98 9DA6
4E55 6C7B 864E 6D52 4FFF 8400 7425 865D 6EF8
4E65 4E92 5F16 6236 6237 6238 51B1 51B4 8290 5E0D
62A4 6C8D 6CAA 5CB5 6019 623D 6608 6791 6018 795C
7B0F 5A5F 6248 74E0 695B 55C0 7D94 9120 96FD 5AED
5AEE 6462 6EEC 8530 69F4 71A9 9CF8 7C04 9359 569B
9E71 8B77 9CE0 97C4 9800 9C6F 9E0C
4E4E 7C90 552C 7CCA 933F 9BF1
82B1 82B2 54D7 5629 848A 9335
534E 59E1 9A85 83EF 91EA 91EB 94E7 6ED1 733E 6433
64B6 78C6 8550 8796 92D8 8B41 93F5 9A4A 9DE8
5316 5212 593B 6779 753B 8BDD 5D0B 6866 5A73 756B
5B05 7575 89DF 8A71 5283 6466 6A3A 5AFF 69EC 6F85
8AE3 9ECA 7E63 8219 8B6E
57D6 5A72 691B 7874 7CC0 748D 8AAE
6000 5F8A 6DEE 69D0 8922 8E1D 61D0 8931 61F7 7024
6AF0 8032 8639
574F 54B6 8AD9 58CA 58DE 863E
72BF 6B53 9D05 9D4D 9144 56BE 61FD 737E 8B99 8C9B
9A69
73AF 90C7 5CD8 6D39 72DF 8341 6853 8408 8411 5BCF
7D59 96C8 7D84 7FA6 8C86 926E 953E 571C 5B1B 5BF0
6FB4 7F33 961B 74B0 8C72 9370 956E 9E6E 7CEB 7E6F
8F58 9436 95E4 9B1F 74DB
7F13 7DE9 650C
5E7B 5942 8092 5950 5BA6 5524 6362 6D63 6DA3 70C9
60A3 6899 7115 902D 559A 559B 5D48 610C 63DB 6E19
75EA 7746 7165 744D 8C62 6F36 7613 69F5 9CA9 64D0
6FA3 85E7 9BC7 9C00
6B22 77A3 6B61
5DDF 8093 8352 8841 671A 5843 614C
7687 505F 51F0 968D 9EC4 55A4 582D 5A93 5D32 5FA8
60F6 6E5F 845F 9051 9EC3 697B 714C 745D 58B4 6F62
735A 953D 71BF 749C 7BC1 7BCA 824E 8757 7640 78FA
7A54 8AFB 7C27 87E5 9360 992D 9CC7 8DAA 97F9 9404
9A1C 5164 9C09 9C51 9DEC
6033 604D 70BE 5BBA 6644 595B 8C0E 5E4C 8A64 7180
8B0A 6ACE
6130 6EC9 69A5 66C2 769D 93A4 76A9
6643 7E28
7070 8BD9 54B4 6062 62FB 6325 6D03 867A 8886 6656
70E3 73F2 8C57 5A4E 5A88 63EE 7FDA 8F89 9693 6689
694E 7147 7988 8A7C 5E51 7773 8918 5645 649D 5655
7FEC 8F1D 9EBE 5FBD 96B3 7008 8633 9C34
56D8 56DE 56EC 4F6A 5EFB 5EFD 605B 6D04 8334 8FF4
70E0 8698 9025 75D0 86D4 86D5 8716 9BB0
6094 6BC0 6BC1 6BC7 6A93 71EC 8B6D
5349 6C47 4F1A 8BB3 6CCB 54D5 6D4D 7ED8 8294 835F
8BF2 605A 6075 70E9 8D3F 5F57 6666 79FD 5599 60E0
6E4F 7D75 7F0B 7FD9 9613 532F 5F59 5F5A 6703 6ED9
8A6F 8CC4 9892 50E1 5612 7623 8527 8AA8 571A 5BED
6167 6193 66B3 69E5 6F53 8559 5666 5B12 5FBB 6A5E
6BA8 6FAE 6FCA 7369 8588 8589 8AF1 982E 71F4 74AF
7BF2 85F1 992F 5696 77BA 7A62 7E62 87EA 6AD8 7E6A
7FFD 8B53 5136 93F8 95E0 5B48 942C 9767 8B7F 986A
5C77 7073 74A4 61F3
660F 662C 8364 5A5A 60DB 6DBD 960D 68D4 6B99 8477
7767 776F 95BD
5FF6 6D51 68A1 9984 581A 6E3E 743F 9B42 991B 7E49
8F4B 9F32
9BF6
8BE8 4FD2 5031 5702 638D 6DF7 711D 6EB7 6141 89E8
8AE2
5419 5268 8020 952A 5290 5684 9343 8C41 6509 9A1E
4F78 6D3B 79EE 79F3
706B 4F19 90A9 94AC 9225 6F37 5925
6C8E 6216 8D27 549F 7809 4FF0 6347 7713 83B7 9584
639D 7978 8CA8 60D1 65E4 6947 6E71 798D 84A6 596F
6FE9 7372 970D 6AB4 8B0B 77C6 7A6B 956C 56AF 7016
802F 8267 85FF 8816 56BF 66E4 81DB 7668 77D0 944A
9743
FDD0-004A
4E0C 8BA5 51FB 5209 53FD 9965 4E69 520F 573E 673A
7391 808C 82A8 77F6 9E21 6785 54AD 59EB 8FF9 525E
5527 59EC 5C50 79EF 7B04 98E2 57FA 7EE9 559E 5D46
5D47 6567 671E 7284 7B53 7F09 8D4D 52E3 55D8 7578
7A18 8DE1 8DFB 9CEE 50DF 6BC4 7B95 9288 5630 69E3
757F 7A3D 7DDD 89ED 8CEB 8EB8 9F51 58BC 6A5F 6FC0
74A3 79A8 7A4D 8940 9324 96AE 64CA 78EF 7C0A 7E3E
7F81 8CF7 913F 6AC5 802D 8E5F 96DE 8B4F 97F2 9D8F
8B64 9416 9951 8E8B 97BF 9DC4 9F4E 7F87 8640 9447
8989 9459 9F4F 7F88 9E04 898A
4EBC 53CA 4F0B 5409 5C8C 5F76 5FE3 6C72 7EA7 5373
6781 7680 4E9F 4F76 8BD8 90C6 9491 537D 59DE 6025
72E4 768D 7B08 7D1A 63E4 75BE 810A 89D9 506E 5359
5EB4 710F 8C3B 6222 68D8 6975 6B9B 6E52 96C6 5849
5AC9 6131 696B 84BA 8D8C 69C9 799D 8024 818C 92A1
5DAF 6483 6F57 6FC8 7620 7BBF 8540 857A 8E16 9E61
6A76 6A9D 878F 64EE 85C9 894B 8E50 9353 8265 7C4D
8F5A 93F6 9735 9DBA 9DD1 96E6 96E7
51E0 5DF1 4E2E 5980 72B1 6CF2 866E 6324 638E 9C7E
5E7E 621F 9218 5D74 9E82 9B62 64A0 64E0 7A56 87E3
9B55
5F50 5F51 65E1 8BA1 8BB0 4F0E 7EAA 5756 5993 5FCC
6280 82B0 9645 5242 5B63 54DC 578D 5CDC 65E2 6D0E
6D4E 7D00 830D 8324 8360 8A08 5264 7D12 7EE7 89CA
8A18 5048 5BC2 5BC4 5F9B 60B8 65E3 689E 6E08 796D
5848 60CE 81EE 846A 8507 517E 75F5 7D99 84DF 88DA
8900 969B 9B3E 66A8 6F03 6F08 7A29 7A4A 8A8B 8DFD
9701 9C9A 66A9 7A37 8AC5 9CAB 5180 5291 66C1 7A44
858A 9AFB 568C 6A95 6FDF 7E4B 7F7D 85BA 89AC 6AB5
9D4B 9F4C 61FB 7660 7A67 860E 9AA5 9BDA 7031 7E7C
862E 9C40 863B 973D 9C36 9C3F 9C6D 9A65
4EBD 8F91 6A2D 8F2F 5EED 766A
52A0 4E6B 5939 4F3D 593E 62B8 4F73 62C1 6CC7 8304
8FE6 67B7 6BE0 6D43 73C8 57C9 5BB6 6D79 75C2 689C
7B33 801E 8888 50A2 7333 846D 8DCF 728C 8175 926B
5609 927F 9553 8C6D 8C91 93B5 9E9A
573F 5FE6 6274 90CF 835A 90DF 550A 605D 83A2 621B
88B7 94D7 621E 86F1 88CC 988A 86FA 8DF2 9782 9904
92CF 982C 9830 9D36 9D4A
7532 4EEE 5CAC 53DA 73BE 80DB 659A 8D3E 94BE 5047
5A7D 5FA6 659D 6935 8CC8 9240 698E 69DA 7615 6A9F
4EF7 9A7E 67B6 5AC1 5E4F 69A2 50F9 99D5
7A3C 7CD8
620B 5978 5C16 5E75 575A 6B7C 95F4 51BF 6214 73AA
80A9 8270 59E6 59E7 517C 76D1 5042 5805 60E4 730F
7B3A 83C5 83FA 8C5C 6E54 724B 728D 7F04 844C 9593
641B 6937 693E 714E 744A 7777 788A 7F23 84B9 8C63
76E3 7B8B 6A2B 719E 7DD8 8551 8573 9CA3 9CFD 9E63
71B8 7BEF 7E11 8271 97AC 9930 99A2 9E89 7010 97AF
9CD2 791B 89B8 9D73 7038 9427 6AFC 6BB2 9DBC 97C0
9C39 56CF 8643 946F 97C9
56DD 62E3 67A7 4FED 67EC 8327 5039 6338 6361 7B15
51CF 526A 6898 68C0 6E55 8DBC 583F 63C0 63C3 691C
6E1B 7751 7877 88E5 8A43 950F 5F3F 6695 7450 7B67
7B80 7D78 8C2B 6229 622C 78B1 5109 7FE6 64BF 6AA2
85C6 8947 8949 8B07 8E47 77BC 7906 7C21 7E6D 8B2D
9B0B 9C0E 9E78 703D 8812 9417 5297 9E7B 7C5B 8B7E
897A 9E7C
89C1 4EF6 898B 5EFA 996F 5251 6D0A 726E 8350 8D31
4FF4 5065 5263 682B 6DA7 73D4 8230 5271 5FA4 6E10
88B8 8C0F 91FC 5BCB 65D4 6957 6BFD 6E85 8171 81F6
8465 8DF5 8CCE 9274 952E 50ED 6997 6F38 852A 528D
528E 6F97 7BAD 7CCB 8AD3 8CE4 8D9D 8E10 8E3A 5292
5294 85A6 8AEB 92FB 9375 991E 77B7 78F5 87B9 9373
64F6 6FFA 7E5D 7033 89B5 93E9 8266 8B7C 8F5E 9431
9451 9452 946C 9473
5F45 58B9 6A7A 7900 6BB1
6C5F 59DC 5C06 8333 6D46 7555 8C47 5C07 8441 757A
646A 7FDE 50F5 6F3F 8780 58C3 7F30 8591 6A7F 6BAD
87BF 9CC9 7585 7913 7586 7E6E 97C1 9C42
8BB2 5956 6868 508B 848B 5968 596C 8523 69F3 734E
8029 8199 8B1B 985C
531E 5905 5F1C 964D 6D1A 7EDB 5F36 88B6 7D73 9171
52E5 6EF0 5D79 647E 5F4A 729F 7CE1 91A4 7CE8 91AC
8B3D
5320 6762 6AE4
827D 8281 4EA4 90CA 59E3 5A07 5CE7 6D47 832D 832E
9A84 80F6 6912 7126 86DF 8DE4 50EC 5604 8660 9C9B
5B0C 5D95 5DA3 618D 6F86 81A0 8549 71CB 81B2 7901
7A5A 9BAB 9D41 9E6A 7C25 87ED 8F47 940E 9DCD 9A55
9DE6 9DEE
81EB 89D2 4F7C 4FA5 6054 6322 72E1 7EDE 997A 6341
6648 70C4 768E 77EB 811A 94F0 6405 6E6B 7D5E 527F
656B 6E6C 714D 8173 8CCB 50E5 6477 669E 8E0B 9278
9903 510C 528B 5FBA 649F 64B9 96A6 5FBC 61BF 657D
657F 71DE 7F34 66D2 74AC 77EF 76A6 87DC 7E73 8B51
5B42 652A 705A 9C4E
53EB 544C 5CE4 630D 8A06 73D3 7A8C 8F7F 8F83 654E
6559 7A96 6ED8 8F03 5602 5626 65A0 6F16 9175 564D
5DA0 6F50 566D 5B13 7365 85E0 8DAD 8F4E 91AE 8B65
76AD 91C2
9D64 6AF5 7E90
9636 7596 7686 63A5 63B2 75CE 79F8 83E8 968E 5588
55DF 5826 5A98 5AC5 63ED 6904 6E5D 813B 8857 716F
7A2D 64D1 8754 7664 8B2F 9D9B
5369 536A 5B51 5C10 8282 8BA6 5226 5227 52AB 5C8A
6605 523C 52BC 6770 758C 8871 62EE 6D01 7ED3 8FFC
5022 6840 83AD 8A10 507C 5A55 5D28 6377 88BA 5091
55BC 7D50 7D5C 9889 5D65 696C 6976 6ED0 776B 7BC0
8710 874D 8A70 9263 9B5D 622A 69A4 78A3 7AED 84F5
9C92 6F54 7FAF 8AB1 8E15 978A 5E6F 937B 9B9A 5DC0
6AED 881E 8818 883D
6BD1 5A8E 89E3 89E7 98F7 6A9E
4E2F 4ECB 5424 5C95 5E8E 6212 82A5 5C46 5C4A 73A0
754C 754D 75A5 780E 8878 8BEB 501F 6088 86A7 5FA3
583A 6950 743E 86F6 9AB1 7297 8AA1 892F 9B6A 9385
8EA4
59D0 685D
5DFE 4ECA 65A4 9485 5153 91D1 6D25 77DC 8355 887F
89D4 57D0 73D2 7D1F 60CD 583B 7B4B 91FF 5D9C 9E76
9EC5 895F
4EC5 5C3D 4FAD 537A 5DF9 7D27 5807 83EB 50C5 53AA
8C28 9526 5AE4 5ED1 6F0C 76E1 7DCA 84F3 9991 69FF
747E 5118 9326 8B39 9949
4F12 52A4 52B2 5997 8FD1 8FDB 6783 52C1 6D55 8369
6649 664B 6D78 70EC 8D46 552B 740E 7972 9032 5BD6
6422 6E8D 7981 7F19 9773 5890 669C 7468 50F8 51DA
6B4F 6BA3 74A1 89D0 5664 6FC5 7E09 8CEE 568D 5B27
6FDC 85CE 71FC 74B6 89B2 8D10 9F7D
91D2 781B 743B 58D7
5755 5759 5DE0 4EAC 6CFE 7ECF 830E 4EB0 79D4 8346
834A 6D87 8396 5A5B 60CA 65CC 65CD 7304 7D4C 83C1
6676 7A09 8148 844F 7CB3 7D93 5162 7CBE 8059 9CB8
9D5B 9BE8 9D81 9D84 9E96 9F31 9A5A 9EA0
4E95 4E3C 9631 522D 5753 5B91 6C6B 6C6C 80BC 5244
7A7D 9888 666F 5106 981A 5E5C 61AC 61BC 66BB 71DB
749F 74A5 9838 87FC 8B66
598C 51C0 5F2A 5F84 8FF3 4FD3 5A59 6D44 80EB 501E
51C8 5F33 5F91 75C9 7ADE 9015 5A67 6871 68B7 6DE8
7AEB 811B 7ADF 656C 75D9 7AE7 9753 50B9 9756 5883
734D 8AA9 8E01 9759 975A 66D4 955C 975C 6FEA 701E
93E1 7AF6 7AF8
775B 6A78 71DD
5182 518B 5770 6243 57DB 7D45 99C9 99EB 860F 8614
518F 56E7 6CC2 7085 8FE5 4FB0 70AF 9008 6D7B 70F1
715A 7A98 988E 7D97 50D2 715B 71B2 6F83 8927
4E29 52FC 7EA0 673B 725E 7A76 7CFA 9E20 7CFE 8D73
9604 841B 557E 63C2 63EA 63EB 9CE9 644E 6A1B 9B0F
9B2E
4E5D 4E45 4E46 4E63 597A 7078 7396 820F 97ED 7D24
9152 9579 97EE
531B 65E7 81FC 548E 759A 67E9 67FE 5003 6344 6855
5313 53A9 6551 5AA8 5C31 5EC4 5ED0 8205 50E6 5ECF
6166 6BA7 820A 9E6B 5336 9BE6 9E94 9F68 9DF2
6C63 6766 6B0D
51E5 521F 6285 530A 5C45 62D8 6CC3 72D9 82F4 9A79
6336 75BD 75C0 7717 7820 7F5D 9671 5A35 5A6E 5D0C
63AC 68AE 6DBA 83F9 6910 741A 8152 8D84 8DD4 9514
88FE 96CE 824D 871B 8E18 8E19 92E6 99D2 9B88 9D21
97A0 97AB 9D8B
5C40 6CE6 4FB7 72CA 6854 6BE9 5579 5A45 6DD7 7117
83CA 90F9 6908 6BF1 6E68 7291 8F02 50EA 7CB7 8DFC
95B0 8ACA 8D9C 8EB9 6A58 6A8B 99F6 9D59 8E6B 9D74
5DC8 861C 9DAA 9F33 9A67
5480 5F06 6CAE 4E3E 8392 6319 6907 7B65 6989 6998
849F 9F83 8065 8209 8E3D 64E7 6AF8 9F5F 6B05
5DE8 53E5 4E6C 5DEA 8BB5 59D6 5CA0 6007 62D2 6D30
82E3 90AD 5177 6010 601A 62E0 661B 6B6B 70AC 79EC
949C 4FF1 5028 5036 51A3 5267 7C94 801F 86B7 8893
57E7 57FE 60E7 636E 8A4E 8DDD 728B 8DD9 9245 98D3
8661 8C66 952F 5BE0 6133 7AAD 805A 99CF 5287 52EE
5C66 8E1E 9B94 58C9 61C5 64DA 6FBD 7AB6 907D 92F8
5C68 98B6 8C97 7C34 8E86 91B5 61FC 943B
77E9 7220 8977
59E2 5A1F 6350 6D93 7106 74F9 8127 88D0 9E43 52EC
954C 93B8 9D51 942B 8832
5377 545F 5E23 57CD 6372 83E4 9529 81C7 9308
5946 52B5 5DFB 5026 52CC 684A 72F7 7EE2 96BD 6DC3
7737 9104 774A 7D6D 7F65 96CB 7760 7D79 98EC 617B
8528 990B 7367 7E33 7F82
5658 6485 64A7 5C69 8E7B
4E85 5B52 5B53 51B3 5214 6C12 8BC0 5F21 6289 6C7A
82B5 6CEC 73A6 73A8 6317 73CF 75A6 7804 7EDD 8673
89C9 5014 6354 6B2E 8697 5D1B 6398 658D 6877 6B8C
8990 89D6 8A23 8D7D 8DB9 902B 5095 53A5 7133 7D55
7D76 899A 8D89 920C 5282 52EA 7474 8C32 99C3 5DA5
61B0 71A6 7234 7357 761A 855D 8568 9D02 9D03 5671
61A0 6A5B 6A5C 7235 81C4 9562 87E8 87E9 5C6B 7211
8B4E 8E76 8E77 9D8C 5337 56BC 77CD 89BA 940D 941D
721D 89FC 5F4F 6204 652B 7383 9DE2 6B14 77E1 9FA3
8C9C 8EA9 9481
519B 541B 5747 6C6E 59F0 8880 8ECD 94A7 8399 8690
687E 76B2 83CC 921E 7885 76B8 76B9 89A0 9281 929E
9CAA 9E87 9355 9BB6 9E8F 9E95
5441 4FCA 90E1 9656 57C8 5CFB 6343 6D5A 9982 9A8F
6659 710C 73FA 68DE 756F 7AE3 5101 7B98 7B9F 8720
5BEF 61CF 9915 71C7 6FEC 99FF 9D54 9D58 6508 651F
FDD0-004B
5494 5496 5580 8849 64D6
5361 4F67 80E9 9272
57B0 88C3
5F00 5952 63E9 950E 958B 9426
51EF 5240 57B2 607A 95FF 94E0 51F1 5274 5605 6168
8488 584F 5D66 6137 6977 8F06 669F 9534 9347 93A7
95D3 98BD
5FFE 708C 708F 6B2C 70D7 52D3 6112 613E 938E
520A 681E 52D8 9F9B 582A 5D41 6221 9F95
519A 574E 4F83 780D 83B0 5058 57F3 60C2 6B3F 586A
6B41 69DB 8F21 6ABB 9851 7AF7 8F57
770B 884E 5D01 5888 77B0 78E1 95DE 77D9
5FFC 95F6 780A 7C87 5EB7 5ADD 5D7B 6177 6F2E 69FA
7A45 7CE0 8EBF 93EE 9C47
625B 6443
4EA2 4F09 531F 909F 56E5 6297 72BA 7095 94AA 9227
958C
5C3B 9ADB
4E02 6537 8003 62F7 6D18 6832 70E4 7A01 9C93 71FA
94D0 7292 92AC 9760 9BB3 9BCC
533C 82DB 67EF 7241 73C2 79D1 80E2 8F72 75B4 7822
8DB7 68F5 842A 8EFB 988F 55D1 6415 7290 7A1E 7AA0
9233 69BC 8596 9897 6A16 778C 78D5 874C 9312 9198
9846 9AC1 791A
58F3 63E2 6BBC 7FD7
53EF 5777 5CA2 70A3 6E07 5D51 6564 6E34 5DB1 790D
514B 523B 524B 52C0 52CA 5BA2 606A 5A14 5C05 8BFE
5801 6C2A 9A92 7F02 6119 6E98 951E 78A6 7DD9 8250
8AB2 790A 9A0D
5D59
808E 80AF 80BB 57A6 6073 5543 8C64 9F88 58BE 9339
61C7 9F66
63AF 88C9 8903
52A5 962C 542D 5751 5994 6333 7841 727C 785C 94FF
787B 647C 8A99 92B5 935E 93D7
7A7A 5025 57EA 5D06 60BE 6DB3 787F 7B9C 9313 9D7C
5B54 6050
63A7 979A
8EBB
62A0 82A4 770D 527E 5F44 6473 7798
53E3 52B6
53E9 6263 6542 51A6 5BBC 5BC7 91E6 7A9B 7B58 6EF1
8532 853B 7789 7C06 9DC7
625D 5233 77FB 90C0 67AF 80D0 54ED 684D 5800 5D2B
5710 8DCD 7A9F 9AB7 9BAC
72DC 82E6
5E93 4FC8 7ED4 5EAB 79D9 8DB6 7105 88B4 55BE 7D5D
88E4 7614 9177 5EE4 8932 56B3
5938 59F1 8A87
4F89 54B5 57AE 9299
630E 80EF 8DE8 9ABB
823F
84AF 64D3
5DDC 51F7 5757 5FEB 4FA9 90D0 54D9 72EF 810D 584A
7B77 9C99 5108 58A4 9136 5672 5EE5 736A 81BE 65DD
7CE9 9C60
5726
5BBD 5BDB 5BEC 81D7 9ACB 9AD6
6B35 6B3E 6B40 7ABE
7ABD 9467
5321 52BB 8BD3 90BC 5329 54D0 6047 6D2D 6846 7844
7B50 8A86 8EED
5FF9 6282 72C2 8BF3 8ED6 8A91 9D5F
593C 5123 61ED
535D 909D 5739 7EA9 51B5 65F7 5CB2 6CC1 77FF 663F
8D36 7716 7736 7D56 8CBA 8EE6 9271 913A 58D9 9ECB
61EC 66E0 720C 8E80 77CC 7926 7A6C 7E8A 945B
783F 7D4B 7B7A
4E8F 5232 5CBF 609D 76D4 7AA5 8067 7ABA 8667 985D
95DA 5DCB 862C
594E 6646 9035 9108 9697 9804 9997 55B9 63C6 8475
9A99 6223 668C 694F 6951 9B41 777D 8770 982F 6AC6
85C8 9368 9377 9A24 5914 8637 5DD9 8641 72AA 8EA8
7143 8DEC 980D 8E5E
5C2F 532E 6B33 559F 5ABF 6126 6127 6E83 8143 8489
9988 7786 5633 5B07 6192 6F70 7BD1 8069 806D 8562
6A3B 8B09 993D 7C23 8075 7C44 9400 994B 944E
5764 6606 5803 5A6B 5D10 5D11 665C 7311 83CE 88C8
711C 7428 9AE0 88E9 8C87 951F 9AE1 9E4D 872B 890C
9AE8 747B 918C 9315 9CB2 9A09 9BE4 9D7E 9DA4
6083 6346 9603 58F8 68B1 7975 7871 7A07 88CD 58FC
7A1B 7D91 95AB 95B8 9F6B
56F0 6D83 774F
5812 5C21 6F49 71B4
6269 62E1 62EC 6304 6870 7B48 843F 8440 86DE 9614
5ED3 9822 9AFA 64F4 6FF6 95CA 979F 61D6 9729 97B9
9B20
97D5
FDD0-004C
5783 62C9 67C6 7FCB 83C8 641A 908B
65EF 524C 782C 63E6 78D6
5587 85DE
814A 63E7 694B 760C 8721 874B 8FA2 8FA3 8772 81C8
650B 7209 81D8 9B0E 74CE 9574 9BFB 881F 945E
5566 6E82 97A1 56B9
6765 4F86 4FEB 5008 5D03 5F95 6D9E 83B1 90F2 5A61
5D0D 5EB2 5FA0 68BE 6DF6 730D 840A 9028 68F6 741C
7B59 94FC 7B82 9338 9A0B 9BE0 9D86 9EB3
553B 8D49 7750 775E 8D56 8CDA 6FD1 8CF4 983C 9842
765E 9D63 7028 702C 7C41 85FE 6AF4 7669 8970 7C5F
5170 5C9A 62E6 680F 5A6A 60CF 5D50 847B 9611 84DD
8C30 53B1 6F9C 8934 5116 6593 7BEE 61E2 71E3 71F7
85CD 8955 9567 95CC 74BC 8964 8B4B 5E71 6514 703E
7046 7C43 7E7F 862D 6595 6B04 7937 8974 56D2 7061
7C63 6B17 8B95 8E9D 9484 97CA
89C8 6D68 63FD 7F06 6984 6F24 7F71 9182 58C8 61D2
89A7 64E5 5B3E 61F6 5B44 89BD 5B4F 652C 7060 56D5
6B16 9872 7E9C
70C2 6EE5 71D7 5682 6FEB 7201 721B 74D3 7224 946D
7CF7
7226 897D
5577
52C6 90CE 90DE 6B34 72FC 9606 5ACF 5ECA 658F 6879
7405 84C8 6994 746F 7860 7A02 9512 7B64 8246 870B
8782 8EB4 92C3 93AF 99FA
6717 6716 70FA 5871 84E2 6A03 8A8F 6724
57CC 5D00 6D6A 83A8 8497 95AC
5525 90D2
635E 6488
52B3 52B4 7262 7A82 54F0 5520 5D02 6D76 52DE 75E8
94F9 50D7 562E 5D97 61A5 7646 78F1 7C29 87E7 91AA
9412 985F 9ADD
8002 8001 4F6C 54BE 59E5 6045 72EB 8356 6833 94D1
92A0 6F66 6A51 8F51
6D9D 70D9 8022 916A 5AEA 61A6 6F87 8EBC 6A6F 802E
8EC2
73EF 7853 7CA9 86EF 6725 9BB1
808B
4EC2 961E 4E50 53FB 5FC7 6250 6C3B 827B 738F 6CD0
7AFB 7833 697D 97F7 6A02 7C15 9CD3 9C33
4E86 9979 990E
52D2
96F7 5AD8 7F27 8502 757E 64C2 6A91 7E32 790C 956D
6AD1 74C3 7FB8 7927 7E8D 7F4D 8632 881D 9433 8F60
513D 58E8 9458 9741 8646 6B19 7E9D 9F3A
53BD 8012 8BD4 5792 7D6B 8142 50AB 8A84 6A0F 78CA
854C 78E5 857E 5121 58D8 7657 85DF 6AD0 7928 7045
863D 8B84 9478 9E13
6CEA 6D21 7C7B 6D99 6DDA 7D2F 9179 9287 981B 982A
9311 6502 98A3 985E 7E87 8631 79B7
5841 561E 9C69
5D1A 5844 68F1 695E 7890 7A1C 8F18 8590
51B7
5030 580E 6123 7756 8E1C
5215 675D 5398 5253 79BB 8372 9A8A 60A1 68A8 68A9
68B8 7281 740D 7C9A 83DE 55B1 68C3 7282 9E42 527A
6F13 775D 7B63 7F21 8243 84E0 870A 5AE0 5B77 6A06
7483 76E0 8C8D 7CCE 853E 8935 92EB 9CA1 9ECE 7BF1
7E2D 7F79 9305 87CD 8B27 91A8 569F 85DC 908C 91D0
96E2 6584 74C8 93EB 9BEC 9D79 9EE7 56C4 6521 7055
863A 8821 9A39 5B4B 5EF2 5299 9457 7A72 7C6C 7E9A
9A6A 9C7A 9E1D
793C 91CC 4FDA 5CDB 5CE2 5A0C 5CF2 6D6C 9026 7406
9502 7CB4 88CF 8C4A 92F0 9CA4 5163 6FA7 79AE 9BC9
87F8 91B4 9CE2 9090 9C67 6B1A
529B 5386 5389 5C74 7ACB 540F 6738 4E3D 5229 52B1
5456 575C 6CA5 82C8 4F8B 5CA6 623E 67A5 6CB4 75A0
82D9 96B6 4FD0 4FEA 680E 75AC 7805 8318 8354 8D72
8F79 90E6 550E 60A7 6817 681B 6D96 7301 73D5 783A
783E 79DD 8385 8389 5533 5A6F 7B20 7C92 7C9D 8137
86B8 86CE 5088 51D3 53A4 68D9 75E2 86E0 8A48 8DDE
96F3 53AF 585B 6144 642E 6EA7 849A 849E 925D 9CE8
53B2 66A6 6B74 746E 7D9F 8727 8777 52F5 66C6 6B77
7BE5 96B7 9D17 5DC1 6FFF 7658 78FF 96B8 9B01 512E
66DE 6AD4 7204 72A1 79B2 8807 9398 56A6 58E2 650A
6ADF 701D 74C5 77CB 792A 85F6 9E97 6AEA 720F 74D1
76AA 76ED 792B 7CF2 8823 5137 7667 7930 882B 9148
9DC5 9E9C 56C7 6526 89FB 8E92 8F62 6B10
8B88 8F63 652D 74E5 9742 9C71 9C73 974B
674E 6803 54E9 5A33 72F8 88E1 6AAA 9BCF
4FE9 5006
5941 8FDE 5E18 601C 6D9F 83B2 9023 68BF 8054 88E2
4EB7 55F9 5EC9 6169 6E93 6F23 84EE 5332 5969 69E4
7191 899D 5286 5333 5652 5AFE 6190 78CF 806B 8933
9CA2 6FC2 6FD3 7E3A 7FF4 806E 8595 878A 6AE3 71EB
806F 81C1 8B30 8E65 938C 9570 7C3E 880A 9B11 942E
9C31 7C62 7C68
655B 740F 8138 88E3 6459 7489 8539 5B1A 6582 81C9
913B 895D 7FB7 861E
7EC3 70BC 604B 6D70 6B93 50C6 581C 5AA1 6E45 8430
94FE 695D 7149 7453 6F4B 7DF4 6FB0 932C 6BAE 934A
93C8 7032 861D 9C0A 6200 7E9E
8068
826F 4FCD 51C9 6881 6DBC 690B 8F8C 7CAE 7CB1 589A
7DA1 8E09 6A11 8F2C 7CE7
4E21 4E24 5169 5521 5562 639A 813C 88F2 7DC9 873D
9B49 9B4E
4EAE 54F4 60A2 8C05 8F86 55A8 667E 6E78 91CF 8F0C
8AD2 8F1B 9344
7177 7C17
64A9 8E7D
8FBD 7597 804A 50DA 5BE5 5D7A 6180 6F3B 818B 5639
5AFD 5BEE 5D9A 5D9B 6579 7360 7F2D 907C 66B8 71CE
7499 81AB 7642 9E69 5C6A 5EEB 7C1D 7E5A 87DF 8C42
8CFF 8E58 9410 9ACE 85D4 98C9 9DEF
53FE 948C 91D5 911D 84FC 61AD 77AD 66E2 957D 7212
5C25 5C26 7093 6599 5C1E 5ED6 6482 7AB7 9563
720E
5217 52A3 51BD 52BD 59F4 6312 6D0C 8322 8FFE 54F7
57D2 57D3 6835 6D56 70C8 6369 730E 811F 86DA 88C2
716D 7759 8057 8D94 5DE4 98B2 5120 9BA4 9D37 64F8
7375 72A3 8E90 9B1B 9B23 9C72
6BDF 54A7 6318 70EE 731F
62CE
53B8 90BB 6797 4E34 51A7 77DD 5549 5D0A 6DCB 667D
7433 7CA6 75F3 7884 7B96 7CBC 9130 96A3 5D99 6F7E
735C 9074 65B4 66BD 71D0 7498 8F9A 9716 77B5 78F7
81E8 7E57 7FF7 9E90 8F54 58E3 7036 93FB 9CDE 9A4E
9C57 9E9F
83FB 4E83 51DB 51DC 649B 5EE9 5EEA 61CD 61D4 6F9F
6A81 6AA9 765B 765D
541D 6061 608B 8D41 711B 8CC3 50EF 853A 6A49 7510
81A6 95B5 7584 85FA 8E78 8E8F 8E99 8EAA 8F65
3007 5222 7075 56F9 577D 590C 59C8 5CBA 5F7E 6CE0
72D1 82D3 6624 670E 67C3 73B2 74F4 51CC 768A 7831
79E2 7ADB 94C3 9675 9E30 5A48 6395 68C2 6DE9 740C
7B2D 7D37 7EEB 7F9A 7FCE 8046 8232 83F1 86C9 8851
797E 8A45 8DC9 8EE8 88EC 9234 959D 96F6 9F84 7DBE
8506 970A 99D6 6FAA 8576 9302 9B7F 9CAE 9D12 9E77
71EF 971B 971D 9F62 9143 9BEA 5B41 8626 9F61 6AFA
91BD 9748 6B1E 7227 9EA2 9F97
963E 5CAD 888A 9886 9818 5DBA
4EE4 53E6 5464 70A9
4F36 84E4 9717 702E
6E9C 7198 8E53
5218 6CA0 7544 6D4F 6D41 7559 65C8 7409 7571 786B
88D7 5AB9 5D67 65D2 84A5 84C5 905B 998F 9A9D 69B4
7460 98D7 5289 746C 7624 78C2 954F 99E0 9E60 6A4A
74A2 7581 9560 7645 87C9 99F5 56A0 61F0 700F 85F0
938F 93A6 9E8D 93D0 98C0 9A2E 98C5 9C21 9DB9 9A51
67F3 6801 73CB 687A 7EFA 950D 925A 98F9 7DB9 71AE
7F76 92F6 6A6E 5B3C 7F80
516D 7542 7FCF 586F 5EC7 6F91 78DF 9E68 9724 993E
96E1 9402 98C2 9B38 9DDA
685E
56D6
9F99 5C78 5499 6CF7 830F 663D 680A 73D1 80E7 772C
783B 7ADC 7B3C 804B 9686 6E70 6EDD 5D90 6F0B 856F
7643 7BED 9F8D 56A8 5DC3 5DC4 7027 7C3C 8622 93E7
9733 66E8 6727 6AF3 7216 74CF 77D3 7931 7932 8971
9F92 7C60 807E 882A 882C 8C45 8E98 9468 9747 9A61
9E17
9647 5784 5785 62E2 7BE2 5131 96B4 58DF 58E0 650F
7AC9 9F93
54E2 6335 6887 5FBF 8D1A
69DE 7ABF
779C
5245 5A04 507B 5A41 6E87 848C 50C2 697C 5ED4 617A
6F0A 851E 9071 6A13 71A1 8027 877C 802C 825B 87BB
8B31 8EC1 9AC5 97BB 9ACF
5D5D 6402 587F 5D81 645F 750A 7BD3 7C0D
964B 5C5A 6F0F 7618 9542 763A 763B 93E4
55BD 560D
565C 64B8
5362 5E90 82A6 5786 6CF8 7089 680C 80EA 8F73 9E2C
7388 823B 9885 9C88 9B72 76E7 6ADA 56A7 58DA 5EEC
650E 7018 7379 74B7 8606 66E5 6AE8 7210 74D0 81DA
77D1 7C5A 7E91 7F4F 826B 8826 8F64 946A 9871 9AD7
9C78 9E15 9EF8
5364 864F 63B3 9E75 7875 9C81 865C 5877 6EF7 84FE
6A10 9B6F 64C4 6A79 78E0 9565 5695 64FC 7002 6AD3
6C0C 8263 93C0 826A 942A 9465
5725 752A 9646 4F93 5774 5F54 5F55 5CCD 52CE 8D42
8F82 9678 5A3D 6DD5 6DE5 6E0C 7849 83C9 902F 9E7F
6902 742D 7984 797F 50C7 5279 52E0 76DD 7769 788C
7A11 8CC2 8DEF 5876 5ED8 645D 6F09 7B93 7CB6 850D
622E 6A1A 719D 8194 89EE 8DA2 8E1B 8F98 9181 6F5E
7A4B 8557 9304 9332 9334 7490 7C0F 87B0 7C36 8E57
8F46 9A04 9E6D 7C2C 93D5 9BE5 9D66 9D71 9E93 93F4
9732 9A3C 7C59 8642 9DFA
67A6 822E 9229 6F9B 6C07
9A74 90D8 95FE 6988 95AD 99BF 6C00 81A2 85D8 9DDC
9A62
5415 5442 4FA3 4FB6 6314 635B 634B 65C5 68A0 7963
7A06 94DD 5C61 7D7D 7F15 5C62 8182 891B 92C1 5C65
8190 8938 5122 7A5E 7E37 7A6D
5BFD 578F 5F8B 8651 7387 7EFF 5D42 6C2F 844E 6EE4
7DA0 7DD1 616E 7BBB 819F 52F4 7E42 6FFE 6AD6 7208
9462
7112
5A08 5B6A 5CE6 631B 683E 9E3E 8114 6EE6 92AE 9D49
571D 5971 5B4C 5B7F 5DD2 6523 66EB 6B12 7053 7F89
81E0 571E 7064 864A 947E 7674 7675 9E1E
5375
4E71 91E0 4E82
7567 950A 7A24 5719 92DD 92E2 64FD
62A1 6384
4ED1 4F26 56F5 6CA6 7EB6 4F96 8F6E 502B 966F 5707
5A68 5D18 5D19 60C0 6DEA 83D5 68C6 8140 7DB8 8726
8E1A 8F2A 9300 9BE9
57E8 7896 7A10 8023
8BBA 6EA3 8AD6
78EE
7F57 5570 9831 56C9
7F56 7321 8136 841D 903B 6924 8161 8999 9523 7BA9
9AA1 9559 87BA 7F85 89B6 93CD 5138 89BC 9A3E 651E
7380 863F 908F 6B0F 9A58 9E01 7C6E 947C 9960
5246 502E 84CF 88F8 8EB6 7630 8803 81DD 66EA 7673
6CFA 5CC8 6D1B 7EDC 8366 9A86 6D1C 73DE 7866 7B3F
7D61 843D 55E0 645E 6F2F 7296 927B 96D2 99F1 9BA5
9D3C 9D45 6FFC 7E99
FDD0-004D
5463
5988 5B56 5ABD 5B24 5B37
9EBB 75F2 8534 7298 87C7
9A6C 739B 7801 8682 99AC 6EA4 746A 78BC 879E 93B7
9C22 9DCC
72B8 6769 7943 9581 9A82 551B 508C 7341 7770 561C
69AA 79A1 7F75 99E1 7923 9B15
4E87 5417 55CE 9064 561B 5AF2 87C6
57CB 85B6 973E
4E70 836C 8CB7 562A 8552 9DF6
52A2 8FC8 4F45 58F2 9EA6 5356 8109 8108 9EA5 8847
52F1 8CE3 9081 9721 9722
5ADA 989F
59CF 6097 86EE 50C8 8C29 6172 9992 6A20 7792 779E
9794 8B3E 9945 9CD7 9862 9B17 9B18 9C3B 883B
5C58 6E80 774C 6EE1 6EFF 87A8 8954 87CE 93CB 77D5
66FC 9124 5881 5E54 6162 6471 6F2B 734C 7F26 8504
8513 69FE 71B3 6FB7 9558 7E35 93DD
8630
7264
9099 5402 5FD9 6C52 8292 5C28 6757 6767 6C13 76F2
607E 7B00 832B 54E4 5A0F 5EAC 6D5D 72F5 727B 786D
91EF 94D3 75DD 86D6 92E9 99F9
83BD 83BE 7865 833B 58FE 6F2D 87D2 880E
732B 8C93
6BDB 77DB 6786 7266 8305 8306 65C4 7F5E 515E 6E35
8EDE 9155 5825 951A 5AF9 9AE6 6C02 729B 8765 9AF3
9328 87CA 9D9C
5187 536F 5918 4E6E 623C 5CC1 6CD6 6634 94C6 7B37
84E9
5183 7683 82BC 5190 8302 5192 67D5 770A 8D38 8004
88A4 8992 5AA2 5E3D 843A 8CBF 911A 6117 6693 6959
6BF7 7441 7780 8C8C 912E 8750 61CB
4E48 9EBC 5692 6FF9 569C 7666
5445 5746 6C92 6CA1 679A 73AB 82FA 6802 7709 5A12
8104 8393 6885 73FB 8122 90FF 5833 5A92 5D4B 6E44
6E48 7338 7742 847F 6963 6973 7164 7442 7996 587A
69D1 9176 9545 9E5B 92C2 9709 7A48 5FBE 9387 77C0
6517 862A 9DA5 9EF4
6BCE 6BCF 51C2 7F8E 6334 6D7C 5A84 5D44 6E3C 5ABA
815C 9541 5B0D 71D8 9382 9EE3
59B9 62BA 6CAC 65C0 6627 7959 8882 771B 5A9A 5BD0
75D7 8DCA 9B3D 715D 7778 97CE 9B45 7BC3 875E
8EBE
95E8 626A 73A7 9494 9580 9585 636B 83DB 748A 9346
4EB9 864B
95F7 7116 60B6 66AA 71DC 61D1 61E3
4EEC 5011 691A
753F 867B 51A1 8394 840C 8420 76DF 8499 750D 511A
6A57 77A2 8544 8771 9133 9138 5E6A 61DE 6FDB 66DA
6726 6AAC 6C0B 77C7 791E 9BCD 9E72 8268 8609 77D2
973F 9740 995B 986D 9F06 9E0F
52D0 731B 74FE 9530 824B 8722 61DC 7374 9333 61F5
8813 9BED
5B5F 68A6 5922 6E95 5923 9725
63B9 64DD
54AA 772F 7787
519E 5F25 7F59 7962 8FF7 7315 8C1C 84BE 8A78 8B0E
919A 5F4C 64DF 7CDC 7E3B 9E8A 9E8B 79B0 9761 7030
737C 9E9B 957E 6202 6520 74D5 863C 7222 91BE 91BF
9E0D 91C4
7C73 8288 4F8E 6CB5 7F8B 5F2D 6D23 6549 772B 8112
6E33 845E 851D 92A4 6FD4 5B4A 7056
5196 7CF8 6C68 6C95 5B93 6CCC 89C5 5CDA 7955 5BBB
79D8 5BC6 6DE7 6DFF 8993 8994 5E42 8C27 5853 5E4E
899B 5627 6993 6EF5 6F1E 7190 8524 871C 9F0F 51AA
6A12 5E66 6FD7 85CC 8B10 6AC1 7C1A 7F83
5B80 8287 7720 5A42 7EF5 5A94 68C9 7DBF 7DDC 81F1
8752 5B35 6AB0 6ACB 77C8 77CA 77CF
4E0F 6C45 514D 6C94 9EFE 52C9 7704 5A29 506D 5195
52D4 6E11 5595 6110 6E4E 7F05 8442 7D7B 817C 9EFD
7DEC 9EAB 6FA0 9BB8
9763 9762 7CC6 9EAA 9EBA 9EB5
55B5
82D7 5A8C 63CF 7784 9E4B 7DE2 9D93 9C59
676A 7707 79D2 6DFC 6E3A 7F08 7BCE 7DF2 85D0 9088
5999 5E99 7385 7AD7 5EBF 5EDF
4E5C 5400 54A9 54F6 5B6D
706D 70D5 8995 6423 6EC5 8511 858E 9D13 5E6D 61F1
7BFE 6AD7 881B 884A 9456 9C74
6C11 59C4 5CB7 5FDE 600B 65FB 65FC 82E0 73C9 76FF
7807 7F60 5D0F 636A 7418 7F17 656F 7449 75FB 7888
9231 7DCD 7DE1 9309 9D16 9372
76BF 51BA 5221 95F5 62BF 6CEF 52C4 6543 95FD 60AF
654F 7B22 60FD 6E63 9594 610D 668B 95A9 50F6 615C
61AB 6F63 7C22 9CD8 8820 9C35
578A 7B3D
540D 660E 9E23 6D3A 7700 8317 51A5 6719 7733 94ED
910D 5AC7 6E9F 733D 84C2 669D 69A0 9298 9CF4 7791
879F 89AD
4F72 59F3 51D5 614F 9169
547D 6927 8A7A
63B5
8C2C 8B2C
6478
8C1F 5AEB 998D 6479 6A21 819C 9EBD 6469 6A45 78E8
7CE2 8B28 56A4 64F5 9943 56A9 56B0 8611 9ACD 9B54
5298 995D
62B9 61E1
672B 52B0 573D 59BA 5E13 6B7E 6B7F 6B81 6CAB 8309
964C 5E1E 6629 67BA 551C 768C 771C 773F 781E 79E3
8388 83AB 773D 7C96 7D48 6E50 86E8 8C83 55FC 587B
5BDE 6F20 734F 84E6 8C8A 66AF 9286 977A 5AFC 9ED9
763C 7790 7799 9546 9B69 58A8 9ED8 700E 8B29 8C98
85E6 87D4 93CC 7205 9A40 7933 7E86 8031
5E85 603D 5C1B 9B79 9EBF
54DE
725F 4F94 52BA 6048 6D20 7738 8C0B 86D1 7F2A 8E0E
927E 8B00 77B4 7E46 936A 9D3E 9EB0
67D0
6BEA 6C01 58B2
6BCD 4EA9 7261 5776 59C6 5CD4 7273 7546 7552 80DF
755D 755E 782A 756E 9267 8E07
6728 4EEB 6730 76EE 6C90 72C7 7091 7267 82DC 6BE3
83AF 869E 94BC 52DF 96EE 5893 5E55 5E59 6154 6958
7766 926C 6155 66AE 8252 9702 7A46 7E38 97AA
51E9 62C7
FDD0-004E
55EF
62CF 62FF 6310 55F1 954E 93BF
4E78 54EA 96EB
90A3 59A0 7EB3 80AD 5A1C 8872 94A0 7D0D 88A6 637A
7B1D 8C7D 8EDC 8C80 9209 84B3 9779 9B76
8149 718B 6468 5B7B
4E43 5976 827F 6C16 7593 59B3 5EFC 8FFA 5037 91E2
5B2D
5948 67F0 800F 8010 8418 6E3F 9F10 8926 879A 933C
56E1
7537 678F 67AC 4FBD 5357 67DF 5A1A 7558 83AE 96BE
5583 6694 6960 8AF5 96E3
8D67 63C7 6E73 8433 8169 877B 6201
5A7B
9056
56D4
4E6A 56A2 8B68 56CA 8830 9B1E 9995 6B1C 9962
64C3 66E9 652E 7062
513E 9F49
5B6C
5476 6013 6320 5CF1 7847 94D9 7331 86F2 8A49 7899
6493 5DA9 61B9 87EF 5912 8B4A 9403 5DCE
57B4 607C 60A9 8111 5318 5816 60F1 5AD0 7459 8166
78AF 7376 737F
95F9 5A65 6DD6 9599 9B27 81D1
8133
7592 8BB7 6290 7732 8A25
5436 5450 5462
5A1E 9981 812E 8147 9912 9BBE 9BD8
5167 5185 6C1D 9317
6041 5AE9 5AF0
80FD
59AE
5C3C 576D 6029 6CE5 7C7E 502A 5C54 79DC 90F3 94CC
57FF 5A57 6DE3 730A 86AD 68FF 8DDC 815D 8063 873A
89EC 8C8E 8F17 9713 9CB5 9BD3 9BE2 9E91 9F6F 81E1
4F31 4F60 62DF 62B3 72D4 82E8 67C5 65CE 6672 5B74
922E 999C 5117 511E 96AC 64EC 85BF 6AB7 807B
5C70 6C3C 4F32 8FE1 6635 80D2 9006 533F 7724 5804
60C4 5ADF 6135 6EBA 7768 817B 66B1 7E0C 8ABD 81A9
5B3A
88AE
62C8 852B
5E74 79CA 79E5 9C87 9B8E 9CB6 9ECF 9BF0
6D8A 637B 6DF0 713E 8DC8 8F87 8F97 649A 64B5 78BE
8F26 7C10 8E4D 6506 8E68 8E8E
5344 5EFF 5FF5 59E9 5538 57DD 824C 9F30
54D6 9D47
5B22 5B43
917F 91B8 91C0
5A18
9E1F 8311 8885 9CE5 5ACB 88CA 8526 6A22 5B1D 892D
5B32
5C3F 8132
634F 63D1
82F6
5E07 573C 67BF 9667 6D85 75C6 8042 81EC 556E 60D7
83CD 9689 55A6 655C 6E7C 55EB 5D72 8E02 565B 6470
69F7 8E17 954A 954D 5DAD 7BDE 81F2 931C 989E 8E51
5699 8076 93B3 95D1 5B7C 5B7D 6AF1 7C4B 8616 56C1
9F67 7CF1 7CF5 8825 9448 56D3 8B98 8EA1 9477 9873
9480
5DD5
56DC 60A8
62F0
810C
5B81 549B 62E7 72DE 82E7 67E0 804D 5BCD 5BD5 752F
5BD7 5BDC 5BE7 511C 51DD 5680 5B23 64F0 7370 85B4
6AB8 8079 944F 9B21 9E0B
6A63 77C3
4F5E 4FAB 6CDE 6FD8
6F9D
599E
725B 6C7C
5FF8 626D 72C3 7EBD 7084 94AE 7D10 83A5 9215 9775
8842
725C
519C 4FAC 54DD 6D53 8113 79FE 8FB2 5102 8FB3 5665
6FC3 857D 6A82 71F6 79AF 81BF 7A60 895B 91B2 6B01
7E77
5F04 630A 7651 9F48
7FBA
5542
69C8 8028 7373 6ABD 9392 941E 8B73
5974 5B65 9A7D 7B2F 99D1
4F2E 52AA 5F29 782E 80EC
6012 5089 6419
5973 9495 7C79 91F9
6C91 6067 6712 8844
597B
6E1C 6696 7156 7157 992A
759F 8650 7878 7627
9EC1
90CD 632A 689B 50A9 513A
6A60
8BFA 558F 63BF 903D 611E 6426 9518 643B 6992 7A2C
8AFE 8E43 7CD1 61E6 61E7 7CE5 7A64 7CEF
FDD0-004F
5594 5662
54E6
7B7D
8BB4 6CA4 6B27 6BB4 74EF 9E25 5878 6F1A 6B50 6BC6
71B0 750C 9D0E 6AD9 8B33 93C2 9DD7
8192 9F75
5418 5455 5076 8162 5614 8026 8545 85D5
6004 616A
85F2
FDD0-0050
5991 7685 8DB4 8225 556A 8469
6777 722C 63B1 7436 7B62 6F56
5E0A 5E15 6015 8899
62CD
4FF3 5F98 6392 7305 68D1 724C 8F2B 7C30 7C32 72A4
5EF9
54CC 6D3E 6E43 848E 9383
7705 7819 7568 6F58 6500
723F 6D00 76D8 8DD8 5ABB 5E4B 84B0 642B 69C3 76E4
78D0 7E0F 78FB 8E52 700A 87E0 8E63 939C 97B6
51B8 5224 6C9C 62DA 6CEE 708D 53DB 7249 76FC 7554
8041 88A2 8A4A 6EBF 9816 92EC 897B 947B
9D65
4E53 6C97 80EE 96F1 6EC2 8196 9736
5390 5E9E 5396 9004 65C1 823D 5ACE 5FAC 8783 9CD1
9F8E 9F90
55D9 802A 89AB
7090 80A8 80D6
629B 62CB 812C
5228 5486 5789 5E96 72CD 70B0 722E 888D 530F 8EF3
9784 9E83 9E85
8DD1
5945 6CE1 70AE 75B1 76B0 7832 9EAD 791F 792E
8422 891C
5478 600C 80A7 67F8 80DA 8843 9185
962B 966A 57F9 6BF0 8D54 952B 88F4 88F5 8CE0 99CD
4FD6
4F02 6C9B 4F69 5E14 59F5 65BE 65C6 6D7F 73EE 914D
7B29 8F94 99B7 5D8F 9708 8F61
84DC
55B7 5674 6B55
74EB 76C6 6E53 8450
5460 7FF8
55AF
5309 6026 62A8 6072 7830 6888 70F9 7851 8EEF 959B
6F30 562D 6F8E 78DE
8283 670B 6337 7AFC 5017 8391 580B 5F38 5F6D 68DA
6916 5873 787C 7A1D 84EC 9E4F 69F0 6A25 71A2 6189
8F23 7BE3 81A8 930B 97F8 9AFC 87DA 87DB 9B05 7E84
97FC 9D6C 9A2F 9B14 945D
6367 6DCE 768F 527B
63BD 692A 78B0 8E2B
7BF7
4E15 4F13 4F3E 6279 7EB0 90B3 576F 62AB 62B7 708B
72C9 7812 6082 79DB 79E0 7D15 94CD 65C7 7FCD 801A
8C7E 9208 921A 9239 925F 9294 5288 78C7 99D3 9AEC
567C 930D 9B7E 9B8D 61B5 7914 7915 9739
76AE 9630 8298 5CAF 6787 6BDE 72D3 80B6 6BD7 6BD8
75B2 868D 90EB 9674 5564 57E4 5D25 86BD 86BE 8C7C
7137 7435 813E 8157 9C8F 7F74 818D 8731 9B6E 58C0
7BFA 87B7 8C94 9D67 7F86 6707 9F19
5339 5E80 758B 4EF3 572E 82C9 8134 75DE 92A2 8AC0
9D04 64D7 567D 7656 56AD
5C41 6DE0 6E12 63CA 91FD 5AB2 5AD3 7765 8F9F 6F4E
7A2B 50FB 6FBC 568A 7513 7588 8B6C 95E2 9DFF 9E0A
698C
56E8 504F 5AA5 728F 7BC7 7FE9 9342 9DA3
9A88 80FC 8141 6944 6969 8CC6 8DF0 8ADA 9ABF 8E41
99E2 9A08
8991 8C1D 8CB5 8ADE
7247 9A97 9A17 9A19
9B78
527D 6153 7F25 98D8 65DA 7FF2 87B5 72A5 98C3 98C4
9B52
5AD6 74E2 7AC2 85B8 95DD
6B8D 5F6F 779F 7BFB 7E39 91A5 76AB 9860
7968 50C4 52E1 560C 5FB1 6F02
6C15 6487 6486 66BC 77A5
4E3F 82E4 9405
5AF3
59D8 62FC 7917 7A66 99AA 9A5E
73AD 8D2B 5A26 8CA7 7415 5AD4 9891 983B 5B2A 7371
85B2 56AC 77C9 8819 98A6 9870
54C1 6980
725D 6C56 8058
4E52 7539 4FDC 5A09 6D84 782F 8060 8275 7AEE 9829
5E73 8BC4 51ED 546F 576A 6CD9 82F9 90F1 5C4F 5E21
67B0 6D34 73B6 80D3 8353 74F6 5C5B 5E32 6DDC 840D
86B2 5E48 7129 7501 7F3E 84F1 86E2 8A55 8EFF 9C86
51F4 617F 7BB3 8F27 6191 9B83 6A98 7C08 860B
5CBC 5840
948B 5761 5CA5 6CCA 9887 6E8C 9255 9817 93FA
5A46 5619 8522 9131 76A4 8B08 6AC7
53F5 5C00 94B7 7B38 99CA
5CB6 7087 8FEB 6540 6622 6D26 73C0 70DE 7834 7836
91D9 7C95 84AA 9B44 9197
6CFC 6872 6F51
5256 5A1D
6294 6299 634A 638A 88D2 7B81 9307
5485 54E3 5A44 7283 5ECD
4EC6 6534 6251 9660 5657 64B2 6F7D 64C8 9BC6
530D 8386 812F 83E9 83D0 8461 84B1 84B2 50D5 917A
58A3 735B 749E 6FEE 77A8 7A59 9564 8965 7E80 93F7
5724 6734 5703 6D66 70F3 666E 6EA5 8C31 8AE9 6A38
6C06 6A8F 9568 8B5C 8E7C 9420
94FA 8216 8217 92EA 7011 66DD
5DEC 5DED 99C7 8D0C
FDD0-0051
4E03 8FC9 6C8F 59BB 67D2 501B 51C4 6816 6864 90EA
5A38 60BD 687C 6DD2 840B 6532 671F 68F2 6B3A 86E3
50DB 5601 617D 69BF 6F06 7DC0 617C 69ED 8AC6 8AFF
970B 8E4A 9B4C 93DA 9D88
4E93 7941 9F50 573B 5C90 5C93 5FEF 82AA 4E9D 5176
5947 6589 6B67 7541 7947 7948 80B5 4FDF 75A7 7AD2
5258 658A 65C2 8006 8110 8691 8694 869A 9880 57FC
5D0E 5E3A 6391 6DC7 7309 7566 8401 8415 8DC2 8EDD
91EE 9A90 9A91 68CA 68CB 7426 742A 797A 86F4 612D
7881 7895 951C 980E 9B3F 65D7 7CB8 7DA5 7DA6 7DA8
871D 871E 9F4A 7482 79A5 8572 8E11 9321 9CAF 61E0
6FDD 85C4 6AB1 6AC0 81CD 9A0E 9A0F 9CCD 8604 9BD5
9D78 9D80 9E92 7E83 8269 8810 9B10 9C2D 7382 9EA1
4E5E 9094 4F01 5C7A 5C82 8291 542F 5447 675E 7398
76C0 5518 8C48 8D77 5553 5554 5A4D 555F 7EEE 6675
68E8 7DAE 7DBA 8AEC 95D9
6C14 8BAB 5FD4 6C17 6C54 8FC4 5F03 6C7D 77F5 829E
546E 6CE3 7081 76F5 54A0 5951 780C 6814 6C23 8A16
552D 6B2B 5921 68C4 6E46 6E47 847A 789B 6456 66A3
7508 78B6 5650 6187 5668 61A9 78DC 78E7 78E9 7F4A
87FF 9F1C
7F3C 621A 6E0F 8904 7DD5 87A7 7C2F 7C31 7C4F
6390 845C
62E4
8DD2 9160
5736 51BE 5E22 6070 6D3D 6B8E 7848 6118 9AC2
9790
5343 4EDF 9621 5731 5732 5977 6266 6C58 828A 8FC1
4F65 5C8D 6744 6C67 74E9 833E 6B26 81E4 948E 62EA
7275 7C81 515B 60AD 8688 8C38 94C5 5A5C 5B6F 727D
91FA 6394 8C26 9206 96C3 50C9 6106 7B7E 925B 9A9E
9E50 6173 6434 6481 7B9E 8AD0 9077 8930 8B19 9845
6AB6 6510 6511 6ACF 7C3D 9D6E 5B45 6513 9A2B 9B1D
9B1C 7C64 97C6
4EF1 5C92 5FF4 6272 62D1 524D 94A4 6B6C 8654 94B1
94B3 63AE 63F5 8EE1 5A8A 9210 976C 9257 5898 69A9
7B9D 92AD 6F5B 6F5C 7FAC 8541 6A6C 9322 9ED4 9EDA
9A1D 6FF3 9A1A 704A 9C2C
51F5 6D45 80B7 6DFA 8125 55DB 5D70 9063 69CF 8181
8738 8C34 7F31 7E7E 8B74
6B20 520B 82A1 4FD4 831C 5029 6093 5811 5094 5D4C
68C8 6920 614A 7698 84A8 5879 6B49 7DAA 8533 5119
69E7 7BCF 8F24 7BDF 58CD 7E34 9C1C
7ACF 9386 93F2 7C56 9453
545B 7F8C 6215 6217 65A8 67AA 73B1 7F97 7310 8DC4
690C 6EAC 8154 55C6 8723 9516 5D88 6227 69CD 7244
7472 7FAB 9535 7BEC 9306 8B12 8E4C 956A 8E61 9397
93D8
4E2C 5F37 5F3A 5899 5AF1 8537 6A2F 6F12 8503 58BB
5B19 5EE7 8594 6AA3 7246 8262 8620
62A2 7F9F 6436 7FA5 588F 7E48 8941 7E66 93F9
709D 5534 7197 7FBB
55F4 7347
6084 7857 90FB 5D6A 8DF7 9121 9125 5281 6572 6BC3
8E0D 9539 589D 981D 9AB9 58BD 5E67 6A47 71C6 7F32
78FD 936B 936C 7E51 8DAC 8E7A 9430
4E54 4FA8 834D 835E 6865 785A 83EC 55AC 50D1 8C2F
563A 5AF6 6194 854E 9792 6A35 6A4B 7644 77A7 7904
85EE 8DAB 9408 97BD 9866
5DE7 91E5 6100 9ADC
4FCF 8BEE 9657 5CED 5E29 7A8D 6BBB 7FD8 8A9A 9ADA
50FA 64AC 64BD 9798 97D2 7AC5 7FF9 8B59 8E88
69D7 729E
767F 807A
4E14
5207 59BE 602F 90C4 5327 7A83 608F 6308 6D2F 60EC
6DC1 7B21 611C 86EA 6705 7BA7 7DC1 9532 7BCB 8E25
7A55 85D2 9365 9BDC 9411 7ACA
82C6 503F 5AAB 7C61
4EB2 4FB5 94A6 887E 9A8E 5A87 5D5A 6B3D 7D85 8A9B
5D94 89AA 9849 99F8 9BBC 5BF4
5E88 82A9 82B9 57C1 73E1 79E6 8039 83E6 8699 6366
83F3 7434 7439 79BD 9219 96C2 52E4 55EA 5AC0 6EB1
9772 616C 5659 64D2 65B3 9CF9 61C4 6A8E 6FBF 763D
8793 61C3 8804 9B35 9D6D
5745 6611 7B09 68AB 8D7E 5BD1 9513 5BDD 5BE2 92DF
87BC
5422 5423 628B 6C81 551A 83E3 63FF 6407 64B3 7019
85FD
72C5 9751 9752 6C22 8F7B 503E 537F 90EC 570A 57E5
5BC8 6C2B 6DF8 6E05 50BE 873B 8F15 9CAD 944B
591D 7520 5260 52CD 60C5 6B91 6674 68FE 6C30 845D
6692 64CF 6A08 64CE 6AA0 9EE5
82D8 9877 8BF7 5EBC 9803 5ECE 6F00 8ACB 6ABE
5E86 51CA 6385 6BB8 7883 7B90 9758 6176 78D8 78EC
7F44 8B26
7858 6AE6
828E 5314
536D 909B 5B86 7A77 7A79 8315 684F 7B3B 7B47 8D79
60F8 712A 712D 743C 823C 86E9 86EC 7162 7758 8DEB
928E 778F 7AAE 511D 618C 6A69 749A 85D1 74CA 7AC6
85ED 74D7
718D
4E18 4E20 90B1 5775 6058 79CB 79CC 86AF 5A9D 8429
6978 84F2 9E59 7BCD 7DE7 8775 7A50 8DA5 9CC5 87D7
97A6 97A7 9C0C 9C0D 9D96 8824 9F9D
53F4 56DA 624F 72B0 738C 6C53 808D 6C42 866C 6CC5
866F 4FC5 89D3 8A04 8A05 914B 91D3 5512 6D57 7D0C
838D 900E 9011 91DA 6882 6B8F 6BEC 7403 8D47 5D37
5DEF 6E1E 6E6D 76B3 76DA 9052 716A 7D7F 86F7 88D8
5DF0 89E9 8CD5 7486 8764 92B6 9194 9B82 9F3D 9BC4
9C3D
641D 7CD7
91FB 8612
533A 66F2 4F39 4F49 5324 5C96 8BCE 9639 9A71 5765
5C48 5CA8 5CB4 62BE 6D40 795B 80E0 88AA 5340 7D36
86C6 8EAF 7B41 7CAC 86D0 8A58 8D8B 5D87 6188 99C6
657A 8AB3 957C 99C8 9EB9 9AF7 9B7C 8DA8 9EAF 89B0
8EC0 9EB4 9EE2 89BB 9A45 9C38 9C4B
4F62 52AC 65AA 6710 80CA 83C3 9E32 6DED 6E20 7D47
7FD1 844B 8EE5 8556 7496 78F2 87B6 9D1D 74A9 87DD
77BF 9F29 8627 5FC2 7048 6235 6B0B 6C0D 7C67 81DE
766F 8837 8862 8EA3 883C 947A 9E1C
53D6 7AD8 5A36 8A53 7AEC 877A 9F8B 9F72
53BA 53BB 521E 547F 551F 801D 9612 89D1 8DA3 95B4
9EAE 95C3 89B7 9F01
8FF2 8850
5CD1 5F2E 606E 609B 5708 570F 68EC 99E9 9409
5168 6743 4F7A 8BE0 59FE 6CC9 6D24 8343 62F3 7277
8F81 5573 57E2 5A58 60D3 75CA 7842 94E8 6E76 7288
7B4C 7D5F 8472 643C 7454 89E0 8A6E 8DE7 8F07 8737
9293 6A29 8E21 7E13 919B 9CC8 9B08 9A21 5B49 5DCF
9C01 6B0A 9F64 8838 98A7 9874
72AC 6C71 754E 70C7 7EFB 7DA3 8647
529D 5238 7276 52E7 97CF 52F8
72AD 6926 697E 95CE
7F3A 849B 9619
7638
5374 537B 57C6 5D05 5BC9 60AB 7437 96C0 785E 786E
9615 5859 6409 76B5 788F 6128 69B7 58A7 6164 78BA
78BB 8D9E 71E9 95CB 7910 95D5 704D 792D
9E4A 9D72
590B 56F7 5CEE 9021
5BAD 5E2C 88D9 7FA3 7FA4 88E0
FDD0-0052
5465 80B0 887B 8887 86A6 88A1 86BA 7136 9AE5 562B
9AEF 71C3 7E4E
5184 5189 59CC 82D2 67D3 73C3 5AA3 6A6A
8485
7A63 5134 52F7 703C 737D 8618 79B3 74E4 7A70 8E9F
9B24
58CC 56B7 58E4 6518 7219 7E95
8BA9 61F9 8B72 8B93
5A06 835B 9976 6861 5B08 8558 6A48 8953 9952
6270 96A2 64FE
7ED5 9076 7E5E
60F9
70ED 71B1
4EBA 4EBB 4EC1 58EC 5FC8 6732 5FCE 79C2 82A2 9213
9B5C 928B 9D40
5FCD 834F 6820 6823 8375 79F9 68EF 7A14
5203 5204 8BA4 4EDE 4EED 8BB1 4EFB 5C7B 5C83 6268
7EAB 598A 6752 7263 7EB4 8095 8F6B 97E7 996A 59D9
794D 7D09 887D 7D1D 8A12 8ED4 6895 88B5 8EE0 7D4D
814D 845A 976D 9771 97CC 98EA 8A8D 9901
7D9B 8EB5
6254
4ECD 8FB8 793D 967E
82BF
65E5 9A72 56F8 91F0 9224 99B9
8338
620E 809C 6804 72E8 7ED2 8319 8363 5BB9 6BE7 70FF
5AB6 5D58 6411 7D68 7FA2 5AC6 5D64 6408 69B5 6EB6
84C9 6995 69AE 7194 7462 7A41 7E19 877E 8923 9555
878D 878E 99E5 9AF6 5B2B 5DB8 7203 9394 5DC6 701C
66E7 8811
5197 5B82 5748 5087 8EF5 6C04
9D27
7A43
53B9 79B8 67D4 5A83 63C9 6E18 8447 7163 7448 7CC5
875A 8E42 8F2E 9352 97A3 74C7 9A25 9C07 9D94
7C88 697A 97D6
8089 5B8D 816C
909A 5982 4F9E 5E24 8339 6847 88BD 94F7 6E2A 7B4E
8498 92A3 8560 8761 5112 9D11 5685 5B2C 5B7A 6FE1
85B7 9D3D 66D8 71F8 8966 8815 98A5 91B9 986C 9C6C
6C5D 8097 4E73 8FB1 910F 64E9
5165 6D33 55D5 5AB7 6EBD 7F1B 84D0 8925 7E1F
6256 8FBC 6741 9CF0 5DBF
633C
5827 648B 58D6
962E 670A 8F6F 800E 5044 8EDF 5A86 744C 789D 7DDB
8F2D 74C0 791D
5A51 6875 7524 7DCC 8564
854A 854B 6A64 7E60 8602 8603
6C6D 82AE 6798 868B 9510 745E 8739 777F 92B3 92ED
53E1 58E1
77A4
95F0 6DA6 958F 95A0 6F64 6A4D 81B6
637C
53D2 82E5 504C 5F31 9100 6E03 712B 6949 84BB 7BAC
7BDB 7207 9C19 9C2F 9DB8
5D76
FDD0-0053
4EE8 6331 6332 6492
6D12 8A2F 9778 6F75 7051 8EA0
5345 6CE7 98D2 810E 8428 9212 644B 99BA 98AF 85A9
6AD2 8644
96A1
6BE2 6122 63CC 585E 6BF8 816E 567B 9CC3 984B 9C13
55EE 8D5B 50FF 8CFD 7C3A
5625
4E09 5F0E 53C1 6BF5 6BFF 7299 9B16
4ED0 4F1E 5098 7CC1 7CC2 9993 7CDD 7CE3 7CE4 7E56
93D2 93FE 9730 994A
4FD5 5E34 60B7 6563 9590
58ED 6BF6 5381 6A75
6852 6851
55D3 6421 78C9 892C 98A1 939F 9859
4E27 55AA
69E1
63BB 6145 6414 6E9E 9A9A 7F2B 7E45 81CA 9CCB 9A12
9A37 9C20 9C62
626B 6383 5AC2
57FD 7619 6C09 77C2 9ADE
87A6
95AA
8272 6D13 681C 6DA9 556C 94EF 96ED 6B6E 7417 55C7
745F 6B70 92AB 6F81 61CE 64CC 6FC7 7637 7A51 6F80
74B1 7012 7A61 7E6C 8F56 93FC 8B45 98CB
6E0B 6FCF 7A6F
68EE 692E 69EE 8942
50E7 9B19
6740 6C99 7EB1 4E77 5239 524E 7802 5526 6BBA 7300
7C86 7D17 838E 686C 6BEE 94E9 75E7 7870 715E 8531
88DF 699D 6A27 9B66 9CA8 93A9 9BCA 9BCB
50BB 510D
503D 553C 5551 5565 5E39 8410 53A6 55A2 5EC8 6B43
7FDC 7B91 7FE3 95AF 970E
7E4C
7B5B 917E 7BE9 7C01 7C1B 91C3
7E7A
6652 95B7 66EC
5C71 5F61 9096 5220 522A 6749 829F 59CD 59D7 82EB
886B 9490 57CF 633B 67F5 72E6 73CA 8222 75C1 8120
8ED5 7B18 8DDA 527C 6427 5607 5E53 717D 6F78 6F98
6A86 7E3F 81BB 9BC5 7FB4 7FB6
95EA 9655 965D 9583 6671 7154 7752 718C 89A2
8BAA 6C55 759D 5261 6247 8A15 8D78 639E 91E4 5093
5584 928F 9A9F 50D0 912F 58A0 58A1 6F6C 7F2E 5B17
64C5 6A3F 6B5A 81B3 78F0 8B06 8D61 7E55 87EE 87FA
8B71 8D0D 9425 994D 9A38 9CDD 7057 9C53 9C54
5738 6763 958A 657E
4F24 6B87 5546 89DE 50B7 5892 616F 6EF3 6F21 850F
6BA4 71B5 87AA 89F4 8B2A 9B3A
57A7 6244 664C 8D4F 8CDE 8D18 945C
4E04 4E0A 5C19 5C1A 6066 7EF1 7DD4 979D
4EE9 88F3
5F30 634E 70E7 83A6 68A2 713C 7A0D 65D3 7B72 8244
86F8 8F0E 71D2 98B5 9AFE 9BB9
52FA 828D 82D5 67D6 73BF 7AF0 97F6
5C11
52AD 5372 90B5 7ECD 54E8 5A0B 8891 7D39 7744 7DA4
6F72
8571
5962 731E 8D4A 756C 7572 8F0B 8CD2 8CD6 6AA8
820C 4F58 8675 86C7 86E5
820D 6368
538D 8BBE 793E 5399 5C04 6D89 6DBB 6E09 8A2D 8D66
5F3D 6151 6442 6444 6EE0 6174 6475 850E 6B59 8802
97D8 9A07 61FE 651D 7044 9E9D 6B07
820E
7533 5C7E 625F 4F38 8EAB 4F81 547B 59BD 7C76 7EC5
8BDC 59FA 67DB 6C20 73C5 7A7C 7C78 5A20 5CF7 7521
7712 7837 8398 6552 6DF1 7D33 515F 68FD 8460 88D1
8A37 84E1 8A75 7527 8518 71CA 8593 99EA 9CB9 66D1
9D62 9BF5 9C3A
4EC0 751A 795E
90A5 5F1E 5BA1 77E4 54C2 77E7 5BB7 8C02 8C09 5A76
6E16 8A20 5BE9 8AD7 9823 9B6B 66CB 9825 77AB 5B38
700B 89BE 8B85
80BE 4FBA 661A 80C2 6D81 7718 6E17 7973 8124 814E
613C 614E 6939 7606 7F67 8703 8704 6EF2 92E0 762E
5814 698A 9C30
5347 751F 9629 544F 58F0 6598 6607 6CE9 72CC 82FC
680D 6B85 7272 73C4 965E 9679 7B19 6E66 713A 7525
924E 8072 9F2A 9D7F
7EF3 61B4 7E69 8B5D
7701 771A 5057 6E3B
5723 80DC 6660 5270 76DB 5269 52DD 8CB9 5D4A 741E
8056 58AD 69BA 8542 8CF8
7AD4 66FB 6A73
5C38 5931 5E08 545E 8671 8BD7 90BF 9E24 5C4D 65BD
6D49 72EE 5E2B 7D41 91F6 6E64 6E7F 8479 921F 6EAE
6EBC 7345 8492 84CD 8A69 9247 9248 7461 9CF2 8768
9CFE 8937 9CBA 6FD5 9366 9BF4 9C24 9DB3 8979
5341 9963 77F3 8FBB 4E6D 65F6 5B9E 5B9F 65F9 98E0
59FC 5CD5 70BB 794F 8680 98DF 57D8 6642 83B3 5BD4
6E5C 9048 5852 6EA1 8494 9250 5BE6 69AF 8755 9CA5
9F2B 9F2D 9C23
53F2 77E2 4E68 8C55 4F7F 59CB 9A76 5158 5BA9 5C4E
7B36 9242 99DB
58EB 6C0F 793B 4E17 4E16 4ED5 5E02 793A 4F3C 534B
5F0F 5FD5 4E8A 53D3 623A 4E8B 4F8D 52BF 5469 67F9
89C6 8BD5 9970 519F 5BA4 6040 6043 62ED 662F 6630
67BE 67FF 7702 8D33 9002 683B 70D2 770E 7721 8210
8F7C 901D 94C8 8996 8C49 91C8 5A9E 5D3C 5F11 5FA5
63D3 8C25 8CB0 91CA 52E2 55DC 5F12 7757 7B6E 89E2
8A66 8EFE 9230 9243 98FE 8213 8A93 9069 927D 596D
92B4 9919 991D 566C 5B15 6FA8 8ADF 8AE1 907E 87AB
8B1A 7C2D 896B 91CB
4F66 7ACD 8BC6 62FE 5319 5D75 6981 7176 7BD2 9B96
7C42 8B58 9C18
53CE 6536
624B 5B88 57A8 9996 824F
5BFF 53D7 72E9 517D 552E 6388 6DAD 7EF6 75E9 58FD
5900 7626 7DAC 7378 93C9
624C 7363
4E66 6BB3 5C17 6292 7EBE 53D4 6778 67A2 964E 59DD
500F 5010 66F8 6B8A 7D13 6393 68B3 6DD1 7102 83FD
8ED7 9103 758E 758F 8212 6445 6BF9 7D80 8F93 7479
8DFE 8E08 6A1E 852C 8F38 6A7E 9B9B 5135 6504 9D68
79EB 5A4C 5B70 8D4E 587E 719F 74B9 8D16
9F21 5C5E 6691 668F 9ECD 7F72 8700 9F20 6F7B 85A5
85AF 66D9 7659 85F7 8961 8969 5C6C 9483
672E 672F 620D 675F 6CAD 8FF0 4FB8 51C1 54B0 6037
6811 7AD6 8357 6055 6352 5EB6 5EBB 7D49 8481 8853
9683 5C0C 88CB 6570 7AEA 8167 9265 5885 6F31 6F44
6578 6F8D 8C4E 6A39 6FD6 9330 93E3 9D90 866A
702D 7CEC 8834 9C6A 9C70
5237 5530
800D
8A9C
8870 6454
7529
5E05 5E25 87C0 535B
95E9 62F4 9582 6813
6DAE 8168
53CC 971C 96D9 5B40 9AA6 5B47 9A3B 6B06 7935 9DDE
9E74 826D 9A66 9E18
723D 587D 6161 6F3A 6A09 7E14
7040
93EF
8C01 813D 8AB0
6C34
5E28 6D97 6D9A 7971 7A05 7A0E 88DE 7761 7793
6C35 6C3A 9596
542E
987A 821C 9806 8563 6A53 779A 77AC 9B0A
8BF4 54FE 8AAA 8AAC
5981 70C1 6714 94C4 6B36 7855 77DF 6420 84B4 69CA
7361 78A9 7BBE 9399 720D 9460
53B6 7E9F 4E1D 53F8 7CF9 79C1 549D 6CC0 601D 8652
9E36 5AA4 65AF 7D72 7F0C 86F3 6952 7997 9270 98D4
51D8 53AE 69B9 79A0 7F73 8724 9536 5636 565D 5EDD
6495 6F8C 78C3 7DE6 856C 92D6 71CD 8784 87D6 87F4
98B8 9A26 9401 9DE5 9F36 7C6D
6B7B
5DF3 4E96 56DB 5BFA 6C5C 4F40 5155 59D2 6CE4 7940
4FA1 5B60 676B 6CD7 9972 9A77 5A30 67F6 726D 6D0D
6D98 8082 98E4 7B25 801C 91F2 7AE2 8997 55E3 8086
8C84 9236 923B 98FC 79A9 99DF 857C 5129 7003
4FEC 6056 92AF
5FEA 677E 6780 5A00 67D7 502F 51C7 5D27 5EBA 68A5
6DDE 83D8 5D69 7879 8719 61BD 6FCD 6AA7 9376 9B06
6002 609A 8038 7AE6 50B1 612F 6964 5D77 616B 8073
99F7
8BBC 5B8B 8BF5 9001 9882 8A1F 980C 8AA6 9938
67A9 93B9
635C 910B 55D6 5EC0 5ECB 641C 6EB2 7340 8490 84C3
998A 6449 98D5 6457 953C 8258 878B 9199 93AA 993F
98BC 98BE 9A2A
53DC 53DF 5081 55FE 778D 64DE 85AE 64FB 85EA 6AE2
7C54
8184 7636
55FD
82CF 7526 9165 7A23 7AA3 7A4C 8607 8613 6AEF 56CC
4FD7
738A 5919 6CDD 8083 6D2C 6D91 73DF 7D20 83A4 901F
5BBF 6880 6B90 7C9B 9A95 5083 7C9F 8C21 55C9 5850
5851 5ACA 612B 6EAF 6EB8 8085 9061 9E54 50F3 612C
69A1 8186 850C 89EB 8D9A 906C 619F 6A0E 6A15 6F65
78BF 92C9 9917 6F5A 7E24 6A5A 749B 7C0C 85D7 8B16
8E5C 9A4C 9C50 9DEB
8BC9 8A34 9BC2
72FB 75E0 9178
5334
7958 7B07 7B6D 849C 7B97
590A 6535 8295 867D 5020 54F8 6D7D 837D 837E 772D
8470 6ED6 7762 7D8F 71A3 6FC9 9796 96D6
7EE5 968B 968F 9040 96A8 74CD
7021 81B8 9AC4 9AD3
4E97 5C81 7815 795F 8C07 57E3 5D57 9042 6B72 6B73
716B 775F 788E 96A7 5B18 6FBB 7A42 8AB6 8CE5 6A96
71E7 74B2 79AD 6A85 7A57 7A5F 7E40 895A 9083 65DE
7E50 7E78 8B62 9406 9429 97E2
5B59 72F2 836A 5B6B 98E7 640E 733B 84C0 98F1 69C2
8575 859E
635F 7B0B 96BC 7B4D 640D 69AB 7BB0 7C28 93A8 9DBD
5506 5A11 838F 509E 686B 68AD 7743 55CD 7FA7 84D1
644D 7F29 8D96 7C11 7C14 7E2E 9AFF 9BBB
6240 4E7A 5522 7D22 7410 60E2 9501 55E9 669B 6E91
7463 8928 7485 9388 938D 9396 93BB 93C1
9024 6EB9 8736
7411 55E6
FDD0-0054
4ED6 5B83 5979 7260 7942 8DBF 94CA 584C 6999 6EBB
891F 5683 95E7
8E79
5854 6E9A 5896 736D 9CCE 737A 9C28
4EA3 62D3 631E 72E7 95FC 5D09 6DBE 6428 8DF6 905D
9062 69BB 6BFE 79A2 64BB 6FBE 8ABB 8E0F 6A7D 9314
6FCC 8E4B 979C 9B99 95D2 97B3 56BA 95E5 8B76 8EA2
4FA4 549C
56FC 5B61 80CE
51AD 53F0 65F2 90B0 576E 62AC 82D4 67B1 70B1 70B2
83ED 8DC6 9C90 7B88 81FA 98B1 99D8 5113 9B90 5B2F
64E1 85B9 6AAF 7C49
592A 5933 5FF2 6C70 6001 80BD 949B 6CF0 8226 915E
9226 6E99 614B 71E4
7C8F
574D 62A9 8D2A 6039 75D1 8211 8CAA 644A 6EE9 762B
64F9 6524 7058 7671
575B 6619 5013 8C08 90EF 5A52 60D4 8983 6983 75F0
952C 8C2D 58B0 58B5 619B 6F6D 8AC7 9188 58C7 66C7
71C2 931F 9924 6A80 78F9 9843 7F48 85EB 58DC 8B5A
8C9A 91B0 8B60 7F4E
5FD0 5766 8892 94BD 83FC 6BEF 926D 55FF 61B3 61BB
9193 74AE 8962
53F9 70AD 57EE 63A2 509D 6E60 50CB 5606 78B3 8215
6B4E 8CE7
6C64 5763 94F4 6E6F 5621 8025 528F 7FB0 876A 859A
9557 8E5A 93DC 940B 97BA 9F1E
9967 5510 5802 508F 557A 68E0 910C 5858 642A 6E8F
84CE 969A 69B6 6F1F 717B 746D 799F 8185 6A18 78C4
7CC3 819B 6A56 7BD6 7CD6 8797 8E3C 7CDB 87B3 8D6F
91A3 9933 9395 9939 95DB 9944 9DB6
4F16 5E11 5018 5052 6DCC 50A5 8EBA 954B 93B2 513B
6203 66ED 7223 77D8 9482
70EB 6465 8D9F 71D9
5932 5F22 6D9B 7EE6 638F 7D5B 8A5C 5ACD 5E4D 6146
642F 6ED4 69C4 746B 97EC 98F8 7E1A 7E27 6FE4 8B1F
8F41 97B1 97DC 9955
530B 8FEF 54B7 6D2E 9003 6843 9676 5555 68BC 6DD8
7EF9 8404 7979 88EA 7DAF 872A 9780 9184 9789 92FE
932D 99E3 6AAE 9940 9A0A 9F17
8BA8 8A0E
5957
5FD1 5FD2 7279 8CA3 86AE 94FD 615D 92F1 87A3 87D8
71A5 81AF 9F1F
75BC 75CB 5E50 817E 8A8A 6F1B 6ED5 9086 7E22 99E6
8B04 512F 85E4 9A30 7C50 9C27 7C58 9A63
972F
8645
5254 68AF 9511 8E22 64FF 9DC8 9DC9
82D0 5397 8351 7EE8 504D 557C 5D39 60FF 63D0 7A0A
7F07 7F64 9046 9E48 55C1 7445 7D88 78AE 8906 5FB2
6F3D 7DF9 855B 876D 92BB 9898 8DA7 8E44 918D 8B15
8E4F 9357 9CC0 9D3A 984C 9BB7 9D5C 9A20 9BF7 9D97
9D99 79B5 9DE4
4F53 632E 8EB0 9AB5 9BA7 8EC6 9AD4
623B 8FCF 5243 6711 6D1F 501C 608C 6D95 9016 6090
60D5 63A6 9037 60D6 63E5 66FF 6974 88FC 8905 6B52
6BA2 9AF0 8599 568F 9B00 5694 74CB 7C4A 8DAF
5C49 5C5C 7B39 5D5C
5929 5172 5A56 6DFB 915F 9754 9EC7 975D
7530 5C47 6CBA 606C 754B 7551 76F7 80CB 7560 751B
751C 83FE 6E49 5861 586B 6437 923F 9617 7DC2 78CC
7AB4 74B3 95D0 9DC6 9DCF
5FDD 6B84 500E 553A 60BF 6DDF 666A 7420 8146 89CD
75F6 7753 8214 9902 89A5 8CDF 932A 9369 9766
63AD 777C 821A
78B5 9D2B
65EB 4F7B 5EA3 604C 6311 7967 804E
8280 6761 5CA7 5CB9 8FE2 7952 689D 7B24 8414 84DA
84E8 8D92 9F86 6A24 8729 92DA 9797 9AEB 9CA6 9BC8
93A5 9F60 9C37
5BA8 6640 6713 8101 7A95 8A82 65A2 7AB1 5B25
773A 7C9C 7D69 899C 8DF3 7CF6
87A9
5E16 6017 8D34 841C 8051 8CBC
94C1 86C8 50E3 9295 92E8 9D29 9421 9435 9A56
546B 98FB 992E
5385 5E81 6C40 827C 542C 753A 8013 539B 70C3 686F
70F4 7D8E 9793 8074 807C 5EF0 807D 5EF3
9092 5EF7 4EAD 5EAD 839B 505C 5A77 5D49 6E1F 7B73
8476 8713 695F 69B3 95AE 9706 8064 874F 8AEA 9F2E
5722 753C 4FB9 5A17 633A 6D8F 6883 70F6 73FD 8121
8247 988B 8A94 9832
56F2 70B5 901A 75CC 55F5 84EA
4EDD 540C 4F5F 5F64 5CC2 5E9D 54C3 5CDD 72EA 833C
664D 6850 6D75 70D4 783C 8692 772E 79F1 94DC 7AE5
7CA1 7B69 8A77 8D68 916E 9256 50EE 52ED 9275 9285
9907 9C96 6F7C 735E 66C8 6723 6A66 6C03 71D1 729D
81A7 77B3 9BA6
7EDF 6345 6876 7B52 7D71 7D82 6A0B
6078 75DB 8855 615F 6185
5077 5078 5A7E 5AAE 92C0 936E
4EA0 5934 6295 9AB0 7DF0 982D
59B5 94AD 7D0F 6568 98F3 9EC8 8623
900F 7D89
51F8 5B8A 79BF 79C3 6022 7A81 550B 6D8B 6378 5817
6E65 75DC 8456 5D80 92F5 9D5A 9F35
56F3 56FE 51C3 5CF9 5EA9 5F92 6087 6348 837C 9014
5C60 688C 83DF 63EC 7A0C 5715 5857 5D5E 760F 7B61
816F 84A4 922F 5716 5717 5EDC 6F73 8DFF 9174 999F
934E 99FC 9D4C 9D9F 9DCB 9DF5
571F 5721 5410 948D 91F7
514E 8FCC 5154 580D 9D75
6C62 6D82 83B5
6E4D 732F 7153 8C92
56E2 56E3 629F 5278 5718 6171 6476 6F19 69EB 7BFF
6AB2 93C4 7CF0 9DD2 9DFB
7583
5F56 6E6A 8916
63A8 84F7 85EC
5F1A 9893 96A4 5C35 9839 983A 983D 9B4B 7A68 8608
8E6A
4FC0 817F 50D3 8E46 9ABD
4FBB 9000 5A27 717A 86FB 8715 892A 99FE
541E 5451 6D92 554D 671C 711E 564B 66BE 9ED7
5C6F 5749 5FF3 829A 9968 8C58 8C5A 8ED8 98E9 9C80
9B68 9715 81C0 81CB
6C3D 757D
65FD
4E47 4EDB 8BAC 6258 6261 6C51 9966 6754 4F82 5483
62D5 62D6 6CB0 6329 635D 838C 88A5 8A17 6DB6 812B
8131 98E5 9B60 9A5D
9A6E 4F57 9640 9641 5768 5CAE 6CB1 6CB2 72CF 8FF1
7823 7824 8889 9E35 7D3D 5836 8DCE 9161 78A2 99B1
69D6 99C4 99DE 6A50 9B80 9D15 9F27 9A28 9F0D 9A52
9F09
5F75 59A5 5EB9 5AA0 692D 6955 5AF7 6A62 9D4E 9B0C
9C16
67DD 6BE4 553E 841A 8DC5 6BFB 7BA8 8600 7C5C
9A7C 99DD
FDD0-0057
7A75 52B8 6316 6D3C 5A32 7556 7A8A 5AA7 55D7 86D9
6432 6E9B 6F25 7AAA 9F03 6528
5A03
74E6 4F64 90B7 5493
889C 8049 55E2 817D 8183 896A 97C8 97E4
5C72 74F2 54C7
6B6A 558E 7AF5
5D34
5916 591E 9861
5F2F 525C 5A60 5E35 5846 6E7E 873F 6F6B 8C4C 5F4E
58EA 7063
4E38 5213 6C4D 7EA8 8284 5B8C 5C8F 628F 73A9 7D08
6356 987D 70F7 7413 9811 7FEB
5B9B 5007 550D 633D 76CC 57E6 5A49 60CB 665A 689A
7EFE 8118 83C0 8416 6669 667C 6900 742C 7696 7579
7755 7897 7DA9 7DB0 8F13 8E20 92C4 92D4
4E07 534D 5350 59A7 5FE8 6365 8115 8CA6 842C 8155
8F10 6FAB 858D 933D 87C3 8D03 93AB 8D0E
909C 6764 7B02
5C23 5C2A 5C2B 6C6A 5C29
4EA1 4EBE 5166 738B 4EFC 5F7A 83A3 869F
7F52 7F51 5F80 5F83 7F54 5F8D 60D8 83F5 6680 68E2
86E7 8F8B 7DB2 8744 8AB7 8F1E 7007 9B4D
5984 5FD8 8FCB 65FA 76F3 671B 6722
6789 7139
5371 5A01 70D3 504E 840E 9036 9687 9688 55B4 5A99
6104 63CB 63FB 6E28 8468 8473 5FAE 6933 6972 6EA6
7168 8A74 8732 875B 89A3 8587 71F0 9CC2 5DCD 9C03
9C04
56D7 97E6 5729 56F4 5E0F 6CA9 8FDD 95F1 5CD7 5CDE
6D08 97CB 6845 6DA0 552F 5E37 60DF 7859 7EF4 55A1
570D 5A81 5D6C 5E43 6E4B 6E88 741F 9055 6F4D 7DAD
84F6 912C 6F59 6F7F 78D1 9180 6FF0 934F 95C8 9BA0
7653 89B9 72A9 973A 6B08
5383 4F1F 4F2A 5C3E 7EAC 829B 82C7 59D4 709C 73AE
6D27 5A13 5C57 6D58 8371 8BFF 5049 507D 5D23 68B6
75CF 784A 9AA9 5D54 5FAB 6107 7325 8466 848D 9AAA
9AAB 6690 6932 7152 744B 75FF 8172 8249 97EA 50DE
64B1 78C8 9C94 5BEA 7DEF 853F 8AC9 8E13 97D1 9820
85B3 5130 6FFB 9361 9BAA 58DD 7022 97D9 98B9 97E1
8624 6596
536B 4E3A 672A 4F4D 5473 82FF 70BA 754F 80C3 53DE
8ECE 5C09 83CB 8C13 5582 5AA6 6E2D 7232 715F 78A8
851A 873C 6170 71AD 729A 7DED 885B 61C0 748F 7F7B
885E 8B02 9927 9B87 87B1 893D 9935 9B4F 85EF 8F4A
93CF 9728 9CDA 8636 9956 8B86 8E97 8B8F 8E9B
6364 7140 732C 589B 7E05 875F 5DB6
6637 586D 6E29 6985 6B9F 6EAB 7465 8F92 761F 8570
8C71 8F3C 8F40 9CC1 97B0 9C1B 9C2E
5301 6587 5F63 7EB9 82A0 7086 739F 95FB 7D0B 8689
868A 73F3 960C 741D 96EF 7612 805E 99BC 9B70 9CFC
9D0D 87A1 95BA 95BF 87C1 95C5 9F24 95E6
520E 543B 5FDF 6286 5461 80B3 7D0A 687D 8117 7A33
7A4F 7A69
95EE 598F 6C76 83AC 554F 6E02 63FE 6435 9850 74BA
545A 922B 93BE
7FC1 55E1 6EC3 9E5F 8789 9393 9DB2
52DC 5963 5855 5D61 84CA 66A1 7788 806C
74EE 8579 7515 7F4B 9F46
631D 502D 6DA1 83B4 5529 6DB9 6E26 7327 8435 7A9D
7AA9 8717 64BE 8778 8E12
6211 5A50 6370
4EF4 6C83 809F 5367 6782 81E5 5053 637E 6DB4 5A89
5E44 63E1 6E25 7125 786A 6943 815B 65A1 7783 64ED
6FE3 74C1 81D2 96D8 9F8C 9F77
4E4C 572C 5F19 6C59 6C5A 6C61 90AC 545C 5DEB 6747
5C4B 6D3F 8BEC 94A8 70CF 526D 7A8F 9114 55DA 6B4D
8AA3 7BBC 8790 9D2E 93A2 9C1E
65E0 6BCB 5433 5434 543E 5449 829C 90DA 5514 5A2A
6D16 6D6F 8323 8381 68A7 73F8 7966 7121 94FB 9E40
7991 8708 8A88 856A 7491 87F1 9BC3 9D50 8B55 9F2F
9DE1
4E94 5348 4EF5 59A9 5E91 5FE4 6003 65FF 6B66 739D
4FAE 4FC9 5035 6342 554E 5A2C 727E 73F7 6440 7894
9E49 7193 7466 821E 5AF5 5EE1 61AE 6F55 511B 6A46
7512 9D61 8E8C
5140 52FF 620A 9622 4F06 5C7C 6264 575E 5C89 674C
82B4 8FD5 5FE2 7269 77F9 537C 6544 8BEF 609E 609F
60AE 7C85 901C 6664 7110 5A7A 5D4D 75E6 9696 9770
9A9B 5862 5966 5D68 6EA9 96FA 96FE 5BE4 7183 8AA4
9E5C 907B 92C8 7AB9 971A 9F3F 9727 9F40 8601 9A16
9DA9
4E44 52A1 4F0D 52D9 933B
FDD0-0058
5915 516E 5438 5FDA 6271 6C50 8980 5E0C 6278 5365
6614 6790 7A78 80B8 80B9 4FD9 5F86 6038 6053 90D7
997B 550F 595A 5C56 6095 6C25 6D60 727A 72F6 8383
553D 6089 60DC 637F 665E 6878 6B37 6DC5 70EF 7101
7108 740B 7852 83E5 8D65 91F8 5092 60C1 6670 6673
711F 712C 7280 774E 7A00 7C9E 7FD5 823E 910E 5380
5D60 5FAF 6EAA 7699 84A0 9521 50D6 69BD 7155 7184
7188 7199 7DC6 8725 8C68 990F 563B 564F 5B06 5B09
5DB2 6F5D 761C 78CE 819D 51DE 6199 6A28 6A40 71B9
71BA 71BB 7AB8 7E18 7FB2 8785 8787 932B 71E8 77A6
87CB 8C3F 8C40 8C6F 8C95 7CE6 7E65 96DF 9D57 89F9
8B46 91AF 93ED 96B5 5DC7 66E6 7214 72A7 9145 89FD
9F37 8835 9E02 89FF 9474
4E60 90CB 5E2D 7FD2 88AD 89CB 5AB3 693A 84B5 84C6
5D8D 6F1D 89A1 8D98 69E2 8582 96B0 6A84 8B35 93B4
972B 9CDB 98C1 9A31 9A3D 8972 9C3C 9A68
67B2 6D17 73BA 5F99 94E3 559C 8448 8478 9222 9268
9269 5C63 6F07 84F0 6198 66BF 6B56 79A7 8AF0 58D0
7E30 8B11 87E2 8E5D 74BD 56CD 9C5A 77D6 8EA7
5338 534C 620F 5C43 7CFB 9969 546C 5FE5 602C 77FD
7EC6 4FC2 54A5 6044 76FB 90E4 6B2F 7EE4 7D30 91F3
960B 55BA 691E 7FD6 8203 8204 8D87 9699 6140 6ECA
798A 7D8C 8D69 969F 588D 7182 7294 7A27 6F5F 6F99
856E 89A4 6231 9ED6 6232 78F6 8669 993C 9B29 7E6B
56B1 95DF 973C 5C6D 884B
897F 606F 6E13 6A72 72A0 7902 9BD1
8672 75A8 867E 8C3A 5084 9595 7146 7175 98AC 778E
8766 9C15
5323 4FA0 72CE 4FE0 5CE1 67D9 70A0 72ED 965C 5CFD
70DA 72F9 73E8 796B 7856 7FC8 823A 967F 7864 9050
656E 6687 7455 7B6A 821D 78AC 8F96 78CD 7E00 8578
7E16 8D6E 9B7B 8F44 935C 971E 938B 9EE0 9A22 9DB7
959C
4E05 4E0B 4E64 5413 759C 590F 7771 5687 61D7 7F45
93BC 5913 93EC
5737 68BA 6E8A
4EDA 5C73 5148 597E 7EA4 4F61 5FFA 6C19 6774 7946
79C8 82EE 67AE 7C7C 73D7 83B6 6380 8A2E 94E6 8DF9
9170 9528 50CA 5615 929B 9C9C 66B9 97EF 5B10 61B8
859F 9341 893C 97F1 9BAE 8E6E 99A6 5EEF 6515 7E8E
9DB1 8973 8E9A 7E96 9C7B
4F2D 95F2 59B6 5F26 8D24 54B8 550C 6326 6D8E 80D8
5A34 5A39 5A71 7D43 8237 86BF 8854 5563 75EB 86DD
9591 9592 9E47 5ACC 8858 7509 929C 5AFA 5AFB 61AA
648F 6F96 7A34 8AB8 8CE2 71C5 8AF4 8F31 918E 7647
764E 77AF 85D6 7925 9E79 9E99 8D12 9DF3 9DF4 9DFC
51BC 72DD 663E 9669 5D04 6BE8 70CD 7303 86AC 967A
8D7B 7B45 5C1F 5C20 641F 7992 8DE3 9291 7BB2 96AA
5DAE 736B 736E 85D3 934C 71F9 9855 5E70 6507 6AF6
861A 8B63 7381 97C5 986F 7066
4F23 53BF 549E 5C98 82CB 73B0 7EBF 81FD 9650 59ED
5BAA 770C 9665 54EF 57B7 5A0A 5A28 5CF4 6D80 83A7
9677 665B 73FE 784D 9985 774D 7D64 7F10 7FA1 732E
7CAF 7FA8 817A 8706 50E9 50F4 7DAB 8AA2 648A 7DDA
92E7 61B2 6A4C 7E23 930E 9921 58CF 8C4F 9EB2 7017
81D4 737B 7CEE 9F38
4ED9 50F2 7E4A 9466
4E61 8297 76F8 9999 90F7 53A2 554C 9109 910A 5EC2
6E58 7F03 8459 9115 7A25 858C 7BB1 7DD7 81B7 8944
5FC0 9AA7 9E98 6B00 74D6 9576 9472 9A64
74E8 4F6D 8BE6 5EA0 6819 7965 7D74 7FD4 8A73 8DED
4EAB 4EAF 54CD 9977 6651 98E8 60F3 9284 9909 9C9E
66CF 8801 9B9D 9BD7 97FF 9957 995F 9C76
5411 59E0 5DF7 8683 9879 73E6 8C61 5842 7F3F 842B
8856 9805 50CF 52E8 5D91 9297 6A61 8950 56AE 87D3
95C0 940C 9C4C
697F 9C5C
7071 7072 547A 67AD 4FBE 54D3 67B5 9A81 54EE 5BAF
5BB5 5EA8 6D88 7EE1 8653 900D 9E2E 5A4B 689F 7107
7307 8427 75DA 75DF 785D 7863 7A99 7FDB 8437 9500
63F1 7D83 560B 5610 6B4A 6F47 7BAB 8E03 5635 61A2
7362 92B7 9704 5F47 81AE 856D 9B48 9D1E 7A58 7C18
85C3 87C2 87CF 9D35 56A3 701F 7C2B 87F0 9AC7 6AF9
56BB 56C2 9AD0 8828 9A4D 6BCA 8648
6D28 7B05 90E9 5D24 6DC6 8A24 6BBD 7B4A 8AB5
5C0F 6653 6681 7B71 7B7F 769B 66C9 7BE0 8B0F 76A2
5B5D 8096 52B9 54B2 4FF2 6548 6821 6D8D 7B11 5578
509A 6569 8A68 5628 8A9F 562F 6B57 71BD 97A9 6585
6586
6077 6EE7
4E9B 63F3 7332 6954 6B47 874E 880D
52A6 534F 65EA 90AA 5354 80C1 57A5 594A 5CEB 604A
62F9 631F 633E 8105 8107 887A 5055 659C 8C10 7FD3
55CB 6136 643A 744E 7D8A 7181 818E 52F0 64B7 64D5
7DF3 7F2C 8762 978B 9821 8AE7 71F2 64F7 97B5 896D
651C 7E88 8B97 9FA4
5199 51A9 5BEB 85DB
4F33 707A 6CC4 6CFB 7944 7EC1 7F37 5378 6D29 70A7
5368 5A0E 5C51 5C53 505E 5070 5FA2 68B0 70F2 710E
79BC 7D32 4EB5 5A9F 5C5F 6E2B 7D4F 7D6C 8C22 50C1
586E 698D 69AD 8909 5667 5C67 66AC 7DE4 5DB0 5EE8
61C8 6FA5 736C 7CCF 85A2 85A4 9082 97F0 71EE 893B
8B1D 99F4 7009 97A2 7023 7215 7E72 87F9 880F 9F58
9F5B 9F65 9F42 8E9E
810B 5911
5FC3 90A4 59A1 5FFB 82AF 8F9B 6615 677A 6B23 7098
76FA 4FFD 60DE 8A22 920A 950C 65B0 6B46 5EDE 92C5
5B1C 85AA 99A8 946B 99AB
6794 8951 9414
4F08
9620 4F29 56DF 5B5E 4FE1 8ED0 812A 8845 8A2B 712E
7161 99B8 9856 820B 91C1
5FC4 567A
661F 57B6 9A8D 60FA 7329 714B 7446 8165 86F5 89EA
7BB5 7BC2 9B8F 66D0 89F2 935F 9A02 76A8 9BF9
5211 884C 90A2 5F62 9649 4F80 90C9 578B 6D10 8365
9498 9658 5A19 784E 94CF 9203 6ECE 9276 9292 92DE
7772 9192 64E4
5174 674F 59D3 5E78 6027 8347 5016 8395 5A5E 60BB
6DAC 7DC8 8208 5B39 81D6
54D8 88C4 8B03
51F6 5144 5147 5308 8BBB 5FF7 6C79 54C5 605F 6D36
80F7 80F8 8A29 8A7E 8CEF
96C4 718A
713D
8BC7 7138 8A57 5910 657B
4F11 4FE2 4FEE 54BB 5EA5 70CB 70CC 7F9E 8129 8119
9E3A 81F9 8C85 9990 6A07 929D 9AE4 9AF9 9380 9D42
93C5 9948 9C43 98CD
82EC
673D 6EEB 7D87 7CD4
79C0 5CAB 5CC0 73DB 7EE3 8896 7407 9508 55C5 6EB4
7493 890E 890F 92B9 8791 7E4D 7E61 93E5 93FD 9F45
9BB4
5401 620C 65F4 759E 76F1 6B28 80E5 987B 6647 8A0F
987C 8657 865A 8C1E 5AAD 5E41 63DF 6E51 865B 88C7
9808 6948 7AA2 980A 5618 589F 9700 9B46 5653 5B03
6B54 7E03 8566 8751 8ADD 8B43 7E7B 9B56 9A49 9450
9B1A
4FC6 5F90 84A3
8BB8 5474 59C1 8BE9 5194 6829 73DD 5066 8A31 668A
8A61 7A30 9126 7CC8 9191 76E8
65ED 4F35 5E8F 6C7F 82A7 4F90 5379 6034 6C80 53D9
6064 662B 6D2B 57BF 6B30 6B88 70C5 73EC 52D6 654D
6558 52D7 70FC 7EEA 7EED 9157 55A3 58FB 5A7F 6702
6E86 7D6E 8A39 6149 7166 84C4 8CC9 69D2 6F35 6F4A
76E2 7781 7DD2 805F 928A 735D 7A38 7DD6 9B63 85C7
77B2 85DA 7E8C 9C6E
8053 7D9A 84FF
5405 8F69 660D 5BA3 5F32 8ED2 688B 8C16 55A7 5847
5A97 6103 610B 63CE 8431 8432 6684 714A 7444 84D2
777B 5107 79A4 7BAE 7E07 7FE7 8756 92D7 61C1 857F
8AE0 8AFC 9379 99FD 77CE 7FFE 85FC 8610 8809 8B5E
7384 73B9 75C3 60AC 65CB 7401 8701 5AD9 6F29 66B6
7487 6A88 74BF 61F8
54BA 9009 6645 70DC 9078 9848 7663 766C
6030 6CEB 6621 70AB 7EDA 7729 88A8 94C9 7404 7734
8852 6E32 7D62 6965 6966 9249 78B9 8519 955F 9799
98B4 7E3C 7E4F 93C7 8B82 8D19
9C1A
524A 75B6 8486 9774 859B 8FA5 8FAA 97BE
7A74 6588 4E74 5B66 5CA4 5CC3 8313 6CF6 8895 9E34
8E05 58C6 5B78 5DA8 6FA9 71E2 89F7 96E4 9DFD
96EA 9CD5 9C48
8840 5437 5779 72D8 6856 8C11 8D90 8B14 7025
81A4 6A30 825D 8F4C
5743 52CB 57D9 7104 52DB 5864 718F 7AA8 8512 52F2
52F3 85AB 99E8 58CE 736F 85B0 66DB 71FB 81D0 77C4
860D 58E6 7E81 91BA
5EF5 5BFB 65EC 5DE1 9A6F 674A 7543 8BE2 5CCB 6042
6D35 6D54 7D03 8340 8368 6812 686A 6BE5 73E3 5071
5C0B 5FAA 63D7 69C6 6F43 8A62 99B4 9129 9C9F 565A
6F6F 6533 6A33 71D6 7495 87F3 9C4F 9C58 7065
5342 8BAF 4F28 6C5B 8FC5 4F9A 5DFA 5F87 72E5 8FFF
900A 6B89 8A0A 8A19 595E 5DFD 6BBE 7A04 905C 613B
8CD0 5640 6F60 8548 9D55 720B 9868 9442
8BAD 8A13 5691
FDD0-0059
4E2B 5727 538B 5416 5E98 62BC 6792 57AD 9E26 6860
9E2D 57E1 5B72 690F 9D09 930F 9D28 58D3 9D76 941A
7259 4F22 5391 5C88 82BD 5393 73A1 740A 7B0C 869C
5810 5D15 5D16 6DAF 731A 7458 775A 8859 6F04 9F56
538A 5E8C 54D1 5516 555E 75D6 96C5 7602 8565
529C 5720 8F67 4E9A 897E 8BB6 4E9C 72BD 8FD3 4E9E
8ECB 5A05 631C 7811 4FF9 6C29 5A6D 6397 8A1D 94D4
63E0 6C2C 7330 8050 5714 7A0F 7AAB 9F7E
4E5B 5440
6079 5266 70DF 73DA 80ED 5063 5571 5D26 6DCA 6DF9
7109 7111 83F8 9609 6E6E 7312 814C 7159 787D 9122
5AE3 6F39 9183 95B9 5B2E 61E8 7BF6 61D5 81D9 9EEB
8BA0 5EF6 4E25 598D 82AB 8A00 5CA9 6616 6CBF 708E
90D4 59F8 5A2B 72FF 7814 839A 5A2E 76D0 7402 784F
9586 960E 5D52 5D53 6E7A 7B75 7D96 8712 5869 63C5
694C 8A7D 789E 8505 989C 53B3 8664 95BB 6A90 984F
9854 56B4 58DB 5DCC 7C37 6AE9 9EEC 58E7 5B4D 5DD7
5DD6 7939 9E7D 9EA3
5935 6281 6C87 4E75 5156 5944 4FE8 5157 533D 5F07
884D 5043 53A3 63A9 773C 8412 90FE 9153 5D43 611D
624A 63DC 68EA 6E30 6E37 7430 9043 9692 693C 7F68
88FA 6F14 8917 5D96 622D 8758 9B47 565E 8EBD 7E2F
6ABF 9A13 9EE1 53B4 7517 9C0B 9DA0 9EE4 9F5E 9F91
513C 9EED 9869 9F34 5DD8 5DDA 66EE 9B58 9F39 9F74
9EF6
538C 95EB 599F 89C3 726A 54BD 59F2 5F65 5F66 781A
5501 5BB4 664F 70FB 8273 898E 9A8C 5050 7114 8C1A
9681 55AD 5830 6565 7130 7131 786F 8455 96C1 50BF
693B 6E8E 6EDF 9CEB 53AD 5895 66A5 917D 5B0A 8C33
990D 9D08 71C4 71D5 8AFA 8D5D 9B33 66D5 9D33 9140
9A10 56A5 5B3F 8276 8D0B 66E3 7213 91B6 9A34 9DC3
7054 8D17 89FE 8B8C 91BC 995C 9A57 9DF0 8277 704E
91C5 9A60 7067 8B9E 8C53 8C54 7069
8A01 7196 6A2E 8EC5 6B15
592E 5489 59CE 62B0 6CF1 6B83 80E6 770F 79E7 9E2F
9260 96F5 9785 9D26
626C 7F8A 9626 9633 65F8 6768 7080 98CF 4F6F 52B7
6C1C 75A1 9496 579F 5F89 661C 6D0B 7F8F 70CA 73DC
773B 967D 5D35 5D38 63DA 86D8 656D 6698 694A 716C
7993 760D 8AF9 8F30 935A 9D39 98BA 940A 9C11 9737
9E09
4EF0 4F52 5771 5C9F 517B 67CD 70B4 6C27 75D2 7D3B
509F 6967 8EEE 6143 6C31 8746 990A 99DA 61E9 6501
7662
600F 6059 6837 7F95 8A47 69D8 6F3E 6A23 7001
594D 7FAA 7922
5E7A 592D 5406 5996 6796 6B80 7945 8A1E 5593 847D
6946 8170 9D01 9080
723B 5C27 5C2D 80B4 579A 59DA 5CE3 8F7A 5004 70D1
73E7 7A91 509C 582F 63FA 8C23 8EFA 55C2 5AB1 5FAD
612E 6416 6447 733A 9059 9065 669A 69A3 7464 7476
929A 98D6 9906 5DA2 5DA4 7AAF 7AB0 991A 7E47 8B20
8B21 9390 9CD0 98BB 8628 908E 9864 9C29
4EF8 5B8E 5C86 62AD 6773 72D5 82ED 54AC 67FC 7711
7A85 7A88 8200 5060 5A79 5D3E 6E94 84D4 699A 9D22
9F3C 95C4 9A15 9F69 9DD5
7A7E 836F 8981 94A5 888E 7A94 7B44 846F 8A4F 718E
899E 977F 735F 9E5E 85AC 66DC 71FF 825E 85E5 77C5
8000 7E85 9DC2 8B91 9470
503B 6396 6930 668D 564E 6F71 882E
8036 6353 63F6 94D8 91FE 92E3 9381 64E8
4E5F 5414 51B6 57DC 91CE 5622 6F1C 58C4
4E1A 53F6 66F3 9875 66F5 90BA 591C 62B4 4EB1 67BC
9801 6654 67BD 70E8 5558 6DB2 8C12 5828 6B97 814B
8449 9113 58B7 696A 696D 998C 50F7 66C4 66C5 6B4B
71C1 64DB 76A3 77B1 9134 9765 5DAA 5DAB 6FB2 8B01
9923 5688 64EB 66D7 77B8 9371 64EA 7217 790F 9391
9941 9D7A 9437 9768 9A5C 9E08
7237 4EAA 723A
4E00 4E4A 5F0C 4F0A 8863 533B 541A 58F1 4F9D 794E
54BF 6D22 6098 7317 90FC 94F1 58F9 63D6 6B39 86DC
7995 5ADB 6F2A 7A26 92A5 5B04 566B 5901 747F 9E65
7E44 6AB9 6BC9 91AB 9EDF 8B69 9DD6 9EF3
4E41 4EEA 531C 572F 5937 8FC6 519D 5B90 6C82 8BD2
4F87 6021 6CB6 72CB 886A 8FE4 9974 54A6 59E8 5CD3
605E 62F8 67C2 73C6 74F5 8D3B 8FFB 5BA7 5DF8 5F2C
6245 6818 684B 7719 80F0 8898 8A11 8CA4 75CD 79FB
801B 8413 51D2 7FA0 86E6 8A51 8A52 8CBD 9057 5A90
6686 6938 8A83 8DE0 9809 9890 98F4 7591 5100 71AA
7BB7 907A 5DAC 5F5B 5F5C 8794 9824 5BF2 5DB7 7C03
984A 5F5D 5F5E 8B3B 93D4 89FA 8B89 9E03
4E59 5DF2 4EE5 9487 4F41 653A 77E3 8094 82E1 82E2
5EA1 8223 8681 91D4 501A 6246 7B16 9018 914F 506F
5D3A 65D1 6905 926F 9CE6 88FF 65D6 8E26 8F22 657C
8798 6AA5 7912 8264 87FB 9857 8F59 9F6E
4E42 4E49 4EBF 5F0B 5208 5FC6 827A 808A 8BAE 4EA6
4F07 5C79 5F02 8285 4F3F 4F5A 52AE 5453 5744 5F79
6291 6759 8034 82C5 8BD1 9091 4F7E 546D 5479 5CC4
6008 603F 6613 678D 6B25 6CC6 7088 79C7 7ECE 8BE3
9A7F 4FCB 5955 5E1F 5E20 5F08 67BB 6D02 6D42 73B4
75AB 7FBF 8875 8F76 5508 57BC 6092 6339 6359 6827
683A 6B2D 6D65 6D73 76CA 88A3 8C0A 966D 52DA 57F6
57F8 60A5 639C 6BB9 7570 785B 7F9B 7FCA 7FCC 8A32
8A33 8C59 8C5B 9038 91F4 96BF 5E46 6561 6679 68ED
6B94 6E59 7132 86E1 8A4D 8DC7 8EFC 9220 9AAE 4E84
517F 610F 6EA2 7348 75EC 776A 7AE9 7F22 7FA9 8084
88D4 88DB 8A63 52E9 5AD5 5ED9 698F 6F69 7617 8189
84FA 8734 977E 99C5 5104 648E 69F8 6BC5
71A0 71A4 71BC 761E 8ABC 9552 9E5D 9E62 9ED3 5293
571B 58BF 5B11 5B1F 5DA7 61B6 61CC 66C0 6BAA 6FBA
71DA 7631 7796 7A53 7E0A 8257 858F 87A0 8939 5BF1
6581 66CE 6A8D 6B5D 71E1 71F1 7FF3 7FFC 81C6 8CF9
9BA8 7654 85D9 85DD 8D00 93B0 9571 7E76 7E79 8C77
972C 9BE3 9D82 9D83 7037 8619 8B6F 8B70 91B3 91B7
9950 56C8 943F 9DC1 9DCA 61FF 897C 9A5B 9DE7 8649
9DFE 8B9B 9F78
8FB7 5307 8864 5B9C 7569 841F 692C 9D8D 7C4E
56D9 56E0 9625 9634 4F8C 5794 59FB 6D07 8335 836B
97F3 9A83 6836 6BB7 6C24 9670 51D0 79F5 88C0 94DF
967B 9682 5591 5819 5A63 6114 7B43 7D6A 6B45 6EB5
798B 852D 6147 647F 7616 92A6 7DF8 9787 8AF2 9712
99F0 567E 95C9 9720 97FE
5198 4E51 541F 72BE 82C2 65A6 70CE 57A0 6CFF 5701
5CFE 72FA 73E2 8376 8A14 8A1A 5A6C 5BC5 5D1F 5D2F
6DEB 8A21 94F6 921D 9F82 6EDB 7892 911E 5924 8529
9280 5656 6BA5 748C 8ABE 569A 6AAD 87EB 972A 9F57
9DE3
4E5A 5EF4 5C39 5F15 5432 996E 8693 8D7A 9690 6DFE
920F 98F2 96A0 9777 98EE 6704 8F11 78E4 8D9B 6A83
763E 96B1 5DBE 6FE5 6FE6 87BE 861F 6AFD 766E 8B94
5370 831A 6D15 80E4 57BD 5837 6E5A 730C 5ED5 8491
9173 616D 764A 6196 6197 9BA3 61DA 6ABC
7C8C
5E94 5FDC 82F1 5040 685C 83BA 5568 5A74 5A96 6E36
7EEC 6720 7150 745B 5AC8 78A4 9533 5624 6484 7507
7DD3 7F28 7F42 8767 8CCF 6A31 748E 7F43 892E 9348
9719 9D2C 9E66 5B30 61C9 81BA 97FA 7516 9E70 9D91
9DA7 56B6 5B46 5B7E 6516 7F4C 8621 8B4D 6AFB 74D4
792F 8B7B 9DAF 944D 7E93 8833 9DEA 9DF9 9E0E 9E1A
76C1 8FCE 8314 76C8 8367 83B9 55B6 8424 8425 8426
86CD 6E81 6E8B 843E 50CC 584B 6979 6EE2 84E5 6F46
7192 7469 877F 5B34 71DF 7E08 87A2 6FD9 6FDA 6FF4
85C0 89AE 8B0D 8D62 7005 93A3 650D 701B 7020 702F
6AFF 7034 8D0F 7C5D 7C6F
77E8 90E2 6D67 68AC 988D 9895 9896 646C 5F71 6F41
7484 763F 7A4E 9834 5DCA 5EEE 766D
6620 668E 786C 5AB5 81A1 565F 9795 941B 9C66
73F1 6125 8747 7E04 651A 8805 7050 705C 8EC8
54DF 5537 55B2
4F63 62E5 75C8 9095 5EB8 50AD 55C8 9118 96CD 5889
5ADE 6175 6EFD 69E6 5670 58C5 64C1 6FAD 90FA 955B
81C3 7655 96DD 93DE 9CD9 5EF1 7049 9954 9C45 9DDB
7670
5581 63D8 7245 9899 9852 9C2B
6C38 752C 548F 6CF3 4FD1 52C7 52C8 6810 57C7 6080
67E1 6D8C 607F 509B 60E5 6111 6E67 7867 8A60 584E
5D71 5F6E 6139 86F9 6142 8E0A 799C 9CAC 8E34 9BD2
7528 82DA 919F
603A 783D
4F18 5FE7 6538 5466 602E 6CD1 5E7D 900C 60A0 9E80
6EFA 6182 512A 913E 5698 7000 6ACC 7E8B 8030
5C22 5C24 7531 6C8B 72B9 90AE 6CB9 80AC 6023 65BF
75A3 5CF3 6D5F 79DE 839C 83B8 90F5 94C0 5064 86B0
8A27 9030 6E38 7336 904A 9C7F 6962 7337 923E 9C89
8F0F 99C0 8555 8763 9B77 8F36 9B8B 6AFE
6709 4E23 5363 82C3 9149 7F91 5EAE 682F 7F90 83A0
6884 8048 811C 94D5 6E75 7989 870F 92AA 69F1 7256
9EDD 61EE
53C8 53F3 5E7C 4F51 4F91 72D6 7CFF 54CA 56FF 59F7
5BA5 5CDF 67DA 7270 7950 8BF1 8FF6 5500 86B4 4EB4
8C81 91C9 916D 8A98 9F2C
53CB 5B67 848F 7257
625C 7EA1 8FC2 8FC3 7A7B 9653 7D06 8676 5539 6DE4
76D3 6BFA 7600 7B8A
4E90 4E8E 9098 4F03 4F59 59A4 6275 6745 6B24 7397
7399 65BC 76C2 81FE 8867 9C7C 4E7B 4FDE 516A 79BA
7AFD 8201 8330 5A1B 5A2F 5A31 6859 72F3 8C00 9151
9980 6E14 8438 9685 96E9 9B5A 5823 582C 5D33 5D4E
5D5B 6109 63C4 6970 6E1D 6E61 756D 7862 8174 842E
903E 9AAC 611A 65D5 6961 6986 6B48 724F 745C 8245
865E 89CE 6F01 776E 7AAC 8206 8915 6B76 7FAD 854D
8753 8ADB 96D3 9918 5B29 6F9E 89A6 8E30 6B5F 74B5
87B8 8F3F 935D 8B23 9AC3 9BBD 65DF 7C45 9A1F 861B
9C05 9DE0 9E06
4E0E 4E88 4F1B 5B87 5C7F 7FBD 96E8 4FC1 4FE3 79B9
8BED 5704 5CFF 7964 504A 532C 5709 5EBE 6554 9105
659E 842D 50B4 5BD9 6940 7440 7610 8207 8A9E 7AB3
92D9 9828 9F89 5673 5DBC 61D9 8C90 6594 9E8C 860C
9F6C
8080 7389 9A6D 572B 807F 828B 828C 59AA 5FEC 996B
80B2 90C1 6631 72F1 79D7 831F 4FFC 5CEA 5F67 6D74
7821 94B0 9884 5590 57DF 5809 6086 60D0 6B32 6DE2
6DEF 8C15 9033 9608 5585 55A9 55BB 5A80 5BD3 5EBD
5FA1 68DB 68DC 68EB 7134 7419 77DE 7872 88D5 9047
98EB 99AD 9E46 6108 6EEA 715C 7A22 7F6D 8248 84AE
84E3 8A89 923A 9810 5AD7 5D8E 622B 6BD3 7344 7609
7DCE 871F 872E 8F0D 9289 564A 617E 6F4F 7A36 84F9
8581 8C6B 9079 92CA 9CFF 6FA6 71CF 71E0 8577 8AED
9325 95BE 9D25 9D2A 5125 7907 79A6 9B4A 9E6C 7652
7916 791C 7A65 7BFD 7E58 91A7 9D52 6AF2 9947 8B7D
8F5D 942D 9731 6B0E 9A48 9B3B 7C5E 9C4A 9DF8 9E12
6B1D 9FA5 8EC9 9B30 9B31 706A 7C72 7229
6327 8362 6F9A 9BF2
56E6 9E22 5248 51A4 6081 7722 9E33 5BC3 6E01 6E06
6E0A 6E15 60CC 6DF5 847E 68E9 84AC 870E 88F7 9E53
7BA2 9CF6 8735 99CC 9D1B 5B3D 9D77 7041 9F18 9F1D
5143 5186 8D20 90A7 5458 56ED 6C85 676C 57A3 7230
8C9F 539F 54E1 5706 7B0E 8696 8881 53A1 570E 63F4
6E72 7328 7F18 8312 9F0B 5712 5713 586C 5AB4 5AC4
6E90 6E92 733F 7342 849D 699E 69AC 8F95 7DE3 7E01
875D 876F 9B6D 6A7C 7FB1 8597 8788 8B1C 8F45 9EFF
93B1 6ADE 908D 9A35 9DA2 9DB0 53B5
8FDC 76F6 903A 9060 92FA
5917 8099 59B4 82D1 6028 9662 57B8 884F 5086 5A9B
63BE 7457 7990 613F 88EB 8911 8924 566E 9858
915B 9228
66F0 66F1 7EA6 7D04 7BB9 77F1 5F5F 5F60
6708 6209 5216 599C 5C84 6288 793F 5CB3 73A5 6071
6085 60A6 868E 868F 8ECF 94BA 9605 6373 8DC0 8DC3
7CA4 8D8A 9205 7CB5 925E 95B1 95B2 5B33 6A3E 7BD7
5DBD 9FA0 7C46 7039 8625 9EE6 721A 79B4 8E8D 7C65
9E11 7C70 9E19
6655 7F0A 8480 6688 6C32 7174 8495 6C33 596B 8779
7E15 8D5F 9835 99A7 8D07
4E91 52FB 5300 56E9 5998 6C84 7EAD 82B8 6600 7547
7703 79D0 90E7 6DA2 7D1C 8018 803A 9116 96F2 612A
6EB3 7B60 7B7C 84B7 69B2 7189 6F90 8553 92C6 6A52
7BD4 7E1C 9942
5141 962D 593D 628E 72C1 9668 837A 6B92 5597 9217
9695 6B9E 891E 99BB 78D2 8CF1 9723 9F73
5B55 8FD0 679F 90D3 607D 9106 915D 508A 60F2 6120
904B 614D 816A 97EB 97F5 7185 71A8 7DF7 7DFC 8574
8580 9196 919E 992B 85F4 97D7 97DE 860A 97FB
62A3 7E67
FDD0-005A
5E00 531D 6C9E 8FCA 5482 62F6 7D25 7D2E 9254 9B73
81DC 81E2
6742 7838 507A 5592 97F4 96D1 5DBB 78FC 894D 96DC
56CB 56D0 96E5
548B
707D 707E 753E 54C9 683D 70D6 83D1 6E3D 7775 8CF3
5BB0 5D3D
518D 5728 6257 4FA2 6D05 8F7D 50A4 8F09 9168 510E
7E21
5142 7CCC 7C2A 7C2E 9415 941F
54B1
661D 6CAF 685A 5BC1 63DD 5646 648D 5127 6505 6512
5139 6522 8DB1 7938 8DB2
6682 66AB 8CDB 8D5E 933E 913C 6FFD 8E54 74C9 8D0A
93E8 74D2 9147 7052 8B83 74DA 79B6 8978 8B9A 9961
5328 7242 7F98 8D43 8CCD 81E7 8535 8CD8 8D13 9AD2
8D1C
9A75 99D4
5958 5F09 810F 585F 846C 92BA 81D3 81DF
50AE 906D 7CDF 8E67 91A9
51FF 947F
65E9 67A3 86A4 68D7 6FA1 74AA 85BB 7E70 85FB
7076 7681 7682 5515 5523 9020 688D 55BF 6165 8241
566A 7C09 71E5 7AC3 8B5F 8DAE 8E81 7AC8
6806
5219 629E 6CA2 62E9 6CCE 6CFD 8D23 8FEE 5247 835D
5536 5567 5E3B 7B2E 8234 8CAC 6EAD 77E0 5616 5AE7
5E58 7BA6 6A0D 8ACE 8D5C 64C7 6FA4 769F 7794 7C00
790B 8957 8B2E 8CFE 880C 9F5A 9F70 9E05
5928 4EC4 5E82 6C44 6603 6617 6351 5D31
4F2C 8536
8D3C 621D 8CCA 9C97 9BFD 8808 9C02 9C61
600E
8C2E 8B56 8B5B
56CE
5897 912B 589E 618E 7F2F 6A67 71B7 7494 77F0 78F3
7F7E 7E52 8B44
9503 92E5 7511 8D60 8D08
9C5B
624E 5412 62AF 5953 6313 67E4 67FB 54F3 5067 55B3
63F8 6E23 6942 5284 6463 76B6 6A1D 89F0 76BB 8B47
9F44 9F47
672D 7534 95F8 86BB 94E1 7160 7250 9598 7B9A 802B
9358 8B57
538F 62C3 82F2 7728 781F 6429 9C8A 9C9D 8E37 9B93
9BBA
4E4D 7079 8BC8 54A4 67DE 6805 70B8 5BB1 75C4 86B1
6EA0 8A50 643E 69A8 9705 91A1
635A 658B 658E 6458 69B8 9F4B
5B85 6AA1
7A84 9259
503A 7826 50B5 5BE8 7635
5908 7C82
6CBE 6BE1 65C3 6834 7C98 86C5 98E6 60C9 8A40 8D88
8A79 959A 8C35 5661 5DA6 859D 9085 9711 6C08 6C0A
77BB 9E6F 65DC 8B6B 9958 9CE3 9A59 9B59 9C63 9E07
8B9D
65A9 98D0 5C55 76CF 5D2D 65AC 692B 7416 640C 76DE
5D83 5D84 6990 98AD 5AF8 9186 6A4F 8F3E 9EF5
5360 4F54 6218 6808 685F 7AD9 5061 7EFD 83DA 68E7
6E5B 6226 7DBB 5D98 8F1A 6230 8665 8666 89B1 8F4F
8B67 8638 9A4F
5F20 5F35 7AE0 50BD 9123 5887 5ADC 5F70 615E 6F33
7350 7CBB 8501 9067 66B2 6A1F 748B 9926 87D1 9A3F
9C46 9E9E
4EC9 957F 9577 6DA8 638C 6F32 7903
4E08 4ED7 6259 5E10 6756 80C0 8D26 5E33 6DB1 8139
75EE 969C 5D82 5E5B 8CEC 762C 7634 7795
7C80 5E65 93F1 9423
4F4B 948A 59B1 5DF6 62DB 662D 76C4 91D7 5541 924A
99CB 7ABC 9363 76BD
722A 627E 6CBC 7475
53EC 5146 8BCF 679B 5797 70A4 72E3 8D75 7B0A 8081
65D0 68F9 8A54 7167 7F69 8087 8088 8D99 66CC 71F3
9BA1 6AC2 77BE 7F84
722B 7F40
8707 55FB 5AEC 906E
5387 6298 6B7D 77FA 7813 7C77 8674 54F2 57D1 7C8D
88A9 5560 608A 6662 6663 8F84 5586 86F0 8A5F 8C2A
99B2 647A 8F12 78D4 8F19 92B8 8F99 87C4 569E 8B2B
8B3A 9BBF 8F4D 8B81 8B8B
8005 4E7D 556B 7987 9517 8D6D 8936 8975
8FD9 67D8 6D59 9019 6DDB 6A1C 6F6A 9E67 87C5 9DD3
7740 8457 8517
8D1E 9488 4FA6 6D48 73CD 73CE 80D7 8C9E 5E2A 6815
6862 771E 771F 7827 796F 91DD 5075 686D 9159 5BCA
8474 9049 5AC3 6438 659F 6968 7349 7504 798E 8496
84C1 9241 9755 699B 6B9D 7467 78AA 799B 6F67 7BB4
6A3C 6FB5 81FB 85BD 9331 8F43 937C 7C48 9C75
8BCA 62AE 6795 5F2B 6623 8F78 5C52 755B 75B9 7715
8897 7D3E 8044 88D6 8A3A 8EEB 7D7C 7F1C 7A39 99D7
7E25 9B12 9EF0
5733 9635 7EBC 753D 4FB2 630B 9663 9E29 632F 6715
681A 7D16 7739 8D48 9156 5866 63D5 6576 7471 8AAB
8CD1 9547 9707 9D06 93AD 93AE
8419 92F4
4E89 4F42 59C3 5F81 6014 722D 8BE4 57E9 5CE5 6323
70A1 72F0 70DD 7710 94B2 5D1D 5D22 6399 7319 7741
8047 94EE 5A9C 63C1 7B5D 5FB0 84B8 775C 8E2D 9266
5FB4 7B8F 931A 5FB5 7BDC 9B07 9BD6 7665
6C36 628D 7CFD 62EF 639F 6678 6138 649C 6574
6B63 8BC1 90D1 5E27 653F 75C7 5E40 8A3C 5863 8ACD
912D 9D0A 8B49
51E7
4E4B 652F 536E 6C41 829D 5431 5DF5 6C65 5767 679D
6CDC 77E5 7EC7 80A2 6800 7957 79D3 79D6 80D1 80DD
887C 5001 75B7 796C 79EA 8102 96BB 6894 6220 6925
81F8 6418 7994 7A19 7D95 69B0 8718 99B6 9CF7 9D32
9D44 7E54 8635 9F05
6267 4F84 59B7 76F4 59EA 5024 503C 8040 91DE 57F4
57F7 6DD4 804C 8CAD 690D 6B96 7286 7983 7D77 8901
8DD6 55ED 74E1 9244 588C 646D 99BD 5B02 6179 6F10
8E2F 6A34 81B1 5128 7E36 8077 87D9 8E60 8EC4 8E91
5902 6B62 53EA 52A7 65E8 962F 5740 5741 5E0B 627A
6C66 6C9A 7EB8 82B7 603E 62A7 7949 54AB 6049 6307
67B3 6D14 780B 8879 8F75 6DFD 75BB 7D19 8A28 8DBE
8EF9 9EF9 916F 85E2 8967
9624 81F3 8296 5FD7 5FEE 627B 8C78 5236 5394 5781
5E19 5E1C 6CBB 7099 8D28 8FE3 90C5 5CD9 5EA2 5EA4
6303 67E3 6809 6D37 7951 965F 5A21 5F8F 631A 664A
684E 72FE 79E9 81F4 889F 8D3D 8F7E 4E7F 506B 5F9D
63B7 68BD 6956 7318 7564 75D4 79F2 79F7 7A92 7D29
7FD0 88A0 89D7 94DA 9E37 5082 5D3B 5F58 667A 6EDE
75E3 86ED 8EFD 9A98 5BD8 5ECC 6431 6ECD 7A1A 7B6B
7F6E 8DF1 8F0A 9527 96C9 5886 6EEF 6F4C 7590 88FD
899F 8A8C 928D 5E5F 6184 646F 71AB 7A3A 81A3 89EF
8CEA 8E2C 92D5 64F3 65D8 7004 7DFB 99E4 9D19 5295
61E5 64F2 6ADB 7A49 87B2 61EB 8D04 6ACD 74C6 89F6
9A2D 9BEF 7929 8C51 9A3A 9A47 8E93 9DD9 9455 8C52
51EA 4FE7 5F94 8B22
4E2D 4F00 6C77 5223 5990 5F78 5FE0 6CC8 7082 7EC8
67CA 76C5 8873 949F 822F 8877 7D42 9221 5E52 8520
953A 92BF 87A4 87BD 937E 9F28 8E71 9418 7C66
80BF 79CD 51A2 55A0 5C30 585A 585C 6B71 7144 816B
7607 7A2E 8E35 7A5C
4EF2 4F17 5995 72C6 794C 833D 8876 91CD 869B 5045
773E 5839 5A91 7B57 8846 8AE5
8FDA
5DDE 821F 8BCC 4F9C 5468 6D32 8BEA 70D0 73D8 8F80
90EE 5F9F 63AB 6DCD 77EA 9031 9E3C 558C 7CA5 8D52
8F08 9282 8CD9 8F16 970C 76E9 8B05 9D43 9A06 8B78
59AF 8F74 8EF8
8098 759B 83F7 666D 776D 7B92 9BDE
7EA3 4F37 546A 5492 5B99 7EC9 5191 54AE 663C 7D02
80C4 836E 76B1 914E 665D 7C99 8464 8A4B 7503 8A76
50FD 76BA 99CE 5663 7E10 9AA4 7C40 7C55 7C52 9A5F
5E1A 70BF 99F2
6731 52AF 4F8F 8BDB 90BE 6D19 8331 682A 73E0 8BF8
732A 7843 79FC 88BE 94E2 7D51 86DB 8A85 8DE6 69E0
6F74 876B 9296 6A65 8AF8 8C6C 99EF 9BA2 9D38 7026
6AEB 6AE7 9BFA 9F04 8829
7AF9 6CCF 7AFA 70A2 7B01 833F 70DB 7A8B 9010 7B1C
8233 7603 7BC9 71ED 880B 8E85 9C41 5B4E 705F 66EF
6B18 7225 883E
4E36 4E3B 5B94 62C4 7F5C 967C 6E1A 716E 7151 8A5D
5631 6FD0 9E88 77A9 529A 56D1 65B8 77DA
4F2B 4F47 4F4F 52A9 7EBB 82CE 577E 677C 6CE8 8D2E
8FEC 9A7B 58F4 67F1 6BB6 70B7 795D 75B0 771D 782B
7969 7ADA 8387 7D35 7D38 7F9C 86C0 5D40 7B51 8A3B
8CAF 8DD3 8EF4 94F8 7B6F 9252 99B5 7BB8 7FE5 6A26
92F3 99D0 7BEB 9714 9E86 9444
58B8
6293 6A9B 81BC 7C3B 9AFD
62FD
8DE9
4E13 53C0 5C02 7816 5C08 911F 587C 5AE5 747C 750E
78D7 819E 989B 78DA 8AEF 87E4 9853 9C44
8F6C 5B68 8EE2 7AF1 8F49
7077 556D 581F 8483 7451 815E 50CE 8D5A 64B0 7BC6
9994 7BF9 8948 8CFA 8B54 994C 56C0 7C51
5986 5E84 599D 8358 5A24 6869 838A 6889 6E77 7CA7
88C5 88DD 6A01 7CDA
58EE 58EF 72B6 72C0 58F5 710B 6F34 649E 6207
5E92
96B9 8FFD 9A93 9525 9310 9A05 9D7B
6C9D
5760 6858 7B0D 5A37 60F4 7500 7F12 7577 787E 8187
589C 8D58 7E0B 8AC8 918A 9323 991F 7908 8D05 8B75
8F5B 9446
7F00 7DB4
5B92 8FCD 80AB 7A80 8C06 8AC4 8860
51C6 57FB 6E96 7DA7
8A30 7A15
51D6
5353 62D9 70AA 502C 6349 684C 68C1 6DBF 68F3 7A5B
7A71 883F
5734 5F74 6C4B 72B3 707C 53D5 59B0 8301 65AB 6D4A
4E35 6D5E 70F5 8BFC 914C 5544 5545 5A3A 68B2 65B1
666B 6913 7438 787A 7AA1 7F6C 64AF 64C6 65B2 69D5
799A 8AC1 8AD1 92DC 6FC1 7BE7 64E2 6580 65B5 6FEF
6AE1 8B36 956F 942F 9D6B 7042 8817 9432 7C57 9DDF
7C71
5285
7AA7
4E72 5B5C 830A 5179 54A8 59D5 59FF 8332 6825 7386
7D0E 8D40 8D44 6DC4 79F6 7F01 8C18 55DE 5B73 5D6B
6914 6E7D 6ECB 7CA2 8458 8F8E 9111 5B76 798C 89DC
8A3E 8CB2 8CC7 8D91 9531 7A35 7DC7 922D 9543 9F87
8F1C 9F12 6FAC 8AEE 8DA6 8F3A 9319 9AED 9CBB 937F
93A1 74BE 983F 983E 9BD4 9D85 9F4D 9C26
84FB
4ED4 5407 59C9 59CA 674D 77F7 79C4 80CF 5470 79ED
7C7D 8014 8678 7B2B 6893 91E8 5559 7D2B 6ED3 8A3F
699F
5B57 81EA 8293 8321 5033 525A 6063 7278 6E0D 7725
7726 80D4 80FE 6F2C
5B50 5D30 6A74
5B97 5027 7EFC 9A94 582B 5D4F 5D55 60FE 68D5 7323
8159 847C 6721 6936 5D78 7A2F 7D9C 7DC3 71A7 7DF5
7FEA 876C 8E28 8E2A 78EB 9350 8C75 8E64 9A0C 9B03
9A23 9B09 9B37 9BEE 9BFC 9441
603B 506C 6374 60E3 6121 63D4 6403 50AF 84D7 6460
7DCF 7E02 7E3D 93D3
7EB5 662E 75AD 500A 7314 7882 7CBD 7CC9 7632 7E26
931D 7E31 7CED
6F48
90B9 9A7A 8BF9 90F0 966C 83C6 68F7 68F8 9112 7B83
7DC5 8ACF 9139 9CB0 9BEB 9EC0 9A36 9F71 9F7A
8D71 8D70
594F 63CD 6971
9BD0
79DF 8445 84A9
5346 8DB3 5352 54EB 5D12 5D2A 65CF 50B6 7BA4 8E24
8E3F 955E 93C3
8BC5 963B 7EC4 4FCE 723C 73C7 7956 7D44 8A5B 977B
93BA
94BB 8E9C 947D
7E64 7F35 7E82 7E89 7C6B 7E98
6525 945A
539C 6718 55FA 6A36 87D5 7E97
5D8A 5634 5DB5 567F 74BB
682C 7D4A 9154 6700 666C 797D 7A21 7F6A 8FA0 69DC
917B 855E 9189 6A87 92F7 930A 6A8C
67A0 7A5D
5C0A 58AB 58FF 5D9F 9075 6A3D 7E5C 7F47 940F 9CDF
9C52 9DF7
50D4 5642 6499 8B50
6358 928C
9D8E
6628 79E8 838B 637D 690A 7422 7A13 7B70 923C
5DE6 4F50 5528 7E53
4F5C 5750 963C 5C9D 5C9E 600D 4FB3 795A 80D9 5511
5EA7 888F 505A 8443 8444 98F5 7CF3
5497 84D9
__END__
=head1 NAME
Unicode::Collate::CJK::Pinyin - weighting CJK Unified Ideographs
for Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate;
use Unicode::Collate::CJK::Pinyin;
my $collator = Unicode::Collate->new(
overrideCJK => \&Unicode::Collate::CJK::Pinyin::weightPinyin
);
=head1 DESCRIPTION
C<Unicode::Collate::CJK::Pinyin> provides C<weightPinyin()>,
that is adequate for C<overrideCJK> of C<Unicode::Collate>
and makes tailoring of CJK Unified Ideographs in the order
of CLDR's pinyin ordering.
=head1 CAVEAT
The pinyin ordering includes some characters that are not
CJK Unified Ideographs and can't utilize C<weightPinyin()>
for collation. For them, use C<entry> instead.
=head1 SEE ALSO
=over 4
=item CLDR - Unicode Common Locale Data Repository
L<http://cldr.unicode.org/>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=item L<Unicode::Collate>
=item L<Unicode::Collate::Locale>
=back
=cut
Unicode/Collate/CJK/JISX0208.pm 0000644 00000100011 15033552504 0011544 0 ustar 00 package Unicode::Collate::CJK::JISX0208;
use 5.006;
use strict;
use warnings;
our $VERSION = '1.25';
my %u2p;
my $wt = 0x8000;
while (<DATA>) {
last if /^__END__/;
my @c = split;
for my $c (@c) {
next if !$c;
$u2p{hex($c)} = $wt;
$wt++;
}
}
sub weightJISX0208 {
my $u = shift;
return exists $u2p{$u} ? $u2p{$u} : undef;
}
1;
__DATA__
4E9C 5516 5A03 963F 54C0 611B 6328 59F6 9022 8475
831C 7A50 60AA 63E1 6E25 65ED 8466 82A6 9BF5 6893
5727 65A1 6271 5B9B 59D0 867B 98F4 7D62 7DBE 9B8E
6216 7C9F 88B7 5B89 5EB5 6309 6697 6848 95C7 978D
674F 4EE5 4F0A 4F4D 4F9D 5049 56F2 5937 59D4 5A01
5C09 60DF 610F 6170 6613 6905 70BA 754F 7570 79FB
7DAD 7DEF 80C3 840E 8863 8B02 9055 907A 533B 4E95
4EA5 57DF 80B2 90C1 78EF 4E00 58F1 6EA2 9038 7A32
8328 828B 9C2F 5141 5370 54BD 54E1 56E0 59FB 5F15
98F2 6DEB 80E4 852D 9662 9670 96A0 97FB 540B 53F3
5B87 70CF 7FBD 8FC2 96E8 536F 9D5C 7ABA 4E11 7893
81FC 6E26 5618 5504 6B1D 851A 9C3B 59E5 53A9 6D66
74DC 958F 5642 4E91 904B 96F2 834F 990C 53E1 55B6
5B30 5F71 6620 66F3 6804 6C38 6CF3 6D29 745B 76C8
7A4E 9834 82F1 885B 8A60 92ED 6DB2 75AB 76CA 99C5
60A6 8B01 8D8A 95B2 698E 53AD 5186 5712 5830 5944
5BB4 5EF6 6028 63A9 63F4 6CBF 6F14 708E 7114 7159
71D5 733F 7E01 8276 82D1 8597 9060 925B 9D1B 5869
65BC 6C5A 7525 51F9 592E 5965 5F80 5FDC 62BC 65FA
6A2A 6B27 6BB4 738B 7FC1 8956 9D2C 9D0E 9EC4 5CA1
6C96 837B 5104 5C4B 61B6 81C6 6876 7261 4E59 4FFA
5378 6069 6E29 7A4F 97F3 4E0B 5316 4EEE 4F55 4F3D
4FA1 4F73 52A0 53EF 5609 590F 5AC1 5BB6 5BE1 79D1
6687 679C 67B6 6B4C 6CB3 706B 73C2 798D 79BE 7A3C
7B87 82B1 82DB 8304 8377 83EF 83D3 8766 8AB2 5629
8CA8 8FE6 904E 971E 868A 4FC4 5CE8 6211 7259 753B
81E5 82BD 86FE 8CC0 96C5 9913 99D5 4ECB 4F1A 89E3
56DE 584A 58CA 5EFB 5FEB 602A 6094 6062 61D0 6212
62D0 6539 9B41 6666 68B0 6D77 7070 754C 7686 7D75
82A5 87F9 958B 968E 8C9D 51F1 52BE 5916 54B3 5BB3
5D16 6168 6982 6DAF 788D 84CB 8857 8A72 93A7 9AB8
6D6C 99A8 86D9 57A3 67FF 86CE 920E 5283 5687 5404
5ED3 62E1 64B9 683C 6838 6BBB 7372 78BA 7A6B 899A
89D2 8D6B 8F03 90ED 95A3 9694 9769 5B66 5CB3 697D
984D 984E 639B 7B20 6A2B 6A7F 68B6 9C0D 6F5F 5272
559D 6070 62EC 6D3B 6E07 6ED1 845B 8910 8F44 4E14
9C39 53F6 691B 6A3A 9784 682A 515C 7AC3 84B2 91DC
938C 565B 9D28 6822 8305 8431 7CA5 5208 82C5 74E6
4E7E 4F83 51A0 5BD2 520A 52D8 52E7 5DFB 559A 582A
59E6 5B8C 5B98 5BDB 5E72 5E79 60A3 611F 6163 61BE
63DB 6562 67D1 6853 68FA 6B3E 6B53 6C57 6F22 6F97
6F45 74B0 7518 76E3 770B 7AFF 7BA1 7C21 7DE9 7F36
7FF0 809D 8266 839E 89B3 8ACC 8CAB 9084 9451 9593
9591 95A2 9665 97D3 9928 8218 4E38 542B 5CB8 5DCC
73A9 764C 773C 5CA9 7FEB 8D0B 96C1 9811 9854 9858
4F01 4F0E 5371 559C 5668 57FA 5947 5B09 5BC4 5C90
5E0C 5E7E 5FCC 63EE 673A 65D7 65E2 671F 68CB 68C4
6A5F 5E30 6BC5 6C17 6C7D 757F 7948 5B63 7A00 7D00
5FBD 898F 8A18 8CB4 8D77 8ECC 8F1D 98E2 9A0E 9B3C
4E80 507D 5100 5993 5B9C 622F 6280 64EC 6B3A 72A0
7591 7947 7FA9 87FB 8ABC 8B70 63AC 83CA 97A0 5409
5403 55AB 6854 6A58 8A70 7827 6775 9ECD 5374 5BA2
811A 8650 9006 4E18 4E45 4EC7 4F11 53CA 5438 5BAE
5F13 6025 6551 673D 6C42 6C72 6CE3 7078 7403 7A76
7AAE 7B08 7D1A 7CFE 7D66 65E7 725B 53BB 5C45 5DE8
62D2 62E0 6319 6E20 865A 8A31 8DDD 92F8 6F01 79A6
9B5A 4EA8 4EAB 4EAC 4F9B 4FA0 50D1 5147 7AF6 5171
51F6 5354 5321 537F 53EB 55AC 5883 5CE1 5F37 5F4A
602F 6050 606D 631F 6559 6A4B 6CC1 72C2 72ED 77EF
80F8 8105 8208 854E 90F7 93E1 97FF 9957 9A5A 4EF0
51DD 5C2D 6681 696D 5C40 66F2 6975 7389 6850 7C81
50C5 52E4 5747 5DFE 9326 65A4 6B23 6B3D 7434 7981
79BD 7B4B 7DCA 82B9 83CC 887F 895F 8B39 8FD1 91D1
541F 9280 4E5D 5036 53E5 533A 72D7 7396 77E9 82E6
8EAF 99C6 99C8 99D2 5177 611A 865E 55B0 7A7A 5076
5BD3 9047 9685 4E32 6ADB 91E7 5C51 5C48 6398 7A9F
6C93 9774 8F61 7AAA 718A 9688 7C82 6817 7E70 6851
936C 52F2 541B 85AB 8A13 7FA4 8ECD 90E1 5366 8888
7941 4FC2 50BE 5211 5144 5553 572D 73EA 578B 5951
5F62 5F84 6075 6176 6167 61A9 63B2 643A 656C 666F
6842 6E13 7566 7A3D 7CFB 7D4C 7D99 7E4B 7F6B 830E
834A 86CD 8A08 8A63 8B66 8EFD 981A 9D8F 82B8 8FCE
9BE8 5287 621F 6483 6FC0 9699 6841 5091 6B20 6C7A
6F54 7A74 7D50 8840 8A23 6708 4EF6 5039 5026 5065
517C 5238 5263 55A7 570F 5805 5ACC 5EFA 61B2 61F8
62F3 6372 691C 6A29 727D 72AC 732E 7814 786F 7D79
770C 80A9 898B 8B19 8CE2 8ED2 9063 9375 967A 9855
9A13 9E78 5143 539F 53B3 5E7B 5F26 6E1B 6E90 7384
73FE 7D43 8237 8A00 8AFA 9650 4E4E 500B 53E4 547C
56FA 59D1 5B64 5DF1 5EAB 5F27 6238 6545 67AF 6E56
72D0 7CCA 88B4 80A1 80E1 83F0 864E 8A87 8DE8 9237
96C7 9867 9F13 4E94 4E92 4F0D 5348 5449 543E 5A2F
5F8C 5FA1 609F 68A7 6A8E 745A 7881 8A9E 8AA4 8B77
9190 4E5E 9BC9 4EA4 4F7C 4FAF 5019 5016 5149 516C
529F 52B9 52FE 539A 53E3 5411 540E 5589 5751 57A2
597D 5B54 5B5D 5B8F 5DE5 5DE7 5DF7 5E78 5E83 5E9A
5EB7 5F18 6052 614C 6297 62D8 63A7 653B 6602 6643
66F4 676D 6821 6897 69CB 6C5F 6D2A 6D69 6E2F 6E9D
7532 7687 786C 7A3F 7CE0 7D05 7D18 7D5E 7DB1 8015
8003 80AF 80B1 8154 818F 822A 8352 884C 8861 8B1B
8CA2 8CFC 90CA 9175 9271 783F 92FC 95A4 964D 9805
9999 9AD8 9D3B 525B 52AB 53F7 5408 58D5 62F7 6FE0
8C6A 8F5F 9EB9 514B 523B 544A 56FD 7A40 9177 9D60
9ED2 7344 6F09 8170 7511 5FFD 60DA 9AA8 72DB 8FBC
6B64 9803 4ECA 56F0 5764 58BE 5A5A 6068 61C7 660F
6606 6839 68B1 6DF7 75D5 7D3A 826E 9B42 4E9B 4F50
53C9 5506 5D6F 5DE6 5DEE 67FB 6C99 7473 7802 8A50
9396 88DF 5750 5EA7 632B 50B5 50AC 518D 6700 54C9
585E 59BB 5BB0 5F69 624D 63A1 683D 6B73 6E08 707D
91C7 7280 7815 7826 796D 658E 7D30 83DC 88C1 8F09
969B 5264 5728 6750 7F6A 8CA1 51B4 5742 962A 583A
698A 80B4 54B2 5D0E 57FC 7895 9DFA 4F5C 524A 548B
643E 6628 6714 67F5 7A84 7B56 7D22 932F 685C 9BAD
7B39 5319 518A 5237 5BDF 62F6 64AE 64E6 672D 6BBA
85A9 96D1 7690 9BD6 634C 9306 9BAB 76BF 6652 4E09
5098 53C2 5C71 60E8 6492 6563 685F 71E6 73CA 7523
7B97 7E82 8695 8B83 8CDB 9178 9910 65AC 66AB 6B8B
4ED5 4ED4 4F3A 4F7F 523A 53F8 53F2 55E3 56DB 58EB
59CB 59C9 59FF 5B50 5C4D 5E02 5E2B 5FD7 601D 6307
652F 5B5C 65AF 65BD 65E8 679D 6B62 6B7B 6C0F 7345
7949 79C1 7CF8 7D19 7D2B 80A2 8102 81F3 8996 8A5E
8A69 8A66 8A8C 8AEE 8CC7 8CDC 96CC 98FC 6B6F 4E8B
4F3C 4F8D 5150 5B57 5BFA 6148 6301 6642 6B21 6ECB
6CBB 723E 74BD 75D4 78C1 793A 800C 8033 81EA 8494
8F9E 6C50 9E7F 5F0F 8B58 9D2B 7AFA 8EF8 5B8D 96EB
4E03 53F1 57F7 5931 5AC9 5BA4 6089 6E7F 6F06 75BE
8CEA 5B9F 8500 7BE0 5072 67F4 829D 5C61 854A 7E1E
820E 5199 5C04 6368 8D66 659C 716E 793E 7D17 8005
8B1D 8ECA 906E 86C7 90AA 501F 52FA 5C3A 6753 707C
7235 914C 91C8 932B 82E5 5BC2 5F31 60F9 4E3B 53D6
5B88 624B 6731 6B8A 72E9 73E0 7A2E 816B 8DA3 9152
9996 5112 53D7 546A 5BFF 6388 6A39 7DAC 9700 56DA
53CE 5468 5B97 5C31 5DDE 4FEE 6101 62FE 6D32 79C0
79CB 7D42 7E4D 7FD2 81ED 821F 8490 8846 8972 8B90
8E74 8F2F 9031 914B 916C 96C6 919C 4EC0 4F4F 5145
5341 5F93 620E 67D4 6C41 6E0B 7363 7E26 91CD 9283
53D4 5919 5BBF 6DD1 795D 7E2E 7C9B 587E 719F 51FA
8853 8FF0 4FCA 5CFB 6625 77AC 7AE3 821C 99FF 51C6
5FAA 65EC 696F 6B89 6DF3 6E96 6F64 76FE 7D14 5DE1
9075 9187 9806 51E6 521D 6240 6691 66D9 6E1A 5EB6
7DD2 7F72 66F8 85AF 85F7 8AF8 52A9 53D9 5973 5E8F
5F90 6055 92E4 9664 50B7 511F 52DD 5320 5347 53EC
54E8 5546 5531 5617 5968 59BE 5A3C 5BB5 5C06 5C0F
5C11 5C1A 5E84 5E8A 5EE0 5F70 627F 6284 62DB 638C
6377 6607 660C 662D 6676 677E 68A2 6A1F 6A35 6CBC
6D88 6E09 6E58 713C 7126 7167 75C7 7701 785D 7901
7965 79F0 7AE0 7B11 7CA7 7D39 8096 83D6 848B 8549
885D 88F3 8A1F 8A3C 8A54 8A73 8C61 8CDE 91A4 9266
937E 9418 969C 9798 4E0A 4E08 4E1E 4E57 5197 5270
57CE 5834 58CC 5B22 5E38 60C5 64FE 6761 6756 6D44
72B6 7573 7A63 84B8 8B72 91B8 9320 5631 57F4 98FE
62ED 690D 6B96 71ED 7E54 8077 8272 89E6 98DF 8755
8FB1 5C3B 4F38 4FE1 4FB5 5507 5A20 5BDD 5BE9 5FC3
614E 632F 65B0 664B 68EE 699B 6D78 6DF1 7533 75B9
771F 795E 79E6 7D33 81E3 82AF 85AA 89AA 8A3A 8EAB
8F9B 9032 91DD 9707 4EBA 4EC1 5203 5875 58EC 5C0B
751A 5C3D 814E 8A0A 8FC5 9663 976D 7B25 8ACF 9808
9162 56F3 53A8 9017 5439 5782 5E25 63A8 6C34 708A
7761 7C8B 7FE0 8870 9042 9154 9310 9318 968F 745E
9AC4 5D07 5D69 6570 67A2 8DA8 96DB 636E 6749 6919
83C5 9817 96C0 88FE 6F84 647A 5BF8 4E16 702C 755D
662F 51C4 5236 52E2 59D3 5F81 6027 6210 653F 6574
661F 6674 68F2 6816 6B63 6E05 7272 751F 76DB 7CBE
8056 58F0 88FD 897F 8AA0 8A93 8ACB 901D 9192 9752
9759 6589 7A0E 8106 96BB 5E2D 60DC 621A 65A5 6614
6790 77F3 7A4D 7C4D 7E3E 810A 8CAC 8D64 8DE1 8E5F
78A9 5207 62D9 63A5 6442 6298 8A2D 7A83 7BC0 8AAC
96EA 7D76 820C 8749 4ED9 5148 5343 5360 5BA3 5C02
5C16 5DDD 6226 6247 64B0 6813 6834 6CC9 6D45 6D17
67D3 6F5C 714E 717D 65CB 7A7F 7BAD 7DDA 7E4A 7FA8
817A 821B 8239 85A6 8A6E 8CCE 8DF5 9078 9077 92AD
9291 9583 9BAE 524D 5584 6F38 7136 5168 7985 7E55
81B3 7CCE 564C 5851 5CA8 63AA 66FE 66FD 695A 72D9
758F 758E 790E 7956 79DF 7C97 7D20 7D44 8607 8A34
963B 9061 9F20 50E7 5275 53CC 53E2 5009 55AA 58EE
594F 723D 5B8B 5C64 531D 60E3 60F3 635C 6383 633F
63BB 64CD 65E9 66F9 5DE3 69CD 69FD 6F15 71E5 4E89
75E9 76F8 7A93 7CDF 7DCF 7D9C 8061 8349 8358 846C
84BC 85FB 88C5 8D70 9001 906D 9397 971C 9A12 50CF
5897 618E 81D3 8535 8D08 9020 4FC3 5074 5247 5373
606F 6349 675F 6E2C 8DB3 901F 4FD7 5C5E 8CCA 65CF
7D9A 5352 8896 5176 63C3 5B58 5B6B 5C0A 640D 6751
905C 4ED6 591A 592A 6C70 8A51 553E 5815 59A5 60F0
6253 67C1 8235 6955 9640 99C4 9A28 4F53 5806 5BFE
8010 5CB1 5E2F 5F85 6020 614B 6234 66FF 6CF0 6EDE
80CE 817F 82D4 888B 8CB8 9000 902E 968A 9EDB 9BDB
4EE3 53F0 5927 7B2C 918D 984C 9DF9 6EDD 7027 5353
5544 5B85 6258 629E 62D3 6CA2 6FEF 7422 8A17 9438
6FC1 8AFE 8338 51E7 86F8 53EA 53E9 4F46 9054 8FB0
596A 8131 5DFD 7AEA 8FBF 68DA 8C37 72F8 9C48 6A3D
8AB0 4E39 5358 5606 5766 62C5 63A2 65E6 6B4E 6DE1
6E5B 70AD 77ED 7AEF 7BAA 7DBB 803D 80C6 86CB 8A95
935B 56E3 58C7 5F3E 65AD 6696 6A80 6BB5 7537 8AC7
5024 77E5 5730 5F1B 6065 667A 6C60 75F4 7A1A 7F6E
81F4 8718 9045 99B3 7BC9 755C 7AF9 7B51 84C4 9010
79E9 7A92 8336 5AE1 7740 4E2D 4EF2 5B99 5FE0 62BD
663C 67F1 6CE8 866B 8877 8A3B 914E 92F3 99D0 6A17
7026 732A 82E7 8457 8CAF 4E01 5146 51CB 558B 5BF5
5E16 5E33 5E81 5F14 5F35 5F6B 5FB4 61F2 6311 66A2
671D 6F6E 7252 753A 773A 8074 8139 8178 8776 8ABF
8ADC 8D85 8DF3 929A 9577 9802 9CE5 52C5 6357 76F4
6715 6C88 73CD 8CC3 93AE 9673 6D25 589C 690E 69CC
8FFD 939A 75DB 901A 585A 6802 63B4 69FB 4F43 6F2C
67D8 8FBB 8526 7DB4 9354 693F 6F70 576A 58F7 5B2C
7D2C 722A 540A 91E3 9DB4 4EAD 4F4E 505C 5075 5243
8C9E 5448 5824 5B9A 5E1D 5E95 5EAD 5EF7 5F1F 608C
62B5 633A 63D0 68AF 6C40 7887 798E 7A0B 7DE0 8247
8A02 8AE6 8E44 9013 90B8 912D 91D8 9F0E 6CE5 6458
64E2 6575 6EF4 7684 7B1B 9069 93D1 6EBA 54F2 5FB9
64A4 8F4D 8FED 9244 5178 586B 5929 5C55 5E97 6DFB
7E8F 751C 8CBC 8EE2 985B 70B9 4F1D 6BBF 6FB1 7530
96FB 514E 5410 5835 5857 59AC 5C60 5F92 6597 675C
6E21 767B 83DF 8CED 9014 90FD 934D 7825 783A 52AA
5EA6 571F 5974 6012 5012 515A 51AC 51CD 5200 5510
5854 5858 5957 5B95 5CF6 5D8B 60BC 6295 642D 6771
6843 68BC 68DF 76D7 6DD8 6E6F 6D9B 706F 71C8 5F53
75D8 7977 7B49 7B54 7B52 7CD6 7D71 5230 8463 8569
85E4 8A0E 8B04 8C46 8E0F 9003 900F 9419 9676 982D
9A30 95D8 50CD 52D5 540C 5802 5C0E 61A7 649E 6D1E
77B3 7AE5 80F4 8404 9053 9285 5CE0 9D07 533F 5F97
5FB3 6D9C 7279 7763 79BF 7BE4 6BD2 72EC 8AAD 6803
6A61 51F8 7A81 6934 5C4A 9CF6 82EB 5BC5 9149 701E
5678 5C6F 60C7 6566 6C8C 8C5A 9041 9813 5451 66C7
920D 5948 90A3 5185 4E4D 51EA 8599 8B0E 7058 637A
934B 6962 99B4 7E04 7577 5357 6960 8EDF 96E3 6C5D
4E8C 5C3C 5F10 8FE9 5302 8CD1 8089 8679 5EFF 65E5
4E73 5165 5982 5C3F 97EE 4EFB 598A 5FCD 8A8D 6FE1
79B0 7962 5BE7 8471 732B 71B1 5E74 5FF5 637B 649A
71C3 7C98 4E43 5EFC 4E4B 57DC 56A2 60A9 6FC3 7D0D
80FD 8133 81BF 8FB2 8997 86A4 5DF4 628A 64AD 8987
6777 6CE2 6D3E 7436 7834 5A46 7F75 82AD 99AC 4FF3
5EC3 62DD 6392 6557 676F 76C3 724C 80CC 80BA 8F29
914D 500D 57F9 5A92 6885 6973 7164 72FD 8CB7 58F2
8CE0 966A 9019 877F 79E4 77E7 8429 4F2F 5265 535A
62CD 67CF 6CCA 767D 7B94 7C95 8236 8584 8FEB 66DD
6F20 7206 7E1B 83AB 99C1 9EA6 51FD 7BB1 7872 7BB8
8087 7B48 6AE8 5E61 808C 7551 7560 516B 9262 6E8C
767A 9197 9AEA 4F10 7F70 629C 7B4F 95A5 9CE9 567A
5859 86E4 96BC 4F34 5224 534A 53CD 53DB 5E06 642C
6591 677F 6C3E 6C4E 7248 72AF 73ED 7554 7E41 822C
85E9 8CA9 7BC4 91C6 7169 9812 98EF 633D 6669 756A
76E4 78D0 8543 86EE 532A 5351 5426 5983 5E87 5F7C
60B2 6249 6279 62AB 6590 6BD4 6CCC 75B2 76AE 7891
79D8 7DCB 7F77 80A5 88AB 8AB9 8CBB 907F 975E 98DB
6A0B 7C38 5099 5C3E 5FAE 6787 6BD8 7435 7709 7F8E
9F3B 67CA 7A17 5339 758B 9AED 5F66 819D 83F1 8098
5F3C 5FC5 7562 7B46 903C 6867 59EB 5A9B 7D10 767E
8B2C 4FF5 5F6A 6A19 6C37 6F02 74E2 7968 8868 8A55
8C79 5EDF 63CF 75C5 79D2 82D7 9328 92F2 849C 86ED
9C2D 54C1 5F6C 658C 6D5C 7015 8CA7 8CD3 983B 654F
74F6 4E0D 4ED8 57E0 592B 5A66 5BCC 51A8 5E03 5E9C
6016 6276 6577 65A7 666E 6D6E 7236 7B26 8150 819A
8299 8B5C 8CA0 8CE6 8D74 961C 9644 4FAE 64AB 6B66
821E 8461 856A 90E8 5C01 6953 98A8 847A 8557 4F0F
526F 5FA9 5E45 670D 798F 8179 8907 8986 6DF5 5F17
6255 6CB8 4ECF 7269 9B92 5206 543B 5674 58B3 61A4
626E 711A 596E 7C89 7CDE 7D1B 96F0 6587 805E 4E19
4F75 5175 5840 5E63 5E73 5F0A 67C4 4E26 853D 9589
965B 7C73 9801 50FB 58C1 7656 78A7 5225 77A5 8511
7B86 504F 5909 7247 7BC7 7DE8 8FBA 8FD4 904D 4FBF
52C9 5A29 5F01 97AD 4FDD 8217 92EA 5703 6355 6B69
752B 88DC 8F14 7A42 52DF 5893 6155 620A 66AE 6BCD
7C3F 83E9 5023 4FF8 5305 5446 5831 5949 5B9D 5CF0
5CEF 5D29 5E96 62B1 6367 653E 65B9 670B 6CD5 6CE1
70F9 7832 7E2B 80DE 82B3 840C 84EC 8702 8912 8A2A
8C4A 90A6 92D2 98FD 9CF3 9D6C 4E4F 4EA1 508D 5256
574A 59A8 5E3D 5FD8 5FD9 623F 66B4 671B 67D0 68D2
5192 7D21 80AA 81A8 8B00 8C8C 8CBF 927E 9632 5420
982C 5317 50D5 535C 58A8 64B2 6734 7267 7766 7A46
91E6 52C3 6CA1 6B86 5800 5E4C 5954 672C 7FFB 51E1
76C6 6469 78E8 9B54 9EBB 57CB 59B9 6627 679A 6BCE
54E9 69D9 5E55 819C 6795 9BAA 67FE 9C52 685D 4EA6
4FE3 53C8 62B9 672B 6CAB 8FC4 4FAD 7E6D 9EBF 4E07
6162 6E80 6F2B 8513 5473 672A 9B45 5DF3 7B95 5CAC
5BC6 871C 6E4A 84D1 7A14 8108 5999 7C8D 6C11 7720
52D9 5922 7121 725F 77DB 9727 9D61 690B 5A7F 5A18
51A5 540D 547D 660E 76DF 8FF7 9298 9CF4 59EA 725D
6EC5 514D 68C9 7DBF 7DEC 9762 9EBA 6478 6A21 8302
5984 5B5F 6BDB 731B 76F2 7DB2 8017 8499 5132 6728
9ED9 76EE 6762 52FF 9905 5C24 623B 7C7E 8CB0 554F
60B6 7D0B 9580 5301 4E5F 51B6 591C 723A 8036 91CE
5F25 77E2 5384 5F79 7D04 85AC 8A33 8E8D 9756 67F3
85AE 9453 6109 6108 6CB9 7652 8AED 8F38 552F 4F51
512A 52C7 53CB 5BA5 5E7D 60A0 6182 63D6 6709 67DA
6E67 6D8C 7336 7337 7531 7950 88D5 8A98 904A 9091
90F5 96C4 878D 5915 4E88 4F59 4E0E 8A89 8F3F 9810
50AD 5E7C 5996 5BB9 5EB8 63DA 63FA 64C1 66DC 694A
69D8 6D0B 6EB6 7194 7528 7AAF 7F8A 8000 8449 84C9
8981 8B21 8E0A 9065 967D 990A 617E 6291 6B32 6C83
6D74 7FCC 7FFC 6DC0 7F85 87BA 88F8 6765 83B1 983C
96F7 6D1B 7D61 843D 916A 4E71 5375 5D50 6B04 6FEB
85CD 862D 89A7 5229 540F 5C65 674E 68A8 7406 7483
75E2 88CF 88E1 91CC 96E2 9678 5F8B 7387 7ACB 844E
63A0 7565 5289 6D41 6E9C 7409 7559 786B 7C92 9686
7ADC 9F8D 4FB6 616E 65C5 865C 4E86 4EAE 50DA 4E21
51CC 5BEE 6599 6881 6DBC 731F 7642 77AD 7A1C 7CE7
826F 8AD2 907C 91CF 9675 9818 529B 7DD1 502B 5398
6797 6DCB 71D0 7433 81E8 8F2A 96A3 9C57 9E9F 7460
5841 6D99 7D2F 985E 4EE4 4F36 4F8B 51B7 52B1 5DBA
601C 73B2 793C 82D3 9234 96B7 96F6 970A 9E97 9F62
66A6 6B74 5217 52A3 70C8 88C2 5EC9 604B 6190 6F23
7149 7C3E 7DF4 806F 84EE 9023 932C 5442 9B6F 6AD3
7089 8CC2 8DEF 9732 52B4 5A41 5ECA 5F04 6717 697C
6994 6D6A 6F0F 7262 72FC 7BED 8001 807E 874B 90CE
516D 9E93 7984 808B 9332 8AD6 502D 548C 8A71 6B6A
8CC4 8107 60D1 67A0 9DF2 4E99 4E98 9C10 8A6B 85C1
8568 6900 6E7E 7897 8155 5F0C 4E10 4E15 4E2A 4E31
4E36 4E3C 4E3F 4E42 4E56 4E58 4E82 4E85 8C6B 4E8A
8212 5F0D 4E8E 4E9E 4E9F 4EA0 4EA2 4EB0 4EB3 4EB6
4ECE 4ECD 4EC4 4EC6 4EC2 4ED7 4EDE 4EED 4EDF 4EF7
4F09 4F5A 4F30 4F5B 4F5D 4F57 4F47 4F76 4F88 4F8F
4F98 4F7B 4F69 4F70 4F91 4F6F 4F86 4F96 5118 4FD4
4FDF 4FCE 4FD8 4FDB 4FD1 4FDA 4FD0 4FE4 4FE5 501A
5028 5014 502A 5025 5005 4F1C 4FF6 5021 5029 502C
4FFE 4FEF 5011 5006 5043 5047 6703 5055 5050 5048
505A 5056 506C 5078 5080 509A 5085 50B4 50B2 50C9
50CA 50B3 50C2 50D6 50DE 50E5 50ED 50E3 50EE 50F9
50F5 5109 5101 5102 5116 5115 5114 511A 5121 513A
5137 513C 513B 513F 5140 5152 514C 5154 5162 7AF8
5169 516A 516E 5180 5182 56D8 518C 5189 518F 5191
5193 5195 5196 51A4 51A6 51A2 51A9 51AA 51AB 51B3
51B1 51B2 51B0 51B5 51BD 51C5 51C9 51DB 51E0 8655
51E9 51ED 51F0 51F5 51FE 5204 520B 5214 520E 5227
522A 522E 5233 5239 524F 5244 524B 524C 525E 5254
526A 5274 5269 5273 527F 527D 528D 5294 5292 5271
5288 5291 8FA8 8FA7 52AC 52AD 52BC 52B5 52C1 52CD
52D7 52DE 52E3 52E6 98ED 52E0 52F3 52F5 52F8 52F9
5306 5308 7538 530D 5310 530F 5315 531A 5323 532F
5331 5333 5338 5340 5346 5345 4E17 5349 534D 51D6
535E 5369 536E 5918 537B 5377 5382 5396 53A0 53A6
53A5 53AE 53B0 53B6 53C3 7C12 96D9 53DF 66FC 71EE
53EE 53E8 53ED 53FA 5401 543D 5440 542C 542D 543C
542E 5436 5429 541D 544E 548F 5475 548E 545F 5471
5477 5470 5492 547B 5480 5476 5484 5490 5486 54C7
54A2 54B8 54A5 54AC 54C4 54C8 54A8 54AB 54C2 54A4
54BE 54BC 54D8 54E5 54E6 550F 5514 54FD 54EE 54ED
54FA 54E2 5539 5540 5563 554C 552E 555C 5545 5556
5557 5538 5533 555D 5599 5580 54AF 558A 559F 557B
557E 5598 559E 55AE 557C 5583 55A9 5587 55A8 55DA
55C5 55DF 55C4 55DC 55E4 55D4 5614 55F7 5616 55FE
55FD 561B 55F9 564E 5650 71DF 5634 5636 5632 5638
566B 5664 562F 566C 566A 5686 5680 568A 56A0 5694
568F 56A5 56AE 56B6 56B4 56C2 56BC 56C1 56C3 56C0
56C8 56CE 56D1 56D3 56D7 56EE 56F9 5700 56FF 5704
5709 5708 570B 570D 5713 5718 5716 55C7 571C 5726
5737 5738 574E 573B 5740 574F 5769 57C0 5788 5761
577F 5789 5793 57A0 57B3 57A4 57AA 57B0 57C3 57C6
57D4 57D2 57D3 580A 57D6 57E3 580B 5819 581D 5872
5821 5862 584B 5870 6BC0 5852 583D 5879 5885 58B9
589F 58AB 58BA 58DE 58BB 58B8 58AE 58C5 58D3 58D1
58D7 58D9 58D8 58E5 58DC 58E4 58DF 58EF 58FA 58F9
58FB 58FC 58FD 5902 590A 5910 591B 68A6 5925 592C
592D 5932 5938 593E 7AD2 5955 5950 594E 595A 5958
5962 5960 5967 596C 5969 5978 5981 599D 4F5E 4FAB
59A3 59B2 59C6 59E8 59DC 598D 59D9 59DA 5A25 5A1F
5A11 5A1C 5A09 5A1A 5A40 5A6C 5A49 5A35 5A36 5A62
5A6A 5A9A 5ABC 5ABE 5ACB 5AC2 5ABD 5AE3 5AD7 5AE6
5AE9 5AD6 5AFA 5AFB 5B0C 5B0B 5B16 5B32 5AD0 5B2A
5B36 5B3E 5B43 5B45 5B40 5B51 5B55 5B5A 5B5B 5B65
5B69 5B70 5B73 5B75 5B78 6588 5B7A 5B80 5B83 5BA6
5BB8 5BC3 5BC7 5BC9 5BD4 5BD0 5BE4 5BE6 5BE2 5BDE
5BE5 5BEB 5BF0 5BF6 5BF3 5C05 5C07 5C08 5C0D 5C13
5C20 5C22 5C28 5C38 5C39 5C41 5C46 5C4E 5C53 5C50
5C4F 5B71 5C6C 5C6E 4E62 5C76 5C79 5C8C 5C91 5C94
599B 5CAB 5CBB 5CB6 5CBC 5CB7 5CC5 5CBE 5CC7 5CD9
5CE9 5CFD 5CFA 5CED 5D8C 5CEA 5D0B 5D15 5D17 5D5C
5D1F 5D1B 5D11 5D14 5D22 5D1A 5D19 5D18 5D4C 5D52
5D4E 5D4B 5D6C 5D73 5D76 5D87 5D84 5D82 5DA2 5D9D
5DAC 5DAE 5DBD 5D90 5DB7 5DBC 5DC9 5DCD 5DD3 5DD2
5DD6 5DDB 5DEB 5DF2 5DF5 5E0B 5E1A 5E19 5E11 5E1B
5E36 5E37 5E44 5E43 5E40 5E4E 5E57 5E54 5E5F 5E62
5E64 5E47 5E75 5E76 5E7A 9EBC 5E7F 5EA0 5EC1 5EC2
5EC8 5ED0 5ECF 5ED6 5EE3 5EDD 5EDA 5EDB 5EE2 5EE1
5EE8 5EE9 5EEC 5EF1 5EF3 5EF0 5EF4 5EF8 5EFE 5F03
5F09 5F5D 5F5C 5F0B 5F11 5F16 5F29 5F2D 5F38 5F41
5F48 5F4C 5F4E 5F2F 5F51 5F56 5F57 5F59 5F61 5F6D
5F73 5F77 5F83 5F82 5F7F 5F8A 5F88 5F91 5F87 5F9E
5F99 5F98 5FA0 5FA8 5FAD 5FBC 5FD6 5FFB 5FE4 5FF8
5FF1 5FDD 60B3 5FFF 6021 6060 6019 6010 6029 600E
6031 601B 6015 602B 6026 600F 603A 605A 6041 606A
6077 605F 604A 6046 604D 6063 6043 6064 6042 606C
606B 6059 6081 608D 60E7 6083 609A 6084 609B 6096
6097 6092 60A7 608B 60E1 60B8 60E0 60D3 60B4 5FF0
60BD 60C6 60B5 60D8 614D 6115 6106 60F6 60F7 6100
60F4 60FA 6103 6121 60FB 60F1 610D 610E 6147 613E
6128 6127 614A 613F 613C 612C 6134 613D 6142 6144
6173 6177 6158 6159 615A 616B 6174 616F 6165 6171
615F 615D 6153 6175 6199 6196 6187 61AC 6194 619A
618A 6191 61AB 61AE 61CC 61CA 61C9 61F7 61C8 61C3
61C6 61BA 61CB 7F79 61CD 61E6 61E3 61F6 61FA 61F4
61FF 61FD 61FC 61FE 6200 6208 6209 620D 620C 6214
621B 621E 6221 622A 622E 6230 6232 6233 6241 624E
625E 6263 625B 6260 6268 627C 6282 6289 627E 6292
6293 6296 62D4 6283 6294 62D7 62D1 62BB 62CF 62FF
62C6 64D4 62C8 62DC 62CC 62CA 62C2 62C7 629B 62C9
630C 62EE 62F1 6327 6302 6308 62EF 62F5 6350 633E
634D 641C 634F 6396 638E 6380 63AB 6376 63A3 638F
6389 639F 63B5 636B 6369 63BE 63E9 63C0 63C6 63E3
63C9 63D2 63F6 63C4 6416 6434 6406 6413 6426 6436
651D 6417 6428 640F 6467 646F 6476 644E 652A 6495
6493 64A5 64A9 6488 64BC 64DA 64D2 64C5 64C7 64BB
64D8 64C2 64F1 64E7 8209 64E0 64E1 62AC 64E3 64EF
652C 64F6 64F4 64F2 64FA 6500 64FD 6518 651C 6505
6524 6523 652B 6534 6535 6537 6536 6538 754B 6548
6556 6555 654D 6558 655E 655D 6572 6578 6582 6583
8B8A 659B 659F 65AB 65B7 65C3 65C6 65C1 65C4 65CC
65D2 65DB 65D9 65E0 65E1 65F1 6772 660A 6603 65FB
6773 6635 6636 6634 661C 664F 6644 6649 6641 665E
665D 6664 6667 6668 665F 6662 6670 6683 6688 668E
6689 6684 6698 669D 66C1 66B9 66C9 66BE 66BC 66C4
66B8 66D6 66DA 66E0 663F 66E6 66E9 66F0 66F5 66F7
670F 6716 671E 6726 6727 9738 672E 673F 6736 6741
6738 6737 6746 675E 6760 6759 6763 6764 6789 6770
67A9 677C 676A 678C 678B 67A6 67A1 6785 67B7 67EF
67B4 67EC 67B3 67E9 67B8 67E4 67DE 67DD 67E2 67EE
67B9 67CE 67C6 67E7 6A9C 681E 6846 6829 6840 684D
6832 684E 68B3 682B 6859 6863 6877 687F 689F 688F
68AD 6894 689D 689B 6883 6AAE 68B9 6874 68B5 68A0
68BA 690F 688D 687E 6901 68CA 6908 68D8 6922 6926
68E1 690C 68CD 68D4 68E7 68D5 6936 6912 6904 68D7
68E3 6925 68F9 68E0 68EF 6928 692A 691A 6923 6921
68C6 6979 6977 695C 6978 696B 6954 697E 696E 6939
6974 693D 6959 6930 6961 695E 695D 6981 696A 69B2
69AE 69D0 69BF 69C1 69D3 69BE 69CE 5BE8 69CA 69DD
69BB 69C3 69A7 6A2E 6991 69A0 699C 6995 69B4 69DE
69E8 6A02 6A1B 69FF 6B0A 69F9 69F2 69E7 6A05 69B1
6A1E 69ED 6A14 69EB 6A0A 6A12 6AC1 6A23 6A13 6A44
6A0C 6A72 6A36 6A78 6A47 6A62 6A59 6A66 6A48 6A38
6A22 6A90 6A8D 6AA0 6A84 6AA2 6AA3 6A97 8617 6ABB
6AC3 6AC2 6AB8 6AB3 6AAC 6ADE 6AD1 6ADF 6AAA 6ADA
6AEA 6AFB 6B05 8616 6AFA 6B12 6B16 9B31 6B1F 6B38
6B37 76DC 6B39 98EE 6B47 6B43 6B49 6B50 6B59 6B54
6B5B 6B5F 6B61 6B78 6B79 6B7F 6B80 6B84 6B83 6B8D
6B98 6B95 6B9E 6BA4 6BAA 6BAB 6BAF 6BB2 6BB1 6BB3
6BB7 6BBC 6BC6 6BCB 6BD3 6BDF 6BEC 6BEB 6BF3 6BEF
9EBE 6C08 6C13 6C14 6C1B 6C24 6C23 6C5E 6C55 6C62
6C6A 6C82 6C8D 6C9A 6C81 6C9B 6C7E 6C68 6C73 6C92
6C90 6CC4 6CF1 6CD3 6CBD 6CD7 6CC5 6CDD 6CAE 6CB1
6CBE 6CBA 6CDB 6CEF 6CD9 6CEA 6D1F 884D 6D36 6D2B
6D3D 6D38 6D19 6D35 6D33 6D12 6D0C 6D63 6D93 6D64
6D5A 6D79 6D59 6D8E 6D95 6FE4 6D85 6DF9 6E15 6E0A
6DB5 6DC7 6DE6 6DB8 6DC6 6DEC 6DDE 6DCC 6DE8 6DD2
6DC5 6DFA 6DD9 6DE4 6DD5 6DEA 6DEE 6E2D 6E6E 6E2E
6E19 6E72 6E5F 6E3E 6E23 6E6B 6E2B 6E76 6E4D 6E1F
6E43 6E3A 6E4E 6E24 6EFF 6E1D 6E38 6E82 6EAA 6E98
6EC9 6EB7 6ED3 6EBD 6EAF 6EC4 6EB2 6ED4 6ED5 6E8F
6EA5 6EC2 6E9F 6F41 6F11 704C 6EEC 6EF8 6EFE 6F3F
6EF2 6F31 6EEF 6F32 6ECC 6F3E 6F13 6EF7 6F86 6F7A
6F78 6F81 6F80 6F6F 6F5B 6FF3 6F6D 6F82 6F7C 6F58
6F8E 6F91 6FC2 6F66 6FB3 6FA3 6FA1 6FA4 6FB9 6FC6
6FAA 6FDF 6FD5 6FEC 6FD4 6FD8 6FF1 6FEE 6FDB 7009
700B 6FFA 7011 7001 700F 6FFE 701B 701A 6F74 701D
7018 701F 7030 703E 7032 7051 7063 7099 7092 70AF
70F1 70AC 70B8 70B3 70AE 70DF 70CB 70DD 70D9 7109
70FD 711C 7119 7165 7155 7188 7166 7162 714C 7156
716C 718F 71FB 7184 7195 71A8 71AC 71D7 71B9 71BE
71D2 71C9 71D4 71CE 71E0 71EC 71E7 71F5 71FC 71F9
71FF 720D 7210 721B 7228 722D 722C 7230 7232 723B
723C 723F 7240 7246 724B 7258 7274 727E 7282 7281
7287 7292 7296 72A2 72A7 72B9 72B2 72C3 72C6 72C4
72CE 72D2 72E2 72E0 72E1 72F9 72F7 500F 7317 730A
731C 7316 731D 7334 732F 7329 7325 733E 734E 734F
9ED8 7357 736A 7368 7370 7378 7375 737B 737A 73C8
73B3 73CE 73BB 73C0 73E5 73EE 73DE 74A2 7405 746F
7425 73F8 7432 743A 7455 743F 745F 7459 7441 745C
7469 7470 7463 746A 7476 747E 748B 749E 74A7 74CA
74CF 74D4 73F1 74E0 74E3 74E7 74E9 74EE 74F2 74F0
74F1 74F8 74F7 7504 7503 7505 750C 750E 750D 7515
7513 751E 7526 752C 753C 7544 754D 754A 7549 755B
7546 755A 7569 7564 7567 756B 756D 7578 7576 7586
7587 7574 758A 7589 7582 7594 759A 759D 75A5 75A3
75C2 75B3 75C3 75B5 75BD 75B8 75BC 75B1 75CD 75CA
75D2 75D9 75E3 75DE 75FE 75FF 75FC 7601 75F0 75FA
75F2 75F3 760B 760D 7609 761F 7627 7620 7621 7622
7624 7634 7630 763B 7647 7648 7646 765C 7658 7661
7662 7668 7669 766A 7667 766C 7670 7672 7676 7678
767C 7680 7683 7688 768B 768E 7696 7693 7699 769A
76B0 76B4 76B8 76B9 76BA 76C2 76CD 76D6 76D2 76DE
76E1 76E5 76E7 76EA 862F 76FB 7708 7707 7704 7729
7724 771E 7725 7726 771B 7737 7738 7747 775A 7768
776B 775B 7765 777F 777E 7779 778E 778B 7791 77A0
779E 77B0 77B6 77B9 77BF 77BC 77BD 77BB 77C7 77CD
77D7 77DA 77DC 77E3 77EE 77FC 780C 7812 7926 7820
792A 7845 788E 7874 7886 787C 789A 788C 78A3 78B5
78AA 78AF 78D1 78C6 78CB 78D4 78BE 78BC 78C5 78CA
78EC 78E7 78DA 78FD 78F4 7907 7912 7911 7919 792C
792B 7940 7960 7957 795F 795A 7955 7953 797A 797F
798A 799D 79A7 9F4B 79AA 79AE 79B3 79B9 79BA 79C9
79D5 79E7 79EC 79E1 79E3 7A08 7A0D 7A18 7A19 7A20
7A1F 7980 7A31 7A3B 7A3E 7A37 7A43 7A57 7A49 7A61
7A62 7A69 9F9D 7A70 7A79 7A7D 7A88 7A97 7A95 7A98
7A96 7AA9 7AC8 7AB0 7AB6 7AC5 7AC4 7ABF 9083 7AC7
7ACA 7ACD 7ACF 7AD5 7AD3 7AD9 7ADA 7ADD 7AE1 7AE2
7AE6 7AED 7AF0 7B02 7B0F 7B0A 7B06 7B33 7B18 7B19
7B1E 7B35 7B28 7B36 7B50 7B7A 7B04 7B4D 7B0B 7B4C
7B45 7B75 7B65 7B74 7B67 7B70 7B71 7B6C 7B6E 7B9D
7B98 7B9F 7B8D 7B9C 7B9A 7B8B 7B92 7B8F 7B5D 7B99
7BCB 7BC1 7BCC 7BCF 7BB4 7BC6 7BDD 7BE9 7C11 7C14
7BE6 7BE5 7C60 7C00 7C07 7C13 7BF3 7BF7 7C17 7C0D
7BF6 7C23 7C27 7C2A 7C1F 7C37 7C2B 7C3D 7C4C 7C43
7C54 7C4F 7C40 7C50 7C58 7C5F 7C64 7C56 7C65 7C6C
7C75 7C83 7C90 7CA4 7CAD 7CA2 7CAB 7CA1 7CA8 7CB3
7CB2 7CB1 7CAE 7CB9 7CBD 7CC0 7CC5 7CC2 7CD8 7CD2
7CDC 7CE2 9B3B 7CEF 7CF2 7CF4 7CF6 7CFA 7D06 7D02
7D1C 7D15 7D0A 7D45 7D4B 7D2E 7D32 7D3F 7D35 7D46
7D73 7D56 7D4E 7D72 7D68 7D6E 7D4F 7D63 7D93 7D89
7D5B 7D8F 7D7D 7D9B 7DBA 7DAE 7DA3 7DB5 7DC7 7DBD
7DAB 7E3D 7DA2 7DAF 7DDC 7DB8 7D9F 7DB0 7DD8 7DDD
7DE4 7DDE 7DFB 7DF2 7DE1 7E05 7E0A 7E23 7E21 7E12
7E31 7E1F 7E09 7E0B 7E22 7E46 7E66 7E3B 7E35 7E39
7E43 7E37 7E32 7E3A 7E67 7E5D 7E56 7E5E 7E59 7E5A
7E79 7E6A 7E69 7E7C 7E7B 7E83 7DD5 7E7D 8FAE 7E7F
7E88 7E89 7E8C 7E92 7E90 7E93 7E94 7E96 7E8E 7E9B
7E9C 7F38 7F3A 7F45 7F4C 7F4D 7F4E 7F50 7F51 7F55
7F54 7F58 7F5F 7F60 7F68 7F69 7F67 7F78 7F82 7F86
7F83 7F88 7F87 7F8C 7F94 7F9E 7F9D 7F9A 7FA3 7FAF
7FB2 7FB9 7FAE 7FB6 7FB8 8B71 7FC5 7FC6 7FCA 7FD5
7FD4 7FE1 7FE6 7FE9 7FF3 7FF9 98DC 8006 8004 800B
8012 8018 8019 801C 8021 8028 803F 803B 804A 8046
8052 8058 805A 805F 8062 8068 8073 8072 8070 8076
8079 807D 807F 8084 8086 8085 809B 8093 809A 80AD
5190 80AC 80DB 80E5 80D9 80DD 80C4 80DA 80D6 8109
80EF 80F1 811B 8129 8123 812F 814B 968B 8146 813E
8153 8151 80FC 8171 816E 8165 8166 8174 8183 8188
818A 8180 8182 81A0 8195 81A4 81A3 815F 8193 81A9
81B0 81B5 81BE 81B8 81BD 81C0 81C2 81BA 81C9 81CD
81D1 81D9 81D8 81C8 81DA 81DF 81E0 81E7 81FA 81FB
81FE 8201 8202 8205 8207 820A 820D 8210 8216 8229
822B 8238 8233 8240 8259 8258 825D 825A 825F 8264
8262 8268 826A 826B 822E 8271 8277 8278 827E 828D
8292 82AB 829F 82BB 82AC 82E1 82E3 82DF 82D2 82F4
82F3 82FA 8393 8303 82FB 82F9 82DE 8306 82DC 8309
82D9 8335 8334 8316 8332 8331 8340 8339 8350 8345
832F 832B 8317 8318 8385 839A 83AA 839F 83A2 8396
8323 838E 8387 838A 837C 83B5 8373 8375 83A0 8389
83A8 83F4 8413 83EB 83CE 83FD 8403 83D8 840B 83C1
83F7 8407 83E0 83F2 840D 8422 8420 83BD 8438 8506
83FB 846D 842A 843C 855A 8484 8477 846B 84AD 846E
8482 8469 8446 842C 846F 8479 8435 84CA 8462 84B9
84BF 849F 84D9 84CD 84BB 84DA 84D0 84C1 84C6 84D6
84A1 8521 84FF 84F4 8517 8518 852C 851F 8515 8514
84FC 8540 8563 8558 8548 8541 8602 854B 8555 8580
85A4 8588 8591 858A 85A8 856D 8594 859B 85EA 8587
859C 8577 857E 8590 85C9 85BA 85CF 85B9 85D0 85D5
85DD 85E5 85DC 85F9 860A 8613 860B 85FE 85FA 8606
8622 861A 8630 863F 864D 4E55 8654 865F 8667 8671
8693 86A3 86A9 86AA 868B 868C 86B6 86AF 86C4 86C6
86B0 86C9 8823 86AB 86D4 86DE 86E9 86EC 86DF 86DB
86EF 8712 8706 8708 8700 8703 86FB 8711 8709 870D
86F9 870A 8734 873F 8737 873B 8725 8729 871A 8760
875F 8778 874C 874E 8774 8757 8768 876E 8759 8753
8763 876A 8805 87A2 879F 8782 87AF 87CB 87BD 87C0
87D0 96D6 87AB 87C4 87B3 87C7 87C6 87BB 87EF 87F2
87E0 880F 880D 87FE 87F6 87F7 880E 87D2 8811 8816
8815 8822 8821 8831 8836 8839 8827 883B 8844 8842
8852 8859 885E 8862 886B 8881 887E 889E 8875 887D
88B5 8872 8882 8897 8892 88AE 8899 88A2 888D 88A4
88B0 88BF 88B1 88C3 88C4 88D4 88D8 88D9 88DD 88F9
8902 88FC 88F4 88E8 88F2 8904 890C 890A 8913 8943
891E 8925 892A 892B 8941 8944 893B 8936 8938 894C
891D 8960 895E 8966 8964 896D 896A 896F 8974 8977
897E 8983 8988 898A 8993 8998 89A1 89A9 89A6 89AC
89AF 89B2 89BA 89BD 89BF 89C0 89DA 89DC 89DD 89E7
89F4 89F8 8A03 8A16 8A10 8A0C 8A1B 8A1D 8A25 8A36
8A41 8A5B 8A52 8A46 8A48 8A7C 8A6D 8A6C 8A62 8A85
8A82 8A84 8AA8 8AA1 8A91 8AA5 8AA6 8A9A 8AA3 8AC4
8ACD 8AC2 8ADA 8AEB 8AF3 8AE7 8AE4 8AF1 8B14 8AE0
8AE2 8AF7 8ADE 8ADB 8B0C 8B07 8B1A 8AE1 8B16 8B10
8B17 8B20 8B33 97AB 8B26 8B2B 8B3E 8B28 8B41 8B4C
8B4F 8B4E 8B49 8B56 8B5B 8B5A 8B6B 8B5F 8B6C 8B6F
8B74 8B7D 8B80 8B8C 8B8E 8B92 8B93 8B96 8B99 8B9A
8C3A 8C41 8C3F 8C48 8C4C 8C4E 8C50 8C55 8C62 8C6C
8C78 8C7A 8C82 8C89 8C85 8C8A 8C8D 8C8E 8C94 8C7C
8C98 621D 8CAD 8CAA 8CBD 8CB2 8CB3 8CAE 8CB6 8CC8
8CC1 8CE4 8CE3 8CDA 8CFD 8CFA 8CFB 8D04 8D05 8D0A
8D07 8D0F 8D0D 8D10 9F4E 8D13 8CCD 8D14 8D16 8D67
8D6D 8D71 8D73 8D81 8D99 8DC2 8DBE 8DBA 8DCF 8DDA
8DD6 8DCC 8DDB 8DCB 8DEA 8DEB 8DDF 8DE3 8DFC 8E08
8E09 8DFF 8E1D 8E1E 8E10 8E1F 8E42 8E35 8E30 8E34
8E4A 8E47 8E49 8E4C 8E50 8E48 8E59 8E64 8E60 8E2A
8E63 8E55 8E76 8E72 8E7C 8E81 8E87 8E85 8E84 8E8B
8E8A 8E93 8E91 8E94 8E99 8EAA 8EA1 8EAC 8EB0 8EC6
8EB1 8EBE 8EC5 8EC8 8ECB 8EDB 8EE3 8EFC 8EFB 8EEB
8EFE 8F0A 8F05 8F15 8F12 8F19 8F13 8F1C 8F1F 8F1B
8F0C 8F26 8F33 8F3B 8F39 8F45 8F42 8F3E 8F4C 8F49
8F46 8F4E 8F57 8F5C 8F62 8F63 8F64 8F9C 8F9F 8FA3
8FAD 8FAF 8FB7 8FDA 8FE5 8FE2 8FEA 8FEF 9087 8FF4
9005 8FF9 8FFA 9011 9015 9021 900D 901E 9016 900B
9027 9036 9035 9039 8FF8 904F 9050 9051 9052 900E
9049 903E 9056 9058 905E 9068 906F 9076 96A8 9072
9082 907D 9081 9080 908A 9089 908F 90A8 90AF 90B1
90B5 90E2 90E4 6248 90DB 9102 9112 9119 9132 9130
914A 9156 9158 9163 9165 9169 9173 9172 918B 9189
9182 91A2 91AB 91AF 91AA 91B5 91B4 91BA 91C0 91C1
91C9 91CB 91D0 91D6 91DF 91E1 91DB 91FC 91F5 91F6
921E 91FF 9214 922C 9215 9211 925E 9257 9245 9249
9264 9248 9295 923F 924B 9250 929C 9296 9293 929B
925A 92CF 92B9 92B7 92E9 930F 92FA 9344 932E 9319
9322 931A 9323 933A 9335 933B 935C 9360 937C 936E
9356 93B0 93AC 93AD 9394 93B9 93D6 93D7 93E8 93E5
93D8 93C3 93DD 93D0 93C8 93E4 941A 9414 9413 9403
9407 9410 9436 942B 9435 9421 943A 9441 9452 9444
945B 9460 9462 945E 946A 9229 9470 9475 9477 947D
945A 947C 947E 9481 947F 9582 9587 958A 9594 9596
9598 9599 95A0 95A8 95A7 95AD 95BC 95BB 95B9 95BE
95CA 6FF6 95C3 95CD 95CC 95D5 95D4 95D6 95DC 95E1
95E5 95E2 9621 9628 962E 962F 9642 964C 964F 964B
9677 965C 965E 965D 965F 9666 9672 966C 968D 9698
9695 9697 96AA 96A7 96B1 96B2 96B0 96B4 96B6 96B8
96B9 96CE 96CB 96C9 96CD 894D 96DC 970D 96D5 96F9
9704 9706 9708 9713 970E 9711 970F 9716 9719 9724
972A 9730 9739 973D 973E 9744 9746 9748 9742 9749
975C 9760 9764 9766 9768 52D2 976B 9771 9779 9785
977C 9781 977A 9786 978B 978F 9790 979C 97A8 97A6
97A3 97B3 97B4 97C3 97C6 97C8 97CB 97DC 97ED 9F4F
97F2 7ADF 97F6 97F5 980F 980C 9838 9824 9821 9837
983D 9846 984F 984B 986B 986F 9870 9871 9874 9873
98AA 98AF 98B1 98B6 98C4 98C3 98C6 98E9 98EB 9903
9909 9912 9914 9918 9921 991D 991E 9924 9920 992C
992E 993D 993E 9942 9949 9945 9950 994B 9951 9952
994C 9955 9997 9998 99A5 99AD 99AE 99BC 99DF 99DB
99DD 99D8 99D1 99ED 99EE 99F1 99F2 99FB 99F8 9A01
9A0F 9A05 99E2 9A19 9A2B 9A37 9A45 9A42 9A40 9A43
9A3E 9A55 9A4D 9A5B 9A57 9A5F 9A62 9A65 9A64 9A69
9A6B 9A6A 9AAD 9AB0 9ABC 9AC0 9ACF 9AD1 9AD3 9AD4
9ADE 9ADF 9AE2 9AE3 9AE6 9AEF 9AEB 9AEE 9AF4 9AF1
9AF7 9AFB 9B06 9B18 9B1A 9B1F 9B22 9B23 9B25 9B27
9B28 9B29 9B2A 9B2E 9B2F 9B32 9B44 9B43 9B4F 9B4D
9B4E 9B51 9B58 9B74 9B93 9B83 9B91 9B96 9B97 9B9F
9BA0 9BA8 9BB4 9BC0 9BCA 9BB9 9BC6 9BCF 9BD1 9BD2
9BE3 9BE2 9BE4 9BD4 9BE1 9C3A 9BF2 9BF1 9BF0 9C15
9C14 9C09 9C13 9C0C 9C06 9C08 9C12 9C0A 9C04 9C2E
9C1B 9C25 9C24 9C21 9C30 9C47 9C32 9C46 9C3E 9C5A
9C60 9C67 9C76 9C78 9CE7 9CEC 9CF0 9D09 9D08 9CEB
9D03 9D06 9D2A 9D26 9DAF 9D23 9D1F 9D44 9D15 9D12
9D41 9D3F 9D3E 9D46 9D48 9D5D 9D5E 9D64 9D51 9D50
9D59 9D72 9D89 9D87 9DAB 9D6F 9D7A 9D9A 9DA4 9DA9
9DB2 9DC4 9DC1 9DBB 9DB8 9DBA 9DC6 9DCF 9DC2 9DD9
9DD3 9DF8 9DE6 9DED 9DEF 9DFD 9E1A 9E1B 9E1E 9E75
9E79 9E7D 9E81 9E88 9E8B 9E8C 9E92 9E95 9E91 9E9D
9EA5 9EA9 9EB8 9EAA 9EAD 9761 9ECC 9ECE 9ECF 9ED0
9ED4 9EDC 9EDE 9EDD 9EE0 9EE5 9EE8 9EEF 9EF4 9EF6
9EF7 9EF9 9EFB 9EFC 9EFD 9F07 9F08 76B7 9F15 9F21
9F2C 9F3E 9F4A 9F52 9F54 9F63 9F5F 9F60 9F61 9F66
9F67 9F6C 9F6A 9F77 9F72 9F76 9F95 9F9C 9FA0 582F
69C7 9059 7464 51DC 7199
__END__
=head1 NAME
Unicode::Collate::CJK::JISX0208 - weighting JIS KANJI for Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate;
use Unicode::Collate::CJK::JISX0208;
my $collator = Unicode::Collate->new(
overrideCJK => \&Unicode::Collate::CJK::JISX0208::weightJISX0208
);
=head1 DESCRIPTION
C<Unicode::Collate::CJK::JISX0208> provides C<weightJISX0208()>,
that is adequate for C<overrideCJK> of C<Unicode::Collate>
and makes tailoring of 6355 kanji (CJK Unified Ideographs)
in the JIS X 0208 order.
=head1 SEE ALSO
=over 4
=item L<Unicode::Collate>
=item L<Unicode::Collate::Locale>
=back
=cut
Unicode/Collate/CJK/Zhuyin.pm 0000644 00000334057 15033552504 0011766 0 ustar 00 package Unicode::Collate::CJK::Zhuyin;
use 5.006;
use strict;
use warnings;
our $VERSION = '1.25';
my %u2p;
my $wt = 0x8000;
while (<DATA>) {
last if /^__END__/;
my @c = split;
for my $c (@c) {
next if !$c;
$u2p{hex($c)} = $wt if $c !~ /-/;
$wt++;
}
}
sub weightZhuyin {
my $u = shift;
return exists $u2p{$u} ? $u2p{$u} : undef;
}
1;
__DATA__
FDD0-3105
516B 4EC8 6252 6733 7390 593F 5C9C 82AD 5CC7 67ED
75A4 54F5 5DFC 634C 7C91 7F93 8686 91DB 91DF 3B6D
8C5D 9C83 4C3E
53D0 72AE 629C 577A 59AD 62D4 70A6 7679 80C8 8307
83DD 8A59 8DCB 8EF7 98B0 58A2 9B43 9F25
628A 94AF 9200 9776
575D 5F1D 7238 57BB 8019 8DC1 9C85 9C8C 43AC 9B8A
8987 77F2 9738 58E9 705E 6B1B
5DF4 53ED 5427 7B06 7D26 7F62 9B5E 7F77
7676 5E17 62E8 6CE2 7677 73BB 525D 5265 54F1 76CB
7835 94B5 997D 7D34 7F3D 889A 88B0 83E0 7886 9262
50E0 5D93 64A5 64AD 9911 9B81 8E73 9A4B 9C4D
4EE2 4F2F 72BB 8091 9A73 5E1B 72DB 74DD 4FBC 52C3
80C9 82E9 4EB3 632C 6D61 74DF 79E1 90E3 94B9 94C2
3A8D 3DBF 3E40 3F0E 8116 8236 88AF 535A 6E24 88B9
9E41 613D 640F 733C 8467 9238 9251 998E 50F0 3B0D
717F 7254 7B94 824A 4B6F 999B 99C1 8514 8E23 92CD
9548 464F 294D0 999E 99EE 8C70 2836D 5697 61EA 3A67
3B27 7C19 894F 939B 993A 9D53 72A6 7921 9AC6 9AC9
6B02 7934 896E 946E
8DDB 7BA5 7C38
5B79 6A97 7CEA 8B52 8617
2E8A 535C 5575 8421 818A
6300 63B0 64D8
767D
767E 4F70 67CF 6822 636D 74F8 7CA8 7D54 6446 64FA
896C
5E8D 62DD 8D25 62DC 6557 7308 7A17 86FD 7CBA 3525
8D01 97DB
7AE1 85AD
5351 676F 9642 76C3 686E 60B2 63F9 6911 7891 7986
9E4E 9303 85E3 9D6F
5317 3933 9273
8D1D 5B5B 72C8 8C9D 5907 6601 726C 90B6 80CC 82DD
94A1 4FFB 500D 36DD 6096 72FD 90E5 505D 5079 3AF2
6896 73FC 88AB 5099 60EB 7119 7432 8EF0 8F88 9101
50C3 6102 3ED7 789A 3E22 7295 84D3 8A96 9781 8919
8F29 92C7 9AB3 618A 7CD2 97B4 943E
5457 5504 7999
52F9 5305 5B62 67B9 80DE 82DE 7B23 7172 9F85 8912
8554 95C1 8943 9F59
7A87 5AD1 96F9 420F 8584 2688A 3FFA
5B9D 6009 9971 4FDD 9E28 5BB2 73E4 5821 5822 5AAC
5BDA 8446 98FD 99C2 9CF5 7DE5 8913 9D07 8CF2 4B4B
5BF3 5BF6 28C26 974C 4D10 28C3B
52FD 62A5 62B1 8C79 8DB5 94C7 86AB 888C 5831 83E2
924B 9C8D 9764 66B4 9AB2 9AF1 8663 9B91 5124 66D3
7206 5FC1 9464 9E14
4F68 85F5
6273 653D 73ED 822C 9881 6591 642C 6592 9812 7622
9CFB 4232 878C 8929 764D 8FAC
5742 5C85 962A 6604 677F 7248 74EA 94A3 7C84 8228
9211 8742 9B6C 95C6
529E 534A 4F34 5762 59C5 6011 62CC 7ECA 67C8 79DA
6E74 7D46 9261 977D 8FA6 74E3
626E 8781
5954 6CCD 8D32 681F 7287 951B 931B
672C 82EF 5959 755A 7FC9 694D
574B 574C 5034 6379 6873 6E00 7B28 26BC0 9029 64AA
7356 8F3D
90A6 57B9 5E2E 6360 6D5C 6886 90AB 5E47 5E5A 7E0D
5E6B 97A4
7ED1 7D81 699C 7253 8180 9AC8
3B4B 73A4 868C 508D 68D2 68D3 8C24 585D 6412 7A16
84A1 872F 78C5 9551 8255 8B17 938A
4F3B 794A 595F 5D29 7D63 958D 50B0 5D6D 75ED 5623
7DB3
752D
57C4 57F2 7EF7 7423 742B 83F6 7E43 979B
6CF5 8FF8 902C 5874 955A 750F 295F4 4B70 8E66 93F0
882F
63FC
5C44 506A 6BF4 6945 903C 8C4D 8795 9CBE 939E 9D56
9C0F
8378 9F3B
5315 6BD4 3832 5936 673C 4F4A 5421 59A3 6C98 7595
5F7C 67C0 79D5 4FFE 7B14 7C83 822D 555A 3A8F 7B46
7B84 805B 9119 8C8F
5E01 5FC5 6BD5 95ED 4F56 3629 5752 5E87 8BD0 3620
59BC 602D 6036 39D9 6788 7540 90B2 54D4 67F2 6BD6
73CC 75AA 82FE 6BD9 72F4 7B13 7C8A 835C 94CB 965B
5A62 5EB3 655D 6890 7562 8890 9587 9589 581B 5F3B
5F3C 610A 610E 6E62 7695 7B5A 8406 8A56 8CB1 8CC1
8D51 6ED7 714F 75F9 75FA 7764 8177 870C 8DF8 924D
959F 98F6 55F6 5E63 5F0A 5F43 6EED 78A7 7B85 7B86
7DBC 84D6 88E8 999D 6F77 719A 7358 7359 3EEB 84FD
853D 480B 912A 99DC 9AF2 58C1 5B16 5EE6 3D65 7BE6
7F7C 89F1 9B85 6583 6FDE 7BF3 7E2A 81C2 859C 907F
9946 5970 74A7 8E55 9128 9AC0 7E74 895E 93CE 4557
8963 8E83 8E84 97B8 97E0 8D14 9434 9A46 9B53 9DDD
9DE9 9F0A
5302 841E 5E64 5B36 8945
618B 87DE 9CD6 9C49 9F08 864C 9F9E
5225 522B 5487 43DF 8382 86C2 5FB6 8952 8E69
762A 765F 3FDC
5F46 4318
706C 6753 6807 98D1 9A89 9ADF 6DF2 5F6A 730B 813F
98A9 5882 5E56 647D 6EEE 98AE 9AA0 6A19 719B 8198
8508 762D 78E6 9556 98D9 98DA 5126 98B7 700C 8B24
7202 81D5 85E8 8D06 93E2 7A6E 9573 98C6 98C7 98C8
9A43 9463 4BBD 9A6B
8868 5A4A 88F1 8AD8 9336 6AA6 893E
4FF5 9CD4 9C3E
98CA
8FB9 8FBA 782D 7B3E 63D9 7335 7F16 7178 7251 7502
7BAF 7DE8 8759 9089 937D 9CCA 97AD 908A 9BFE 9BFF
7C69
8D2C 6241 7A86 533E 60FC 8CB6 8439 78A5 7A28 7CC4
890A 9D18 85CA
535E 5F01 5325 5FED 6283 6C73 6C74 91C6 53D8 73A3
82C4 4FBF 5909 662A 3B53 898D 5FA7 7F0F 904D 959E
8FA1 7DF6 8251 8FA7 8FA8 8FA9 8FAB 8FAE 8FAF 8B8A
5CC5 709E
6C43 90A0 73A2 780F 5BBE 5F6C 68B9 50A7 658C 6915
6EE8 3EDE 7F24 69DF 7478 8C69 8CD3 8CD4 9554 5110
6FD2 6FF1 8668 8C73 6AB3 74B8 7015 9726 7E7D 944C
986E
6448 6BA1 8191 9AE9 64EF 9B02 6BAF 81CF 9ACC 9B13
9AD5 9B22
6C1E 6FF5
51AB 4ECC 4ED2 6C37 51B0 5175 63A4
4E19 6032 62A6 79C9 90B4 9643 661E 663A 67C4 70B3
82EA 997C 772A 7A89 3A00 86C3 6452 7980 7A1F 9235
927C 9905 9920 979E
5E76 34C8 4E26 4F75 5E77 5EB0 5002 6824 75C5 7ADD
504B 50A1 5BCE 68C5 8A81 9BA9 9750
57AA 9786 92F2
5CEC 5EAF 6661 900B 923D 8AA7
9CEA 8F50 91AD
535F 248F0 8865 54FA 6355 55B8 88DC 9D4F
4E0D 5E03 4F48 5425 6B65 5498 3635 6016 62AA 6B68
6B69 3CCD 67E8 949A 52CF 57D4 57D7 6091 6357 94B8
57E0 8379 90E8 74FF 8E04 8500 90F6 9914 9922 7BF0
7C3F
FDD0-3106
5991 25419 241B5 7685 8DB4 8225 556A 8469
6777 722C 63B1 7436 7B62 6F56
5E0A 5E15 6015 8899
948B 5761 5CA5 6CCA 9887 6E8C 9255 9817 93FA
5A46 5619 8522 9131 76A4 8B08 6AC7
53F5 5C00 94B7 7B38 99CA
5CB6 7087 6540 6622 6D26 73C0 8FEB 70DE 7834 7836
91D9 7C95 84AA 9B44 9197 4A96
6CFC 6872 6F51
62CD
4FF3 5F98 6392 7305 68D1 724C 8F2B 7C30 7C32 72A4
5EF9
54CC 6D3E 3B5B 6E43 848E 9383
5478 36B0 600C 80A7 67F8 80DA 8843 9185
962B 57F9 966A 6BF0 8D54 952B 88F4 88F5 8CE0 99CD
4FD6
4F02 6C9B 4F69 5E14 59F5 65BE 65C6 6D7F 73EE 914D
7B29 4283 8F94 99B7 5D8F 9708 8F61
84DC
629B 62CB 812C
5228 5486 5789 5E96 72CD 70B0 722E 530F 888D 8EF3
9784 9E83 9E85
8DD1
5945 6CE1 70AE 75B1 76B0 7832 9EAD 791F 792E
8422 891C
5256 5A1D
6294 6299 634A 638A 88D2 7B81 9307
5485 54E3 5A44 7283 5ECD
3434 7705 7819 7568 6F58 6500
723F 6D00 76D8 8DD8 5ABB 5E4B 642B 69C3 84B0 76E4
78D0 7E0F 78FB 8E52 23066 700A 87E0 8E63 939C 97B6
51B8 5224 6C9C 62DA 6CEE 708D 53DB 7249 76FC 7554
8041 88A2 8A4A 6EBF 9816 92EC 897B 947B
9D65
55B7 5674 6B55
74EB 76C6 6E53 8450
5460 7FF8
55AF
4E53 6C97 80EE 96F1 6EC2 8196 4A26 9736
5390 5E9E 5396 65C1 9004 823D 5ACE 5FAC 249ED 8783
9CD1 9F8E 9F90
55D9 802A 89AB
7090 80A8 80D6
5309 36C1 6026 62A8 6072 39F8 7830 6888 70F9 7851
8EEF 959B 6F30 562D 6F8E 78DE
8283 670B 7AFC 5017 6337 580B 5F38 8391 5F6D 68DA
6916 787C 7A1D 9E4F 5873 6189 69F0 6A25 71A2 84EC
28083 8F23 7BE3 81A8 930B 97F8 9AFC 87DA 87DB 9B05
4D36 97FC 9D6C 9A2F 7E84 9B14 945D
6367 6DCE 768F 527B
63BD 692A 78B0 8E2B
7BF7
4E15 4F13 4F3E 6279 7EB0 576F 62AB 62B7 708B 72C9
90B3 7812 20731 6082 79DB 79E0 7D15 94CD 65C7 7FCD
801A 8C7E 9208 921A 9239 925F 9294 5288 78C7 99D3
9AEC 567C 930D 9B7E 9B8D 61B5 7914 7915 9739
76AE 34DF 9630 5CAF 6787 6BDE 72D3 80B6 8298 6BD7
6BD8 75B2 868D 5564 57E4 5D25 26A2D 86BD 86BE 8C7C
2821A 90EB 9674 7137 7435 813E 8157 9C8F 7F74 818D
8731 9B6E 58C0 7BFA 87B7 8C94 9D67 7F86 6707 9F19
5339 5E80 758B 4EF3 572E 82C9 8134 75DE 92A2 8AC0
9D04 64D7 567D 7656 4C26 56AD
5C41 6DE0 6E12 63CA 91FD 5AB2 5AD3 7765 8F9F 6F4E
7A2B 50FB 6FBC 568A 7513 4444 7588 8B6C 95E2 9DFF
9E0A
698C
6C15 6487 22CC2 6486 66BC 77A5
4E3F 82E4 9405
5AF3
527D 6153 7F25 98D8 65DA 7FF2 87B5 72A5 98C3 98C4
9B52
5AD6 74E2 7AC2 85B8 95DD
6B8D 5F6F 779F 7BFB 7E39 91A5 76AB 9860
7968 50C4 52E1 560C 5FB1 6F02 3B13
56E8 504F 5AA5 728F 7BC7 7FE9 9342 9DA3
9A88 80FC 8141 6944 6969 8CC6 8DF0 8ADA 8E41 99E2
9ABF 9A08
8991 8C1D 8CB5 8ADE
7247 9A97 9A17 9A19
9B78
59D8 62FC 3866 7917 7A66 99AA 9A5E
73AD 8D2B 5A26 8CA7 7415 5AD4 9891 983B 5B2A 7371
85B2 56AC 77C9 8819 98A6 9870
54C1 6980
725D 6C56 8058
4E52 7539 4FDC 5A09 6D84 782F 8060 8275 7AEE 9829
29A4D
5E73 8BC4 51ED 546F 576A 6CD9 5C4F 5E21 67B0 6D34
73B6 80D3 82F9 90F1 3EB8 3EC2 8353 5C5B 5E32 6DDC
74F6 86B2 5E48 7129 7F3E 840D 86E2 8A55 7501 84F1
8EFF 9C86 51F4 4202 617F 7BB3 8F27 6191 9B83 6A98
7C08 860B
5CBC 5840
4EC6 6534 6251 9660 5657 64B2 6F7D 64C8 9BC6
3EAA 530D 812F 8386 83D0 83E9 8461 50D5 84B1 84B2
917A 58A3 735B 749E 6FEE 77A8 7A59 423B 9564 258C8
7E80 8965 93F7
5724 6734 5703 6D66 70F3 666E 6EA5 8C31 8AE9 6A38
6C06 6A8F 9568 8B5C 8E7C 9420
94FA 8216 8217 92EA 3B25 7011 66DD
5DEC 5DED 99C7 8D0C
FDD0-3107
5463
5988 5B56 5ABD 5B24 5B37
9EBB 75F2 7298 8534 87C7
9A6C 3437 739B 7801 8682 99AC 6EA4 746A 78BC 879E
93B7 9C22 9DCC
72B8 6769 7943 9581 9A82 551B 508C 7341 561C 3A38
69AA 7770 79A1 7F75 372B 99E1 7923 9B15
4E87 5417 55CE 561B 5AF2 9064 87C6
6478
8C1F 998D 5AEB 9EBD 6469 6479 6A21 819C 6A45 78E8
7CE2 56A4 64F5 8B28 56A9 56B0 9943 8611 5298 9ACD
9B54 40FA 995D
62B9 61E1 4A4B
672B 52B0 573D 59BA 5E13 6B7E 6B7F 6B81 6CAB 248FB
5E1E 6629 67BA 8309 964C 551C 768C 771C 773F 781E
79E3 773D 7C96 7D48 8388 83AB 6E50 86E8 8C83 8C8A
55FC 587B 5BDE 6F20 734F 84E6 9286 977A 5AFC 66AF
3C73 9ED9 7790 9546 9B69 58A8 763C 7799 9ED8 700E
87D4 8B29 8C98 7205 85E6 93CC 7933 7E86 9A40 8031
5E85 603D 5C1B 9B79 9EBF
4E48 9EBC 5692 569C 6FF9 7666
57CB 3725 85B6 973E
4E70 836C 8CB7 562A 8552 9DF6
52A2 4F45 58F2 8FC8 9EA6 5356 8109 8108 9EA5 8847
52F1 8CE3 9081 9721 9722 2A133
5445 5746 6C92 6CA1 679A 73AB 6802 7709 82FA 5A12
8104 6885 73FB 8122 8393 5833 5A92 5D4B 6E44 6E48
7338 7742 90FF 6963 6973 7164 7442 847F 587A 69D1
7996 9176 9545 9E5B 92C2 9709 7A48 5FBE 9387 77C0
6517 9DA5 862A 9EF4
6BCE 6BCF 51C2 7F8E 6334 6D7C 5A84 5D44 6E3C 5ABA
815C 9541 5B0D 71D8 9382 9EE3
59B9 62BA 6CAC 65C0 6627 3B51 771B 7959 8882 5A9A
5BD0 75D7 8DCA 715D 9B3D 7778 97CE 7BC3 875E 9B45
8EBE
732B 8C93
6BDB 77DB 6786 7266 8305 8306 65C4 7F5E 515E 8EDE
9155 5825 6E35 28968 951A 9AE6 5AF9 6C02 729B 8765
9AF3 87CA 9328 9D9C
5187 536F 5918 4E6E 623C 36B9 5CC1 6CD6 6634 94C6
7B37 84E9
5183 7683 5190 82BC 5192 67D5 770A 8302 8D38 8004
88A4 8992 5AA2 5E3D 8CBF 6117 6693 6959 6BF7 7441
843A 7780 8C8C 911A 8750 912E 61CB
54DE
725F 4F94 52BA 3B4C 6048 6D20 7738 8C0B 86D1 7F2A
8E0E 927E 8B00 77B4 7E46 936A 9D3E 9EB0
67D0 26CD1
5ADA 989F
59CF 6097 34BC 86EE 50C8 8C29 6172 9992 6A20 7792
779E 9794 25C91 8B3E 9945 9CD7 9862 9B17 9B18 9C3B
883B
5C58 6E80 774C 6EE1 6EFF 87A8 87CE 8954 93CB 77D5
66FC 3B05 5881 5E54 6162 6471 6F2B 734C 7F26 9124
69FE 71B3 8504 8513 3862 6FB7 9558 7E35 93DD 2914D
4555 2414E
8630
95E8 626A 73A7 9494 9580 9585 636B 83DB 748A 9346
4EB9 864B
95F7 7116 60B6 66AA 71DC 61D1 61E3
4EEC 5011 691A
7264
5402 5FD9 6C52 9099 5C28 6757 6767 8292 6C13 76F2
7B00 54E4 5A0F 5EAC 3936 607E 6D5D 72F5 832B 727B
3ECA 91EF 94D3 75DD 786D 86D6 420D 23677 92E9 99F9
29DF6
83BD 7865 833B 83BE 58FE 6F2D 3B12 87D2 880E
753F 867B 51A1 8394 840C 8420 4004 76DF 8499 8771
511A 6A57 750D 77A2 8544 9133 5E6A 61DE 66DA 6FDB
9138 6726 6AAC 6C0B 4443 4445 9BCD 77C7 791E 9E72
8268 8609 77D2 973F 9740 995B 986D 9F06 9E0F
52D0 731B 74FE 4045 9530 824B 8722 9333 61DC 7374
61F5 9BED 8813
5B5F 20D7C 68A6 6E95 5922 5923 44DD 9725 3734
63B9 64DD
54AA 772F 7787
519E 5F25 7F59 7962 8FF7 7315 8C1C 8A78 84BE 5F4C
64DF 7CDC 7E3B 8B0E 919A 9E8A 9E8B 79B0 9761 3737
7030 737C 9E9B 6202 6520 74D5 957E 7222 4577 863C
91BE 91BF 9E0D 91C4
7C73 8288 4F8E 6CB5 7F8B 5F2D 6D23 6549 772B 8112
6E33 845E 92A4 851D 6FD4 5B4A 7056
5196 7CF8 6C68 6C95 5B93 6CCC 89C5 5CDA 5BBB 7955
79D8 5BC6 6DE7 6DFF 8993 8994 5E42 8C27 5853 5E4E
3A20 899B 5627 6993 6EF5 6F1E 7190 871C 6A12 8524
9F0F 51AA 5E66 6FD7 8B10 6AC1 7C1A 85CC 7F83
4E5C 5400 54A9 54F6 5B6D
706D 70D5 8995 6423 6EC5 8511 9D13 7BFE 858E 5E6D
61F1 6AD7 881B 884A 9456 9C74
55B5
82D7 3464 5A8C 63CF 9E4B 7784 7DE2 9D93 9C59
676A 7707 79D2 6DFC 6E3A 7F08 7BCE 7DF2 85D0 9088
5999 5E99 7385 7AD7 5EBF 5EDF
8C2C 8B2C
5B80 8287 7720 5A42 7EF5 5A94 68C9 7DBF 7DDC 81F1
8752 5B35 6AB0 6ACB 77C8 77CA 77CF
4E0F 6C45 514D 6C94 9EFE 52C9 7704 5A29 3743 506D
5195 52D4 6E11 5595 6110 6E4E 7F05 7D7B 817C 8442
9EFD 3EF0 7DEC 9EAB 6FA0 9BB8
9763 9762 7CC6 9EAA 9EBA 9EB5
6C11 59C4 5CB7 5FDE 600B 65FB 65FC 73C9 76FF 7807
82E0 7F60 5D0F 636A 7418 7F17 656F 7449 75FB 7888
9231 7DCD 4AB8 7DE1 9309 9D16 9372
76BF 51BA 5221 95F5 62BF 6CEF 52C4 6543 95FD 60AF
654F 7B22 60FD 6E63 9594 610D 3B06 668B 95A9 50F6
615C 61AB 6F63 7C22 2704B 9CD8 8820 9C35 2A134
578A 7B3D
540D 660E 9E23 6D3A 7700 51A5 8317 6719 7733 94ED
5AC7 6E9F 733D 910D 669D 69A0 84C2 9298 9CF4 7791
879F 89AD 4AE4
4F72 59F3 51D5 614F 9169
547D 6927 8A7A
63B5
6BEA 58B2 6C01
6BCD 4EA9 7261 5776 59C6 5CD4 7273 7546 7552 80DF
755D 755E 782A 756E 27FF9 20E96 9267 8E07
6728 4EEB 6730 76EE 6C90 72C7 7091 7267 82DC 6BE3
869E 94BC 83AF 96EE 52DF 3708 6958 7766 926C 5893
5E55 5E59 6154 6155 66AE 8252 9702 7A46 7E38 97AA
51E9 62C7
FDD0-3108
53D1 6CB7 767A 50A0 767C 5F42 9166 91B1
4E4F 4F10 59C2 57A1 6D4C 75BA 7F5A 9600 6830 781D
8337 7B4F 7782 7F70 95A5 7F78 6A43 85C5
4F71 6CD5 704B
73D0 743A 9AEA 9AEE 855F 27B0B
9345
4ECF 5772
68BB
98DE 5983 975E 98DB 5561 5A53 6E04 7EEF 291EB 6249
7306 83F2 975F 7DCB 871A 88F6 970F 9CB1 9925 99A1
9A11 9A1B 98DD
80A5 6DDD 8153 4208 8730 87E6
670F 532A 8BFD 595C 60B1 6590 68D0 69A7 7FE1 8AB9
7BDA 855C 2913C
5420 5E9F 676E 6CB8 72D2 80BA 82BE 6632 80C7 8D39
4FF7 5255 539E 75BF 5C5D 966B 5EC3 3E43 8409 8CBB
75F1 9544 5EE2 66CA 4935 7648 9F23 6FF7 4C01 6AE0
9BE1 9428 9745
5A54 6683
7D11 88E6
7F36 5426 599A 7F39 7F3B 6B95 96EC 9D00
5E06 8A09 756A 52EB 5643 5B0F 5E61 61A3 65D9 8543
65DB 7E59 7FFB 85E9 8F53 98BF 7C53 98DC 9C55
51E1 51E2 51E3 3836 5FDB 674B 77FE 7C75 9492 67C9
70E6 8227 7B32 68E5 6E22 7169 7DD0 58A6 6A0A 6A4E
71D4 74A0 81B0 7E41 85A0 7FB3 894E 8E6F 702A 703F
792C 9407 9422 8629 881C 9DED
53CD 6255 8FD4 484A 91E9
201A9 6C3E 72AF 597F 6C4E 996D 6CDB 8D29 7548 8303
4000 8ED3 5A4F 68B5 3D00 76D5 7B35 8CA9 8EEC 98EF
98F0 6EFC 5B0E 7BC4
8224
5206 5429 5E09 7EB7 6610 6C1B 82AC 54DB 517A 7D1B
7FC2 886F 515D 8A1C 915A 68FB 9216 96F0 3B1F 6706
71D3 9934 9959
575F 59A2 5C8E 6C7E 670C 678C 7083 80A6 7F92 86A0
86A1 68A4 68FC 711A 999A 84B6 58B3 5E69 6FC6 9B75
6A68 71CC 8561 8C6E 96AB 9F22 7FB5 9F16 8C76 8F52
943C 99A9 9EC2
7C89 9EFA
4EFD 5F05 594B 5FFF 79CE 507E 6124 7CAA 50E8 61A4
596E 81B9 7CDE 9CBC 7035 9C5D
7AD5 8EAE
531A 65B9 6C78 90A1 678B 7265 82B3 94AB 8684 6DD3
9201 9D0B
59A8 9632 623F 80AA 57C5 9C82 9B74 9C1F
4EFF 8BBF 5F77 7EBA 6609 6618 74EC 7706 5023 65CA
7D21 822B 8A2A 9AE3 9DAD
653E 8DBD
574A 580F 933A
4E30 98CE 4EF9 51E8 51EC 59A6 6CA3 6CA8 51EE 67AB
5C01 75AF 76FD 781C 98A8 36D4 5CEF 5CF0 44A0 5051
687B 70FD 5D36 7326 950B 6953 728E 8451 8702 760B
78B8 50FC 7BC8 92D2 9137 6A92 95CF 8C50 93E0 34A5
5BF7 3826 7043 9146 973B 8634 882D 974A 98CC 9EB7
51AF 5906 6340 6D72 9022 5838 99AE 7D98 8242 3980
6453 6F28 3D6F
8BBD 552A 8982 8AF7
51E4 5949 752E 4FF8 6E57 7128 7148 7F1D 8D57 9CEF
9CF3 9D0C 8CF5 7E2B
7412 6E84 93BD 8615
8985
4F15 544B 598B 909E 59C7 739E 80A4 6024 67CE 7806
57BA 5A10 5C03 8342 886D 65C9 3B6A 7D28 8374 8DBA
9EB8 75E1 7A03 8DD7 9207 7B5F 7D92 5B75 8C67 911C
6577 819A 9CFA 9EA9 7CD0 9EAC 9EB1 61EF
4E40 5DFF 5F17 4F0F 51EB 7536 4F5B 51B9 521C 5B5A
6276 5488 5CAA 5F7F 602B 62C2 670D 678E 6CED 7EC2
7ECB 8299 82A3 4FD8 5798 3A84 67EB 6C1F 6D11 70A5
73B8 7549 7550 7F58 82FB 8300 97E8 54F9 683F 6D6E
7829 7953 832F 86A8 90DB 5310 6874 6DAA 70F0 7408
7B26 7B30 7D31 7D3C 7FC7 8274 83A9 8659 5E45 68F4
7D65 7F66 83D4 7CB0 7D8D 8240 844D 8709 8F90 9258
925C 98AB 9CE7 6991 798F 7A2A 7B99 97CD 5E5E 6F93
8760 9AF4 8AE8 8E3E 8F3B 9B84 9D14 7641 29732 9EFB
8946 9D69 9D9D
5452 629A 4E76 5E9C 5F23 62CA 65A7 4FCC 4FDB 80D5
9CEC 4FEF 90D9 91DC 91E1 636C 8F85 7124 76D9 8151
6ECF 8705 42E8 8150 8F14 5638 64A8 64AB 982B 9B34
7C20 9EFC
2ECF 2ED6 961D 7236 8BA3 4ED8 5987 8D1F 577F 3914
7ACE 961C 9644 9A78 590D 5CCA 8A03 8CA0 8D74 3931
7954 86A5 965A 5069 51A8 526F 5A66 86B9 889D 5A8D
5BCC 5FA9 3DC6 79FF 86D7 8A42 8D4B 5711 6931 7F1A
8179 842F 9C8B 8D59 4B7B 3B3C 7DEE 875C 876E 8907
8914 8CE6 99D9 5B14 7E1B 8567 8F39 9B92 8CFB 9351
9362 9CC6 8986 99A5 4600 9C12 204D7
592B 752B 5490 915C 5085 6928 88B1 8984 79A3 9BB2
FDD0-3109
5491 54D2 8037 8345 7B1A 55D2 642D 2143F 6498 5660
265BF 8921 939D
8FBE 547E 59B2 601B 6C93 8FD6 709F 7F8D 7557 7563
7B2A 8359 5273 5312 7B54 8A5A 9039 9054 9618 977C
9791 8598 9389 87FD 8E82 943D 97C3 9F96 9F98
6253
5927 6C4F 7714
57AF 58B6 7629 71F5 7E68
561A
392B 6074 6DC2 60EA 68CF 951D 5FB3 5FB7 9340
5730 7684 5F97 8126
5446 5454 7343 61DB
6B79 50A3 902E
3432 4EE3 8F6A 20C3A 5788 5CB1 5E12 7519 7ED0 9A80
5E26 5F85 6020 67CB 6B86 73B3 8D37 8FE8 5E2F 8ED1
57ED 5E36 7D3F 888B 8EDA 3ED6 8CB8 8EE9 7447 5ED7
4206 53C7 3BC2 7DFF 66C3 9D0F 6234 26102 825C 9EDB
7C24 8E5B 703B 9734 9EF1 8976 9746
9B98
2E88 5200 5202 53E8 5FC9 6737 6C18 8220 91D6 9C7D
9B5B
636F
5BFC 5C9B 5CF6 6363 7977 6417 7982 3800 5D8B 5D8C
3A36 969D 5C0E 58D4 5DB9 64E3 8E48 96AF 79B1
5230 5012 60BC 7118 76D7 76DC 83FF 9053 7A32 7B8C
7FE2 7A3B 885C 5675 885F 6AA4 71FE 4326 7FFF 8EC7
74D9 7E9B
5C76 9666 6921 69DD
543A 5517 515C 90FD 5160 8538 6A77 7BFC
6296 9627 6793 67A1 551E 86AA 9661 9204
6597 8C46 6D62 90D6 997E 9B25 68AA 6BED 8130 8373
9017 9158 75D8 9597 7AA6 4B26 9B26 9916 65A3 2109D
95D8 4546 7AC7 9B2A 9B2C 9B2D
4E67 8254
4E39 5989 5355 62C5 5358 7708 7803 803C 803D 449F
8043 8EAD 90F8 55AE 5A85 6B9A 7605 5330 7BAA 9815
510B 52EF 891D 9132 64D4 6BAB 7649 7514 7C1E 894C
8078
4F14 5210 628C 73AC 74ED 80C6 75B8 7D1E 8874 63B8
8D55 4EB6 64A2 64A3 6FB8 9ED5 81BD 9EEE
65E6 4F46 5E0E 6C8A 72DA 8BDE 67E6 758D 5556 5557
5F39 60EE 6DE1 86CB 557F 5F3E 6C2E 8145 840F 89DB
35D6 7A9E 50E4 8711 99BE 9AE7 563E 5649 5F48 619A
8A95 61BA 66BA 6FB9 84DE 9D20 79AB 99F3 765A 56AA
7E75 8D09 972E 994F 4A35
6CF9
6265 627D
5F53 73F0 7B5C 88C6 7576 5679 6FA2 74AB 7C39 8261
87F7 8960
6321 515A 8C20 64CB 8B61 9EE8 6529 7059 6B13 8B9C
6C39 51FC 5735 5B95 7800 57B1 6863 8361 5A78 6113
83EA 5D63 74FD 903F 96FC 78AD 5105 6F52 778A 8DA4
58CB 8569 6A94 7497 76EA 7911 7C1C 862F 95E3
94DB 943A
706F 767B 8C4B 5654 5B01 71C8 7492 7AF3 7C26 89B4
8E6C
6729 7B49 6225
9093 51F3 58B1 5D9D 9127 96A5 77AA 78F4 956B 6AC8
9419
8260
6C10 4EFE 4F4E 5943 5F7D 7F9D 889B 5824 8D86 9684
6EF4 6A00 955D 78FE 9349 97AE
72C4 5EF8 7C74 82D6 8FEA 5519 654C 6DA4 6891 7B1B
837B 89CC 976E 99B0 9AE2 5600 5AE1 6ECC 7FDF 9814
6575 850B 8510 4A00 5681 7BF4 4A24 8C74 8E62 9B04
85E1 93D1 42AE 7CF4 89BF 9E10
538E 5758 8BCB 5467 5E95 5F24 62B5 62DE 90B8 963A
67E2 7274 830B 7825 57DE 638B 3B7D 83E7 89DD 8A46
8EE7 805C 9AB6
5754 5F1F 65F3 6755 7393 601F 4FE4 5E1D 57CA 5A23
5059 5547 5572 688A 710D 73F6 7731 7B2C 8C1B 9012
9013 91F1 5A82 68E3 6E27 7747 7976 7F14 83C2 50C0
8163 8482 926A 5891 6455 78B2 7998 8743 905E 58AC
6178 7DE0 8515 9070 5DB3 750B 8AE6 8E36 87AE
9BF3
55F2
7239 8DCC 893A
57A4 5CCC 604E 6315 6633 7ED6 80C5 82F5 8FED 74DE
7723 621C 43F2 8C0D 558B 581E 60F5 63F2 7573 7D70
800B 81F7 8A44 8D83 957B 53E0 6B9C 7243 7252 5D7D
789F 8728 8253 8776 890B 22DA3 8ADC 8E40 9CBD 3B2A
66E1 7589 9C08 758A 6C0E
54CB 800A 7730
5E49 7582
5201 53FC 6C48 866D 51CB 595D 5F34 5F6B 86C1 7431
8C82 7889 9CED 6BA6 7797 96D5 9B89 9CB7 9F26 9BDB
9D70
625A 5C4C
5F14 4F04 540A 9493 7A8E 8A0B 8C03 6389 91E3 94DE
94EB 7AE8 92B1 96FF 9B61 84E7 8ABF 7639 7AB5 92FD
85CB 9443
7C13
4E1F 4E22 20C8D 94E5 92A9
7538 6541 20DA7 6382 508E 53A7 5D6E 6EC7 69C7 69D9
7628 98A0 8E4E 5DC5 985A 985B 766B 5DD3 5DD4 6527
7672 9F7B
5178 594C 70B9 5A70 7320 4344 655F 8DD5 7898 84A7
8E2E 8547 9EDE 56B8
7535 4F43 576B 5E97 963D 57AB 6242 73B7 94BF 5A5D
60E6 6DC0 5960 7414 6BBF 8714 96FB 588A 58C2 6A42
6A5D 6FB1 975B 24A71 765C 7C1F 9A54
6923
4E01 4EC3 53EE 5E04 738E 7594 76EF 9489 8035 8670
914A 91D8 976A
5975 9876 9802 3AC0 9F0E 5D7F 9F11 6FCE 85A1 9424
8BA2 5FCA 9964 77F4 5B9A 8A02 98E3 5576 94E4 6917
815A 7887 952D 78A0 874A 92CC 9320 78F8 9841
8423 8062
53BE 21C2A 5262 9607 7763 561F 918F 95CD
6BD2 72EC 6D9C 8BFB 6E0E 691F 3C69 724D 728A 78A1
88FB 8AAD 8773 7368 9316 51DF 5335 5B3B 7006 6ADD
6BB0 7258 72A2 74C4 76BE 9A33 9EE9 8B80 8C44 8D15
97E3 945F 9AD1 97C7 97E5 9EF7 8B9F
7B03 5835 5E3E 8D4C 743D 7779 89A9 8CED 7BE4
5992 675C 809A 828F 59AC 5EA6 79FA 8370 6E21 976F
9540 29D5A 8799 6BAC 934D 7C35 8827 8839
591A 591B 5484 54C6 7553 525F 5D1C 6387 6560 6BF2
88F0 5689
593A 94CE 526B 6553 655A 55A5 60B3 656A 75E5 922C
596A 51D9 8E31 9BB5 9438
6736 54DA 579B 579C 6305 6306 57F5 7F0D 692F 8D93
8EB1 8EB2 7D9E 492A 619C 4EB8 937A 8EC3 56B2 5972
5234 5241 9973 5C2E 67C1 67EE 70A8 964A 964F 6857
5815 8235 60F0 8DE2 8DE5 8DFA 98FF 3EE7 58AE 58AF
5D9E 9D7D
6735 67A4
5796 5806 5860 5D5F 75FD 78D3 9D2D 941C
3A03 9827
5BF9 961F 514A 514C 5151 5BFE 603C 794B 966E 968A
7893 41CF 7D90 5C0D 619E 619D 6FE7 9566 61DF 3B23
85B1 7029 8B48 8968 9413
8011 5073 526C 5A8F 7AEF 890D 9374
22B43 77ED
6BB5 65AD 5845 7F0E 6934 7145 7456 8176 846E 78AB
953B 7DDE 6BC8 7C16 935B 65B7 8E96 7C6A
5428 60C7 6566 8733 58A9 58AA 64B4 7364 5678 6489
6A54 729C 7905 453B 8E72 8E7E 9A50
233B4 76F9 8DB8 8E89
4F05 56E4 5E89 6C8C 7096 76FE 7818 949D 9007 987F
920D 696F 9041 9813 6F61 906F 71C9 8E32
78B7
4E1C 51AC 549A 36B5 5CBD 6771 6638 6C21 82F3 5032
9E2B 57EC 5A3B 5D20 5D2C 6DB7 7B17 5F9A 6C2D 83C4
29093 8740 9D24 9F15 9BDF 9D87
3A02 8463 58A5 7BBD 8ACC 5B1E 23FC5 856B 61C2
52A8 51BB 4F97 578C 59DB 5CD2 606B 630F 680B 6D1E
80E8 51CD 6219 80F4 8FF5 52D5 7850 68DF 6E69 7D67
8156 50CD 99E7 9718
9B97 9DAB
FDD0-310A
4ED6 5B83 5979 7260 7942 94CA 8DBF 584C 6EBB 6999
891F 5683 95E7
8E79
5854 6E9A 5896 35F3 736D 9CCE 737A 9C28
4EA3 62D3 631E 72E7 95FC 20D32 36E5 5D09 6DBE 3B7C
6428 40BF 8DF6 69BB 6BFE 420B 905D 9062 3493 79A2
8ABB 8E0F 64BB 6FBE 9314 6A7D 6FCC 8E4B 979C 9B99
3FF9 95D2 97B3 56BA 8B76 95E5 2A601 8EA2
4FA4 549C
5FD1 5FD2 7279 8CA3 86AE 94FD 615D 92F1 87A3 87D8
56FC 5B61 80CE
51AD 53F0 65F2 576E 62AC 90B0 67B1 70B1 70B2 82D4
83ED 8DC6 3B03 9C90 7B88 81FA 98B1 421A 99D8 5113
9B90 5B2F 64E1 3E00 6AAF 85B9 7C49
592A 5933 5FF2 6C70 6001 80BD 949B 6CF0 8226 48ED
915E 9226 6E99 614B 71E4
7C8F
5932 5F22 6D9B 7EE6 638F 8A5C 5ACD 5E4D 6146 642F
6ED4 7D5B 69C4 746B 97EC 98F8 4231 7E1A 7E27 6FE4
8B1F 8F41 493E 97B1 97DC 9955
530B 54B7 6D2E 8FEF 6843 9003 5555 68BC 6DD8 413B
7EF9 9676 8404 7979 7DAF 872A 88EA 9780 9184 9789
92FE 932D 99E3 6AAE 9940 9A0A 9F17
8BA8 8A0E
5957
5077 5078 5A7E 5AAE 92C0 936E
4EA0 5934 6295 9AB0 7DF0 982D
59B5 94AD 7D0F 3A97 6568 98F3 9EC8 8623
900F 7D89
574D 3631 62A9 8D2A 6039 75D1 8211 8CAA 644A 6EE9
762B 64F9 6524 7058 7671
575B 212A8 6619 5013 8C08 5A52 60D4 90EF 8983 6983
75F0 952C 8C2D 58B0 58B5 619B 6F6D 8AC7 9188 58C7
66C7 71C2 931F 9924 6A80 78F9 9843 7F48 58DC 85EB
8B5A 8C9A 91B0 8B60 7F4E
5FD0 5766 43D9 94BD 8892 6BEF 83FC 47A1 926D 55FF
61B3 61BB 9193 74AE 8962
53F9 70AD 57EE 63A2 509D 6E60 50CB 5606 78B3 8215
6B4E 8CE7
6C64 5763 94F4 6E6F 5621 8025 528F 7FB0 876A 47B6
4800 9557 859A 8E5A 93DC 940B 97BA 9F1E
9967 5510 5802 508F 557A 3B7B 68E0 347D 5858 370D
642A 6E8F 910C 69B6 6F1F 717B 746D 8185 84CE 969A
6A18 2365F 78C4 799F 7CC3 819B 6A56 7BD6 7CD6 8797
8E3C 7CDB 87B3 8D6F 91A3 9933 424E 9395 9939 95DB
9944 28189 9DB6
4F16 5E11 5018 5052 6DCC 50A5 8EBA 954B 93B2 513B
6203 66ED 7223 77D8 9482
70EB 6465 8D9F 71D9
71A5 81AF 9F1F
75BC 75CB 5E50 817E 8A8A 6F1B 6ED5 7E22 9086 99E6
8B04 512F 85E4 9A30 7C50 9C27 7C58 9A63
972F
8645
5254 68AF 3538 9511 8E22 64FF 9DC8 9DC9
5397 82D0 7EE8 8351 504D 557C 5D39 60FF 63D0 7A0A
7F07 7F64 9E48 55C1 7445 7D88 9046 78AE 5FB2 6F3D
7DF9 876D 8906 92BB 9898 855B 8DA7 8E44 918D 8B15
8E4F 9357 9CC0 9D3A 984C 9BB7 9D5C 9A20 9BF7 9D97
9D99 79B5 9DE4
4F53 632E 8EB0 9AB5 9BA7 8EC6 9AD4
623B 239C2 8FCF 5243 6711 6D1F 501C 608C 6D95 6090
60D5 63A6 9016 60D6 63E5 66FF 9037 6974 88FC 6B52
6BA2 8905 9AF0 3B31 568F 8599 9B00 5694 74CB 7C4A
8DAF 4D91
5C49 5C5C 7B39 5D5C
5E16 6017 8D34 8051 841C 8CBC
94C1 86C8 50E3 9295 92E8 9D29 9421 9435 9A56
546B 98FB 4D34 992E
65EB 4F7B 5EA3 604C 6311 7967 3B38 804E
8280 6761 5CA7 5CB9 8FE2 7952 689D 7B24 8414 47ED
8D92 9F86 84DA 8729 6A24 84E8 92DA 9AEB 9CA6 9797
93A5 9BC8 9F60 9C37
5BA8 6640 6713 3E20 8101 7A95 8A82 4837 7AB1 65A2
5B25
773A 7C9C 7D69 899C 8DF3 7CF6
87A9
5929 5172 5A56 6DFB 915F 9754 42EC 3B32 9EC7 975D
7530 5C47 6CBA 606C 754B 7551 76F7 80CB 7560 751B
751C 6E49 83FE 4852 5861 586B 6437 923F 9617 7DC2
78CC 7AB4 74B3 95D0 9DC6 9DCF
5FDD 6B84 500E 35AD 553A 3649 60BF 6DDF 666A 7420
8146 89CD 75F6 7753 8214 9902 89A5 8CDF 932A 9766
9369
3401 63AD 777C 821A
78B5 9D2B
5385 5E81 6C40 827C 542C 753A 8013 539B 70C3 686F
70F4 7D8E 42FC 9793 8074 5EF0 807C 807D 5EF3
9092 5EF7 4EAD 5EAD 505C 839B 5A77 5D49 6E1F 695F
7B73 8476 8713 69B3 8064 874F 95AE 9706 8AEA 9F2E
2123C 5722 753C 4FB9 5A17 633A 6D8F 6883 70F6 73FD
8121 988B 8247 8A94 9832 2A2B6
51F8 5B8A 79BF 79C3 6022 7A81 550B 6D8B 6378 5817
6E65 75DC 8456 5D80 92F5 9D5A 9F35
56F3 56FE 51C3 5CF9 5EA9 5F92 6087 6348 5C60 688C
3ECC 837C 9014 63EC 3B78 7A0C 83DF 5715 5857 5D5E
23225 760F 7B61 816F 922F 5716 5717 5EDC 6F73 84A4
8DFF 9174 48DD 999F 934E 99FC 9D4C 9D9F 9DCB 9DF5
571F 5721 5410 948D 91F7
514E 5154 8FCC 580D 9D75
6C62 6D82 83B5
4E47 4EDB 8BAC 6258 6261 6C51 9966 6754 4F82 5483
62D5 62D6 6CB0 6329 635D 8A17 6DB6 812B 8131 838C
88A5 98E5 9B60 9A5D
9A6E 4F57 5768 5CAE 6CB1 6CB2 72CF 9640 9641 8FF1
7823 7824 9E35 7D3D 8889 5836 8DCE 9161 99B1 69D6
78A2 4B7E 99C4 99DE 6A50 9B80 9D15 9F27 9A28 9F0D
9A52 9F09
5F75 59A5 5EB9 5AA0 692D 6955 5AF7 6A62 9D4E 9B0C
9C16
67DD 6BE4 553E 841A 8DC5 6BFB 7BA8 8600 7C5C
9A7C 99DD
63A8 84F7 85EC
5F1A 4003 9893 5C35 96A4 9839 983A 983D 9B4B 7A68
8E6A 8608 3FD7
4FC0 50D3 817F 8E46 9ABD
4FBB 5A27 9000 717A 86FB 8715 892A 99FE
6E4D 732F 7153 474E 8C92 4D4E
56E2 56E3 629F 5278 5718 6171 6476 6F19 69EB 7BFF
6AB2 93C4 7CF0 9DD2 9DFB
7583
5F56 6E6A 8916
541E 5451 6D92 554D 671C 711E 564B 66BE 3B3F 9ED7
5C6F 5749 5FF3 9968 829A 8C58 8C5A 8ED8 98E9 9C80
9B68 3A54 9715 81C0 81CB
6C3D 757D
65FD
56F2 70B5 75CC 901A 55F5 84EA
4EDD 540C 4F5F 5F64 5CC2 5E9D 54C3 5CDD 72EA 664D
6850 6D75 70D4 783C 833C 8692 772E 79F1 94DC 7AE5
7CA1 26A34 7B69 8A77 8D68 916E 9256 50EE 52ED 9275
9285 9907 9C96 6F7C 735E 66C8 6723 6A66 6C03 71D1
729D 81A7 3F3F 77B3 9BA6 2648D 4D00
7EDF 6345 3A8C 6876 7B52 7D71 7D82 6A0B
6078 75DB 8855 615F 6185
FDD0-310B
55EF
62CF 62FF 6310 55F1 954E 93BF
4E78 54EA 96EB
59A0 7EB3 90A3 80AD 94A0 5A1C 7D0D 8872 637A 7B1D
25E49 88A6 8C7D 8EDC 8C80 9209 9779 84B3 24E3B 9B76
422B
7592 8BB7 6290 7732 8A25
5436 5450 5462
8149 718B 6468 5B7B
4E43 5976 6C16 827F 7593 59B3 5EFC 5037 8FFA 91E2
5B2D
5948 67F0 800F 8010 217AB 6E3F 8418 9F10 879A 8926
933C
5A1E 9981 812E 8147 9912 9BBE 9BD8
5167 5185 343B 6C1D 9317
5B6C
5476 6013 6320 5CF1 7847 94D9 7331 86F2 8A49 7899
6493 5DA9 61B9 87EF 5912 8B4A 9403 5DCE
57B4 607C 60A9 8111 5318 5816 60F1 5AD0 7459 8166
78AF 4700 7376 737F
95F9 5A65 6DD6 9599 9B27 81D1
8133
7FBA
5542
69C8 8028 7373 6ABD 9392 941E 8B73
56E1
7537 678F 67AC 4FBD 5357 67DF 5A1A 7558 96BE 83AE
5583 6694 6960 8AF5 96E3 27574
8D67 63C7 6E73 8169 8433 4212 877B 6201
266DA 5A7B 3B2E
9056
6041 5AE9 5AF0
56D4
4E6A 56A2 8B68 56CA 8830 9B1E 9995 6B1C 9962
64C3 66E9 652E 7062
513E 9F49
80FD
20E4C 28D99
59AE
5C3C 576D 37BE 6029 6CE5 7C7E 502A 5C54 79DC 94CC
57FF 5A57 6DE3 730A 86AD 4626 90F3 68FF 249A4 46CF
8DDC 815D 8063 873A 89EC 8C8E 8F17 9713 9CB5 9BD3
9BE2 9E91 9F6F 81E1
4F31 4F60 62B3 62DF 72D4 67C5 82E8 65CE 6672 5B74
922E 999C 5117 511E 64EC 96AC 6AB7 85BF 807B
5C70 6C3C 4F32 23CB7 6635 80D2 8FE1 7724 9006 533F
5804 60C4 6135 6EBA 7768 817B 5ADF 66B1 8ABD 4065
7E0C 81A9 5B3A 2A65B
88AE
634F 63D1
82F6
5E07 26612 573C 67BF 6D85 75C6 8042 81EC 9667 556E
60D7 55A6 655C 6E7C 83CD 9689 55EB 5D72 8E02 565B
6470 69F7 8E17 954A 954D 5DAD 7BDE 81F2 931C 989E
8E51 5699 8076 93B3 95D1 5B7C 3738 5B7D 6AF1 7C4B
56C1 8616 9F67 23033 7CF1 8825 9448 7CF5 56D3 8B98
8EA1 9477 9873 9480 4BC0
5DD5
9E1F 8311 3B64 8885 9CE5 5ACB 88CA 6A22 8526 5B1D
892D 5B32 3735
5C3F 8132
599E
2EA7 725B 6C7C
5FF8 626D 72C3 7EBD 7084 94AE 7D10 83A5 9215 9775
8842 42F4
725C
62C8 852B
5E74 79CA 79E5 9C87 9B8E 9CB6 9ECF 9BF0
6D8A 637B 6DF0 713E 8DC8 8F87 8F97 649A 64B5 78BE
8F26 7C10 8E4D 6506 8E68 8E8E
5344 5EFF 5FF5 59E9 5538 57DD 824C 9F30
54D6 9D47
56DC 60A8 42FB
62F0
810C
5B22 5B43
917F 91B8 91C0
5A18
5B81 549B 62E7 72DE 67E0 82E7 804D 5BCD 5BD5 752F
5BD7 5BDC 5BE7 511C 51DD 5680 5B23 64F0 7370 6AB8
85B4 8079 27B48 944F 9B21 9E0B
6A63 77C3
4F5E 4FAB 6CDE 6FD8
6F9D
5974 5B65 9A7D 7B2F 99D1
4F2E 52AA 5F29 782E 80EC
6012 5089 6419
90CD 632A 689B 50A9 513A
6A60
8BFA 558F 611E 2272A 63BF 6426 903D 9518 643B 6992
7A2C 7CD1 8AFE 8E43 61E6 61E7 7CE5 7A64 7CEF
597B
6E1C 3B09 6696 7156 7157 992A
9EC1
519C 4FAC 54DD 6D53 8113 79FE 8FB2 5102 8FB3 5665
6FC3 6A82 71F6 81BF 857D 79AF 7A60 895B 91B2 6B01
7E77
5F04 630A 7651 9F48
5973 9495 7C79 91F9
6C91 6067 6712 8844 46BC
759F 8650 7878 7627
FDD0-310C
5783 62C9 67C6 7FCB 83C8 641A 908B
65EF 524C 782C 63E6 78D6
5587 85DE
814A 63E7 694B 760C 8721 874B 8FA2 8FA3 8772 81C8
650B 7209 81D8 9B0E 74CE 9574 9BFB 881F 945E
5566 6E82 97A1 56B9
56D6
808B
4EC2 3539 4E50 53FB 5FC7 6250 6C3B 961E 738F 827B
6CD0 7AFB 7833 697D 97F7 6A02 7C15 39A1 9CD3 9C33
4E86 9979 990E
6765 4F86 4FEB 5008 5D03 5F95 6D9E 5A61 5D0D 5EB2
5FA0 68BE 6DF6 730D 83B1 90F2 68F6 741C 7B59 840A
9028 94FC 7B82 42F1 28090 9338 9A0B 9BE0 9D86 9EB3
553B 8D49 7750 775E 8D56 8CDA 6FD1 8CF4 983C 9842
21096 765E 9D63 7028 702C 7C41 6AF4 3E0A 85FE 7669
7C5F 8970
52D2
96F7 5AD8 7F27 757E 8502 64C2 3D62 6A91 7E32 790C
956D 6AD1 74C3 7FB8 7927 7E8D 7F4D 881D 9433 8632
8F60 513D 58E8 9458 9741 6B19 8646 7E9D 9F3A
53BD 8012 8BD4 5792 7D6B 8142 50AB 8A84 6A0F 78CA
78E5 854C 5121 4242 857E 58D8 3D7D 7657 6AD0 85DF
7928 7045 8B84 863D 9478 9E13
6CEA 6D21 7C7B 6D99 6DDA 7D2F 28024 9179 9287 981B
982A 9311 48AE 6502 98A3 985E 426A 7E87 8631 79B7
5841 561E 9C69
635E 6488
52B3 52B4 7262 7A82 54F0 5520 5D02 6D76 52DE 75E8
94F9 50D7 562E 37A0 5D97 61A5 24A42 7646 78F1 7C29
87E7 91AA 9412 985F 9ADD
8002 8001 4F6C 54BE 59E5 6045 72EB 6833 8356 94D1
41ED 92A0 6F66 6A51 8F51
6D9D 70D9 8022 916A 5AEA 61A6 6F87 8EBC 6A6F 802E
8EC2
73EF 7853 266E8 7CA9 86EF 6725 9BB1
779C
5245 5A04 507B 5A41 6E87 50C2 697C 848C 5ED4 617A
6F0A 6A13 71A1 8027 851E 877C 9071 802C 825B 87BB
8B31 8EC1 9AC5 97BB 9ACF
5D5D 6402 587F 5D81 645F 7BD3 750A 7C0D
3537 964B 5C5A 6F0F 7618 9542 763A 763B 93E4
55BD 560D
5170 5C9A 62E6 680F 5A6A 60CF 5D50 9611 847B 84DD
8C30 53B1 6F9C 5116 6593 7BEE 8934 61E2 71E3 71F7
9567 95CC 74BC 85CD 8955 8B4B 2814F 5E71 6514 703E
7C43 7E7F 8964 6595 6B04 7046 862D 7937 7C63 8974
56D2 7061 8B95 8E9D 6B17 9484 97CA
89C8 6D68 36E6 63FD 7F06 6984 6F24 7F71 9182 58C8
61D2 89A7 3A5C 64E5 5B3E 61F6 5B44 89BD 432B 5B4F
652C 7060 56D5 6B16 9872 7E9C
70C2 6EE5 71D7 5682 6FEB 7201 721B 74D3 7224 946D
7CF7
7226 897D
5577
52C6 90CE 6B34 72FC 90DE 9606 658F 6879 3C62 7405
5ACF 5ECA 7860 7A02 9512 6994 746F 7B64 8246 84C8
870B 8EB4 8782 92C3 93AF 99FA
6717 6716 70FA 365F 5871 6A03 84E2 8A8F 3BBE 6724
57CC 5D00 6D6A 3AF0 83A8 20E98 8497 95AC
5525 90D2
3604
5D1A 5844 68F1 695E 7890 7A1C 8F18 4244 8590
51B7
5030 580E 6123 7756 8E1C
5215 675D 5398 5253 9A8A 60A1 68A8 68A9 68B8 7281
740D 79BB 7C9A 8372 55B1 68C3 3D1D 7282 83DE 9E42
527A 6F13 3E48 775D 7B63 7F21 8243 870A 20ED7 20F1D
5AE0 5B77 76E0 8C8D 3992 6A06 7483 7CCE 84E0 92EB
9CA1 9ECE 7F79 853E 26E99 9305 7BF1 7E2D 4527 87CD
8935 569F 8B27 91A8 91D0 96E2 6584 3C00 74C8 85DC
908C 93EB 9BEC 9D79 9EE7 56C4 8821 9A39 5B4B 5EF2
6521 7055 5299 863A 9457 7A72 7C6C 7E9A 9A6A 9C7A
9E1D
793C 91CC 4FDA 5CDB 5CE2 5A0C 5CF2 6D6C 7406 9026
9502 7CB4 88CF 8C4A 92F0 9CA4 5163 6FA7 79AE 9BC9
87F8 91B4 9CE2 9090 9C67 6B1A
529B 5386 5389 5C74 7ACB 540F 6738 4E3D 5229 52B1
5456 575C 6CA5 4F8B 3578 5CA6 623E 67A5 6CB4 75A0
82C8 96B6 4FD0 4FEA 3926 680E 75AC 7805 82D9 8D72
8F79 3466 550E 60A7 6817 681B 6D96 7301 73D5 783A
783E 79DD 8318 8354 90E6 5533 5A6F 7B20 7C92 7C9D
8137 8385 8389 86B8 86CE 5088 51D3 53A4 68D9 75E2
86E0 8A48 8DDE 96F3 53AF 585B 6144 642E 6EA7 925D
9CE8 3B0F 66A6 6B74 746E 7D9F 849A 849E 8727 53B2
8777 66C6 6B77 7BE5 4509 96B7 29D98 9D17 52F5 3EFA
78FF 96B8 9B01 512E 5DC1 6FFF 7658 9398 56A6 58E2
650A 66DE 6AD4 6ADF 701D 7204 72A1 74C5 8807 9E97
6AEA 720F 74D1 76AA 76ED 77CB 792A 792B 79B2 85F6
34A7 5137 7667 7930 7CF2 8823 882B 9DC5 9E9C 56C7
6526 2789D 89FB 8E92 8F62 9148 6B10 8B88 2829B 8F63
652D 74E5 9742 299C3 9C71 9C73 974B
674E 6803 54E9 5A33 72F8 88E1 6AAA 9BCF
4FE9 5006
5217 52A3 51BD 52BD 39DC 59F4 6312 6D0C 54F7 57D2
57D3 3920 3B5E 6835 6D56 70C8 8322 8FFE 6369 3B69
730E 811F 86DA 88C2 716D 7759 8057 8D94 5DE4 98B2
5120 9BA4 9D37 64F8 7375 72A3 8E90 9B1B 3B2F 9B23
9C72
6BDF 54A7 6318 70EE 731F
64A9 8E7D
8FBD 7597 804A 50DA 5BE5 5D7A 6180 6F3B 818B 5639
5AFD 5BEE 5D9A 5D9B 6579 7360 7F2D 66B8 71CE 7499
81AB 907C 3D73 7642 9E69 5C6A 5EEB 7C1D 7E5A 87DF
8C42 8CFF 8E58 9410 85D4 98C9 9ACE 9DEF
53FE 4126 948C 91D5 911D 61AD 84FC 77AD 66E2 957D
7212
5C25 5C26 7093 6599 5C1E 5ED6 6482 7AB7 9563
720E
6E9C 7198 8E53
5218 6CA0 7544 6D41 6D4F 7409 7559 65C8 7571 786B
88D7 28EE7 5AB9 5D67 65D2 84C5 998F 9A9D 69B4 7460
84A5 905B 98D7 5289 746C 7624 78C2 954F 99E0 9E60
6A4A 74A2 7581 9560 7645 87C9 295E9 99F5 56A0 61F0
700F 938F 93A6 9E8D 85F0 93D0 98C0 9A2E 98C5 9C21
9DB9 9A51
39D5 67F3 6801 73CB 687A 7EFA 950D 925A 98F9 7DB9
71AE 7F76 92F6 6A6E 5B3C 7F80
516D 7542 7FCF 586F 5EC7 6F91 78DF 9E68 9724 993E
96E1 9402 98C2 9B38 9DDA
685E
5941 5E18 601C 8FDE 6D9F 68BF 83B2 467A 9023 8054
4EB7 5EC9 6E93 5332 55F9 5969 6169 6F23 7191 88E2
899D 5286 5333 5652 5AFE 6190 69E4 78CF 806B 84EE
9CA2 6FC2 6FD3 806E 878A 71EB 7E3A 7FF4 806F 81C1
8595 8933 8B30 8E65 938C 9570 6AE3 7C3E 880A 9B11
4965 942E 9C31 7C62 7C68
655B 740F 8138 88E3 6459 7489 8539 5B1A 6582 3BEC
81C9 913B 7FB7 895D 861E
7EC3 70BC 604B 6D70 6B93 581C 3703 5AA1 3C68 6E45
94FE 50C6 695D 7149 7453 8430 6F4B 7DF4 6FB0 932C
6BAE 934A 93C8 3D91 7032 9C0A 861D 6200 373B 7E9E
8068
62CE
53B8 6797 90BB 4E34 51A7 77DD 5549 5D0A 6DCB 667D
7433 7CA6 75F3 7884 7B96 7CBC 5D99 6F7E 735C 9130
96A3 65B4 66BD 71D0 7498 8F9A 9074 9716 77B5 78F7
81E8 7E57 7FF7 9E90 8F54 58E3 7036 93FB 9CDE 9A4E
9C57 9E9F
342D 3A06 83FB 4E83 51DB 51DC 649B 5EE9 5EEA 61CD
61D4 6F9F 6A81 6AA9 765B 765D
541D 6061 608B 8D41 711B 8CC3 50EF 853A 6A49 81A6
95B5 7510 7584 8E78 85FA 8E8F 8E99 8EAA 8F65
826F 4FCD 51C9 6881 6DBC 690B 8F8C 7CAE 7CB1 589A
7DA1 8E09 6A11 8F2C 7CE7
4E21 4E24 34B3 5169 5521 5562 639A 813C 7DC9 873D
88F2 9B49 9B4E
4EAE 54F4 60A2 8C05 8F86 55A8 667E 6E78 91CF 8F0C
8AD2 8F1B 9344
7177 7C17
3007 5222 7075 56F9 577D 590C 59C8 5CBA 5F7E 6CE0
72D1 6624 670E 67C3 73B2 82D3 51CC 74F4 768A 7831
79E2 7ADB 94C3 9E30 5A48 6395 68C2 6DE9 740C 7B2D
7D37 7EEB 4345 7F9A 7FCE 8046 8232 86C9 8851 9675
83F1 8A45 8DC9 8EE8 797E 9234 959D 96F6 9F84 420A
7DBE 88EC 8506 970A 99D6 6FAA 9302 9B7F 9CAE 9D12
9E77 3B21 71EF 4241 4516 8576 971B 971D 9F62 9BEA
5B41 9143 9F61 6AFA 8626 91BD 9748 2331F 6B1E 7227
24AE9 9EA2 4585 9F97
5CAD 963E 888A 9886 9818 5DBA
4EE4 53E6 5464 70A9
4F36 84E4 9717 702E
565C 64B8
5362 5E90 5786 6CF8 7089 82A6 3B54 680C 80EA 8F73
9E2C 7388 823B 9885 9C88 9B72 76E7 56A7 58DA 3820
5EEC 650E 6ADA 7018 7379 74B7 66E5 6AE8 7210 74D0
81DA 8606 77D1 7C5A 7E91 7F4F 826B 8826 8F64 946A
9871 9AD7 9C78 9E15 9EF8
5364 864F 63B3 9E75 7875 9C81 865C 5877 6EF7 6A10
84FE 9B6F 64C4 6A79 78E0 9565 5695 64FC 7002 6AD3
6C0C 8263 93C0 826A 942A 9465
5725 752A 4F93 5774 5F54 5F55 9646 5CCD 52CE 8D42
8F82 5A3D 6DD5 6DE5 6E0C 7849 9678 9E7F 3A90 6902
742D 7984 4402 83C9 902F 50C7 5279 52E0 76DD 7769
788C 797F 7A11 8CC2 8DEF 5876 5ED8 645D 6F09 7B93
7CB6 21014 622E 6A1A 719D 8194 850D 89EE 8DA2 8E1B
8F98 9181 3BDD 6F5E 7A4B 9304 9332 9334 7490 7C0F
8557 87B0 8E57 8F46 9A04 298F1 9E6D 7C2C 7C36 93D5
9BE5 9D66 9D71 9E93 93F4 9732 9A3C 7C59 9DFA 8642
67A6 822E 9229 6F9B 6C07
7F57 5570 9831 56C9
7F56 7321 8136 6924 841D 8999 903B 8161 9523 7BA9
9AA1 9559 87BA 7F85 89B6 93CD 5138 89BC 9A3E 21922
651E 7380 6B0F 268C7 863F 908F 9A58 9E01 7C6E 947C
9960
5246 502E 84CF 88F8 8EB6 7630 3A61 3C01 8803 81DD
66EA 7673
6CFA 5CC8 6D1B 7EDC 9A86 6D1C 73DE 8366 7866 7B3F
7D61 55E0 843D 645E 6F2F 7296 927B 96D2 99F1 9BA5
9D3C 9D45 6FFC 277CC 7E99
5A08 5B6A 5CE6 631B 683E 9E3E 8114 6EE6 92AE 9D49
571D 5971 5B4C 5B7F 5DD2 6523 66EB 6B12 7053 7F89
81E0 571E 7064 864A 947E 7674 7675 9E1E
5375
4E71 91E0 4E82
62A1 6384
4ED1 4F26 56F5 6CA6 7EB6 4F96 8F6E 502B 5707 5A68
5D18 5D19 60C0 6DEA 966F 68C6 3DCD 8140 83D5 4201
7DB8 8726 8E1A 8F2A 9300 9BE9
57E8 7896 7A10 8023
8BBA 6EA3 8AD6
78EE
9F99 5C78 5499 6CF7 663D 680A 73D1 80E7 830F 772C
783B 7ADC 7B3C 804B 6E70 9686 6EDD 20F90 5D90 6F0B
3863 7BED 856F 9F8D 7643 56A8 5DC3 5DC4 7027 7C3C
93E7 66E8 6727 3C0D 6AF3 7216 74CF 8622 9733 77D3
7931 7932 9F92 7C60 807E 882A 882C 8971 8C45 8E98
9468 9747 4BBE 9A61 9E17
5784 5785 62E2 9647 3D33 7BE2 5131 58DF 58E0 650F
96B4 7AC9 9F93
54E2 6335 6887 5FBF 8D1A
69DE 7ABF
9A74 95FE 90D8 6988 99BF 6C00 81A2 95AD 85D8 9DDC
9A62
5415 5442 4FA3 4FB6 6314 36CE 634B 635B 65C5 3B5A
68A0 7963 7A06 94DD 5C61 7F15 7D7D 5C62 8182 5C65
891B 92C1 8190 5122 7A5E 7E37 8938 7A6D
5BFD 578F 5F8B 8651 7387 7EFF 20DC8 5D42 6C2F 6EE4
844E 7DA0 7DD1 616E 7BBB 819F 52F4 7E42 6FFE 6AD6
7208 9462
7112
7567 950A 7A24 3500 5719 3A3C 92DD 92E2 64FD
FDD0-310D
65EE 5477 560E 5620
9486 5C1C 5676 9337
5C15 738D
5C2C 9B40
6208 4EE1 572A 72B5 7EA5 20BEB 6213 8090 726B 7599
54AF 7271 54E5 80F3 9E3D 5272 6401 88BC 20E9D 6ED2
6228 6B4C 29FB7 9D10 9D1A 64F1 8B0C 9D3F 93B6
5444 3837 4F6E 530C 630C 9601 9769 654B 3B58 683C
8316 9B32 6105 81F5 86D2 55DD 5865 6EC6 845B 88D3
89E1 9694 643F 69C5 8188 95A3 95A4 4213 9549 9788
97D0 7366 8AFD 8F35 9ABC 9BAF 97DA 97B7 9A14 4601
8F55
54FF 8238
4E2A 5404 867C 500B 784C 94EC 55F0 7B87
5F41 6ACA
4F85 8BE5 5793 59DF 5CD0 90C2 9654 6650 8344 8D45
7561 7974 7D6F 8A72 8C65 8CC5
5FCB 6539 7D60
4E10 4E62 5303 5304 9623 675A 9499 76D6 6461 6E89
9223 6224 6982 8462 8CCC 9691 6F11 84CB 3562 69E9
69EA 74C2
7ED9 7D66
768B 7F94 7F99 9AD8 7690 2690E 9AD9 81EF 6EDC 69D4
777E 818F 69F9 6A70 7BD9 7CD5 993B 6ADC 9DCE 9F1B
9DF1
5930 6772 83D2 641E 7F1F 66A0 69C0 69C1 3D46 7A3E
7A3F 9550 7E1E 6ABA 85C1 85F3
543F 544A 52C2 53DD 8BF0 90DC 796E 7970 9506 7170
7B76 8AA5 799E 92EF
97DF
52FE 4F5D 6C9F 94A9 88A7 7F11 920E 6E9D 9264 7DF1
7BDD 8920 97B2 97DD
5CA3 72D7 82B6 67B8 73BD 8007 82DF 7B31 8008 8009
86BC 8C7F
5778 6784 8BDF 8D2D 57A2 59E4 5193 8329 591F 5920
8A3D 5ABE 5F40 6406 8A6C 96CA 69CB 7179 89CF 9058
6480 89AF 8CFC
7518 5FD3 653C 6746 3DA5 7395 809D 8289 8FC0 5769
6CD4 77F8 4E79 67D1 7AFF 82F7 75B3 9150 4E7E 7C93
4E81 51F2 5C32 5C34 7B78 6F27 9CF1 5C36 5C37 9B50
4EE0 625E 76AF 79C6 8866 8D76 687F 7B34 6562 7A08
611F 8D95 6F89 64C0 6A44 7C33 9C14 9CE1 9C64
5E72 65F0 6C75 76F0 7EC0 501D 51CE 6DE6 7D3A 8A4C
5E79 9AAD 69A6 6A8A 8D11 8D63 8D1B 7068
6839 8DDF
54CF
826E
4E98 4E99 831B 63EF
5188 7F53 51AE 521A 6760 7EB2 809B 5CA1 3B4E 7268
7598 77FC 7F38 94A2 525B 7F61 5808 6386 91ED 68E1
7285 583D 7DB1 7F41 92FC 93A0
5C97 3F58 5D17 6E2F
7135 7B7B 69D3 6205 6206
522F 5E9A 754A 6D6D 3E74 8015 6404 713F 7D5A 83EE
8D53 9E52 7DEA 7E06 7FAE 8CE1 7FB9 9D8A
54FD 57C2 5CFA 632D 7EE0 803F 90E0 231B3 6897 8384
3F98 7D86 4304 9CA0 9ABE 9BC1
66F4 5829 6685 4C4D 4C6D
63B6 6929
4F30 5471 59D1 5B64 6CBD 6CD2 67E7 82FD 8F71 5502
7F5B 9E2A 7B1F 86C4 83F0 89DA 8EF1 8EF2 8F9C 9164
9232 7B8D 7B9B 5AF4 6A6D 443B 9B95 9D23
9DBB
5903 53E4 6262 6C69 8BC2 8C37 80A1 726F 2EE3 5503
4026 7F5F 7F96 94B4 9AA8 5552 6DC8 8135 86CA 86CC
8A41 9E44 5C33 6132 6BC2 9237 9989 9F13 9F14 560F
6996 69BE 76B7 84C7 7A40 9E58 7CD3 7E0E 6FF2 76BC
81CC 85A3 8F42 7014 76EC 77BD 9936 4D9C 8831
56FA 6545 51C5 987E 580C 5D13 5D2E 688F 727F 68DD
96C7 75FC 797B 7A12 9522 50F1 932E 9CB4 9BDD 9867
5495 5CE0 9027 50A6 83C7 7BD0
74DC 522E 80CD 681D 20D6F 9E39 8052 44B7 6B44 7171
8D8F 5280 7DFA 92BD 98B3 8E3B 9D30 9A27
53E7 518E 5250 526E 5BE1 4211
5366 576C 8BD6 6302 5569 639B 7F63 7D53 7F6B 8A7F
8902
98AA
5459 54BC 57DA 5D1E 90ED 581D 921B 9505 5613 588E
7611 8748 5F49 35FB 6FC4 87C8 934B 5F4D
56EF 56F6 56FB 56FD 5700 570B 5E3C 8158 5E57 6156
6F0D 805D 8195 852E 8662 9998 27C12 4190
679C 60C8 6DC9 7313 9983 6901 83D3 7CBF 7DB6 873E
88F9 69E8 8F20 9301 991C 9439
8FC7 904E
556F
4E56 63B4 6451
62D0 67B4 67FA 27285 7B89
592C 53CF 602A 39D4 6060
5F52 572D 59AB 9F9F 89C4 7688 90BD 95FA 5E30 73EA
80FF 8325 4E80 7845 4145 7A90 898F 5080 5AAF 691D
88BF 5EC6 90CC 5AE2 646B 7470 95A8 9C91 5B00 69FB
69FC 749D 81AD 879D 9F9C 9BAD 5DC2 6B78 9B36 74CC
9A29 9B39 6AF7
5B84 6C3F 6739 8F68 5E8B 4F79 5326 8BE1 20C53 579D
59FD 6051 6531 7678 8ECC 9652 5EAA 9B3C 532D 796A
6677 6E40 436F 86EB 3533 89E4 8A6D 53AC 3A33 4925
87E1 77A1 7C0B
6530 523D 523F 660B 7094 67DC 8D35 3A88 6842 6867
7324 7B40 8CB4 8DEA 5331 84D5 528A 528C 5DA1 648C
69F6 4210 4434 6A9C 77B6 7C02 6AC3 7650 79AC 8958
9CDC 97BC 9C56 9C65
6922
5173 89C2 5B98 51A0 898C 500C 20D28 68FA 7AA4 8484
95A2 761D 764F 89B3 95D7 9CCF 95DC 9C25 9C5E 89C0
839E 9986 742F 75EF 7B66 7BA1 8F28 8218 9327 9928
9CE4
6BCC 4E31 8D2F 6CF4 60BA 60EF 63BC 6DAB 8CAB 60B9
3D26 3BA1 797C 6163 645C 6F45 6A0C 9066 76E5 7F46
465B 96DA 93C6 704C 721F 74D8 9E73 77D4 7936 7F50
9475 9C79 9E1B
4E28 200CC 886E 60C3 7EF2 889E 88AC 8F8A 6EDA 6EFE
7DC4 84D8 78D9 8509 8F25 9CA7 25566 9B8C 9BC0
68CD 7754 3665 7774 74AD 8B34
5149 706E 4F8A 7097 709B 54A3 5799 59EF 6D38 6844
70E1 80F1 832A 8F04 50D9 92A7 9EC6 299C9
5E7F 5E83 72B7 5EE3 81E9 7377 2A1F5
4FC7 73D6 901B 81E6 6497 29448
709A 6B1F
5DE5 5F13 516C 53B7 529F 653B 675B 4F9B 739C 7CFC
80B1 5BAB 5BAE 606D 8EAC 9F9A 5311 5868 5E4A 6129
89E5 7195 8EB3 78BD 9AF8 4CCD 89F5 9F8F 9F94
5EFE 5DE9 6C5E 62F1 39EC 62F2 3B5F 6831 73D9 3F26
8F01 92DB 978F 4C4B
5171 8D21 7FBE 551D 8CA2 83BB 3536
86A3 6150
FDD0-310E
5494 5496 5580 8849 64D6
5361 4F67 80E9 9272
57B0 88C3
533C 3E2F 22208 67EF 7241 73C2 79D1 80E2 82DB 8F72
75B4 7822 8DB7 68F5 8EFB 988F 55D1 6415 7290 7A1E
7AA0 842A 9233 69BC 4426 9897 6A16 778C 78D5 4300
874C 9312 8596 9198 9846 9AC1 791A
58F3 63E2 6BBC 7FD7
53EF 5777 37B9 5CA2 3ABC 70A3 6E07 5D51 6564 6E34
5DB1 790D
514B 523B 524B 52C0 52CA 5BA2 606A 20CED 5A14 5C05
8BFE 20DB2 5801 6C2A 9A92 7F02 6119 6E98 951E 78A6
7DD9 8250 8AB2 790A 9A0D 2A0ED
5D59
5F00 5952 63E9 950E 958B 4924 9426
51EF 5240 57B2 607A 95FF 94E0 51F1 5274 6168 584F
5D66 6137 6977 8488 8F06 5605 669F 9534 4057 9347
93A7 95D3 98BD
5FFE 708C 708F 6B2C 70D7 52D3 6112 613E 938E
5C3B 9ADB
4E02 6537 8003 62F7 6D18 6832 70E4 7A01 9C93 71FA
94D0 7292 92AC 9760 9BB3 9BCC
62A0 26B05 82A4 770D 527E 5F44 6473 7798 4071
53E3 24618 52B6
53E9 6263 6542 51A6 5BBC 5BC7 3C2F 91E6 7A9B 7B58
6EF1 7789 8532 853B 7C06 9DC7
520A 681E 52D8 9F9B 582A 5D41 6221 9F95
519A 574E 4F83 780D 5058 57F3 60C2 83B0 6B3F 586A
6B41 69DB 8F21 6ABB 9851 7AF7 8F57
770B 884E 5D01 5888 78E1 77B0 95DE 77D9
808E 80AF 80BB 57A6 6073 5543 8C64 9F88 58BE 9339
61C7 9F66
63AF 88C9 8903
5FFC 95F6 780A 7C87 5EB7 21413 5ADD 5D7B 6177 6F2E
69FA 7A45 41B2 7CE0 8EBF 93EE 9C47
625B 6443
4849
4EA2 4F09 531F 56E5 6297 72BA 909F 7095 94AA 9227
958C
52A5 542D 5751 5994 962C 6333 7841 727C 785C 94FF
787B 647C 8A99 92B5 40D8 935E 93D7
625D 5233 77FB 67AF 80D0 90C0 54ED 684D 5800 5D2B
35C4 5710 8DCD 7A9F 9AB7 26846 9BAC
72DC 82E6
3838 5E93 4FC8 7ED4 5EAB 79D9 8DB6 7105 55BE 7D5D
88B4 88E4 7614 9177 5EE4 8932 56B3
5938 59F1 8A87
4F89 54B5 57AE 9299
3404 630E 80EF 8DE8 9ABB
823F
6269 62E1 62EC 6304 6870 7B48 86DE 9614 843F 8440
5ED3 9822 9AFA 6FF6 95CA 979F 61D6 64F4 9729 97B9
9B20
97D5
39DF 84AF 64D3
5DDC 51F7 5757 5FEB 4FA9 54D9 72EF 90D0 810D 584A
3C6E 7B77 9C99 5108 58A4 5672 5EE5 736A 9136 81BE
65DD 7CE9 9C60
5726
4E8F 5232 5CBF 609D 76D4 7AA5 8067 7ABA 8667 95DA
985D 5DCB 862C
594E 6646 9804 9997 55B9 63C6 45AF 9035 9108 9A99
6223 668C 694F 6951 8475 9697 777D 9B41 8770 4906
982F 367A 9368 9377 6AC6 85C8 9A24 5914 8637 8641
5DD9 2A1B4 72AA 8EA8
7143 8DEC 980D 8E5E
5C2F 532E 6B33 559F 6126 6E83 8143 9988 5ABF 6127
8489 7786 5633 5B07 6192 6F70 7BD1 8069 4646 6A3B
806D 8562 8B09 7C23 8075 993D 7C44 9400 994B 944E
4C0E
5BBD 5BDB 5BEC 81D7 9ACB 9AD6
6B35 6B3E 6B40 7ABE 4540
7ABD 9467
5764 6606 5803 5A6B 5D10 5D11 665C 7311 711C 7428
83CE 88C8 9AE0 8C87 951F 9AE1 9E4D 872B 88E9 9AE8
747B 890C 918C 9315 9CB2 9A09 9BE4 9D7E 9DA4
6083 6346 9603 58F8 68B1 7871 7975 7A07 58FC 7A1B
7D91 88CD 95AB 95B8 9F6B
56F0 6D83 3AFB 774F
5812 5C21 6F49 71B4
5321 344C 52BB 8BD3 5329 54D0 6047 6D2D 90BC 6846
7844 7B50 44B0 8A86 8EED
5FF9 6282 72C2 8BF3 8ED6 8A91 9D5F
593C 5123 61ED
535D 5739 7EA9 909D 51B5 65F7 5CB2 6CC1 77FF 663F
8D36 7716 7736 7D56 8CBA 8EE6 9271 58D9 8E80 913A
9ECB 61EC 66E0 720C 77CC 7926 7A6C 7E8A 945B
783F 7D4B 7B7A
7A7A 369A 5025 57EA 5D06 60BE 6DB3 787F 7B9C 9313
9D7C
5B54 233FA 6050
63A7 26048 979A
8EBB
FDD0-310F
5677
54C8 94EA
86E4
5964
4E37
8BC3 62B2 6B31 559D 8A36 55EC 881A
79BE 5408 4F55 52BE 5392 548A 548C 59C0 6CB3 5CC6
3A83 66F7 67C7 72E2 76C7 7C7A 7D07 90C3 9602 9978
54EC 3A89 6546 6838 76C9 76CD 555D 3B71 6DB8 76D2
79F4 8377 86B5 9F81 60D2 6E2E 83CF 8402 8A38 988C
6941 6BFC 8A65 8C88 47A6 8F05 924C 9616 9C84 3561
7186 9E56 9EA7 6F95 3FE5 981C 7BD5 7FEE 879B 9B7A
7909 95D4 97A8 9F55 8988 9DA1 76AC 9449 9FA2
4F6B 578E 8D3A 7103 8894 8CC0 55C3 7142 788B 7187
8D6B 3D51 8910 9E64 3B1E 7A52 7FEF 58D1 764B 8B1E
7200 9DAE 9DB4 974E 9E16 974F
7CAD 974D
548D 54B3 55E8
8FD8 5B69 9826 9AB8 9084
6D77 80F2 70F8 917C 91A2
4EA5 598E 39E1 9A87 5BB3 6C26 55D0 9900 99ED 26926
995A
5870 56A1
9ED2 9ED1 563F 6F76 28B46
8320 84BF 5686 8585 85A7
6BDC 869D 6BEB 6903 55E5 7346 8C89 5651 7354 8C6A
295B8 5637 3B14 734B 8AD5 512B 568E 58D5 3819 6FE0
7C47 8814 8B79
597D 90DD
53F7 36AA 3740 660A 6626 79CF 54E0 5CFC 604F 608E
6D69 8017 6667 3B36 6DCF 5090 7693 6EC8 8055 865F
9117 66A4 66AD 6F94 769C 769E 66CD 76A1 76A5 8583
93AC 98A2 704F 9865 9C1D 705D
7AD3
9F41
4FAF 3927 77E6 5589 5E3F 7334 9107 3B0B 8454 760A
777A 7BCC 7CC7 7FED 9ABA 7FF5 936D 9931 9BF8
543C 72BC
540E 539A 5795 5F8C 6D09 90C8 9005 5820 8C5E 9C8E
9C98 9B9C 9C5F
5019
4F44 70B6 9878 3937 86B6 9163 9807 5AE8 8C3D 61A8
99A0 6B5B 9F3E
9097 542B 51FD 5481 80A3 90AF 51FE 8677 5505 5705
5A22 6D5B 5D21 6657 6892 6DB5 7113 7400 5BD2 5D45
3B80 97E9 751D 7B68 4204 872C 6F8F 92E1 9B7D 97D3
4E06 5388 7F55 6D6B 558A 961A 850A 3E01 8C43 9B2B
361A
6C49 5C7D 6C57 95EC 65F1 5CBE 54FB 57BE 608D 634D
6D86 7302 3A8B 6658 6665 710A 839F 91EC 9588 7694
7745 83E1 50BC 86FF 9894 99AF 6F22 872D 8C8B 6496
66B5 71AF 92B2 92CE 61BE 64BC 24CC9 7FF0 8792 9837
9844 99FB 96D7 701A 8B40 862B 9DBE
516F 7233
62EB 75D5 978E
4F77 5F88 72E0 8A6A
6068
592F 3C20
65BB 676D 82C0 8FD2 7ED7 73E9 7B10 822A 86A2 4615
9883 8CA5 7B55 7D4E 980F 28048 9B67
6C86
57B3
4EA8 54FC 6099 5548 811D
3530 59EE 6046 6052 6841 70C6 80FB 9E3B 6A2A 6A6B
8861 9D34 8605 9445
583C
6DA5 9D46
4E6F 5322 864D 547C 5780 5FFD 6612 66F6 6CD8 6057
70C0 82F8 8F77 532B 553F 60DA 39FE 6DF4 8656 8EE4
5611 5BE3 6EF9 44E4 96D0 5E60 622F 6B51 27A53 81B4
8B3C
56EB 6287 5F27 72D0 80E1 58F6 74F3 96BA 20D31 58F7
659B 7100 35C5 5596 58FA 5AA9 6E56 7322 7D57 6430
695C 7173 745A 846B 561D 2430D 9E55 69F2 7BB6 851B
8774 885A 9B71 7E20 879C 9190 9836 89F3 9378 992C
4B4C 9D60 702B 9B0D 9C17 9D98 9DA6
4E55 6C7B 864E 6D52 4FFF 7425 8400 865D 6EF8
4E65 4E92 5F16 6236 6237 6238 3E26 51B1 51B4 5E0D
62A4 6C8D 6CAA 8290 5CB5 6019 623D 6608 6791 6018
795C 7B0F 5A5F 6248 74E0 55C0 695B 7D94 96FD 5AED
5AEE 6462 6EEC 9120 69F4 71A9 8530 9CF8 7C04 9359
569B 9E71 8B77 9CE0 97C4 9800 9C6F 9E0C
4E4E 7C90 552C 7CCA 933F 9BF1
82B1 82B2 54D7 5629 848A 9335
534E 3572 3B49 59E1 9A85 91EA 91EB 94E7 83EF 6433
6ED1 733E 380F 398A 64B6 78C6 92D8 8550 8796 8B41
93F5 9A4A 9DE8
5316 5212 3566 593B 3577 6779 753B 8BDD 6866 5A73
5D0B 756B 7575 89DF 8A71 5283 6466 5AFF 5B05 69EC
6F85 6A3A 8AE3 7E63 8219 9ECA 8B6E
57D6 5A72 691B 7874 7CC0 8AAE 748D
5419 5268 8020 952A 5290 9343 5684 8C41 6509 9A1E
4F78 6D3B 79EE 79F3
706B 4F19 90A9 94AC 9225 5925 6F37
6C8E 6216 8D27 549F 7809 4100 4FF0 6347 7713 9584
20D7E 639D 83B7 8CA8 60D1 6E71 7978 65E4 6947 3A2F
798D 84A6 35F2 596F 970D 6FE9 7372 8B0B 6AB4 956C
56AF 7016 77C6 7A6B 4C5B 66E4 802F 81DB 8267 85FF
8816 56BF 7668 77D0 944A 9743
6000 5F8A 6DEE 69D0 8E1D 61D0 8922 8931 3733 3822
61F7 7024 6AF0 8032 8639
574F 54B6 8AD9 58CA 58DE 863E
7070 39D1 8BD9 54B4 6062 62FB 6325 6D03 867A 6656
70E3 73F2 8886 8C57 5A4E 5645 5A88 63EE 3DC7 7FDA
8F89 6689 694E 7147 8A7C 9693 5E51 7773 7988 649D
5655 7FEC 8918 8F1D 9EBE 5FBD 7008 96B3 8633 9C34
56D8 56DE 56EC 4F6A 5EFB 605B 6D04 5EFD 70E0 8334
8698 8FF4 75D0 9025 86D4 86D5 8716 9BB0
6094 6BC0 6BC1 26799 6BC7 6A93 71EC 8B6D
5349 6C47 4F1A 8BB3 6CCB 54D5 21726 6D4D 7ED8 8294
8BF2 605A 6075 70E9 835F 8D3F 5F57 6666 79FD 5599
60E0 6E4F 7D75 7F0B 7FD9 9613 532F 5F59 5F5A 3963
6703 6ED9 8A6F 8CC4 9892 50E1 5612 3A39 8AA8 571A
5BED 6167 6193 66B3 69E5 6F53 7623 8527 49E5 5666
5B12 5FBB 6A5E 6BA8 6FAE 6FCA 7369 8559 8AF1 982E
71F4 74AF 7BF2 8588 8589 992F 5696 77BA 7A62 7E62
87EA 3B29 6AD8 7E6A 7FFD 85F1 8B53 5136 93F8 95E0
5B48 942C 9767 8B7F 986A
5C77 7073 74A4 61F3
72BF 6B53 9D05 3E55 9D4D 56BE 61FD 737E 9144 8B99
8C9B 9A69
73AF 5CD8 6D39 72DF 90C7 6853 8341 5BCF 7D59 8408
8411 96C8 7D84 7FA6 8C86 926E 953E 571C 5B1B 5BF0
6FB4 7F33 49A1 961B 74B0 8C72 9370 956E 9E6E 7CEB
7E6F 8F58 9436 95E4 9B1F 74DB 4D09
7F13 4220 7DE9 650C
5E7B 5942 8092 5950 5BA6 5524 6362 6D63 6DA3 70C9
60A3 6899 7115 559A 559B 5D48 610C 63DB 6E19 75EA
7746 902D 3B07 3B0A 7165 744D 8C62 6F36 7613 69F5
9CA9 64D0 6FA3 9BC7 85E7 9C00
6B22 77A3 6B61
660F 662C 8364 5A5A 60DB 6DBD 960D 68D4 6B99 7767
8477 776F 95BD
5FF6 6D51 68A1 9984 581A 6E3E 743F 9B42 991B 7E49
8F4B 4B9D 9F32
9BF6
8BE8 4FD2 5031 5702 638D 6DF7 711D 6EB7 6141 89E8
8AE2
5DDF 3835 8093 8841 8352 671A 5843 614C 3B3B
7687 505F 51F0 55A4 582D 5A93 5D32 5FA8 60F6 6E5F
968D 9EC3 9EC4 697B 714C 745D 845F 9051 953D 58B4
6F62 735A 7BC1 7BCA 824E 8757 71BF 749C 8AFB 7640
78FA 417F 7A54 9360 992D 9CC7 7C27 87E5 97F9 8DAA
9A1C 9404 9C09 5164 9C51 9DEC
6033 604D 70BE 5BBA 6644 595B 8C0E 5E4C 8A64 7180
4420 8B0A 6ACE
6130 3A2A 6EC9 69A5 769D 66C2 93A4 76A9
6643 7E28
53FF 543D 544D 7074 8F70 54C4 8A07 70D8 8EE3 63C8
6E39 7122 7861 8C3E 29420 8F37 85A8 9367 569D 8F5F
4EDC 5F18 5985 7EA2 5430 5B8F 6C6F 7392 7EAE 95F3
5B96 6CD3 57AC 5A02 6D2A 7AD1 427A 7D05 82F0 8679
5CF5 6D64 7D18 7FC3 803E 836D 7854 7D2D 8C39 9E3F
6E31 7AE4 7CA0 921C 958E 7D8B 7FDD 8452 8453 8C3C
6F42 28306 9277 9783 9B5F 92D0 5F4B 9710 857B 971F
9D3B 9EC9 2410F 9ECC
664E 3B34 55CA
8BA7 8A0C 95A7 6494 6F8B 6F92 92BE 95C2 9B28
FDD0-3110
4E0C 22A66 8BA5 51FB 5209 53FD 9965 4E69 520F 673A
7391 808C 573E 77F6 9E21 6785 82A8 54AD 59EB 525E
5527 59EC 5C50 79EF 7B04 8FF9 98E2 57FA 7EE9 559E
5D46 5D47 6567 671E 7284 7B53 7F09 8D4D 52E3 55D8
7578 7A18 8DE1 8DFB 9CEE 50DF 20F3B 6BC4 7B95 9288
5630 69E3 757F 7A3D 7DDD 89ED 8CEB 8EB8 9F51 58BC
6A5F 6FC0 74A3 7A4D 9324 64CA 78EF 79A8 7C0A 7E3E
7F81 8940 8CF7 96AE 6AC5 802D 8E5F 96DE 8B4F 913F
97F2 9D8F 8B64 9416 9951 8E8B 97BF 9DC4 9F4E 7F87
9447 8640 8989 9459 9F4F 7F88 9E04 898A
4EBC 53CA 4F0B 5409 7EA7 5373 5C8C 5F76 5FE3 6781
6C72 7680 4E9F 4F76 8BD8 9491 537D 59DE 6025 72E4
90C6 63E4 75BE 768D 7B08 7D1A 810A 4798 506E 5359
5EB4 3B72 710F 89D9 8C3B 35CA 68D8 6E52 96C6 5849
5AC9 6131 6222 696B 6975 6B9B 8D8C 69C9 8024 818C
84BA 92A1 35F1 6483 6F57 7620 799D 7BBF 8E16 9E61
5DAF 6A76 6FC8 8540 878F 64EE 6A9D 857A 8E50 9353
85C9 894B 8265 7C4D 8F5A 93F6 4CED 9735 9DBA 9DD1
96E6 96E7
51E0 5DF1 4E2E 5980 72B1 6CF2 866E 6324 638E 9C7E
5E7E 39B8 621F 9218 5D74 9E82 9B62 64A0 64E0 7A56
87E3 9B55
2E95 5F50 5F51 65E1 8BA1 8BB0 4F0E 7EAA 5756 5993
5FCC 6280 5242 5B63 82B0 9645 54DC 578D 5CDC 65E2
6D0E 6D4E 7D00 830D 8A08 5264 7D12 7EE7 8324 8360
89CA 8A18 5048 5BC2 5BC4 3831 5F9B 394D 60B8 65E3
689E 6E08 796D 5848 60CE 3ED1 4400 81EE 517E 75F5
7D99 846A 8507 88DA 66A8 6F03 6F08 7A29 7A4A 84DF
8900 8A8B 8DFD 969B 9701 9B3E 9C9A 66A9 7A37 8AC5
9CAB 5180 5291 66C1 7A44 9AFB 568C 6A95 6FDF 7F7D
858A 89AC 6AB5 3E04 85BA 9D4B 9F4C 61FB 7660 7A67
7E4B 9AA5 9BDA 7031 7E7C 860E 29949 9C40 862E 973D
9C36 9C3F 863B 9C6D 9A65
4EBD 8F91 6A2D 8F2F 5EED 766A
52A0 4E6B 5939 4F3D 593E 4F73 62B8 62C1 6CC7 3E62
67B7 6BE0 6D43 73C8 8304 8FE6 57C9 5BB6 6D79 75C2
689C 7B33 801E 8888 50A2 7333 8DCF 20EA2 728C 8175
846D 926B 5609 927F 9553 8C6D 8C91 29D9B 93B5 4552
9E9A
573F 5FE6 6274 90CF 550A 605D 835A 90DF 621B 83A2
94D7 621E 86F1 88B7 988A 3B96 86FA 88CC 8DF2 9782
9904 92CF 982C 9830 9D36 9D4A
7532 4EEE 5CAC 53DA 73BE 80DB 659A 8D3E 94BE 5047
5A7D 5FA6 659D 6935 8CC8 9240 698E 69DA 7615 6A9F
4EF7 9A7E 67B6 22C4C 5AC1 5E4F 69A2 50F9 99D5
7A3C 7CD8
7596 9636 7686 63A5 63B2 23D8F 75CE 79F8 5588 5826
5A98 63ED 6904 6E5D 813B 83E8 8857 968E 55DF 5AC5
716F 40C8 7A2D 8754 64D1 7664 8B2F 9D9B
5369 536A 5B51 5C10 8BA6 8282 5226 5227 52AB 5C8A
523C 351A 52BC 6605 6770 758C 3636 36C3 62EE 6D01
7ED3 5022 6840 8871 8A10 8FFC 507C 5A55 5D28 6377
83AD 5091 55BC 3A17 4039 7D50 7D5C 88BA 9889 5D65
3A29 696C 6976 6ED0 776B 7BC0 8710 874D 8A70 9263
9B5D 622A 69A4 78A3 7AED 26D74 9C92 6F54 7FAF 84F5
8AB1 8E15 978A 5E6F 937B 9B9A 5DC0 6AED 881E 8818
883D
6BD1 5A8E 89E3 89E7 98F7 6A9E
4E2F 4ECB 5424 5C95 3839 5E8E 6212 5C46 5C4A 73A0
82A5 754C 754D 75A5 780E 8BEB 501F 6088 86A7 8878
5FA3 583A 6950 743E 86F6 7297 8AA1 9AB1 9B6A 892F
9385 8EA4
59D0 685D
4EA4 827D 8281 59E3 5A07 5CE7 6D47 90CA 9A84 80F6
832D 832E 6912 7126 86DF 8DE4 50EC 5604 213ED 8660
9C9B 5B0C 5D95 5DA3 618D 6F86 81A0 71CB 81B2 8549
7901 7A5A 9BAB 9D41 9E6A 7C25 87ED 8F47 940E 9DCD
9A55 9DE6 9DEE
3B42 81EB 89D2 4F7C 4FA5 6054 6322 72E1 7EDE 997A
6341 6648 70C4 768E 77EB 811A 94F0 6405 6E6B 7D5E
527F 656B 6E6C 714D 8173 8CCB 50E5 6477 669E 8E0B
9278 9903 510C 528B 5FBA 649F 64B9 5FBC 61BF 657D
657F 71DE 7F34 96A6 66D2 74AC 77EF 76A6 87DC 7E73
8B51 5B42 3A70 27088 652A 705A 9C4E
53EB 544C 5CE4 630D 8A06 73D3 7A8C 8F7F 8F83 654E
6559 7A96 3C3E 6ED8 8F03 5602 5626 65A0 6F16 9175
564D 5DA0 6F50 566D 5B13 7365 85E0 8DAD 8F4E 91AE
8B65 3B2D 76AD 91C2
9D64 6AF5 7E90
4E29 52FC 7EA0 673B 725E 7A76 7CFA 9E20 7CFE 8D73
28CCA 9604 557E 63C2 63EA 841B 63EB 9CE9 644E 6A1B
9B0F 9B2E
4E5D 4E45 4E46 4E63 597A 7078 7396 820F 97ED 7D24
9152 9579 97EE
531B 65E7 3EA9 81FC 548E 759A 4192 67E9 67FE 5003
6344 6855 5313 53A9 6551 5AA8 5C31 5EC4 8205 50E6
5ECF 5ED0 6166 6BA7 9E6B 820A 5336 9BE6 9E94 9F68
9DF2
6C63 6766 6B0D
620B 5978 5C16 5E75 575A 6B7C 95F4 51BF 6214 73AA
80A9 8270 59E6 59E7 517C 76D1 5042 5805 60E4 3B74
730F 7B3A 8C5C 6E54 724B 7F04 83C5 83FA 9593 641B
6937 693E 714E 728D 744A 788A 7F23 844C 8C63 76E3
7777 7B8B 84B9 6A2B 719E 7DD8 9CA3 9CFD 9E63 71B8
2585D 7BEF 7E11 8551 8573 8271 9930 99A2 9E89 7010
97AC 97AF 9CD2 791B 4320 89B8 9D73 7038 9427 6AFC
6BB2 9DBC 97C0 9C39 56CF 8643 946F 97C9
56DD 62E3 67A7 4FED 67EC 5039 6338 6361 7B15 8327
51CF 526A 6898 68C0 583F 63C0 63C3 691C 6E1B 6E55
7751 7877 8A43 950F 5F3F 6695 7450 7B67 7B80 7D78
88E5 8C2B 8DBC 6229 622C 3A35 78B1 5109 7FE6 64BF
6AA2 2372D 8B07 8E47 77BC 7906 7C21 85C6 8947 8949
8B2D 7E6D 9B0B 9E78 703D 8812 9417 9C0E 5297 9E7B
7C5B 8B7E 9E7C 897A
89C1 4EF6 898B 996F 5251 5EFA 6D0A 726E 8D31 4FF4
5263 682B 6DA7 73D4 8230 8350 5065 5271 5FA4 6E10
8C0F 91FC 5BCB 6E85 81F6 88B8 8DF5 65D4 6957 6BFD
249E3 8171 8465 8CCE 9274 952E 50ED 3A34 6997 6F38
528D 528E 3D4E 6F97 7BAD 7CCB 852A 8AD3 8CE4 8D9D
8E10 8E3A 5292 5294 8AEB 92FB 991E 77B7 78F5 85A6
87B9 9373 9375 64F6 6FFA 7E5D 3C04 89B5 93E9 7033
8266 8B7C 8F5E 9431 9451 9452 946C 9473
5F45 58B9 6A7A 7900 6BB1
5DFE 4ECA 65A4 9485 5153 91D1 6D25 77DC 89D4 57D0
73D2 7D1F 8355 887F 60CD 583B 7B4B 91FF 5D9C 9E76
9EC5 895F
4EC5 5C3D 4FAD 537A 5DF9 7D27 5807 83EB 50C5 53AA
8C28 9526 5AE4 5ED1 6F0C 76E1 7DCA 9991 69FF 747E
84F3 5118 9326 8B39 9949
4F12 52A4 52B2 5997 6783 8FD1 8FDB 52C1 6D55 6649
664B 6D78 70EC 8369 8D46 552B 740E 7972 9032 5BD6
6422 6E8D 7981 7F19 9773 5890 3A37 3B10 669C 7468
50F8 51DA 6B4F 6BA3 89D0 5664 3B1C 6FC5 74A1 7E09
8CEE 568D 5B27 3BF2 6FDC 71FC 74B6 85CE 89B2 8D10
9F7D
91D2 781B 743B 58D7
6C5F 59DC 5C06 6D46 7555 8333 8C47 5C07 757A 8441
646A 7FDE 50F5 6F3F 8780 58C3 7F30 6A7F 6BAD 8591
87BF 9CC9 7585 7913 7586 7E6E 97C1 9C42
8BB2 5956 6868 508B 5968 848B 596C 69F3 734E 8199
8523 8029 4243 8B1B 985C
531E 5905 5F1C 6D1A 7EDB 964D 5F36 7D73 88B6 52E5
9171 5D79 647E 6EF0 5F4A 236A6 729F 7CE1 7CE8 91A4
8B3D 91AC
5320 6762 6AE4
5755 5759 5DE0 4EAC 6CFE 7ECF 4EB0 79D4 830E 6D87
834A 5A5B 60CA 65CC 65CD 7304 7D4C 8396 6676 7A09
8148 8346 83C1 7CB3 7D93 844F 5162 7CBE 8059 9CB8
9D5B 9BE8 9D81 9D84 9E96 9F31 9A5A 9EA0
4E95 4E3C 522D 362B 5753 5B91 6C6B 9631 6C6C 80BC
5244 7A7D 9888 666F 981A 5106 5E5C 61AC 66BB 71DB
749F 9838 61BC 74A5 87FC 4718 8B66
598C 51C0 5F2A 5F84 4FD3 205CA 6D44 80EB 8FF3 501E
51C8 5F33 5F91 75C9 7ADE 5A59 5A67 6871 68B7 6DE8
811B 9015 291D5 7ADF 75D9 7AE7 9753 50B9 656C 3B0C
7AEB 9756 5883 734D 8AA9 8E01 9759 477C 975A 955C
975C 66D4 6FEA 701E 93E1 7AF6 7AF8
775B 6A78 71DD
51E5 521F 6285 530A 5C45 62D8 6CC3 72D9 9A79 82F4
6336 75BD 75C0 7717 7820 7F5D 5A35 5A6E 5D0C 63AC
68AE 6DBA 9671 6910 741A 8152 83F9 8D84 8DD4 9514
96CE 824D 871B 88FE 8E18 8E19 92E6 99D2 9B88 9D21
97A0 97AB 9D8B
26951 5C40 3632 6CE6 4FB7 72CA 6854 6BE9 5579 5A45
6DD7 7117 6908 6BF1 6E68 83CA 90F9 7291 8F02 50EA
7CB7 8DFC 8ACA 8D9C 8EB9 95B0 6A58 6A8B 99F6 4CD4
9D59 8E6B 9D74 5DC8 9DAA 861C 9F33 9A67
5480 5F06 6CAE 4E3E 6319 8392 6907 6989 6998 7B65
9F83 849F 8065 8209 8E3D 64E7 9F5F 6AF8 6B05
53E5 5DE8 4E6C 5DEA 8BB5 5177 59D6 5CA0 6007 6010
601A 62D2 62E0 6D30 90AD 661B 6B6B 70AC 82E3 949C
4FF1 5028 5036 51A3 5267 79EC 57E7 57FE 60E7 636E
7C94 801F 86B7 8893 728B 8A4E 8DD9 8DDD 98D3 8C66
9245 952F 5BE0 6133 7AAD 805A 8661 5287 52EE 5C66
8E1E 99CF 58C9 61C5 64DA 6FBD 7AB6 422E 92F8 9B94
5C68 907D 98B6 8C97 7C34 8E86 91B5 61FC 943B 3B2C
77E9 7220 8977
5658 6485 64A7 5C69 8E7B
4E85 2010C 5B52 5B53 51B3 5214 6C12 8BC0 6289 6C7A
5F21 3B48 6CEC 73A6 73A8 82B5 6317 73CF 75A6 7804
7EDD 8673 89C9 5014 6354 6B2E 8697 5D1B 6398 658D
6877 6B8C 8990 89D6 8A23 8D7D 8DB9 4848 5095 53A5
3B7E 7133 7D55 7D76 899A 8D89 902B 920C 37F2 5282
3522 52EA 7474 8C32 99C3 5DA5 61B0 71A6 7234 7357
761A 9D02 9D03 5671 61A0 6A5B 6A5C 855D 8568 7235
81C4 9562 87E8 87E9 5C6B 8B4E 8E76 8E77 9D8C 5337
56BC 7211 77CD 89BA 940D 941D 721D 89FC 5F4F 6204
652B 7383 9DE2 6B14 77E1 9FA3 28C1C 8C9C 8EA9 9481
59E2 5A1F 6350 6D93 7106 8127 74F9 9E43 88D0 52EC
48FA 954C 93B8 9D51 942B 8832
5377 545F 5E23 57CD 6372 83E4 9529 3DF7 9308 81C7
52B5 5946 5DFB 5026 52CC 684A 72F7 7EE2 96BD 6DC3
7737 774A 7D6D 7F65 45AD 9104 7760 7D79 96CB 98EC
21840 617B 8528 990B 7367 7E33 7F82
519B 208D5 541B 5747 36AC 6C6E 59F0 8ECD 94A7 8690
8880 687E 76B2 8399 83CC 921E 7885 76B8 76B9 89A0
9281 929E 9CAA 9E87 9355 9BB6 9E8F 9E95
5441 4FCA 3F59 57C8 5CFB 6343 6D5A 90E1 9656 9982
9A8F 35A5 6659 710C 73FA 2797A 347A 68DE 756F 7AE3
3766 41F9 7B98 7B9F 8720 28318 5101 3559 9915 5BEF
61CF 71C7 6FEC 99FF 9D54 9D58 6508 4551 651F
2E86 5182 518B 5770 6243 57DB 7D45 99C9 99EB 860F
8614
518F 56E7 38A0 6CC2 7085 4FB0 70AF 8FE5 6D7B 9008
70F1 489B 7A98 988E 715A 7D97 50D2 715B 71B2 6F83
8927
FDD0-3111
4E03 6C8F 8FC9 59BB 67D2 501B 51C4 6816 6864 5A38
60BD 687C 6DD2 90EA 6532 671F 68F2 6B3A 3C66 840B
86E3 50DB 5601 617D 69BF 6F06 7DC0 617C 69ED 25250
8AC6 8AFF 970B 45E9 8E4A 3B24 9B4C 4953 93DA 9D88
4E93 9F50 573B 5C90 5C93 5FEF 4E9D 5176 5947 6589
6B67 7541 7941 80B5 82AA 4FDF 75A7 7947 7948 7AD2
5258 658A 65C2 8006 8110 8691 8694 869A 9880 57FC
5D0E 5E3A 6391 6DC7 7309 7566 8DC2 8EDD 91EE 9A90
9A91 68CA 68CB 7426 742A 8401 8415 86F4 612D 7881
7895 797A 44C5 951C 980E 65D7 7CB8 7DA5 7DA6 7DA8
44EB 871D 871E 9B3F 9F4A 7482 8E11 79A5 8572 9321
9CAF 61E0 6FDD 2A5C6 6AB1 6AC0 24A8C 81CD 85C4 9A0E
9A0F 9CCD 4C07 9BD5 9D78 9D80 9E92 7E83 8269 8604
8810 9B10 9C2D 7382 9EA1
4E5E 4F01 5C7A 5C82 9094 542F 5447 675E 7398 76C0
8291 5518 8C48 8D77 5553 5554 5A4D 555F 7EEE 6675
68E8 410E 7DAE 7DBA 8AEC 95D9
6C14 8BAB 5FD4 6C17 6C54 5F03 6C7D 77F5 8FC4 546E
6CE3 7081 76F5 829E 54A0 5951 780C 6814 6B2B 6C23
8A16 552D 5921 68C4 6E46 6E47 789B 847A 6456 66A3
78B6 5650 6187 7508 27858 5668 61A9 78DC 78E7 78E9
468D 7F4A 87FF 9F1C
7F3C 621A 6E0F 7DD5 8904 87A7 7C2F 7C31 7C4F
6390 845C
62E4
8DD2 9160
5736 51BE 34E4 5E22 6070 6D3D 6B8E 7848 6118 9AC2
9790
767F 21D90 49A7 807A
4E14
5207 59BE 602F 5327 7A83 90C4 20CB5 608F 6308 6D2F
3932 60EC 6DC1 7B21 611C 86EA 3966 6705 7BA7 7DC1
9532 21424 7BCB 8E25 7A55 9365 85D2 9BDC 9411 7ACA
2383A
82C6 503F 5AAB 7C61
6084 7857 90FB 5D6A 8DF7 5281 6572 6BC3 8E0D 9121
9125 9539 589D 981D 58BD 5E67 22FE3 6A47 71C6 7F32
9AB9 78FD 936B 936C 7E51 8DAC 8E7A 9430
4E54 4FA8 6865 834D 835E 785A 55AC 83EC 50D1 8C2F
563A 5AF6 376F 6194 9792 6A35 6A4B 854E 7644 4009
77A7 7904 4397 8DAB 85EE 9408 97BD 9866 2710D
5DE7 91E5 6100 9ADC
4FCF 8BEE 5CED 5E29 7A8D 9657 6BBB 7FD8 8A9A 9ADA
50FA 64AC 64BD 9798 97D2 7AC5 7FF9 8B59 8E88 3681
69D7 729E
3400 4E18 4E20 20C0B 5775 36B1 3CCB 90B1 6058 79CB
79CC 86AF 5A9D 6978 8429 9E59 7BCD 7DE7 84F2 8775
7A50 8DA5 4A02 9CC5 87D7 97A6 97A7 9C0C 9C0D 9D96
8824 9F9D
53F4 56DA 624F 72B0 738C 6C53 808D 6C42 866C 6CC5
42B5 866F 4FC5 89D3 8A04 8A05 914B 91D3 5512 3797
3939 3B5D 6D57 7D0C 91DA 6882 6B8F 6BEC 7403 838D
8D47 900E 9011 5D37 5DEF 3962 6E1E 6E6D 76B3 76DA
5DF0 716A 7D7F 86F7 88D8 9052 89E9 8CD5 7486 8764
92B6 9194 9B82 9F3D 9BC4 9C3D
641D 7CD7
91FB 8612
5343 4EDF 5731 5732 5977 6266 6C58 9621 4F65 5C8D
6744 6C67 828A 8FC1 6B26 74E9 81E4 833E 948E 62EA
7275 7C81 515B 60AD 8C38 94C5 5A5C 5B6F 727D 91FA
6394 8688 8C26 9206 96C3 50C9 6106 7B7E 925B 9A9E
9E50 6173 6434 6481 7B9E 8AD0 9077 8930 8B19 9845
6AB6 6510 6ACF 7C3D 9D6E 5B45 6513 9A2B 6511 9B1D
9B1C 3A77 7C64 97C6
4EF1 5C92 5FF4 6272 62D1 524D 94A4 6B6C 8654 94B1
94B3 63AE 8EE1 5A8A 63F5 9210 976C 9257 5898 69A9
7B9D 92AD 6F5B 6F5C 7FAC 6A6C 8541 9322 9ED4 9EDA
6FF3 9A1A 9A1D 704A 9C2C
51F5 80B7 6D45 6DFA 8125 55DB 5D70 69CF 8181 8738
9063 8C34 7F31 7E7E 8B74
6B20 520B 3438 82A1 4FD4 5029 6093 831C 5811 5094
5D4C 68C8 6920 614A 7698 5879 371E 37FB 6B49 7DAA
84A8 69E7 7BCF 8533 8F24 5119 7BDF 58CD 7E34 4945
9C1C
7ACF 9386 93F2 7C56 9453
4EB2 4FB5 94A6 887E 9A8E 5A87 5D5A 6B3D 7D85 8A9B
5D94 89AA 9849 99F8 9BBC 5BF4
3626 5E88 3A81 82A9 82B9 57C1 73E1 79E6 8039 8699
6366 7434 7439 83E6 83F3 9219 96C2 52E4 55EA 5AC0
6EB1 79BD 9772 616C 5659 65B3 9CF9 61C4 3A52 64D2
6FBF 763D 8793 61C3 6A8E 9B35 8804 9D6D
5745 6611 7B09 68AB 8D7E 5BD1 9513 5BDD 5BE2 92DF
87BC
5422 5423 3908 628B 6C81 551A 63FF 83E3 29088 6407
64B3 421C 7019 85FD
545B 6215 6217 65A8 67AA 73B1 7F8C 7F97 7310 8DC4
690C 8154 55C6 6EAC 9516 5D88 6227 69CD 7244 7472
7FAB 8723 9535 7BEC 9306 8B12 8E4C 956A 8E61 9397
93D8
4E2C 5F37 5F3A 5899 5AF1 6F12 6A2F 8503 8537 58BB
5B19 5EE7 6AA3 7246 8594 8262 8620
62A2 7F9F 6436 7FA5 588F 7E48 8941 7E66 93F9
709D 5534 7197 7FBB
55F4 7347
72C5 9751 9752 6C22 8F7B 503E 537F 570A 57E5 5BC8
6C2B 6DF8 6E05 90EC 50BE 873B 8F15 4A1D 9CAD 944B
591D 7520 5260 52CD 60C5 6B91 6674 68FE 6C30 6692
845D 6A08 64CF 64CE 3BF3 6AA0 9EE5
9877 82D8 8BF7 5EBC 9803 5ECE 6F00 3DEB 8ACB 6ABE
5E86 51CA 6385 6BB8 7883 7B90 9758 6176 78D8 78EC
7F44 8B26
7858 6AE6
533A 66F2 4F39 4F49 5324 5C96 8BCE 9A71 5765 5C48
5CA8 5CB4 62BE 9639 3B55 6D40 80E0 795B 5340 7D36
86C6 88AA 8EAF 7B41 7CAC 86D0 8A58 8D8B 5D87 6188
420C 99C6 657A 8AB3 957C 99C8 9EB9 9AF7 9B7C 8DA8
9EAF 89B0 8EC0 9EB4 9EE2 89BB 9A45 9C38 9C4B
4F62 52AC 65AA 6710 80CA 9E32 6DED 7D47 7FD1 6E20
83C3 8EE5 844B 24A0E 7496 8556 9D1D 74A9 78F2 87B6
77BF 87DD 9F29 3739 5FC2 7048 8627 6235 6B0B 6C0D
81DE 766F 7C67 8837 8862 8EA3 883C 947A 9E1C
53D6 7AD8 5A36 8A53 7AEC 877A 9F8B 9F72
53BA 53BB 521E 547F 3C26 551F 801D 9612 89D1 8DA3
95B4 9EAE 95C3 9F01 89B7
8FF2 8850
7F3A 9619 849B
7638
5374 537B 57C6 5D05 5BC9 60AB 96C0 7437 785E 786E
9615 5859 6409 76B5 788F 6128 69B7 58A7 6164 78BA
78BB 8D9E 71E9 95CB 7910 95D5 704D 792D
9E4A 9D72
5CD1 5F2E 606E 609B 5708 570F 68EC 99E9 9409
34B0 5168 6743 4F7A 8BE0 59FE 6CC9 6D24 62F3 7277
8343 8F81 5573 57E2 5A58 60D3 75CA 7842 94E8 6E76
7288 7B4C 7D5F 643C 7454 8472 89E0 8A6E 8DE7 8F07
8737 9293 6A29 8E21 7E13 919B 9CC8 9B08 9A21 9C01
5B49 5DCF 9F64 6B0A 98A7 8838 9874
21FE8 72AC 6C71 754E 70C7 7EFB 7DA3 8647
529D 5238 7276 52E7 97CF 52F8
72AD 6926 697E 95CE
590B 56F7 5CEE 9021
5BAD 5E2C 3A8A 7FA3 7FA4 88D9 88E0
828E 5314
536D 5B86 909B 7A77 7A79 8315 684F 4143 7B3B 8D79
60F8 712A 712D 743C 7B47 823C 86E9 86EC 21983 7162
7758 8DEB 928E 778F 7AAE 511D 618C 6A69 749A 74CA
7AC6 85D1 85ED 74D7
718D
FDD0-3112
5915 516E 5FDA 6C50 8980 5438 5E0C 6271 6278 5365
6614 6790 7A78 80B8 80B9 4FD9 5F86 6038 6053 997B
550F 595A 36D3 5C56 6095 6C25 6D60 727A 72F6 90D7
553D 6089 60DC 637F 665E 6878 6B37 6DC5 70EF 7101
7108 740B 7852 8383 8D65 91F8 5092 60C1 6670 6673
3C64 711F 712C 7280 774E 7A00 7C9E 7FD5 823E 83E5
5380 5D60 5FAF 6EAA 7699 910E 9521 50D6 69BD 7155
7184 7188 7199 7DC6 84A0 8725 8C68 990F 563B 564F
5B06 5B09 6F5D 3FB7 761C 78CE 819D 51DE 20615 5DB2
6199 3B1B 6A28 6A40 71B9 71BA 71BB 7AB8 7E18 7FB2
8785 8787 932B 3C46 71E8 406F 77A6 87CB 8C3F 8C40
8C6F 8C95 7CE6 7E65 96DF 9D57 8B46 91AF 93ED 5DC7
66E6 7214 72A7 89F9 96B5 9145 89FD 9F37 8835 9E02
89FF 9474
4E60 90CB 5E2D 7FD2 88AD 89CB 5AB3 693A 3804 5D8D
6F1D 84B5 84C6 89A1 8D98 69E2 3A57 6A84 8582 96B0
8B35 93B4 972B 9CDB 98C1 9A31 9A3D 8972 9C3C 9A68
67B2 6D17 73BA 5F99 94E3 559C 9222 8448 8478 9268
9269 5C63 6F07 6198 84F0 66BF 6B56 8AF0 58D0 79A7
7E30 8B11 87E2 8E5D 74BD 56CD 9C5A 77D6 8EA7
5338 534C 620F 5C43 7CFB 9969 546C 5FE5 602C 77FD
7EC6 4FC2 54A5 6044 76FB 3938 3B61 6B2F 7EE4 90E4
7D30 91F3 960B 55BA 691E 7FD6 8203 8204 8D87 6140
6ECA 7D8C 8D69 588D 7182 7294 798A 7A27 9699 969F
6F5F 89A4 6231 6F99 422A 856E 9ED6 6232 78F6 4B8E
8669 993C 9B29 7E6B 56B1 95DF 3E0D 973C 5C6D 884B
897F 606F 6E13 6A72 72A0 7902 9BD1
8672 75A8 867E 3520 8C3A 5084 9595 7146 7175 98AC
271CD 778E 8766 9C15
5323 4FA0 72CE 4FE0 5CE1 67D9 70A0 72ED 5CFD 70DA
72F9 73E8 965C 7856 796B 7FC8 823A 35C7 7864 967F
656E 6687 7455 7B6A 821D 9050 78AC 8F96 78CD 7E00
7E16 8D6E 9B7B 8578 8F44 935C 971E 938B 9EE0 9A22
9DB7
959C
4E05 4E0B 4E64 5413 759C 590F 3648 7771 5687 61D7
7F45 5913 93BC 93EC
5737 68BA 6E8A
4E9B 3C54 63F3 7332 6954 6B47 874E 880D
52A6 534F 65EA 90AA 5354 80C1 57A5 604A 62F9 631F
594A 5CEB 633E 8105 8107 887A 5055 659C 3B68 8C10
35BF 7FD3 55CB 6136 643A 744E 7D8A 26CC3 3666 7181
818E 52F0 64B7 7DF3 7F2C 8762 978B 9821 64D5 8AE7
71F2 3A66 64F7 97B5 651C 7E88 896D 8B97 9FA4
5199 51A9 5BEB 85DB
4F33 707A 5378 6CC4 6CFB 7EC1 7F37 6D29 70A7 7944
5A0E 5C51 5C53 22B3F 505E 5070 5368 5FA2 68B0 70F2
710E 7D32 4EB5 5A9F 5C5F 6E2B 245C8 79BC 7D4F 7D6C
8C22 50C1 586E 698D 69AD 3D3D 5C67 66AC 7DE4 8909
5667 5DB0 5EE8 61C8 6FA5 736C 7CCF 27735 97F0 71EE
85A2 85A4 893B 8B1D 9082 99F4 7009 97A2 7023 7215
424F 7E72 87F9 880F 9F58 9F5B 9F65 9F42 8E9E
810B 5911
7071 7072 547A 67AD 4FBE 54D3 67B5 9A81 54EE 5BAF
5BB5 5EA8 6D88 7EE1 8653 9E2E 5A4B 689F 7107 7307
900D 75DA 75DF 785D 7863 7A99 8427 9500 63F1 7D83
7FDB 8437 560B 5610 6B4A 6F47 7BAB 8E03 5635 5F47
61A2 3A4B 7362 92B7 9704 81AE 856D 9D1E 7A58 7C18
87C2 87CF 9B48 9D35 56A3 7C2B 85C3 87F0 701F 6AF9
24473 9AC7 56BB 56C2 8828 9A4D 9AD0 6BCA 8648
6D28 3B35 7B05 5D24 6DC6 8A24 90E9 6BBD 7B4A 8AB5
2E8C 2E8D 5C0F 6653 6681 7B71 7B7F 769B 66C9 7BE0
76A2 8B0F
5B5D 8096 52B9 54B2 4FF2 6548 6821 6D8D 7B11 5578
509A 6569 35DB 8A68 5628 8A9F 562F 6B57 71BD 97A9
6585 6586 4567
6077 6EE7
4F11 4FE2 54BB 5EA5 3CDC 4FEE 70CB 70CC 7F9E 8119
8129 9E3A 81F9 8C85 9990 929D 9AE4 6A07 9AF9 9380
9D42 93C5 9948 9C43 98CD
82EC
673D 7D87 6EEB 7CD4
79C0 5CAB 5CC0 73DB 7EE3 7407 8896 9508 55C5 6EB4
7493 890E 890F 92B9 8791 7E4D 7E61 93E5 93FD 9F45
9BB4
353E 4EDA 5C73 5148 597E 7EA4 4F61 5FFA 6C19 6774
79C8 67AE 7946 7C7C 82EE 73D7 6380 83B6 8A2E 94E6
23519 50CA 8DF9 9170 9528 5615 929B 9C9C 97EF 5B10
61B8 66B9 9341 859F 893C 97F1 9BAE 8E6E 99A6 4D4C
5EEF 6515 7E8E 9DB1 8E9A 7E96 8973 9C7B
4F2D 95F2 59B6 5F26 8D24 54B8 6326 80D8 5A34 550C
5563 5A39 5A71 6D8E 7D43 8237 86BF 8854 3B79 75EB
86DD 9591 9592 9E47 5ACC 8858 929C 5AFA 5AFB 61AA
648F 6F96 7509 7A34 8AB8 8CE2 3BD7 3D6A 71C5 8AF4
8F31 918E 7647 764E 77AF 85D6 3C0A 7925 4554 9E79
9E99 8D12 9DF3 9DF4 9DFC
51BC 72DD 39E5 663E 5D04 3B60 6BE8 70CD 7303 86AC
9669 8D7B 967A 7B45 5C1F 5C20 641F 8DE3 3B0E 7992
9291 7BB2 5DAE 736B 96AA 736E 934C 71F9 85D3 9855
5E70 6507 6AF6 8B63 861A 4606 496A 7381 97C5 986F
7066
4F23 53BF 5C98 2070E 73B0 7EBF 81FD 82CB 549E 59ED
5BAA 770C 9650 54EF 57B7 5A0A 5A28 5CF4 3A87 6D80
9665 665B 73FE 784D 83A7 9677 9985 774D 7D64 7F10
7FA1 732E 7CAF 7FA8 817A 8706 49DF 50E9 50F4 21416
7DAB 8AA2 648A 7DDA 92E7 61B2 3B17 6A4C 7E23 930E
9921 58CF 8C4F 493C 9EB2 7017 81D4 737B 7CEE 9F38
4ED9 50F2 7E4A 9466
5FC3 59A1 5FFB 8F9B 90A4 6615 677A 6B23 7098 82AF
76FA 4FFD 3B62 60DE 8A22 920A 950C 65B0 6B46 5EDE
92C5 5B1C 85AA 99A8 946B 99AB
6794 3726 8951 9414
4F08
3430 4F29 56DF 9620 5B5E 3B44 248F2 4FE1 8ED0 812A
8845 8A2B 712E 7161 99B8 820B 9856 91C1
5FC4 567A
4E61 8297 76F8 9999 53A2 554C 90F7 5EC2 6E58 7F03
9109 910A 7A25 8459 9115 7BB1 7DD7 81B7 858C 8944
5FC0 9AA7 9E98 6B00 74D6 9576 9472 9A64
4F6D 74E8 8BE6 5EA0 6819 7965 7D74 7FD4 8A73 8DED
4EAB 4EAF 54CD 9977 6651 98E8 60F3 9284 9909 9C9E
66CF 9B9D 8801 9BD7 97FF 9957 995F 9C76
5411 59E0 5DF7 8683 9879 73E6 5842 7F3F 8856 8C61
9805 842B 50CF 52E8 9297 5D91 6A61 95C0 56AE 87D3
8950 940C 9C4C
697F 9C5C
661F 57B6 9A8D 60FA 7329 714B 7446 8165 86F5 89EA
7BB5 7BC2 9B8F 66D0 89F2 935F 9A02 76A8 9BF9
5211 884C 5F62 90A2 4F80 9649 578B 6D10 90C9 9498
5A19 8365 9658 784E 94CF 9203 6ECE 9276 9292 92DE
3A18 7772 9192 64E4
5174 674F 59D3 5E78 6027 5016 8347 5A5E 60BB 6DAC
8395 7DC8 8208 5B39 81D6
54D8 88C4 8B03
5401 620C 65F4 759E 76F1 6B28 80E5 987B 6647 8A0F
987C 8657 865A 8C1E 5AAD 5E41 63DF 6E51 247E0 865B
88C7 9808 6948 7AA2 980A 5618 9700 5653 589F 5B03
7E03 8751 9B46 6B54 8566 8ADD 8B43 7E7B 9450 9A49
9B1A 9B56
4FC6 5F90 84A3
8BB8 5474 59C1 8BE9 5194 6829 73DD 5066 8A31 668A
8A61 7A30 7CC8 9126 9191 76E8
65ED 4F35 5E8F 6C7F 4F90 5379 6034 6C80 82A7 53D9
6064 662B 6D2B 460F 57BF 6B30 6B88 70C5 73EC 52D6
654D 6558 52D7 70FC 7EEA 7EED 9157 55A3 58FB 5A7F
6702 6E86 7D6E 8A39 6149 7166 8CC9 69D2 6F35 6F4A
76E2 7781 7DD2 805F 84C4 928A 735D 7A38 7DD6 9B63
77B2 85C7 85DA 7E8C 9C6E
8053 7D9A 84FF
524A 75B6 3EE1 8486 9774 35FE 8FA5 8FAA 859B 97BE
7A74 6588 4E74 5B66 5CA4 5CC3 6CF6 8313 9E34 8895
8E05 58C6 5B78 5DA8 6FA9 71E2 3D85 89F7 96E4 9DFD
96EA 9CD5 9C48
8840 3570 5437 5779 72D8 6856 8C11 8D90 8B14 7025
81A4 6A30 825D 8F4C
5405 8F69 660D 5BA3 5F32 8ED2 688B 8C16 55A7 5847
5A97 6103 610B 63CE 6684 714A 7444 8431 8432 777B
84D2 5107 7BAE 7E07 7FE7 8756 92D7 61C1 79A4 8AE0
8AFC 857F 9379 99FD 7FFE 8809 77CE 85FC 8610 8B5E
7384 73B9 3623 75C3 60AC 65CB 7401 8701 5AD9 6F29
66B6 7487 4062 6A88 74BF 61F8
54BA 6645 70DC 9009 3535 9078 9848 7663 766C
6030 6CEB 39E6 6621 70AB 7EDA 7729 94C9 7404 7734
8852 88A8 6E32 7D62 6965 6966 9249 78B9 8519 955F
9799 98B4 7E3C 7E4F 93C7 8B82 8D19
9C1A
5743 52CB 57D9 7104 52DB 5864 718F 7AA8 52F2 8512
52F3 99E8 58CE 736F 85AB 66DB 71FB 81D0 85B0 77C4
7E81 860D 58E6 91BA
5BFB 5EF5 65EC 9A6F 674A 5DE1 7543 8BE2 5CCB 6042
6D35 6D54 7D03 6812 686A 6BE5 73E3 8340 8368 5071
3704 5C0B 5FAA 63D7 295B0 8A62 99B4 69C6 6F43 9C9F
565A 3D4C 6F6F 9129 6533 6A33 71D6 7495 87F3 9C4F
9C58 7065
5342 8BAF 4F28 6C5B 8FC5 4F9A 5DFA 5F87 72E5 6B89
8A0A 8A19 8FFF 900A 595E 5DFD 6BBE 7A04 613B 8CD0
905C 5640 6F60 8548 9D55 720B 9868 9442
8BAD 8A13 5691
51F6 5144 342B 5147 5308 8BBB 5FF7 6C79 54C5 605F
6D36 80F7 80F8 8A29 8A7E 8CEF
96C4 718A
713D
8BC7 7138 8A57 5910 657B 22FCC
FDD0-3113
4E4B 652F 536E 6C41 5431 5DF5 6C65 5767 679D 6CDC
77E5 7EC7 80A2 829D 6800 79D3 79D6 80D1 80DD 5001
75B7 7957 79EA 8102 887C 96BB 6894 796C 6925 81F8
6220 6418 7A19 7D95 69B0 7994 8718 99B6 3BC4 9CF7
9D32 9D44 7E54 9F05 8635
6267 4F84 59B7 76F4 59EA 5024 503C 8040 91DE 57F4
57F7 21E1C 6DD4 804C 8CAD 690D 6B96 7286 7D77 8901
8DD6 55ED 74E1 7983 9244 588C 646D 99BD 5B02 6179
6F10 8E2F 6A34 81B1 5128 7E36 8077 87D9 8E60 8EC4
8E91
5902 6B62 53EA 52A7 65E8 5740 5741 5E0B 627A 6C66
6C9A 7EB8 962F 603E 62A7 23CB5 82B7 54AB 6049 6307
67B3 6D14 780B 7949 8F75 75BB 41DB 7D19 8879 6DFD
8A28 8DBE 8EF9 4920 9EF9 916F 85E2 8967
81F3 9624 5FD7 5FEE 627B 8296 8C78 28468 5236 5394
5781 5E19 5E1C 6CBB 7099 8D28 5CD9 5EA2 5EA4 6303
67E3 6809 6D37 81F4 8FE3 90C5 5A21 5F8F 2267A 631A
664A 684E 72FE 7951 79E9 8D3D 8F7E 965F 4E7F 506B
202B7 5F9D 3A01 63B7 68BD 6956 7318 7564 75D4 79F2
79F7 7A92 7D29 7FD0 889F 88A0 89D7 94DA 9E37 5082
21376 5D3B 5F58 667A 6EDE 75E3 86ED 8EFD 9A98 5BD8
5ECC 6431 6ECD 7A1A 7B6B 7F6E 8DF1 8F0A 9527 96C9
5886 21839 6EEF 6F4C 7590 43BA 88FD 899F 8A8C 928D
5E5F 6184 646F 71AB 7A3A 7DFB 442D 81A3 89EF 8CEA
8E2C 92D5 64F3 65D8 7004 99E4 9D19 5295 61E5 6ADB
7A49 4245 87B2 3609 3731 61EB 64F2 8D04 6ACD 74C6
89F6 9BEF 7929 8C51 9A2D 9A3A 9A47 8E93 9DD9 9455
8C52
51EA 4FE7 5F94 8B22
624E 5412 62AF 5953 6313 67E4 67FB 54F3 5067 55B3
63F8 6E23 6942 5284 6463 76B6 6A1D 89F0 76BB 8B47
9F44 9F47
672D 7534 95F8 86BB 94E1 7160 7250 9598 7B9A 802B
9358 8B57
538F 62C3 82F2 7728 781F 6429 9C8A 9C9D 8E37 9B93
9BBA 4562
4E4D 7079 8BC8 54A4 67DE 6805 70B8 5BB1 75C4 86B1
8A50 643E 6EA0 69A8 27A0A 9705 91A1
8707 55FB 5AEC 906E
5387 6298 6B7D 77FA 7813 7C77 8674 54F2 57D1 3B59
7C8D 5560 608A 6662 6663 3B6F 88A9 8F84 5586 86F0
8A5F 41FD 8C2A 99B2 647A 8F12 78D4 8F19 92B8 8F99
87C4 569E 8B2B 8B3A 9BBF 8F4D 8B81 8B8B
8005 4E7D 556B 9517 7987 8D6D 8936 8975
8FD9 67D8 6D59 6DDB 9019 6A1C 6F6A 9E67 87C5 4826
9DD3
7740 8457 8517
635A 658B 658E 6458 69B8 451D 9F4B 29C73
5B85 6AA1
7A84 9259
503A 7826 50B5 5BE8 7635
5908 7C82
4F4B 948A 59B1 5DF6 62DB 662D 76C4 91D7 5541 924A
99CB 7ABC 9363 76BD
722A 627E 6CBC 7475 4203
53EC 5146 8BCF 679B 5797 70A4 72E3 8D75 7B0A 8081
65D0 68F9 436E 8A54 7167 7F69 4207 8087 8088 8D99
66CC 71F3 9BA1 6AC2 77BE 7F84
2EA5 722B 7F40
5DDE 821F 8BCC 4F9C 5468 6D32 8BEA 70D0 73D8 8F80
5F9F 3A04 63AB 6DCD 77EA 90EE 9E3C 558C 7CA5 8D52
9031 8F08 44DF 9282 8CD9 8F16 970C 76E9 8B05 9D43
9A06 8B78
59AF 8F74 8EF8
8098 759B 666D 83F7 776D 7B92 9BDE
7EA3 4F37 546A 5492 5B99 7EC9 5191 54AE 663C 7D02
80C4 76B1 836E 914E 665D 7C99 3473 8A4B 8464 8A76
7503 50FD 76BA 99CE 5663 243F2 7E10 9AA4 7C40 7C55
7C52 9A5F
5E1A 70BF 99F2
6CBE 6BE1 65C3 6834 7C98 86C5 98E6 60C9 8A40 8D88
8A79 959A 8C35 5661 5DA6 9711 6C08 6C0A 859D 9085
77BB 9E6F 65DC 8B6B 9958 9CE3 9A59 9B59 9C63 9E07
8B9D
65A9 98D0 5C55 76CF 5D2D 65AC 382D 692B 7416 370A
640C 76DE 5D83 5D84 6990 98AD 5AF8 9186 6A4F 406A
8F3E 28AC0 27B06 2217A 9EF5
5360 4F54 6218 6808 685F 7AD9 5061 7EFD 68E7 6E5B
83DA 6226 7DBB 5D98 8F1A 6230 8665 8666 89B1 8F4F
8B67 29947 9A4F 8638
8D1E 3630 9488 4FA6 6D48 73CD 73CE 80D7 8C9E 3598
5E2A 6815 6862 771E 771F 7827 91DD 5075 686D 796F
9159 5BCA 5AC3 21EC8 6438 659F 6968 7349 8474 9049
9241 9755 699B 6B9D 7467 7504 78AA 798E 8496 84C1
6F67 799B 7BB4 6A3C 6FB5 81FB 9331 8F43 937C 85BD
7C48 9C75
3431 8BCA 62AE 6795 5F2B 6623 8F78 5C52 755B 75B9
7715 7D3E 8044 8897 8A3A 8EEB 7D7C 7F1C 88D6 4AB4
7A39 99D7 7E25 9B12 9EF0
5733 7EBC 9635 753D 4FB2 630B 42B6 9E29 632F 6715
681A 7D16 9663 7739 8D48 9156 63D5 5866 7471 8AAB
8CD1 47F4 6576 9547 9707 9D06 93AD 93AE
8419 92F4
5F20 5F35 7AE0 50BD 5887 5ADC 5F70 22554 615E 6F33
7350 7CBB 9123 66B2 6A1F 24364 748B 8501 9067 9926
87D1 9A3F 9C46 9E9E
4EC9 957F 9577 6DA8 638C 6F32 7903
4E08 4ED7 6259 5E10 6756 80C0 8D26 5E33 6DB1 8139
75EE 5D82 5E5B 969C 8CEC 762C 7634 7795
7C80 5E65 93F1 9423
4E89 4F42 59C3 5F81 6014 722D 8BE4 20C9C 5CE5 6323
70A1 72F0 70DD 7710 94B2 57E9 5D1D 5D22 6399 7319
7741 8047 28713 94EE 5A9C 63C1 7B5D 3B39 5FB0 775C
9266 5FB4 84B8 7B8F 5FB5 8E2D 7BDC 931A 9B07 9BD6
7665
6C36 628D 7CFD 62EF 639F 6678 6138 649C 6574
6B63 8BC1 5E27 653F 90D1 75C7 5E40 8A3C 5863 40BB
27D84 4223 8ACD 912D 9D0A 8B49 496D
51E7
6731 52AF 4F8F 8BDB 6D19 90BE 682A 73E0 8331 8BF8
732A 7843 79FC 94E2 7D51 86DB 88BE 8A85 8DE6 69E0
876B 9296 6A65 6F74 8AF8 8C6C 99EF 9BA2 9D38 7026
6AEB 6AE7 9BFA 9F04 8829
7AF9 6CCF 7AFA 70A2 7B01 70DB 7A8B 833F 7B1C 8233
9010 7603 7BC9 71ED 880B 8E85 9C41 5B4E 705F 66EF
6B18 7225 883E
4E36 4E3B 20C0D 5B94 62C4 7F5C 6E1A 967C 716E 8A5D
7151 5631 6FD0 9E88 77A9 529A 56D1 65B8 77DA
4F2B 4F47 4F4F 52A9 7EBB 577E 677C 6CE8 82CE 8D2E
8FEC 9A7B 58F4 67F1 6BB6 70B7 75B0 771D 782B 795D
7ADA 7969 7D35 7D38 7F9C 8387 86C0 5D40 7B51 8A3B
8CAF 8DD3 8EF4 94F8 7B6F 9252 99B5 7BB8 7FE5 6A26
92F3 99D0 7BEB 9714 9E86 9444
58B8
6293 6A9B 81BC 9AFD 7C3B
5353 62D9 70AA 502C 6349 684C 68C1 6DBF 68F3 7A5B
25F1A 4B93 7A71 883F
5734 5F74 6C4B 72B3 707C 53D5 59B0 65AB 6D4A 8301
4E35 6D5E 8BFC 914C 5544 5545 5A3A 39FB 3B6C 68B2
70F5 65B1 666B 6913 7438 4401 251CD 787A 7AA1 7F6C
65B2 69D5 64AF 64C6 799A 4175 8AC1 8AD1 92DC 6FC1
7BE7 289E7 64E2 6580 65B5 6FEF 243F8 6AE1 8B36 956F
9D6B 7042 8817 942F 9432 7C57 9DDF 7C71
5285
7AA7
62FD
8DE9
96B9 8FFD 9A93 9525 9310 9A05 9D7B
6C9D
5760 6858 7B0D 5A37 60F4 7F12 7577 7500 787E 8187
8D58 589C 8AC8 918A 7E0B 9323 991F 7908 8D05 8B75
8F5B 9446
7F00 7DB4
4E13 53C0 5C02 7816 5C08 587C 5AE5 911F 747C 78D7
819E 989B 750E 78DA 8AEF 87E4 9853 9C44
8F6C 5B68 8EE2 7AF1 4871 8F49
7077 556D 581F 7451 815E 8483 50CE 8D5A 64B0 7BC6
9994 7BF9 8CFA 8948 8B54 994C 56C0 7C51
5B92 80AB 8FCD 7A80 8C06 8AC4 8860
51C6 57FB 6E96 7DA7
8A30 7A15
51D6
5986 5E84 599D 5A24 6869 8358 6889 838A 6E77 7CA7
88C5 88DD 6A01 7CDA
58EE 58EF 72B6 72C0 58F5 710B 6F34 649E 6207
5E92
4E2D 4F00 6C77 5223 5990 5F78 5FE0 6CC8 7082 7EC8
26B15 67CA 76C5 949F 41D7 822F 8873 8877 7D42 9221
5E52 953A 8520 92BF 87A4 87BD 937E 9F28 8E71 9418
2915E 7C66
80BF 79CD 51A2 55A0 5C30 585A 585C 6B71 7144 816B
7607 7A2E 8E35 7A5C
4EF2 4F17 5995 72C6 794C 91CD 833D 869B 8876 5045
773E 5839 5A91 7B57 8846 8AE5
8FDA
FDD0-3114
5403 4F99 54E7 5F68 80F5 86A9 9E31 7735 7B1E 55AB
74FB 8A35 55E4 5AB8 75F4 7D7A 645B 5644 8ABA 779D
9D1F 87AD 7661 9F5D 9B51 5F72 9ED0
5F1B 6C60 9A70 577B 5CBB 8FDF 6301 7AFE 830C 6B6D
834E 86B3 8D7F 7B42 8CBE 8D8D 9045 99B3 7B8E 905F
5880 6F26 8E1F 7BEA 9072 8B18 28A32
5C3A 53FA 544E 4F88 5376 9F7F 5791 80E3 6065 3DB4
7C8E 42BC 803B 8687 6B3C 6B6F 88B2 88B3 88ED 9279
9F52 892B
5F73 53F1 65A5 6758 707B 8D64 996C 62B6 52C5 605C
70BD 52D1 7FC4 7FC5 6555 70FE 75D3 557B 3961 6E41
7873 98ED 50BA 75F8 815F 8DEE 9253 96F4 7608 7FE4
9290 6157 618F 761B 7FE8 906B 71BE 61D8 8DA9 4820
994E 9D92 9DD8
599B 9EB6
53C9 6260 6748 2472F 809E 81FF 633F 505B 63D2 63F7
9987 55CF 929F 9538 7580 8256 9364 9937
79C5 579E 67E5 832C 8336 5D56 7339 976B 643D 8A67
5BDF 69CE 78B4 25ED7 6AAB 297D4
8869 8E45 9572 9454
597C 6C4A 5C94 4F98 8BE7 59F9 7D01 5DEE 47D5 8A6B
8F66 4F21 8ECA 4FE5 7817 5513 8397 7868 86FC
626F 5056 47A3 64A6
5C6E 5F7B 577C 8FE0 3934 70E2 3FED 352D 8045 63A3
7869 9819 5FB9 64A4 6F88 3B1A 52F6 77AE 4720 7221
8286 62C6 9497 91F5
4FAA 67F4 8C7A 7961 558D 5115 9F5C
831D
867F 8883 8A0D 7625 8806 56C6
6284 2207E 5F28 600A 6B29 949E 8A2C 712F 24674 8D85
9214 52E6 4AFF
724A 6641 5DE2 5DE3 671D 9F0C 6F05 911B 5632 6A14
6F6E 7AB2 7F7A 8F48 9F02 8B3F
5435 7092 7727 7123 717C 9EA8 5DD0
4EE6 4EEF 8016 89D8
62BD 5A64 640A 7633 7BD8 72A8 72AB
4EC7 601E 4FE6 5E31 6826 60C6 7D2C 7EF8 6906 7574
7D52 83D7 6101 7697 7A20 7B79 9167 7DA2 88EF 8E0C
5114 96D4 568B 5B26 5E6C 61E4 71FD 85B5 96E0 7587
7C4C 8E8A 91BB 8B8E 8B90
4E11 4E12 541C 677B 677D 4FB4 5062 7785 919C 77C1
9B57
81ED 81F0 6BA0 905A
916C
8FBF 89C7 6400 68B4 8998 9246 88E7 92D3 5E68 895C
6519
5A75 8C17 68CE 6E79 998B 7158 7985 7F20 50DD 7351
8749 8A97 5103 5B0B 5EDB 6F79 6F7A 7DFE 6FB6 78DB
92CB 6BDA 79AA 9561 700D 87EC 913D 5133 5296 87FE
56B5 5DC9 703A 9141 6B03 7E8F 7E92 8E94 9575 826C
8B92 9471 995E
4EA7 522C 65F5 4E33 65BA 6D50 5257 8C04 5574 7522
7523 94F2 9610 5277 8487 5D7C 644C 6EFB 563D 5E5D
8AC2 95B3 9AA3 71C0 8546 7C05 5181 7E5F 8B42 8FB4
93DF 95E1 56C5 705B 8B87
5FCF 785F 3B04 6472 61F4 98A4 61FA 7FBC 97C2 986B
58E5
62BB 6375 90F4 741B 55D4 7D9D 778B 8AC3 8CDD 7E1D
8B13
5C18 81E3 5FF1 6C88 6C89 8FB0 9648 8FE7 5BB8 831E
6550 8380 8390 8A26 8C0C 8ED9 9673 6116 63E8 9202
7141 5875 760E 6A04 852F 9703 8AF6 87B4 85BC 9E8E
66DF 9DD0
8DBB 7876 789C 588B 5926 78E3 8E38 9356 8D02 91A6
75A2 886C 9F80 8D81 8D82 6987 9F53 512C 9F54 512D
56AB 8C36 6AEC 896F 8B96
70E5 6668
4F25 660C 5000 5A3C 6DD0 7316 960A 667F 7429 83D6
9520 88EE 9329 95B6 9CB3 4B96 9BE7 2A087 9F1A
4EE7 514F 80A0 82CC 9578 5C1D 507F 5E38 5F9C 74FA
8407 751E 8178 5617 5872 5AE6 747A 8193 92FF 511F
5690 9CBF 93DB 9C68
5382 573A 6636 60DD 5834 50D8 53B0 5EE0 6C05 92F9
6005 739A 7545 5021 9B2F 5531 60B5 713B 7452 66A2
757C 8AAF 97D4
655E 6919 87D0
6CDF 9637 67FD 722F 6D7E 79F0 5041 86CF 36F5 68E6
6E5E 725A 7424 8D6A 50DC 6186 645A 7A31 9757 6490
6491 7DFD 6A55 77A0 8D6C 9833 6A89 7AC0 7A6A 87F6
93F3 93FF 9953
4E1E 6210 673E 5448 627F 67A8 8BDA 4E57 57CE 5A0D
5CF8 6D06 90D5 4E58 57D5 5BAC 6330 665F 73F9 8100
6381 73F5 7A9A 812D 837F 94D6 5818 60E9 68D6 6909
7A0B 7B6C 7D7E 584D 5856 6E97 7880 41F8 88CE 8AA0
757B 9172 92EE 6195 6F82 6F84 6A59 6A99 7013 61F2
2815D 9A2C
4FB1 5F8E 609C 9A8B 5EB1 901E 7748 9A01
79E4
9BCE
51FA 5C80 521D 6474 6A17 8C99 9F63
520D 82BB 9664 53A8 8C60 9504 5AB0 6EC1 8021 870D
8D8E 924F 96CF 3551 7293 84A2 84AD 3861 5EDA 854F
92E4 6A71 7BE8 5E6E 6AC9 96DB 6AE5 85F8 8E70 8E87
9DB5 8E95
51E6 6775 7840 50A8 6918 696E 891A 6FCB 5132 6A9A
790E 9F6D 9E00 9F7C
4E8D 5904 7ACC 6035 62C0 7ECC 8C56 67F7 6B2A 7AD0
4FF6 654A 755C 3647 57F1 73FF 7D40 8655 5097 7421
6410 6EC0 89E6 9110 8E00 95A6 510A 563C 84EB 8AD4
61B7 65B6 6B5C 81C5 9EDC 89F8 77D7
695A 698B 6A7B 74B4 87F5
6B3B 6B58
9034 8E14 6233
2ECC 2ECD 8FB6 8FB5 3C8B 5A15 5A16 60D9 6DB0 7EF0
5A7C 814F 8F8D 44CE 916B 7DBD 8DA0 8F1F 9F8A 64C9
78ED 7E5B 6B60 56BD 9F6A 9461
63E3 640B
8197
555C 562C 81AA 8E39
5439 708A
5782 5015 57C0 6376 68F0 690E 8144 9672 6425 83D9
9524 69CC 7BA0 9318 9840 939A
9FA1
5DDB 5DDD 6C1A 7A7F 5276 732D 744F
4F1D 4F20 8221 8229 8239 570C 50B3 693D 9044 66B7
7BC5 8F32
821B 8348 5598 6B42 50E2 8E33
6C4C 4E32 7394 948F 91E7 8CD7 9DA8
65FE 6776 6625 583E 5A8B 8405 6699 693F 7443 7BBA
877D 6A41 8F34 81A5 6AC4 9C06 9D9E 2A0B9
7EAF 5507 6D71 7D14 9659 6DF3 8123 83BC 6E7B 7289
6EE3 6F18 8493 84F4 9187 9195 931E 9BD9
5046 60F7 8436 7776 8CF0 8822
9E51 9D89
5205 75AE 7A93 7A97 724E 6450 7255 7621 7ABB
5E8A 7240 5647 5E62
95EF 50B8 6464 78E2 95D6
521B 6006 5231 524F 5259 51D4 5275 6134
5145 51B2 5FE1 6C96 833A 6D7A 73EB 7FC0 8202 5603
644F 5FB8 6183 61A7 885D 41B9 7F7F 825F 8E56
866B 5D07 5D08 9680 7DDF 8769 8908 87F2 721E
5BA0 57EB 205A5 5BF5
94F3 63F0 9283
FDD0-3115
5C38 5931 5E08 545E 8671 8BD7 9E24 5C4D 65BD 6D49
72EE 90BF 5E2B 7D41 91F6 6E64 6E7F 921F 6EAE 6EBC
7345 8479 8A69 9247 9248 7461 8492 84CD 9CF2 8768
9CFE 27A79 9CBA 6FD5 26488 8937 9366 2A014 9BF4 9C24
9DB3 8979
5341 9963 77F3 4E6D 8FBB 65F6 20C34 5B9E 5B9F 65F9
59FC 5CD5 70BB 8680 98DF 98E0 57D8 6642 794F 83B3
5BD4 6E5C 5852 6EA1 9048 9250 5BE6 69AF 8494 8755
4215 9CA5 9F2B 9F2D 9C23
53F2 77E2 4E68 8C55 4F7F 59CB 9A76 5158 5BA9 5C4E
7B36 9242 99DB
58EB 6C0F 793B 4E17 4E16 4ED5 5E02 2EAC 793A 534B
5F0F 5FD5 2EAE 4E8A 4F3C 53D3 623A 4E8B 4F8D 52BF
5469 67F9 8BD5 9970 519F 5BA4 6040 6043 62ED 662F
6630 67BE 67FF 7702 89C6 8D33 683B 70D2 770E 7721
8210 8F7C 9002 94C8 8996 8C49 901D 91C8 5A9E 5D3C
5F11 5FA5 63D3 8C25 8CB0 91CA 52E2 55DC 5F12 7757
7B6E 89E2 8A66 8EFE 9230 9243 98FE 8213 8A93 927D
596D 9069 492D 92B4 9919 566C 5B15 6FA8 8ADF 8AE1
991D 87AB 8B1A 907E 7C2D 91CB 896B
4F66 7ACD 8BC6 62FE 5319 5D75 6981 7176 7BD2 9B96
7C42 8B58 9C18
6740 6C99 7EB1 4E77 5239 524E 7802 5526 7300 7C86
7D17 686C 6BBA 6BEE 3E3A 838E 94E9 75E7 7870 715E
88DF 699D 6A27 8531 9B66 9CA8 9BCA 9BCB 93A9
50BB 510D
503D 553C 5551 5565 5E39 53A6 55A2 8410 5EC8 3C3C
6B43 7FDC 4209 7B91 7FE3 95AF 970E
7E4C
5962 731E 8D4A 756C 7572 8F0B 8CD2 8CD6 6AA8
820C 4F58 8675 86C7 86E5 27D73
820D 6368 4B37
538D 8BBE 793E 5399 5C04 6D89 6DBB 6E09 8A2D 8D66
5F3D 6151 6442 6444 6EE0 6174 6475 850E 6B59 97D8
9A07 8802 4713 61FE 651D 7044 9E9D 6B07
820E
3D13 7B5B 917E 7BE9 7C01 7C1B 91C3
7E7A
6652 3B20 95B7 66EC
5F30 634E 70E7 68A2 83A6 713C 7A0D 65D3 7B72 8244
86F8 8F0E 71D2 4230 98B5 9AFE 9BB9
52FA 828D 67D6 73BF 82D5 7AF0 97F6
5C11 28218 4520
52AD 5372 7ECD 90B5 54E8 5A0B 7D39 8891 7744 7DA4
6F72
8571
53CE 6536
624B 5B88 57A8 9996 824F
5BFF 53D7 72E9 517D 552E 6388 6DAD 7EF6 75E9 58FD
7DAC 5900 7626 46F5 7378 93C9
624C 7363
5C71 5F61 9096 5220 522A 6749 59CD 59D7 829F 9490
67F5 72E6 73CA 8222 82EB 886B 57CF 75C1 8ED5 633B
7B18 8120 8DDA 527C 6427 5607 5E53 717D 6F78 6F98
6A86 7E3F 81BB 7FB4 7FB6 9BC5 3C11
27A3E
95EA 9655 9583 965D 3A8E 6671 7154 7752 718C 89A2
8BAA 6C55 38CC 759D 5261 6247 8A15 8D78 639E 91E4
5093 5584 928F 9A9F 50D0 58A0 58A1 6F6C 25531 7F2E
912F 5B17 64C5 6A3F 6B5A 81B3 4C49 78F0 8B06 8D61
4120 7E55 87EE 4947 87FA 8B71 8D0D 9425 994D 9A38
9CDD 7057 9C53 9C54
5738 6763 958A 657E
7533 5C7E 625F 4F38 8EAB 4F81 547B 59BD 7C76 7EC5
8BDC 59FA 67DB 6C20 73C5 7A7C 7C78 5A20 5CF7 7521
7712 7837 6552 6DF1 7D33 8398 515F 68FD 8A37 8460
88D1 8A75 20EDD 7527 84E1 8518 71CA 99EA 9CB9 66D1
8593 9D62 9BF5 9C3A
4EC0 751A 795E 4C20
5F1E 90A5 5BA1 77E4 54C2 77E7 5BB7 8C02 8C09 5A76
6E16 8A20 5BE9 8AD7 9823 9B6B 66CB 9825 77AB 5B38
700B 3C02 89BE 8B85
80BE 4FBA 661A 80C2 6D81 7718 6E17 8124 7973 814E
613C 614E 6939 7606 7F67 8703 8704 6EF2 92E0 762E
5814 698A 9C30
4F24 6B87 5546 89DE 50B7 5892 616F 6EF3 6F21 6BA4
71B5 850F 87AA 89F4 8B2A 9B3A
57A7 6244 664C 8D4F 8CDE 8D18 945C
4E04 4E0A 5C19 5C1A 6066 7EF1 7DD4 979D
4EE9 88F3
5347 751F 544F 58F0 6598 9629 6607 6CE9 72CC 680D
6B85 7272 73C4 82FC 3C61 965E 7B19 9679 6E66 713A
7525 924E 8072 9F2A 9D7F
7EF3 61B4 7E69 8B5D
7701 771A 5057 6E3B
5723 80DC 6660 5270 76DB 5269 52DD 8CB9 5D4A 741E
8056 58AD 69BA 8542 8CF8
7AD4 66FB 6A73
4E66 6BB3 5C17 6292 7EBE 3450 53D4 6778 67A2 59DD
964E 500F 5010 66F8 6B8A 7D13 6393 68B3 6DD1 7102
8ED7 758E 758F 8212 83FD 9103 6445 6BF9 7D80 8F93
8DFE 8E08 6A1E 7479 852C 8F38 6A7E 9B9B 6504 5135
9D68
79EB 5A4C 5B70 8D4E 587E 719F 74B9 8D16
9F21 5C5E 6691 9ECD 668F 7F72 8700 9F20 6F7B 66D9
3EFF 85A5 85AF 7659 85F7 8961 5C6C 8969 9483
672E 672F 620D 675F 6CAD 4FB8 51C1 54B0 6037 6811
7AD6 8FF0 6055 6352 8357 5EB6 5EBB 7D49 8853 5C0C
9683 6570 7AEA 8167 8481 88CB 9265 5885 6F31 6F44
6578 6F8D 8C4E 6A39 6FD6 9330 4240 93E3 9D90 866A
702D 7CEC 8834 9C6A 9C70
5237 5530
800D
8A9C
8BF4 54FE 8AAA 8AAC
5981 70C1 6714 94C4 6B36 7855 77DF 6420 69CA 78A9
84B4 7361 7BBE 26097 9399 720D 9460
8870 6454 2812E
7529
5E05 5E25 2361A 87C0 535B
8C01 813D 8AB0
6C34
5E28 6D97 6D9A 7971 7A05 7A0E 7761 88DE 7793
6C35 6C3A 9596
95E9 62F4 9582 6813
6DAE 8168
542E
987A 821C 9806 6A53 779A 8563 77AC 9B0A
53CC 971C 96D9 5B40 9AA6 5B47 9A3B 6B06 7935 9DDE
9E74 4276 826D 9A66 9E18
723D 587D 6161 6F3A 6A09 7E14 45EE
7040
93EF
FDD0-3116
2E9C 65E5 9A72 56F8 91F0 9224 99B9
60F9
70ED 71B1
5A06 9976 6861 835B 5B08 6A48 8558 8953 9952
6270 96A2 64FE
7ED5 9076 7E5E
53B9 79B8 67D4 5A83 63C9 6E18 7163 7448 4413 8447
7CC5 875A 8E42 8F2E 9352 97A3 74C7 9A25 9C07 9D94
7C88 697A 97D6
2EBC 8089 5B8D 816C
5465 80B0 86A6 887B 8887 86BA 88A1 7136 9AE5 562B
3723 9AEF 71C3 7E4E 4533
5184 5189 59CC 67D3 73C3 82D2 5AA3 6A6A
8485
4EBA 4EBB 4EC1 58EC 5FC8 6732 5FCE 79C2 82A2 9213
9B5C 928B 433E 9D40
5FCD 6820 6823 834F 79F9 8375 68EF 7A14
5203 5204 8BA4 4EDE 4EED 8BB1 4EFB 5C7B 5C83 3834
6268 7EAB 2EB6 2634C 598A 6752 7263 7EB4 8095 8F6B
97E7 996A 59D9 794D 7D09 7D1D 887D 8A12 8ED4 6895
3E3E 8EE0 41EE 7D4D 814D 88B5 976D 9771 97CC 98EA
845A 8A8D 9901
7D9B 8EB5
7A63 5134 52F7 703C 737D 8618 74E4 79B3 7A70 4274
8E9F 9B24
58CC 56B7 58E4 6518 7219 7E95
8BA9 61F9 8B72 8B93
6254
4ECD 20BA8 3B41 8FB8 793D 3EB1 967E
82BF
633C
5982 909A 4F9E 5E24 6847 8339 94F7 6E2A 7B4E 88BD
8498 92A3 8761 5112 8560 9D11 5685 5B2C 5B7A 6FE1
9D3D 66D8 71F8 85B7 8815 8966 98A5 91B9 986C 9C6C
6C5D 8097 4E73 8FB1 910F 64E9
5165 6D33 55D5 5AB7 6EBD 7F1B 84D0 7E1F 8925
6256 6741 8FBC 9CF0 5DBF
637C
53D2 82E5 5F31 504C 6E03 712B 9100 6949 84BB 7BAC
7BDB 7207 9C19 9C2F 9DB8
5D76
5A51 6875 7524 7DCC 8564 4B10
6A64 854A 854B 7E60 8602 8603
6C6D 6798 82AE 4132 868B 9510 745E 777F 8739 92B3
92ED 53E1 289E8 3AAB 58E1
5827 648B 58D6
962E 670A 8F6F 800E 5044 8EDF 5A86 744C 789D 7DDB
44F4 8F2D 74C0 791D
77A4
95F0 6DA6 958F 95A0 6F64 6A4D 81B6
8338
620E 809C 6804 72E8 7ED2 5BB9 3B5C 6BE7 8319 8363
70FF 4846 5D58 41EF 7D68 7FA2 5AB6 5AC6 5D64 6408
6411 6EB6 38D1 6995 69AE 69B5 7194 7462 84C9 7A41
877E 9555 7E19 878D 878E 8923 99E5 9AF6 5B2B 5DB8
7203 9394 701C 5DC6 66E7 8811 2A0FE
5197 5B82 5748 22AE8 5087 8EF5 6C04
9D27
7A43
FDD0-3117
4E72 5B5C 5179 54A8 59D5 59FF 830A 6825 7386 7D0E
8332 8D40 8D44 6DC4 79F6 7F01 8C18 55DE 5B73 5D6B
6914 6E7D 6ECB 7CA2 8F8E 5B76 8458 89DC 8A3E 8CB2
8CC7 8D91 9111 9531 798C 7A35 7DC7 922D 9543 9F87
8F1C 6FAC 8AEE 8DA6 8F3A 9319 9AED 9CBB 9F12 937F
93A1 74BE 983F 983E 9BD4 9D85 9F4D 2A5CB 9C26
84FB
20094 4ED4 5407 674D 3EAD 59C9 59CA 77F7 79C4 5470
7C7D 8014 80CF 8678 79ED 6893 7B2B 91E8 5559 7D2B
6ED3 8A3F 699F
5B57 81EA 8293 39D8 5033 525A 6063 7278 8321 6E0D
7725 7726 80D4 80FE 6F2C 3C74
5B50 5D30 6A74
5E00 531D 6C9E 5482 8FCA 62F6 7D25 7D2E 9254 9B73
81DC 81E2
6742 7838 507A 5592 97F4 96D1 22D8D 5DBB 78FC 894D
96DC 56CB 56D0 96E5
548B
5219 629E 6CA2 62E9 6CCE 6CFD 8D23 5247 8FEE 835D
5536 5567 5E3B 7B2E 8234 8CAC 6EAD 77E0 5616 5AE7
5E58 7BA6 6A0D 8ACE 8D5C 64C7 6FA4 769F 7794 7C00
790B 8B2E 8CFE 880C 8957 9F5A 456A 9F70 9E05
5928 4EC4 5E82 6C44 6603 6617 6351 5D31
4F2C 8536
707D 707E 753E 54C9 683D 70D6 6E3D 83D1 7775 8CF3
5BB0 5D3D 43C1
518D 5728 6257 4FA2 6D05 8F7D 50A4 8F09 9168 510E
7E21
8D3C 621D 8CCA 9C97 9BFD 8808 9C02 9C61
50AE 906D 7CDF 8E67 91A9
51FF 947F
65E9 67A3 86A4 68D7 6FA1 74AA 85BB 7E70 85FB
7076 7681 7682 5515 5523 688D 9020 55BF 8241 6165
566A 71E5 7C09 8B5F 8DAE 8E81 7AC3 7AC8
6806
90B9 9A7A 8BF9 90F0 966C 68F7 68F8 83C6 9112 7B83
7DC5 8ACF 9CB0 9139 9BEB 9EC0 9A36 9F71 9F7A
8D71 8D70
594F 63CD 6971 3D75
9BD0
5142 7CCC 7C2A 7C2E 9415 941F
54B1
661D 6CAF 685A 5BC1 3CEB 63DD 5646 648D 5127 6505
6512 5139 6522 8DB1 7938 8DB2
6682 3506 66AB 8CDB 8D5E 933E 6FFD 8E54 913C 74C9
8D0A 93E8 74D2 373A 7052 8B83 9147 74DA 79B6 8978
8B9A 9961
600E
8C2E 8B56 8B5B
56CE
5328 7242 7F98 8D43 8CCD 81E7 8CD8 8535 8D13 9AD2
8D1C
9A75 99D4
3638 5958 5F09 810F 585F 846C 92BA 81D3 81DF
5897 589E 618E 7F2F 912B 6A67 71B7 7494 77F0 78F3
7F7E 7E52 8B44
9503 92E5 8D60 7511 8D08
9C5B
79DF 8445 84A9
5346 8DB3 5352 54EB 5D12 5D2A 65CF 50B6 7BA4 8E24
8E3F 955E 93C3
8BC5 7EC4 963B 4FCE 723C 73C7 7956 7D44 8A5B 977B
4503
93BA
6628 79E8 637D 838B 690A 7422 7A13 7B70 923C
20087 5DE6 4F50 5528 7E53
4F5C 5750 3634 5C9D 5C9E 600D 963C 4FB3 80D9 5511
5EA7 795A 505A 3930 3B6E 888F 8443 8444 98F5 3600
7CF3
5497 84D9
539C 6718 3B70 55FA 6A36 87D5 7E97
5D8A 5634 5DB5 567F 74BB
682C 7D4A 9154 6700 666C 797D 7A21 7F6A 8FA0 69DC
917B 9189 855E 92F7 930A 6A87 6A8C
67A0 7A5D
94BB 28256 8E9C 947D
7E64 7F35 7E82 7E89 7C6B 7E98
6525 945A
5C0A 58AB 58FF 5D9F 6A3D 9075 7E5C 7F47 940F 9CDF
9C52 9DF7
50D4 5642 6499 453F 8B50
6358 928C
9D8E
5B97 5027 7EFC 9A94 582B 5D4F 5D55 60FE 68D5 7323
8159 6721 6936 847C 5D78 4053 7A2F 7D9C 7DC3 71A7
4226 7DF5 7FEA 876C 8E28 8E2A 78EB 9350 8C75 8E64
9A0C 9B03 9A23 9B09 9B37 9BEE 9BFC 9441
603B 506C 6374 60E3 6121 63D4 6403 50AF 3DD3 6460
7DCF 84D7 7E02 7E3D 93D3
7EB5 662E 75AD 500A 7314 7882 7CBD 7CC9 7632 7E26
931D 7E31 7CED
6F48
FDD0-3118
5472 75B5 8D7C 5068 8D80 8DD0 29A28 9AB4 7E12 8800
9ACA 9F79
8BCD 3639 5790 67CC 73C1 5832 7960 8308 8328 3935
74F7 46D0 8A5E 8F9D 8F9E 6148 7506 78C1 96CC 4A0F
9E5A 7CCD 8FA4 98FA 9908 3602 5B28 6FE8 858B 9D1C
7920 8FAD 9DBF 9DC0
6B64 4F4C 6CDA 73BC 7689 7D2A 9B86
673F 6B21 4F3A 4F7D 523A 523E 5E9B 6828 8326 7D58
83BF 86D3 8D50 8CDC 8786 3A5E
5693 64E6 6503
7924
906A 56C3
518A 518C 4FA7 5395 607B 62FA 6D4B 6547 755F 5074
53A0 7B27 7CA3 5EC1 60FB 6E2C 7B56 8417 7B5E 7B74
8434 5884 3A32 7BA3 84DB 61A1 25C21 7C0E
5072 5A47 731C
624D 72B2 6750 8D22 8CA1 88C1 6EA8 7E94
6BDD 91C7 5038 554B 5BC0 5F69 63A1 776C 8DF4 7DB5
8E29
57F0 68CC 83DC 8521 7E29
64A1 64CD 7CD9
66FA 66F9 5608 5D86 6F15 69FD 84F8 25562 825A 87AC
893F 93EA
8278 8349 613A 61C6 9A32
808F 9135 8959
2EBE 8279
51D1 6E4A 8160 8F8F 8F33
53C2 53C3 53C4 98E1 9A96 53C5 55B0 6E4C 50AA 5B20
9910 9A42
6B8B 8695 60ED 6B98 615A 8745 6159 45DD 5B31 8836
883A
60E8 6701 6158 61AF 7A47 7BF8 9EEA 9EF2
707F 36D1 63BA 5B71 7CB2 647B 6FAF 71E6 74A8 8592
8B32
510F 7218
5D7E
5C91 6D94 7B12 68A3
4ED3 4EFA 4F27 6CA7 82CD 9E27 5009 8231 5096 5D62
6EC4 734A 84BC 8259 87A5 9DAC
85CF 9476
416E 8CF6
6FF8 7F49 6B0C
66FD 564C
5C42 66FE 5C64 5D92 3B1D 7AF2 4255 9A53
8E6D
7C97 89D5 9E81 9E84 9EA4
5F82 6B82
4FC3 731D 8128 9162 7604 8A8E 8D97 5648 61B1 851F
8E27 918B 762F 7C07 7E2C 8E59 4944 9F00 8E74 8E75
9863
6413 7473 64AE 78CB 9073 8E49 919D
3B6B 8658 75E4 7749 77EC 5D6F 5D73 84AB 8516 9E7E
9142 9E7A 8EA6
811E
5249 5252 539D 590E 632B 63AA 839D 83A1 65AE 68E4
902A 9509 9519 84CC 6B75 92BC 932F
5D14 50AC 51D7 7F1E 5894 3720 5D89 615B 6467 69B1
7355 69EF 78EA 7E17 93D9
6F3C 7480 8DA1 76A0
4F1C 5FF0 75A9 5005 7C8B 7D23 7FC6 8103 8106 5550
555B 60B4 6DEC 6BF3 7120 813A 8403 7601 7CB9 7DB7
7FE0 81AC 81B5 6FE2 7AC1 9847 81CE 894A
4E7C
6C46 64BA 92D1 9569 8E7F 651B 8EA5 9479
6AD5 5DD1 6B11 7A73
7A9C 6BA9 71B6 7BE1 7C12 7AC4 7228
6751 90A8 76B4 8E06 6F8A 7AF4
5B58 4F9F 62F5
520C 5FD6
5BF8 540B 7C7F
5306 56EA 56F1 5FE9 679E 82C1 6031 60A4 217DF 68C7
7127 249DA 8471 6F17 8061 9AA2 66B0 6A05 6A2C 719C
747D 7481 7DEB 8066 806A 84EF 8525 779B 71EA 7BF5
8070 87CC 936F 7E71 93E6 9A18 9A44
4ECE 4E1B 5F93 5A43 5B6E 5F96 5F9E 60B0 6DD9 742E
6152 6F0E 6F40 6F68 8AB4 8CE8 8CE9 6A37 53E2 85C2
7047 6B09 721C
6181 8B25
8310
FDD0-3119
53B6 7E9F 4E1D 53F8 3EA8 7CF9 79C1 549D 6CC0 601D
8652 9E36 5AA4 65AF 7D72 7F0C 86F3 6952 3D32 9270
98D4 51D8 53AE 69B9 7997 7F73 8724 9536 5636 565D
21852 5EDD 6495 6F8C 78C3 79A0 25BE8 7DE6 92D6 71CD
856C 8784 452E 87D6 87F4 98B8 9A26 9401 29170 9DE5
9F36 7C6D
6B7B
5DF3 4E96 56DB 5BFA 6C5C 4F40 4FA1 5155 59D2 5B60
676B 6CD7 6CE4 7940 9972 9A77 3B52 67F6 726D 5A30
6D0D 6D98 8082 98E4 7B25 801C 91F2 7AE2 8997 55E3
8086 8C84 9236 923B 98FC 99DF 79A9 5129 857C 7003
4FEC 6056 92AF
4EE8 6331 6332 6492
6D12 8A2F 9778 6F75 7051 8EA0
5345 6CE7 98D2 810E 9212 8428 644B 98AF 99BA 85A9
6AD2 8644
20BBF 96A1
95AA
8272 6D13 681C 6DA9 556C 94EF 6B6E 7417 96ED 55C7
745F 6B70 92AB 6F81 61CE 64CC 6FC7 7637 7A51 6F80
74B1 7012 7A61 7E6C 8F56 93FC 8B45 98CB
6E0B 6FCF 7A6F
6BE2 6122 63CC 585E 6BF8 816E 567B 9CC3 984B 4C04
9C13
4222
55EE 8D5B 50FF 8CFD 7C3A
5625
63BB 9A9A 6145 6414 6E9E 7F2B 7E45 81CA 9CCB 9A12
9A37 9C20 9C62
626B 6383 5AC2 4545
57FD 7619 6C09 77C2 9ADE
87A6
635C 5EC0 998A 55D6 5ECB 641C 6449 6EB2 7340 910B
6457 22CB7 8490 84C3 953C 98D5 422D 8258 878B 9199
93AA 993F 98BC 98BE 9A2A
53DC 53DF 5081 55FE 778D 64DE 85AE 64FB 6AE2 85EA
7C54
8184 7636
55FD
4E09 5F0E 53C1 6BF5 4200 6BFF 7299 9B16
4ED0 4F1E 5098 7CC1 7CC2 9993 7CDD 7CE3 7CE4 7E56
93D2 93FE 9730 994A
4FD5 5E34 60B7 6563 9590
58ED 6BF6 5381 6A75
68EE 692E 69EE 8942
6852 6851
55D3 6421 78C9 892C 98A1 939F 9859
4E27 55AA
69E1
50E7 448F 9B19
82CF 7526 9165 7A23 7AA3 7A4C 6AEF 8607 8613 56CC
4FD7
738A 5919 6CDD 8083 6D2C 6D91 73DF 7D20 5BBF 6880
6B90 7C9B 83A4 901F 9A95 5083 7C9F 8C21 55C9 5850
5851 5ACA 612B 6EAF 6EB8 8085 9E54 50F3 3504 612C
69A1 8186 89EB 8D9A 9061 619F 6A0E 6A15 6F5A 6F65
24882 78BF 850C 906C 92C9 9917 3B18 6A5A 749B 7E24
7C0C 8B16 8E5C 85D7 9A4C 9C50 9DEB
8BC9 8A34 9BC2
5506 36D6 5A11 686B 68AD 838F 509E 7743 55CD 7FA7
644D 7F29 84D1 8D96 7C11 450B 7C14 7E2E 9AFF 9BBB
6240 4E7A 3ABD 5522 7D22 7410 60E2 9501 55E9 22C62
6E91 669B 7463 7485 8928 459B 9388 938D 9396 93BB
93C1
9024 6EB9 8736
7411 55E6
590A 6535 8295 867D 5020 54F8 6D7D 772D 837D 837E
6ED6 7762 7D8F 8470 71A3 6FC9 9796 96D6
7EE5 968B 9040 968F 96A8 74CD
81B8 4B49 7021 9AC4 9AD3
4E97 5C81 7815 795F 8C07 57E3 5D57 21ED5 6B72 6B73
716B 775F 788E 9042 7A42 8AB6 8CE5 5B18 6FBB 96A7
6A85 6A96 71E7 74B2 7A57 7E40 9083 79AD 7A5F 7E50
65DE 7E78 895A 8B62 9406 9429 97E2
72FB 75E0 9178
5334
7958 7B07 7B6D 7B97 849C
5B59 72F2 5B6B 836A 98E7 640E 733B 98F1 69C2 84C0
8575 859E
635F 7B0B 96BC 7B4D 640D 69AB 7BB0 7C28 93A8 9DBD
5FEA 677E 6780 5A00 67D7 502F 51C7 5D27 5EBA 68A5
6DDE 83D8 5D69 7879 8719 61BD 6FCD 290ED 6AA7 9376
9B06
6002 609A 8038 7AE6 50B1 612F 3A26 6964 5D77 616B
8073 99F7
8BBC 5B8B 8BF5 9001 9882 8A1F 980C 8AA6 9938
67A9 93B9
FDD0-311A
5475 963F 9515
55C4
554A
FDD0-311B
5594 5662
54E6
7B7D
FDD0-311C
59B8 59BF 94B6 5A3F 5A40 5C59 75FE
8BB9 542A 56EE 8FD7 4FC4 5A25 5CE8 5CE9 6D90 73F4
83AA 8A1B 7692 774B 4109 920B 9507 9E45 86FE 8A90
78C0 981F 989D 9B64 96B2 984D 9D5D 9D5E 8B4C 21145
9C2A
6799 7808 980B 5641 9A00
5384 5C75 6239 6B7A 5443 5C8B 627C 9628 545D 82CA
8F6D 9638 54A2 54B9 20C65 57A9 59F6 5CC9 7810 530E
6076 7828 4465 8685 997F 5054 537E 580A 60AA 63A0
7565 7846 8C14 8EDB 960F 35C1 582E 5D3F 60E1 6115
6E42 4748 8C5F 8EF6 9102 922A 5EC5 6424 6439 3B99
7427 816D 843C 8A7B 904C 904F 50EB 8741 9537 9E57
981E 989A 9913 9B65 5669 855A 89A8 8AE4 95BC 9929
8C96 9354 9CC4 6B5E 984E 7918 6AEE 9C10 9D9A 8B8D
9F43 9469 9F76 9C77
64DC 9D48
FDD0-311E
54C0 54CE 5509 57C3 5A2D 6328 6B38 55F3 6EBE 92B0
953F 566F 9384
5540 6371 7691 6EB0 560A 6571 6573 769A 764C 9A03
6BD0 6639 5A3E 77EE 853C 8EB7 6FED 972D 85F9 9744
4F0C 827E 3637 7231 7839 784B 35D2 55CC 5867 5AD2
611B 788D 9698 53C6 66A7 7477 95A1 50FE 416C 5B21
61D3 58D2 61DD 66D6 74A6 8586 9932 9D31 76A7 77B9
453D 99A4 7919 8B6A 8B7A 9440 9749
9C6B
FDD0-311F
8BF6 8A92
FDD0-3120
51F9 356D 67EA 688E 8EEA 720A
6556 53AB 55F7 55F8 5D85 5ED2 6EF6 7353 7352 969E
646E 23281 71AC 7488 851C 9068 78DD 7FF1 8071 87AF
7FFA 8B37 8B38 9CCC 93D6 9C32 9DD4 9F07
629D 62D7 82BA 8884 957A 5AAA 5ABC 8956
362D 5C99 6277 5773 5787 5CB0 5961 5965 50B2 5967
9A9C 371C 5AEF 6160 22CC6 58BA 5DB4 61CA 64D9 6FB3
96A9 93CA 9A41
7FF6
FDD0-3121
8BB4 6CA4 6B27 6BB4 74EF 9E25 5878 6F1A 6B50 6BC6
71B0 9D0E 750C 210BF 8B33 6AD9 93C2 9DD7 4972
8192 9F75
20676 5418 5455 5076 8162 5614 3496 8026 8545 85D5
6004 616A
85F2
FDD0-3122
5B89 4F92 5CD6 6849 6C28 5EB5 4002 8C19 5A95 83F4
75F7 8164 843B 844A 9E4C 8A9D 84ED 978C 978D 76E6
8AF3 99A3 76EB 9D6A 97FD 9D95
73B5 557D 96F8 5111
57B5 4FFA 5535 57EF 94F5 63DE 968C 7F6F 92A8
72B4 5CB8 6309 6D1D 6848 80FA 834C 8C7B 5813 5A69
4141 667B 6697 930C 95C7 9B9F 4B97 9EEF
FDD0-3123
5940 6069 217EF 717E 84BD
5CCE
6441 4B53
FDD0-3124
80AE 9AAF
536C 5C87 6602 663B 44A2 3B7F
678A 76CE 91A0
FDD0-3125
97A5
FDD0-3126
513F 800C 5150 4F95 5152 5CCF 6D0F 9651 682D 80F9
834B 5532 9E38 7CAB 804F 88BB 8F00 42E9 9C95 9AF5
96AD 9B9E 9D2F 8F5C
53BC 5C12 5C13 5C14 8033 6D31 8FE9 9975 682E 6BE6
73E5 94D2 723E 990C 99EC 85BE 9087 8DB0
4E8C 5F0D 5F10 4F74 5235 54A1 36C5 8D30 8CAE 8848
8CB3 8A80 927A 6A32
FDD0-3127
4E00 4E4A 5F0C 4F0A 8863 533B 541A 58F1 4F9D 54BF
20C96 36C4 3CD6 6D22 794E 2343F 6098 7317 94F1 58F9
63D6 6B39 86DC 90FC 5ADB 6F2A 7995 7A26 92A5 5B04
566B 5901 747F 9E65 7E44 4AD1 6AB9 6BC9 91AB 9EDF
8B69 9DD6 9EF3
4E41 4EEA 531C 572F 5937 519D 5B90 6C82 8BD2 8FC6
4F87 6021 6CB6 72CB 9974 54A6 59E8 5CD3 5DF8 5F2C
605E 62F8 67C2 73C6 886A 8D3B 8FE4 5BA7 6245 6818
684B 3EBF 74F5 7719 80F0 8A11 8CA4 8FFB 75CD 79FB
801B 8898 51D2 7FA0 8413 86E6 8A51 8A52 8CBD 5A90
6686 6938 8A83 8DE0 9057 9809 9890 98F4 7591 5100
71AA 7BB7 5DAC 5F5B 5F5C 8794 907A 9824 5BF2 5DB7
7C03 984A 294E7 4C4C 5F5D 5F5E 8B3B 93D4 89FA 3C18
8B89 9E03
4E59 5DF2 4EE5 9487 4F41 20BCB 653A 77E3 8094 5EA1
8223 82E1 82E2 8681 91D4 501A 6246 914F 506F 7B16
9018 5D3A 65D1 6905 9CE6 926F 65D6 88FF 8E26 8F22
657C 8798 49E7 6AA5 4B72 7912 8264 87FB 9857 8F59
9F6E
4E42 20086 4E49 4EBF 5F0B 5208 5FC6 808A 827A 8BAE
4EA6 3439 4F07 5C79 5F02 4F3F 4F5A 52AE 5453 5744
5F79 6291 6759 8034 8285 8BD1 9091 4F7E 546D 5479
5CC4 6008 603F 6613 678D 6B25 3CD1 6CC6 7088 79C7
7ECE 82C5 8BE3 9A7F 4FCB 5955 5E1F 5E20 5F08 223D7
67BB 6D02 6D42 73B4 75AB 7FBF 263F8 8F76 3465 5508
57BC 6092 6339 6359 6827 683A 6B2D 6D65 6D73 76CA
8875 8C0A 52DA 57F6 57F8 60A5 639C 6BB9 7570 785B
7F9B 7FCA 7FCC 88A3 8A32 8A33 8C59 8C5B 91F4 966D
96BF 5E46 6561 6679 68ED 6B94 6E59 7132 2497F 433B
86E1 8A4D 8DC7 8EFC 9038 9220 4E84 517F 3534 610F
6EA2 7348 75EC 776A 7AE9 41FC 7F22 7FA9 8084 88D4
88DB 8A63 9AAE 52E9 5AD5 5ED9 698F 7617 8189 8734
977E 99C5 5104 3989 648E 69F8 6BC5 6F69 71A0 71A4
761E 84FA 8ABC 9552 9E5D 9E62 9ED3 5293 3601 571B
58BF 5B11 5B1F 5DA7 61B6 61CC 66C0 6BAA 3D69 6FBA
71BC 71DA 7631 7796 7A53 7E0A 8257 87A0 5BF1 6581
66CE 6A8D 6B5D 71E1 71F1 7FF3 7FFC 81C6 858F 8939
8CF9 9BA8 7654 8D00 93B0 9571 7E76 7E79 85D9 85DD
8C77 972C 9BE3 9D82 9D83 39A4 7037 8B6F 8B70 91B3
91B7 9950 2113B 25725 8619 943F 9DC1 9DCA 56C8 61FF
9A5B 9DE7 9DFE 8649 897C 9F78 8B9B
5307 8864 8FB7 5B9C 7569 692C 841F 9D8D 7C4E
4E2B 5727 538B 5416 5E98 62BC 6792 57AD 9E26 6860
9E2D 57E1 5B72 690F 9D09 930F 9D28 58D3 9D76 941A
7259 4F22 5391 5C88 5393 73A1 82BD 7B0C 869C 5810
5D15 5D16 6DAF 731A 740A 7458 775A 8859 6F04 9F56
2A632
24D13 538A 5E8C 54D1 5516 555E 75D6 96C5 7602 279DD
8565
529C 5720 8F67 4E9A 897E 8BB6 4E9C 72BD 4E9E 8ECB
8FD3 5A05 631C 7811 4FF9 6C29 5A6D 6397 8A1D 94D4
63E0 6C2C 7330 8050 26716 5714 7A0F 7AAB 9F7E
2E84 4E5B 5440
54DF 5537 55B2
503B 6396 668D 6930 564E 6F71 882E
8036 6353 94D8 63F6 91FE 92E3 64E8 9381
4E5F 5414 51B6 57DC 91CE 5622 6F1C 58C4
4E1A 53F6 66F3 9875 66F5 591C 62B4 90BA 4EB1 67BC
9801 6654 67BD 70E8 35A1 5558 6DB2 8C12 5828 6B97
814B 696A 696D 8449 9113 998C 50F7 6B4B 58B7 420E
9765 5DAA 5DAB 64DB 66C4 66C5 6FB2 71C1 2681C 8B01
9134 9923 5688 64EB 66D7 76A3 77B1 9371 64EA 77B8
790F 42A6 9391 9941 9D7A 7217 9437 9768 9A5C 9E08
7237 4EAA 723A
5E7A 592D 5406 5996 6796 6B80 7945 8A1E 5593 6946
8170 847D 4301 4645 9D01 9080
723B 5C27 5C2D 80B4 579A 59DA 5CE3 409A 8F7A 5004
70D1 73E7 7A91 509C 582F 63FA 8C23 8EFA 347E 55C2
5AB1 5FAD 612E 6416 6447 733A 3A31 669A 69A3 7464
7476 9059 9065 929A 98D6 9906 5DA2 5DA4 7AAF 7AB0
4504 991A 7E47 8B20 8B21 26FBE 9390 9CD0 4B19 98BB
8628 908E 9864 9C29
4EF8 5B8E 5C86 62AD 6773 72D5 54AC 67FC 82ED 7711
7A85 7A88 8200 5060 5A79 5D3E 6E94 699A 84D4 9D22
9F3C 95C4 9A15 9F69 9DD5
7A7E 8981 94A5 25052 836F 7A94 888E 7B44 8A4F 846F
718E 899E 977F 735F 9E5E 25AAF 85AC 66DC 71FF 825E
77C5 85E5 8000 7E85 9DC2 8B91 9470
4F18 5FE7 6538 5466 602E 6CD1 5E7D 60A0 900C 9E80
6EFA 6182 512A 5698 7000 913E 6ACC 7E8B 8030
5C22 5C24 7531 6C8B 72B9 3F55 233DE 6CB9 80AC 90AE
6023 65BF 75A3 5CF3 6D5F 79DE 4343 94C0 5064 839C
83B8 86B0 8A27 6E38 7336 9030 90F5 9C7F 6962 7337
904A 923E 9C89 8F0F 99C0 8763 9B77 8555 8F36 9B8B
6AFE
6709 4E23 5363 9149 82C3 3DAD 7F91 5EAE 682F 7F90
6884 8048 811C 83A0 94D5 6E75 870F 7989 92AA 4B00
69F1 7256 9EDD 61EE
2E80 53C8 53F3 5E7C 4F51 4F91 72D6 7CFF 54CA 56FF
59F7 5BA5 5CDF 67DA 7270 8BF1 5500 7950 8FF6 4001
86B4 4EB4 8C81 91C9 916D 8A98 9F2C
53CB 5B67 848F 7257
6079 5266 70DF 73DA 80ED 5063 5571 5D26 393F 6DCA
6DF9 7109 7111 479B 9609 6E6E 7312 814C 83F8 7159
787D 5AE3 6F39 4167 9122 9183 95B9 5B2E 61E8 7BF6
61D5 81D9 9EEB
8BA0 4E25 8A00 5CA9 5EF6 6616 6CBF 708E 82AB 598D
59F8 7814 5A2E 76D0 5A2B 72FF 7402 784F 90D4 9586
960E 5D52 5D53 6E7A 839A 5869 63C5 694C 41FE 8A7D
789E 7B75 7D96 8712 8505 989C 8664 95BB 53B3 6A90
984F 9854 58DB 7C37 56B4 5DCC 6AE9 9EEC 5DD7 58E7
5B4D 5DD6 9E7D 7939 9EA3
5935 6281 6C87 4E75 5156 5944 4FE8 5157 533D 5F07
884D 5043 53A3 63A9 773C 9153 5D43 611D 624A 63DC
3B7A 68EA 6E30 6E37 7430 8412 90FE 693C 7F68 9043
9692 6F14 88FA 5D96 622D 8758 8917 565E 8EBD 9B47
7E2F 6ABF 9A13 9EE1 53B4 2502C 9C0B 9DA0 9EE4 9F5E
9F91 7517 9EED 513C 9869 9F34 5DD8 5DDA 9F39 66EE
9B58 9F74 9EF6
538C 95EB 599F 89C3 726A 54BD 59F2 5F65 5F66 781A
5501 5BB4 664F 8273 898E 9A8C 5050 7114 8C1A 55AD
5830 6565 70FB 7130 7131 786F 9681 96C1 50BF 693B
6E8E 6EDF 8455 9CEB 53AD 5895 66A5 917D 5B0A 8C33
290C0 990D 9D08 3DF3 3DFC 71C4 71D5 8AFA 8D5D 48AD
9B33 66D5 9D33 9A10 56A5 5B3F 8276 8D0B 9140 4A04
4CE1 3B2B 66E3 7213 91B6 9A34 9DC3 7054 8D17 89FE
8B8C 91BC 995C 9A57 9DF0 8277 2A64A 704E 9A60 7067
8B9E 8C53 91C5 8C54 7069
8A01 6A2E 7196 8EC5 6B15
56D9 56E0 9625 9634 4F8C 5794 59FB 39E2 6D07 97F3
9A83 6836 6BB7 6C24 8335 51D0 5A63 4104 79F5 836B
94DF 9670 5591 5819 6114 7B43 7D6A 88C0 967B 9682
6B45 6EB5 6147 647F 7616 798B 92A6 7DF8 852D 9787
8AF2 9712 290EC 99F0 567E 95C9 9720 3D8F 97FE
5198 4E51 3542 541F 72BE 65A6 82C2 57A0 6CFF 3597
5701 5CFE 70CE 72FA 73E2 8A14 8A1A 5A6C 5BC5 5D1F
5D2F 6DEB 8376 8A21 94F6 921D 9F82 6EDB 7892 5924
911E 9280 5656 6BA5 748C 8529 8ABE 569A 6AAD 87EB
4D26 972A 9F57 9DE3
4E5A 200CA 5EF4 5C39 5F15 5432 996E 8693 8D7A 6DFE
920F 9690 98F2 9777 98EE 6704 8F11 96A0 78E4 8D9B
763E 5DBE 6A83 6FE5 6FE6 87BE 96B1 6AFD 861F 766E
8B94
5370 6D15 80E4 57BD 831A 5837 6E5A 730C 5ED5 8491
9173 616D 6196 6197 764A 9BA3 3865 61DA 6ABC 4543
7C8C
592E 5489 59CE 62B0 6CF1 6B83 80E6 770F 79E7 9E2F
9260 96F5 9785 9D26
626C 7F8A 65F8 6768 7080 9626 9633 98CF 4F6F 52B7
6C1C 75A1 9496 579F 5F89 661C 6D0B 7F8F 70CA 73DC
26B75 773B 5D35 5D38 63DA 86D8 967D 656D 6698 694A
716C 760D 7993 3B15 8AF9 8F30 935A 9D39 98BA 940A
9C11 9737 9E09
4EF0 4F52 5771 5C9F 517B 67CD 70B4 6C27 75D2 7D3B
509F 8EEE 6143 6967 6C31 8746 990A 99DA 3526 61E9
6501 4446 7662
600F 6059 6837 7F95 8A47 69D8 6F3E 6A23 7001
594D 7FAA 7922
5E94 5FDC 82F1 685C 5040 5568 5A74 7EEC 83BA 20E04
21398 5A96 6E36 48D0 5AC8 6720 7150 745B 5624 6484
78A4 7F28 7F42 8CCF 9533 6A31 748E 7507 7DD3 8767
7F43 892E 9348 9D2C 9E66 5B30 61C9 81BA 9719 97FA
9E70 7516 9D91 56B6 5B46 5B7E 6516 7F4C 8B4D 9DA7
6AFB 74D4 792F 8621 8B7B 9DAF 944D 7E93 8833 9DEA
9DF9 9E0E 9E1A
76C1 8FCE 76C8 8314 8367 55B6 83B9 86CD 2870F 6E81
6E8B 8424 8426 50CC 584B 6979 6EE2 8425 843E 6F46
7192 84E5 7469 4294 877F 5B34 7E08 87A2 6FD9 6FDA
6FF4 71DF 89AE 8B0D 8D62 7005 85C0 93A3 650D 701B
7020 2294F 702F 7034 8D0F 6AFF 7C5D 7C6F
77E8 6D67 90E2 68AC 988D 9895 9896 646C 4B2C 5F71
6F41 7484 763F 7A4E 9834 5DCA 5EEE 766D
6620 786C 5AB5 668E 81A1 565F 9795 941B 9C66
73F1 6125 8747 7E04 8805 651A 7050 705C 8EC8
FDD0-3128
4E4C 572C 5F19 6C59 6C5A 6C61 545C 5DEB 6747 90AC
5C4B 6D3F 8BEC 94A8 70CF 526D 7A8F 55DA 9114 6B4D
8AA3 7BBC 8790 9D2E 93A2 9C1E
65E0 6BCB 5433 5434 543E 5449 829C 5514 5A2A 6D16
6D6F 90DA 68A7 73F8 8323 8381 7121 7966 94FB 9E40
8708 8A88 7991 7491 856A 87F1 9BC3 9D50 8B55 9F2F
9DE1
4E94 5348 4EF5 59A9 5E91 5FE4 6003 65FF 3B33 6B66
739D 4FAE 4FC9 5035 6342 554E 5A2C 727E 73F7 6440
7894 9E49 7193 7466 821E 5AF5 5EE1 61AE 6F55 511B
6A46 7512 9D61 8E8C
5140 52FF 3433 620A 4F06 5C7C 6264 9622 575E 5C89
674C 5FE2 7269 77F9 82B4 8FD5 537C 6544 8BEF 609E
609F 60AE 7C85 6664 7110 901C 5A7A 5D4D 75E6 9770
9A9B 5862 5966 5D68 6EA9 9696 96FA 96FE 5BE4 7183
8AA4 9E5C 92C8 7AB9 907B 4A01 971A 9F3F 9727 9A16
9F40 8601 9DA9
4E44 52A1 4F0D 52D9 933B
7A75 52B8 6316 6D3C 5A32 7556 7A8A 5AA7 86D9 55D7
6432 6E9B 6F25 7AAA 9F03 6528
5A03
74E6 4F64 5493 39DA 90B7
8049 889C 55E2 817D 8183 896A 97C8 97E4
5C72 54C7 74F2
631D 502D 6DA1 5529 6DB9 83B4 6E26 7327 7A9D 8435
8717 7AA9 8778 8E12 64BE
6211 5A50 6370 4C00
4EF4 6C83 809F 5367 6782 81E5 5053 637E 6DB4 5A89
5E44 63E1 6E25 7125 786A 6943 815B 65A1 7783 20FDF
64ED 6FE3 9F8C 74C1 81D2 96D8 9F77
6B6A 558E 7AF5
5D34
5916 20C3B 591E 9861
5371 5A01 20CFF 70D3 504E 55B4 364E 5A99 6104 63CB
63FB 6E28 840E 9036 9687 9688 5FAE 6933 6972 6EA6
7168 8468 8473 8A74 8732 875B 89A3 71F0 8587 9CC2
9C03 9C04 5DCD
56D7 97E6 5729 56F4 5E0F 6CA9 95F1 8FDD 5CD7 5CDE
6D08 97CB 6845 6DA0 552F 5E37 60DF 7859 7EF4 55A1
570D 5A81 5E43 6E4B 6E88 741F 912C 5D6C 9055 6F4D
7DAD 6F59 6F7F 78D1 84F6 9180 6FF0 934F 95C8 9BA0
7653 4260 89B9 973A 6B08 72A9
5383 4F1F 4F2A 5C3E 7EAC 59D4 3B4F 709C 73AE 829B
82C7 6D27 5A13 5C57 6D58 8BFF 5049 507D 5D23 68B6
75CF 784A 8371 5BEA 5D54 5FAB 6107 7325 9AA9 6690
6932 7152 744B 75FF 41FB 8172 8249 8466 848D 97EA
9AAA 9AAB 50DE 9C94 5130 64B1 78C8 25BE4 7DEF 8AC9
8E13 97D1 9820 3B19 853F 285E8 9361 9BAA 6FFB 85B3
97D9 98B9 58DD 7022 8624 97E1 6596
536B 4E3A 672A 4F4D 5473 70BA 754F 80C3 82FF 53DE
8ECE 5C09 8C13 5582 5AA6 6E2D 3DC9 7232 83CB 715F
78A8 873C 6170 71AD 729A 7DED 851A 885B 61C0 748F
7F7B 885E 8B02 9927 9B87 87B1 893D 9935 8F4A 9B4F
85EF 93CF 9728 9CDA 9956 8636 8B86 8E97 4C81 8B8F
8E9B
6364 7140 732C 589B 7E05 875F 5DB6
5F2F 525C 5A60 5E35 5846 6E7E 873F 6F6B 8C4C 5F4E
58EA 7063
4E38 5213 6C4D 7EA8 5B8C 5C8F 628F 8284 73A9 7D08
6356 987D 70F7 7413 9811 4BC8 7FEB
5B9B 5007 550D 633D 76CC 57E6 5A49 60CB 665A 6669
689A 7EFE 8118 667C 6900 742C 7696 83C0 8416 7579
7755 7897 7DA9 7DB0 8F13 8E20 92C4 92D4 4A4A 3736
4E07 534D 5350 59A7 5FE8 6365 8115 8CA6 8155 842C
8F10 6FAB 933D 858D 87C3 8D03 93AB 4951 8D0E
909C 6764 7B02
6637 6E29 586D 3B08 6985 6EAB 8F92 6B9F 7465 761F
8570 8F3C 8C71 8F40 9CC1 97B0 29948 9C1B 9C2E
5301 6587 5F63 7EB9 7086 739F 82A0 95FB 7D0B 8689
868A 73F3 960C 741D 96EF 7612 805E 99BC 9B70 9CFC
9D0D 87A1 95BA 95BF 87C1 95C5 9F24 95E6
520E 543B 5FDF 6286 5461 80B3 7D0A 687D 8117 7A33
7A4F 7A69
95EE 598F 6C76 554F 6E02 83AC 63FE 6435 9850 74BA
545A 922B 93BE
21BC1 5C23 5C29 5C2A 5C2B 6C6A
4EA1 4EBE 5166 738B 4EFC 5F7A 869F 83A3
34C1 7F52 7F51 5F80 5F83 7F54 5F8D 60D8 6680 68E2
83F5 86E7 8F8B 7DB2 8744 8AB7 8F1E 7007 9B4D
5984 5FD8 65FA 76F3 8FCB 671B 6722 4911
6789 7139
7FC1 55E1 6EC3 9E5F 8789 9393 9DB2
3622 52DC 5963 5855 5D61 66A1 4425 84CA 7788 806C
3732
74EE 8579 7515 7F4B 9F46
FDD0-3129
625C 7EA1 8FC2 8FC3 7A7B 7D06 8676 9653 5539 6DE4
76D3 6BFA 7600 7B8A
4E90 4E8E 4F03 36A5 3B30 9098 4F59 59A4 6275 6745
6B24 7397 7399 65BC 76C2 81FE 9C7C 4E7B 4FDE 516A
79BA 7AFD 4342 8867 5A1B 5A2F 5A31 6859 72F3 8201
8330 8C00 9151 9980 6E14 96E9 9B5A 5823 582C 5D33
5D4E 5D5B 3965 6109 63C4 6970 6E1D 6E61 756D 7862
8174 8438 9685 611A 65D5 3B02 6961 6986 6B48 724F
745C 8245 842E 865E 89CE 903E 9AAC 6F01 776E 7AAC
6B76 7FAD 4433 8753 8915 8ADB 96D3 9918 4C3B 6F9E
8206 854D 89A6 8E30 5B29 87B8 8F3F 935D 28A36 6B5F
74B5 8B23 9BBD 9A1F 9AC3 65DF 7C45 861B 9C05 4CA3
9DE0 9E06
4E0E 4E88 4F1B 5B87 5C7F 7FBD 2ED7 96E8 4FC1 4FE3
79B9 8BED 5704 5CFF 504A 3531 532C 5709 5EBE 6554
7964 3762 659E 9105 50B4 5BD9 6940 7440 7610 842D
38C3 8207 8A9E 7AB3 92D9 9828 9F89 5673 8C90 5DBC
61D9 399B 6594 9E8C 860C 9F6C
8080 7389 9A6D 572B 807F 59AA 5FEC 828B 828C 996B
80B2 3922 6631 72F1 79D7 90C1 4FFC 5CEA 5F67 6D74
7821 831F 94B0 9884 57DF 5809 5FA1 6086 60D0 6B32
6DE2 6DEF 8C15 9608 5585 5590 55A9 55BB 5A80 5BD3
5EBD 68DB 68DC 68EB 7134 7419 77DE 7872 26C40 9033
98EB 99AD 9E46 6108 6BD3 6EEA 715C 3F63 7A22 7F6D
8248 88D5 8A89 9047 923A 9810 5AD7 5D8E 622B 7344
7609 4205 42ED 7DCE 84AE 84E3 871F 872E 463B 8F0D
9289 564A 617E 6F4F 7A36 84F9 92CA 9CFF 224B0 6FA6
71CF 79A6 8AED 8C6B 9079 9325 95BE 9D25 9D2A 5125
2148A 71E0 7BFD 8577 8581 9E6C 7652 7907 7916 7E58
27450 91A7 9B4A 9D52 791C 7A65 9947 6AF2 9731 8B7D
8F5D 942D 6B0E 9A48 9B3B 7C5E 9C4A 9DF8 6B1D 9E12
9FA5 8EC9 9B30 9B31 706A 7C72 7229
6327 8362 6F9A 9BF2
66F0 66F1 7EA6 7D04 7BB9 5F5F 77F1 5F60
2E9D 6708 6209 5216 599C 5C84 6288 216DF 5CB3 73A5
793F 6071 4195 6085 60A6 868E 868F 8ECF 94BA 9605
6373 8DC0 8DC3 4847 7CA4 8D8A 9205 7CB5 925E 4926
95B1 95B2 6A3E 7BD7 5B33 5DBD 294E5 9FA0 3730 3B26
7039 7C46 9EE6 721A 8625 8E8D 79B4 7C65 9E11 7C70
9E19
56E6 9E22 5248 51A4 6081 7722 9E33 5BC3 6DF5 6E01
6E06 6E0A 6E15 60CC 68E9 3F93 847E 870E 9E53 7BA2
84AC 8735 88F7 9CF6 485D 99CC 9D1B 5B3D 4949 9D77
7041 9F18 9F1D
5143 5186 8D20 5458 56ED 6C85 90A7 676C 57A3 7230
8C9F 539F 54E1 5706 7B0E 8696 8881 53A1 570E 63F4
6E72 7328 7F18 8312 9F0B 5712 5713 586C 5AB4 5AC4
6E90 6E92 733F 7342 699E 69AC 849D 8F95 7DE3 7E01
875D 876F 9B6D 4CAE 6A7C 7FB1 8788 8597 8B1C 8F45
9EFF 93B1 6ADE 908D 9A35 9DA2 9DB0 53B5
8FDC 76F6 903A 9060 92FA
5917 8099 59B4 3B47 6028 82D1 57B8 884F 9662 5086
5A9B 63BE 7457 613F 7990 88EB 8911 566E 8924 9858
915B 9228
6655 7F0A 6688 7174 8480 596B 6C32 6C33 8495 7E15
8779 8D5F 9835 8D07 99A7
4E91 52FB 5300 56E9 5998 6C84 7EAD 6600 82B8 7547
7703 79D0 6DA2 7D1C 8018 803A 90E7 96F2 612A 6EB3
7B60 7B7C 9116 69B2 7189 84B7 6F90 92C6 6A52 7BD4
7E1C 8553 9942
5141 593D 628E 72C1 962D 9668 6B92 837A 5597 491E
9217 9695 6B9E 99BB 78D2 891E 8CF1 9723 9F73
5B55 679F 8FD0 607D 90D3 915D 508A 60F2 6120 9106
614D 816A 904B 97EB 97F5 7185 71A8 7DF7 7DFC 4CB0
8574 9196 8580 919E 992B 97D7 85F4 97DE 97FB 860A
62A3 7E67
4F63 62E5 75C8 9095 5EB8 50AD 55C8 96CD 5889 5ADE
6175 6EFD 9118 69E6 5670 58C5 64C1 6FAD 90FA 955B
81C3 7655 96DD 93DE 9CD9 5EF1 7049 9954 9C45 9DDB
7670
5581 63D8 7245 9899 9852 9C2B
6C38 752C 548F 6CF3 4FD1 52C7 52C8 6810 57C7 6080
67E1 6D8C 607F 3D04 509B 60E5 6111 6E67 7867 8A60
584E 5D71 5F6E 6139 86F9 6142 8E0A 799C 9CAC 8E34
9BD2
7528 82DA 919F
603A 783D
__END__
=head1 NAME
Unicode::Collate::CJK::Zhuyin - weighting CJK Unified Ideographs
for Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate;
use Unicode::Collate::CJK::Zhuyin;
my $collator = Unicode::Collate->new(
overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin
);
=head1 DESCRIPTION
C<Unicode::Collate::CJK::Zhuyin> provides C<weightZhuyin()>,
that is adequate for C<overrideCJK> of C<Unicode::Collate>
and makes tailoring of CJK Unified Ideographs in the order
of CLDR's zhuyin (bopomofo) ordering.
=head1 CAVEAT
The zhuyin ordering includes some characters that are not
CJK Unified Ideographs and can't utilize C<weightZhuyin()>
for collation. For them, use C<entry> instead.
=head1 SEE ALSO
=over 4
=item CLDR - Unicode Common Locale Data Repository
L<http://cldr.unicode.org/>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=item L<Unicode::Collate>
=item L<Unicode::Collate::Locale>
=back
=cut
Unicode/Collate/CJK/GB2312.pm 0000644 00000104606 15033552504 0011273 0 ustar 00 package Unicode::Collate::CJK::GB2312;
use 5.006;
use strict;
use warnings;
our $VERSION = '1.25';
my %u2p;
my $wt = 0x8000;
while (<DATA>) {
last if /^__END__/;
my @c = split;
for my $c (@c) {
next if !$c;
$u2p{hex($c)} = $wt;
$wt++;
}
}
sub weightGB2312 {
my $u = shift;
return exists $u2p{$u} ? $u2p{$u} : undef;
}
1;
__DATA__
554A 963F 57C3 6328 54CE 5509 54C0 7691 764C 853C
77EE 827E 788D 7231 9698 978D 6C28 5B89 4FFA 6309
6697 5CB8 80FA 6848 80AE 6602 76CE 51F9 6556 71AC
7FF1 8884 50B2 5965 61CA 6FB3 82AD 634C 6252 53ED
5427 7B06 516B 75A4 5DF4 62D4 8DCB 9776 628A 8019
575D 9738 7F62 7238 767D 67CF 767E 6446 4F70 8D25
62DC 7A17 6591 73ED 642C 6273 822C 9881 677F 7248
626E 62CC 4F34 74E3 534A 529E 7ECA 90A6 5E2E 6886
699C 8180 7ED1 68D2 78C5 868C 9551 508D 8C24 82DE
80DE 5305 8912 5265 8584 96F9 4FDD 5821 9971 5B9D
62B1 62A5 66B4 8C79 9C8D 7206 676F 7891 60B2 5351
5317 8F88 80CC 8D1D 94A1 500D 72C8 5907 60EB 7119
88AB 5954 82EF 672C 7B28 5D29 7EF7 752D 6CF5 8E66
8FF8 903C 9F3B 6BD4 9119 7B14 5F7C 78A7 84D6 853D
6BD5 6BD9 6BD6 5E01 5E87 75F9 95ED 655D 5F0A 5FC5
8F9F 58C1 81C2 907F 965B 97AD 8FB9 7F16 8D2C 6241
4FBF 53D8 535E 8FA8 8FA9 8FAB 904D 6807 5F6A 8198
8868 9CD6 618B 522B 762A 5F6C 658C 6FD2 6EE8 5BBE
6448 5175 51B0 67C4 4E19 79C9 997C 70B3 75C5 5E76
73BB 83E0 64AD 62E8 94B5 6CE2 535A 52C3 640F 94C2
7B94 4F2F 5E1B 8236 8116 818A 6E24 6CCA 9A73 6355
535C 54FA 8865 57E0 4E0D 5E03 6B65 7C3F 90E8 6016
64E6 731C 88C1 6750 624D 8D22 776C 8E29 91C7 5F69
83DC 8521 9910 53C2 8695 6B8B 60ED 60E8 707F 82CD
8231 4ED3 6CA7 85CF 64CD 7CD9 69FD 66F9 8349 5395
7B56 4FA7 518C 6D4B 5C42 8E6D 63D2 53C9 832C 8336
67E5 78B4 643D 5BDF 5C94 5DEE 8BE7 62C6 67F4 8C7A
6400 63BA 8749 998B 8C17 7F20 94F2 4EA7 9610 98A4
660C 7316 573A 5C1D 5E38 957F 507F 80A0 5382 655E
7545 5531 5021 8D85 6284 949E 671D 5632 6F6E 5DE2
5435 7092 8F66 626F 64A4 63A3 5F7B 6F88 90F4 81E3
8FB0 5C18 6668 5FF1 6C89 9648 8D81 886C 6491 79F0
57CE 6A59 6210 5448 4E58 7A0B 60E9 6F84 8BDA 627F
901E 9A8B 79E4 5403 75F4 6301 5319 6C60 8FDF 5F1B
9A70 803B 9F7F 4F88 5C3A 8D64 7FC5 65A5 70BD 5145
51B2 866B 5D07 5BA0 62BD 916C 7574 8E0C 7A20 6101
7B79 4EC7 7EF8 7785 4E11 81ED 521D 51FA 6A71 53A8
8E87 9504 96CF 6EC1 9664 695A 7840 50A8 77D7 6410
89E6 5904 63E3 5DDD 7A7F 693D 4F20 8239 5598 4E32
75AE 7A97 5E62 5E8A 95EF 521B 5439 708A 6376 9524
5782 6625 693F 9187 5507 6DF3 7EAF 8822 6233 7EF0
75B5 8328 78C1 96CC 8F9E 6148 74F7 8BCD 6B64 523A
8D50 6B21 806A 8471 56F1 5306 4ECE 4E1B 51D1 7C97
918B 7C07 4FC3 8E7F 7BE1 7A9C 6467 5D14 50AC 8106
7601 7CB9 6DEC 7FE0 6751 5B58 5BF8 78CB 64AE 6413
63AA 632B 9519 642D 8FBE 7B54 7629 6253 5927 5446
6B79 50A3 6234 5E26 6B86 4EE3 8D37 888B 5F85 902E
6020 803D 62C5 4E39 5355 90F8 63B8 80C6 65E6 6C2E
4F46 60EE 6DE1 8BDE 5F39 86CB 5F53 6321 515A 8361
6863 5200 6363 8E48 5012 5C9B 7977 5BFC 5230 7A3B
60BC 9053 76D7 5FB7 5F97 7684 8E6C 706F 767B 7B49
77AA 51F3 9093 5824 4F4E 6EF4 8FEA 654C 7B1B 72C4
6DA4 7FDF 5AE1 62B5 5E95 5730 8482 7B2C 5E1D 5F1F
9012 7F14 98A0 6382 6EC7 7898 70B9 5178 975B 57AB
7535 4F43 7538 5E97 60E6 5960 6DC0 6BBF 7889 53FC
96D5 51CB 5201 6389 540A 9493 8C03 8DCC 7239 789F
8776 8FED 8C0D 53E0 4E01 76EF 53EE 9489 9876 9F0E
952D 5B9A 8BA2 4E22 4E1C 51AC 8463 61C2 52A8 680B
4F97 606B 51BB 6D1E 515C 6296 6597 9661 8C46 9017
75D8 90FD 7763 6BD2 728A 72EC 8BFB 5835 7779 8D4C
675C 9540 809A 5EA6 6E21 5992 7AEF 77ED 953B 6BB5
65AD 7F0E 5806 5151 961F 5BF9 58A9 5428 8E72 6566
987F 56E4 949D 76FE 9041 6387 54C6 591A 593A 579B
8EB2 6735 8DFA 8235 5241 60F0 5815 86FE 5CE8 9E45
4FC4 989D 8BB9 5A25 6076 5384 627C 904F 9102 997F
6069 800C 513F 8033 5C14 9975 6D31 4E8C 8D30 53D1
7F5A 7B4F 4F10 4E4F 9600 6CD5 73D0 85E9 5E06 756A
7FFB 6A0A 77FE 9492 7E41 51E1 70E6 53CD 8FD4 8303
8D29 72AF 996D 6CDB 574A 82B3 65B9 80AA 623F 9632
59A8 4EFF 8BBF 7EBA 653E 83F2 975E 5561 98DE 80A5
532A 8BFD 5420 80BA 5E9F 6CB8 8D39 82AC 915A 5429
6C1B 5206 7EB7 575F 711A 6C7E 7C89 594B 4EFD 5FFF
6124 7CAA 4E30 5C01 67AB 8702 5CF0 950B 98CE 75AF
70FD 9022 51AF 7F1D 8BBD 5949 51E4 4F5B 5426 592B
6577 80A4 5B75 6276 62C2 8F90 5E45 6C1F 7B26 4F0F
4FD8 670D 6D6E 6DAA 798F 88B1 5F17 752B 629A 8F85
4FEF 91DC 65A7 812F 8151 5E9C 8150 8D74 526F 8986
8D4B 590D 5085 4ED8 961C 7236 8179 8D1F 5BCC 8BA3
9644 5987 7F1A 5490 5676 560E 8BE5 6539 6982 9499
76D6 6E89 5E72 7518 6746 67D1 7AFF 809D 8D76 611F
79C6 6562 8D63 5188 521A 94A2 7F38 809B 7EB2 5C97
6E2F 6760 7BD9 768B 9AD8 818F 7F94 7CD5 641E 9550
7A3F 544A 54E5 6B4C 6401 6208 9E3D 80F3 7599 5272
9769 845B 683C 86E4 9601 9694 94EC 4E2A 5404 7ED9
6839 8DDF 8015 66F4 5E9A 7FB9 57C2 803F 6897 5DE5
653B 529F 606D 9F9A 4F9B 8EAC 516C 5BAB 5F13 5DE9
6C5E 62F1 8D21 5171 94A9 52FE 6C9F 82DF 72D7 57A2
6784 8D2D 591F 8F9C 83C7 5495 7B8D 4F30 6CBD 5B64
59D1 9F13 53E4 86CA 9AA8 8C37 80A1 6545 987E 56FA
96C7 522E 74DC 5250 5BE1 6302 8902 4E56 62D0 602A
68FA 5173 5B98 51A0 89C2 7BA1 9986 7F50 60EF 704C
8D2F 5149 5E7F 901B 7470 89C4 572D 7845 5F52 9F9F
95FA 8F68 9B3C 8BE1 7678 6842 67DC 8DEA 8D35 523D
8F8A 6EDA 68CD 9505 90ED 56FD 679C 88F9 8FC7 54C8
9AB8 5B69 6D77 6C26 4EA5 5BB3 9A87 9163 61A8 90AF
97E9 542B 6DB5 5BD2 51FD 558A 7F55 7FF0 64BC 634D
65F1 61BE 608D 710A 6C57 6C49 592F 676D 822A 58D5
568E 8C6A 6BEB 90DD 597D 8017 53F7 6D69 5475 559D
8377 83CF 6838 79BE 548C 4F55 5408 76D2 8C89 9602
6CB3 6DB8 8D6B 8910 9E64 8D3A 563F 9ED1 75D5 5F88
72E0 6068 54FC 4EA8 6A2A 8861 6052 8F70 54C4 70D8
8679 9E3F 6D2A 5B8F 5F18 7EA2 5589 4FAF 7334 543C
539A 5019 540E 547C 4E4E 5FFD 745A 58F6 846B 80E1
8774 72D0 7CCA 6E56 5F27 864E 552C 62A4 4E92 6CAA
6237 82B1 54D7 534E 733E 6ED1 753B 5212 5316 8BDD
69D0 5F8A 6000 6DEE 574F 6B22 73AF 6853 8FD8 7F13
6362 60A3 5524 75EA 8C62 7115 6DA3 5BA6 5E7B 8352
614C 9EC4 78FA 8757 7C27 7687 51F0 60F6 714C 6643
5E4C 604D 8C0E 7070 6325 8F89 5FBD 6062 86D4 56DE
6BC1 6094 6167 5349 60E0 6666 8D3F 79FD 4F1A 70E9
6C47 8BB3 8BF2 7ED8 8364 660F 5A5A 9B42 6D51 6DF7
8C41 6D3B 4F19 706B 83B7 6216 60D1 970D 8D27 7978
51FB 573E 57FA 673A 7578 7A3D 79EF 7B95 808C 9965
8FF9 6FC0 8BA5 9E21 59EC 7EE9 7F09 5409 6781 68D8
8F91 7C4D 96C6 53CA 6025 75BE 6C72 5373 5AC9 7EA7
6324 51E0 810A 5DF1 84DF 6280 5180 5B63 4F0E 796D
5242 60B8 6D4E 5BC4 5BC2 8BA1 8BB0 65E2 5FCC 9645
5993 7EE7 7EAA 5609 67B7 5939 4F73 5BB6 52A0 835A
988A 8D3E 7532 94BE 5047 7A3C 4EF7 67B6 9A7E 5AC1
6B7C 76D1 575A 5C16 7B3A 95F4 714E 517C 80A9 8270
5978 7F04 8327 68C0 67EC 78B1 7877 62E3 6361 7B80
4FED 526A 51CF 8350 69DB 9274 8DF5 8D31 89C1 952E
7BAD 4EF6 5065 8230 5251 996F 6E10 6E85 6DA7 5EFA
50F5 59DC 5C06 6D46 6C5F 7586 848B 6868 5956 8BB2
5320 9171 964D 8549 6912 7901 7126 80F6 4EA4 90CA
6D47 9A84 5A07 56BC 6405 94F0 77EB 4FA5 811A 72E1
89D2 997A 7F34 7EDE 527F 6559 9175 8F7F 8F83 53EB
7A96 63ED 63A5 7686 79F8 8857 9636 622A 52AB 8282
6854 6770 6377 776B 7AED 6D01 7ED3 89E3 59D0 6212
85C9 82A5 754C 501F 4ECB 75A5 8BEB 5C4A 5DFE 7B4B
65A4 91D1 4ECA 6D25 895F 7D27 9526 4EC5 8C28 8FDB
9773 664B 7981 8FD1 70EC 6D78 5C3D 52B2 8346 5162
830E 775B 6676 9CB8 4EAC 60CA 7CBE 7CB3 7ECF 4E95
8B66 666F 9888 9759 5883 656C 955C 5F84 75C9 9756
7ADF 7ADE 51C0 70AF 7A98 63EA 7A76 7EA0 7396 97ED
4E45 7078 4E5D 9152 53A9 6551 65E7 81FC 8205 548E
5C31 759A 97A0 62D8 72D9 75BD 5C45 9A79 83CA 5C40
5480 77E9 4E3E 6CAE 805A 62D2 636E 5DE8 5177 8DDD
8E1E 952F 4FF1 53E5 60E7 70AC 5267 6350 9E43 5A1F
5026 7737 5377 7EE2 6485 652B 6289 6398 5014 7235
89C9 51B3 8BC0 7EDD 5747 83CC 94A7 519B 541B 5CFB
4FCA 7AE3 6D5A 90E1 9A8F 5580 5496 5361 54AF 5F00
63E9 6977 51EF 6168 520A 582A 52D8 574E 780D 770B
5EB7 6177 7CE0 625B 6297 4EA2 7095 8003 62F7 70E4
9760 5777 82DB 67EF 68F5 78D5 9897 79D1 58F3 54B3
53EF 6E34 514B 523B 5BA2 8BFE 80AF 5543 57A6 6073
5751 542D 7A7A 6050 5B54 63A7 62A0 53E3 6263 5BC7
67AF 54ED 7A9F 82E6 9177 5E93 88E4 5938 57AE 630E
8DE8 80EF 5757 7B77 4FA9 5FEB 5BBD 6B3E 5321 7B50
72C2 6846 77FF 7736 65F7 51B5 4E8F 76D4 5CBF 7AA5
8475 594E 9B41 5080 9988 6127 6E83 5764 6606 6346
56F0 62EC 6269 5ED3 9614 5783 62C9 5587 8721 814A
8FA3 5566 83B1 6765 8D56 84DD 5A6A 680F 62E6 7BEE
9611 5170 6F9C 8C30 63FD 89C8 61D2 7F06 70C2 6EE5
7405 6994 72FC 5ECA 90CE 6717 6D6A 635E 52B3 7262
8001 4F6C 59E5 916A 70D9 6D9D 52D2 4E50 96F7 956D
857E 78CA 7D2F 5121 5792 64C2 808B 7C7B 6CEA 68F1
695E 51B7 5398 68A8 7281 9ECE 7BF1 72F8 79BB 6F13
7406 674E 91CC 9CA4 793C 8389 8354 540F 6817 4E3D
5389 52B1 783E 5386 5229 5088 4F8B 4FD0 75E2 7ACB
7C92 6CA5 96B6 529B 7483 54E9 4FE9 8054 83B2 8FDE
9570 5EC9 601C 6D9F 5E18 655B 8138 94FE 604B 70BC
7EC3 7CAE 51C9 6881 7CB1 826F 4E24 8F86 91CF 667E
4EAE 8C05 64A9 804A 50DA 7597 71CE 5BE5 8FBD 6F66
4E86 6482 9563 5ED6 6599 5217 88C2 70C8 52A3 730E
7433 6797 78F7 9716 4E34 90BB 9CDE 6DCB 51DB 8D41
541D 62CE 73B2 83F1 96F6 9F84 94C3 4F36 7F9A 51CC
7075 9675 5CAD 9886 53E6 4EE4 6E9C 7409 69B4 786B
998F 7559 5218 7624 6D41 67F3 516D 9F99 804B 5499
7B3C 7ABF 9686 5784 62E2 9647 697C 5A04 6402 7BD3
6F0F 964B 82A6 5362 9885 5E90 7089 63B3 5364 864F
9C81 9E93 788C 9732 8DEF 8D42 9E7F 6F5E 7984 5F55
9646 622E 9A74 5415 94DD 4FA3 65C5 5C65 5C61 7F15
8651 6C2F 5F8B 7387 6EE4 7EFF 5CE6 631B 5B6A 6EE6
5375 4E71 63A0 7565 62A1 8F6E 4F26 4ED1 6CA6 7EB6
8BBA 841D 87BA 7F57 903B 9523 7BA9 9AA1 88F8 843D
6D1B 9A86 7EDC 5988 9EBB 739B 7801 8682 9A6C 9A82
561B 5417 57CB 4E70 9EA6 5356 8FC8 8109 7792 9992
86EE 6EE1 8513 66FC 6162 6F2B 8C29 8292 832B 76F2
6C13 5FD9 83BD 732B 8305 951A 6BDB 77DB 94C6 536F
8302 5192 5E3D 8C8C 8D38 4E48 73AB 679A 6885 9176
9709 7164 6CA1 7709 5A92 9541 6BCF 7F8E 6627 5BD0
59B9 5A9A 95E8 95F7 4EEC 840C 8499 6AAC 76DF 9530
731B 68A6 5B5F 772F 919A 9761 7CDC 8FF7 8C1C 5F25
7C73 79D8 89C5 6CCC 871C 5BC6 5E42 68C9 7720 7EF5
5195 514D 52C9 5A29 7F05 9762 82D7 63CF 7784 85D0
79D2 6E3A 5E99 5999 8511 706D 6C11 62BF 76BF 654F
60AF 95FD 660E 879F 9E23 94ED 540D 547D 8C2C 6478
6479 8611 6A21 819C 78E8 6469 9B54 62B9 672B 83AB
58A8 9ED8 6CAB 6F20 5BDE 964C 8C0B 725F 67D0 62C7
7261 4EA9 59C6 6BCD 5893 66AE 5E55 52DF 6155 6728
76EE 7766 7267 7A46 62FF 54EA 5450 94A0 90A3 5A1C
7EB3 6C16 4E43 5976 8010 5948 5357 7537 96BE 56CA
6320 8111 607C 95F9 6DD6 5462 9981 5185 5AE9 80FD
59AE 9713 502A 6CE5 5C3C 62DF 4F60 533F 817B 9006
6EBA 852B 62C8 5E74 78BE 64B5 637B 5FF5 5A18 917F
9E1F 5C3F 634F 8042 5B7D 556E 954A 954D 6D85 60A8
67E0 72DE 51DD 5B81 62E7 6CDE 725B 626D 94AE 7EBD
8113 6D53 519C 5F04 5974 52AA 6012 5973 6696 8650
759F 632A 61E6 7CEF 8BFA 54E6 6B27 9E25 6BB4 85D5
5455 5076 6CA4 556A 8DB4 722C 5E15 6015 7436 62CD
6392 724C 5F98 6E43 6D3E 6500 6F58 76D8 78D0 76FC
7554 5224 53DB 4E53 5E9E 65C1 802A 80D6 629B 5486
5228 70AE 888D 8DD1 6CE1 5478 80DA 57F9 88F4 8D54
966A 914D 4F69 6C9B 55B7 76C6 7830 62A8 70F9 6F8E
5F6D 84EC 68DA 787C 7BF7 81A8 670B 9E4F 6367 78B0
576F 7812 9739 6279 62AB 5288 7435 6BD7 5564 813E
75B2 76AE 5339 75DE 50FB 5C41 8B6C 7BC7 504F 7247
9A97 98D8 6F02 74E2 7968 6487 77A5 62FC 9891 8D2B
54C1 8058 4E52 576A 82F9 840D 5E73 51ED 74F6 8BC4
5C4F 5761 6CFC 9887 5A46 7834 9B44 8FEB 7C95 5256
6251 94FA 4EC6 8386 8461 83E9 84B2 57D4 6734 5703
666E 6D66 8C31 66DD 7011 671F 6B3A 6816 621A 59BB
4E03 51C4 6F06 67D2 6C8F 5176 68CB 5947 6B67 7566
5D0E 8110 9F50 65D7 7948 7941 9A91 8D77 5C82 4E5E
4F01 542F 5951 780C 5668 6C14 8FC4 5F03 6C7D 6CE3
8BAB 6390 6070 6D3D 7275 6266 948E 94C5 5343 8FC1
7B7E 4EDF 8C26 4E7E 9ED4 94B1 94B3 524D 6F5C 9063
6D45 8C34 5811 5D4C 6B20 6B49 67AA 545B 8154 7F8C
5899 8537 5F3A 62A2 6A47 9539 6572 6084 6865 77A7
4E54 4FA8 5DE7 9798 64AC 7FD8 5CED 4FCF 7A8D 5207
8304 4E14 602F 7A83 94A6 4FB5 4EB2 79E6 7434 52E4
82B9 64D2 79BD 5BDD 6C81 9752 8F7B 6C22 503E 537F
6E05 64CE 6674 6C30 60C5 9877 8BF7 5E86 743C 7A77
79CB 4E18 90B1 7403 6C42 56DA 914B 6CC5 8D8B 533A
86C6 66F2 8EAF 5C48 9A71 6E20 53D6 5A36 9F8B 8DA3
53BB 5708 98A7 6743 919B 6CC9 5168 75CA 62F3 72AC
5238 529D 7F3A 7094 7638 5374 9E4A 69B7 786E 96C0
88D9 7FA4 7136 71C3 5189 67D3 74E4 58E4 6518 56B7
8BA9 9976 6270 7ED5 60F9 70ED 58EC 4EC1 4EBA 5FCD
97E7 4EFB 8BA4 5203 598A 7EAB 6254 4ECD 65E5 620E
8338 84C9 8363 878D 7194 6EB6 5BB9 7ED2 5197 63C9
67D4 8089 8339 8815 5112 5B7A 5982 8FB1 4E73 6C5D
5165 8925 8F6F 962E 854A 745E 9510 95F0 6DA6 82E5
5F31 6492 6D12 8428 816E 9CC3 585E 8D5B 4E09 53C1
4F1E 6563 6851 55D3 4E27 6414 9A9A 626B 5AC2 745F
8272 6DA9 68EE 50E7 838E 7802 6740 5239 6C99 7EB1
50BB 5565 715E 7B5B 6652 73CA 82EB 6749 5C71 5220
717D 886B 95EA 9655 64C5 8D61 81B3 5584 6C55 6247
7F2E 5892 4F24 5546 8D4F 664C 4E0A 5C1A 88F3 68A2
634E 7A0D 70E7 828D 52FA 97F6 5C11 54E8 90B5 7ECD
5962 8D4A 86C7 820C 820D 8D66 6444 5C04 6151 6D89
793E 8BBE 7837 7533 547B 4F38 8EAB 6DF1 5A20 7EC5
795E 6C88 5BA1 5A76 751A 80BE 614E 6E17 58F0 751F
7525 7272 5347 7EF3 7701 76DB 5269 80DC 5723 5E08
5931 72EE 65BD 6E7F 8BD7 5C38 8671 5341 77F3 62FE
65F6 4EC0 98DF 8680 5B9E 8BC6 53F2 77E2 4F7F 5C4E
9A76 59CB 5F0F 793A 58EB 4E16 67FF 4E8B 62ED 8A93
901D 52BF 662F 55DC 566C 9002 4ED5 4F8D 91CA 9970
6C0F 5E02 6043 5BA4 89C6 8BD5 6536 624B 9996 5B88
5BFF 6388 552E 53D7 7626 517D 852C 67A2 68B3 6B8A
6292 8F93 53D4 8212 6DD1 758F 4E66 8D4E 5B70 719F
85AF 6691 66D9 7F72 8700 9ECD 9F20 5C5E 672F 8FF0
6811 675F 620D 7AD6 5885 5EB6 6570 6F31 6055 5237
800D 6454 8870 7529 5E05 6813 62F4 971C 53CC 723D
8C01 6C34 7761 7A0E 542E 77AC 987A 821C 8BF4 7855
6714 70C1 65AF 6495 5636 601D 79C1 53F8 4E1D 6B7B
8086 5BFA 55E3 56DB 4F3A 4F3C 9972 5DF3 677E 8038
6002 9882 9001 5B8B 8BBC 8BF5 641C 8258 64DE 55FD
82CF 9165 4FD7 7D20 901F 7C9F 50F3 5851 6EAF 5BBF
8BC9 8083 9178 849C 7B97 867D 968B 968F 7EE5 9AD3
788E 5C81 7A57 9042 96A7 795F 5B59 635F 7B0B 84D1
68AD 5506 7F29 7410 7D22 9501 6240 584C 4ED6 5B83
5979 5854 736D 631E 8E4B 8E0F 80CE 82D4 62AC 53F0
6CF0 915E 592A 6001 6C70 574D 644A 8D2A 762B 6EE9
575B 6A80 75F0 6F6D 8C2D 8C08 5766 6BEF 8892 78B3
63A2 53F9 70AD 6C64 5858 642A 5802 68E0 819B 5510
7CD6 5018 8EBA 6DCC 8D9F 70EB 638F 6D9B 6ED4 7EE6
8404 6843 9003 6DD8 9676 8BA8 5957 7279 85E4 817E
75BC 8A8A 68AF 5254 8E22 9511 63D0 9898 8E44 557C
4F53 66FF 568F 60D5 6D95 5243 5C49 5929 6DFB 586B
7530 751C 606C 8214 8146 6311 6761 8FE2 773A 8DF3
8D34 94C1 5E16 5385 542C 70C3 6C40 5EF7 505C 4EAD
5EAD 633A 8247 901A 6850 916E 77B3 540C 94DC 5F64
7AE5 6876 6345 7B52 7EDF 75DB 5077 6295 5934 900F
51F8 79C3 7A81 56FE 5F92 9014 6D82 5C60 571F 5410
5154 6E4D 56E2 63A8 9893 817F 8715 892A 9000 541E
5C6F 81C0 62D6 6258 8131 9E35 9640 9A6E 9A7C 692D
59A5 62D3 553E 6316 54C7 86D9 6D3C 5A03 74E6 889C
6B6A 5916 8C4C 5F2F 6E7E 73A9 987D 4E38 70F7 5B8C
7897 633D 665A 7696 60CB 5B9B 5A49 4E07 8155 6C6A
738B 4EA1 6789 7F51 5F80 65FA 671B 5FD8 5984 5A01
5DCD 5FAE 5371 97E6 8FDD 6845 56F4 552F 60DF 4E3A
6F4D 7EF4 82C7 840E 59D4 4F1F 4F2A 5C3E 7EAC 672A
851A 5473 754F 80C3 5582 9B4F 4F4D 6E2D 8C13 5C09
6170 536B 761F 6E29 868A 6587 95FB 7EB9 543B 7A33
7D0A 95EE 55E1 7FC1 74EE 631D 8717 6DA1 7A9D 6211
65A1 5367 63E1 6C83 5DEB 545C 94A8 4E4C 6C61 8BEC
5C4B 65E0 829C 68A7 543E 5434 6BCB 6B66 4E94 6342
5348 821E 4F0D 4FAE 575E 620A 96FE 6664 7269 52FF
52A1 609F 8BEF 6614 7199 6790 897F 7852 77FD 6670
563B 5438 9521 727A 7A00 606F 5E0C 6089 819D 5915
60DC 7184 70EF 6EAA 6C50 7280 6A84 88AD 5E2D 4E60
5AB3 559C 94E3 6D17 7CFB 9699 620F 7EC6 778E 867E
5323 971E 8F96 6687 5CE1 4FA0 72ED 4E0B 53A6 590F
5413 6380 9528 5148 4ED9 9C9C 7EA4 54B8 8D24 8854
8237 95F2 6D8E 5F26 5ACC 663E 9669 73B0 732E 53BF
817A 9985 7FA1 5BAA 9677 9650 7EBF 76F8 53A2 9576
9999 7BB1 8944 6E58 4E61 7FD4 7965 8BE6 60F3 54CD
4EAB 9879 5DF7 6A61 50CF 5411 8C61 8427 785D 9704
524A 54EE 56A3 9500 6D88 5BB5 6DC6 6653 5C0F 5B5D
6821 8096 5578 7B11 6548 6954 4E9B 6B47 874E 978B
534F 631F 643A 90AA 659C 80C1 8C10 5199 68B0 5378
87F9 61C8 6CC4 6CFB 8C22 5C51 85AA 82AF 950C 6B23
8F9B 65B0 5FFB 5FC3 4FE1 8845 661F 8165 7329 60FA
5174 5211 578B 5F62 90A2 884C 9192 5E78 674F 6027
59D3 5144 51F6 80F8 5308 6C79 96C4 718A 4F11 4FEE
7F9E 673D 55C5 9508 79C0 8896 7EE3 589F 620C 9700
865A 5618 987B 5F90 8BB8 84C4 9157 53D9 65ED 5E8F
755C 6064 7D6E 5A7F 7EEA 7EED 8F69 55A7 5BA3 60AC
65CB 7384 9009 7663 7729 7EDA 9774 859B 5B66 7A74
96EA 8840 52CB 718F 5FAA 65EC 8BE2 5BFB 9A6F 5DE1
6B89 6C5B 8BAD 8BAF 900A 8FC5 538B 62BC 9E26 9E2D
5440 4E2B 82BD 7259 869C 5D16 8859 6DAF 96C5 54D1
4E9A 8BB6 7109 54BD 9609 70DF 6DF9 76D0 4E25 7814
8712 5CA9 5EF6 8A00 989C 960E 708E 6CBF 5944 63A9
773C 884D 6F14 8273 5830 71D5 538C 781A 96C1 5501
5F66 7130 5BB4 8C1A 9A8C 6B83 592E 9E2F 79E7 6768
626C 4F6F 75A1 7F8A 6D0B 9633 6C27 4EF0 75D2 517B
6837 6F3E 9080 8170 5996 7476 6447 5C27 9065 7A91
8C23 59DA 54AC 8200 836F 8981 8000 6930 564E 8036
7237 91CE 51B6 4E5F 9875 6396 4E1A 53F6 66F3 814B
591C 6DB2 4E00 58F9 533B 63D6 94F1 4F9D 4F0A 8863
9890 5937 9057 79FB 4EEA 80F0 7591 6C82 5B9C 59E8
5F5D 6905 8681 501A 5DF2 4E59 77E3 4EE5 827A 6291
6613 9091 5C79 4EBF 5F79 81C6 9038 8084 75AB 4EA6
88D4 610F 6BC5 5FC6 4E49 76CA 6EA2 8BE3 8BAE 8C0A
8BD1 5F02 7FFC 7FCC 7ECE 8335 836B 56E0 6BB7 97F3
9634 59FB 541F 94F6 6DEB 5BC5 996E 5C39 5F15 9690
5370 82F1 6A31 5A74 9E70 5E94 7F28 83B9 8424 8425
8367 8747 8FCE 8D62 76C8 5F71 9896 786C 6620 54DF
62E5 4F63 81C3 75C8 5EB8 96CD 8E0A 86F9 548F 6CF3
6D8C 6C38 607F 52C7 7528 5E7D 4F18 60A0 5FE7 5C24
7531 90AE 94C0 72B9 6CB9 6E38 9149 6709 53CB 53F3
4F51 91C9 8BF1 53C8 5E7C 8FC2 6DE4 4E8E 76C2 6986
865E 611A 8206 4F59 4FDE 903E 9C7C 6109 6E1D 6E14
9685 4E88 5A31 96E8 4E0E 5C7F 79B9 5B87 8BED 7FBD
7389 57DF 828B 90C1 5401 9047 55BB 5CEA 5FA1 6108
6B32 72F1 80B2 8A89 6D74 5BD3 88D5 9884 8C6B 9A6D
9E33 6E0A 51A4 5143 57A3 8881 539F 63F4 8F95 56ED
5458 5706 733F 6E90 7F18 8FDC 82D1 613F 6028 9662
66F0 7EA6 8D8A 8DC3 94A5 5CB3 7CA4 6708 60A6 9605
8018 4E91 90E7 5300 9668 5141 8FD0 8574 915D 6655
97F5 5B55 531D 7838 6742 683D 54C9 707E 5BB0 8F7D
518D 5728 54B1 6512 6682 8D5E 8D43 810F 846C 906D
7CDF 51FF 85FB 67A3 65E9 6FA1 86A4 8E81 566A 9020
7682 7076 71E5 8D23 62E9 5219 6CFD 8D3C 600E 589E
618E 66FE 8D60 624E 55B3 6E23 672D 8F67 94E1 95F8
7728 6805 69A8 548B 4E4D 70B8 8BC8 6458 658B 5B85
7A84 503A 5BE8 77BB 6BE1 8A79 7C98 6CBE 76CF 65A9
8F97 5D2D 5C55 8638 6808 5360 6218 7AD9 6E5B 7EFD
6A1F 7AE0 5F70 6F33 5F20 638C 6DA8 6756 4E08 5E10
8D26 4ED7 80C0 7634 969C 62DB 662D 627E 6CBC 8D75
7167 7F69 5146 8087 53EC 906E 6298 54F2 86F0 8F99
8005 9517 8517 8FD9 6D59 73CD 659F 771F 7504 7827
81FB 8D1E 9488 4FA6 6795 75B9 8BCA 9707 632F 9547
9635 84B8 6323 7741 5F81 72F0 4E89 6014 6574 62EF
6B63 653F 5E27 75C7 90D1 8BC1 829D 679D 652F 5431
8718 77E5 80A2 8102 6C41 4E4B 7EC7 804C 76F4 690D
6B96 6267 503C 4F84 5740 6307 6B62 8DBE 53EA 65E8
7EB8 5FD7 631A 63B7 81F3 81F4 7F6E 5E1C 5CD9 5236
667A 79E9 7A1A 8D28 7099 75D4 6EDE 6CBB 7A92 4E2D
76C5 5FE0 949F 8877 7EC8 79CD 80BF 91CD 4EF2 4F17
821F 5468 5DDE 6D32 8BCC 7CA5 8F74 8098 5E1A 5492
76B1 5B99 663C 9AA4 73E0 682A 86DB 6731 732A 8BF8
8BDB 9010 7AF9 70DB 716E 62C4 77A9 5631 4E3B 8457
67F1 52A9 86C0 8D2E 94F8 7B51 4F4F 6CE8 795D 9A7B
6293 722A 62FD 4E13 7816 8F6C 64B0 8D5A 7BC6 6869
5E84 88C5 5986 649E 58EE 72B6 690E 9525 8FFD 8D58
5760 7F00 8C06 51C6 6349 62D9 5353 684C 7422 8301
914C 5544 7740 707C 6D4A 5179 54A8 8D44 59FF 6ECB
6DC4 5B5C 7D2B 4ED4 7C7D 6ED3 5B50 81EA 6E0D 5B57
9B03 68D5 8E2A 5B97 7EFC 603B 7EB5 90B9 8D70 594F
63CD 79DF 8DB3 5352 65CF 7956 8BC5 963B 7EC4 94BB
7E82 5634 9189 6700 7F6A 5C0A 9075 6628 5DE6 4F50
67DE 505A 4F5C 5750 5EA7 E2D8 E2D9 E2DA E2DB E2DC
4E8D 4E0C 5140 4E10 5EFF 5345 4E15 4E98 4E1E 9B32
5B6C 5669 4E28 79BA 4E3F 5315 4E47 592D 723B 536E
6C10 56DF 80E4 9997 6BD3 777E 9F17 4E36 4E9F 9F10
4E5C 4E69 4E93 8288 5B5B 556C 560F 4EC4 538D 539D
53A3 53A5 53AE 9765 8D5D 531A 53F5 5326 532E 533E
8D5C 5366 5363 5202 5208 520E 522D 5233 523F 5240
524C 525E 5261 525C 84AF 527D 5282 5281 5290 5293
5182 7F54 4EBB 4EC3 4EC9 4EC2 4EE8 4EE1 4EEB 4EDE
4F1B 4EF3 4F22 4F64 4EF5 4F25 4F27 4F09 4F2B 4F5E
4F67 6538 4F5A 4F5D 4F5F 4F57 4F32 4F3D 4F76 4F74
4F91 4F89 4F83 4F8F 4F7E 4F7B 4FAA 4F7C 4FAC 4F94
4FE6 4FE8 4FEA 4FC5 4FDA 4FE3 4FDC 4FD1 4FDF 4FF8
5029 504C 4FF3 502C 500F 502E 502D 4FFE 501C 500C
5025 5028 507E 5043 5055 5048 504E 506C 507B 50A5
50A7 50A9 50BA 50D6 5106 50ED 50EC 50E6 50EE 5107
510B 4EDD 6C3D 4F58 4F65 4FCE 9FA0 6C46 7C74 516E
5DFD 9EC9 9998 5181 5914 52F9 530D 8A07 5310 51EB
5919 5155 4EA0 5156 4EB3 886E 88A4 4EB5 8114 88D2
7980 5B34 8803 7FB8 51AB 51B1 51BD 51BC 51C7 5196
51A2 51A5 8BA0 8BA6 8BA7 8BAA 8BB4 8BB5 8BB7 8BC2
8BC3 8BCB 8BCF 8BCE 8BD2 8BD3 8BD4 8BD6 8BD8 8BD9
8BDC 8BDF 8BE0 8BE4 8BE8 8BE9 8BEE 8BF0 8BF3 8BF6
8BF9 8BFC 8BFF 8C00 8C02 8C04 8C07 8C0C 8C0F 8C11
8C12 8C14 8C15 8C16 8C19 8C1B 8C18 8C1D 8C1F 8C20
8C21 8C25 8C27 8C2A 8C2B 8C2E 8C2F 8C32 8C33 8C35
8C36 5369 537A 961D 9622 9621 9631 962A 963D 963C
9642 9649 9654 965F 9667 966C 9672 9674 9688 968D
9697 96B0 9097 909B 909D 9099 90AC 90A1 90B4 90B3
90B6 90BA 90B8 90B0 90CF 90C5 90BE 90D0 90C4 90C7
90D3 90E6 90E2 90DC 90D7 90DB 90EB 90EF 90FE 9104
9122 911E 9123 9131 912F 9139 9143 9146 520D 5942
52A2 52AC 52AD 52BE 54FF 52D0 52D6 52F0 53DF 71EE
77CD 5EF4 51F5 51FC 9B2F 53B6 5F01 755A 5DEF 574C
57A9 57A1 587E 58BC 58C5 58D1 5729 572C 572A 5733
5739 572E 572F 575C 573B 5742 5769 5785 576B 5786
577C 577B 5768 576D 5776 5773 57AD 57A4 578C 57B2
57CF 57A7 57B4 5793 57A0 57D5 57D8 57DA 57D9 57D2
57B8 57F4 57EF 57F8 57E4 57DD 580B 580D 57FD 57ED
5800 581E 5819 5844 5820 5865 586C 5881 5889 589A
5880 99A8 9F19 61FF 8279 827D 827F 828F 828A 82A8
8284 828E 8291 8297 8299 82AB 82B8 82BE 82B0 82C8
82CA 82E3 8298 82B7 82AE 82CB 82CC 82C1 82A9 82B4
82A1 82AA 829F 82C4 82CE 82A4 82E1 8309 82F7 82E4
830F 8307 82DC 82F4 82D2 82D8 830C 82FB 82D3 8311
831A 8306 8314 8315 82E0 82D5 831C 8351 835B 835C
8308 8392 833C 8334 8331 839B 835E 832F 834F 8347
8343 835F 8340 8317 8360 832D 833A 8333 8366 8365
8368 831B 8369 836C 836A 836D 836E 83B0 8378 83B3
83B4 83A0 83AA 8393 839C 8385 837C 83B6 83A9 837D
83B8 837B 8398 839E 83A8 83BA 83BC 83C1 8401 83E5
83D8 5807 8418 840B 83DD 83FD 83D6 841C 8438 8411
8406 83D4 83DF 840F 8403 83F8 83F9 83EA 83C5 83C0
8426 83F0 83E1 845C 8451 845A 8459 8473 8487 8488
847A 8489 8478 843C 8446 8469 8476 848C 848E 8431
846D 84C1 84CD 84D0 84E6 84BD 84D3 84CA 84BF 84BA
84E0 84A1 84B9 84B4 8497 84E5 84E3 850C 750D 8538
84F0 8539 851F 853A 8556 853B 84FF 84FC 8559 8548
8568 8564 855E 857A 77A2 8543 8572 857B 85A4 85A8
8587 858F 8579 85AE 859C 8585 85B9 85B7 85B0 85D3
85C1 85DC 85FF 8627 8605 8629 8616 863C 5EFE 5F08
593C 5941 8037 5955 595A 5958 530F 5C22 5C25 5C2C
5C34 624C 626A 629F 62BB 62CA 62DA 62D7 62EE 6322
62F6 6339 634B 6343 63AD 63F6 6371 637A 638E 63B4
636D 63AC 638A 6369 63AE 63BC 63F2 63F8 63E0 63FF
63C4 63DE 63CE 6452 63C6 63BE 6445 6441 640B 641B
6420 640C 6426 6421 645E 6484 646D 6496 647A 64B7
64B8 6499 64BA 64C0 64D0 64D7 64E4 64E2 6509 6525
652E 5F0B 5FD2 7519 5F11 535F 53F1 53FD 53E9 53E8
53FB 5412 5416 5406 544B 5452 5453 5454 5456 5443
5421 5457 5459 5423 5432 5482 5494 5477 5471 5464
549A 549B 5484 5476 5466 549D 54D0 54AD 54C2 54B4
54D2 54A7 54A6 54D3 54D4 5472 54A3 54D5 54BB 54BF
54CC 54D9 54DA 54DC 54A9 54AA 54A4 54DD 54CF 54DE
551B 54E7 5520 54FD 5514 54F3 5522 5523 550F 5511
5527 552A 5567 558F 55B5 5549 556D 5541 5555 553F
5550 553C 5537 5556 5575 5576 5577 5533 5530 555C
558B 55D2 5583 55B1 55B9 5588 5581 559F 557E 55D6
5591 557B 55DF 55BD 55BE 5594 5599 55EA 55F7 55C9
561F 55D1 55EB 55EC 55D4 55E6 55DD 55C4 55EF 55E5
55F2 55F3 55CC 55CD 55E8 55F5 55E4 8F94 561E 5608
560C 5601 5624 5623 55FE 5600 5627 562D 5658 5639
5657 562C 564D 5662 5659 565C 564C 5654 5686 5664
5671 566B 567B 567C 5685 5693 56AF 56D4 56D7 56DD
56E1 56F5 56EB 56F9 56FF 5704 570A 5709 571C 5E0F
5E19 5E14 5E11 5E31 5E3B 5E3C 5E37 5E44 5E54 5E5B
5E5E 5E61 5C8C 5C7A 5C8D 5C90 5C96 5C88 5C98 5C99
5C91 5C9A 5C9C 5CB5 5CA2 5CBD 5CAC 5CAB 5CB1 5CA3
5CC1 5CB7 5CC4 5CD2 5CE4 5CCB 5CE5 5D02 5D03 5D27
5D26 5D2E 5D24 5D1E 5D06 5D1B 5D58 5D3E 5D34 5D3D
5D6C 5D5B 5D6F 5D5D 5D6B 5D4B 5D4A 5D69 5D74 5D82
5D99 5D9D 8C73 5DB7 5DC5 5F73 5F77 5F82 5F87 5F89
5F8C 5F95 5F99 5F9C 5FA8 5FAD 5FB5 5FBC 8862 5F61
72AD 72B0 72B4 72B7 72B8 72C3 72C1 72CE 72CD 72D2
72E8 72EF 72E9 72F2 72F4 72F7 7301 72F3 7303 72FA
72FB 7317 7313 7321 730A 731E 731D 7315 7322 7339
7325 732C 7338 7331 7350 734D 7357 7360 736C 736F
737E 821B 5925 98E7 5924 5902 9963 9967 9968 9969
996A 996B 996C 9974 9977 997D 9980 9984 9987 998A
998D 9990 9991 9993 9994 9995 5E80 5E91 5E8B 5E96
5EA5 5EA0 5EB9 5EB5 5EBE 5EB3 8D53 5ED2 5ED1 5EDB
5EE8 5EEA 81BA 5FC4 5FC9 5FD6 5FCF 6003 5FEE 6004
5FE1 5FE4 5FFE 6005 6006 5FEA 5FED 5FF8 6019 6035
6026 601B 600F 600D 6029 602B 600A 603F 6021 6078
6079 607B 607A 6042 606A 607D 6096 609A 60AD 609D
6083 6092 608C 609B 60EC 60BB 60B1 60DD 60D8 60C6
60DA 60B4 6120 6126 6115 6123 60F4 6100 610E 612B
614A 6175 61AC 6194 61A7 61B7 61D4 61F5 5FDD 96B3
95E9 95EB 95F1 95F3 95F5 95F6 95FC 95FE 9603 9604
9606 9608 960A 960B 960C 960D 960F 9612 9615 9616
9617 9619 961A 4E2C 723F 6215 6C35 6C54 6C5C 6C4A
6CA3 6C85 6C90 6C94 6C8C 6C68 6C69 6C74 6C76 6C86
6CA9 6CD0 6CD4 6CAD 6CF7 6CF8 6CF1 6CD7 6CB2 6CE0
6CD6 6CFA 6CEB 6CEE 6CB1 6CD3 6CEF 6CFE 6D39 6D27
6D0C 6D43 6D48 6D07 6D04 6D19 6D0E 6D2B 6D4D 6D2E
6D35 6D1A 6D4F 6D52 6D54 6D33 6D91 6D6F 6D9E 6DA0
6D5E 6D93 6D94 6D5C 6D60 6D7C 6D63 6E1A 6DC7 6DC5
6DDE 6E0E 6DBF 6DE0 6E11 6DE6 6DDD 6DD9 6E16 6DAB
6E0C 6DAE 6E2B 6E6E 6E4E 6E6B 6EB2 6E5F 6E86 6E53
6E54 6E32 6E25 6E44 6EDF 6EB1 6E98 6EE0 6F2D 6EE2
6EA5 6EA7 6EBD 6EBB 6EB7 6ED7 6EB4 6ECF 6E8F 6EC2
6E9F 6F62 6F46 6F47 6F24 6F15 6EF9 6F2F 6F36 6F4B
6F74 6F2A 6F09 6F29 6F89 6F8D 6F8C 6F78 6F72 6F7C
6F7A 6FD1 6FC9 6FA7 6FB9 6FB6 6FC2 6FE1 6FEE 6FDE
6FE0 6FEF 701A 7023 701B 7039 7035 704F 705E 5B80
5B84 5B95 5B93 5BA5 5BB8 752F 9A9E 6434 5BE4 5BEE
8930 5BF0 8E47 8B07 8FB6 8FD3 8FD5 8FE5 8FEE 8FE4
8FE9 8FE6 8FF3 8FE8 9005 9004 900B 9026 9011 900D
9016 9021 9035 9036 902D 902F 9044 9051 9052 9050
9068 9058 9062 905B 66B9 9074 907D 9082 9088 9083
908B 5F50 5F57 5F56 5F58 5C3B 54AB 5C50 5C59 5B71
5C63 5C66 7FBC 5F2A 5F29 5F2D 8274 5F3C 9B3B 5C6E
5981 5983 598D 59A9 59AA 59A3 5997 59CA 59AB 599E
59A4 59D2 59B2 59AF 59D7 59BE 5A05 5A06 59DD 5A08
59E3 59D8 59F9 5A0C 5A09 5A32 5A34 5A11 5A23 5A13
5A40 5A67 5A4A 5A55 5A3C 5A62 5A75 80EC 5AAA 5A9B
5A77 5A7A 5ABE 5AEB 5AB2 5AD2 5AD4 5AB8 5AE0 5AE3
5AF1 5AD6 5AE6 5AD8 5ADC 5B09 5B17 5B16 5B32 5B37
5B40 5C15 5C1C 5B5A 5B65 5B73 5B51 5B53 5B62 9A75
9A77 9A78 9A7A 9A7F 9A7D 9A80 9A81 9A85 9A88 9A8A
9A90 9A92 9A93 9A96 9A98 9A9B 9A9C 9A9D 9A9F 9AA0
9AA2 9AA3 9AA5 9AA7 7E9F 7EA1 7EA3 7EA5 7EA8 7EA9
7EAD 7EB0 7EBE 7EC0 7EC1 7EC2 7EC9 7ECB 7ECC 7ED0
7ED4 7ED7 7EDB 7EE0 7EE1 7EE8 7EEB 7EEE 7EEF 7EF1
7EF2 7F0D 7EF6 7EFA 7EFB 7EFE 7F01 7F02 7F03 7F07
7F08 7F0B 7F0C 7F0F 7F11 7F12 7F17 7F19 7F1C 7F1B
7F1F 7F21 7F22 7F23 7F24 7F25 7F26 7F27 7F2A 7F2B
7F2C 7F2D 7F2F 7F30 7F31 7F32 7F33 7F35 5E7A 757F
5DDB 753E 9095 738E 7391 73AE 73A2 739F 73CF 73C2
73D1 73B7 73B3 73C0 73C9 73C8 73E5 73D9 987C 740A
73E9 73E7 73DE 73BA 73F2 740F 742A 745B 7426 7425
7428 7430 742E 742C 741B 741A 7441 745C 7457 7455
7459 7477 746D 747E 749C 748E 7480 7481 7487 748B
749E 74A8 74A9 7490 74A7 74D2 74BA 97EA 97EB 97EC
674C 6753 675E 6748 6769 67A5 6787 676A 6773 6798
67A7 6775 67A8 679E 67AD 678B 6777 677C 67F0 6809
67D8 680A 67E9 67B0 680C 67D9 67B5 67DA 67B3 67DD
6800 67C3 67B8 67E2 680E 67C1 67FD 6832 6833 6860
6861 684E 6862 6844 6864 6883 681D 6855 6866 6841
6867 6840 683E 684A 6849 6829 68B5 688F 6874 6877
6893 686B 68C2 696E 68FC 691F 6920 68F9 6924 68F0
690B 6901 6957 68E3 6910 6971 6939 6960 6942 695D
6984 696B 6980 6998 6978 6934 69CC 6987 6988 69CE
6989 6966 6963 6979 699B 69A7 69BB 69AB 69AD 69D4
69B1 69C1 69CA 69DF 6995 69E0 698D 69FF 6A2F 69ED
6A17 6A18 6A65 69F2 6A44 6A3E 6AA0 6A50 6A5B 6A35
6A8E 6A79 6A3D 6A28 6A58 6A7C 6A91 6A90 6AA9 6A97
6AAB 7337 7352 6B81 6B82 6B87 6B84 6B92 6B93 6B8D
6B9A 6B9B 6BA1 6BAA 8F6B 8F6D 8F71 8F72 8F73 8F75
8F76 8F78 8F77 8F79 8F7A 8F7C 8F7E 8F81 8F82 8F84
8F87 8F8B 8F8D 8F8E 8F8F 8F98 8F9A 8ECE 620B 6217
621B 621F 6222 6221 6225 6224 622C 81E7 74EF 74F4
74FF 750F 7511 7513 6534 65EE 65EF 65F0 660A 6619
6772 6603 6615 6600 7085 66F7 661D 6634 6631 6636
6635 8006 665F 6654 6641 664F 6656 6661 6657 6677
6684 668C 66A7 669D 66BE 66DB 66DC 66E6 66E9 8D32
8D33 8D36 8D3B 8D3D 8D40 8D45 8D46 8D48 8D49 8D47
8D4D 8D55 8D59 89C7 89CA 89CB 89CC 89CE 89CF 89D0
89D1 726E 729F 725D 7266 726F 727E 727F 7284 728B
728D 728F 7292 6308 6332 63B0 643F 64D8 8004 6BEA
6BF3 6BFD 6BF5 6BF9 6C05 6C07 6C06 6C0D 6C15 6C18
6C19 6C1A 6C21 6C29 6C24 6C2A 6C32 6535 6555 656B
724D 7252 7256 7230 8662 5216 809F 809C 8093 80BC
670A 80BD 80B1 80AB 80AD 80B4 80B7 80E7 80E8 80E9
80EA 80DB 80C2 80C4 80D9 80CD 80D7 6710 80DD 80EB
80F1 80F4 80ED 810D 810E 80F2 80FC 6715 8112 8C5A
8136 811E 812C 8118 8132 8148 814C 8153 8174 8159
815A 8171 8160 8169 817C 817D 816D 8167 584D 5AB5
8188 8182 8191 6ED5 81A3 81AA 81CC 6726 81CA 81BB
81C1 81A6 6B24 6B37 6B39 6B43 6B46 6B59 98D1 98D2
98D3 98D5 98D9 98DA 6BB3 5F40 6BC2 89F3 6590 9F51
6593 65BC 65C6 65C4 65C3 65CC 65CE 65D2 65D6 7080
709C 7096 709D 70BB 70C0 70B7 70AB 70B1 70E8 70CA
7110 7113 7116 712F 7131 7173 715C 7168 7145 7172
714A 7178 717A 7198 71B3 71B5 71A8 71A0 71E0 71D4
71E7 71F9 721D 7228 706C 7118 7166 71B9 623E 623D
6243 6248 6249 793B 7940 7946 7949 795B 795C 7953
795A 7962 7957 7960 796F 7967 797A 7985 798A 799A
79A7 79B3 5FD1 5FD0 603C 605D 605A 6067 6041 6059
6063 60AB 6106 610D 615D 61A9 619D 61CB 61D1 6206
8080 807F 6C93 6CF6 6DFC 77F6 77F8 7800 7809 7817
7818 7811 65AB 782D 781C 781D 7839 783A 783B 781F
783C 7825 782C 7823 7829 784E 786D 7856 7857 7826
7850 7847 784C 786A 789B 7893 789A 7887 789C 78A1
78A3 78B2 78B9 78A5 78D4 78D9 78C9 78EC 78F2 7905
78F4 7913 7924 791E 7934 9F9B 9EF9 9EFB 9EFC 76F1
7704 770D 76F9 7707 7708 771A 7722 7719 772D 7726
7735 7738 7750 7751 7747 7743 775A 7768 7762 7765
777F 778D 777D 7780 778C 7791 779F 77A0 77B0 77B5
77BD 753A 7540 754E 754B 7548 755B 7572 7579 7583
7F58 7F61 7F5F 8A48 7F68 7F74 7F71 7F79 7F81 7F7E
76CD 76E5 8832 9485 9486 9487 948B 948A 948C 948D
948F 9490 9494 9497 9495 949A 949B 949C 94A3 94A4
94AB 94AA 94AD 94AC 94AF 94B0 94B2 94B4 94B6 94B7
94B8 94B9 94BA 94BC 94BD 94BF 94C4 94C8 94C9 94CA
94CB 94CC 94CD 94CE 94D0 94D1 94D2 94D5 94D6 94D7
94D9 94D8 94DB 94DE 94DF 94E0 94E2 94E4 94E5 94E7
94E8 94EA 94E9 94EB 94EE 94EF 94F3 94F4 94F5 94F7
94F9 94FC 94FD 94FF 9503 9502 9506 9507 9509 950A
950D 950E 950F 9512 9513 9514 9515 9516 9518 951B
951D 951E 951F 9522 952A 952B 9529 952C 9531 9532
9534 9536 9537 9538 953C 953E 953F 9542 9535 9544
9545 9546 9549 954C 954E 954F 9552 9553 9554 9556
9557 9558 9559 955B 955E 955F 955D 9561 9562 9564
9565 9566 9567 9568 9569 956A 956B 956C 956F 9571
9572 9573 953A 77E7 77EC 96C9 79D5 79ED 79E3 79EB
7A06 5D47 7A03 7A02 7A1E 7A14 7A39 7A37 7A51 9ECF
99A5 7A70 7688 768E 7693 7699 76A4 74DE 74E0 752C
9E20 9E22 9E28 9E29 9E2A 9E2B 9E2C 9E32 9E31 9E36
9E38 9E37 9E39 9E3A 9E3E 9E41 9E42 9E44 9E46 9E47
9E48 9E49 9E4B 9E4C 9E4E 9E51 9E55 9E57 9E5A 9E5B
9E5C 9E5E 9E63 9E66 9E67 9E68 9E69 9E6A 9E6B 9E6C
9E71 9E6D 9E73 7592 7594 7596 75A0 759D 75AC 75A3
75B3 75B4 75B8 75C4 75B1 75B0 75C3 75C2 75D6 75CD
75E3 75E8 75E6 75E4 75EB 75E7 7603 75F1 75FC 75FF
7610 7600 7605 760C 7617 760A 7625 7618 7615 7619
761B 763C 7622 7620 7640 762D 7630 763F 7635 7643
763E 7633 764D 765E 7654 765C 7656 766B 766F 7FCA
7AE6 7A78 7A79 7A80 7A86 7A88 7A95 7AA6 7AA0 7AAC
7AA8 7AAD 7AB3 8864 8869 8872 887D 887F 8882 88A2
88C6 88B7 88BC 88C9 88E2 88CE 88E3 88E5 88F1 891A
88FC 88E8 88FE 88F0 8921 8919 8913 891B 890A 8934
892B 8936 8941 8966 897B 758B 80E5 76B2 76B4 77DC
8012 8014 8016 801C 8020 8022 8025 8026 8027 8029
8028 8031 800B 8035 8043 8046 804D 8052 8069 8071
8983 9878 9880 9883 9889 988C 988D 988F 9894 989A
989B 989E 989F 98A1 98A2 98A5 98A6 864D 8654 866C
866E 867F 867A 867C 867B 86A8 868D 868B 86AC 869D
86A7 86A3 86AA 8693 86A9 86B6 86C4 86B5 86CE 86B0
86BA 86B1 86AF 86C9 86CF 86B4 86E9 86F1 86F2 86ED
86F3 86D0 8713 86DE 86F4 86DF 86D8 86D1 8703 8707
86F8 8708 870A 870D 8709 8723 873B 871E 8725 872E
871A 873E 8748 8734 8731 8729 8737 873F 8782 8722
877D 877E 877B 8760 8770 874C 876E 878B 8753 8763
877C 8764 8759 8765 8793 87AF 87A8 87D2 87C6 8788
8785 87AD 8797 8783 87AB 87E5 87AC 87B5 87B3 87CB
87D3 87BD 87D1 87C0 87CA 87DB 87EA 87E0 87EE 8816
8813 87FE 880A 881B 8821 8839 883C 7F36 7F42 7F44
7F45 8210 7AFA 7AFD 7B08 7B03 7B04 7B15 7B0A 7B2B
7B0F 7B47 7B38 7B2A 7B19 7B2E 7B31 7B20 7B25 7B24
7B33 7B3E 7B1E 7B58 7B5A 7B45 7B75 7B4C 7B5D 7B60
7B6E 7B7B 7B62 7B72 7B71 7B90 7BA6 7BA7 7BB8 7BAC
7B9D 7BA8 7B85 7BAA 7B9C 7BA2 7BAB 7BB4 7BD1 7BC1
7BCC 7BDD 7BDA 7BE5 7BE6 7BEA 7C0C 7BFE 7BFC 7C0F
7C16 7C0B 7C1F 7C2A 7C26 7C38 7C41 7C40 81FE 8201
8202 8204 81EC 8844 8221 8222 8223 822D 822F 8228
822B 8238 823B 8233 8234 823E 8244 8249 824B 824F
825A 825F 8268 887E 8885 8888 88D8 88DF 895E 7F9D
7F9F 7FA7 7FAF 7FB0 7FB2 7C7C 6549 7C91 7C9D 7C9C
7C9E 7CA2 7CB2 7CBC 7CBD 7CC1 7CC7 7CCC 7CCD 7CC8
7CC5 7CD7 7CE8 826E 66A8 7FBF 7FCE 7FD5 7FE5 7FE1
7FE6 7FE9 7FEE 7FF3 7CF8 7D77 7DA6 7DAE 7E47 7E9B
9EB8 9EB4 8D73 8D84 8D94 8D91 8DB1 8D67 8D6D 8C47
8C49 914A 9150 914E 914F 9164 9162 9161 9170 9169
916F 917D 917E 9172 9174 9179 918C 9185 9190 918D
9191 91A2 91A3 91AA 91AD 91AE 91AF 91B5 91B4 91BA
8C55 9E7E 8DB8 8DEB 8E05 8E59 8E69 8DB5 8DBF 8DBC
8DBA 8DC4 8DD6 8DD7 8DDA 8DDE 8DCE 8DCF 8DDB 8DC6
8DEC 8DF7 8DF8 8DE3 8DF9 8DFB 8DE4 8E09 8DFD 8E14
8E1D 8E1F 8E2C 8E2E 8E23 8E2F 8E3A 8E40 8E39 8E35
8E3D 8E31 8E49 8E41 8E42 8E51 8E52 8E4A 8E70 8E76
8E7C 8E6F 8E74 8E85 8E8F 8E94 8E90 8E9C 8E9E 8C78
8C82 8C8A 8C85 8C98 8C94 659B 89D6 89DE 89DA 89DC
89E5 89EB 89EF 8A3E 8B26 9753 96E9 96F3 96EF 9706
9701 9708 970F 970E 972A 972D 9730 973E 9F80 9F83
9F85 9F86 9F87 9F88 9F89 9F8A 9F8C 9EFE 9F0B 9F0D
96B9 96BC 96BD 96CE 96D2 77BF 96E0 928E 92AE 92C8
933E 936A 93CA 938F 943E 946B 9C7F 9C82 9C85 9C86
9C87 9C88 7A23 9C8B 9C8E 9C90 9C91 9C92 9C94 9C95
9C9A 9C9B 9C9E 9C9F 9CA0 9CA1 9CA2 9CA3 9CA5 9CA6
9CA7 9CA8 9CA9 9CAB 9CAD 9CAE 9CB0 9CB1 9CB2 9CB3
9CB4 9CB5 9CB6 9CB7 9CBA 9CBB 9CBC 9CBD 9CC4 9CC5
9CC6 9CC7 9CCA 9CCB 9CCC 9CCD 9CCE 9CCF 9CD0 9CD3
9CD4 9CD5 9CD7 9CD8 9CD9 9CDC 9CDD 9CDF 9CE2 977C
9785 9791 9792 9794 97AF 97AB 97A3 97B2 97B4 9AB1
9AB0 9AB7 9E58 9AB6 9ABA 9ABC 9AC1 9AC0 9AC5 9AC2
9ACB 9ACC 9AD1 9B45 9B43 9B47 9B49 9B48 9B4D 9B51
98E8 990D 992E 9955 9954 9ADF 9AE1 9AE6 9AEF 9AEB
9AFB 9AED 9AF9 9B08 9B0F 9B13 9B1F 9B23 9EBD 9EBE
7E3B 9E82 9E87 9E88 9E8B 9E92 93D6 9E9D 9E9F 9EDB
9EDC 9EDD 9EE0 9EDF 9EE2 9EE9 9EE7 9EE5 9EEA 9EEF
9F22 9F2C 9F2F 9F39 9F37 9F3D 9F3E 9F44
__END__
=head1 NAME
Unicode::Collate::CJK::GB2312 - weighting CJK Unified Ideographs
for Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate;
use Unicode::Collate::CJK::GB2312;
my $collator = Unicode::Collate->new(
overrideCJK => \&Unicode::Collate::CJK::GB2312::weightGB2312
);
=head1 DESCRIPTION
C<Unicode::Collate::CJK::GB2312> provides C<weightGB2312()>,
that is adequate for C<overrideCJK> of C<Unicode::Collate>
and makes tailoring of CJK Unified Ideographs in the order
of CLDR's gb2312han ordering.
=head1 CAVEAT
The gb2312han ordering includes 5 code points in private use area
(E2D8..E2DC), that can't utilize C<weightGB2312()> for collation.
For them, use C<entry> instead.
=head1 SEE ALSO
=over 4
=item CLDR - Unicode Common Locale Data Repository
L<http://cldr.unicode.org/>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=item L<Unicode::Collate>
=item L<Unicode::Collate::Locale>
=back
=cut
Unicode/Collate/CJK/Stroke.pm 0000644 00000355425 15033552504 0011751 0 ustar 00 package Unicode::Collate::CJK::Stroke;
use 5.006;
use strict;
use warnings;
our $VERSION = '1.25';
my %u2p;
my $wt = 0x8000;
while (<DATA>) {
last if /^__END__/;
my @c = split;
for my $c (@c) {
next if !$c;
$u2p{hex($c)} = $wt if $c !~ /-/;
$wt++;
}
}
sub weightStroke {
my $u = shift;
return exists $u2p{$u} ? $u2p{$u} : undef;
}
1;
__DATA__
FDD0-2801
4E00 4E28 4E36 4E3F 4E40 4E41 2E84 4E59 4E5A 4E5B
200CA 200CB 200CC 200CD 200D1 4E85 2010C 3006 3007 3021
3025 303B
FDD0-2802
4E01 4E02 4E03 4E04 4E05 4E06 4E29 4E37 4E42 4E43
4E44 20086 20087 2008A 4E5C 4E5D 4E86 2010E 4E8C 4EA0
4EBA 4EBB 513F 5165 516B 2E86 5182 5196 51AB 2E87
51E0 51F5 2E88 5200 5201 5202 529B 52F9 5315 531A
5338 5341 2E8A 535C 5369 5382 53B6 2E80 53C8 5DDC
8BA0 2ECF 2ED6 28E0F 3022 3024 3026
FDD0-2803
4E07 4E08 4E09 4E0A 4E0B 4E0C 4E90 5344 3404 4E2A
4E2B 4E38 4E49 4E45 4E46 4E47 4E48 4E4A 4E5E 4E5F
4E60 4E87 4E8D 4E8E 4E8F 4EA1 4EBC 4EBD 4EBE 4EBF
5140 5166 51E1 51E2 51E3 5203 5204 529C 52FA 5342
5343 353E 536A 536B 53C9 53E3 56D7 571F 58EB 5902
590A 5915 5927 5928 5973 5B50 5B51 5B52 5B53 5B80
5BF8 2E8C 2E8D 5C0F 5C22 21BC1 21BC2 5C38 5C6E 5C71
5DDB 5DDD 21FE8 5DE5 5DF1 5DF2 5DF3 5DFE 5E72 4E61
5E7A 5E7F 5EF4 5EFE 5F0B 5F13 2E95 5F50 5F51 5F61
5F73 5FC4 624C 624D 6C35 72AD 7E9F 2EBE 8279 2ECC
95E8 961D 98DE 9963 9A6C 3005 3023 3027
FDD0-2804
4E0D 4E0E 4E0F 4E10 4E11 4E12 4E13 4E2D 4E2E 4E2F
4E30 4E39 4E3A 4E4B 4E4C 5C39 4E63 4E64 4E65 4E66
4E88 4E91 4E92 4E93 4E94 4E95 4E96 4EA2 4EA3 4EC0
4EC1 4EC2 4EC3 4EC4 4EC5 4EC6 4EC7 4EC8 4EC9 4ECA
4ECB 4ECC 4ECD 4ECE 4ECF 4ED0 4ED1 4ED2 4ED3 5141
5142 5143 5167 516C 516D 516E 516F 5183 5184 5185
5186 5187 5188 34C1 5197 5198 51E4 20630 51F6 20676
5205 5206 5207 5208 529D 529E 52FB 52FC 52FD 52FE
52FF 5300 5301 5302 352B 5316 5339 533A 3539 5345
5346 5347 5348 535D 535E 536C 5383 5384 5385 5386
53B7 53B8 53B9 53CA 53CB 53CC 53CD 53CE 5720 5721
2123C 58EC 5903 5929 592A 592B 592C 592D 5B54 5C10
5C11 5C23 5C24 5C3A 5C6F 4E62 5C72 5DF4
5DFF 5E00 5E01 5E7B 5EFF 5F00 5F0C 5F14 5F15 5F16
5FC3 5FC6 6208 6236 6237 6238 624B 624E 22A66 652F
6534 6535 6587 6597 65A4 65B9 65E0 65E1 2E9C 65E5
66F0 2E9D 6708 6728 6729 233B4 6B20 6B62 6B79 6BB3
6BCB 6BCC 6BD4 6BDB 6C0F 6C14 6C34 706B 706C 2EA5
722A 722B 7236 723B 4E2C 723F 7247 3E26 7259 2EA7
725B 725C 72AC 738B 248E9 793B 25605 7F53 8002 8080
2EBC 89C1 8BA1 8BA2 8BA3 8BA4 8BA5 8D1D 8F66 2ECD
8FB6 95E9 97E6 98CE 3028 3029
FDD0-2805
4E17 3400 4E14 4E15 4E16 4E18 4E19 4E1A 4E1B 4E1C
4E1D 4E31 4E3B 4E3C 4E4D 4E4E 4E4F 4E50 20094 4E67
4E97 3430 3431 3432 3433 3434 3435 3436 3437 4ED4
4ED5 4ED6 4ED7 4ED8 4ED9 4EDA 4EDB 4EDC 4EDD 4EDE
4EDF 4EE0 4EE1 4EE2 4EE3 4EE4 4EE5 4EE6 4EE7 4EE8
4EE9 4EEA 4EEB 4EEC 4EED 201A9 201AB 5144 5145 34B0
5170 5189 518A 518B 518C 20547 5199 519A 51AC 51AD
51AE 51AF 51E5 51E6 51E7 51F7 51F8 51F9 51FA 51FB
5209 520A 520B 520C 520D 529F 52A0 52A1 52A2 5303
5304 5305 5306 5307 5317 531B 531C 531D 531E 5349
534A 534C 535F 5360 5361 5362 536D 536E 536F 20A11
5387 5388 5389 53BA 53BB 53BC 53CF 53D0 53D1 53E4
53E5 53E6 53E7 53E8 53E9 53EA 53EB 53EC
53ED 53EE 53EF 53F0 53F1 53F2 53F3 53F4 53F5 53F6
53F7 53F8 53F9 53FA 53FB 53FC 53FD 53FE 20BA8 20BA9
56D8 56D9 56DA 56DB 56DC 3626 5722 5723 5724 5725
5726 5727 58ED 5904 5916 5917 5918 592E 592F 5930
5931 5932 5933 5934 5974 5975 5976 5B55 5B81 5B82
5B83 5B84 5BF9 5C12 5C13 5C14 5C15 5C3B 5C3C 5C73
5C74 5C75 5C76 5C77 5DE6 5DE7 5DE8 3832 3833 5E02
5E03 5E04 5E05 5E73 5E7C 5E80 5E81 5E82 5E83 5F01
5F0D 5F17 5F18 5F52 38FA 5FC5 5FC7 5FC9 5FCA 225AF
6209 620A 620B 6239 6250 6251 6252 6253 6254 6255
6256 624F 65A5 65E6 65E7 2313D 66F1 672A 672B 672C
672D 672E 672F 6730 6B63 6B7A 6BCD 6C10 6C11 6C15
6C3A 6C36 6C37 6C38 6C39 6C3B 6C3E 6C3F
6C40 6C41 6C43 6C44 6C45 6C47 6C48 6C49 706D 72AE
72AF 72B0 7384 7389 738A 738C 738D 74DC 74E6 7518
751F 7528 7529 7530 7531 7532 7533 7534 7535 2EAA
758B 24D13 7592 7676 767D 76AE 76BF 76EE 77DB 77E2
77F3 2EAC 793A 79B8 79BE 7A74 7ACB 7EA0 7F52 2626A
2626B 808A 827A 8864 27607 8BA6 8BA7 8BA8 8BA9 8BAA
8BAB 8BAC 8BAD 8BAE 8BAF 8BB0 8BB1 8F67 8FB7 9092
9093 9485 957F 95EA 961E 961F 9964 9965 9A6D 9E1F
9F99
FDD0-2806
3401 4E1E 4E1F 4E20 4E21 4E22 4E51 4E52 4E53 4E54
4E68 4E69 4E6A 4E6B 4E6C 4E6D 4E6E 4E6F 4E70 4E89
4E98 4E99 4E9A 342B 4EA4 4EA5 4EA6 4EA7 3438 3439
343B 343F 3440 4EEE 4EEF 4EF0 4EF1 4EF2 4EF3 4EF4
4EF5 4EF6 4EF7 4EF8 4EF9 4EFA 4EFB 4EFC 4EFD 4EFE
4EFF 4F00 4F01 4F02 4F03 4F04 4F05 4F06 4F07 4F08
4F09 4F0A 4F0B 4F0C 4F0D 4F0E 4F0F 4F10 4F11 4F12
4F13 4F14 4F15 4F16 4F17 4F18 4F19 4F1A 4F1B 4F1C
4F1D 4F1E 4F1F 4F20 4F21 4F22 4F23 4F24 4F25 4F26
4F27 4F28 4F29 4F2A 4F2B 4F2C 4F64 201C1 201D4 5146
5147 5148 5149 514A 5168 6C3D 5171 5172 5173 5174
518D 518E 519B 519C 51B0 51B1 51B2 51B3 51B4 205B3
51E8 51E9 51EA 51EB 51FC 520E 520F 5210
5211 5212 5213 5214 5215 5216 5217 5218 5219 521A
521B 52A3 52A4 52A5 52A6 52A7 52A8 5308 531F 5320
5321 5322 353B 534B 534D 534E 534F 5350 5370 5371
3542 538A 538B 538C 538D 53BD 53BE 53D2 3566 53FF
5400 5401 5402 5403 5404 5405 5406 5407 5408 5409
540A 540B 540C 540D 540E 540F 5410 5411 5412 5413
5414 5415 5416 5417 20BBF 20BC6 56DD 56DE 56DF 56E0
56E1 56E2 56E3 5728 5729 572A 572B 572C 572D 572E
572F 5730 5731 5732 5733 5734 5735 5736 5737 5738
5739 573A 2124F 58EE 5905 5919 591A 591B 5935 5936
5937 5938 5939 593A 593B 593C 36A5 5977 5978 5979
597A 597B 597C 597D 597E 597F 5980 5981 5982 5983
5984 5985 5986 5987 5988 216B8 216BA 5B56
5B57 5B58 5B59 21944 5B85 5B86 5B87 5B88 5B89 5BFA
5BFB 5BFC 5C16 5C17 5C18 5C25 5C26 5C27 5C3D 21C2A
5C70 5C78 5C79 5C7A 5C7B 5C7C 5C7D 5C7E 5C7F 5C80
5C81 5C82 5C83 21D46 5DDE 5DDF 5DE9 5DEA 3834 3835
3836 5E06 5E07 5E08 5E74 5E75 5E76 5E84 5E85 5E86
5EF5 5F02 5F0E 5F0F 5F10 5F19 5F1A 5F1B 5F1C 5F53
5F74 5F75 5FC8 5FCB 5FCF 5FD3 5FD4 5FD5 5FD6 5FD9
5FDA 5FDB 225BE 620C 620D 620E 620F 6210 6257 6258
6259 625A 625B 625C 625D 625E 6260 6261 6262 6263
6264 6265 6266 6267 6268 6269 626A 626B 626C 625F
6530 6536 6537 65E8 65E9 65EA 65EB 65EC 65ED 65EE
65EF 3B30 66F2 66F3 6709 3B41 6731 6732 6733 6734
6735 6736 6737 6738 6739 673A 673B 673C
673D 673E 673F 6740 6741 6742 6743 6B21 6B22 6B64
6B7B 6BCE 6BD5 6C12 6C16 6C17 6C18 6C3C 6C46 6C4A
6C4B 6C4C 6C4D 6C4E 6C4F 6C50 6C51 6C52 6C53 6C54
6C55 6C57 6C58 6C59 6C5A 6C5B 6C5C 6C5D 6C5F 6C60
6C61 6C62 6C63 6C64 6C77 706E 706F 7070 7071 7072
7073 7237 725D 725E 725F 72B1 72B2 72B3 72B4 72B5
72B7 72B8 24725 3EA8 3EA9 3EAA 738E 738F 7390 7391
752A 7536 767E 767F 2EAE 793C 7A75 7AF9 7C73 7CF8
7CF9 7EA1 7EA2 7EA3 7EA4 7EA5 7EA6 7EA7 7EA8 7EA9
7EAA 7EAB 7F36 7F51 2EB6 7F8A 2634B 2634C 7FBD 8001
8003 800C 8012 8033 807F 26612 8089 808B 808C 808D
808E 81E3 81EA 81F3 81FC 26951 820C 821B 821F 826E
8272 8278 827B 827C 827D 827E 827F 8280
8281 8282 864D 866B 8840 884C 8863 897E 897F 8980
89C2 8BB2 8BB3 8BB4 8BB5 8BB6 8BB7 8BB8 8BB9 8BBA
8BBB 8BBC 8BBD 8BBE 8BBF 8BC0 8D1E 8D1F 8D20 8D71
8F68 8FB8 8FB9 8FBA 8FBB 8FBC 8FBD 9094 9096 9097
9098 9099 909A 909B 909C 909D 9486 9487 95EB 95EC
95ED 95EE 95EF 9620 9621 9622 9623 9624 9875 9966
9967 9A6E 9A6F 9A70 9F50
FDD0-2807
4E23 4E24 4E25 4E3D 20021 4E32 20068 4E55 4E71 4E72
4E8A 20118 4E9C 4EA8 4EA9 4EAA 3446 4F2D 4F2E 4F2F
4F30 4F31 4F32 4F33 4F34 4F35 4F36 4F37 4F38 4F39
4F3A 4F3B 4F3C 4F3D 4F3E 4F3F 4F40 4F41 4F42 4F43
4F44 4F45 4F46 4F47 4F48 4F49 4F4A 4F4B 4F4D 4F4E
4F4F 4F50 4F51 4F52 4F53 4F54 4F55 4F56 4F57 4F58
4F59 4F5A 4F5B 4F5C 4F5D 4F5E 4F5F 4F60 4F61 4F62
4F63 4F65 4F66 4F67 4F68 201F2 514B 514C 514D 514E
514F 5150 5151 34B3 5175 518F 519D 34C8 51B5 51B6
51B7 51B8 51B9 51BA 51BB 51EC 34DF 521C 521D 521E
521F 5220 5221 5222 5223 5224 5225 5226 5227 5228
5229 522A 522B 522C 522D 52A9 52AA 52AB 52AC 52AD
52AE 52AF 52B0 52B1 52B2 52B3 52B4 5309
208D5 3530 5323 5324 5325 3537 533B 5363 5364 5372
5373 5374 5375 538E 538F 5390 5391 53BF 53D3 356D
3570 3572 5418 5419 541A 541B 541C 541D 541E 541F
5420 5421 5422 5423 5424 5425 5426 5427 5428 5429
542A 542B 542C 542D 542E 542F 5430 5431 5432 5433
5434 5435 5436 5437 5438 5439 543A 543B 543C 543D
543E 543F 5440 5441 5442 5443 5444 5445 5446 5447
5448 5449 544A 544B 544C 544D 544E 544F 5450 5451
5452 5453 5454 5455 5456 5457 5458 5459 545A 545B
545C 20BCB 20BE2 20BEB 20BFB 20BFF 56E4 56E5 56E6 56E7
56E8 56E9 56EA 56EB 56EC 56ED 56EE 56EF 56F0 56F1
56F2 56F3 56F4 56F5 3629 362B 362D 362E 3630 573B
573C 573D 573E 573F 5740 5741 5742 5743
5744 5745 5746 5747 5748 5749 574A 574B 574C 574D
574E 574F 5750 5751 5752 5753 5754 5755 5756 5757
5758 5759 575A 575B 575C 575D 575E 575F 5760 2127C
58EF 58F0 58F1 58F2 58F3 5906 590B 593D 593E 593F
5940 5941 5942 36AA 36AC 5989 598A 598B 598C 598E
598F 5990 5991 5992 5993 5994 5995 5996 5997 5998
5999 599A 599B 599C 599D 599E 599F 59A0 59A1 59A2
59A3 59A4 59A5 59A6 59A7 59A8 59A9 59AA 59AB 216C0
216C1 216C2 216D3 216D5 5B5A 5B5B 5B5C 5B5D 5B5E 5B8A
5B8B 5B8C 5B8D 5B8E 5B8F 5B90 5B91 5B92 5BFD 5BFE
5BFF 5C28 5C29 5C2A 5C2B 5C2C 5C3E 5C3F 5C40 5C41
5C42 5C43 5C84 5C85 5C86 5C87 5C88 5C89 5C8A 5C8B
5C8C 5C8E 5C8F 5C90 5C91 5C92 5C93 5C94
5C95 5C96 5C97 5C98 5C99 5C9A 5C9B 5C9C 5C8D 5DE0
5DEB 5DF5 3837 3838 3839 383B 5E09 5E0A 5E0B 5E0C
5E0D 5E0E 5E0F 5E10 5E87 5E88 5E89 5E8A 5E8B 5E8C
5E8D 5E8E 5E8F 5E90 5E91 5E92 5E93 5E94 5EF7 5F03
5F04 5F05 5F1D 5F1E 5F1F 5F20 223BD 5F62 5F63 5F64
5F76 5F77 5F78 5F79 5F7A 5F7B 3900 5FCC 5FCD 5FCE
5FD0 5FD1 5FD2 5FD7 5FD8 5FDC 3908 5FDF 5FE1 5FE3
5FE4 5FE6 5FE7 5FE8 5FEA 5FEB 5FEC 5FED 5FEE 5FEF
5FF0 5FF1 5FF2 5FF3 5FF4 5FF6 5FF7 5FF8 5FF9 5FFA
5FFB 5FFC 5FFE 6000 6003 6004 6005 6006 6211 6212
6213 22993 623A 623B 623C 39D1 626D 626E 626F 6270
6271 6272 6273 6274 6275 6276 6277 6279 627A 627B
627C 627D 627E 6280 6281 6282 6283 6284
6285 6286 6287 6288 6289 628A 628B 628C 628D 628E
628F 6290 6291 6292 6293 6294 6295 6296 6297 6298
6299 629A 629B 629C 629D 629E 629F 62A0 62A1 62A2
62A3 62A4 62A5 6278 6538 6539 653A 653B 653C 22EEF
6588 6598 65F0 65F1 65F2 65F3 65F4 65F5 65F6 65F7
65F8 66F4 66F5 3B42 3B43 3B44 3B45 3B46 6744 6745
6746 6747 6748 6749 674A 674B 674C 674D 674E 674F
6750 6751 6752 6753 6754 6755 6756 6757 6758 6759
675A 675B 675C 675D 675E 675F 6760 6761 6762 6763
6764 6765 6766 6767 6768 6769 6781 233CC 6B24 3C50
6B65 6B7C 239C2 6BCF 6BD0 23AEE 6BDC 6BDD 6C19 6C1A
6C42 6C56 6C5E 6C65 6C66 6C67 6C68 6C69 6C6A 6C6B
6C6D 6C6E 6C6F 6C70 6C71 6C72 6C73 6C74
6C75 6C76 6C78 6C79 6C7A 6C7B 6C7C 6C7D 6C7E 6C7F
6C81 6C82 6C83 6C84 6C85 6C86 6C87 6C88 6C89 6C8B
6C8C 6C8D 6C8E 6C8F 6C90 6C91 6C92 6C94 6C95 6C96
6C98 6C99 6C9A 6C9B 6C9C 6C9E 6C9F 6CA0 6CA1 6CA2
6CA3 6CA4 6CA5 6CA6 6CA7 6CA8 6CA9 6CAA 23C99 23C9A
23C9B 3DA5 7074 7075 7076 7077 7078 7079 707A 707B
707C 707D 707E 707F 7080 7260 7261 7262 7263 7264
24618 72B6 72B9 72BA 72BB 72BC 72BD 72BE 72BF 72C1
72C2 72C3 72C4 72C5 72C6 72C7 72C8 2472F 3EAD 7392
7393 7394 7395 7396 7397 7398 7399 739A 739B 248F0
248F1 248F2 248F3 74E7 752B 752C 3F55 7537 7538 7539
753A 753C 7593 7594 7595 7596 7597 7680 7681 7682
7683 76C0 76C1 76EF 77E3 77F4 77F5 77F6
25419 793D 4126 79BF 79C0 79C1 79C2 79C3 7A76 7A77
7ACC 7ACD 7CFA 7CFB 7EB6 7EAC 7EAD 7EAE 7EAF 7EB0
7EB1 7EB2 7EB3 7EB4 7EB5 7EB7 7EB8 7EB9 7EBA 7EBB
7EBC 7EBD 7EBE 7F55 8034 8090 8091 8092 8093 8094
8095 8096 8097 8098 8099 809A 809B 809C 809D 809E
809F 80A0 81EB 826F 8283 8284 8285 8286 8287 8288
8289 828A 828B 828C 828D 828E 828F 8290 8291 8292
8293 8295 8296 8297 26B05 26B0A 866C 2760C 898B 89C3
2EC6 89D2 278B2 8A00 8A01 8BC1 8BC2 8BC3 8BC4 8BC5
8BC6 8BC7 8BC8 8BC9 8BCA 8BCB 8BCC 8BCD 8BCE 8BCF
8BD0 8BD1 8BD2 8C37 8C46 8C55 8C78 8C9D 8D21 8D22
8D64 8D70 2ECA 8DB3 8EAB 8ECA 8F69 8F6A 8F6B 8F9B
8FB0 8FB5 5DE1 8FBE 8FBF 8FC0 8FC1 8FC2
8FC3 8FC4 8FC5 8FC6 8FC7 8FC8 8FC9 28468 2846C 28473
9091 909E 909F 90A0 90A1 90A2 90A3 90A4 90A5 90A6
90A7 90A8 90A9 90AA 90AC 286AA 286AB 9149 91C6 91CC
9488 9489 948A 948B 948C 95F0 95F1 95F2 95F3 95F4
95F5 95F6 95F7 9625 9626 9627 9628 9629 962A 962B
962C 962D 962E 962F 9630 9631 9632 9633 9634 9635
9636 28E36 28E39 97E7 98CF 9968 9969 996A 996B 996C
996D 996E 9A71 9A72 9A73 9A74 9E20 9E21 9EA6 9F9F
FDD0-2808
4E26 4E27 4E33 4E56 4E73 4E74 4E75 4E76 4E77 4E78
200EE 4E8B 4E9B 4E9D 4E9E 4E9F 342D 4EAB 4EAC 4F4C
344C 3450 4F69 4F6A 4F6B 4F6C 4F6D 4F6E 4F6F 4F70
4F71 4F72 4F73 4F74 4F75 4F76 4F77 4F78 4F79 4F7A
4F7B 4F7C 4F7D 4F7E 4F7F 4F80 4F81 4F82 4F83 4F84
4F85 4F86 4F87 4F88 4F89 4F8A 4F8B 4F8C 4F8D 4F8E
4F8F 4F90 4F91 4F92 4F93 4F94 4F95 4F96 4F97 4F98
4F99 4F9A 4F9B 4F9C 4F9D 4F9E 4F9F 4FA0 4FA1 4FA2
4FA3 4FA4 4FA5 4FA6 4FA7 4FA8 4FA9 4FAA 4FAB 4FAC
4FAD 20204 2020C 20214 5152 5153 5154 5155 5156 20487
5169 5176 5177 5178 5190 519E 51BC 51BD 51BE 51BF
51C0 205C3 51ED 51EE 51EF 51FD 34E4 522E 522F 5230
5231 5232 5233 5234 5235 5236 5237 5238
5239 523A 523B 523C 523D 523E 523F 5240 5241 5242
2070E 5246 351A 52B5 52B6 52B7 52B8 52B9 52BA 52BB
52BC 52BD 52BE 52BF 52C6 530A 530B 530C 20916 5326
533C 5351 5352 5353 5354 5355 5356 5365 5366 5367
209E7 5376 5377 5378 5379 537A 5392 5393 5394 5395
20A50 53C0 53C1 53C2 53D4 53D5 53D6 53D7 53D8 3577
3578 545D 545E 545F 5460 5461 5462 5463 5464 5465
5466 5467 5468 5469 546A 546B 546C 546D 546E 546F
5471 5473 5474 5475 5476 5477 5478 5479 547A 547B
547C 547D 547E 547F 5480 5481 5482 5483 5484 5485
5486 5487 5488 5489 548A 548B 548C 548D 548E 548F
5490 5491 5492 5493 5494 5495 5496 5497 5498 5499
549A 549B 549C 549D 20C0B 20C0D 20C20 20C34
20C3A 20C3B 20C41 20C42 20C43 3620 56F6 56F7 56F8 56F9
56FA 56FB 56FC 56FD 56FE 3631 3632 3633 3634 3635
5761 5762 5763 5764 5765 5766 5767 5768 5769 576A
576B 576C 576D 576E 576F 5770 5771 5772 5773 5774
5775 5776 5777 5778 5779 577A 577B 577C 577D 577E
577F 5780 5781 5782 5783 5784 5785 5786 5787 5788
5789 578A 212A8 212A9 212B0 5907 590C 591C 591D 5943
5944 5945 5946 5947 5948 5949 594B 594C 594D 2160A
5954 36B0 36B1 36B5 36B9 36BC 36C1 59AC 59AD 59AE
59AF 59B0 59B1 59B2 59B3 59B4 59B5 59B6 59B7 59B8
59B9 59BA 59BB 59BC 59BD 59BE 59BF 59C0 59C1 59C2
59C3 59C4 59C5 59C6 59C7 59C8 59C9 59CA 59CB 59CC
59CD 59CE 59CF 59D0 59D1 59D2 59D3 59D4
59D6 59D7 216DF 216E6 216E7 216E8 216FA 216FB 216FC 216FE
3740 5B5F 5B60 5B61 5B62 5B63 5B64 5B65 5B66 5B67
21958 5B93 5B94 5B95 5B96 5B97 5B98 5B99 5B9A 5B9B
5B9C 5B9D 5B9E 5B9F 5BA0 5BA1 219DB 5C00 5C19 5C1A
5C2D 5C44 5C45 5C46 5C47 5C48 5C49 5C4A 37B9 37BE
5C9D 5C9E 5C9F 5CA0 5CA1 5CA2 5CA3 5CA4 5CA5 5CA6
5CA7 5CA8 5CA9 5CAA 5CAB 5CAC 5CAD 5CAE 5CAF 5CB0
5CB1 5CB2 5CB3 5CB4 5CB5 5CB6 5CB7 5CB8 5CB9 5CBA
5CBB 5CBC 5CBD 5CBE 5CBF 5CC0 5CC1 5CC2 5CC3 5CC4
5CC5 21D90 3830 5DF6 5E11 5E12 5E13 5E14 5E15 5E16
5E17 5E18 5E19 5E1A 5E1B 5E1C 2207E 5E77 5E78 5E98
5E95 5E96 5E97 5E99 5E9A 5E9C 5E9D 5E9E 5E9F 5EF6
38A0 5EF8 5EF9 5F06 5F21 5F22 5F23 5F24
5F25 5F26 5F27 5F28 5F29 5F2A 223D0 5F54 5F55 38CC
2248B 5F7C 5F7D 5F7E 5F7F 5F80 5F81 5F82 5F83 5F84
5FDD 5FDE 5FE0 5FE2 5FE5 5FE9 5FF5 5FFD 5FFF 6001
6002 3914 6007 6008 6009 600A 600B 600C 600D 600F
6010 6011 6013 6014 6015 6016 6017 6019 601A 601B
601C 601E 601F 6021 6022 6026 6027 6029 602A 602B
602C 602D 602E 602F 6030 6032 6033 6034 6035 6036
603A 603D 603E 603F 2261B 2261C 2262B 6214 6215 6216
6217 623D 623E 623F 6240 627F 39D4 39D5 39D9 39DA
39DC 39DD 39DE 39DF 62A6 62A7 62A8 62A9 62AA 62AB
62AC 62AD 62AE 62AF 62B0 62B1 62B2 62B3 62B4 62B5
62B6 62B7 62B8 62B9 62BA 62BB 62BC 62BD 62BE 62BF
62C0 62C1 62C2 62C3 62C4 62C5 62C6 62C7
62C8 62C9 62CA 62CB 62CC 62CD 62CE 62D0 62D1 62D2
62D3 62D4 62D5 62D6 62D7 62D8 62D9 62DA 62DB 62DD
62DE 62DF 62E0 62E1 62E2 62E3 62E4 62E5 62E6 62E7
62E8 62E9 22ACF 22AD5 3A81 653D 653E 6589 23044 65A6
65A7 65A8 65A9 65BA 65BB 65BC 230DA 65F9 65FA 65FB
65FC 65FD 65FE 65FF 6600 6601 6602 6603 6604 6605
6606 6607 6608 6609 660A 660B 660C 660D 660E 660F
6610 6611 6612 6613 6614 6615 6616 6617 6618 6619
66F6 3B33 670A 670B 670C 670D 3B47 3B48 3B49 3B4A
3B4B 3B4C 3B4D 3B4E 3B4F 3B50 676A 676B 676C 676D
676E 676F 6770 6771 6772 6773 6774 6775 6776 6777
6778 6779 677A 677B 677C 677D 677E 677F 6780 6782
6783 6784 6785 6786 6787 6788 6789 678A
678B 678C 678D 678E 678F 6790 6791 6792 6793 6794
6795 6796 6797 6798 6799 679A 679B 679C 679D 679E
679F 67A0 67A1 67A2 67A3 67A4 67A5 67A6 67A7 67A8
67A9 67AA 67AB 67AC 67AD 233DE 233E6 233F4 233F5 233F9
233FA 233FE 23400 67F9 3C20 6B23 6B25 6B26 6B27 6B66
6B67 6B68 6B69 6B7D 6B7E 6B7F 6B80 6B81 6BB4 6BD1
6BDE 6BDF 6C13 6C1B 6C1C 6C1D 6C6C 6C80 6C8A 6C93
6C9D 3CCB 3CCD 3CD1 6CAB 6CAC 6CAD 6CAE 6CB0 6CB1
6CB2 6CB3 6CB4 6CB5 6CB6 6CB7 6CB8 6CB9 6CBA 6CBB
6CBC 6CBD 6CBE 6CBF 6CC0 6CC1 6CC2 6CC3 6CC4 6CC5
6CC6 6CC7 6CC8 6CCA 6CCB 6CCC 6CCD 6CCE 6CCF 6CD0
6CD1 6CD2 6CD3 6CD4 6CD5 6CD6 6CD7 6CD8 6CD9 6CDB
6CDC 6CDD 6CDE 6CDF 6CE0 6CE1 6CE2 6CE3
6CE4 6CE5 6CE6 6CE7 6CE8 6CE9 6CEA 6CEB 6CEC 6CED
6CEE 6CEF 6CF1 6CF2 6CF3 6CF7 6CF8 6CF9 6CFA 6CFB
6CFC 6CFD 6CFE 23CB5 23CB7 23CC7 23CC8 23CC9 6D30 7087
7081 7082 7083 7084 7085 7086 7088 7089 708A 708B
708C 708D 708E 708F 7090 7091 7092 7093 7094 7095
7096 7097 7098 7099 709A 709B 709C 709D 709E 241A3
241A4 241A5 241AC 241B5 722C 722D 7238 7240 7248 3E2F
7265 7266 7267 7268 7269 726A 726B 726C 2462A 72C0
3E62 3E69 72C9 72CB 72CC 72CD 72CE 72CF 72D0 72D1
72D2 72D3 72D4 72D5 72D6 72D7 72D8 72D9 72DA 72DB
72DC 72DD 72DE 739C 739D 739E 739F 73A0 73A1 73A2
73A3 73A4 73A5 73A6 73A7 73A8 73A9 73AA 73AB 73AC
73AD 73AE 73AF 73B0 73B1 248FB 248FF 24900
24901 2490C 74DD 74E8 74E9 7519 753B 753D 753E 753F
7540 7541 7542 7543 7544 7545 758C 7598 7599 759A
759B 759C 759D 759E 759F 75A0 75A1 7677 7684 76AF
76C2 76F0 76F1 76F2 76F3 76F4 76F5 77E4 77E5 77F7
77F8 77F9 77FA 77FB 77FC 77FD 77FE 77FF 7800 7801
25425 793E 793F 7940 7941 7942 7943 79C4 79C5 79C6
79C7 79C8 79C9 79CA 4192 7A78 7A79 7A7A 7A7B 41C4
7ACE 7ACF 7AFA 7AFB 7C74 7C75 7C76 42B5 7CFC 7CFD
7CFE 7CFF 7EBF 7EC0 7EC1 7EC2 7EC3 7EC4 7EC5 7EC6
7EC7 7EC8 7EC9 7ECA 7ECB 7ECC 7ECD 7ECE 7ECF 7ED0
7F37 7F54 7F56 7F57 7F59 7F8B 7F8C 8005 8013 8035
8083 808F 43D9 80A1 80A2 80A3 80A4 80A5 80A6 80A7
80A8 80A9 80AA 80AB 80AC 80AD 80AE 80AF
80B0 80B1 80B2 80B3 80B4 80B5 80B6 80B7 80B8 80B9
80BA 80BB 80BC 80BD 80BE 80BF 80C0 80C1 81E4 81E5
81FD 81FE 820D 820E 820F 8220 8270 8298 8299 829A
829B 829C 829D 829E 829F 82A0 82A1 82A2 82A3 82A4
82A5 82A6 82A7 82A8 82A9 82AA 82AB 82AC 82AD 82AE
82AF 82B0 82B1 82B2 82B3 82B4 82B5 82B6 82B7 82B8
82B9 82BA 82BC 82BD 82BE 82C0 82C1 82C2 82C3 82C4
82C5 82C6 82C7 82C8 82C9 82CA 82CB 82CC 82CD 82CE
82CF 833E 26B13 26B15 26B28 82BF 864E 864F 866D 866E
866F 8670 8671 8672 275E0 8865 8868 89C4 89C5 8BD3
8BD4 8BD5 8BD6 8BD7 8BD8 8BD9 8BDA 8BDB 8BDC 8BDD
8BDE 8BDF 8BE0 8BE1 8BE2 8BE3 8BE4 8BE5 8BE6 8BE7
8BE8 8BE9 8C56 8D23 8D24 8D25 8D26 8D27
8D28 8D29 8D2A 8D2B 8D2C 8D2D 8D2E 8D2F 8ECB 8F6C
8F6D 8F6E 8F6F 8F70 8FCA 8FCB 8FCC 8FCD 8FCE 8FCF
8FD0 8FD1 8FD2 8FD3 8FD4 8FD5 8FD6 8FD7 8FD8 8FD9
8FDA 8FDB 8FDC 8FDD 8FDE 8FDF 8FEC FA24 28482 90AD
90AE 90AF 90B0 90B1 90B2 90B3 90B4 90B5 90B6 90B7
90B8 90B9 90BA 90BB 286BC 91C7 91D1 91D2 948D 948E
948F 9490 9491 9492 9493 9494 9495 9496 9497 9577
9578 9580 95F8 95F9 961C 9637 9638 9639 963A 963B
963C 963D 963E 963F 9640 9641 9642 9643 9644 9645
9646 9647 9648 9649 96B6 96B9 2ED7 96E8 9751 9752
975E 9763 9876 9877 996F 9970 9971 9972 9973 9974
9A75 9A76 9A77 9A78 9A79 9A7A 9A7B 9A7C 9A7D 9A7E
9A7F 9A80 9C7C 9E22 9E23 9E24 9EFE 9F21
9F7F
FDD0-2809
4E34 4E3E 4E57 3420 4E79 4E7A 4E7B 4E7C 4EAD 4EAE
4EAF 4EB0 4EB1 4EB2 4FAE 4FAF 4FB0 4FB1 4FB2 4FB3
4FB4 4FB5 4FB6 4FB7 4FB8 4FB9 4FBA 4FBB 4FBC 4FBD
4FBE 4FBF 4FC0 4FC1 4FC2 4FC3 4FC4 4FC5 4FC6 4FC7
4FC8 4FC9 4FCA 4FCB 4FCC 4FCD 4FCE 4FCF 4FD0 4FD1
4FD2 4FD3 4FD4 4FD5 4FD6 4FD7 4FD8 4FD9 4FDA 4FDB
4FDC 4FDD 4FDE 4FDF 4FE0 4FE1 4FE2 4FE3 4FE4 4FE5
4FE6 4FE7 4FE8 4FE9 4FEA 4FEB 4FEC 4FED 2025B 5157
5158 5159 2048E 516A 5179 517B 5191 5192 519F 51A0
51C1 51C2 51C3 205CA 205D0 205D5 51FE 5243 5244 5245
5247 5248 5249 524A 524B 524C 524D 524E 524F 5250
5251 52C0 52C1 52C2 52C3 52C4 52C5 52C7 52C8 52C9
52CA 52CB 530D 5327 5328 5329 533D 5357
5358 537B 537C 537D 5396 5397 5398 5399 539A 539B
53D9 53DA 53DB 53DC 53DD 5470 5472 3584 549E 549F
54A0 54A1 54A2 54A3 54A4 54A5 54A6 54A7 54A8 54A9
54AA 54AB 54AC 54AD 54AE 54AF 54B0 54B1 54B2 54B3
54B4 54B5 54B6 54B7 54B8 54B9 54BA 54BB 54BC 54BD
54BE 54BF 54C0 54C1 54C2 54C3 54C4 54C5 54C6 54C7
54C8 54C9 54CA 54CB 54CC 54CD 54CE 54CF 54D0 54D1
54D2 54D3 54D4 54D5 54D6 54D7 54D8 54D9 54DA 54DB
54DC 54DD 54DE 54DF 20C53 20C65 20C77 20C78 20C7C 20C8D
20C96 20C9C 3622 56FF 5700 211D9 3636 3637 3638 3639
363B 363E 578B 578C 578D 578E 578F 5790 5791 5792
5793 5794 5795 5796 5797 5798 5799 579A 579B 579C
579D 579E 579F 57A0 57A1 57A2 57A3 57A4
57A5 57A6 57A7 57A8 57A9 57AA 57AB 57AC 57AD 57AE
57AF 57B0 57B1 57B2 57B3 57B4 57B5 57CE 212E3 58F4
58F5 5908 5909 590D 369A 594E 594F 5950 5951 5952
5953 5955 5956 21613 21619 59D5 36C3 36C4 36C5 36C7
36C8 598D 59D8 59D9 59DA 59DB 59DC 59DD 59DE 59DF
59E0 59E1 59E2 59E3 59E4 59E5 59E6 59E7 59E8 59E9
59EA 59EB 59ED 59EE 59EF 59F0 59F1 59F2 59F3 59F4
59F5 59F6 59F7 59F8 59F9 59FA 59FB 59FC 59FD 59FE
59FF 5A00 5A01 5A02 5A03 5A05 5A06 5A07 5A08 2170D
21710 21726 5A0D 5B68 5B69 5B6A 5BA2 5BA3 5BA4 5BA5
5BA6 5BA8 5BA9 5BAA 5BAB 219F3 5C01 5C02 5C06 5C1B
5C1C 5C1D 5C2E 5C2F 5C4B 5C4C 5C4D 5C4E 5C4F 5CC6
5CC7 5CC8 5CC9 5CCA 5CCB 5CCC 5CCD 5CCE
5CCF 5CD0 5CD1 5CD2 5CD3 5CD4 5CD5 5CD6 5CD7 5CD8
5CD9 5CDA 5CDB 5CDC 5CDD 5CDE 5CDF 5CE0 5CE1 5CE2
5CE3 5CE4 5CE5 5CE6 5CE7 21DB6 21DBA 21DCA 21DD1 5CF8
5DEC 5DED 5DF7 5DF8 5DF9 5DFA 5DFB 5E1D 5E1E 5E1F
5E20 5E21 5E22 5E23 5E24 5E25 5E26 5E27 2209A 5E7D
5E9B 5EA0 5EA1 5EA2 5EA3 5EA4 5EA5 5EA6 22208 5EB0
5EFA 5EFB 5EFC 22321 22325 5F07 5F08 5F2B 5F2C 5F2D
5F2E 5F2F 223D7 5F56 5F65 5F66 5F85 5F86 5F87 5F88
5F89 5F8A 5F8B 5F8C 5F8D 5F94 600E 6012 6018 601D
6020 6023 6024 6025 6028 6031 6037 6038 6039 603B
603C 3922 3926 3927 392D 6040 6042 6043 6044 6045
6046 6047 6048 6049 604A 604C 604D 604E 6051 6052
6053 6054 6057 6058 605B 605C 605E 605F
6060 6061 6062 6064 6066 6068 606A 606B 606C 606E
6070 6071 6072 6078 6079 607A 607B 607C 607D 22668
6218 6241 6242 6243 39D8 62CF 62DC 39E1 39E2 39E5
39E6 62EA 62EB 62EC 62ED 62EE 62EF 62F0 62F1 62F4
62F5 62F6 62F7 62F8 62F9 62FA 62FB 62FC 62FD 62FE
6300 6301 6302 6303 6304 6305 6306 6307 6309 630A
630B 630C 630D 630E 630F 6311 6312 6313 6314 6315
6316 6317 6318 631C 631D 631E 631F 6320 6321 6322
6323 6324 6325 6326 6327 22AE6 22AE8 22B0E 22B22 6531
653F 3A83 3A84 3A85 6540 6541 6542 6543 6544 6545
3ABC 3ABD 65AA 65AB 3AC6 65BD 65BE 65BF 65C0 65E2
3ADE 3AE0 661A 661B 661C 661D 661E 661F 6620 6621
6622 6623 6624 6625 6626 6627 6628 6629
662A 662B 662C 662D 662E 662F 6630 6631 6632 6633
6634 6635 6636 6637 6638 6639 663A 663B 663C 663D
663E 663F 2317D 23182 66F7 670E 670F 6710 6711 3B51
3B52 3B53 3B54 3B55 3B56 3B57 67AE 67AF 67B0 67B1
67B2 67B3 67B4 67B5 67B6 67B7 67B8 67B9 67BA 67BB
67BC 67BE 67BF 67C0 67C1 67C2 67C3 67C4 67C5 67C6
67C7 67C8 67C9 67CA 67CB 67CC 67CD 67CE 67CF 67D0
67D1 67D2 67D3 67D4 67D5 67D6 67D7 67D8 67D9 67DA
67DB 67DC 67DD 67DE 67DF 67E0 67E2 67E3 67E4 67E5
67E6 67E7 67E8 67E9 67EA 67EB 67EC 67ED 67EE 67EF
67F0 67F1 67F2 67F3 67F5 67F6 67F7 67F8 67FA 67FB
67FC 67FD 67FE 67FF 6800 6801 6802 6803 6804 6805
6806 6807 6808 6809 680A 680B 680C 680D
680E 680F 6810 6811 6852 3C26 6B28 6B29 6B2A 3C54
6B6A 6B6B 6B82 6B83 6B84 6B85 6B86 6B87 6BB5 6BB6
6BD2 3C8B 6BD6 6BD7 6BD8 6BE0 6BE1 23B5A 6C1E 6C1F
6C20 6C21 6C22 6C97 6CAF 6CC9 6CF4 6CF6 3CD6 3CDC
6CDA 6CFF 6D00 6D01 6D02 6D03 6D04 6D05 6D06 6D07
6D08 6D09 6D0A 6D0B 6D0C 6D0E 6D0F 6D10 6D11 6D12
6D13 6D14 6D15 6D17 6D18 6D19 6D1A 6D1B 6D1D 6D1E
6D1F 6D20 6D21 6D22 6D23 6D24 6D25 6D26 6D27 6D28
6D29 6D2A 6D2B 6D2C 6D2D 6D2E 6D31 6D32 6D33 6D34
6D35 6D36 6D37 6D38 6D39 6D3A 6D3B 6D3C 6D3D 6D3E
6D3F 6D40 6D41 6D42 6D43 6D44 6D45 6D47 6D48 6D49
6D4A 6D4B 6D4C 6D4D 6D4E 6D4F 6D50 6D51 6D52 6D53
6D54 6D55 23CFC 23CFD 23CFE 23CFF 3DAD 709F
70A0 70A1 70A2 70A3 70A4 70A5 70A6 70A7 70A8 70A9
70AA 70AB 70AC 70AD 70AE 70AF 70B0 70B1 70B2 70B3
70B4 70B5 70B6 70B7 70B8 70B9 70BA 70BB 70BC 70BD
70BE 70BF 70C0 70C1 70C2 70C3 241CD 241E2 722E 722F
7230 24505 723C 7241 7249 724A 726D 726E 726F 7270
7271 7272 7273 7274 7275 72CA 72DF 72E0 72E1 72E2
72E3 72E4 72E5 72E6 72E7 72E8 72E9 72EA 72EB 72EC
72ED 72EE 72EF 72F0 72F1 72F2 2478F 7385 3EB1 73B2
73B3 73B4 73B5 73B6 73B7 73B8 73B9 73BB 73BD 73BE
73BF 73C0 73C1 73C2 73C3 73C4 73C5 73C6 73C7 73C8
73C9 73CA 73CB 73CC 73CD 73CE 73CF 73D0 73D1 24916
24917 24919 2492F 24933 24934 74EA 74EB 74EC 74ED 74EE
74EF 74F0 74F1 74F2 751A 7520 752D 752E
3F58 3F59 7546 7547 7548 7549 754A 754B 754C 754D
754E 754F 7550 7551 7552 7553 3F7C 75A2 75A3 75A4
75A5 75A6 75A7 75A8 75A9 75AA 75AB 75AC 75AD 75AE
75AF 75BA 7678 7679 767A 7685 7686 7687 7688 76C3
76C4 76C5 76C6 76C7 76C8 401D 76F6 76F7 76F8 76F9
76FA 76FB 76FC 76FD 76FE 76FF 7700 7701 7702 7703
7704 7705 7706 7707 7708 7709 770A 770B 770C 770D
2512B 77DC 77E6 77E7 77E8 409A 6CF5 7802 7803 7804
7805 7806 7807 7808 7809 780A 780B 780C 780D 780E
780F 7810 7811 7812 7813 7814 7815 7816 7817 7818
7819 781A 781B 781C 2542F 25430 4100 7944 7945 7946
7947 7948 7949 794A 794B 794C 794D 794E 89C6 25635
79B9 79BA 4132 79CB 79CC 79CD 79CE 79CF
79D0 79D1 79D2 79D3 79D4 79D5 79D6 79D7 25772 4195
7A7C 7A7D 7A7E 7A7F 7A80 7A81 7A82 7A83 25946 7AD0
7AD1 7AD2 7AD3 7AD4 7AD5 7AD6 7AD7 7AFC 7AFD 7AFE
7AFF 7B00 7B01 7B02 7B03 25AE9 427A 5A04 7C77 7C78
7C79 7C7A 7C7B 7C7C 7C7D 7C7E 7C7F 7C80 7C81 7C82
42B6 42B7 42B9 7D00 7D01 7D02 7D03 7D04 7D05 7D06
7D07 7D08 7D09 7ED1 7ED2 7ED3 7ED4 7ED5 7ED6 7ED7
7ED8 7ED9 7EDA 7EDB 7EDC 7EDD 7EDE 7EDF 4342 7F38
7F58 7F5A 7F8D 7F8E 7F8F 7F91 26351 7FBE 7FBF 263F5
263F8 8007 800D 800E 800F 8010 8011 8014 8036 8037
43DF 80C2 80C3 80C4 80C5 80C6 80C7 80C8 80C9 80CA
80CB 80CC 80CD 80CE 80CF 80D0 80D1 80D2 80D3 80D5
80D6 80D7 80D8 80D9 80DA 80DB 80DC 80DD
80DE 80DF 80E0 80E1 80E2 80E3 80E4 80E5 80E6 80E7
80E8 80E9 80EA 80EB 8109 81F4 81FF 8221 8222 8223
8224 8294 82D0 82D1 82D2 82D3 82D4 82D5 82D6 82D7
82D8 82D9 82DA 82DB 82DC 82DD 82DE 82DF 82E0 82E1
82E2 82E3 82E4 82E5 82E6 82E7 82E8 82E9 82EA 82EB
82EC 82ED 82EE 82EF 82F0 82F1 82F2 82F3 82F4 82F5
82F6 82F7 82F8 82F9 82FA 82FB 82FC 82FD 82FE 82FF
8300 8301 8302 8303 8304 8305 8306 8307 8309 830A
830B 830C 830D 830E 830F 8310 8311 8313 8314 8315
26B50 26B51 26B52 26B53 26B5B 833A 8650 8673 8674 8675
8676 8677 8678 8679 867A 867B 867C 867D 867E 867F
8680 8681 8682 8683 460F 8841 8842 884D 884E 275E4
8866 8867 8869 886A 886B 886C 27632 27639
8981 898C 89C7 89C8 89C9 89D3 89D4 8A02 8A03 8A04
8A05 8A06 8A07 8A08 8BEA 8BEB 8BEC 8BED 8BEE 8BEF
8BF0 8BF1 8BF2 8BF3 8BF4 8BF5 8BF6 8C9E 8C9F 8CA0
8D30 8D31 8D32 8D33 8D34 8D35 8D36 8D37 8D38 8D39
8D3A 8D3B 8D72 8D73 8D74 8D75 8DB4 8ECC 8ECD 8F71
8F72 8F73 8F74 8F75 8F76 8F77 8F78 8F79 8F7A 8F7B
8FE0 8FE1 8FE2 8FE3 8FE4 8FE5 8FE6 8FE7 8FE8 8FE9
8FEA 8FEB 8FED 8FEE 8FEF 8FF0 8FF1 8FF2 8FF3 90BC
90BD 90BE 90BF 90C0 90C1 90C2 90C3 90C4 90C5 90C6
90C7 90C8 90C9 90CA 90CB 90CD 90CE 90CF 90D0 90D1
90D3 90D5 286D8 286E6 90F1 914A 914B 91CD 91D3 91D4
9498 9499 949A 949B 949C 949D 949E 949F 94A0 94A1
94A2 94A3 94A4 94A5 94A6 94A7 94A8 94A9
94AA 94AB 94AC 94AD 94AE 94AF 9581 9582 95FA 95FB
95FC 95FD 95FE 95FF 9600 9601 9602 964A 964B 964C
964D 964E 964F 9650 9651 9652 9653 9654 9655 28E65
28E66 9762 9769 97CB 97E8 97ED 97F3 9801 9878 9879
987A 987B 98A8 98D0 98D1 98D2 98DB 2EDE 98DF 98E0
9975 9976 9977 9978 9979 997A 997B 997C 9996 29810
9999 9A81 9A82 9A83 9A84 9A85 9A86 9A87 9A88 9A89
2EE3 9CEC 9E25 9E26 9E27 9E28 9E29
FDD0-280A
2003E 4E35 4E58 4E7D 4EB3 3465 3466 4FEE 4FEF 4FF0
4FF1 4FF2 4FF3 4FF4 4FF5 4FF6 4FF7 4FF8 4FF9 4FFA
4FFB 4FFC 4FFD 4FFE 4FFF 5000 5001 5002 5003 5004
5005 5006 5007 5008 5009 500A 500B 500C 500D 500E
500F 5010 5011 5012 5013 5014 5015 5016 5017 5018
5019 501A 501B 501C 501D 501E 501F 5020 5021 5022
5023 5024 5025 5026 5027 5028 5029 502A 502B 502C
502D 502E 502F 5030 5031 5032 5033 5034 5035 5036
5037 5038 5039 503A 503B 503C 503D 503E 503F 20274
20275 20299 2029E 202A0 5056 515A 515B 20491 20492 517A
517C 5193 5194 51A1 51A2 51A3 51A4 51A5 51A6 51A7
2058E 51C4 51C5 51C6 51C7 51C8 51C9 51CA 51CB 51CC
51CD 51CE 205DF 205E0 20656 5252 5253 5254
5255 5256 5257 5258 5259 525A 525B 525C 525D 525E
525F 5260 5261 5262 5263 5264 5265 5266 5267 20731
52CC 52CD 52CE 52CF 52D0 52D1 20873 530E 532A 532B
537F 539C 539D 539E 539F 8652 53DE 53DF 3597 3598
54E0 54E1 54E2 54E3 54E4 54E5 54E6 54E7 54E8 54E9
54EA 54EB 54EC 54ED 54EE 54EF 54F0 54F1 54F2 54F3
54F4 54F5 54F6 54F7 54F8 54F9 54FA 54FB 54FC 54FD
54FE 54FF 5500 5501 5502 5503 5504 5505 5506 5507
5508 5509 550A 550B 550D 550E 550F 5510 5511 5512
5513 5514 5515 5516 5517 5518 5519 551A 551B 551C
551D 551E 551F 5520 5521 5522 5523 5524 5525 5526
5527 20CB5 20CB8 20CCF 20CD3 20CD4 20CD5 20CD6 20CDD 20CED
20CFF 20D15 3623 5701 5702 5703 5704 5705
5706 57B6 57B7 57B8 57B9 57BA 57BB 57BC 57BD 57BE
57BF 57C0 57C1 57C2 57C3 57C4 57C5 57C6 57C7 57C8
57C9 57CA 57CB 57CC 57CD 57CF 57D0 57D1 57D2 57D3
57D4 57D5 57D6 57D7 57D8 57D9 57DA 57DB FA0F 212FE
21302 21303 21304 21305 5832 58F6 590E 590F 591E 21596
594A 5957 5958 5959 595A 36CE 36D1 36D3 36D4 36D6
36DD 36E1 36E2 59EC 5A09 5A0A 5A0B 5A0C 5A0E 5A0F
5A10 5A11 5A12 5A13 5A14 5A15 5A16 5A17 5A18 5A19
5A1A 5A1B 5A1C 5A1D 5A1E 5A1F 5A20 5A21 5A22 5A23
5A24 5A25 5A26 5A27 5A28 5A29 5A2A 5A2D 5A2E 5A2F
5A30 5A31 5A32 5A33 5A34 2173A 2173B 2173C 21757 3743
5B6B 5B6C 5B6D 2196A 5BA7 5BAC 5BAD 5BAE 5BAF 5BB0
5BB1 5BB2 5BB3 5BB4 5BB5 5BB6 5BB7 5BB8
5BB9 5BBA 5BBB 5BBC 5BBD 5BBE 5C03 5C04 5C05 3797
5C50 5C51 5C52 5C53 5C54 5C55 5C56 5C57 5C58 21C70
5CE8 5CE9 5CEA 5CEB 5CEC 5CED 5CEE 5CEF 5CF0 5CF1
5CF2 5CF3 5CF4 5CF5 5CF6 5CF7 5CF9 5CFA 5CFB 5CFC
5CFD 5CFE 5CFF 5D00 5D01 5D02 5D03 5D04 5D05 21DEB
21DF9 382B 5DEE 5DFC 5E28 5E29 5E2A 5E2B 5E2C 5E2D
5E2E 5E2F 5E30 5E31 220C7 221C3 5EA7 5EA8 5EA9 5EAA
5EAB 5EAC 5EAD 5EAE 5EAF 5EFD 5F09 5F30 5F31 5F32
5F33 5F67 5F68 22491 5F8E 5F8F 5F90 5F91 5F92 5F93
5F95 224ED 3920 392B 6041 604B 604F 6050 6055 6056
6059 605A 605D 6063 6065 6067 6069 606D 606F 6073
6074 6075 6076 6077 3931 3933 3934 3936 3937 3938
3939 607E 6080 6081 6082 6083 6084 6085
6087 6088 608B 608C 608D 608E 608F 6091 6092 6093
6094 6095 6096 6097 6099 609A 609B 609C 609D 609E
609F 60A2 60A6 60A7 60A9 60AD 60AE 60AF 2267A 22696
22698 6219 6244 6245 6246 6247 39EC 62F2 62F3 62FF
6308 6310 6319 631A 631B 39F8 6328 6329 632A 632B
632C 632D 632E 632F 6330 6331 6333 6334 6335 6336
6337 6338 6339 633A 633C 633D 633E 633F 6340 6341
6342 6343 6344 6345 6346 6347 6348 6349 634A 634B
634C 634D 634E 634F 6350 6351 6352 6353 6354 6355
6356 6357 6358 6359 635A 635B 635C 635D 635E 635F
6360 6361 6362 6363 6364 22B3F 22B43 22B6A 63E4 3A87
3A88 3A89 6546 6547 6548 6549 654A 654B 654C 2304B
658A 658B 6599 659A 3AC9 65C1 65C2 65C3
65C4 65C5 65C6 65CA 6640 6641 6642 6643 6644 6645
6646 6647 6648 6649 664A 664B 664C 664D 664E 664F
6650 6651 6652 6653 6654 6655 6656 231A4 231A5 665F
6660 66F8 66FA 66FB 3B34 3B35 6712 6713 6714 6715
6717 67BD 67E1 67F4 3B58 3B59 3B5A 3B5B 3B5C 3B5D
3B5E 3B5F 3B60 3B61 3B62 3B63 3B64 3B65 3B66 3B67
6812 6813 6814 6815 6816 6817 6818 6819 681A 681B
681C 681D 681E 681F 6820 6821 6822 6823 6824 6825
6826 6827 6828 6829 682A 682B 682C 682D 682E 682F
6830 6831 6832 6833 6834 6835 6836 6837 6838 6839
683A 683B 683C 683D 683E 683F 6840 6841 6842 6843
6844 6845 6846 6847 6848 6849 684A 684B 684C 684D
684E 684F 6850 6851 6853 6854 6855 6856
6857 6858 6859 685A 685B 685C 685D 685E 685F 6860
6861 6862 6863 6864 6865 6866 6867 6868 6869 686A
2343F 23450 2346F 23472 6B2B 6B2C 6B2D 6B2E 6B2F 6B30
6B31 6B34 6B6C 6B6D 3C61 6B88 6B89 6B8A 6B8B 6BB7
6BD9 6BE2 6BE3 6BE4 6BE5 6BE6 6BE7 6BE8 6BE9 6BEA
6C23 6C24 6C25 6C26 6C27 6C28 6C29 6CF0 6D1C 6D2F
6D46 3CEF 6D0D 6D16 6D56 6D57 6D58 6D59 6D5A 6D5B
6D5C 6D5D 6D5E 6D5F 6D60 6D61 6D62 6D63 6D64 6D65
6D66 6D67 6D68 6D69 6D6A 6D6B 6D6C 6D6D 6D6E 6D6F
6D70 6D71 6D72 6D73 6D74 6D75 6D76 6D77 6D78 6D79
6D7A 6D7B 6D7C 6D7D 6D7E 6D7F 6D80 6D81 6D82 6D83
6D84 6D85 6D86 6D87 6D88 6D89 6D8A 6D8B 6D8C 6D8D
6D8F 6D90 6D91 6D92 6D93 6D94 6D95 6D96
6D97 6D98 6D9A 6D9B 6D9C 6D9D 6D9E 6D9F 6DA0 6DA1
6DA2 6DA3 6DA4 6DA5 6DA6 6DA7 6DA8 6DA9 23D40 23D5B
3DB4 70C4 70C5 70C6 70C7 70C8 70C9 70CA 70CB 70CC
70CD 70CE 70CF 70D0 70D1 70D2 70D3 70D4 70D5 70D6
70D7 70D8 70D9 70DA 70DB 70DC 70DD 70DE 70DF 70E0
70E1 70E2 70E3 70E4 70E5 70E6 70E7 70E8 70E9 70EA
70EB 70EC 70ED 70EE 241FC 2421B 7231 7239 7242 24578
3E20 7276 7277 7278 7279 727A 3E74 72F3 72F4 72F5
72F6 72F7 72F8 72F9 72FA 72FB 72FC 72FD 72FE 7300
7301 7302 7303 7386 3EB8 73BA 73BC 3EBF 3EC2 3EC7
73D2 73D3 73D4 73D5 73D6 73D7 73D8 73D9 73DA 73DB
73DC 73DD 73DE 73DF 73E0 73E1 73E2 73E3 73E4 73E5
73E6 73E7 73E8 73E9 73EA 73EB 73EC 73ED
73EE 73EF 73F0 73F1 73F2 7409 2493E 2493F 24940 24941
24942 24943 73F9 74DE 74DF 74F3 74F4 74F5 7521 7554
7555 7556 7557 7558 7559 755A 755B 755C 755D 755E
755F 758D 75B0 75B1 75B2 75B3 75B4 75B6 75B7 75B8
75B9 75BB 75BC 75BD 75BE 75BF 75C0 75C1 75C2 75C3
75C4 75C5 75C6 75C7 75C8 75C9 7560 768A 768B 768C
768D 24F5C 3FED 76B0 76B1 4000 76C9 76CA 76CB 76CC
76CD 76CE 76CF 76D0 76D1 25052 4026 770E 770F 7710
7711 7712 7713 7714 7715 7716 7717 7718 7719 771A
771B 771C 771D 771E 771F 7720 7721 7722 7723 7724
7727 7728 7729 772A 772B 772C 773F 25148 77DD 77E9
40A8 781D 781E 781F 7820 7821 7822 7823 7824 7825
7827 7828 7829 782A 782B 782C 782D 782E
782F 7830 7831 7832 7833 7834 7835 7836 7837 7838
7839 783A 783B 783C 783D 783E 783F 7840 7841 25446
2546C 2546E 4103 794F 7950 7951 7952 7953 7954 7955
7956 7957 7958 7959 795A 795B 795C 795D 795E 795F
7960 7962 25651 2573D 79D8 79D9 79DA 79DB 79DC 79DD
79DE 79DF 79E0 79E1 79E2 79E3 79E4 79E5 79E6 79E7
79E8 79E9 79EA 79EB 79EC 79ED 79EE 79EF 79F0 7A84
7A85 7A86 7A87 7A88 7A89 7A8A 7A8B 7A8C 7A8D 7A8E
25956 41CA 7AD8 7AD9 7ADA 7ADB 7ADC 7ADD 7ADE 41D7
41DB 7B05 7B06 7B07 7B08 7B09 7B0A 7B0B 7B0C 7B0D
7B0E 7B0F 7B10 7B11 7B12 7B13 7B14 7B15 7B04 7C83
7C84 7C85 7C86 7C87 7C88 7C89 7C8A 7C8B 7C8C 7C8D
7C8E 7C8F 7C90 7C91 42BC 7D0A 7D0B 7D0C
7D0D 7D0E 7D0F 7D10 7D11 7D12 7D13 7D14 7D15 7D16
7D17 7D18 7D19 7D1A 7D1B 7D1C 7D1D 7D1E 7D1F 7D20
7D21 7D22 7D23 7D24 7D25 7D26 7D27 7EE0 7EE1 7EE2
7EE3 7EE4 7EE5 7EE6 7EE7 7EE8 4343 7F39 7F3A 7F3C
7F5B 7F5C 7F5D 7F5E 7F5F 7F60 7F61 7F62 7F90 7F92
7F93 7F94 7F96 7F97 7F98 7F99 7FC0 7FC1 7FC2 7FC3
7FC4 7FC5 7FC6 26402 26410 26411 26412 8004 8006 800A
8015 8016 8017 8018 8019 8038 8039 803A 803B 803C
803D 803E 803F 8040 8041 8042 8081 8082 43ED 80ED
80EE 80EF 80F0 80F1 80F2 80F3 80F4 80F5 80F6 80F7
80F8 80F9 80FA 80FB 80FC 80FD 80FF 8100 8101 8102
8103 8104 8105 8106 8107 8108 810A 810B 810C 810D
810E 810F 8110 8111 8112 8113 266AF 266B1
266B5 81EC 81ED 26939 8200 8201 8210 4465 8225 8226
8227 8228 8229 822A 822B 822C 822D 822E 822F 8230
8231 8273 449F 44A0 44A2 82BB 8308 8316 8317 8318
8319 831A 831B 831C 831E 831F 8320 8321 8322 8324
8325 8326 8327 8328 8329 832A 832B 832C 832D 832E
832F 8330 8331 8332 8333 8334 8335 8336 8337 8338
8339 833C 833D 833F 8340 8341 8342 8343 8344 8345
8347 8348 8349 834A 834B 834C 834D 834E 834F 8350
8351 8352 8354 8355 8356 8357 8358 835A 835B 835C
835D 835E 835F 8360 8361 8362 8363 8364 8365 8366
8367 8368 8369 836A 836C 836D 836E 836F 26B75 26B82
26B96 26B97 26B9D 26BB3 8353 8651 8653 8654 8684 8685
8686 8687 8689 868A 868B 868C 868D 868E
868F 8690 8691 8692 8693 8694 8695 8696 8697 8698
8699 869A 869B 869C 869D 869E 869F 86A0 86A1 86A2
86A3 86A4 86A5 86A6 86A7 86A8 86A9 86AA 86AC 8843
8844 4615 884F 886D 886E 886F 8870 8871 8872 8873
8874 8875 8876 8877 8878 8879 887A 887B 887C 887D
887E 887F 8880 8881 8882 8883 8884 8885 8886 8887
27655 27656 27657 898D 898E 89CA 8A09 8A0A 8A0B 8A0C
8A0D 8A0E 8A0F 8A10 8A11 8A12 8A13 8A14 8A15 8A16
8A17 8A18 8A19 8A1A 27967 8BF7 8BF8 8BF9 8BFA 8BFB
8BFC 8BFD 8BFE 8BFF 8C00 8C01 8C02 8C03 8C04 8C05
8C06 8C07 8C08 8C09 8C0A 8C38 8C47 8C48 8C57 8C79
8C7A 8C7B 8CA1 8CA2 8CA3 8CA4 27D2F 8D3C 8D3D 8D3E
8D3F 8D40 8D41 8D42 8D43 8D44 8D45 8D46
4798 8D76 8D77 8D78 47D5 8DB5 8DB6 8DB7 8DB8 8EAC
8ECE 8ECF 8ED0 8ED1 8ED2 8ED3 8ED4 8ED5 8F7C 8F7D
8F7E 8F7F 8F80 8F81 8F82 8F83 8FB1 8FF4 8FF5 8FF6
8FF7 8FF8 8FF9 8FFA 8FFB 8FFC 8FFD 8FFE 8FFF 9000
9001 9002 9003 9004 9005 9006 9007 9008 9009 900A
9095 90D6 90D7 90D8 90D9 90DA 90DB 90DC 90DD 90DE
90DF 90E0 90E1 90E2 90E3 90E4 90E5 90E6 90E7 914C
914D 914E 914F 9150 9151 9152 91D5 91D6 91D7 91D8
91D9 91DA 91DB 91DC 91DD 91DE 91DF 91E0 91E1 91E2
94B0 94B1 94B2 94B3 94B4 94B5 94B6 94B7 94B8 94B9
94BA 94BB 94BC 94BD 94BE 94BF 94C0 94C1 94C2 94C3
94C4 94C5 94C6 94C7 94C8 94C9 94CA 94CB 94CC 94CD
94CE 9583 9584 9585 28CCA 28CCD 9603 9604
9605 9606 9656 9657 9658 9659 965B 965C 965D 965E
965F 9660 9661 9662 9663 9664 9665 9666 9667 9668
9669 965A 28E97 96BA 96BB 96BC 96BD 96BE 987C 987D
987E 987F 9880 9881 9882 9883 9884 98E2 98E3 98E4
997D 997E 997F 9980 9981 9982 99AC 9A8A 9A8B 9A8C
9A8D 9A8E 9A8F 9AA8 9AD8 9ADF 9B25 9B2F 9B32 9B3C
9C7D 9E2A 9E2B 9E2C 9E2D 9E2E 9E2F 9E30 9E31 9E32
9E33 9E34 9E35 9E36 9F80
FDD0-280B
3422 4E7E 4E7F 4E80 3464 5040 5041 5042 5043 5044
5045 5046 5047 5048 5049 504A 504B 504C 504D 504E
504F 5050 5051 5052 5053 5054 5055 5057 5058 5059
505A 505B 505C 505D 505E 505F 5060 5061 5062 5063
5064 5065 5066 5067 5069 506A 506B 506C 506D 506E
506F 5070 5071 5072 5073 5074 5075 5076 5077 5078
5079 507A 507B 507C 507D 507E 507F 202B7 202BF 202C0
202E5 515C 515D 515E 517D 34BC 5195 51A8 51CF 51D0
51D1 205EB 51F0 5268 526A 526B 526C 526D 526E 526F
5270 5271 5276 20779 3520 52D2 52D3 52D4 52D5 52D6
52D8 52D9 52DA 530F 5310 5313 352D 5318 5319 3531
532C 532D 532E 533E 533F 5340 5359 5368 537E 53A0
53A1 53A2 53A3 53A9 53C3 53C4 550C 35A1
35A5 35AD 5528 5529 552A 552B 552C 552D 552E 552F
5530 5531 5532 5533 5534 5535 5536 5537 5538 5539
553A 553B 553C 553D 553E 553F 5540 5541 5542 5543
5544 5545 5546 5547 5548 5549 554A 554B 554C 554D
554E 554F 5550 5551 5552 5553 5554 5555 5556 5557
5558 555A 555B 555C 555D 555E 5560 5561 5562 5563
5564 5565 5566 5567 5568 5569 556A 556C 556D 556E
556F 5570 5571 5572 5573 5574 5575 5576 5577 5578
5579 20D28 20D31 20D32 20D46 20D47 20D48 20D49 20D4C 20D4D
20D4E 20D6F 20D71 20D74 20D7C 20D7E 20D7F 20D96 20D9C 20DA7
20DB2 556B 55B6 5707 5708 5709 570A 570B 570F 3647
3648 3649 57DC 57DD 57DE 57DF 57E0 57E1 57E2 57E3
57E4 57E5 57E6 57E7 57E8 57E9 57EB 57EC
57ED 57EE 57EF 57F0 57F1 57F2 57F3 57F4 57F5 57F6
57F7 57F8 57F9 57FA 57FB 57FC 57FD 57FE 57FF 5800
5801 5802 5803 5804 5805 5806 5807 5808 5809 580A
580B 580C 580D 580E 580F 5810 5811 5812 5813 5814
5815 21336 2133A 57EA 5835 58F7 58F8 591F 5920 595B
595C 595D 595E 2163E 595F 5962 5A2B 5A3D 36E5 36E6
5A2C 5A35 5A36 5A37 5A38 5A39 5A3A 5A3B 5A3C 5A3E
5A3F 5A40 5A41 5A42 5A43 5A44 5A45 5A46 5A47 5A48
5A49 5A4A 5A4B 5A4C 5A4D 5A4E 5A4F 5A50 5A51 5A52
5A53 5A54 5A55 5A56 5A57 5A58 5A59 5A5A 5A5B 5A5C
5A5D 5A5E 5A5F 5A60 5A61 5A62 5A63 5A64 5A65 5A66
5A67 5A68 5A69 5A6A 5A6B 5A6C 5A6D 5A6E 5A6F 5A70
5A71 5A72 5A73 5A74 5A75 5A76 2176C 2176D
2176E 2176F 21770 21771 21773 21774 5A8E 5B6E 5B6F 5B70
5B72 5BBF 5BC0 5BC1 5BC2 5BC3 5BC4 5BC5 5BC6 5BC7
5BC8 5BC9 21A2D 21A34 5C07 5C08 5C09 5C59 5C5A 5C5B
5C5C 5C5D 5C60 5D06 5D07 5D08 5D09 5D0A 5D0B 5D0C
5D0D 5D0E 5D0F 5D10 5D11 5D12 5D13 5D14 5D15 5D16
5D17 5D18 5D19 5D1A 5D1B 5D1C 5D1D 5D1E 5D1F 5D20
5D21 5D22 5D23 5D24 5D25 5D26 5D27 5D28 5D29 5D2A
5D2B 5D2C 5D2D 5D2E 5D2F 5D30 21E1C 21E37 21E3D 5DE2
5DE3 3831 5E32 5E33 5E34 5E35 5E36 5E37 5E38 5E39
5E3A 5E3B 5E3C 5E3E 5EB1 5EB2 5EB3 5EB4 5EB5 5EB6
5EB7 5EB8 5EB9 5EBA 5EBB 5EBC 5EBE 5F34 5F35 5F36
5F37 5F38 5F39 223FA 5F57 5F69 5F6B 5F6C 5F96 5F97
5F98 5F99 5F9B 5F9C 5F9D 5F9E 5F9F 5FA0
5FA1 5FA2 5FA3 5FA4 22513 2251B 3930 3932 3935 393B
607F 6086 6089 608A 6090 6098 60A0 60A1 60A3 60A4
60A5 60A8 60AA 60AB 60AC 393F 394D 60B0 60B1 60B4
60B5 60B7 60B8 60BA 60BB 60BC 60BD 60BE 60BF 60C0
60C2 60C3 60C5 60C6 60C7 60C8 60CA 60CB 60CD 60CF
60D0 60D3 60D4 60D5 60D7 60D8 60D9 60DA 60DB 60DC
60DD 60DE 60DF 60E4 60E6 60E7 60E8 60EC 60ED 60EE
60EF 226F4 226F5 226F6 22712 22714 2271B 2271F 621A 621B
621C 621D 6248 6332 633B 39FB 39FE 3A00 3A01 3A02
3A03 3A04 3A06 6365 6366 6367 6368 6369 636A 636B
636C 636D 636E 636F 6370 6371 6372 6373 6374 6375
6376 6377 6378 6379 637A 637B 637C 637D 637E 637F
6380 6381 6382 6383 6384 6385 6386 6387
6388 6389 638A 638B 638D 638E 638F 6390 6391 6392
6393 6395 6396 6397 6398 6399 639A 639B 639C 639D
639E 639F 63A0 63A1 63A2 63A4 63A5 63A6 63A7 63A8
63A9 63AA 63AB 63AC 63AD 63AE 63AF 63B3 63B4 63B5
63B6 63B7 63B8 63B9 63BA 63BB 63BC 63BD 22BCA 22BCE
63B2 3A8A 3A8B 3A8C 3A8D 3A8E 555F 654D 654E 654F
6550 6551 6552 6553 6554 6555 6556 6557 6558 6559
655A 655B 655D 658D 658E 658F 659B 659C 65AC 65AD
3ACB 65C7 65C8 65C9 65CB 65CC 65CD 65CE 65CF 65E3
3AF0 3AF2 52D7 6657 6658 6659 665A 665B 665C 665D
665E 6661 6662 6663 6664 6665 6666 6667 6668 6669
66FD 231B3 231C8 231C9 66F9 66FC 3B36 3B37 6716 6718
6719 671A 671B 3B68 3B69 3B6A 3B6B 3B6C
3B6D 3B6E 3B6F 3B70 3B71 3B72 3B73 3B74 3B75 3B77
686B 686C 686D 686E 686F 6870 6871 6872 6873 6874
6875 6876 6877 6878 6879 687A 687B 687C 687D 687E
687F 6880 6881 6882 6883 6884 6885 6886 6887 6888
6889 688A 688B 688C 688D 688E 688F 6890 6891 6892
6893 6894 6895 6896 6897 6898 6899 689A 689B 689C
689D 689E 689F 68A0 68A1 68A2 68A3 68A4 68A5 68A6
68A7 68A8 68A9 68AA 68AB 68AC 68AD 68AE 68AF 68B0
68B1 68B2 68B3 68B5 68B6 68B7 68B8 68B9 68BA 68BB
68BC 68BD 68BE 68BF 68C0 68C1 68C2 6956 3C2F 6B32
6B33 6B35 6B36 6B37 6B38 3C62 6B8C 6B8D 6B8E 6B8F
6B90 6B91 6B92 6B93 6BB8 6BB9 6BBA 6BBB 6BEB 6BEC
6BED 6BEE 6C2A 6C2B 23C63 3CEB 6D8E 3D00
3D04 6D99 6DAA 6DAB 6DAC 6DAD 6DAE 6DAF 6DB0 6DB1
6DB2 6DB3 6DB4 6DB5 6DB6 6DB7 6DB8 6DB9 6DBA 6DBB
6DBC 6DBD 6DBE 6DBF 6DC0 6DC1 6DC2 6DC3 6DC4 6DC5
6DC6 6DC7 6DC8 6DC9 6DCA 6DCB 6DCC 6DCD 6DCE 6DCF
6DD0 6DD1 6DD2 6DD3 6DD4 6DD5 6DD6 6DD7 6DD8 6DD9
6DDA 6DDB 6DDC 6DDD 6DDE 6DDF 6DE0 6DE1 6DE2 6DE3
6DE4 6DE5 6DE6 6DE7 6DE8 6DE9 6DEA 6DEB 6DEC 6DED
6DEE 6DEF 6DF0 6DF1 6DF2 6DF3 6DF4 6DF5 6DF6 6DF7
6DF8 6DF9 6DFA 6DFB 6DFD 6DFF 6E00 6E01 6E02 6E04
6E05 6E06 6E07 6E08 6E09 6E0A 6E0B 6E0C 6E0D 6E0E
6E0F 6E10 6E11 6E12 6E13 6E14 6E15 6E16 6E17 6E1A
6E74 23D7E 23D8F 23DB6 23DB7 23DB8 23DB9 23DBA 23DBB 23DBC
23DBD 23DE3 23DF8 3DBF 70EF 70F0 70F1 70F2
70F3 70F4 70F5 70F6 70F7 70F8 70F9 70FA 70FC 70FD
70FE 70FF 7100 7101 7102 7103 7104 7105 7106 7107
7108 7109 710A 710B 710C 710D 710E 710F 7110 7111
7112 7113 7115 7116 7117 7118 2424B 24256 24259 7114
723D 3E3A 3E3C 3E3E 3E40 727B 727C 727D 727E 727F
7281 24665 72FF 7304 7305 7307 7308 7309 730A 730D
730E 730F 7310 7311 7313 7314 7315 7316 7317 7318
7319 731A 731B 731C 731D 731E 731F 7320 7321 732A
7387 7388 3ECA 3ECC 3ED0 73F3 73F4 73F5 73F6 73F8
73FA 73FB 73FC 73FD 73FE 73FF 7400 7401 7402 7403
7404 7405 7406 7407 7408 740A 740B 740C 740D 740E
740F 7410 7411 7412 7413 24962 24963 24974 24975 24976
3F0E 74E0 3F26 74F6 74F7 74F8 751B 751C
7522 7523 7561 7562 7563 7564 7565 7566 7567 7569
7570 75B5 75CA 75CB 75CC 75CD 75CE 75CF 75D0 75D1
75D2 75D3 75D4 75D5 75D6 7689 768E 768F 7690 7691
76B2 4001 4002 76D2 76D3 76D4 76D5 76D6 76D7 76D8
76DB 7725 7726 772D 772E 772F 7730 7731 7732 7733
7734 7735 7736 7737 7738 7739 773A 773B 773C 773D
773E 7741 2517D 2517E 7740 77EA 77EB 7826 7842 7843
7844 7845 7846 7847 7848 7849 784A 784B 784C 784D
784E 784F 7850 7851 7852 7853 7854 7855 7856 7857
7858 7859 785A 785B 7961 4104 7963 7964 7965 7967
7968 7969 796A 796B 796C 796D 796E 796F 8996 25683
79BB 413B 4141 4143 4145 79F1 79F2 79F3 79F4 79F5
79F6 79F7 79F8 79F9 79FA 79FB 79FC 79FD
79FE 7A06 7A8F 7A90 7A91 7A92 7A93 7A94 7A95 7A9A
7AE1 7B16 7B17 7B18 7B19 7B1A 7B1B 7B1C 7B1D 7B1E
7B1F 7B20 7B21 7B22 7B23 7B24 7B25 7B26 7B27 7B28
7B29 7B2A 7B2B 7B2C 7B2D 7B2E 7B2F 7B30 7B31 7B32
7B33 7B34 7B35 7B36 7B37 7B38 7B39 7B3A 7B3B 7B3C
7B3D 7B3E 7568 7C92 7C93 7C94 7C95 7C96 7C97 7C98
7C99 7C9A 7C9B 7C9C 7C9D 7CA3 25E49 7D28 7D29 7D2C
7D2D 7D2E 7D2F 7D30 7D31 7D32 7D33 7D34 7D35 7D36
7D37 7D38 7D39 7D3A 7D3B 7D3C 7D3D 7D3E 7D3F 7D40
7D41 7D42 7D43 7D44 7D45 7D46 7D47 7D48 7D49 7D4A
7D4B 7D4C 25FE1 25FE2 7EE9 7EEA 7EEB 7EEC 7EED 7EEE
7EEF 7EF0 7EF1 7EF2 7EF3 7EF4 7EF5 7EF6 7EF7 7EF8
7EF9 7EFA 7EFB 7EFC 7EFD 7EFE 7EFF 7F00
7F01 4344 4345 7F3B 7F3D 7F63 7F95 7F9A 7F9B 7F9C
7F9D 7F9E 7F9F 7FC7 7FC8 7FC9 7FCA 7FCB 7FCC 7FCD
7FCE 7FCF 7FD0 7FD1 7FD2 8008 8009 801A 801B 801C
801D 801E 801F 8043 8044 8045 8046 8047 8048 8049
804A 804B 804C 804D 80EC 43F2 8115 8116 8117 8118
8119 811A 811B 811C 811D 811E 811F 8121 8122 8123
8124 8125 8126 8127 8128 8129 812A 812B 812C 812D
812E 812F 8130 8131 8132 8133 8134 8135 8136 8137
8138 266DA 266E8 266FC 2690E 8202 8211 8232 8233 8234
8235 8236 8237 8238 8239 823A 823B 26A2D 26A2E 8274
8359 836B 831D 8323 8370 8371 8372 8373 8374 8375
8376 8377 8378 8379 837A 837B 837C 837D 837E 837F
8380 8381 8382 8383 8384 8385 8386 8387
8388 8389 838A 838B 838C 838D 838E 838F 8390 8391
8392 8393 8394 8395 8396 8397 8398 8399 839B 839C
839D 839E 839F 83A0 83A1 83A2 83A3 83A4 83A5 83A6
83A7 83A8 83A9 83AA 83AB 83AC 83AE 83AF 83B0 83B1
83B2 83B3 83B4 83B5 83B6 83B7 83B8 83B9 83BA 83BC
83BD 26BC0 26BF7 26C21 83AD 5F6A 8655 8656 8657 8658
8659 865A 86AB 86AD 86AE 86AF 86B0 86B1 86B2 86B3
86B4 86B5 86B6 86B7 86B8 86B9 86BA 86BB 86BC 86BD
86BE 86BF 86C0 86C1 86C2 86C3 86C4 86C5 86C6 86C7
86C8 86C9 86CA 86CB 86CC 86CD 86CE 86CF FA21 27280
27285 2728B 8845 8850 8851 8852 8853 8854 4626 8888
8889 888A 888B 888C 888D 888E 888F 8890 8891 8892
8893 8894 8895 8896 8897 8898 8899 889A
889B 889C 889D 889E 889F 88A0 88A1 88A2 88A3 88A4
88A5 88A6 88A7 88A8 88A9 88AA 88AB 88AC 88AD 88AE
88B0 88AF 8982 467A 898F 8990 8991 8992 8993 8994
89CB 89D5 89D6 89D7 89D8 89D9 278C8 46BC 8A1B 8A1C
8A1D 8A1E 8A1F 8A20 8A21 8A22 8A23 8A24 8A25 8A26
8A27 8A28 8A29 8A2A 8A2B 8A2C 8A2D 8A2E 8A2F 8A30
8A31 8A32 8A33 2797A 8C0B 8C0C 8C0D 8C0E 8C0F 8C10
8C11 8C12 8C13 8C14 8C15 8C16 8C17 8C18 8C19 8C1A
8C1B 8C1C 8C1D 8C1E 8C39 8C3A 8C3B 8C49 4746 4747
8C58 8C59 8C5A 8C5B 8C5C 8C5D 8C7C 8C7D 8CA5 8CA6
8CA7 8CA8 8CA9 8CAA 8CAB 8CAC 8CAD 8CAE 8D47 8D48
8D49 8D4A 8D65 8D66 8D67 479B 8D79 8D7A 8D7B 8D7C
8D7D 8D7E 8D7F FA23 8DB9 8DBA 8DBB 8DBD
8DBE 8DBF 8DC0 8DC1 8DC2 8DC3 8DC4 8EAD 8EAE 8EAF
28218 2821A 4846 4847 4848 4849 484A 8ED6 8ED7 8ED8
8ED9 8EDA 8EDB 8EDC 8EDD 8EDE 8EDF 8EE0 8EE1 8EE2
8EE3 282CD 8F84 8F85 8F86 489B 900B 900C 900D 900E
900F 9010 9011 9012 9013 9014 9015 9016 9017 9018
9019 901A 901B 901C 901D 901E 901F 9020 9021 9022
9023 9024 9025 9026 9027 28501 90AB 90D4 90E8 90E9
90EA 90EB 90EC 90ED 90EE 90EF 90F0 90F2 90F3 90F4
90F7 90F8 90FD 2870F 28713 48ED 9153 9154 9155 9156
9157 9158 9159 915A 915B 915C 915D 915E 28804 91C8
91CE 91E3 91E4 91E5 91E6 91E7 91E8 91E9 91EA 91EB
91EC 91ED 91EE 91EF 91F0 91F1 91F2 91F3 91F4 91F5
91F6 91F7 91F8 91F9 91FA 91FB 91FC 28948
28949 94CF 94D0 94D1 94D2 94D3 94D4 94D5 94D6 94D7
94D8 94D9 94DA 94DB 94DC 94DD 94DE 94DF 94E0 94E1
94E2 94E3 94E4 94E5 94E6 94E7 94E8 94E9 94EA 94EB
94EC 94ED 94EE 94EF 94F0 94F1 94F2 94F3 94F4 94F5
94F6 94F7 9579 957A 9586 9587 9588 9589 958A 28CD2
9607 9608 9609 960A 960B 960C 960D 960E 960F 9610
966A 966B 966C 966D 966E 966F 9670 9671 9673 9674
9675 9676 9677 9678 9679 967A 967C 28EAC 28EB2 28EB3
96BF 96C0 96E9 96EA 96EB 291D5 291EB 976A 7ADF 7AE0
9802 9803 9804 9885 9886 9887 9888 98E1 98E5 98E6
9983 9984 9985 9986 9997 9A90 9A91 9A92 9A93 9A94
9A95 9A96 9AD9 9B5A 9C7E 9CE5 9E37 9E38 9E39 9E3A
9E3B 9E3C 9E3D 9E3E 9E3F 9E75 9E7F 9EA5
9EB8 9EBB 9ED2 9F81 9F9A 9F9B
FDD0-280C
20046 4E81 4EB4 4EB5 5068 3473 347A 5080 5081 5082
5083 5084 5085 5086 5087 5088 5089 508A 508B 508C
508D 508E 508F 5090 5091 5092 5093 5094 5095 5096
5097 5098 5099 509A 509B 509C 509D 509E 509F 50A0
50A1 50A2 50A3 50A4 50A5 50A6 50A7 50A8 50A9 2030A
20325 515F 5160 204A3 6700 51D2 51D3 51D4 51D5 51D6
51F1 51F2 51FF 34FB 5269 5272 5273 5274 5275 52DB
52DC 52DD 52DE 5311 5312 20923 20954 3538 535A 53A4
53A5 53A6 53A7 53A8 53C5 35BF 35C1 35C4 35C5 35C7
35CA 35CE 5559 557A 557B 557C 557D 557E 557F 5580
5581 5582 5583 5584 5585 5586 5587 5588 5589 558A
558B 558C 558E 558F 5590 5591 5592 5593 5594 5595
5596 5597 5598 5599 559A 559B 559C 559D
559E 559F 55A0 55A1 55A2 55A3 55A4 55A5 55A6 55A7
55A8 55A9 55AA 55AB 55AC 55AD 55AE 55AF 55B0 55B1
55B2 55B3 55B4 55B5 55B7 55B8 55B9 55BA 55BB 55BC
55BD 55BE 5645 20DC8 20E04 20E09 20E0A 20E0D 20E0E 20E0F
20E10 20E11 20E16 20E1D 55DE 570C 570D 570E 5710 364E
5816 5817 5818 5819 581A 581B 581C 581D 581E 581F
5820 5821 5822 5823 5824 5825 5826 5827 5828 5829
582A 582B 582C 582D 582E 582F 5830 5831 5833 5834
5836 5837 5838 5839 583A 583B 583C 583E 583F 5840
5841 5842 5844 5845 5846 5847 5848 21375 21376 2138E
21398 2139C 58F9 58FA 58FB 5921 5960 5961 5963 5964
5965 36F5 3700 3701 3703 3704 5A77 5A78 5A79 5A7A
5A7B 5A7C 5A7D 5A7E 5A7F 5A80 5A81 5A82
5A83 5A84 5A85 5A86 5A87 5A88 5A89 5A8A 5A8B 5A8C
5A8D 5A8F 5A91 5A92 5A93 5A94 5A95 5A96 5A97 5A98
5A99 5A9A 5A9B 5A9C 5A9D 5A9E 5A9F 5AA0 5AA1 5AA2
5AA3 5AA4 5AA5 5AA6 5AA7 5AA8 5AA9 5AAA 5AAB 5AAC
5AAD 5AAE 5AAF 5ACF 217AB 217B0 217B1 217B2 217B3 217B4
217B5 217C3 217C7 217D9 217DA 217DB 217DC 217DF 5B71 2197C
21980 5B73 3762 5BCA 5BCB 5BCC 5BCD 5BCE 5BCF 5BD0
5BD1 5BD2 5BD3 5BD4 5BD5 5BEA 21A45 21A4B 5C0A 5C0B
5C0C 5C1E 5C30 5C31 5C5E 5C5F 5C61 21CA2 21CA5 5D31
5D32 5D33 5D34 5D35 5D36 5D37 5D38 5D39 5D3A 5D3B
5D3C 5D3D 5D3E 5D3F 5D40 5D41 5D42 5D43 5D44 5D45
5D46 5D47 5D48 5D49 5D4B 5D4C 5D4D 5D4E 5D4F 5D50
5D51 5D52 5D53 5D54 5D55 5D56 5D57 5D58
5D59 5D5A 5D5B 5D5C 5D5D FA11 21E89 21EA4 21EA8 5D6B
382D 5DEF 5DFD 22045 22049 5E3D 5E3F 5E40 5E41 5E42
5E43 5E44 5E45 5E46 5E47 5E49 220FC 5E48 5E7E 5EBD
5EBF 5EC0 5EC1 5EC2 5EC3 5ECA 5EC4 5F11 5F3A 5F3B
5F3C 5F3D 5F3E 5F58 5F6D 5F9A 5FA5 5FA6 5FA7 5FA8
5FA9 5FAA 5FAB 22530 60B2 60B3 60B6 60B9 60C1 60C4
60C9 60CC 60CE 60D1 60D2 60D6 60E0 60E1 60E2 60E3
60E5 60E9 60EA 60EB 3961 3962 3965 60F0 60F1 60F2
60F4 60F5 60F6 60F8 60FA 60FB 60FC 60FD 60FE 60FF
6100 6103 6104 6105 6107 6109 610A 610B 610C 610E
6110 6111 6112 6113 6114 6115 6116 6118 611C 611D
611E 6120 6121 6122 6123 6124 6125 6126 6168 2272A
22775 22781 39B8 621E 621F 6249 624A 638C
6394 63A3 63B0 63B1 3A17 3A18 63BE 63BF 63C0 63C1
63C2 63C3 63C4 63C6 63C7 63C8 63C9 63CA 63CB 63CC
63CD 63CE 63CF 63D0 63D1 63D2 63D3 63D4 63D5 63D6
63D7 63D8 63D9 63DA 63DB 63DC 63DD 63DE 63DF 63E0
63E1 63E2 63E3 63E5 63E6 63E8 63E9 63EA 63EC 63ED
63EE 63EF 63F0 63F2 63F3 63F4 63F5 63F6 63F7 63F8
63F9 63FA 63FB 63FC 63FD 63FE 63FF 6400 6401 6402
6403 6404 6405 6452 22C26 22C27 22C38 22C4C 22C51 22C55
6461 6532 3A8F 3A90 3A97 655C 655E 655F 6560 6561
6562 6563 6564 6565 6566 6567 6568 6569 656A 22F74
658C 6590 6591 3AB8 659D 2307D 2307E 659E 3AC0 65AE
65AF 65B1 65D0 65D1 23103 3AFB 3B00 666A 666B 666C
666D 666E 666F 6670 6671 6672 6673 6674
6675 6676 6677 6679 667A 667B 667C 667D 667E 667F
6680 6681 6682 6683 6691 231F7 231F8 231F9 2320F 66FE
66FF 6701 6702 3B38 671C 671D 671E 671F 68B4 3B76
3B78 3B79 3B7A 3B7B 3B7C 3B7D 3B7E 3B7F 3B80 68C3
68C4 68C5 68C6 68C7 68C8 68C9 68CA 68CB 68CC 68CD
68CE 68CF 68D0 68D1 68D2 68D3 68D4 68D5 68D6 68D7
68D8 68D9 68DA 68DB 68DC 68DD 68DE 68DF 68E0 68E1
68E2 68E3 68E4 68E5 68E6 68E7 68E8 68E9 68EA 68EB
68EC 68ED 68EE 68EF 68F0 68F1 68F2 68F3 68F4 68F5
68F6 68F7 68F8 68F9 68FA 68FB 68FC 68FD 68FE 68FF
6900 6901 6902 6903 6904 6905 6906 6907 6908 6909
690A 690B 690C 690D 690E 690F 6910 6911 6912 6913
6914 6915 6916 6917 6918 6919 691A 691B
691C 691D 691E 691F 6920 6921 6922 6923 6924 6925
6926 6927 6928 6929 692A 692B 692C 692D 692E 234E5
23519 23530 696E 6970 6B39 6B3A 6B3B 6B3C 6B3D 6B3E
6B3F 6B6E 6B6F 3C64 3C66 3C68 3C69 6B94 6B95 6B96
6B97 6B98 6B99 6B9A 6BBC 6BBD 6BBE 6BEF 6BF0 6BF1
6BF2 6BF3 6BF4 6BF5 6BF6 6C2C 6C2D 6C2E 6C2F 6C30
6DFC 6DFE 3D13 3D1D 3D20 3D22 6E03 6E18 6E19 6E1B
6E1C 6E1D 6E1E 6E1F 6E20 6E21 6E22 6E23 6E24 6E25
6E26 6E27 6E28 6E29 6E2A 6E2B 6E2C 6E2D 6E2E 6E2F
6E30 6E31 6E32 6E33 6E34 6E35 6E36 6E37 6E38 6E39
6E3A 6E3B 6E3C 6E3D 6E3E 6E3F 6E40 6E41 6E42 6E43
6E44 6E45 6E46 6E47 6E48 6E49 6E4A 6E4B 6E4C 6E4D
6E4E 6E4F 6E50 6E51 6E52 6E53 6E54 6E55
6E56 6E57 6E58 6E59 6E5A 6E5B 6E5C 6E5D 6E5E 6E5F
6E60 6E61 6E62 6E63 6E64 6E65 6E66 6E67 6E68 6E69
6E6A 6E6B 6E6D 6E6E 6E6F 6E70 6E71 6E72 6E73 6E75
6E76 6E77 6E78 6E79 6E7A 6E7B 6E7C 6E7D 6E7E 6E7F
6E80 6E81 6E82 6E83 6E84 6E85 6E86 6E87 6E88 6E89
6E8A 6E8B 6E8C 6ECB 6EDE 23E11 23E2C 23E2D 23E2E 23E2F
23E30 23E31 23E39 70FB 3DC6 3DC7 3DC9 3DCC 3DCD 7119
711A 711B 711C 711D 711E 711F 7120 7121 7122 7123
7124 7125 7126 7127 7128 7129 712A 712B 712C 712D
712E 712F 7130 7131 7132 7133 7134 7135 7136 7137
7138 7139 713A 713B 713C 713D 713E 713F 7140 716E
24276 24277 24278 24284 24293 24295 242A5 7232 724B 724C
724D 245C8 725A 3E43 7280 7282 7283 7284
7285 7286 7287 7288 7289 728A 728B 24674 7306 730B
730C 7312 732B 7322 7323 7324 7325 7326 7327 7328
7329 732C 732D 732F 7330 7331 7332 7333 7334 7335
7336 7338 7339 247E0 3ED1 3ED6 3EDA 3EDB 73F7 7414
7415 7416 7417 7418 7419 741A 741B 741C 741D 741F
7420 7421 7422 7423 7424 7425 7426 7428 7429 742A
742B 742C 742D 742E 742F 7430 7431 7432 7433 7434
7435 7436 7437 7438 7439 743A 743B 743C 2497B 2497F
24982 24988 24989 2498A 2498B 2498C 2498D 2498E 2498F 24994
249A4 249A7 249A9 249AB 249AC 249AD 74F9 74FA 74FB 74FC
7524 7525 7526 752F 24C09 756A 756B 756C 756D 756E
756F 7572 7573 7574 7571 758E 758F 3F93 3F98 75D7
75D8 75D9 75DA 75DB 75DC 75DD 75DE 75DF
75E0 75E1 75E2 75E3 75E4 75E5 75E6 75E7 75E8 75E9
75EA 75EB 24DB8 767B 767C 7692 7693 7694 7695 7696
76B3 76B4 4003 76D9 76DA 76DC 4039 4040 7742 7743
7744 7745 7746 7747 7748 7749 774A 774B 774C 774D
774E 774F 7750 7751 77DE 77DF 77EC 77ED 785C 785D
785E 785F 7860 7861 7862 7863 7864 7865 7866 7867
7868 7869 786A 786B 786C 786D 786E 786F 7870 7871
7872 7873 7874 7875 7876 7877 4109 7966 7970 7971
7972 7973 7974 7975 7976 7977 7978 7984 25695 79BC
79FF 7A00 7A01 7A02 7A03 7A04 7A05 7A07 7A08 7A09
7A0A 7A0B 7A0C 7A0D 7A0E 257C7 7A96 7A97 7A98 7A99
7A9B 7A9C 7A9D 7AE2 7AE3 7AE4 7AE5 7AE6 7AE7 41ED
41EE 41EF 7B3F 7B40 7B41 7B42 7B43 7B44
7B45 7B46 7B47 7B48 7B49 7B4A 7B4B 7B4C 7B4D 7B4E
7B4F 7B50 7B51 7B52 7B53 7B54 7B55 7B56 7B57 7B58
7B59 7B5A 7B5B 7B5C 7B5D 7B6C 4283 7C9E 7C9F 7CA0
7CA1 7CA2 7CA4 7CA5 7CA6 7CA7 7CA8 7CA9 7CAA 7CAB
7CAC 7CAD 7D2A 7D2B 7D4D 7D4E 7D4F 7D50 7D51 7D52
7D53 7D54 7D55 7D56 7D57 7D58 7D59 7D5A 7D5C 7D5D
7D5E 7D5F 7D60 7D61 7D62 7D63 7D64 7D65 7D66 7D67
7D68 7D69 7D6A 7D6B 7D6C 7D6D 7D6E 7D6F 7D70 7D71
7D72 7D73 7D74 7D75 7D76 7D77 7D7E 433B 7F02 7F03
7F04 7F05 7F06 7F07 7F08 7F09 7F0A 7F0B 7F0C 7F0D
7F0E 7F0F 7F10 7F11 7F12 7F13 7F14 7F15 7F16 7F17
7F18 7F3E 7F3F 7F40 7F64 7F65 7F66 436E 436F 7FA0
7FA1 7FA2 7FD3 7FD4 7FD5 7FD6 7FD7 7FD8
7FD9 7FDA 800B 8020 804E 804F 8050 8051 8052 8053
8054 8060 26572 80D4 80FE 8114 8120 3B39 4400 4401
4402 8139 813A 813B 813C 813D 813E 813F 8140 8141
8142 8143 8144 8145 8146 8147 8148 8149 814A 814B
814C 814D 814E 814F 8151 8152 8153 8154 8155 8156
8157 8158 8159 815A 26716 26741 8174 81E6 81EE 81EF
81F0 26911 81F5 81F6 81F7 81F8 81F9 8203 8204 8212
821C 823C 823D 823E 823F 26A34 8275 44B0 44B7 44C0
8312 833B 8346 839A 83BE 83BF 83C0 83C1 83C2 83C3
83C4 83C5 83C6 83C7 83C8 83C9 83CA 83CB 83CC 83CD
83CE 83CF 83D0 83D1 83D2 83D3 83D4 83D5 83D6 83D7
83D8 83DA 83DB 83DC 83DD 83DE 83DF 83E0 83E1 83E2
83E3 83E4 83E5 83E6 83E7 83E8 83E9 83EA
83EB 83EC 83ED 83EE 83EF 83F0 83F1 83F2 83F3 83F4
83F5 83F6 83F7 83F8 83F9 83FA 83FB 83FC 83FD 83FE
83FF 8400 8401 8402 8403 8404 8405 8406 8407 8408
8409 840A 840B 840C 840D 840E 840F 8410 8411 8412
8413 8414 8415 8416 8417 8418 8419 841A 841B 841C
841D 841E 841F 8420 8421 8422 8423 8424 8426 8427
8457 26C40 26C7E 26C7F 26C80 26C81 26C82 26CA4 26CB7 26CB8
26CBD 26CC0 8438 865B 865D 45AD 45AF 8688 86D0 86D1
86D2 86D3 86D4 86D5 86D7 86D8 86D9 86DA 86DB 86DC
86DD 86DE 86DF 86E0 86E1 86E2 86E3 86E4 86E5 86E6
86E7 86E8 86E9 86EA 86EB 86EC 86ED 86EE 86EF 86F0
86F1 86F2 86F3 86F4 272B2 272B6 8846 8847 8848 8849
8855 8856 8857 88B1 88B2 88B3 88B4 88B5
88B6 88B7 88B8 88B9 88BA 88BB 88BC 88BD 88BE 88BF
88C0 88C1 88C2 88C3 88C4 88C5 88C6 88C7 88C8 88C9
88D7 27694 8901 8983 8984 8999 8995 8997 8998 899A
89CC 89CD 89DA 89DB 89DD 89DE 46CF 46D0 8A34 8A35
8A36 8A37 8A38 8A39 8A3A 8A3B 8A3C 8A3D 8A40 8A41
8A42 8A43 8A44 8A45 8A46 8A47 8A48 8A49 8A4A 8A4B
8A4C 8A4D 8A4E 8A4F 8A50 8A51 8A52 8A53 8A54 8A55
8A56 8A57 8A58 8A59 8A5A 8A5B 8A5C 8A5D 8A5E 8A5F
8A60 279A0 8C1F 8C20 8C21 8C22 8C23 8C24 8C25 8C26
8C27 4748 8C5E 8C5F 8C60 8C61 8C7E 8C7F 8C80 8C81
8C82 8C83 8CAF 8CB0 8CB1 8CB3 8CB4 8CB5 8CB6 8CB7
8CB8 8CB9 8CBA 8CBB 8CBC 8CBD 8CBE 8CBF 8CC0 8CC1
27D53 27D54 8D4B 8D4C 8D4D 8D4E 8D4F 8D50
8D51 8D52 8D53 8D54 8D55 47A1 47A3 8D80 8D81 8D82
8D83 8D84 8D85 8D86 8D87 8D88 8D89 8D8A 8D8B 47ED
8DC5 8DC6 8DC7 8DC8 8DC9 8DCA 8DCB 8DCC 8DCD 8DCE
8DCF 8DD1 8DD2 8DD3 8DD4 8DD5 8DD6 8DD7 8DD8 8DD9
8DDA 8DDB 8DDC 8DDD 8DDE 8DF5 27FF9 28002 28009 8EB0
4852 8EE4 8EE5 8EE6 8EE7 8EE8 8EE9 8EEA 8EEB 8EEC
8EEE 8EEF 8EF0 8EF1 8EF2 8EF3 8EF4 8EF5 8EF6 8EF7
8EF8 8EF9 8EFA 8EFB 8EFC 8EFD 282E2 8F87 8F88 8F89
8F8A 8F8B 8F8C 8F8D 8F8E 8F9C 8F9D 28412 9028 9029
902A 902B 902C 902D 902E 902F 9030 9031 9032 9033
9034 9035 9036 9037 9038 9039 903A 903B 2853C 2853D
90F5 48D0 90F9 90FB 90FC 90FE 90FF 9100 9101 9102
9103 9104 9105 9106 9107 9108 9109 910A
912C 48F3 915F 9160 9161 9162 9163 9164 9165 91C9
91CA 91CF 491E 4920 91FD 91FE 91FF 9200 9201 9202
9203 9204 9205 9206 9207 9208 9209 920A 920B 920C
920D 920E 920F 9210 9211 9212 9213 9214 9215 9216
9217 9218 9219 921A 921B 921C 921D 921E 921F 9220
9221 9222 9223 9224 9225 9226 9227 9228 9229 922A
922B 922C 28956 28964 94F8 94F9 94FA 94FB 94FC 94FD
94FE 94FF 9500 9501 9502 9503 9504 9505 9506 9507
9508 9509 950A 950B 950C 950D 950E 950F 9510 9511
9512 9513 9514 9515 957B 958B 958C 958D 958E 958F
9590 9591 9592 9593 9594 9595 9596 9597 9611 9612
9613 9614 9615 9672 967B 967D 967E 967F 9680 9681
9682 9683 9684 9685 9686 9687 9688 9689
968A 968B 968C 968D 968E 9690 28ED9 28EE7 96C1 96C2
96C3 96C4 96C5 96C6 96C7 96C8 96EC 96ED 96EE 96EF
96F0 96F1 96F2 96F3 29088 2908B 9753 9754 975F 976B
976C 976D 976E 976F 9770 9771 97CC 97E9 9805 9806
9807 9808 9889 988A 988B 988C 988D 988E 988F 98A9
98AA 2959E 98D3 98E7 98E8 98E9 98EA 98EB 98ED 98EF
98F0 98F2 9987 9988 998A 998B 99AD 99AE 9A97 9A98
9A99 9A9A 9A9B 9AA9 9AE0 9C7F 9C80 9C81 9C82 9C83
9CE6 9E40 9E41 9E42 9E43 9E44 9E45 9E46 9E47 9E48
9EC3 9EC4 9ECD 9ED1 9EF9 9F0B 9F82
FDD0-280D
4E82 4E83 4E84 4EB6 4EB7 347D 347E 50AA 50AB 50AC
50AD 50AE 50AF 50B0 50B1 50B2 50B3 50B4 50B5 50B6
50B7 50B8 50B9 50BA 50BB 50BC 50BD 50BE 50BF 50C0
50C1 50C2 50C3 50C4 50C5 50C6 50C7 50C8 50C9 50CA
50CB 50CC 50CD 20341 20345 20346 20347 203B5 5161 517E
517F 51D7 5277 5278 5279 527A 527B 527C 527D 527E
527F 52DF 52E0 52E1 52E2 52E3 52E4 52E5 52E6 52E7
3532 3533 3534 532F 5380 5381 53AA 53AB 53AF 53E0
FA0E 35D2 35D6 35DB 35DD 35E0 558D 55BF 55C0 55C1
55C2 55C3 55C4 55C5 55C6 55C7 55C8 55C9 55CA 55CB
55CC 55CD 55CE 55CF 55D0 55D1 55D2 55D3 55D4 55D5
55D6 55D7 55D8 55D9 55DA 55DB 55DC 55DD 55DF 55E0
55E1 55E2 55E3 55E4 55E5 55E6 55E7 55E8
55E9 55EA 55EB 55EC 55ED 55EE 55EF 55F0 55F1 55F2
55F3 55F4 55F5 20E4C 20E6D 20E73 20E75 20E76 20E77 20E78
20E79 20E7A 20E7B 20E8C 20E96 20E98 20E9D 20EA2 20EAA 20EAB
20EAC 20EB6 5711 5712 5713 5714 5715 365F 583D 5843
5849 584A 584B 584C 584D 584E 584F 5850 5851 5852
5853 5854 5855 5856 5857 5858 5859 585A 585B 585C
585D 585E 585F 5860 5861 5862 5863 5864 5865 5866
5867 5868 5869 586A 586B 586C 586D 586E 586F 5870
5871 213C5 213C6 58FC 5966 5967 5968 21661 3708 370A
370D 5A90 5AB0 5AB1 5AB2 5AB3 5AB4 5AB5 5AB6 5AB7
5AB8 5AB9 5ABA 5ABB 5ABC 5ABD 5ABE 5ABF 5AC0 5AC1
5AC2 5AC3 5AC4 5AC5 5AC6 5AC7 5AC8 5AC9 5ACA 5ACB
5ACC 5ACD 5ACE 5AD0 5AD1 5AD2 5AD3 5AD4
217EF 217F5 217F6 217F8 217F9 217FA 217FB 217FC 5B74 21983
21988 5B76 3766 5BD6 5BD7 5BD8 5BD9 5BDA 5BDB 5BDC
5BDD 5C1F 5C20 5C32 5C33 5C34 21CAC 37F2 37F8 5D4A
5D5E 5D5F 5D60 5D61 5D62 5D63 5D64 5D65 5D66 5D67
5D68 5D69 5D6A 5D6C 5D6D 5D6E 5D6F 5D70 5D71 5D72
5D73 5D74 5D75 5D76 21EC8 21ED5 5DF0 5E4A 5E4B 5E4C
5E4D 5E4E 5E4F 5E79 5EC5 5EC6 5EC7 5EC8 5EC9 5ECB
5ECC 2227C 5F12 5F3F 5F40 5F41 5F42 5F59 5F5A 22465
5F6E 5FAC 5FAD 5FAE 5FAF 5FB0 3963 3964 3966 60F3
60F7 60F9 6101 6102 6106 6108 610D 610F 6117 6119
611A 611B 611F 6127 6129 612A 612B 612D 612E 612F
6130 6131 6132 6134 6135 6136 6137 6139 613A 613C
613D 613E 6140 6143 6144 6145 6146 6149
614A 614C 614D 614E 614F 6151 227B4 227B5 227CD 6226
6220 6221 6222 6223 6224 6225 63E7 63EB 63F1 3A20
3A23 3A26 3A29 3A2A 6406 6407 6408 6409 640A 640B
640C 640D 640E 640F 6410 6411 6412 6413 6414 6415
6416 6417 6418 6419 641A 641B 641C 641D 641E 641F
6420 6421 6422 6423 6424 6425 6426 6427 6428 6429
642A 642C 642D 642E 642F 6430 6432 6433 6435 6436
6437 6438 6439 643A 643C 643D 643E 6440 6441 6442
6443 6444 6445 6446 6447 6448 6449 644A 22C62 22C88
22C9B 22CA1 22CA9 22CB2 63C5 6431 656D 656B 656C 656E
656F 6570 6592 295B0 659F 65B0 65D2 65D3 65D4 65D5
65E4 6678 3B01 3B02 3B03 3B04 3B05 3B06 3B07 3B08
3B09 3B0A 3B0B 3B0C 6684 6685 6686 6687
6688 6689 668A 668B 668C 668D 668E 668F 6690 6692
6693 6694 6695 6696 6697 6698 6699 23225 2322F 23231
23232 23233 23234 6703 6720 6721 3B96 3B99 692F 6930
6931 6932 6933 6934 6935 6936 6937 6938 6939 693A
693B 693C 693D 693E 693F 6940 6941 6942 6943 6944
6945 6946 6947 6948 6949 694A 694B 694C 694D 694E
694F 6950 6951 6952 6953 6954 6955 6957 6958 6959
695A 695B 695C 695D 695E 695F 6960 6961 6962 6963
6964 6965 6966 6967 6968 6969 696A 696B 696C 696D
696F 6971 6972 6973 6974 6975 6976 6977 6978 6979
697A 697B 697C 697D 697E 697F 6980 6981 6982 6983
6984 6985 6986 6987 6988 6989 698B 698C 6994 6998
FA13 2355A 23567 23595 23599 2359C 3C3C 3C3E
6B40 6B41 6B42 6B43 6B44 6B45 6B46 6B47 6B48 6B71
6B72 6B73 3C6E 6B9B 6B9C 6BBF 6BC0 6BC1 6BC2 23AA7
6BD3 6BF7 6BF8 6BF9 6BFA 6BFB 6BFC 6BFD 6C31 6E6C
3D26 3D32 3D33 3D3B 6E8D 6E8E 6E8F 6E90 6E91 6E92
6E93 6E94 6E95 6E96 6E97 6E98 6E99 6E9A 6E9B 6E9C
6E9D 6E9E 6E9F 6EA0 6EA1 6EA2 6EA3 6EA4 6EA5 6EA6
6EA7 6EA8 6EA9 6EAA 6EAB 6EAC 6EAD 6EAE 6EAF 6EB0
6EB1 6EB2 6EB3 6EB4 6EB5 6EB6 6EB7 6EB8 6EB9 6EBA
6EBB 6EBC 6EBD 6EBE 6EBF 6EC0 6EC1 6EC2 6EC3 6EC4
6EC5 6EC6 6EC7 6EC8 6EC9 6ECA 6ECD 6ECF 6ED0 6ED1
6ED2 6ED3 6ED4 6ED6 6ED7 6ED8 6ED9 6EDB 6EDC 6EDD
6EDF 6EE0 6EE1 6EE2 6EE3 6EE4 6EE5 6EE6 6EE7 6EE8
6EE9 6EEA 6F13 23E88 23E89 23E8A 23E8B 23EB9
23EBF 6EDA 3BA1 3DD3 3DDB 7141 7142 7143 7144 7145
7146 7147 7148 7149 714A 714B 714C 714D 714E 714F
7150 7151 7152 7153 7154 7156 7157 7158 7159 715A
715C 715D 715E 715F 7160 7161 7162 7163 7164 7165
7166 7167 7168 7169 716A 716B 716C 716D 716F 7170
7171 7172 7173 7174 7175 7176 7177 7178 717A 242C1
242C9 242CA 242EE 242FA 24521 723A 7243 724E 724F 7250
7251 7252 3E48 728C 728D 728E 728F 7290 7291 24697
732E 7337 7341 733A 733B 733C 733D 733E 733F 7340
7342 7345 7346 7347 7348 7349 734A 24812 24823 3ED7
7427 3EDE 3EE1 3EE2 741E 743D 743E 743F 7440 7441
7442 7443 7444 7445 7446 7447 7448 7449 744A 744B
744C 744D 744E 744F 7450 7451 7452 7453
7454 7455 7456 7457 7458 7459 745A 745B 745C 745D
745E 745F 249B7 249B8 249B9 249BA 249BB 249C5 249D0 249DA
249DE 249DF 249E3 249E5 746F 74E1 74FD 74FE 74FF 7501
751D 751E 3F63 7575 7576 7577 7578 7579 757A 24C9E
24C9F 75EC 75ED 75EE 75EF 75F0 75F1 75F2 75F3 75F4
75F5 75F6 75F7 75F8 75F9 75FA 75FB 75FC 75FD 75FE
75FF 7600 7601 7602 7603 7604 7605 7606 24DEA 24DEB
760F 7610 7697 7698 7699 24F82 24F86 76B5 4004 76DD
76DE 76DF 4045 7752 7753 7754 7755 7756 7757 7758
7759 775A 775B 775C 775D 775E 775F 7760 7762 7763
7764 7765 7766 7767 7768 7769 776A 776B 776C 776D
251CD 251E3 251E6 251E7 7761 7779 77E0 77EE 40BB 40BF
7878 7879 787A 787B 787C 787D 787F 7880
7881 7882 7883 7884 7885 7886 7887 7888 7889 788A
788B 788C 788D 788E 788F 7890 7891 7892 7893 7894
7895 7896 7897 7898 7899 789A 789B 789C 78B0 410E
7979 797A 797B 797C 797D 797E 797F 7980 7981 7982
7983 7985 7986 79BD 842C 7A0F 7A10 7A11 7A12 7A13
7A14 7A15 7A16 7A17 7A18 7A19 7A1A 7A1B 7A1C 7A1D
7A1E 7A1F 7A20 7A21 7A22 7A23 7A24 7A25 257DF 257E0
257E1 7A9E 7A9F 7AA0 7AA1 7AA2 7AA3 7AA4 7AA5 7AA6
7AA7 259AC 41CF 7AE8 7AE9 7AEA 7AEB 25A95 41F8 41F9
41FB 41FC 41FD 41FE 41FF 4200 7B5E 7B5F 7B60 7B61
7B62 7B63 7B64 7B65 7B66 7B67 7B68 7B69 7B6A 7B6B
7B6D 7B6E 7B6F 7B70 7B71 7B72 7B73 7B74 7B76 7B77
7B78 7B79 7B7A 7B7B 7B7C 7B7D 7B7E 7B7F
7B80 7BC0 25B74 25B89 428C 7CAE 7CAF 7CB0 7CB1 7CB2
7CB3 7CB4 7CB5 7CC0 25E81 25E82 25E83 7D5B 7D78 7D79
7D7A 7D7B 7D7C 7D7D 7D7F 7D80 7D81 7D82 7D83 7D84
7D85 7D86 7D87 7D88 7D89 7D8A 7D8B 7D8C 7D8D 7D8E
7D8F 7D90 7D91 7D92 7D93 7D94 7D95 7D97 7D98 7D99
7D9A 7D9B 26029 7F19 7F1A 7F1B 7F1C 7F1D 7F1E 7F1F
7F20 7F21 7F22 7F23 7F24 7F67 7F68 7F69 7F6A 7F6B
7F6C 7F6D 7F6E 7F72 262D0 7FA3 7FA4 7FA5 7FA6 7FA7
7FA8 7FA9 7FAA 7FDB 7FDC 7FDD 8021 8022 8055 8056
8057 8058 8084 8085 8086 4413 5E50 815B 815C 815D
815E 815F 8160 8161 8162 8163 8164 8165 8166 8167
8168 8169 816A 816B 816C 816D 816E 816F 8170 8171
8172 8173 8175 8176 8177 8178 8179 817A
817B 817C 817D 817E 8205 821D 8240 8241 8242 8243
8244 8245 8246 8247 8248 8249 26A42 44C5 44CE 83BB
83D9 8425 8428 8429 842A 842B 842D 842E 842F 8430
8431 8432 8433 8434 8435 8436 8437 8439 843A 843B
843C 843D 843E 843F 8440 8441 8442 8443 8444 8445
8446 8447 8448 8449 844A 844B 844C 844D 844E 844F
8450 8451 8452 8453 8454 8455 8456 8458 8459 845A
845B 845C 845D 845E 845F 8460 8461 8462 8463 8464
8465 8466 8467 8468 8469 846A 846B 846C 846D 846E
846F 8470 8471 8472 8473 8474 8475 8476 8477 8478
8479 847A 847B 847C 847D 847E 847F 8480 8481 8482
8483 8484 8485 8486 8487 8488 8489 848B 848C 848D
848E 848F 26CC3 26CD1 26D22 26D23 26D24 26D25
26D26 26D27 26D28 26D29 26D2A 26D51 84C5 84C8 84F1 8507
865C 865E 865F 86D6 86F5 86F6 86F7 86F8 86F9 86FA
86FB 86FC 86FD 86FE 86FF 8700 8701 8702 8703 8704
8705 8706 8707 8708 8709 870A 870B 870C 870D 870E
870F 8710 8713 8714 8715 8716 8717 8746 272E6 874D
8858 8859 88CA 88CB 88CC 88CD 88CE 88CF 88D0 88D1
88D2 88D3 88D4 88D5 88D6 88D8 88D9 88DA 88DB 88DC
88DD 88DE 88DF 88E0 88E1 88E3 88E4 88E5 8985 4680
899B 899C 89CE 89DC 89DF 89E0 89E1 89E2 89E3 89E4
89E5 89E6 89E7 8A3E 8A3F 8A61 8A62 8A63 8A64 8A65
8A66 8A67 8A68 8A69 8A6A 8A6B 8A6C 8A6D 8A6E 8A6F
8A70 8A71 8A72 8A73 8A74 8A75 8A76 8A77 8A78 8A79
8A7A 8A7B 8A7C 8A7D 8A7E 8A7F 8A80 8A81
8A82 8A83 8A84 8A85 8A86 8A87 8A88 8A89 8A8A 8AA0
279DD 8C28 8C29 8C2A 8C2B 8C2C 8C3C 8C4A 8C4B 8C62
8C63 8C64 8C65 8C66 8C84 8C85 8C86 8C87 8C88 8C89
8C8A 8CB2 8CC2 8CC3 8CC4 8CC5 8CC6 8CC7 8CC8 8CC9
8CCA 8CCB 8CCC 8CCD 8CCE 27D66 27D73 27D84 8D56 8D57
8D68 8D69 8D6A 47A6 8D8C 8D8D 8D8E 8D8F 8D90 8D91
8D92 8D93 8D94 8DD0 8DBC 8DDF 8DE0 8DE1 8DE2 8DE3
8DE4 8DE5 8DE6 8DE7 8DE8 8DE9 8DEA 8DEB 8DEC 8DED
8DEE 8DEF 8DF0 8DF1 8DF2 8DF3 8DF4 8DF6 8DF7 8DF8
8DF9 8DFA 8DFB 2801E 28023 28024 4837 8EB1 8EB2 8EED
8EFE 8EFF 8F00 8F01 8F02 8F03 8F04 8F05 8F06 8F07
8F08 8F09 8F0A 8F0B 8F0C 8F8F 8F90 8F91 8F92 8F93
8F94 8F9E 8F9F 8FA0 8FB2 903C 903D 903E
903F 9040 9041 9042 9043 9044 9045 9046 9047 9048
9049 904A 904B 904C 904D 904E 904F 9050 9051 9052
9053 9054 9055 9056 9057 2856C 90CC 910B 910C 910D
910E 910F 9110 9111 9112 9113 9114 9115 9116 9117
9166 9167 9168 9169 916A 916B 916C 916D 916E 916F
9170 9171 2882B 922E 922F 9230 9231 9232 9233 9234
9235 9236 9237 9238 9239 923A 923B 923C 923D 923E
923F 9240 9241 9242 9243 9244 9245 9246 9247 9248
9249 924A 924B 924C 924D 924E 924F 9250 9251 9252
9253 9254 9255 9256 9257 9258 9259 925A 925B 925C
925D 925E 925F 9260 9261 9262 9263 9264 9265 9266
9267 9268 9269 926A 926B 926C 926D 926E 926F 9270
9271 9272 9273 9274 928F 28968 2896C 2897E
9516 9517 9518 9519 951A 951B 951C 951D 951E 951F
9520 9521 9522 9523 9524 9525 9526 9527 9528 9529
952A 952B 952C 952D 952E 952F 9530 9531 4989 9598
9599 959A 959B 959C 959D 959E 959F 95A0 9616 9617
9618 9619 968F 49DF 9691 9692 9693 9694 9695 9696
9697 9698 FA29 96C9 96CA 96CB 96CD 96CE 96CF 96F4
96F5 96F6 96F7 96F8 96F9 96FA 96FB 96FC 96FD 96FE
29093 9755 9756 9772 9773 9774 9775 9776 9777 9778
9779 97EA 97EB 97EE 97F4 97F5 9809 4AB4 980A 980B
980C 980D 980E 980F 9810 9811 9812 9813 9890 9891
9892 9893 9894 9895 9896 98AB 98AC 98D4 4B26 98EC
98EE 98F1 98F3 98F4 98F5 98F6 98F7 98F9 98FB 98FC
98FD 98FE 98FF 9989 998C 998D 998E 998F
9990 999A 99AF 99B0 99B1 99B2 99B3 99B4 99B5 9A9C
9A9D 9A9E 9A9F 9AAA 9AAB 9AAC 9AAD 9AAE 29A28 9AE1
9AE2 9B3D 9B5B 9B5C 9B5D 9B5E 9C84 9C85 9C86 9C87
9C88 9C89 9C8A 9C8B 9C8C 9C8D 9C8E 9C8F 9C90 9CE7
9CE8 9CE9 9CEA 9CEB 9CED 9CEE 9CEF 9CF0 9E49 9E4A
9E4B 9E4C 9E4D 9E4E 9E4F 9E50 9E51 9E52 9E53 9E54
9E80 9E81 9E82 2A2FF 9EFD 9F0C 9F0E 9F13 9F14 9F20
9F83 9F84 9F85 9F86
FDD0-280E
2004E 221A1 50CE 50CF 50D0 50D1 50D2 50D3 50D4 50D5
50D6 50D7 50D8 50D9 50DA 50DB 50DC 50DD 50DE 50DF
50E0 50E1 50E2 50E3 50E4 50E5 50E6 50E7 50E8 50E9
50EA 50EB 50EC 50ED 50EE 50EF 50F0 50F1 50F3 50F4
50F7 2037E 2037F 20380 203A0 203A7 50F2 5162 51A9 51D8
51F3 51F4 3500 3504 3506 5280 5281 5282 5283 5284
3522 52E8 52E9 52EA 52EB 52EC 52ED 3535 5330 5331
5332 3551 53AC 53AD 53AE 53B0 53C6 20B0D 3561 55F6
55F7 55F8 55F9 55FA 55FB 55FC 55FD 55FE 55FF 5600
5601 5602 5603 5604 5605 5606 5607 5608 5609 560A
560B 560C 560D 560E 560F 5610 5611 5612 5613 5614
5615 5616 5617 5618 5619 561A 561B 561C 561D 561E
5621 5622 5623 5624 5625 5626 5627 5651
20ED7 20ED8 20EDD 20EF8 20EF9 20EFA 20EFB 20F1D 20F26 20F2D
20F2E 20F30 20F31 20F3B 20F4C 561F 5628 5716 5717 5718
5719 3665 3666 5872 5873 5874 5875 5876 5877 5878
5879 587A 587B 587C 587D 587E 587F 5881 5882 5883
5884 5885 5886 5887 5888 5889 588A 588B 588C 588D
588E 588F 5890 5891 5892 5893 5894 5895 5896 5897
5898 5899 589A 589B 213ED 213FE 21413 21416 58AD 58FD
58FE 5910 5922 5923 5924 5925 5969 596A 596B 596C
371C 371E 3720 3722 5AD5 5AD6 5AD7 5AD8 5AD9 5ADA
5ADB 5ADC 5ADD 5ADE 5ADF 5AE0 5AE1 5AE2 5AE3 5AE4
5AE5 5AE6 5AE7 5AE8 5AE9 5AEA 5AEB 5AEC 5AED 5AEE
5AEF 5AF0 5AF1 5AF2 21820 21828 21829 2182A 2182D 21839
2183A 2183B 21840 21845 5AF3 5B75 5B77 21996
5BDE 5BDF 5BE0 5BE1 5BE2 5BE3 5BE4 5BE5 5BE6 5BE7
5BE8 5C0D 5C21 5C62 5C63 37FB 3800 3801 3804 5D77
5D78 5D79 5D7A 5D7B 5D7C 5D7D 5D7E 5D7F 5D80 5D81
5D82 5D83 5D84 5D85 5D86 5D87 5D88 5D89 5D8A 5D8B
5D8C 5D8D 5D8E 5E51 5E52 5E53 5E54 5E55 5E56 5E57
5E58 5E59 5E5B 2212A 5E63 5ECD 5ECE 5ECF 5ED0 5ED1
5ED2 5ED3 5ED4 5ED5 5ED6 5ED7 5ED8 5ED9 5EDC 5F0A
38C3 5F43 5F44 5F45 5F46 38D1 5F6F 5F70 5FB1 5FB3
5FB4 22554 5FB6 6128 612C 6133 6138 613B 613F 6141
6142 6147 6148 614B 6150 3980 6152 6153 6154 6156
6158 615A 615B 615E 615F 6160 6161 6162 6163 6165
6169 616A 616C 616F 6171 6172 6173 6174 6175 6177
617A 617B 617D 6180 6181 6186 6188 22803
6227 6228 6229 622A 622B 622C 642B 6434 643B 643F
3A2F 3A31 3A32 3A33 3A34 3A35 3A36 3A37 3A38 3A39
644B 644C 644D 644E 644F 6450 6451 6453 6454 6455
6457 6458 6459 645A 645B 645C 645D 645E 645F 6460
6462 6463 6464 6465 6466 6467 646A 646B 646C 646D
6471 6472 6473 6474 6475 6476 6477 6478 647A 647B
647C 647D 647E 647F 6481 6482 6484 6487 22CB7 22CC2
22CC6 22CC9 22D07 22D08 22D12 6456 64A6 6571 6572 6573
65A0 65A1 65B2 230B7 65D6 65D7 3B0D 3B0E 3B0F 3B10
669A 669B 669C 669D 669E 669F 66A0 66A1 66A2 66A3
66A4 66A5 66A6 66A7 66A8 23262 6704 6705 3B3A 3B3B
6722 3BBC 698A 698D 698E 698F 6990 6991 6992 6993
6995 6996 6997 6999 699A 699B 699C 699D
699E 699F 69A0 69A1 69A2 69A3 69A4 69A5 69A6 69A7
69A8 69A9 69AA 69AB 69AC 69AD 69AE 69AF 69B0 69B1
69B2 69B3 69B4 69B5 69B6 69B7 69B8 69B9 69BA 69BB
69BC 69BD 69BE 69BF 69C0 69C1 69C2 69C3 69C4 69C5
69C6 69C7 69C8 69C9 69CA 69CB 69CC 69CD 69CE 69CF
69D0 69D1 69D2 69D3 69D4 69D5 69D6 69D7 69D8 69D9
69DA 69DB 69DC 69DD 69DE 69DF 69E0 69E1 6A2E FA14
235CD 235CE 235CF 235F3 23600 6A03 6B49 6B4A 6B4B 6B4C
6B4D 6B70 6B74 6B9D 6B9E 6B9F 6BA0 6BA1 6BC3 6BC4
23AFA 6BFE 6C32 6C33 6ECE 3D3D 3D46 6ECC 6EEB 6EEC
6EED 6EEE 6EEF 6EF0 6EF1 6EF2 6EF3 6EF4 6EF5 6EF6
6EF7 6EF8 6EF9 6EFA 6EFB 6EFC 6EFD 6EFE 6EFF 6F01
6F02 6F03 6F04 6F05 6F06 6F07 6F08 6F09
6F0A 6F0C 6F0D 6F0E 6F0F 6F11 6F12 6F14 6F15 6F16
6F17 6F18 6F19 6F1A 6F1B 6F1C 6F1D 6F1E 6F1F 6F20
6F21 6F22 6F23 6F24 6F25 6F27 6F28 6F29 6F2A 6F2B
6F2C 6F2D 6F2E 6F2F 6F30 6F31 6F32 6F33 6F34 6F35
6F36 6F37 6F38 6F39 6F3A 6F3B 6F3C 6F3E 6F40 6F42
6F43 6F44 6F45 6F46 6F47 6F48 6F49 6F4A 6F4B 6F4C
6F4D 23ED7 23EF7 23EF8 23EF9 23EFA 23EFB 23EFC 23F35 23F41
6F4E 6F73 7155 715B 3DE7 3DE8 7179 717B 717C 717D
717E 717F 7180 7181 7182 7183 7184 7185 7186 7187
7188 7189 718A 718B 718C 718D 718E 718F 7190 7191
7192 7193 7194 7195 7196 7197 7198 7199 84B8 2430D
2431A 24334 24348 7233 723E 7244 3E22 7253 7254 7292
7293 7294 7295 7296 7297 7353 7343 7344
734C 734D 734F 7350 7351 7352 7354 7355 3EE7 3EE9
7460 7461 7462 7463 7464 7465 7466 7467 7468 746A
746B 746D 746E 7470 7471 7472 7473 7474 7475 7476
7477 7478 249EC 249ED 249F6 249F7 249F8 249F9 249FB 24A0E
24A12 24A13 7500 7502 7503 7504 7505 7506 24B6E 7527
757B 757C 757D 7590 7591 7607 7608 7609 760A 760B
760C 760D 760E 7611 7612 7613 7614 7615 7616 7617
7618 7627 76B6 76B7 76B8 76B9 76E0 76E1 76E2 76E3
4053 776E 776F 7770 7771 7772 7773 7774 7775 7776
7777 7778 777A 777B 777C 777D 777E 777F 7780 7781
7782 7783 7784 7785 7786 25220 25221 40C8 787E 789D
789E 789F 78A0 78A1 78A2 78A3 78A4 78A5 78A6 78A7
78A8 78A9 78AA 78AB 78AC 78AD 78AE 78AF
78B1 78B2 78B3 78B4 78B5 78B6 78B7 78B8 78B9 78C1
7987 7988 7989 798A 798B 798C 798D 798E 798F 7990
7991 7992 7993 7994 7995 7996 7997 7998 7999 4167
7A26 7A27 7A28 7A29 7A2A 7A2B 7A2C 7A2D 7A2E 7A2F
7A30 7A31 7A32 7A33 7A4A 7A35 7AA8 7AA9 7AAA 7AAB
7AAC 7AAD 259CC 7AEC 7AED 7AEF 7AF0 25A9C 7AEE 7B75
4201 4202 4203 4204 4205 4206 4207 4208 4209 420A
420B 420C 420D 7B81 7B82 7B83 7B84 7B85 7B86 7B87
7B88 7B89 7B8A 7B8B 7B8C 7B8D 7B8E 7B8F 7B90 7B91
7B92 7B93 7B94 7B95 7B96 7B97 7B98 7B99 7B9A 7B9B
7B9C 7B9D 7B9E 7B9F 7BA0 7BA1 7BA2 7BA3 7BA4 7BA5
7BA6 7BA7 7BA8 7BA9 7BAA 7BAB 25BB3 25BB4 25BC6 7BB8
7CB6 7CB7 7CB8 7CB9 7CBA 7CBB 7CBC 7CBD
7CBE 7CBF 7CC1 25EA6 25EBC 7D96 7DD0 42E8 42E9 42EC
42ED 42F1 7D9C 7D9D 7D9E 7D9F 7DA0 7DA1 7DA2 7DA3
7DA4 7DA5 7DA6 7DA7 7DA8 7DA9 7DAA 7DAB 7DAC 7DAD
7DAE 7DAF 7DB0 7DB1 7DB2 7DB3 7DB4 7DB5 7DB6 7DB7
7DB8 7DB9 7DBA 7DBB 7DBC 7DBD 7DBE 7DBF 7DC0 7DC1
7DC2 7DC3 7DC4 7DC5 7DC6 7DC7 7DC8 7DC9 7DCA 7DCB
7DCC 7DCD 7DCE 7DCF 7DD1 7DD2 7DD4 7DD5 26048 26064
7F25 7F26 7F27 7F28 7F29 7F2A 7F2B 7F41 7F42 7F6F
7F70 7F71 7F73 7F74 7FAB 7FDE 7FDF 7FE0 7FE1 7FE2
7FE3 7FE4 2644A 7FE5 8023 8024 8025 43BA 8059 805A
805B 805C 805D 805E 805F 8061 8062 8063 265A0 8087
8088 8150 4420 4425 4426 817F 8180 8181 8182 8183
8184 8185 8186 8187 8188 8189 818A 818B
818C 818D 818E 818F 8191 26799 267B3 267B4 267CC 81E7
81FA 8207 8213 8214 8215 821E 824A 824B 824C 824D
26A51 26A52 44DD 44DF 44E4 44E9 44EA 44EB 44EC 8490
8491 8492 8493 8494 8495 8496 8497 8498 8499 849A
849B 849C 849D 849E 849F 84A0 84A1 84A2 84A3 84A4
84A5 84A6 84A7 84A8 84A9 84AA 84AB 84AC 84AD 84AE
84AF 84B0 84B1 84B2 84B3 84B4 84B5 84B6 84B7 84B9
84BA 84BB 84BC 84BD 84BE 84BF 84C0 84C1 84C2 84C3
84C4 84C6 84C7 84C9 84CA 84CB 84CC 84CD 84CE 84CF
84D0 84D1 84D2 84D3 84D4 84D5 84D6 84D7 84D8 84D9
84DA 84DB 84DC 84DD 84DF 84E1 84E2 84E3 84E4 84E6
26D74 26DA0 26DA1 26DA2 26DA3 26DA4 26DA5 26DA6 26DA7 26DAE
26DDC 26DEA 26DEB 26DF0 84E5 8660 8661 271CD
8711 8712 872B 8718 8719 871A 871B 871C 871D 871E
871F 8720 8721 8722 8723 8724 8725 8726 8727 8728
8729 872A 872C 872D 872E 872F 8730 8731 8732 8733
8734 8735 8736 8737 8738 8739 873A 873B 873C 873D
873E 873F 8740 8741 8742 8743 8744 8745 8747 8748
8749 874A 874B 8755 876B 88E2 463B 88E7 88E8 88E9
88EA 88EB 88EC 88ED 88EE 88EF 88F0 88F1 88F2 88F3
88F4 88F5 88F6 88F7 88F8 88F9 88FA 88FB 88FC 88FD
88FE 88FF 8900 8902 8903 8904 891A 899D 899E 899F
89A0 89A1 89CF 89E8 89E9 89EA 89EB 8A8B 8A8C 8A8D
8A8E 8A8F 8A90 8A91 8A92 8A93 8A94 8A96 8A97 8A98
8A99 8A9A 8A9B 8A9C 8A9D 8A9E 8A9F 8AA1 8AA2 8AA3
8AA4 8AA5 8AA6 8AA7 8AA8 8AA9 8AAA 8AAB
8AAC 8AAD 8AAE 279FD 27A0A 27A0E 8C2D 8C2E 8C2F 8C30
8C31 8C32 8C3D 8C67 8C68 8C69 8C6A 8C8B 8C8C 8C8D
3562 8CCF 8CD0 8CD1 8CD2 8CD3 8CD4 8CD5 8CD6 8CD7
8CD8 27D8F 27D98 8D58 8D59 8D5A 8D5B 8D6B 8D95 8D96
8D97 8D98 8D99 8D9A 47F4 8DFC 8DFD 8DFE 8DFF 8E00
8E01 8E02 8E03 8E04 8E05 8E06 8E07 8E08 8E09 8E0A
8E0B 8E0C 8E0D 8E0E 28048 8EB3 8EB4 8EB5 8F0D 8F0E
8F0F 8F10 8F11 8F12 8F13 8F14 8F15 28306 28318 8F95
8F96 8F97 8FA1 8FA2 8FA3 9058 9059 905A 905B 905C
905D 905E 905F 9060 9061 9062 9063 9064 9065 90D2
9118 9119 911A 911B 911C 911D 911E 911F 9120 9121
9122 9123 9124 9125 48FA 9172 9173 9174 9175 9176
9177 9178 9179 917A 917B 917C 917D 917E
917F 922D 4924 4925 4926 492A 9275 9276 9277 9278
9279 927A 927B 927D 927E 927F 9280 9281 9282 9283
9284 9285 9286 9287 9288 9289 928A 928B 928C 928D
928E 9290 9291 9292 9293 9294 9295 9296 9297 9298
9299 929A 929B 929C 929D 929E 929F 92A0 92A1 92A2
92A3 92A4 92A5 92A6 92A7 92A8 92A9 92AA 92AB 92AC
92AD 92AE 92AF 92B0 92B1 28989 289A8 289AA 289AB 92EE
927C 9532 9533 9534 9535 9536 9537 9538 9539 953A
953B 953C 953D 953E 953F 9540 9541 9542 9543 9544
9545 95A1 95A2 95A3 95A4 95A5 95A6 95A7 95A8 95A9
95AA 961A 9699 969A 969B 969C 969D 969E 969F 96A0
96A1 96CC 96D0 96D1 96D2 28FC5 4A0F 96FF 9700 9701
290AF 290B0 290B1 9757 9758 9759 9764 977A
977B 977C 977D 977E 977F 9780 9781 9782 9783 9784
9785 9786 97CD 97CE 97EC 97F6 97F7 2941D 9819 4AB8
9814 9815 9816 9817 9818 981A 9897 4AFF 4B00 98AD
98AE 98AF 98B0 98B1 295B8 98D6 98D5 98D7 4B2C 98F8
9900 9901 9902 9903 9904 9905 9906 9907 9909 990C
990E 990F 9991 9992 4B6F 999B 999C 999D 4B7B 4B7E
99B6 99B7 99B8 99B9 99BA 99BB 99BC 99BD 99BE 99BF
99C0 99C1 99C2 99C3 99C4 99C5 99C6 99C7 9AA0 9AA1
9AA2 4BC8 9AAF 9AB0 9AB1 9ADA 9AE3 9AE4 9AE5 9AE6
9AE7 9AE8 9AE9 9AEA 29B05 29B0E 9B26 9B3E 9B3F 9B40
9B41 9B42 29CAD 9B5F 9B60 9B61 9B62 29D5A 9C91 9C92
9C93 9C94 9C95 9C96 9C97 9C98 9C99 9C9A 9C9B 9C9C
9C9D 9C9E 9C9F 9CF1 9CF2 9CF3 9CF4 9CF5
9CF6 9E55 9E56 9E57 9E59 9E5A 9E5B 9E5C 9EA7 9EBC
9EBD 9F3B 9F4A 9F87 9F88
FDD0-280F
3493 3496 3498 50F5 50F6 50F8 50F9 50FA 50FB 50FC
50FD 50FE 50FF 5100 5101 5102 5103 5104 5105 5106
5107 5108 5109 510A 510B 510C 510D 510E 510F 203C9
203CB 5130 51D9 51DA 51DB 51DC 20611 5285 5286 5287
5288 5289 528A 528B 528C 528D 528E 528F 52EE 52EF
52F0 52F1 52F2 5314 5333 53B1 53B2 20AB4 3559 53C7
5653 35F1 35F2 35F3 5620 5629 562A 562B 562C 562D
562E 562F 5630 5631 5632 5633 5634 5635 5636 5637
5638 5639 563A 563B 563C 563D 563E 563F 5640 5641
5642 5643 5644 5646 5647 5648 5649 564A 564B 564C
564D 564E 564F 5650 5652 5654 5656 5657 5658 5659
565A 565B 565C 565D 5674 20F64 20F8D 20F90 20FAD 20FB4
20FB5 20FB6 20FBC 21014 571A 5880 589C 589D
589E 589F 58A0 58A1 58A2 58A3 58A4 58A5 58A6 58A7
58A9 58AA 58AB 58AC 58AE 58AF 58B0 58B1 58B2 58B3
58B4 58B5 58B6 58B7 58B8 58B9 21424 2143F 21452 21454
21455 58FF 5900 21577 5926 596D 3723 3725 3726 5AF4
5AF5 5AF6 5AF7 5AF8 5AF9 5AFA 5AFB 5AFC 5AFD 5AFE
5AFF 5B00 5B01 5B02 5B03 5B04 5B05 5B06 5B07 5B08
5B09 5B0A 5B0B 5B0C 5B0D 5B0E 5B0F 21852 2185E 21861
21862 21863 21864 21877 2187B 21883 21884 21885 376F 5BE9
5BEB 5BEC 5BED 5BEE 5C0E 21B44 5C35 37A0 5C64 5C65
5C66 5C67 380F 5D8F 5D90 5D91 5D92 5D93 5D94 5D95
5D96 5D97 5D98 5D99 5D9A 5D9B 5D9C 5D9D 5D9E 5D9F
5DA0 5DA1 5DA2 5DA3 5DA4 5DA5 21F0F 21F15 5DE4 3861
5E5A 5E5C 5E5D 5E5E 5E5F 5E60 5E61 5E62
5E64 5E65 5E69 5EDA 5EDB 5EDD 5EDE 5EDF 5EE0 5EE1
5EE2 5EE3 5EE4 5F47 5F48 5F49 5F71 5FB2 5FB5 5FB7
5FB8 5FB9 5FBA 6155 6157 6159 615C 615D 6164 6166
6167 616B 616E 6170 6176 6178 6179 617C 617E 617F
6182 6183 6184 6185 6187 3989 398A 3992 616D 6189
618B 618D 618E 618F 6190 6192 6193 6194 6195 6198
619A 619B 619C 619E 619F 61A1 61A2 61A3 61A4 61A6
61A7 61AA 61AB 61AC 61AD 61AE 61AF 61B0 61B1 61B3
2285F 22860 22871 622D 622E 622F 3A3C 6468 6469 646E
646F 6470 6479 6480 6483 3A4B 6485 6486 6488 648A
648B 648C 648D 648E 648F 6490 6491 6492 6493 6494
6495 6496 6497 6498 6499 649A 649B 649C 649D 649E
649F 64A0 64A1 64A2 64A3 64A4 64A5 64A7
64A8 64A9 64AA 64AB 64AC 64AD 64AE 64AF 64B0 64B1
64B2 64B3 64B4 64B5 64B6 64B7 64B8 64B9 64BA 64C6
22D44 22D4C 22D67 6575 6576 6577 6578 6579 657A 657B
22FCC 65B3 230BC 3B11 3B12 3B13 3B14 3B15 3B16 66A9
66AA 66AB 66AC 66AD 66AE 66AF 66B0 66B1 66B2 66B3
66B4 66B5 66B6 66B7 23281 2328A 66BC 3B3C 3B3D 3B3E
81A4 69E9 3BBE 3BC2 3BC4 69E2 69E3 69E4 69E5 69E6
69E7 69E8 69EA 69EB 69EC 69ED 69EE 69EF 69F0 69F1
69F2 69F3 69F4 69F5 69F6 69F7 69F8 69F9 69FA 69FB
69FC 69FD 69FE 69FF 6A00 6A01 6A02 6A04 6A05 6A06
6A07 6A08 6A09 6A0A 6A0B 6A0C 6A0D 6A0E 6A0F 6A10
6A11 6A12 6A13 6A14 6A15 6A16 6A17 6A18 6A19 6A1A
6A1B 6A1C 6A1D 6A1E 6A1F 6A20 6A21 6A22
6A23 6A24 6A25 6A26 6A27 6A29 6A2A 6A2B 6A2C 6A2D
6A2F 6A30 6A31 6A65 2361A 2363C 23640 23659 2365F 23677
6B4E 6B4F 6B50 6B51 6B52 6B53 6B75 6B76 3C73 3C74
6BA2 6BA3 6BA4 6BA5 6BA6 6BC5 6BC6 6BFF 6C00 6C01
6C02 6ED5 6F00 6F10 6F26 6F3F 6F41 3D4C 3D4E 3D51
6F0B 6F3D 6F4F 6F50 6F51 6F52 6F53 6F54 6F55 6F56
6F57 6F58 6F59 6F5A 6F5B 6F5C 6F5D 6F5F 6F60 6F61
6F62 6F63 6F64 6F65 6F66 6F67 6F68 6F69 6F6A 6F6B
6F6C 6F6D 6F6E 6F6F 6F70 6F71 6F72 6F74 6F75 6F76
6F77 6F78 6F79 6F7A 6F7B 6F7C 6F7D 6F7E 6F7F 6F81
6F82 6F84 6F85 6F86 6F87 6F88 6F89 6F8A 6F8B 6F8C
6F8D 6F8E 6F8F 6F90 6F91 6F92 6F93 6F94 6F95 6F96
6F97 6F98 6F9A 6F9B 6F9C 6F9D 6FD0 23F4A
23F7F 23F80 23F81 23F82 23F8F 23FB4 23FB7 6FC6 71A6 3DEB
719A 719B 719C 719D 719E 719F 71A0 71A1 71A2 71A3
71A4 71A5 71A7 71A8 71A9 71AA 71AB 71AC 71AD 71AE
71AF 71B0 71B1 71B2 71B3 71B4 71B5 9ED9 24362 24363
24364 24365 2438C 24396 2439C 5655 7234 7245 7255 7256
7257 7298 7299 729A 729B 246D4 734E 734B 7356 7357
7358 7359 735A 735B 735C 735D 735E 735F 7360 7361
7362 7364 24882 7469 746C 3EEB 3EF0 3EF3 3EF4 7479
747A 747B 747C 747D 747E 7480 7481 7482 7483 7484
7485 7486 7487 7488 7489 748A 748B 748C 748E 7493
24A15 24A21 24A22 24A23 24A24 24A25 24A26 24A27 24A28 24A29
24A2A 24A3E 7507 7508 7509 3F53 24BF5 757E 757F 761F
3FB7 3FC0 7619 761A 761B 761C 761D 761E
7620 7621 7622 7623 7624 7625 7626 7628 7629 762A
762B 24E3B 24E50 3FE5 769A 769B 769C 769D 769E 24F97
24F9A 76BA 76E4 4057 7787 7788 7789 778A 778B 778C
778D 778E 778F 7790 7791 7792 7793 25250 78BA 78BB
78BC 78BD 78BE 78BF 78C0 78C2 78C3 78C4 78C5 78C6
78C7 78C8 78C9 78CA 78CB 78CC 78CD 78CE 78CF 78D0
78D1 78D2 78D3 78D4 78D5 78D7 78D8 78D9 78E4 25531
25535 2553F 799A 799B 799C 799D 799E 799F 79A0 79A1
79A2 79A3 256E3 416C 416E 4175 7A34 7A36 7A37 7A38
7A39 7A3A 7A3B 7A3C 7A3D 7A3E 7A3F 7A40 7A41 7A42
7A43 25857 7AAE 7AAF 7AB0 7AB1 7AB2 7AB3 7AB4 420E
420F 4210 4211 4212 4213 4214 4215 421A 421C 4220
4222 4223 4226 4229 7BAC 7BAD 7BAE 7BAF
7BB0 7BB1 7BB2 7BB3 7BB4 7BB5 7BB6 7BB7 7BB9 7BBA
7BBB 7BBC 7BBD 7BBE 7BBF 7BC1 7BC2 7BC3 7BC4 7BC5
7BC6 7BC7 7BC8 7BCA 7BCB 7BCC 7BCD 7BCE 7BCF 7BD0
7BD1 7BD2 7BD3 25BE4 25BE8 25C01 25C06 4294 7CC2 7CC3
7CC4 7CC5 7CC6 7CC7 7CC8 7CC9 7CCA 7CCB 7CCC 7CCD
7CCE 25ED7 25ED8 42F4 42FB 42FC 4300 4301 4304 7DD3
7DD6 7DD7 7DD8 7DD9 7DDA 7DDB 7DDC 7DDD 7DDE 7DDF
7DE0 7DE1 7DE2 7DE3 7DE4 7DE5 7DE6 7DE7 7DE8 7DE9
7DEA 7DEB 7DEC 7DED 7DEE 7DEF 7DF0 7DF1 7DF2 7DF3
7DF4 7DF5 7DF6 7DF7 7DF8 7DF9 7DFA 7DFB 7DFC 7DFD
7DFE 7DFF 7E00 7E01 7E02 7E03 7E04 7E05 7E06 7E07
26083 26097 260A4 260A5 433E 7F2C 7F2D 7F2E 7F2F 7F75
7F76 7F77 7F78 7FAC 7FAD 7FAE 7FAF 7FB0
7FE6 7FE7 7FE8 7FE9 7FEA 7FEB 7FEC 7FED 26469 43AC
8026 8027 8064 8065 8066 8067 8068 8069 806A 806B
265AD 442D 4433 4434 8192 8193 8194 8195 8196 8197
8198 8199 819A 819B 819C 819D 819E 819F 81A0 81A1
81A2 81A3 81F1 8216 8217 447A 824E 824F 8250 8251
8252 8253 8254 44F4 848A 84E0 84E7 84E8 84E9 84EA
84EB 84EC 84ED 84EE 84EF 84F0 84F2 84F3 84F4 84F5
84F6 84F7 84F8 84F9 84FA 84FB 84FC 84FD 84FE 84FF
8500 8501 8502 8503 8504 8505 8506 8508 8509 850A
850B 850C 850D 850E 850F 8510 8511 8512 8513 8514
8515 8516 8517 8518 8519 851A 851B 851C 851D 851E
851F 8520 8521 8522 8523 8524 8525 8526 8527 8528
8529 852A 852B 852C 852D 852E 852F 8530
8531 8532 8533 8534 8535 8536 8537 8538 8539 853A
853B 853C 26E00 26E05 26E07 26E12 26E42 26E43 26E44 26E45
26E6E 26E72 26E77 26E84 853D 854F 8662 874C 874E 874F
8750 8751 8752 8753 8754 8756 8757 8758 8759 875A
875B 875C 875D 875E 875F 8760 8761 8762 8763 8764
8765 8766 8767 8768 8769 876A 876C 876D 876E 876F
8770 8771 8772 8773 8774 8775 8776 8777 8778 877A
877B 877C 877D 877E 877F 8780 87E1 2739A 8782 885A
885B 885C 885D 275FD 4645 4646 88E6 8905 8906 8907
8908 8909 890A 890B 890C 890D 890E 890F 8910 8911
8912 8913 8914 8915 8916 8917 8918 8919 891B 891C
891D 2770F 89A2 89A3 89A4 89A5 27858 89A9 89D0 89D1
89EC 89ED 89EE 89EF 89F0 8A95 46F5 8AAF
8AB0 8AB1 8AB2 8AB3 8AB4 8AB5 8AB6 8AB7 8AB8 8AB9
8ABA 8ABB 8ABC 8ABD 8ABE 8ABF 8AC0 8AC1 8AC2 8AC3
8AC4 8AC5 8AC6 8AC7 8AC8 8AC9 8ACA 8ACB 8ACC 8ACD
8ACE 8ACF 8AD0 8AD1 8AD2 8AD3 8AD4 8AD5 8AD6 8AD7
8AD8 8AD9 8ADA 8AE9 27A3E 27A53 27A59 8ADB 8AF8 8C33
8C34 8C35 8C3E 8C4C 8C4D 8C4E 27BF4 8C6C 8C8E 8C8F
477C 8CD9 8CDA 8CDB 8CDC 8CDD 8CDE 8CDF 8CE0 8CE1
8CE2 8CE3 8CE4 8CE5 8CE6 8CE7 8CE8 8CE9 8CEA 8CEB
8CEC 8CED 8D5C 8D6D 47B6 8D9B 8D9C 8D9D 8D9E 8D9F
8DA0 8DA1 8DA2 8DA3 8DA4 4800 4801 480B 8E0F 8E10
8E11 8E12 8E13 8E14 8E15 8E16 8E17 8E18 8E19 8E1A
8E1B 8E1C 8E1D 8E1E 8E1F 8E20 8E21 8E22 8E23 8E24
8E25 8E26 8E27 8E28 8E29 8E2A 8E2C 8E2D
8E2E 8E2F 8E3A 28083 28090 8E2B 8E37 8EB6 8EB7 8EB8
8EB9 8EBA 8EBB 8EBC 28256 485D 8F16 8F17 8F18 8F19
8F1A 8F1B 8F1C 8F1D 8F1E 8F1F 8F20 8F21 8F22 8F23
8F24 8F25 8F26 8F27 8F28 8F29 8F2A 8F2B 8F2C 2832F
2833A 8F98 8FA4 8FB3 9066 9067 9068 9069 906A 906B
906C 906D 906E 906F 9070 9071 9073 9077 90F6 48DD
9126 9127 9129 912A 912B 912D 912E 912F 9130 9131
9132 9180 9181 9182 9183 9184 9185 9186 9187 9188
9189 918A 918B 918C 492D 92B2 92B3 92B4 92B5 92B6
92B7 92B8 92B9 92BA 92BB 92BC 92BD 92BE 92BF 92C0
92C1 92C2 92C3 92C4 92C5 92C6 92C7 92C8 92C9 92CA
92CC 92CD 92CE 92CF 92D0 92D1 92D2 92D3 92D4 92D5
92D6 92D7 92D8 92D9 92DA 92DB 92DC 92DD
92DE 92DF 92E0 92E1 92E2 92E3 92E4 92E5 92E6 92E7
92E8 92E9 92EA 92EB 92EC 92ED 92EF 92F0 92F1 92F2
92F3 92F4 92F5 92F6 FA27 289B8 289BC 289C0 289DC 289DE
289E1 289E3 289E4 9546 9547 9548 9549 954A 954B 954C
954D 954E 954F 9550 9551 9552 9553 9554 9555 957C
95AB 95AC 95AD 95AE 95AF 95B0 95B1 95B2 95B3 95B4
28D34 49E5 96A2 96A3 96A4 96A5 96D3 9702 9703 9704
9705 9706 9707 9708 9709 970A 290C0 975A 9760 9765
9787 9788 9789 978A 978B 978C 978D 978E 978F 9790
9791 9792 97CF 97D0 97D1 97EF 29420 981B 981C 981D
981E 981F 9820 9821 9822 9823 9826 9827 9828 9829
982A 982B 982C 9898 9899 989A 989B 989C 989D 98B2
98B3 98D8 4B37 98FA 9908 990A 990B 990D
9911 9912 9913 9914 9915 9916 9917 9918 9919 9993
9994 99C8 99C9 99CA 99CB 99CC 99CD 99CE 99CF 99D0
99D1 99D2 99D3 99D4 99D5 99D6 99D7 99D8 99D9 99DA
99DB 99DC 99DD 99DE 99DF 99E0 298A4 9AA3 9AB2 9AB3
9AB4 9AB5 9AB6 9AB7 9ADB 9AEB 9AEC 9AEE 9AEF 9AF0
9AF1 9AF2 9AF3 9AF4 9B27 4C20 9B43 9B44 9B45 9B46
4C3B 4C3E 9B63 9B64 9B65 9B66 9B67 9B68 9B69 9B6A
9B6B 9B6C 9B6D 9B6E 9B6F 9B70 9B71 9B72 9B73 9B74
9B75 9B76 9B77 9B78 9B79 29D7C 9CA0 9CA1 9CA2 9CA3
9CA4 9CA5 9CA6 9CA7 9CA8 9CA9 9CAA 9CAB 9CAC 4CAE
4CB0 4CB7 9CF7 9CF8 9CF9 9CFA 9CFB 9CFC 9CFD 9CFE
9CFF 9D00 9D01 9D02 9D03 9D04 9D05 9D06 9D07 9D08
9D09 9D0B 9D0C 9D0D 9D0E 29FB7 9E58 9E5D
9E5E 9E5F 9E60 9E61 9E62 9E63 9E64 9E76 9E83 9E84
2A293 9EA8 9EA9 9EAA 9EAB 9EB9 9EBE 9ECE 58A8 9ED3
9F0F 9F10 9F11 9F51 9F52 9F89 9F8A
FDD0-2810
4EB8 5110 5111 5112 5113 5114 5115 5116 5117 5118
5119 511A 511B 511C 511D 511E 512B 203F5 203FC 5163
204FC 5180 51AA 51DD 51DE 20615 5290 5291 5292 5293
5294 52F3 5334 53E1 35FB 35FE 3600 3601 3602 3603
3604 565E 565F 5660 5661 5662 5663 5664 5665 5666
5667 5668 5669 566A 566B 566C 566D 566E 566F 5670
5671 5672 5673 5675 5676 5677 5678 5679 567A 567B
567C 20FDF 20FEA 20FEB 20FEC 20FED 2101D 2101E 571B 571C
58BA 58BB 58BC 58BD 58BE 58BF 58C0 58C1 58C2 58C3
58C4 58C5 58C6 58C7 58C8 58C9 58CA 58CB 58CC 5901
596E 596F 372B 372C 372D 5B10 5B11 5B12 5B13 5B14
5B15 5B16 5B17 5B18 5B19 5B1A 5B1B 5B1C 5B1D 5B1E
5B1F 5B20 5B21 5B22 5B34 2189E 2189F 218A0
218A1 218A2 218BE 218BF 5B28 5B78 5B79 5BEF 5BF0 5DA6
5DA7 5DA8 5DA9 5DAA 5DAB 5DAC 5DAD 5DAE 5DAF 5DB0
5DB1 5DB2 5DB3 5DB4 5DB5 5DB6 3862 3863 3864 5E66
5E67 5E68 2215B 5E6F 5EE5 5EE6 5EE7 5EE8 5EE9 5EEA
5F4A 5F4B 5F5B 5F5C 22471 224B0 5FBB 5FBC 618A 618C
6191 6196 6197 6199 619D 61A0 61A5 61A8 61A9 61B2
3999 61B4 61B6 61B7 61B8 61B9 61BA 61BD 61BE 61BF
61C0 61C1 61C4 61C5 61C6 61C8 61CA 61CC 61CD 61CE
61CF 61D0 61D2 61D3 61D4 228AD 228C1 61BB 6231 6230
6489 3A52 3A54 3A57 64BB 64BC 64BD 64BE 64BF 64C0
64C1 64C2 64C3 64C4 64C5 64C7 64C8 64C9 64CB 64CC
64CD 64CF 64D0 64D1 64D2 64D3 64D4 64D5 64D6 64D7
64D9 64DA 64DB 64DC 64DD 64DE 22D8D 22D95
22DA0 22DA3 22DA4 22DB7 64F3 6533 6574 657C 657D 657E
657F 22FE3 6593 65A2 65B4 65D8 65D9 3B17 3B18 3B19
3B1A 3B1B 3B1C 3B1D 3B1E 3B1F 66B8 66B9 66BA 66BB
66BD 66BE 66BF 66C0 66C1 66C2 66C3 66C4 66C5 66C6
66C7 66C8 66C9 66CA 66CB 66CC 66CD 23289 232AB 232AC
232AD 66CF 3B31 6706 3B3F 6723 6724 6725 6A28 6A74
3BD7 3BDD 6A32 6A33 6A34 6A35 6A36 6A37 6A38 6A39
6A3A 6A3B 6A3C 6A3D 6A3E 6A3F 6A40 6A41 6A42 6A43
6A44 6A45 6A46 6A47 6A48 6A49 6A4A 6A4B 6A4C 6A4D
6A4E 6A4F 6A50 6A51 6A52 6A53 6A54 6A55 6A56 6A57
6A58 6A59 6A5A 6A5B 6A5C 6A5D 6A5E 6A5F 6A60 6A61
6A62 6A63 6A64 6A66 6A67 6A68 6A69 6A6A 6A6B 6A6C
6A6D 6A6E 6A6F 6A70 6A71 6A72 6A73 6A75
6A76 6A77 6A78 6A79 6A7A 6A7B 6A7C 236A6 236AD 236BA
236DF 236EE 6B54 6B55 6B56 6B57 6B58 6B59 6B5A 6B77
6BA7 6BA8 6BA9 6BAA 6BAB 6BC7 6BC8 6C03 6C04 6C05
6C06 6C07 6F5E 6F83 3D5F 3D62 3D65 3D69 3D6A 6F99
6F9E 6F9F 6FA0 6FA1 6FA2 6FA3 6FA4 6FA5 6FA6 6FA7
6FA8 6FAA 6FAB 6FAC 6FAD 6FAE 6FAF 6FB0 6FB1 6FB2
6FB3 6FB4 6FB5 6FB6 6FB7 6FB8 6FB9 6FBA 6FBB 6FBC
6FBD 6FBE 6FBF 6FC0 6FC1 6FC2 6FC3 6FC4 6FC5 6FC7
6FC8 6FC9 6FCA 6FCB 6FCD 6FCE 6FCF 6FD1 6FD2 6FD3
6FD6 23FC5 23FEB 23FEC 23FED 23FEE 23FEF 23FF0 24011 7004
3DF3 3DF7 3DFC 3DFD 71B6 71B7 71B8 71B9 71BA 71BB
71BC 71BD 71BE 71BF 71C0 71C1 71C2 71C3 71C4 71C5
71C6 71C7 71C8 71C9 71CA 71CB 71CC 71CD
71CE 71CF 71D0 71D1 71D2 71D3 71D4 71D5 71D6 71D7
71D8 71D9 71DA 71DB 71DC 71DD 71DE 243BD 243C1 243E9
243EA 243F2 729C 729D 729E 729F 7363 7365 7366 7367
7368 7369 736A 736B 736C 736D 747F 3EFC 748D 748F
7491 7492 7494 7495 7496 7498 7499 749A 749B 749C
749D 749E 749F 74A0 74A1 74A3 74A4 24A42 24A45 24A4A
24A4E 24A4F 24A50 24A51 24A5D 24A65 24A66 24A67 74A2 74E2
750A 750B 750C 750D 750E 7580 7581 7582 24CC9 762C
762D 762E 762F 7630 7631 7632 7633 7634 7635 7636
7637 7638 7639 763A 763B 763C 763D 763E 763F 764A
769F 76A0 76A1 76BB 76E5 76E6 76E7 2509D 4062 4065
406A 7794 7795 7796 7797 7798 7799 779A 779B 779C
779D 779E 779F 77A0 77A1 77A2 77A3 25299
77A5 78D6 78DC 40D8 78DA 78DB 78DD 78DE 78DF 78E0
78E1 78E2 78E3 78E5 78E6 78E7 78E8 78E9 78EA 78EB
78EC 78ED 78EE 2555B 2555C 2555D 2555E 25562 25565 25566
79A4 79A5 79A6 79A9 256F6 7A44 7A45 7A46 7A47 7A48
7A4B 7A4C 7A4D 7A4E 7A4F 7A50 7A51 7A52 2585D 25872
7A53 41B2 7AB5 7AB6 7AB7 7AB8 7AB9 7ABA 7ABB 7ABC
7ABD 7AF1 25AAE 422A 422B 422D 422E 4230 4231 4232
7BC9 7BD4 7BD5 7BD6 7BD7 7BD8 7BD9 7BDA 7BDB 7BDC
7BDD 7BDE 7BDF 7BE0 7BE1 7BE2 7BE3 7BE4 7BE5 7BE6
7BE7 7BE8 7BE9 7BEA 7BEB 7BEC 7BED 7BEE 7BEF 7C11
25C21 25C4A 25C65 7BF9 4A00 7CCF 7CD0 7CD1 7CD2 7CD3
7CD4 7CD5 7CD6 7CD7 7CD8 7E08 7E09 7E0A 7E0B 7E0C
7E0D 7E0E 7E0F 7E10 7E11 7E12 7E13 7E14
7E15 7E16 7E17 7E18 7E19 7E1A 7E1B 7E1C 7E1D 7E1E
7E1F 7E20 7E21 7E22 7E23 7E24 7E25 7E26 7E27 7E28
7F30 7F31 7F32 7F33 7F34 7F43 7F79 7F7A 7F7B 7F7C
7FB1 7FB2 7FEE 7FEF 7FF0 7FF1 8028 8029 802A 26512
43C1 806C 806D 265BF 806E 8190 443B 81A6 81A7 81A8
81A9 81AA 81AB 81AC 81AD 81AE 81AF 81B0 81B1 81B2
81B3 81B4 81B5 81B6 2681C 2686E 81B7 81B9 81F2 81FB
8208 8206 8209 8218 8255 8256 8257 8258 8259 4500
4503 4504 4509 450B 84DE 853E 853F 8540 8541 8542
8543 8544 8545 8546 8547 8548 8549 854A 854B 854C
854D 854E 8550 8551 8552 8553 8554 8555 8556 8558
8559 855A 855B 855C 855D 855E 855F 8560 8561 8562
8563 8564 8565 8566 8567 8568 8569 856A
856B 856C 856D 856E 856F 8570 8571 8572 8573 8574
8575 26E99 26ED0 26ED1 26ED2 26ED3 26ED4 26ED5 26ED6 26ED7
26F26 858C 8663 8664 8665 8666 45DD 8779 8781 8783
8784 8785 8786 8787 8788 8789 878A 878B 878C 878D
878E 878F 8790 8791 8792 8793 8794 8795 8796 8797
8798 8799 879A 879B 879C 879D 879E 879F 87A0 87A1
87A2 87A3 87A4 87A5 87A6 87A7 87A8 87A9 4617 885E
885F 8860 8861 275FE 464F 891E 891F 8920 8921 8922
8923 8924 8925 8926 8927 8928 8929 892A 892B 892C
892D 892E 892F 8930 8931 8932 8934 27735 27736 27741
89A6 89A7 89A8 89AA 27870 89F1 8ADC 8ADD 8ADE 8ADF
8AE0 8AE1 8AE2 8AE3 8AE4 8AE5 8AE6 8AE7 8AE8 8AEA
8AEB 8AEC 8AED 8AEE 8AEF 8AF0 8AF1 8AF2
8AF3 8AF4 8AF5 8AF6 8AF7 8AF9 8AFA 8AFB 8AFC 8AFD
8AFE 8AFF 8B00 8B01 8B02 8B03 27A79 27A84 8B14 474E
8C6B 8C6D 8C6E 8C90 8C91 8C92 8C93 8CEE 8CEF 8CF0
8CF1 8CF2 8CF3 8CF4 8CF5 27DBD 8D5D 8D5E 8D5F 8D60
8D6C 8D6E 8DA5 8DA6 8DA7 8E30 8E31 8E32 8E33 8E34
8E35 8E36 8E38 8E39 8E3B 8E3C 8E3D 8E3E 8E3F 8E40
8E41 8E42 8E43 8E44 8E45 280BD 280BE 8EBD 8EBE 8F2D
8F2E 8F2F 8F30 8F31 8F32 8F33 8F34 8F35 8F36 8F37
8F38 8F39 8F3A 8F3B 8F3C 28365 8F99 8F9A 8FA5 8FA6
8FA7 8FA8 8FA9 8FAA 48AD 9072 9074 9075 9076 9078
9079 907A 907B 907C 9086 285E8 285F4 28600 90FA 9133
9134 9135 9136 9137 4900 4906 918D 918E 918F 9190
9191 9192 9193 9194 9195 9196 9197 92CB
4935 92F7 92F8 92F9 92FA 92FB 92FC 92FD 92FE 92FF
9300 9301 9302 9303 9304 9305 9306 9307 9308 9309
930A 930B 930C 930D 930E 930F 9310 9311 9312 9313
9314 9315 9316 9317 9318 9319 931A 931B 931C 931D
931E 931F 9320 9321 9322 9323 9324 9325 9326 9327
9329 932A 932B 932C 932D 932E 932F 9330 9331 9332
9333 9334 9335 9336 9337 9338 9339 933A 933B 933C
933D 933E 933F 9340 9341 9342 9343 9344 9345 9346
9348 FA28 289E7 289E8 289F9 289FA 289FB 289FC 28A0F 28A16
28A25 28A29 937A 9556 9557 9558 9559 955A 955B 955C
955D 955E 955F 9560 49A1 49A7 95B5 95B6 95B8 95B9
95BA 95BB 95BC 95BD 95BE 95BF 95C1 95C2 95CD 961B
49E7 96A6 96A7 96A8 96A9 96AA 96AB 96B7
96D4 96D5 4A1D 970B 970C 970D 970E 970F 9710 9711
9712 9713 9714 9715 9716 9717 290E4 290E5 290EC 290ED
975B 975C 9766 9793 9794 9795 9796 9797 9798 9799
97D2 97F0 97F8 9824 9825 982D 982E 982F 9830 9831
9832 9833 9834 9835 9836 9837 9838 9839 983A 983B
983C 983D 294D0 294D9 294DA 989E 989F 98A0 98A1 98B4
98B5 295D7 98D9 98DA 9910 991D 991A 991B 991C 991E
991F 9920 9921 9922 9923 9924 9926 9927 9928 9929
29720 9934 999E 999F 99A0 99E1 99E2 99E3 99E4 99E5
99E6 99E7 99E8 99E9 99EA 99EB 99EC 99ED 99EE 99EF
99F0 99F1 99F2 298D1 9AB8 9AB9 9ABA 9ABB 9ABC 29A4D
9ABF 9AED 9AF5 9AF6 9AF7 9AF8 9AF9 9AFA 9AFB 9B07
9B28 9B33 9B47 4C49 9B7A 9B7B 9B7C 9B7D
9B7E 9B7F 9B80 9B81 9B82 9B83 9B84 9B85 9B87 9B88
9B89 9B8A 9B8B 9B8C 9B8D 9B8E 9B8F 9B90 9B91 9B92
9B93 9B94 9B95 9B96 9B97 9B98 9BA3 29D98 29D9B 9CAD
9CAE 9CAF 9CB0 9CB1 9CB2 9CB3 9CB4 9CB5 9CB6 9CB7
9CB8 9CB9 9CBA 9CBB 9D0A 9D0F 9D10 9D11 9D12 9D13
9D14 9D15 9D16 9D17 9D18 9D19 9D1A 9D1B 9D1D 9D1E
9D1F 9D20 9D21 9D22 9D23 9D24 9D25 9D26 9D27 9D28
9D29 9D2A 9D2B 9D2C 29FDE 9E65 9E66 9E67 9E68 9E77
9E7E 9E85 9E86 9E87 9E88 2A29F 4D34 9EAC 9EAD 9EAE
9EBA 9EC5 9EC6 9ED4 9ED5 9ED6 9ED7 9ED8 9EFA 9F12
9F3C 9F3D 9F53 9F8D 9F9C
FDD0-2811
511F 5120 5121 5122 5123 5124 5125 5126 5127 5128
5129 512A 512C 20413 20414 2041F 5132 51DF 20619 2061A
5295 3525 3526 52F4 52F5 52F6 5335 3553 53B3 20B8F
567D 567E 567F 5680 5681 5682 5683 5684 5685 5686
5687 5688 5689 568A 568B 568C 568D 568E 568F 5690
5691 5692 5693 2104F 2105C 2106F 21075 21076 21077 21078
2107B 21088 367A 58CD 58CE 58CF 58D0 58D1 58D2 58D3
58D4 58D5 58D6 58D7 2148A 21497 21692 5B23 5B24 5B25
5B26 5B27 5B29 5B2A 5B2B 5B2C 5B2D 5B2E 5B2F 5B30
5B31 5B32 5B33 5B35 5B36 5B37 218D1 218D6 218D7 218D8
218D9 5B7A 5B7B 5BF1 5BF2 5C36 5C37 5C68 3819 5DB7
5DB8 5DB9 5DBA 5DBC 5DBD 5DBE 5DBF 21F6A 5DBB 3865
3866 5E6A 5E6B 5E6C 5F4C 5FBD 5FBE 2258D
61B5 61BC 61C2 61C3 61C7 61C9 61CB 61D1 61D7 61D9
61DA 61DB 61DC 61DD 61DE 61E0 61E1 61E2 61E4 61E5
61E6 61E7 61E8 228F7 6232 6234 64CA 64CE 64D8 3A5C
3A5E 64DF 64E0 64E1 64E2 64E3 64E4 64E6 64E8 64E9
64EB 64EC 64ED 64EE 64EF 64F0 64F1 22DEE 6580 6581
6582 6583 65A3 65B5 65B6 65DA 3B20 3B21 3B22 66CE
66D0 66D1 66D2 66D3 66D4 66D5 66D6 66D7 66DA 232D2
66D9 3B32 3B40 3BEC 3BF2 3BF3 3BF4 6A7D 6A7E 6A7F
6A80 6A81 6A82 6A83 6A84 6A85 6A86 6A87 6A88 6A89
6A8A 6A8B 6A8C 6A8D 6A8E 6A8F 6A90 6A91 6A92 6A93
6A94 6A95 6A96 6A97 6A98 6A99 6A9A 6A9B 6A9C 6A9D
6A9E 6A9F 6AA0 6AA1 6AA2 6AA3 6AA4 6AA5 6AA6 6AA7
6AA8 6AA9 6AAA 23703 23716 23720 2372D 2372F
2373F 6ADB 3C46 6B5B 6B5C 6B5D 6BAC 6BAD 6BAE 6BDA
6C08 6C09 6C0A 6FA9 6FCC 3D6F 3D73 3D75 6F80 6FD4
6FD5 6FD7 6FD8 6FD9 6FDA 6FDB 6FDC 6FDD 6FDE 6FDF
6FE0 6FE1 6FE2 6FE3 6FE4 6FE5 6FE6 6FE7 6FE8 6FE9
6FEA 6FEB 6FEC 6FED 6FEE 6FEF 6FF0 6FF1 6FF2 6FF4
6FF5 6FF6 6FF8 23FC0 24039 2403A 2403B 2403C 2403D 24057
3E00 3E01 3E02 71DF 71E0 71E1 71E2 71E3 71E4 71E5
71E6 71E7 71E8 71E9 71EA 71EB 71EC 71ED 71EE 71EF
71F0 71F1 71F2 71F3 71F4 71F5 71F6 71F7 243F8 24404
7235 7246 3E55 72A0 736E 736F 7370 7371 7372 7373
7374 3EFA 7490 7497 3EFF 3F00 3F01 74A5 74A6 74A8
74A9 74AA 74AB 74AC 74AD 74AE 74AF 74B0 74B1 74B2
74B3 74B4 24A71 24A77 24A78 24A79 24A7A 3F3F
750F 7510 7511 7512 7583 7584 24CD9 7640 7641 7642
7643 7644 7645 7646 7647 7648 7649 764B 764C 764D
764E 24EA5 24EA7 76A2 76A3 76A4 76A5 76BC 4009 76E8
76E9 76EA 406F 4071 77A4 77A6 77A7 77A8 77A9 77AA
77AB 77AC 77AD 77AE 77AF 77B0 77B1 77B2 77B3 77B4
77B5 77B6 77B7 252C7 77EF 77F0 40DF 78EF 78F0 78F1
78F2 78F3 78F4 78F5 78F6 78F7 78F8 78F9 78FA 78FB
78FC 78FD 78FE 78FF 7900 7901 7902 7903 7904 7905
25581 25584 2558F 79A7 79A8 79AA 79AB 25706 417F 7A49
7A54 7A55 7A56 7A57 7A58 7A59 7A5A 7A5B 7A5C 7A5D
7A5E 41B9 7ABE 7ABF 7AC0 7AC1 7AC2 7AF2 7AF3 7AF4
25AAF 7C15 423B 4240 4241 4242 4243 4244 4245 7BF0
7BF1 7BF2 7BF3 7BF4 7BF5 7BF6 7BF7 7BF8
7BFA 7BFB 7BFC 7BFD 7BFE 7BFF 7C00 7C01 7C02 7C03
7C04 7C05 7C06 7C07 7C08 7C09 7C0A 7C0B 7C0C 7C0D
7C0E 7C0F 7C10 7C12 7C13 7C14 7C16 7C17 25C91 25CA4
25CC0 7C18 42A2 7CD9 7CDA 7CDB 7CDC 7CDD 7CDE 7CDF
7CE0 7CE1 7CE2 7CE8 7E29 7E2A 7E2B 7E2C 7E2D 7E2E
7E2F 7E30 7E31 7E32 7E33 7E34 7E35 7E36 7E37 7E38
7E39 7E3A 7E3B 7E3C 7E3D 7E3E 7E3F 7E40 7E41 7E42
7E43 7E44 7E45 7E46 7E47 7E49 7E4A 7E4C 7E4D 26102
26121 7E48 7F44 7F45 7F46 7F7D 7F7E 7F7F 7F81 263BE
7FF2 7FF3 7FF4 7FF5 7FF6 7FFC 26484 26488 26489 802B
802C 806F 8070 8071 8072 8073 8074 26626 81A5 81B8
81BA 81BB 81BC 81BD 81BE 81BF 81C0 81C1 81C2 81C3
81C4 81C5 81C6 81C7 81C8 81C9 81CA 81CC
26846 2685E 81E8 81E9 269F2 825A 825B 825C 825D 8271
4516 451D 4520 4526 4527 8557 8576 8577 8578 8579
857A 857B 857C 857D 857E 857F 8580 8581 8582 8583
8584 8585 8586 8587 8588 8589 858A 858B 858D 858E
858F 8590 8591 8592 8593 8594 8595 8596 8597 8598
8599 859A 859B 859C 859D 859E 859F 85A0 85A1 85A2
85A3 85A4 85A5 85A6 85A7 85A8 85AA 85AB 85AC 85AE
26F73 26F74 26F9F 26FA1 85AD 85AF 8667 8668 45E9 45EE
87AA 87AB 87AC 87AD 87AE 87AF 87B0 87B1 87B2 87B3
87B4 87B5 87B6 87B7 87B8 87B9 87BA 87BB 87BC 87BD
87BE 87BF 87C0 87C1 87C2 87C3 87C4 87C5 87C6 87C7
87C8 87C9 87CA 87CB 87CC 87CD 87CE 87CF 87D0 87D1
87D2 27422 87DE 465B 8933 8935 8936 8937
8938 8939 893A 893B 893C 893D 893E 893F 8940 8941
8942 8943 8944 8945 8954 8952 2775E 89AB 89AC 89AD
89AE 89AF 89F2 89F3 27924 4700 8B04 8B05 8B06 8B07
8B08 8B09 8B0A 8B0B 8B0C 8B0D 8B0E 8B0F 8B10 8B11
8B12 8B13 8B15 8B16 8B17 8B18 8B19 8B1A 8B1B 8B1C
8B1D 8B1E 8B1F 8B20 8B21 8B22 27ABD 27ABE 4726 8C3F
8C40 8C41 8C4F 8C6F 8C70 8C71 8C72 8C73 8C94 8C95
8C96 8CF6 8CF7 8CF8 8CF9 8CFA 8CFB 8CFC 8CFD 27DDC
8D61 8D62 8D6F 8DA8 8E46 8E47 8E48 8E49 8E4A 8E4B
8E4C 8E4D 8E4E 8E4F 8E50 8E51 8E52 8E53 280E8 280E9
280F4 8F3D 8F3E 8F3F 8F40 8F41 8F42 8F43 8F44 8F45
2836D 2837D 8FAB 48AE 907D 907E 907F 9080 9081 9082
9083 9084 9085 9089 2860B 9138 9139 9198
9199 919A 919B 919C 919D 919E 919F 91A0 91A1 91A2
91A3 91A4 28933 493C 9328 9347 9349 934A 934B 934C
934D 934E 934F 9350 9351 9352 9353 9354 9355 9356
9357 9358 9359 935A 935B 935C 935D 935E 935F 9360
9361 9362 9363 9364 9365 9366 9367 9368 9369 936A
936B 936C 936D 936E 936F 9370 9371 9372 9373 9374
9375 9376 9377 9378 9379 937B 937C 937D 937E 937F
9380 9381 9382 9383 9384 9385 9386 9387 28A32 28A36
28A44 28A45 28A46 28A47 28A48 28A49 28A4A 28A4B 28A59 28A5A
28A81 28A82 28A83 93A1 93AF 9561 9562 9563 9564 9565
9566 9567 9568 9569 956A 956B 95C0 95B7 95C3 95C4
95C5 95C6 95C7 95C8 95C9 95CA 95CB 95CC 95CE 95CF
96AC 96AD 96AE 96AF 96B0 96B1 96B2 96B8
4A01 4A02 96D6 4A24 9718 9719 971A 971B 971C 971D
971E 971F 9720 2910D 29110 9721 4A4A 979A 979B 979C
979D 979E 979F 97A0 97A1 97D3 97D4 97D5 97F1 4AD1
9840 9841 9842 9843 9844 9845 9846 9847 9848 9849
984A 294E5 294E7 4B10 98B6 98B7 295E9 295F4 4B20 9925
992A 992B 992C 992D 992F 9930 9931 9932 9933 9935
9937 29732 9942 9946 9998 4B70 4B72 99A1 99A2 99A3
4B8E 4B90 99F4 99F5 99F6 99F7 99F8 99F9 99FA 99FB
99FC 99FD 99FE 99FF 9A00 9A01 9A02 9A03 298EA 99F3
9AA4 9ABD 9ABE 9AFC 9AFD 9AFE 9AFF 9B00 9B01 9B02
9B34 9B48 9B49 9B86 4C4B 4C4C 4C4D 9B99 9B9A 9B9B
9B9C 9B9D 9B9E 9B9F 9BA0 9BA1 9BA2 9BA4 9BA5 9BA6
9BA7 9BA8 9BA9 9BAA 9BAB 9BAC 9BAD 9BAE
9BAF 9BB0 9BB1 9BB2 9BB3 9BB4 9BBA 9BCE 9CBC 9CBD
9CBF 9CC0 9CC1 9CC2 9CC3 9CC4 9CC5 9CC6 9CC7 9CC8
9CC9 9CCA 9CCB 9CBE 9D1C 4CCD 4CD4 9D2D 9D2E 9D2F
9D30 9D31 9D32 9D33 9D34 9D35 9D36 9D37 9D38 9D39
9D3A 9D3B 9D3C 9D3D 9D3E 9D3F 9D40 9D41 9D42 9D43
9D44 9D45 9D46 9D47 9D48 9D49 2A014 9D67 9E69 9E6A
9E6B 9E6C 9E89 9E8A 9E8B 2A2B2 9EAF 9EB0 9EC7 9EC8
9EC9 9ECF 9EDA 9EDB 9EDC 9EDD 9EDE 2A434 9EFB 9EFF
9F22 9F23 9F24 9F3E 9F3F 9F4B 2A5C6 9F54 9F62 9F8B
9F8C 9FA0
FDD0-2812
512D 512E 512F 5131 34AF 204FE 5181 205A5 20AC2 53E2
3609 5694 5695 5696 5697 5698 5699 569A 569B 569C
569D 569E 569F 56A0 56A1 56A2 56A3 56A4 21096 2109D
210B4 210BF 210C0 210C1 210C7 210C8 210C9 210CF 210D3 56AE
58D8 58D9 214B6 5911 5913 5970 3730 3731 5B38 5B3A
5B3B 5B3C 218FA 5C69 5C6A 5DC0 5DC1 5DC2 5E6D 5E6E
5EEB 5F4D 5F5D 5F5E 399B 61D5 61D6 61D8 61DF 61E3
39A1 61E9 61EA 61EB 61ED 61EE 61F0 61F1 61F3 61F4
6233 64E7 64EA 3A61 3A66 3A67 64E5 64F2 64F4 64F5
64F6 64F7 64F8 64F9 64FA 64FB 64FC 64FD 64FE 64FF
6501 6502 6503 6504 6505 6506 22E0D 3AAB 8D01 23066
6594 2308E 65B7 65DB 3B23 3B24 3B25 3B26 3B27 3B28
66D8 66DB 66DC 232E0 232E1 6726 6AAB 6AAC
6AAD 6AAE 6AAF 6AB0 6AB1 6AB2 6AB3 6AB4 6AB5 6AB6
6AB7 6AB8 6AB9 6ABA 6ABB 6ABC 6ABD 6ABE 6ABF 6AC0
6AC1 6AC2 6AC3 6AC4 6AC5 6AC6 6AC7 6AC8 6AC9 6ACA
23766 23781 6AE1 6AED 6B5E 6B5F 6B78 6BAF 6BC9 6C0B
6FF7 3D7D 6FF9 6FFA 6FFB 6FFC 6FFD 6FFE 6FFF 7000
7001 7002 7003 7005 7006 7007 7008 7009 700A 700B
700C 700D 700E 700F 7010 7011 7012 7013 7014 24085
2408B 2408C 2408D 24091 7026 3E04 71F8 71F9 71FA 71FB
71FC 71FD 71FE 71FF 7200 7201 7203 24435 24436 269A8
7375 7376 7377 74A7 74B5 74B6 74B8 74B9 74BB 74BC
74BE 74BF 74C0 74C1 74C2 24A8C 24A93 24A94 24A95 24A96
24AA4 24AA5 24AA6 24AA7 7513 7514 7515 7585 764F 7650
7651 7652 7653 7654 7655 7656 7657 7658
7659 765A 765B 765C 765D 765E 7664 76A6 76A7 76A8
24FA9 3FF9 76BD 76EB 76EC 77B8 77B9 77BA 77BB 77BC
77BD 77BE 77BF 77C0 77C1 77C2 252D8 7906 7907 7908
7909 790A 790B 790C 790D 790E 790F 7910 7911 7912
7913 7914 7915 7916 4120 79AC 79AD 79AE 79AF 7A5F
7A60 7A61 7A62 7A63 258C8 7AC4 7AC5 7AF5 424E 4255
7C19 7C1A 7C1B 7C1C 7C1D 7C1E 7C1F 7C20 7C21 7C22
7C23 7C24 7C25 7C26 7C27 7C28 7C29 7C2A 7C2B 7C2D
7C2E 7C2F 7C30 7C31 7C32 25CC1 25CFE 25D20 42A6 7CE3
7CE4 7CE5 7CE6 7CE7 25F1A 4318 7E4E 7E4F 7E50 7E51
7E52 7E53 7E54 7E55 7E56 7E57 7E58 7E59 7E5A 7E5B
7E5C 7E5D 7E5E 7E5F 7E60 7E61 7E62 7E63 7E64 7E65
7E67 7E71 26159 2615A 2615B 2615C 7F47 7F48
7F49 26258 7F80 7F82 7FB3 7FB4 7FB5 4397 7FF7 7FF8
7FF9 7FFA 7FFB 2648D 26498 802D 802E 8075 8076 8077
4443 4444 4445 81CD 81CE 81CF 81D0 81D1 81D2 81D3
26888 820A 8219 825E 825F 8260 448F 452E 4533 453B
453D 453F 4540 4543 4544 85A9 85B0 85B1 85B2 85B3
85B4 85B5 85B6 85B7 85B8 85B9 85BA 85BB 85BC 85BD
85BE 85BF 85C0 85C1 85C2 85C3 85C4 85C5 85C6 85C7
85C8 85C9 85CA 85CB 85CC 85CD 85CE 85CF 85D0 85D2
85D3 26FBE 26FDE 26FDF 2700E 459B 8669 87D7 87D3 87D4
87D6 87D8 87D9 87DA 87DB 87DC 87DD 87DF 87E0 87E2
87E3 87E4 87E5 87E6 87E7 87E8 87E9 87EA 87EB 87EC
87ED 87EE 87EF 87F0 87F1 87F2 87F3 87F4 87F5 880E
27450 27484 27486 8946 8947 8948 8949 894A
894B 894C 894D 894E 894F 8950 8951 8953 8955 27784
27785 8986 468D 89B0 89B1 89B2 89B3 89F4 9D64 8B23
8B24 8B25 8B26 8B27 8B28 8B29 8B2A 8B2B 8B2C 8B2D
8B2E 8B2F 8B30 8B31 8B32 8B33 8B34 8B35 8B36 8B37
8B38 8B39 8B3A 8B3B 8B3C 8B3D 8B3E 27AF4 8B47 8C42
8C50 8C74 8C75 8C97 8C98 8C99 8CFE 8CFF 8D00 8D02
8D03 8D04 8D05 8DA9 4820 8E54 8E55 8E56 8E57 8E58
8E59 8E5A 8E5B 8E5C 8E5D 8E5E 8E5F 8E60 8E61 8E62
8E63 8E64 8E65 8E66 8E67 8E6E 8E80 2812E 8E69 8EBF
8EC0 8EC1 2827C 4871 8F46 8F47 8F48 8F49 8F4A 8F4B
8F4C 2838A 8FAC 9087 9088 28625 9128 913A 913B 913C
913D 913E 91A5 91A6 91A7 91A8 91A9 91AA 91AB 91AC
91D0 493E 4944 4945 4947 9388 9389 938A
938B 938C 938D 938E 938F 9390 9391 9392 9393 9394
9395 9396 9397 9398 9399 939A 939B 939C 939D 939E
939F 93A0 93A2 93A3 93A4 93A5 93A6 93A7 93A8 93AA
93AB 93AC 93AD 93AE 93B0 93B1 93B2 93B3 93B4 93B5
93B6 93B7 93B8 93B9 93BA 93BB 93BC 93BD 93BE 93BF
28A9A 28A9B 28A9C 28AC0 28AC6 28ACB 28ACC 28ACE 956C 956D
956E 956F 9570 9571 95D0 95D1 95D2 95D3 95D4 95D5
95D6 95D7 95D8 28D99 96B3 4A03 96D7 96D8 96D9 96DA
96DB 96DC 96DD 96DE 96DF 96E0 96E2 4A26 9722 9723
9724 9725 975D 97A2 97A3 97A4 97A5 97A6 97A7 97A8
97A9 97AA 97AB 97AC 97AD 97AE 97AF 97B0 4A96 97D6
97D7 97D8 97D9 97DA 97F9 97FA 29433 983F 983E 984B
984C 984D 984E 984F 9850 9851 9852 9853
9854 9855 98A2 98A3 98B8 98B9 98BA 4B49 4B4B 4B4C
992E 9936 9938 9939 993A 993B 993C 993D 993E 993F
9940 9941 99A4 99A5 4B93 4B96 4B97 9A04 9A05 9A06
9A07 9A08 9A09 9A0A 9A0B 9A0C 9A0D 9A0E 9A0F 9A10
9A11 9A12 9A13 298F1 29903 29905 9AC0 9AC1 9ADC 4C00
4C01 9B03 9B04 9B05 9B06 9B08 9B29 9B35 9B36 4C26
9B4A 9B4B 9B4C 9B4D 9B4E 9B4F 9BB5 9BB6 9BB7 9BB8
9BB9 9BBB 9BBC 9BBD 9BBE 9BBF 9BC0 9BC1 9BC2 9BC3
9BC4 9BC6 9BC7 9BC8 9BC9 9BCA 9BCB 9BCC 9BCD 9BCF
9BD0 9BD1 9BD2 9BD3 9BFD 29DF6 9CCC 9CCD 9CCE 9CCF
9CD0 9CD1 9CD2 9D4A 9D4B 9D4C 9D4D 9D4E 9D4F 9D50
9D51 9D52 9D53 9D54 9D55 9D56 9D57 9D58 9D59 9D5A
9D5B 9D5C 9D5D 9D5E 9D5F 9D60 9D62 9D63
9D65 9E6D 9E6E 9E6F 9E70 4D26 9E8C 9E8D 9E8E 9E8F
9E90 2A2B4 2A2B6 2A2BA 2A2BD 4D36 9EB1 9EB2 9EBF 9ECA
9ECB 9EDF 9EE0 9EE1 9F00 9F01 9F02 9F15 9F16 9F25
9F26 9F27 9F28 9F29 9F2A 9F2B 9F2C 9F4C 9F55 9F8E
FDD0-2813
3426 34A3 5133 5134 5135 5296 52F7 52F8 5336 53B4
58E1 56A5 56A6 56A7 56A8 56A9 56AA 56AB 56AC 56AD
56AF 56B0 210E4 210F4 210F5 210F6 58DA 58DB 58DC 58DD
58DE 58DF 58E0 58E2 5912 5B3D 3732 3733 3734 3735
5B39 5B3E 5B3F 21903 21904 21905 5B7C 5BF3 5BF4 5BF5
5C6B 3820 3822 5DC3 5DC4 5DC5 21F9E 21FA1 5E70 22173
5EEC 5EED 9F90 5F5F 5FBF 61EC 61EF 61F2 61F5 61F6
61F7 22926 22939 61FB 6500 6507 6508 6509 650A 650B
650C 650D 650E 650F 6510 6512 22E36 22E42 6584 65DC
65DD 65DE 3B29 3B2A 66DD 66DE 66DF 66E0 66E1 66E2
3C00 3C01 3C02 3C04 6ACB 6ACC 6ACD 6ACE 6ACF 6AD0
6AD1 6AD2 6AD3 6AD4 6AD5 6AD6 6AD7 6AD8 6AD9 6ADA
6ADC 6ADD 6ADE 6ADF 6AE0 6AE2 6AE3 6AE4
6AE5 6AE6 6AEB 237A2 237BC 237C2 6AE7 6B60 6BB0 6BB1
23ADB 6C0C 3D85 3D8A 6FF3 7015 7016 7017 7018 7019
701A 701B 701C 701D 701E 701F 7020 7021 7022 7023
7024 7025 7027 7028 7029 702B 702C 702D 702E 240C9
240E1 7202 3E06 7204 7205 7206 7207 7208 7209 720A
720C 720D 720E 7215 2445A 2445B 7258 72A1 72A2 72A3
72A4 72A5 72A6 7378 7379 737A 74B7 74BD 3F04 3F06
74C3 74C4 74C5 74C6 74C7 74C8 74C9 74CA 74CB 24AB1
24AB2 24AB3 24ABA 24ABB 24ABC 74E3 7516 7586 7587 765F
7660 7661 7663 76A9 2502C 77C3 77C4 77C5 77C6 77C7
77C8 77C9 77CA 2530E 25311 25313 77F1 7917 7918 7919
791A 791B 791C 791D 791E 791F 7920 7921 255B9 79B0
79B1 2571D 7A64 7A65 7A66 7A67 7A68 7A69
7A6A 7A6B 258E1 7AC6 7C2C 424F 4260 7C33 7C34 7C35
7C36 7C37 7C38 7C39 7C3A 7C3B 7C3C 7C3D 7C3E 7C3F
7C40 7C41 7C42 25D30 25D43 7CE9 7CEA 7CEB 7CEC 7CED
25F4B 4320 7E4B 7E66 7E68 7E69 7E6A 7E6B 7E6C 7E6D
7E6E 7E6F 7E70 7E72 7E73 7E74 7E75 7E76 7E77 7E78
7E79 7E7A 7F35 7F4A 7F4B 7F83 7F84 7F85 7F86 7FB6
7FB7 7FB8 7FB9 7FFD 7FFE 8078 81CB 4446 81D4 81D5
81D7 81D8 2688A 26893 26926 820B 821A 8261 8262 8263
8264 8265 8276 4545 4546 4551 FA1F 85D1 85D5 85D6
85D7 85D8 85D9 85DA 85DB 85DC 85DD 85DE 85DF 85E0
85E1 85E2 85E3 85E4 85E5 85E6 85E7 85E8 85E9 85EA
85EB 85EC 85ED 85EF 85F0 85F1 85F2 85F3 85F4 85F5
2704B 27052 27053 85F7 85F8 8801 87D5 87F6
87F7 87F8 87F9 87FA 87FB 87FC 87FD 87FE 87FF 8800
8802 8803 8804 8805 8806 8807 8808 8809 880A 880B
880C 880D 880F 881E 8956 8957 8958 8959 895A 895B
895C 895D 895E 895F 8960 8961 8962 8987 8988 89B4
89B5 89B6 89B7 89B8 89F5 89F6 8B3F 8B40 8B41 8B42
8B43 8B44 8B46 8B48 8B49 8B4A 8B4B 8B4C 8B4E 8B4F
8B50 8B51 8B52 8B53 8B54 8B55 8B56 8B57 8B58 8B59
8B5A 8B5B 8B5C 27B06 27B0B 27B18 8C36 8C43 8C77 8C76
8C9A 8D06 8D07 8D08 8D09 8D0A 8D0B 8D0C 8DAA 8DAB
8DAC 8DAD 4826 8E68 8E6A 8E6B 8E6C 8E6D 8E6F 8E70
8E71 8E72 8E73 8E74 8E75 8E76 8E77 8E78 8E79 8E7A
8E7B 8E7C 8E7D 8E7E 8E7F 2814F 2815D 2816F 8E87 8EC2
8EC3 8EC4 8EC5 8F4D 8F4E 8F4F 8F50 8F51
8F52 8F53 8F54 8FAD 8FB4 908A 908B 908C 2863B 913F
9140 9142 4911 91AD 91AE 91AF 91B0 91B1 4949 4951
4953 93A9 93C0 93C1 93C2 93C3 93C4 93C5 93C6 93C7
93C8 93C9 93CA 93CB 93CC 93CD 93CE 93CF 93D0 93D1
93D2 93D3 93D4 93D5 93D6 93D7 93D8 93D9 93DA 93DB
93DC 93DD 93DE 93DF 93E0 93E1 93E2 93E3 93E4 93E5
93E6 93E7 93E8 93E9 93EA 93EB 93EC 93ED 93EE 93EF
93F0 93F1 93F2 93F9 28ADE 28ADF 28AE0 28AE1 28AE2 28AE3
28AE5 28AEA 28AFC 28B0C 9572 957D 95D9 95DA 95DB 95DC
95DD 96B4 4A04 96E1 96E3 9726 9727 9728 9729 972A
972B 972C 972D 2913C 2914D 2915B 9761 97B1 97B2 97B3
97B4 97B5 97B6 97B7 97DC 97DD 97DE 97DF 97F2 97FB
97FC 4AE4 9856 9857 9858 9859 985A 985B
985C 985D 985E 98A4 4B19 98BB 98BC 98BD 98BE 98BF
98C0 4B53 9943 9944 9945 9947 9948 9949 99A6 99A7
29857 4B9D 9A14 9A15 9A16 9A17 9A18 9A19 9A1A 9A1B
9A1C 9A1D 9A1E 9A1F 9A20 9A21 9A22 9A23 9A24 9A25
9A26 9A27 9A28 2992F 9AA5 9AC2 9AC3 9AC5 4C04 4C07
9B09 9B0A 9B0B 9B0C 9B0D 9B0E 9B0F 9B37 9BC5 4C5B
9BD4 9BD5 9BD6 9BD7 9BD8 9BD9 9BDA 9BDB 9BDC 9BDD
9BDE 9BDF 9BE0 9BE1 9BE2 9BE3 9BE4 9BE5 9BE6 9BE7
9BE8 9BE9 9BEA 9BEB 9BEC 9BED 9BEE 9BEF 9BF0 9BF1
9BF2 9BF3 9BF4 9BF5 29E06 29E2D 9BFA 9CD3 9CD4 9CD5
9CD6 9CD7 9CD8 9CD9 9CDA 9CDB 9D61 4CE1 9D66 9D68
9D69 9D6A 9D6B 9D6C 9D6D 9D6E 9D6F 9D70 9D71 9D72
9D73 9D74 9D75 9D76 9D77 9D78 9D79 9D7A
9D7B 9D7C 9D7D 9D7E 9D7F 9D80 9D81 9D82 9D83 9D84
9D85 9D86 9D87 9D88 9D89 9D8A 9D8B 9D8C 9D8D 9D8E
9D8F 9D91 2A087 9E71 9E72 9E78 9E91 9E92 9E93 9E94
9E95 9E96 9E97 9EB3 9EB4 9EC0 4D4C 9EE2 9EE3 9EFC
9F03 9F04 9F17 9F2D 9F40 9F41 9F4D 9F56 9F57 9F58
9F8F 2A6A9
FDD0-2814
34A5 5136 5337 56B1 56B2 56B3 56B4 56B5 56B6 56B7
56B8 56B9 2112F 56BC 58E3 58E4 58E5 214E8 3736 3737
3738 5B40 5B41 5B42 5B43 5B44 5B45 5B46 21910 21911
21912 21915 5B7D 5B7E 5BF6 5DC6 5DC7 5DC8 5DC9 5DCA
5DCC 5E71 2217A 5EEE 5EEF 5EF0 5FC0 5FC1 39A4 61F8
61F9 61FA 2294F 3A70 6513 6514 6515 6516 6517 6518
6519 651A 6585 6586 65DF 3B2B 66E3 66E4 66E5 66E6
66E7 66E8 23300 6727 3C09 3C0A 3C0D 3C11 6AE8 6AE9
6AEA 6AEC 6AEE 6AEF 6AF0 6AF1 6AF2 6AF3 6AF4 6AF5
6AF6 237D5 237D6 237D7 6AF9 702A 3D8F 3D91 702F 7030
7031 7032 7033 7034 7035 7036 7037 7038 7039 703A
703B 703C 703D 703E 703F 7040 7041 24104 7042 3E0A
720B 720F 7210 7211 7212 7213 7214 7216
7217 7218 24473 24487 24488 72A7 72A8 24706 737B 737C
737D 74BA 74CC 74CD 74CE 74CF 74D0 74D1 74D2 24AC0
24AC7 7588 7589 7662 7665 7666 76AA 76AB 3FFA 76BE
76ED 77CB 77CC 77CD 77CE 77CF 77F2 7922 7923 7924
7925 7926 7927 7928 7929 792A 792B 792C 79B2 7A6C
7A6D 7A6E 7A6F 7AC7 7AF6 7AF7 7C43 7C44 7C45 7C46
7C47 7C48 7C49 7C4A 7C4B 7C4C 7C4D 7C4E 7C4F 7C55
42AE 7CEE 7CEF 7CF0 4326 7E7B 7E7C 7E7D 7E7E 7E7F
7E80 7E81 7E82 7E83 261AD 261AE 261B2 7F4C 26335 7FBA
7FFF 8000 802F 8079 807A 807B 807C 81D6 81D9 81DA
81DB 81DC 269B5 8266 8267 8268 8269 4552 4554 4555
4557 455C 8624 85EE 85F6 85F9 85FA 85FB 85FC 85FD
85FE 85FF 8600 8601 8602 8603 8604 8605
8606 8607 8608 8609 860A 860B 860C 860D 860E 860F
8610 8611 8613 8614 8622 27088 270AD 270AE 270AF 8612
861B 8630 4600 4601 8810 8811 8812 8813 8814 8815
8816 8817 8818 8819 8963 8964 8965 8966 8967 8968
89B9 89BA 89BB 89F7 89F8 89F9 4713 4718 8B4D 8B5D
8B5E 8B5F 8B60 8B61 8B62 8B63 8B64 8B65 8B66 8B67
8B68 8B69 8B6A 8B6B 8B6C 8B6D 8B6E 8B6F 8B70 8B71
8B72 27B38 27B39 27B3A 8C51 27C12 8D0D 8D0E 8D0F 8DAE
8E81 8E82 8E83 8E84 8E85 8E86 8E88 8E89 28189 8EC6
8F55 8F56 8F57 8F58 8F59 8F5A 8FAE 908D 9141 9143
91B2 91B3 91B4 91B5 91B6 91B7 91B8 91CB 93F3 93F5
93F6 93F7 93F8 93FA 93FB 93FC 93FD 93FE 93FF 9400
9401 9402 9403 9404 9405 9406 9407 9408
9409 940A 940B 940C 940D 940E 940F 9410 9411 9412
9413 9414 9415 9416 9417 9418 9419 941A 941B 941C
941D 941E 941F 9420 9421 9422 9423 9424 9425 9426
9427 9428 28B13 28B21 28B22 28B2B 28B2C 28B2D 28B2F 28B46
28B4C 28B4E 28B50 942F 943C 9573 9574 95DE 95DF 95E0
95E1 28DB9 96B5 972E 972F 9730 9731 9733 9734 2915E
29170 4A4B 97B8 97B9 97BA 97BB 97DB 97E0 97FD 97FE
97FF 985F 9860 9861 9862 9863 98A5 98C1 98C2 98C3
98C4 994A 994B 994C 994D 994E 9950 9951 9952 9953
9959 99A8 9A29 9A2A 9A2B 9A2C 9A2D 9A2E 9A2F 9A30
9A31 9A32 9A33 9A34 9A35 9A36 9A37 9A38 29947 29948
29949 2995D 2996A 9AA6 9AA7 9AC4 9AC6 9AC7 9AC8 9AC9
9ACA 9ACB 9ACC 9B10 9B11 9B12 9B13 9B2A
9B38 9B50 9BFB 4C6D 9BF6 9BF7 9BF8 9BF9 9BFC 9BFE
9BFF 9C00 9C01 9C02 9C03 9C04 9C05 9C06 9C07 9C08
9C09 9C0A 9C0B 9C0C 9C0D 9C0E 9C0F 9C10 9C11 9C12
9C13 9C14 9C15 9C16 9C17 9C18 9C19 9C1A 9C1B 9C20
29E68 9C40 9CDC 9CDD 9CDE 9CDF 4CED 9D90 9D92 9D93
9D94 9D95 9D96 9D97 9D98 9D99 9D9A 9D9B 9D9C 9D9D
9D9E 9D9F 9DA0 9DA1 9DA2 9DA3 9DA4 9DA5 9DA6 9DA7
9DA8 9DA9 9DAA 9DAB 2A0B9 2A0E1 2A0ED 2A0F3 2A0F8 9DBF
9E79 9E98 9E99 9E9A 9E9B 9EB5 9EC1 2A3A9 4D4D 9EE4
9EE5 9EE6 9EE7 9EE8 9EE9 9EEA 2A45B 9F0D 9F2E 9F2F
9F30 2A5CB 9F59 9F5A 9F5B 9F5D 9F5E 9F5F 9F60 9F61
9F63 9F91
FDD0-2815
34A7 5137 5138 5139 513A 5164 5297 5298 2082C 535B
56BA 56BB 56BD 56BE 56BF 56C0 56C1 56C2 56C3 56C4
56CD 2113B 2113D 21145 21148 2114F 58E6 214FD 5914 3739
5B47 5B48 5B49 2191C 5BF7 5C6C 5DCB 3826 5DCD 5DCF
5DD0 5EF1 5FC2 61FC 61FD 61FE 6511 651B 651C 651D
22E78 6595 66E9 2330A 6707 3C15 6AF8 6AFA 6AFB 6AFC
6AFD 6AFE 6AFF 6B00 6B01 6B02 6B03 6B04 6B05 6B0C
6BB2 7043 7044 7045 7046 7047 7048 7049 704A 704B
704C 704D 704F 7050 2410F 24119 3E0D 7219 721A 721B
244B9 721D 737E 74D3 74D4 74D6 24ACA 24AD1 7517 3FD7
7667 7668 7669 766A 766B 76AC 24FB8 77D0 77D1 77D2
77D3 792D 792E 792F 7930 7931 7932 7933 7934 255D5
255DB 25725 25903 7AC3 7AC8 7AC9 7C56 426A
7C50 7C51 7C52 7C53 7C54 7CF2 7E84 7E85 7E86 7E87
7E88 7E89 7E8A 7E8B 7E8C 7E8D 7E8E 7E8F 7E90 7F4D
7FBB 7FBC 8030 81DD 826A 4562 85D4 8615 8616 8617
8618 8619 861A 861C 861D 861E 861F 8620 8621 8623
8625 8626 8627 8628 8629 862A 862B 862D 862E 862F
270CD 270F8 27109 2710C 4602 881A 881B 881C 881D 881F
8820 8821 8822 8823 8824 8829 882B 884A 8969 896A
896B 896C 896D 896E 89BC 89BD 89FA 8B45 8B73 8B74
8B75 8B76 8B77 8B78 8B79 8B7A 8B7B 8B7C 8B7D 27B48
8D10 8D11 8D12 8D13 8D14 8D63 8DAF 8DB0 8E8A 8E8B
8E8C 8E8D 8E8E 8E8F 281AF 281BC 8EC7 8F5B 8F5C 8F5D
8F5E 8F5F 8FAF 908E 9144 9145 9146 91B9 91BA 91BB
4965 93F4 9429 942A 942B 942C 942D 942E
9430 9431 9432 9433 9434 9435 9436 9437 9438 9439
943A 943B 943D 943E 943F 9440 9441 28B63 28B64 28B65
28B66 28B6C 28B8F 95E2 95E3 95E4 95E5 95E6 96E4 9732
9735 9736 9737 9738 9739 973A 973B 9767 97BC 97BD
97BE 97BF 97E1 97E2 2943F 9864 9865 9866 9867 9868
98A6 98C5 98C6 98C7 98C8 98C9 98CA 98DC 994F 9956
9957 9958 99A9 9A39 9A3A 9A3B 9A3C 9A3D 9A3E 9A3F
9A40 9A41 9A42 9A43 9A44 9A45 9A46 9A47 9ACD 9ACE
9ACF 9B14 9B15 9B16 9B17 9B18 9B39 9B3A 9B51 9B52
9B53 9B54 4C7D 9C1C 9C1D 9C1E 9C1F 9C21 9C22 9C23
9C24 9C25 9C26 9C27 9C28 9C29 9C2A 9C2B 9C2C 9C2D
9C2E 9C2F 9C30 29EAC 4CA3 4CA4 9CE0 9CE1 9CE2 9CE3
9DAC 9DAD 9DAE 9DAF 9DB0 9DB1 9DB2 9DB3
9DB4 9DB5 9DB6 9DB7 9DB8 9DB9 9DBA 9DBB 9DBC 9DBD
9DBE 9DC0 9DC1 9DC2 9DC3 9DC4 9DC5 9DC6 9DC7 9DC8
9DC9 9DCA 9DCC 9DCD 9DCE 9DCF 2A0FE 2A107 2A123 9E7A
9E7B 9E9C 9E9D 4D4E 9EEB 9EEC 9EED 9EEE 9EEF 9F05
9F18 9F19 9F1A 9F1B 9F31 9F4E 9F5C 9F64 9F65 9F66
9F67 9F68 9F69 2A601 9F92 9F9D 9FA1
FDD0-2816
4EB9 513B 513C 20465 20979 3618 56C5 56C6 56C7 56C8
56C9 56CA 56CB 56CE 571D 5971 373A 5B4A 5B4B 5B4C
21922 21927 5B7F 5DCE 5DD1 5DD2 5DD3 5DD4 5DD5 5DD7
5EF2 5F4E 5F72 61FF 6202 22967 2296B 6235 651E 651F
6520 6521 6522 6524 6526 6527 22E8B 23033 3B2C 3B2D
3C18 6AF7 6B06 6B07 6B08 6B09 6B0A 6B0B 6B0D 6B0E
6B61 6C0D 7051 7052 7054 7055 7056 7057 7058 2413F
24140 24144 721C 721E 721F 7220 72A9 737F 7380 74D5
74D7 74D8 74D9 74E4 758A 766C 766D 766E 24F0E 76AD
7935 255E0 79B3 79B4 7A70 7A71 7ACA 7AF8 7C57 7C58
7C59 7C5A 7C5B 7C5C 7C5D 7C5F 7C60 7C61 7CF1 7CF4
432B 7E91 7E92 261DD 7F4E 7F4F 26261 7F87 8031 8032
807D 807E 81DE 81DF 269FA 826B 4567 456A
862C 8632 8633 8634 8635 8636 8637 2710D 27126 27127
4606 8825 8826 8827 8828 882A 882C 896F 8970 8971
8972 89BE 89BF 2789D 89FB 89FC 4720 8B7E 8B7F 8B80
8B81 8B82 8B83 8B84 8B85 8B86 8C44 8D15 8D16 8D17
8D18 8E90 8E91 8E92 8E93 8E94 8E95 8E96 8E97 8E9A
8F60 8F61 8F62 9147 9148 496A 496D 9442 9443 9444
9445 9446 9447 9448 9449 944A 944B 944C 944D 944E
944F 9450 9451 9452 9453 9454 9467 28B99 28B9C 28B9D
9575 9576 957E 95E7 973C 973D 973E 973F 9740 2919C
97C0 97C1 97C2 97C3 97E3 9869 986A 986B 98CB 9954
9955 995A 995B 297D4 9A48 9A49 9A4A 9A4B 9A4C 9A4D
9A4E 9A4F 9A50 9A51 9A52 9A53 9A54 9A55 2999D 9AD0
9AD2 9ADD 9B1D 4C0E 9B19 9B1A 9B1B 9B1C
29BD5 9B2B 9B3B 9B55 9B56 4C81 9C31 9C32 9C33 9C34
9C35 9C36 9C37 9C38 9C39 9C3A 9C3B 9C3C 9C3D 9C3E
9C3F 9C41 9C42 9C43 9C44 9C45 9C46 9C47 9C48 9DE0
29EC3 9C49 9CE4 9DCB 9DD0 9DD1 9DD2 9DD3 9DD4 9DD5
9DD6 9DD7 9DD8 9DD9 9DDA 9DDB 9DDC 9DDD 9DDE 9DDF
2A133 2A134 2A150 9DE9 9DF5 9E73 9E74 9E9E 2A2DF 9EB6
9ED0 9EF0 9EF1 9F32 9F33 9F34 9F35 9F42 4D9C 9F6A
9F6B 9F6C 9F93 9F94 9F95 9FA2
FDD0-2817
513D 5299 529A 20ACD 361A 56CC 56CF 56D0 58E7 58E8
21582 5972 5B4D 5DD6 5DD8 5DDA 5F4F 6200 6201 6203
6204 6523 3A77 6525 6528 6529 652A 652B 6596 3B2E
66EA 66EB 66EC 6B0F 6B10 6B11 6B12 2383A 6BCA 7053
7059 705A 705B 705C 2414E 24155 24156 24157 2415C 2415F
7221 7222 244BC 244CE 244D3 244D6 7381 7382 7383 74DA
24ADF 766F 7670 77D4 7936 7937 79B5 7C5E 4274 7C62
7C63 7C64 7C65 7C66 7C67 7C68 7CF5 7E93 7E94 7E95
7E96 81E2 268C7 826C 4577 8631 8638 8639 863A 863B
863C 863D 863E 863F 8640 8641 2721B 8834 882D 882E
882F 8830 8831 8832 8833 8973 8974 8976 8989 89FD
89FE 8B87 8B88 8B89 8B8A 8B8B 8B8C 8B8D 8B8E 8B8F
8B90 8C45 8D19 8D1A 8DB1 8E98 8E99 8E9B
8E9C 2829B 8F63 8F64 908F 9090 91BC 4972 9455 9456
9457 9458 9459 945A 945B 945C 945D 945E 945F 9460
9461 9462 9463 9464 9465 9466 28BC2 28BC5 28BD4 28BD7
28BD9 28BDA 4A35 9741 291A8 9768 97C4 97C5 9800 986C
986D 986E 986F 98A7 995C 99AA 9A56 9A57 9A58 9A59
9A5A 9A5B 9A5C 9AD1 9AD3 9AD4 9ADE 9B1E 9B1F 9B20
9C4A 9C4B 9C4C 9C4D 9C4E 9C4F 9C50 9C51 9C52 9C53
9C54 9C55 9C56 9C57 9C58 9C59 9C5A 9C5B 29EF8 9C6A
4D00 9DE1 9DE2 9DE3 9DE4 9DE5 9DE6 9DE7 9DE8 9DEA
9DEB 9DEC 9DED 9DEE 9DEF 9DF0 9DF1 9DF2 9DF3 9DF4
9DF6 9DF7 9DF8 9DFB 9DFC 2A192 2A193 2A1AB 9E9F 9EC2
9EF2 9EF3 9EF4 9F06 9F07 9F1C 9F36 9F37 9F38 9F39
9F43 9F44 9F4F 9F6D 9F6E 9F6F 9F70 9F71
2A632
FDD0-2818
513E 204D7 56D1 56D2 56D3 21180 3681 58E9 5B4E 5B4F
5C6D 5DD9 22980 652C 652D 66ED 66EE 6B13 6B14 6B15
705D 705E 705F 7060 7061 7223 74DB 74E5 7671 7672
24FC2 77D5 77D7 77D6 40FA 7938 79B6 79B7 7A73 7A72
4276 7C6A 7E97 7F50 7F88 7F89 826D 8277 8643 8645
27164 27165 8835 8836 8837 8838 8839 883A 884B 8862
8975 8977 277CC 8B91 8B92 8B93 8B94 8B95 8B96 8D1B
8E9D 8E9E 8E9F 8EA0 8EC8 91BD 91BE 91BF 91C0 91C2
9468 9469 946A 946B 946C 28BE7 28BE8 28BE9 28BEA 28BEB
28BEC 28BF5 96E5 96E6 9742 9743 9744 9745 9746 9747
9748 97C6 97C7 97C8 97E4 97E5 29448 9870 995D 9A5D
9A5E 9A5F 9AD5 9B21 9B22 9B2C 9B2D 9B57 9B58 9B59
29D3E 9C5C 9C5D 9C5E 9C5F 9C60 9C61 9C62
9C63 9C64 9C65 9C66 9C67 9C69 9C6B 29F23 9C70 9DFA
4D09 9DF9 9DFD 9DFE 9DFF 9E00 9E01 9E02 9E03 9E04
9E05 9E06 9E07 9E08 9E09 9E0A 2A1B4 9E7C 9E7D 9EA0
9F1E 9F45 9F46 9F72 9F73 9F74 9F75 9F76 9F77
FDD0-2819
56D4 56D5 21187 58EA 5EF3 6205 6206 652E 65B8 3B2F
66EF 6B16 6B17 6B18 6B19 6B1A 6B1B 6B1D 7062 7063
7224 7225 7226 72AA 24D06 77D8 77D9 77E1 7939 7C69
7C6B 7C6C 7C6D 7C6E 7CF6 7E98 7E99 7E9A 7E9B 81E0
81E1 8642 8646 8647 8648 8649 883B 27574 8978 8979
897A 897B 897C 898A 89C0 89FF 8B97 8B98 8B99 8C52
8C9B 8D1C 27E4D 8EA1 8EA2 8EA3 8EA4 8EA5 91C1 946D
946E 946F 9470 9471 9472 9473 28BFF 28C03 9749 9871
9872 995E 995F 9995 4BBD 299C3 299C9 9AD6 9B23 9C68
9C6C 9C6D 9C6E 9C6F 29F30 9E0B 9E0C 9E0D 9E0E 9E0F
9E10 9E11 9E12 2A1DF 9EA1 9ECC 9EF5 9F08 9F09 9F1D
9F1F 9F47 9F78 9F79 9F7A 9F7B 2A64A 9FA3
FDD0-281A
3536 571E 373B 5F60 6B1C 6C0E 704E 7064 7066 24AE2
7673 77DA 7C6F 7C70 25E0E 7CF3 8644 866A 883C 8B9A
8B9B 27E4F 8DB2 8EA6 8EA7 91C3 91C4 9474 9475 9476
9477 9478 9479 947A 28C09 28C1C 28C1D 974A 97C9 4BBE
9A60 9A61 9A62 9A63 9A65 9AD7 9C71 9C72 9C73 9C74
9C75 9C76 9E13 9E14 2A1F5 9EF6 9F0A 2A65B 9FA4 9FA5
FDD0-281B
7065 7067 7068 24177 2417A 72AB 7CF7 7E9C 7E9D 864A
883D 883E 883F 897D 8B9C 8B9D 8B9E 8C53 8C9C 8EA9
8EAA 8EC9 8F65 91C5 947B 947C 947D 947E 28C23 28C26
974B 974C 974D 974E 9873 9874 98CC 98CD 98DD 9960
9961 99AB 9A64 9A66 9A67 9B24 9B2E 9B30 9C77 9C78
9E15 9E16 9E17 9EF7 9F48
FDD0-281C
56D6 6207 22EB3 2331F 6B1E 6B1F 7227 24AE9 3FDC 7674
27175 864C 8C54 8EA8 28207 947F 9480 9481 9482 28C2B
28C30 96E7 4BC0 9A68 9A69 9E18 9E19 9E1A 2A220 9EA2
9EF8 9F3A 9F7C 9F7D 9F9E
FDD0-281D
7228 7E9E 864B 8B9F 4979 9483 9484 974F 9A6A 9B31
9C79 9E1B 9E1C 9EB7
FDD0-281E
53B5 7675 4190 7C71 4585 28C39 97CA 9962 9A6B 29C73
9C7A 9E1D 9E1E 2A233 4D91
FDD0-281F
7069 275A3 4D10 9EA3
FDD0-2820
706A 7C72 28C3B 9F96
FDD0-2821
2193B 7229 9C7B 9EA4 9F97
FDD0-2823
9F7E
FDD0-2824
9F49
FDD0-2827
9750
FDD0-2830
9F98
__END__
=head1 NAME
Unicode::Collate::CJK::Stroke - weighting CJK Unified Ideographs
for Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate;
use Unicode::Collate::CJK::Stroke;
my $collator = Unicode::Collate->new(
overrideCJK => \&Unicode::Collate::CJK::Stroke::weightStroke
);
=head1 DESCRIPTION
C<Unicode::Collate::CJK::Stroke> provides C<weightStroke()>,
that is adequate for C<overrideCJK> of C<Unicode::Collate>
and makes tailoring of CJK Unified Ideographs in the order
of CLDR's stroke ordering.
=head1 CAVEAT
The stroke ordering includes some characters that are not
CJK Unified Ideographs and can't utilize C<weightStroke()>
for collation. For them, use C<entry> instead.
=head1 SEE ALSO
=over 4
=item CLDR - Unicode Common Locale Data Repository
L<http://cldr.unicode.org/>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=item L<Unicode::Collate>
=item L<Unicode::Collate::Locale>
=back
=cut
Unicode/Collate/allkeys.txt 0000644 00006713474 15033552504 0011752 0 ustar 00 # allkeys-9.0.0.txt
# Date: 2016-05-16, 18:21:19 GMT [KW]
# Copyright 2016 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# This file defines the Default Unicode Collation Element Table
# (DUCET) for the Unicode Collation Algorithm
#
# See UTS #10, Unicode Collation Algorithm, for more information.
#
# Diagnostic weight ranges
# Primary weight range: 0200..54A3 (21156)
# Secondary weight range: 0020..0114 (245)
# Variant secondaries: 0110..0114 (5)
# Tertiary weight range: 0002..001F (30)
#
@version 9.0.0
@implicitweights 17000..18AFF; FB00 # Tangut and Tangut Components
0000 ; [.0000.0000.0000] # NULL (in ISO 6429)
0001 ; [.0000.0000.0000] # START OF HEADING (in ISO 6429)
0002 ; [.0000.0000.0000] # START OF TEXT (in ISO 6429)
0003 ; [.0000.0000.0000] # END OF TEXT (in ISO 6429)
0004 ; [.0000.0000.0000] # END OF TRANSMISSION (in ISO 6429)
0005 ; [.0000.0000.0000] # ENQUIRY (in ISO 6429)
0006 ; [.0000.0000.0000] # ACKNOWLEDGE (in ISO 6429)
0007 ; [.0000.0000.0000] # BELL (in ISO 6429)
0008 ; [.0000.0000.0000] # BACKSPACE (in ISO 6429)
000E ; [.0000.0000.0000] # SHIFT OUT (in ISO 6429)
000F ; [.0000.0000.0000] # SHIFT IN (in ISO 6429)
0010 ; [.0000.0000.0000] # DATA LINK ESCAPE (in ISO 6429)
0011 ; [.0000.0000.0000] # DEVICE CONTROL ONE (in ISO 6429)
0012 ; [.0000.0000.0000] # DEVICE CONTROL TWO (in ISO 6429)
0013 ; [.0000.0000.0000] # DEVICE CONTROL THREE (in ISO 6429)
0014 ; [.0000.0000.0000] # DEVICE CONTROL FOUR (in ISO 6429)
0015 ; [.0000.0000.0000] # NEGATIVE ACKNOWLEDGE (in ISO 6429)
0016 ; [.0000.0000.0000] # SYNCHRONOUS IDLE (in ISO 6429)
0017 ; [.0000.0000.0000] # END OF TRANSMISSION BLOCK (in ISO 6429)
0018 ; [.0000.0000.0000] # CANCEL (in ISO 6429)
0019 ; [.0000.0000.0000] # END OF MEDIUM (in ISO 6429)
001A ; [.0000.0000.0000] # SUBSTITUTE (in ISO 6429)
001B ; [.0000.0000.0000] # ESCAPE (in ISO 6429)
001C ; [.0000.0000.0000] # FILE SEPARATOR (in ISO 6429)
001D ; [.0000.0000.0000] # GROUP SEPARATOR (in ISO 6429)
001E ; [.0000.0000.0000] # RECORD SEPARATOR (in ISO 6429)
001F ; [.0000.0000.0000] # UNIT SEPARATOR (in ISO 6429)
007F ; [.0000.0000.0000] # DELETE (in ISO 6429)
0080 ; [.0000.0000.0000] # <control>
0081 ; [.0000.0000.0000] # <control>
0082 ; [.0000.0000.0000] # BREAK PERMITTED HERE (in ISO 6429)
0083 ; [.0000.0000.0000] # NO BREAK HERE (in ISO 6429)
0084 ; [.0000.0000.0000] # <control>
0086 ; [.0000.0000.0000] # START OF SELECTED AREA (in ISO 6429)
0087 ; [.0000.0000.0000] # END OF SELECTED AREA (in ISO 6429)
0088 ; [.0000.0000.0000] # CHARACTER TABULATION SET (in ISO 6429)
0089 ; [.0000.0000.0000] # CHARACTER TABULATION WITH JUSTIFICATION (in ISO 6429)
008A ; [.0000.0000.0000] # LINE TABULATION SET (in ISO 6429)
008B ; [.0000.0000.0000] # PARTIAL LINE FORWARD (in ISO 6429)
008C ; [.0000.0000.0000] # PARTIAL LINE BACKWARD (in ISO 6429)
008D ; [.0000.0000.0000] # PARTIAL LINE FEED (in ISO 6429)
008E ; [.0000.0000.0000] # SINGLE SHIFT TWO (in ISO 6429)
008F ; [.0000.0000.0000] # SINGLE SHIFT THREE (in ISO 6429)
0090 ; [.0000.0000.0000] # DEVICE CONTROL STRING (in ISO 6429)
0091 ; [.0000.0000.0000] # PRIVATE USE ONE (in ISO 6429)
0092 ; [.0000.0000.0000] # PRIVATE USE TWO (in ISO 6429)
0093 ; [.0000.0000.0000] # SET TRANSMIT STATE (in ISO 6429)
0094 ; [.0000.0000.0000] # CANCEL CHARACTER (in ISO 6429)
0095 ; [.0000.0000.0000] # MESSAGE WAITING (in ISO 6429)
0096 ; [.0000.0000.0000] # START OF GUARDED AREA (in ISO 6429)
0097 ; [.0000.0000.0000] # END OF GUARDED AREA (in ISO 6429)
0098 ; [.0000.0000.0000] # START OF STRING (in ISO 6429)
0099 ; [.0000.0000.0000] # <control>
009A ; [.0000.0000.0000] # SINGLE CHARACTER INTRODUCER (in ISO 6429)
009B ; [.0000.0000.0000] # CONTROL SEQUENCE INTRODUCER (in ISO 6429)
009C ; [.0000.0000.0000] # STRING TERMINATOR (in ISO 6429)
009D ; [.0000.0000.0000] # OPERATING SYSTEM COMMAND (in ISO 6429)
009E ; [.0000.0000.0000] # PRIVACY MESSAGE (in ISO 6429)
009F ; [.0000.0000.0000] # APPLICATION PROGRAM COMMAND (in ISO 6429)
00AD ; [.0000.0000.0000] # SOFT HYPHEN
061C ; [.0000.0000.0000] # ARABIC LETTER MARK
070F ; [.0000.0000.0000] # SYRIAC ABBREVIATION MARK
08E2 ; [.0000.0000.0000] # ARABIC DISPUTED END OF AYAH
180B ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR ONE
180C ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR TWO
180D ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR THREE
180E ; [.0000.0000.0000] # MONGOLIAN VOWEL SEPARATOR
200B ; [.0000.0000.0000] # ZERO WIDTH SPACE
200C ; [.0000.0000.0000] # ZERO WIDTH NON-JOINER
200D ; [.0000.0000.0000] # ZERO WIDTH JOINER
200E ; [.0000.0000.0000] # LEFT-TO-RIGHT MARK
200F ; [.0000.0000.0000] # RIGHT-TO-LEFT MARK
202A ; [.0000.0000.0000] # LEFT-TO-RIGHT EMBEDDING
202B ; [.0000.0000.0000] # RIGHT-TO-LEFT EMBEDDING
202C ; [.0000.0000.0000] # POP DIRECTIONAL FORMATTING
202D ; [.0000.0000.0000] # LEFT-TO-RIGHT OVERRIDE
202E ; [.0000.0000.0000] # RIGHT-TO-LEFT OVERRIDE
2060 ; [.0000.0000.0000] # WORD JOINER
2066 ; [.0000.0000.0000] # LEFT-TO-RIGHT ISOLATE
2067 ; [.0000.0000.0000] # RIGHT-TO-LEFT ISOLATE
2068 ; [.0000.0000.0000] # FIRST STRONG ISOLATE
2069 ; [.0000.0000.0000] # POP DIRECTIONAL ISOLATE
206A ; [.0000.0000.0000] # INHIBIT SYMMETRIC SWAPPING
206B ; [.0000.0000.0000] # ACTIVATE SYMMETRIC SWAPPING
206C ; [.0000.0000.0000] # INHIBIT ARABIC FORM SHAPING
206D ; [.0000.0000.0000] # ACTIVATE ARABIC FORM SHAPING
206E ; [.0000.0000.0000] # NATIONAL DIGIT SHAPES
206F ; [.0000.0000.0000] # NOMINAL DIGIT SHAPES
FE00 ; [.0000.0000.0000] # VARIATION SELECTOR-1
FE01 ; [.0000.0000.0000] # VARIATION SELECTOR-2
FE02 ; [.0000.0000.0000] # VARIATION SELECTOR-3
FE03 ; [.0000.0000.0000] # VARIATION SELECTOR-4
FE04 ; [.0000.0000.0000] # VARIATION SELECTOR-5
FE05 ; [.0000.0000.0000] # VARIATION SELECTOR-6
FE06 ; [.0000.0000.0000] # VARIATION SELECTOR-7
FE07 ; [.0000.0000.0000] # VARIATION SELECTOR-8
FE08 ; [.0000.0000.0000] # VARIATION SELECTOR-9
FE09 ; [.0000.0000.0000] # VARIATION SELECTOR-10
FE0A ; [.0000.0000.0000] # VARIATION SELECTOR-11
FE0B ; [.0000.0000.0000] # VARIATION SELECTOR-12
FE0C ; [.0000.0000.0000] # VARIATION SELECTOR-13
FE0D ; [.0000.0000.0000] # VARIATION SELECTOR-14
FE0E ; [.0000.0000.0000] # VARIATION SELECTOR-15
FE0F ; [.0000.0000.0000] # VARIATION SELECTOR-16
FEFF ; [.0000.0000.0000] # ZERO WIDTH NO-BREAK SPACE
FFF9 ; [.0000.0000.0000] # INTERLINEAR ANNOTATION ANCHOR
FFFA ; [.0000.0000.0000] # INTERLINEAR ANNOTATION SEPARATOR
FFFB ; [.0000.0000.0000] # INTERLINEAR ANNOTATION TERMINATOR
1BCA0 ; [.0000.0000.0000] # SHORTHAND FORMAT LETTER OVERLAP
1BCA1 ; [.0000.0000.0000] # SHORTHAND FORMAT CONTINUING OVERLAP
1BCA2 ; [.0000.0000.0000] # SHORTHAND FORMAT DOWN STEP
1BCA3 ; [.0000.0000.0000] # SHORTHAND FORMAT UP STEP
1D173 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN BEAM
1D174 ; [.0000.0000.0000] # MUSICAL SYMBOL END BEAM
1D175 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN TIE
1D176 ; [.0000.0000.0000] # MUSICAL SYMBOL END TIE
1D177 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN SLUR
1D178 ; [.0000.0000.0000] # MUSICAL SYMBOL END SLUR
1D179 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN PHRASE
1D17A ; [.0000.0000.0000] # MUSICAL SYMBOL END PHRASE
E0001 ; [.0000.0000.0000] # LANGUAGE TAG
E0020 ; [.0000.0000.0000] # TAG SPACE
E0021 ; [.0000.0000.0000] # TAG EXCLAMATION MARK
E0022 ; [.0000.0000.0000] # TAG QUOTATION MARK
E0023 ; [.0000.0000.0000] # TAG NUMBER SIGN
E0024 ; [.0000.0000.0000] # TAG DOLLAR SIGN
E0025 ; [.0000.0000.0000] # TAG PERCENT SIGN
E0026 ; [.0000.0000.0000] # TAG AMPERSAND
E0027 ; [.0000.0000.0000] # TAG APOSTROPHE
E0028 ; [.0000.0000.0000] # TAG LEFT PARENTHESIS
E0029 ; [.0000.0000.0000] # TAG RIGHT PARENTHESIS
E002A ; [.0000.0000.0000] # TAG ASTERISK
E002B ; [.0000.0000.0000] # TAG PLUS SIGN
E002C ; [.0000.0000.0000] # TAG COMMA
E002D ; [.0000.0000.0000] # TAG HYPHEN-MINUS
E002E ; [.0000.0000.0000] # TAG FULL STOP
E002F ; [.0000.0000.0000] # TAG SOLIDUS
E0030 ; [.0000.0000.0000] # TAG DIGIT ZERO
E0031 ; [.0000.0000.0000] # TAG DIGIT ONE
E0032 ; [.0000.0000.0000] # TAG DIGIT TWO
E0033 ; [.0000.0000.0000] # TAG DIGIT THREE
E0034 ; [.0000.0000.0000] # TAG DIGIT FOUR
E0035 ; [.0000.0000.0000] # TAG DIGIT FIVE
E0036 ; [.0000.0000.0000] # TAG DIGIT SIX
E0037 ; [.0000.0000.0000] # TAG DIGIT SEVEN
E0038 ; [.0000.0000.0000] # TAG DIGIT EIGHT
E0039 ; [.0000.0000.0000] # TAG DIGIT NINE
E003A ; [.0000.0000.0000] # TAG COLON
E003B ; [.0000.0000.0000] # TAG SEMICOLON
E003C ; [.0000.0000.0000] # TAG LESS-THAN SIGN
E003D ; [.0000.0000.0000] # TAG EQUALS SIGN
E003E ; [.0000.0000.0000] # TAG GREATER-THAN SIGN
E003F ; [.0000.0000.0000] # TAG QUESTION MARK
E0040 ; [.0000.0000.0000] # TAG COMMERCIAL AT
E0041 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER A
E0042 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER B
E0043 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER C
E0044 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER D
E0045 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER E
E0046 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER F
E0047 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER G
E0048 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER H
E0049 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER I
E004A ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER J
E004B ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER K
E004C ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER L
E004D ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER M
E004E ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER N
E004F ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER O
E0050 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER P
E0051 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Q
E0052 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER R
E0053 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER S
E0054 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER T
E0055 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER U
E0056 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER V
E0057 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER W
E0058 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER X
E0059 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Y
E005A ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Z
E005B ; [.0000.0000.0000] # TAG LEFT SQUARE BRACKET
E005C ; [.0000.0000.0000] # TAG REVERSE SOLIDUS
E005D ; [.0000.0000.0000] # TAG RIGHT SQUARE BRACKET
E005E ; [.0000.0000.0000] # TAG CIRCUMFLEX ACCENT
E005F ; [.0000.0000.0000] # TAG LOW LINE
E0060 ; [.0000.0000.0000] # TAG GRAVE ACCENT
E0061 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER A
E0062 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER B
E0063 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER C
E0064 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER D
E0065 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER E
E0066 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER F
E0067 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER G
E0068 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER H
E0069 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER I
E006A ; [.0000.0000.0000] # TAG LATIN SMALL LETTER J
E006B ; [.0000.0000.0000] # TAG LATIN SMALL LETTER K
E006C ; [.0000.0000.0000] # TAG LATIN SMALL LETTER L
E006D ; [.0000.0000.0000] # TAG LATIN SMALL LETTER M
E006E ; [.0000.0000.0000] # TAG LATIN SMALL LETTER N
E006F ; [.0000.0000.0000] # TAG LATIN SMALL LETTER O
E0070 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER P
E0071 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Q
E0072 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER R
E0073 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER S
E0074 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER T
E0075 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER U
E0076 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER V
E0077 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER W
E0078 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER X
E0079 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Y
E007A ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Z
E007B ; [.0000.0000.0000] # TAG LEFT CURLY BRACKET
E007C ; [.0000.0000.0000] # TAG VERTICAL LINE
E007D ; [.0000.0000.0000] # TAG RIGHT CURLY BRACKET
E007E ; [.0000.0000.0000] # TAG TILDE
E007F ; [.0000.0000.0000] # CANCEL TAG
E0100 ; [.0000.0000.0000] # VARIATION SELECTOR-17
E0101 ; [.0000.0000.0000] # VARIATION SELECTOR-18
E0102 ; [.0000.0000.0000] # VARIATION SELECTOR-19
E0103 ; [.0000.0000.0000] # VARIATION SELECTOR-20
E0104 ; [.0000.0000.0000] # VARIATION SELECTOR-21
E0105 ; [.0000.0000.0000] # VARIATION SELECTOR-22
E0106 ; [.0000.0000.0000] # VARIATION SELECTOR-23
E0107 ; [.0000.0000.0000] # VARIATION SELECTOR-24
E0108 ; [.0000.0000.0000] # VARIATION SELECTOR-25
E0109 ; [.0000.0000.0000] # VARIATION SELECTOR-26
E010A ; [.0000.0000.0000] # VARIATION SELECTOR-27
E010B ; [.0000.0000.0000] # VARIATION SELECTOR-28
E010C ; [.0000.0000.0000] # VARIATION SELECTOR-29
E010D ; [.0000.0000.0000] # VARIATION SELECTOR-30
E010E ; [.0000.0000.0000] # VARIATION SELECTOR-31
E010F ; [.0000.0000.0000] # VARIATION SELECTOR-32
E0110 ; [.0000.0000.0000] # VARIATION SELECTOR-33
E0111 ; [.0000.0000.0000] # VARIATION SELECTOR-34
E0112 ; [.0000.0000.0000] # VARIATION SELECTOR-35
E0113 ; [.0000.0000.0000] # VARIATION SELECTOR-36
E0114 ; [.0000.0000.0000] # VARIATION SELECTOR-37
E0115 ; [.0000.0000.0000] # VARIATION SELECTOR-38
E0116 ; [.0000.0000.0000] # VARIATION SELECTOR-39
E0117 ; [.0000.0000.0000] # VARIATION SELECTOR-40
E0118 ; [.0000.0000.0000] # VARIATION SELECTOR-41
E0119 ; [.0000.0000.0000] # VARIATION SELECTOR-42
E011A ; [.0000.0000.0000] # VARIATION SELECTOR-43
E011B ; [.0000.0000.0000] # VARIATION SELECTOR-44
E011C ; [.0000.0000.0000] # VARIATION SELECTOR-45
E011D ; [.0000.0000.0000] # VARIATION SELECTOR-46
E011E ; [.0000.0000.0000] # VARIATION SELECTOR-47
E011F ; [.0000.0000.0000] # VARIATION SELECTOR-48
E0120 ; [.0000.0000.0000] # VARIATION SELECTOR-49
E0121 ; [.0000.0000.0000] # VARIATION SELECTOR-50
E0122 ; [.0000.0000.0000] # VARIATION SELECTOR-51
E0123 ; [.0000.0000.0000] # VARIATION SELECTOR-52
E0124 ; [.0000.0000.0000] # VARIATION SELECTOR-53
E0125 ; [.0000.0000.0000] # VARIATION SELECTOR-54
E0126 ; [.0000.0000.0000] # VARIATION SELECTOR-55
E0127 ; [.0000.0000.0000] # VARIATION SELECTOR-56
E0128 ; [.0000.0000.0000] # VARIATION SELECTOR-57
E0129 ; [.0000.0000.0000] # VARIATION SELECTOR-58
E012A ; [.0000.0000.0000] # VARIATION SELECTOR-59
E012B ; [.0000.0000.0000] # VARIATION SELECTOR-60
E012C ; [.0000.0000.0000] # VARIATION SELECTOR-61
E012D ; [.0000.0000.0000] # VARIATION SELECTOR-62
E012E ; [.0000.0000.0000] # VARIATION SELECTOR-63
E012F ; [.0000.0000.0000] # VARIATION SELECTOR-64
E0130 ; [.0000.0000.0000] # VARIATION SELECTOR-65
E0131 ; [.0000.0000.0000] # VARIATION SELECTOR-66
E0132 ; [.0000.0000.0000] # VARIATION SELECTOR-67
E0133 ; [.0000.0000.0000] # VARIATION SELECTOR-68
E0134 ; [.0000.0000.0000] # VARIATION SELECTOR-69
E0135 ; [.0000.0000.0000] # VARIATION SELECTOR-70
E0136 ; [.0000.0000.0000] # VARIATION SELECTOR-71
E0137 ; [.0000.0000.0000] # VARIATION SELECTOR-72
E0138 ; [.0000.0000.0000] # VARIATION SELECTOR-73
E0139 ; [.0000.0000.0000] # VARIATION SELECTOR-74
E013A ; [.0000.0000.0000] # VARIATION SELECTOR-75
E013B ; [.0000.0000.0000] # VARIATION SELECTOR-76
E013C ; [.0000.0000.0000] # VARIATION SELECTOR-77
E013D ; [.0000.0000.0000] # VARIATION SELECTOR-78
E013E ; [.0000.0000.0000] # VARIATION SELECTOR-79
E013F ; [.0000.0000.0000] # VARIATION SELECTOR-80
E0140 ; [.0000.0000.0000] # VARIATION SELECTOR-81
E0141 ; [.0000.0000.0000] # VARIATION SELECTOR-82
E0142 ; [.0000.0000.0000] # VARIATION SELECTOR-83
E0143 ; [.0000.0000.0000] # VARIATION SELECTOR-84
E0144 ; [.0000.0000.0000] # VARIATION SELECTOR-85
E0145 ; [.0000.0000.0000] # VARIATION SELECTOR-86
E0146 ; [.0000.0000.0000] # VARIATION SELECTOR-87
E0147 ; [.0000.0000.0000] # VARIATION SELECTOR-88
E0148 ; [.0000.0000.0000] # VARIATION SELECTOR-89
E0149 ; [.0000.0000.0000] # VARIATION SELECTOR-90
E014A ; [.0000.0000.0000] # VARIATION SELECTOR-91
E014B ; [.0000.0000.0000] # VARIATION SELECTOR-92
E014C ; [.0000.0000.0000] # VARIATION SELECTOR-93
E014D ; [.0000.0000.0000] # VARIATION SELECTOR-94
E014E ; [.0000.0000.0000] # VARIATION SELECTOR-95
E014F ; [.0000.0000.0000] # VARIATION SELECTOR-96
E0150 ; [.0000.0000.0000] # VARIATION SELECTOR-97
E0151 ; [.0000.0000.0000] # VARIATION SELECTOR-98
E0152 ; [.0000.0000.0000] # VARIATION SELECTOR-99
E0153 ; [.0000.0000.0000] # VARIATION SELECTOR-100
E0154 ; [.0000.0000.0000] # VARIATION SELECTOR-101
E0155 ; [.0000.0000.0000] # VARIATION SELECTOR-102
E0156 ; [.0000.0000.0000] # VARIATION SELECTOR-103
E0157 ; [.0000.0000.0000] # VARIATION SELECTOR-104
E0158 ; [.0000.0000.0000] # VARIATION SELECTOR-105
E0159 ; [.0000.0000.0000] # VARIATION SELECTOR-106
E015A ; [.0000.0000.0000] # VARIATION SELECTOR-107
E015B ; [.0000.0000.0000] # VARIATION SELECTOR-108
E015C ; [.0000.0000.0000] # VARIATION SELECTOR-109
E015D ; [.0000.0000.0000] # VARIATION SELECTOR-110
E015E ; [.0000.0000.0000] # VARIATION SELECTOR-111
E015F ; [.0000.0000.0000] # VARIATION SELECTOR-112
E0160 ; [.0000.0000.0000] # VARIATION SELECTOR-113
E0161 ; [.0000.0000.0000] # VARIATION SELECTOR-114
E0162 ; [.0000.0000.0000] # VARIATION SELECTOR-115
E0163 ; [.0000.0000.0000] # VARIATION SELECTOR-116
E0164 ; [.0000.0000.0000] # VARIATION SELECTOR-117
E0165 ; [.0000.0000.0000] # VARIATION SELECTOR-118
E0166 ; [.0000.0000.0000] # VARIATION SELECTOR-119
E0167 ; [.0000.0000.0000] # VARIATION SELECTOR-120
E0168 ; [.0000.0000.0000] # VARIATION SELECTOR-121
E0169 ; [.0000.0000.0000] # VARIATION SELECTOR-122
E016A ; [.0000.0000.0000] # VARIATION SELECTOR-123
E016B ; [.0000.0000.0000] # VARIATION SELECTOR-124
E016C ; [.0000.0000.0000] # VARIATION SELECTOR-125
E016D ; [.0000.0000.0000] # VARIATION SELECTOR-126
E016E ; [.0000.0000.0000] # VARIATION SELECTOR-127
E016F ; [.0000.0000.0000] # VARIATION SELECTOR-128
E0170 ; [.0000.0000.0000] # VARIATION SELECTOR-129
E0171 ; [.0000.0000.0000] # VARIATION SELECTOR-130
E0172 ; [.0000.0000.0000] # VARIATION SELECTOR-131
E0173 ; [.0000.0000.0000] # VARIATION SELECTOR-132
E0174 ; [.0000.0000.0000] # VARIATION SELECTOR-133
E0175 ; [.0000.0000.0000] # VARIATION SELECTOR-134
E0176 ; [.0000.0000.0000] # VARIATION SELECTOR-135
E0177 ; [.0000.0000.0000] # VARIATION SELECTOR-136
E0178 ; [.0000.0000.0000] # VARIATION SELECTOR-137
E0179 ; [.0000.0000.0000] # VARIATION SELECTOR-138
E017A ; [.0000.0000.0000] # VARIATION SELECTOR-139
E017B ; [.0000.0000.0000] # VARIATION SELECTOR-140
E017C ; [.0000.0000.0000] # VARIATION SELECTOR-141
E017D ; [.0000.0000.0000] # VARIATION SELECTOR-142
E017E ; [.0000.0000.0000] # VARIATION SELECTOR-143
E017F ; [.0000.0000.0000] # VARIATION SELECTOR-144
E0180 ; [.0000.0000.0000] # VARIATION SELECTOR-145
E0181 ; [.0000.0000.0000] # VARIATION SELECTOR-146
E0182 ; [.0000.0000.0000] # VARIATION SELECTOR-147
E0183 ; [.0000.0000.0000] # VARIATION SELECTOR-148
E0184 ; [.0000.0000.0000] # VARIATION SELECTOR-149
E0185 ; [.0000.0000.0000] # VARIATION SELECTOR-150
E0186 ; [.0000.0000.0000] # VARIATION SELECTOR-151
E0187 ; [.0000.0000.0000] # VARIATION SELECTOR-152
E0188 ; [.0000.0000.0000] # VARIATION SELECTOR-153
E0189 ; [.0000.0000.0000] # VARIATION SELECTOR-154
E018A ; [.0000.0000.0000] # VARIATION SELECTOR-155
E018B ; [.0000.0000.0000] # VARIATION SELECTOR-156
E018C ; [.0000.0000.0000] # VARIATION SELECTOR-157
E018D ; [.0000.0000.0000] # VARIATION SELECTOR-158
E018E ; [.0000.0000.0000] # VARIATION SELECTOR-159
E018F ; [.0000.0000.0000] # VARIATION SELECTOR-160
E0190 ; [.0000.0000.0000] # VARIATION SELECTOR-161
E0191 ; [.0000.0000.0000] # VARIATION SELECTOR-162
E0192 ; [.0000.0000.0000] # VARIATION SELECTOR-163
E0193 ; [.0000.0000.0000] # VARIATION SELECTOR-164
E0194 ; [.0000.0000.0000] # VARIATION SELECTOR-165
E0195 ; [.0000.0000.0000] # VARIATION SELECTOR-166
E0196 ; [.0000.0000.0000] # VARIATION SELECTOR-167
E0197 ; [.0000.0000.0000] # VARIATION SELECTOR-168
E0198 ; [.0000.0000.0000] # VARIATION SELECTOR-169
E0199 ; [.0000.0000.0000] # VARIATION SELECTOR-170
E019A ; [.0000.0000.0000] # VARIATION SELECTOR-171
E019B ; [.0000.0000.0000] # VARIATION SELECTOR-172
E019C ; [.0000.0000.0000] # VARIATION SELECTOR-173
E019D ; [.0000.0000.0000] # VARIATION SELECTOR-174
E019E ; [.0000.0000.0000] # VARIATION SELECTOR-175
E019F ; [.0000.0000.0000] # VARIATION SELECTOR-176
E01A0 ; [.0000.0000.0000] # VARIATION SELECTOR-177
E01A1 ; [.0000.0000.0000] # VARIATION SELECTOR-178
E01A2 ; [.0000.0000.0000] # VARIATION SELECTOR-179
E01A3 ; [.0000.0000.0000] # VARIATION SELECTOR-180
E01A4 ; [.0000.0000.0000] # VARIATION SELECTOR-181
E01A5 ; [.0000.0000.0000] # VARIATION SELECTOR-182
E01A6 ; [.0000.0000.0000] # VARIATION SELECTOR-183
E01A7 ; [.0000.0000.0000] # VARIATION SELECTOR-184
E01A8 ; [.0000.0000.0000] # VARIATION SELECTOR-185
E01A9 ; [.0000.0000.0000] # VARIATION SELECTOR-186
E01AA ; [.0000.0000.0000] # VARIATION SELECTOR-187
E01AB ; [.0000.0000.0000] # VARIATION SELECTOR-188
E01AC ; [.0000.0000.0000] # VARIATION SELECTOR-189
E01AD ; [.0000.0000.0000] # VARIATION SELECTOR-190
E01AE ; [.0000.0000.0000] # VARIATION SELECTOR-191
E01AF ; [.0000.0000.0000] # VARIATION SELECTOR-192
E01B0 ; [.0000.0000.0000] # VARIATION SELECTOR-193
E01B1 ; [.0000.0000.0000] # VARIATION SELECTOR-194
E01B2 ; [.0000.0000.0000] # VARIATION SELECTOR-195
E01B3 ; [.0000.0000.0000] # VARIATION SELECTOR-196
E01B4 ; [.0000.0000.0000] # VARIATION SELECTOR-197
E01B5 ; [.0000.0000.0000] # VARIATION SELECTOR-198
E01B6 ; [.0000.0000.0000] # VARIATION SELECTOR-199
E01B7 ; [.0000.0000.0000] # VARIATION SELECTOR-200
E01B8 ; [.0000.0000.0000] # VARIATION SELECTOR-201
E01B9 ; [.0000.0000.0000] # VARIATION SELECTOR-202
E01BA ; [.0000.0000.0000] # VARIATION SELECTOR-203
E01BB ; [.0000.0000.0000] # VARIATION SELECTOR-204
E01BC ; [.0000.0000.0000] # VARIATION SELECTOR-205
E01BD ; [.0000.0000.0000] # VARIATION SELECTOR-206
E01BE ; [.0000.0000.0000] # VARIATION SELECTOR-207
E01BF ; [.0000.0000.0000] # VARIATION SELECTOR-208
E01C0 ; [.0000.0000.0000] # VARIATION SELECTOR-209
E01C1 ; [.0000.0000.0000] # VARIATION SELECTOR-210
E01C2 ; [.0000.0000.0000] # VARIATION SELECTOR-211
E01C3 ; [.0000.0000.0000] # VARIATION SELECTOR-212
E01C4 ; [.0000.0000.0000] # VARIATION SELECTOR-213
E01C5 ; [.0000.0000.0000] # VARIATION SELECTOR-214
E01C6 ; [.0000.0000.0000] # VARIATION SELECTOR-215
E01C7 ; [.0000.0000.0000] # VARIATION SELECTOR-216
E01C8 ; [.0000.0000.0000] # VARIATION SELECTOR-217
E01C9 ; [.0000.0000.0000] # VARIATION SELECTOR-218
E01CA ; [.0000.0000.0000] # VARIATION SELECTOR-219
E01CB ; [.0000.0000.0000] # VARIATION SELECTOR-220
E01CC ; [.0000.0000.0000] # VARIATION SELECTOR-221
E01CD ; [.0000.0000.0000] # VARIATION SELECTOR-222
E01CE ; [.0000.0000.0000] # VARIATION SELECTOR-223
E01CF ; [.0000.0000.0000] # VARIATION SELECTOR-224
E01D0 ; [.0000.0000.0000] # VARIATION SELECTOR-225
E01D1 ; [.0000.0000.0000] # VARIATION SELECTOR-226
E01D2 ; [.0000.0000.0000] # VARIATION SELECTOR-227
E01D3 ; [.0000.0000.0000] # VARIATION SELECTOR-228
E01D4 ; [.0000.0000.0000] # VARIATION SELECTOR-229
E01D5 ; [.0000.0000.0000] # VARIATION SELECTOR-230
E01D6 ; [.0000.0000.0000] # VARIATION SELECTOR-231
E01D7 ; [.0000.0000.0000] # VARIATION SELECTOR-232
E01D8 ; [.0000.0000.0000] # VARIATION SELECTOR-233
E01D9 ; [.0000.0000.0000] # VARIATION SELECTOR-234
E01DA ; [.0000.0000.0000] # VARIATION SELECTOR-235
E01DB ; [.0000.0000.0000] # VARIATION SELECTOR-236
E01DC ; [.0000.0000.0000] # VARIATION SELECTOR-237
E01DD ; [.0000.0000.0000] # VARIATION SELECTOR-238
E01DE ; [.0000.0000.0000] # VARIATION SELECTOR-239
E01DF ; [.0000.0000.0000] # VARIATION SELECTOR-240
E01E0 ; [.0000.0000.0000] # VARIATION SELECTOR-241
E01E1 ; [.0000.0000.0000] # VARIATION SELECTOR-242
E01E2 ; [.0000.0000.0000] # VARIATION SELECTOR-243
E01E3 ; [.0000.0000.0000] # VARIATION SELECTOR-244
E01E4 ; [.0000.0000.0000] # VARIATION SELECTOR-245
E01E5 ; [.0000.0000.0000] # VARIATION SELECTOR-246
E01E6 ; [.0000.0000.0000] # VARIATION SELECTOR-247
E01E7 ; [.0000.0000.0000] # VARIATION SELECTOR-248
E01E8 ; [.0000.0000.0000] # VARIATION SELECTOR-249
E01E9 ; [.0000.0000.0000] # VARIATION SELECTOR-250
E01EA ; [.0000.0000.0000] # VARIATION SELECTOR-251
E01EB ; [.0000.0000.0000] # VARIATION SELECTOR-252
E01EC ; [.0000.0000.0000] # VARIATION SELECTOR-253
E01ED ; [.0000.0000.0000] # VARIATION SELECTOR-254
E01EE ; [.0000.0000.0000] # VARIATION SELECTOR-255
E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256
0009 ; [*0201.0020.0002] # HORIZONTAL TABULATION (in ISO 6429)
000A ; [*0202.0020.0002] # LINE FEED (in ISO 6429)
000B ; [*0203.0020.0002] # VERTICAL TABULATION (in ISO 6429)
000C ; [*0204.0020.0002] # FORM FEED (in ISO 6429)
000D ; [*0205.0020.0002] # CARRIAGE RETURN (in ISO 6429)
0020 ; [*0209.0020.0002] # SPACE
0021 ; [*0260.0020.0002] # EXCLAMATION MARK
0022 ; [*030C.0020.0002] # QUOTATION MARK
0023 ; [*0398.0020.0002] # NUMBER SIGN
0025 ; [*0399.0020.0002] # PERCENT SIGN
0026 ; [*0396.0020.0002] # AMPERSAND
0027 ; [*0305.0020.0002] # APOSTROPHE
0028 ; [*0317.0020.0002] # LEFT PARENTHESIS
0029 ; [*0318.0020.0002] # RIGHT PARENTHESIS
002A ; [*038F.0020.0002] # ASTERISK
002B ; [*0616.0020.0002] # PLUS SIGN
002C ; [*0222.0020.0002] # COMMA
002D ; [*020D.0020.0002] # HYPHEN-MINUS
002E ; [*0277.0020.0002] # FULL STOP
002F ; [*0394.0020.0002] # SOLIDUS
003A ; [*0239.0020.0002] # COLON
003B ; [*0234.0020.0002] # SEMICOLON
003C ; [*061A.0020.0002] # LESS-THAN SIGN
003D ; [*061B.0020.0002] # EQUALS SIGN
003E ; [*061C.0020.0002] # GREATER-THAN SIGN
003F ; [*0266.0020.0002] # QUESTION MARK
0040 ; [*038E.0020.0002] # COMMERCIAL AT
005B ; [*0319.0020.0002] # LEFT SQUARE BRACKET
005C ; [*0395.0020.0002] # REVERSE SOLIDUS
005D ; [*031A.0020.0002] # RIGHT SQUARE BRACKET
005E ; [*0485.0020.0002] # CIRCUMFLEX ACCENT
005F ; [*020B.0020.0002] # LOW LINE
0060 ; [*0482.0020.0002] # GRAVE ACCENT
007B ; [*031B.0020.0002] # LEFT CURLY BRACKET
007C ; [*061E.0020.0002] # VERTICAL LINE
007D ; [*031C.0020.0002] # RIGHT CURLY BRACKET
007E ; [*0620.0020.0002] # TILDE
0085 ; [*0206.0020.0002] # NEXT LINE (in ISO 6429)
00A0 ; [*0209.0020.001B] # NO-BREAK SPACE
00A1 ; [*0261.0020.0002] # INVERTED EXCLAMATION MARK
00A6 ; [*061F.0020.0002] # BROKEN BAR
00A7 ; [*0389.0020.0002] # SECTION SIGN
00A8 ; [*0489.0020.0002] # DIAERESIS
00A9 ; [*0584.0020.0002] # COPYRIGHT SIGN
00AB ; [*0315.0020.0002] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
00AC ; [*061D.0020.0002] # NOT SIGN
00AE ; [*0585.0020.0002] # REGISTERED SIGN
00AF ; [*0486.0020.0002] # MACRON
00B0 ; [*04F6.0020.0002] # DEGREE SIGN
00B1 ; [*0617.0020.0002] # PLUS-MINUS SIGN
00B4 ; [*0483.0020.0002] # ACUTE ACCENT
00B6 ; [*038B.0020.0002] # PILCROW SIGN
00B7 ; [*028B.0020.0002] # MIDDLE DOT
00B8 ; [*048C.0020.0002] # CEDILLA
00BB ; [*0316.0020.0002] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
00BF ; [*0267.0020.0002] # INVERTED QUESTION MARK
00D7 ; [*0619.0020.0002] # MULTIPLICATION SIGN
00F7 ; [*0618.0020.0002] # DIVISION SIGN
02B9 ; [*0493.0020.0002] # MODIFIER LETTER PRIME
02BA ; [*0495.0020.0002] # MODIFIER LETTER DOUBLE PRIME
02C2 ; [*0496.0020.0002] # MODIFIER LETTER LEFT ARROWHEAD
02C3 ; [*0497.0020.0002] # MODIFIER LETTER RIGHT ARROWHEAD
02C4 ; [*0498.0020.0002] # MODIFIER LETTER UP ARROWHEAD
02C5 ; [*0499.0020.0002] # MODIFIER LETTER DOWN ARROWHEAD
02C6 ; [*049A.0020.0002] # MODIFIER LETTER CIRCUMFLEX ACCENT
02C7 ; [*049B.0020.0002] # CARON
02C8 ; [*049C.0020.0002] # MODIFIER LETTER VERTICAL LINE
02C9 ; [*049D.0020.0002] # MODIFIER LETTER MACRON
02CA ; [*049E.0020.0002] # MODIFIER LETTER ACUTE ACCENT
02CB ; [*049F.0020.0002] # MODIFIER LETTER GRAVE ACCENT
02CC ; [*04A0.0020.0002] # MODIFIER LETTER LOW VERTICAL LINE
02CD ; [*04A1.0020.0002] # MODIFIER LETTER LOW MACRON
02CE ; [*04A2.0020.0002] # MODIFIER LETTER LOW GRAVE ACCENT
02CF ; [*04A3.0020.0002] # MODIFIER LETTER LOW ACUTE ACCENT
02D2 ; [*04A4.0020.0002] # MODIFIER LETTER CENTRED RIGHT HALF RING
02D3 ; [*04A5.0020.0002] # MODIFIER LETTER CENTRED LEFT HALF RING
02D4 ; [*04A6.0020.0002] # MODIFIER LETTER UP TACK
02D5 ; [*04A7.0020.0002] # MODIFIER LETTER DOWN TACK
02D6 ; [*04A8.0020.0002] # MODIFIER LETTER PLUS SIGN
02D7 ; [*04A9.0020.0002] # MODIFIER LETTER MINUS SIGN
02D8 ; [*0487.0020.0002] # BREVE
02D9 ; [*0488.0020.0002] # DOT ABOVE
02DA ; [*048A.0020.0002] # RING ABOVE
02DB ; [*048D.0020.0002] # OGONEK
02DC ; [*0484.0020.0002] # SMALL TILDE
02DD ; [*048B.0020.0002] # DOUBLE ACUTE ACCENT
02DE ; [*04AA.0020.0002] # MODIFIER LETTER RHOTIC HOOK
02DF ; [*04AB.0020.0002] # MODIFIER LETTER CROSS ACCENT
02E5 ; [*04AC.0020.0002] # MODIFIER LETTER EXTRA-HIGH TONE BAR
02E6 ; [*04AD.0020.0002] # MODIFIER LETTER HIGH TONE BAR
02E7 ; [*04AE.0020.0002] # MODIFIER LETTER MID TONE BAR
02E8 ; [*04AF.0020.0002] # MODIFIER LETTER LOW TONE BAR
02E9 ; [*04B0.0020.0002] # MODIFIER LETTER EXTRA-LOW TONE BAR
02EA ; [*04B1.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK
02EB ; [*04B2.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK
02EC ; [*04B3.0020.0002] # MODIFIER LETTER VOICING
02ED ; [*04B4.0020.0002] # MODIFIER LETTER UNASPIRATED
02EF ; [*04B5.0020.0002] # MODIFIER LETTER LOW DOWN ARROWHEAD
02F0 ; [*04B6.0020.0002] # MODIFIER LETTER LOW UP ARROWHEAD
02F1 ; [*04B7.0020.0002] # MODIFIER LETTER LOW LEFT ARROWHEAD
02F2 ; [*04B8.0020.0002] # MODIFIER LETTER LOW RIGHT ARROWHEAD
02F3 ; [*04B9.0020.0002] # MODIFIER LETTER LOW RING
02F4 ; [*04BA.0020.0002] # MODIFIER LETTER MIDDLE GRAVE ACCENT
02F5 ; [*04BB.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
02F6 ; [*04BC.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
02F7 ; [*04BD.0020.0002] # MODIFIER LETTER LOW TILDE
02F8 ; [*04BE.0020.0002] # MODIFIER LETTER RAISED COLON
02F9 ; [*04BF.0020.0002] # MODIFIER LETTER BEGIN HIGH TONE
02FA ; [*04C0.0020.0002] # MODIFIER LETTER END HIGH TONE
02FB ; [*04C1.0020.0002] # MODIFIER LETTER BEGIN LOW TONE
02FC ; [*04C2.0020.0002] # MODIFIER LETTER END LOW TONE
02FD ; [*04C3.0020.0002] # MODIFIER LETTER SHELF
02FE ; [*04C4.0020.0002] # MODIFIER LETTER OPEN SHELF
02FF ; [*04C5.0020.0002] # MODIFIER LETTER LOW LEFT ARROW
034F ; [.0000.0000.0000] # COMBINING GRAPHEME JOINER
0374 ; [*0493.0020.0002] # GREEK NUMERAL SIGN
0375 ; [*0494.0020.0002] # GREEK LOWER NUMERAL SIGN
037E ; [*0234.0020.0002] # GREEK QUESTION MARK
0384 ; [*0483.0020.0002] # GREEK TONOS
0385 ; [*0489.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA TONOS
0387 ; [*028B.0020.0002] # GREEK ANO TELEIA
03F6 ; [*0611.0020.0002] # GREEK REVERSED LUNATE EPSILON SYMBOL
0482 ; [*04F7.0020.0002] # CYRILLIC THOUSANDS SIGN
0488 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
0489 ; [.0000.0000.0000] # COMBINING CYRILLIC MILLIONS SIGN
055A ; [*03CB.0020.0002] # ARMENIAN APOSTROPHE
055B ; [*03CC.0020.0002] # ARMENIAN EMPHASIS MARK
055C ; [*0262.0020.0002] # ARMENIAN EXCLAMATION MARK
055D ; [*0226.0020.0002] # ARMENIAN COMMA
055E ; [*0269.0020.0002] # ARMENIAN QUESTION MARK
055F ; [*03CD.0020.0002] # ARMENIAN ABBREVIATION MARK
0589 ; [*023A.0020.0002] # ARMENIAN FULL STOP
058A ; [*020E.0020.0002] # ARMENIAN HYPHEN
058D ; [*04F8.0020.0002] # RIGHT-FACING ARMENIAN ETERNITY SIGN
058E ; [*04F9.0020.0002] # LEFT-FACING ARMENIAN ETERNITY SIGN
0591 ; [.0000.0000.0000] # HEBREW ACCENT ETNAHTA
0592 ; [.0000.0000.0000] # HEBREW ACCENT SEGOL
0593 ; [.0000.0000.0000] # HEBREW ACCENT SHALSHELET
0594 ; [.0000.0000.0000] # HEBREW ACCENT ZAQEF QATAN
0595 ; [.0000.0000.0000] # HEBREW ACCENT ZAQEF GADOL
0596 ; [.0000.0000.0000] # HEBREW ACCENT TIPEHA
0597 ; [.0000.0000.0000] # HEBREW ACCENT REVIA
0598 ; [.0000.0000.0000] # HEBREW ACCENT ZARQA
0599 ; [.0000.0000.0000] # HEBREW ACCENT PASHTA
059A ; [.0000.0000.0000] # HEBREW ACCENT YETIV
059B ; [.0000.0000.0000] # HEBREW ACCENT TEVIR
059C ; [.0000.0000.0000] # HEBREW ACCENT GERESH
059D ; [.0000.0000.0000] # HEBREW ACCENT GERESH MUQDAM
059E ; [.0000.0000.0000] # HEBREW ACCENT GERSHAYIM
059F ; [.0000.0000.0000] # HEBREW ACCENT QARNEY PARA
05A0 ; [.0000.0000.0000] # HEBREW ACCENT TELISHA GEDOLA
05A1 ; [.0000.0000.0000] # HEBREW ACCENT PAZER
05A2 ; [.0000.0000.0000] # HEBREW ACCENT ATNAH HAFUKH
05A3 ; [.0000.0000.0000] # HEBREW ACCENT MUNAH
05A4 ; [.0000.0000.0000] # HEBREW ACCENT MAHAPAKH
05A5 ; [.0000.0000.0000] # HEBREW ACCENT MERKHA
05A6 ; [.0000.0000.0000] # HEBREW ACCENT MERKHA KEFULA
05A7 ; [.0000.0000.0000] # HEBREW ACCENT DARGA
05A8 ; [.0000.0000.0000] # HEBREW ACCENT QADMA
05A9 ; [.0000.0000.0000] # HEBREW ACCENT TELISHA QETANA
05AA ; [.0000.0000.0000] # HEBREW ACCENT YERAH BEN YOMO
05AB ; [.0000.0000.0000] # HEBREW ACCENT OLE
05AC ; [.0000.0000.0000] # HEBREW ACCENT ILUY
05AD ; [.0000.0000.0000] # HEBREW ACCENT DEHI
05AE ; [.0000.0000.0000] # HEBREW ACCENT ZINOR
05AF ; [.0000.0000.0000] # HEBREW MARK MASORA CIRCLE
05BD ; [.0000.0000.0000] # HEBREW POINT METEG
05BE ; [*03CE.0020.0002] # HEBREW PUNCTUATION MAQAF
05C0 ; [*03CF.0020.0002] # HEBREW PUNCTUATION PASEQ
05C3 ; [*03D0.0020.0002] # HEBREW PUNCTUATION SOF PASUQ
05C4 ; [.0000.0000.0000] # HEBREW MARK UPPER DOT
05C5 ; [.0000.0000.0000] # HEBREW MARK LOWER DOT
05C6 ; [*03D1.0020.0002] # HEBREW PUNCTUATION NUN HAFUKHA
05F3 ; [*03D2.0020.0002] # HEBREW PUNCTUATION GERESH
05F4 ; [*03D3.0020.0002] # HEBREW PUNCTUATION GERSHAYIM
0600 ; [.0000.0000.0000] # ARABIC NUMBER SIGN
0601 ; [.0000.0000.0000] # ARABIC SIGN SANAH
0602 ; [.0000.0000.0000] # ARABIC FOOTNOTE MARKER
0603 ; [.0000.0000.0000] # ARABIC SIGN SAFHA
0604 ; [.0000.0000.0000] # ARABIC SIGN SAMVAT
0605 ; [.0000.0000.0000] # ARABIC NUMBER MARK ABOVE
0606 ; [*062D.0020.0002] # ARABIC-INDIC CUBE ROOT
0607 ; [*062F.0020.0002] # ARABIC-INDIC FOURTH ROOT
0608 ; [*04FA.0020.0002] # ARABIC RAY
0609 ; [*039C.0020.0002] # ARABIC-INDIC PER MILLE SIGN
060A ; [*039E.0020.0002] # ARABIC-INDIC PER TEN THOUSAND SIGN
060C ; [*0227.0020.0002] # ARABIC COMMA
060D ; [*0228.0020.0002] # ARABIC DATE SEPARATOR
060E ; [*04FD.0020.0002] # ARABIC POETIC VERSE SIGN
060F ; [*04FE.0020.0002] # ARABIC SIGN MISRA
0610 ; [.0000.0000.0000] # ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
0611 ; [.0000.0000.0000] # ARABIC SIGN ALAYHE ASSALLAM
0612 ; [.0000.0000.0000] # ARABIC SIGN RAHMATULLAH ALAYHE
0613 ; [.0000.0000.0000] # ARABIC SIGN RADI ALLAHOU ANHU
0614 ; [.0000.0000.0000] # ARABIC SIGN TAKHALLUS
0615 ; [.0000.0000.0000] # ARABIC SMALL HIGH TAH
0616 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH
0617 ; [.0000.0000.0000] # ARABIC SMALL HIGH ZAIN
0618 ; [.0000.0000.0000] # ARABIC SMALL FATHA
0619 ; [.0000.0000.0000] # ARABIC SMALL DAMMA
061A ; [.0000.0000.0000] # ARABIC SMALL KASRA
061B ; [*0235.0020.0002] # ARABIC SEMICOLON
061E ; [*023B.0020.0002] # ARABIC TRIPLE DOT PUNCTUATION MARK
061F ; [*026A.0020.0002] # ARABIC QUESTION MARK
0640 ; [.0000.0000.0000] # ARABIC TATWEEL
066A ; [*039A.0020.0002] # ARABIC PERCENT SIGN
066B ; [*0229.0020.0002] # ARABIC DECIMAL SEPARATOR
066C ; [*022A.0020.0002] # ARABIC THOUSANDS SEPARATOR
066D ; [*0392.0020.0002] # ARABIC FIVE POINTED STAR
06D4 ; [*0279.0020.0002] # ARABIC FULL STOP
06D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
06D7 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
06D8 ; [.0000.0000.0000] # ARABIC SMALL HIGH MEEM INITIAL FORM
06D9 ; [.0000.0000.0000] # ARABIC SMALL HIGH LAM ALEF
06DA ; [.0000.0000.0000] # ARABIC SMALL HIGH JEEM
06DB ; [.0000.0000.0000] # ARABIC SMALL HIGH THREE DOTS
06DC ; [.0000.0000.0000] # ARABIC SMALL HIGH SEEN
06DD ; [.0000.0000.0000] # ARABIC END OF AYAH
06DE ; [*04FF.0020.0002] # ARABIC START OF RUB EL HIZB
06DF ; [.0000.0000.0000] # ARABIC SMALL HIGH ROUNDED ZERO
06E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
06E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
06E2 ; [.0000.0000.0000] # ARABIC SMALL HIGH MEEM ISOLATED FORM
06E3 ; [.0000.0000.0000] # ARABIC SMALL LOW SEEN
06E4 ; [.0000.0000.0000] # ARABIC SMALL HIGH MADDA
06E7 ; [.0000.0000.0000] # ARABIC SMALL HIGH YEH
06E8 ; [.0000.0000.0000] # ARABIC SMALL HIGH NOON
06E9 ; [*0500.0020.0002] # ARABIC PLACE OF SAJDAH
06EA ; [.0000.0000.0000] # ARABIC EMPTY CENTRE LOW STOP
06EB ; [.0000.0000.0000] # ARABIC EMPTY CENTRE HIGH STOP
06EC ; [.0000.0000.0000] # ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
06ED ; [.0000.0000.0000] # ARABIC SMALL LOW MEEM
0700 ; [*02C4.0020.0002] # SYRIAC END OF PARAGRAPH
0701 ; [*027A.0020.0002] # SYRIAC SUPRALINEAR FULL STOP
0702 ; [*027B.0020.0002] # SYRIAC SUBLINEAR FULL STOP
0703 ; [*023C.0020.0002] # SYRIAC SUPRALINEAR COLON
0704 ; [*023D.0020.0002] # SYRIAC SUBLINEAR COLON
0705 ; [*023E.0020.0002] # SYRIAC HORIZONTAL COLON
0706 ; [*023F.0020.0002] # SYRIAC COLON SKEWED LEFT
0707 ; [*0240.0020.0002] # SYRIAC COLON SKEWED RIGHT
0708 ; [*0241.0020.0002] # SYRIAC SUPRALINEAR COLON SKEWED LEFT
0709 ; [*026B.0020.0002] # SYRIAC SUBLINEAR COLON SKEWED RIGHT
070A ; [*03D4.0020.0002] # SYRIAC CONTRACTION
070B ; [*03D5.0020.0002] # SYRIAC HARKLEAN OBELUS
070C ; [*03D6.0020.0002] # SYRIAC HARKLEAN METOBELUS
070D ; [*03D7.0020.0002] # SYRIAC HARKLEAN ASTERISCUS
0740 ; [.0000.0000.0000] # SYRIAC FEMININE DOT
0743 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS ABOVE
0744 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS BELOW
0747 ; [.0000.0000.0000] # SYRIAC OBLIQUE LINE ABOVE
0748 ; [.0000.0000.0000] # SYRIAC OBLIQUE LINE BELOW
0749 ; [.0000.0000.0000] # SYRIAC MUSIC
074A ; [.0000.0000.0000] # SYRIAC BARREKH
07F6 ; [*0512.0020.0002] # NKO SYMBOL OO DENNEN
07F7 ; [*02C5.0020.0002] # NKO SYMBOL GBAKURUNEN
07F8 ; [*022B.0020.0002] # NKO COMMA
07F9 ; [*0263.0020.0002] # NKO EXCLAMATION MARK
07FA ; [.0000.0000.0000] # NKO LAJANYALAN
0830 ; [*0242.0020.0002] # SAMARITAN PUNCTUATION NEQUDAA
0831 ; [*0243.0020.0002] # SAMARITAN PUNCTUATION AFSAAQ
0832 ; [*0244.0020.0002] # SAMARITAN PUNCTUATION ANGED
0833 ; [*0245.0020.0002] # SAMARITAN PUNCTUATION BAU
0834 ; [*0246.0020.0002] # SAMARITAN PUNCTUATION ATMAAU
0835 ; [*0247.0020.0002] # SAMARITAN PUNCTUATION SHIYYAALAA
0836 ; [*0248.0020.0002] # SAMARITAN ABBREVIATION MARK
0837 ; [*0249.0020.0002] # SAMARITAN PUNCTUATION MELODIC QITSA
0838 ; [*024A.0020.0002] # SAMARITAN PUNCTUATION ZIQAA
0839 ; [*024B.0020.0002] # SAMARITAN PUNCTUATION QITSA
083A ; [*024C.0020.0002] # SAMARITAN PUNCTUATION ZAEF
083B ; [*024D.0020.0002] # SAMARITAN PUNCTUATION TURU
083C ; [*024E.0020.0002] # SAMARITAN PUNCTUATION ARKAANU
083D ; [*024F.0020.0002] # SAMARITAN PUNCTUATION SOF MASHFAAT
083E ; [*0250.0020.0002] # SAMARITAN PUNCTUATION ANNAAU
085E ; [*03D8.0020.0002] # MANDAIC PUNCTUATION
08D4 ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AR-RUB
08D5 ; [.0000.0000.0000] # ARABIC SMALL HIGH SAD
08D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH AIN
08D7 ; [.0000.0000.0000] # ARABIC SMALL HIGH QAF
08D8 ; [.0000.0000.0000] # ARABIC SMALL HIGH NOON WITH KASRA
08D9 ; [.0000.0000.0000] # ARABIC SMALL LOW NOON WITH KASRA
08DA ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD ATH-THALATHA
08DB ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AS-SAJDA
08DC ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AN-NISF
08DD ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD SAKTA
08DE ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD QIF
08DF ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD WAQFA
08E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH FOOTNOTE MARKER
08E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH SIGN SAFHA
08EA ; [.0000.0000.0000] # ARABIC TONE ONE DOT ABOVE
08EB ; [.0000.0000.0000] # ARABIC TONE TWO DOTS ABOVE
08EC ; [.0000.0000.0000] # ARABIC TONE LOOP ABOVE
08ED ; [.0000.0000.0000] # ARABIC TONE ONE DOT BELOW
08EE ; [.0000.0000.0000] # ARABIC TONE TWO DOTS BELOW
08EF ; [.0000.0000.0000] # ARABIC TONE LOOP BELOW
08F3 ; [.0000.0000.0000] # ARABIC SMALL HIGH WAW
0951 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN UDATTA
0952 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN ANUDATTA
0964 ; [*028E.0020.0002] # DEVANAGARI DANDA
0965 ; [*028F.0020.0002] # DEVANAGARI DOUBLE DANDA
0970 ; [*03E7.0020.0002] # DEVANAGARI ABBREVIATION SIGN
09F4 ; [*1A96.0020.0002] # BENGALI CURRENCY NUMERATOR ONE
09F5 ; [*1A97.0020.0002] # BENGALI CURRENCY NUMERATOR TWO
09F6 ; [*1A98.0020.0002] # BENGALI CURRENCY NUMERATOR THREE
09F7 ; [*1A99.0020.0002] # BENGALI CURRENCY NUMERATOR FOUR
09F8 ; [*1A9A.0020.0002] # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
09F9 ; [*1A9B.0020.0002] # BENGALI CURRENCY DENOMINATOR SIXTEEN
09FA ; [*0513.0020.0002] # BENGALI ISSHAR
0AF0 ; [*03EC.0020.0002] # GUJARATI ABBREVIATION SIGN
0B70 ; [*0514.0020.0002] # ORIYA ISSHAR
0B72 ; [*1A9C.0020.0002] # ORIYA FRACTION ONE QUARTER
0B73 ; [*1A9D.0020.0002] # ORIYA FRACTION ONE HALF
0B74 ; [*1A9E.0020.0002] # ORIYA FRACTION THREE QUARTERS
0B75 ; [*1A9F.0020.0002] # ORIYA FRACTION ONE SIXTEENTH
0B76 ; [*1AA0.0020.0002] # ORIYA FRACTION ONE EIGHTH
0B77 ; [*1AA1.0020.0002] # ORIYA FRACTION THREE SIXTEENTHS
0BF0 ; [*1AA8.0020.0002] # TAMIL NUMBER TEN
0BF1 ; [*1AA9.0020.0002] # TAMIL NUMBER ONE HUNDRED
0BF2 ; [*1AAA.0020.0002] # TAMIL NUMBER ONE THOUSAND
0BF3 ; [*0515.0020.0002] # TAMIL DAY SIGN
0BF4 ; [*0516.0020.0002] # TAMIL MONTH SIGN
0BF5 ; [*0517.0020.0002] # TAMIL YEAR SIGN
0BF6 ; [*0518.0020.0002] # TAMIL DEBIT SIGN
0BF7 ; [*0519.0020.0002] # TAMIL CREDIT SIGN
0BF8 ; [*051A.0020.0002] # TAMIL AS ABOVE SIGN
0BFA ; [*051B.0020.0002] # TAMIL NUMBER SIGN
0C7F ; [*051C.0020.0002] # TELUGU SIGN TUUMU
0D4F ; [*051D.0020.0002] # MALAYALAM SIGN PARA
0D58 ; [*1AAB.0020.0002] # MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH
0D59 ; [*1AAC.0020.0002] # MALAYALAM FRACTION ONE FORTIETH
0D5A ; [*1AAD.0020.0002] # MALAYALAM FRACTION THREE EIGHTIETHS
0D5B ; [*1AAE.0020.0002] # MALAYALAM FRACTION ONE TWENTIETH
0D5C ; [*1AAF.0020.0002] # MALAYALAM FRACTION ONE TENTH
0D5D ; [*1AB0.0020.0002] # MALAYALAM FRACTION THREE TWENTIETHS
0D5E ; [*1AB1.0020.0002] # MALAYALAM FRACTION ONE FIFTH
0D70 ; [*1AB2.0020.0002] # MALAYALAM NUMBER TEN
0D71 ; [*1AB3.0020.0002] # MALAYALAM NUMBER ONE HUNDRED
0D72 ; [*1AB4.0020.0002] # MALAYALAM NUMBER ONE THOUSAND
0D73 ; [*1AB5.0020.0002] # MALAYALAM FRACTION ONE QUARTER
0D74 ; [*1AB6.0020.0002] # MALAYALAM FRACTION ONE HALF
0D75 ; [*1AB7.0020.0002] # MALAYALAM FRACTION THREE QUARTERS
0D76 ; [*1AB8.0020.0002] # MALAYALAM FRACTION ONE SIXTEENTH
0D77 ; [*1AB9.0020.0002] # MALAYALAM FRACTION ONE EIGHTH
0D78 ; [*1ABA.0020.0002] # MALAYALAM FRACTION THREE SIXTEENTHS
0D79 ; [*051E.0020.0002] # MALAYALAM DATE MARK
0DF4 ; [*03ED.0020.0002] # SINHALA PUNCTUATION KUNDDALIYA
0E4F ; [*03EE.0020.0002] # THAI CHARACTER FONGMAN
0E5A ; [*03EF.0020.0002] # THAI CHARACTER ANGKHANKHU
0E5B ; [*03F0.0020.0002] # THAI CHARACTER KHOMUT
0F01 ; [*0526.0020.0002] # TIBETAN MARK GTER YIG MGO TRUNCATED A
0F02 ; [*0527.0020.0002] # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
0F03 ; [*0528.0020.0002] # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
0F04 ; [*03F3.0020.0002] # TIBETAN MARK INITIAL YIG MGO MDUN MA
0F05 ; [*03F4.0020.0002] # TIBETAN MARK CLOSING YIG MGO SGAB MA
0F06 ; [*03F5.0020.0002] # TIBETAN MARK CARET YIG MGO PHUR SHAD MA
0F07 ; [*03F6.0020.0002] # TIBETAN MARK YIG MGO TSHEG SHAD MA
0F08 ; [*03F7.0020.0002] # TIBETAN MARK SBRUL SHAD
0F09 ; [*03F8.0020.0002] # TIBETAN MARK BSKUR YIG MGO
0F0A ; [*03F9.0020.0002] # TIBETAN MARK BKA- SHOG YIG MGO
0F0B ; [*03FC.0020.0002] # TIBETAN MARK INTERSYLLABIC TSHEG
0F0C ; [*03FC.0020.001B] # TIBETAN MARK DELIMITER TSHEG BSTAR
0F0D ; [*03FD.0020.0002] # TIBETAN MARK SHAD
0F0E ; [*03FE.0020.0002] # TIBETAN MARK NYIS SHAD
0F0F ; [*03FF.0020.0002] # TIBETAN MARK TSHEG SHAD
0F10 ; [*0400.0020.0002] # TIBETAN MARK NYIS TSHEG SHAD
0F11 ; [*0401.0020.0002] # TIBETAN MARK RIN CHEN SPUNGS SHAD
0F12 ; [*0402.0020.0002] # TIBETAN MARK RGYA GRAM SHAD
0F13 ; [*0529.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
0F14 ; [*0258.0020.0002] # TIBETAN MARK GTER TSHEG
0F15 ; [*052A.0020.0002] # TIBETAN LOGOTYPE SIGN CHAD RTAGS
0F16 ; [*052B.0020.0002] # TIBETAN LOGOTYPE SIGN LHAG RTAGS
0F17 ; [*052C.0020.0002] # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
0F18 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN -KHYUD PA
0F19 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
0F1A ; [*052D.0020.0002] # TIBETAN SIGN RDEL DKAR GCIG
0F1B ; [*052E.0020.0002] # TIBETAN SIGN RDEL DKAR GNYIS
0F1C ; [*052F.0020.0002] # TIBETAN SIGN RDEL DKAR GSUM
0F1D ; [*0530.0020.0002] # TIBETAN SIGN RDEL NAG GCIG
0F1E ; [*0531.0020.0002] # TIBETAN SIGN RDEL NAG GNYIS
0F1F ; [*0532.0020.0002] # TIBETAN SIGN RDEL DKAR RDEL NAG
0F34 ; [*0533.0020.0002] # TIBETAN MARK BSDUS RTAGS
0F35 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG NYI ZLA
0F36 ; [*0534.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
0F37 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG SGOR RTAGS
0F38 ; [*0535.0020.0002] # TIBETAN MARK CHE MGO
0F3A ; [*031D.0020.0002] # TIBETAN MARK GUG RTAGS GYON
0F3B ; [*031E.0020.0002] # TIBETAN MARK GUG RTAGS GYAS
0F3C ; [*031F.0020.0002] # TIBETAN MARK ANG KHANG GYON
0F3D ; [*0320.0020.0002] # TIBETAN MARK ANG KHANG GYAS
0F3E ; [.0000.0000.0000] # TIBETAN SIGN YAR TSHES
0F3F ; [.0000.0000.0000] # TIBETAN SIGN MAR TSHES
0F82 ; [.0000.0000.0000] # TIBETAN SIGN NYI ZLA NAA DA
0F83 ; [.0000.0000.0000] # TIBETAN SIGN SNA LDAN
0F85 ; [*0403.0020.0002] # TIBETAN MARK PALUTA
0F86 ; [.0000.0000.0000] # TIBETAN SIGN LCI RTAGS
0F87 ; [.0000.0000.0000] # TIBETAN SIGN YANG RTAGS
0FBE ; [*0536.0020.0002] # TIBETAN KU RU KHA
0FBF ; [*0537.0020.0002] # TIBETAN KU RU KHA BZHI MIG CAN
0FC0 ; [*0538.0020.0002] # TIBETAN CANTILLATION SIGN HEAVY BEAT
0FC1 ; [*0539.0020.0002] # TIBETAN CANTILLATION SIGN LIGHT BEAT
0FC2 ; [*053A.0020.0002] # TIBETAN CANTILLATION SIGN CANG TE-U
0FC3 ; [*053B.0020.0002] # TIBETAN CANTILLATION SIGN SBUB -CHAL
0FC4 ; [*053C.0020.0002] # TIBETAN SYMBOL DRIL BU
0FC5 ; [*053D.0020.0002] # TIBETAN SYMBOL RDO RJE
0FC6 ; [.0000.0000.0000] # TIBETAN SYMBOL PADMA GDAN
0FC7 ; [*053E.0020.0002] # TIBETAN SYMBOL RDO RJE RGYA GRAM
0FC8 ; [*053F.0020.0002] # TIBETAN SYMBOL PHUR PA
0FC9 ; [*0540.0020.0002] # TIBETAN SYMBOL NOR BU
0FCA ; [*0541.0020.0002] # TIBETAN SYMBOL NOR BU NYIS -KHYIL
0FCB ; [*0542.0020.0002] # TIBETAN SYMBOL NOR BU GSUM -KHYIL
0FCC ; [*0543.0020.0002] # TIBETAN SYMBOL NOR BU BZHI -KHYIL
0FCE ; [*0544.0020.0002] # TIBETAN SIGN RDEL NAG RDEL DKAR
0FCF ; [*0545.0020.0002] # TIBETAN SIGN RDEL NAG GSUM
0FD0 ; [*03FA.0020.0002] # TIBETAN MARK BSKA- SHOG GI MGO RGYAN
0FD1 ; [*03FB.0020.0002] # TIBETAN MARK MNYAM YIG GI MGO RGYAN
0FD2 ; [*0404.0020.0002] # TIBETAN MARK NYIS TSHEG
0FD3 ; [*0405.0020.0002] # TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
0FD4 ; [*0406.0020.0002] # TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
0FD5 ; [*0546.0020.0002] # RIGHT-FACING SVASTI SIGN
0FD6 ; [*0547.0020.0002] # LEFT-FACING SVASTI SIGN
0FD7 ; [*0548.0020.0002] # RIGHT-FACING SVASTI SIGN WITH DOTS
0FD8 ; [*0549.0020.0002] # LEFT-FACING SVASTI SIGN WITH DOTS
0FD9 ; [*0407.0020.0002] # TIBETAN MARK LEADING MCHAN RTAGS
0FDA ; [*0408.0020.0002] # TIBETAN MARK TRAILING MCHAN RTAGS
104A ; [*0299.0020.0002] # MYANMAR SIGN LITTLE SECTION
104B ; [*029A.0020.0002] # MYANMAR SIGN SECTION
104C ; [*040E.0020.0002] # MYANMAR SYMBOL LOCATIVE
104D ; [*040F.0020.0002] # MYANMAR SYMBOL COMPLETED
104E ; [*0410.0020.0002] # MYANMAR SYMBOL AFOREMENTIONED
104F ; [*0411.0020.0002] # MYANMAR SYMBOL GENITIVE
109E ; [*054B.0020.0002] # MYANMAR SYMBOL SHAN ONE
109F ; [*054C.0020.0002] # MYANMAR SYMBOL SHAN EXCLAMATION
10FB ; [*02C6.0020.0002] # GEORGIAN PARAGRAPH SEPARATOR
1360 ; [*02C7.0020.0002] # ETHIOPIC SECTION MARK
1361 ; [*0251.0020.0002] # ETHIOPIC WORDSPACE
1362 ; [*027C.0020.0002] # ETHIOPIC FULL STOP
1363 ; [*0252.0020.0002] # ETHIOPIC COMMA
1364 ; [*0253.0020.0002] # ETHIOPIC SEMICOLON
1365 ; [*0254.0020.0002] # ETHIOPIC COLON
1366 ; [*0255.0020.0002] # ETHIOPIC PREFACE COLON
1367 ; [*026C.0020.0002] # ETHIOPIC QUESTION MARK
1368 ; [*02C8.0020.0002] # ETHIOPIC PARAGRAPH SEPARATOR
1372 ; [*1ABB.0020.0002] # ETHIOPIC NUMBER TEN
1373 ; [*1ABC.0020.0002] # ETHIOPIC NUMBER TWENTY
1374 ; [*1ABD.0020.0002] # ETHIOPIC NUMBER THIRTY
1375 ; [*1ABE.0020.0002] # ETHIOPIC NUMBER FORTY
1376 ; [*1ABF.0020.0002] # ETHIOPIC NUMBER FIFTY
1377 ; [*1AC0.0020.0002] # ETHIOPIC NUMBER SIXTY
1378 ; [*1AC1.0020.0002] # ETHIOPIC NUMBER SEVENTY
1379 ; [*1AC2.0020.0002] # ETHIOPIC NUMBER EIGHTY
137A ; [*1AC3.0020.0002] # ETHIOPIC NUMBER NINETY
137B ; [*1AC4.0020.0002] # ETHIOPIC NUMBER HUNDRED
137C ; [*1AC5.0020.0002] # ETHIOPIC NUMBER TEN THOUSAND
1390 ; [*04C6.0020.0002] # ETHIOPIC TONAL MARK YIZET
1391 ; [*04C7.0020.0002] # ETHIOPIC TONAL MARK DERET
1392 ; [*04C8.0020.0002] # ETHIOPIC TONAL MARK RIKRIK
1393 ; [*04C9.0020.0002] # ETHIOPIC TONAL MARK SHORT RIKRIK
1394 ; [*04CA.0020.0002] # ETHIOPIC TONAL MARK DIFAT
1395 ; [*04CB.0020.0002] # ETHIOPIC TONAL MARK KENAT
1396 ; [*04CC.0020.0002] # ETHIOPIC TONAL MARK CHIRET
1397 ; [*04CD.0020.0002] # ETHIOPIC TONAL MARK HIDET
1398 ; [*04CE.0020.0002] # ETHIOPIC TONAL MARK DERET-HIDET
1399 ; [*04CF.0020.0002] # ETHIOPIC TONAL MARK KURT
1400 ; [*020F.0020.0002] # CANADIAN SYLLABICS HYPHEN
166D ; [*041E.0020.0002] # CANADIAN SYLLABICS CHI SIGN
166E ; [*027F.0020.0002] # CANADIAN SYLLABICS FULL STOP
1680 ; [*0209.0020.0004] # OGHAM SPACE MARK
169B ; [*0321.0020.0002] # OGHAM FEATHER MARK
169C ; [*0322.0020.0002] # OGHAM REVERSED FEATHER MARK
16EB ; [*025C.0020.0002] # RUNIC SINGLE PUNCTUATION
16EC ; [*025D.0020.0002] # RUNIC MULTIPLE PUNCTUATION
16ED ; [*025E.0020.0002] # RUNIC CROSS PUNCTUATION
1735 ; [*0296.0020.0002] # PHILIPPINE SINGLE PUNCTUATION
1736 ; [*0297.0020.0002] # PHILIPPINE DOUBLE PUNCTUATION
17B4 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AQ
17B5 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AA
17D3 ; [.0000.0000.0000] # KHMER SIGN BATHAMASAT
17D4 ; [*029B.0020.0002] # KHMER SIGN KHAN
17D5 ; [*029C.0020.0002] # KHMER SIGN BARIYOOSAN
17D6 ; [*0259.0020.0002] # KHMER SIGN CAMNUC PII KUUH
17D8 ; [*0412.0020.0002] # KHMER SIGN BEYYAL
17D9 ; [*0413.0020.0002] # KHMER SIGN PHNAEK MUAN
17DA ; [*0414.0020.0002] # KHMER SIGN KOOMUUT
1800 ; [*03D9.0020.0002] # MONGOLIAN BIRGA
1801 ; [*0278.0020.0002] # MONGOLIAN ELLIPSIS
1802 ; [*022C.0020.0002] # MONGOLIAN COMMA
1803 ; [*027D.0020.0002] # MONGOLIAN FULL STOP
1804 ; [*0256.0020.0002] # MONGOLIAN COLON
1805 ; [*0257.0020.0002] # MONGOLIAN FOUR DOTS
1806 ; [*0211.0020.0002] # MONGOLIAN TODO SOFT HYPHEN
1807 ; [*0212.0020.0002] # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
1808 ; [*022D.0020.0002] # MONGOLIAN MANCHU COMMA
1809 ; [*027E.0020.0002] # MONGOLIAN MANCHU FULL STOP
180A ; [.0000.0000.0000] # MONGOLIAN NIRUGU
1940 ; [*054A.0020.0002] # LIMBU SIGN LOO
1944 ; [*0264.0020.0002] # LIMBU EXCLAMATION MARK
1945 ; [*026D.0020.0002] # LIMBU QUESTION MARK
19E0 ; [*0551.0020.0002] # KHMER SYMBOL PATHAMASAT
19E1 ; [*0552.0020.0002] # KHMER SYMBOL MUOY KOET
19E2 ; [*0553.0020.0002] # KHMER SYMBOL PII KOET
19E3 ; [*0554.0020.0002] # KHMER SYMBOL BEI KOET
19E4 ; [*0555.0020.0002] # KHMER SYMBOL BUON KOET
19E5 ; [*0556.0020.0002] # KHMER SYMBOL PRAM KOET
19E6 ; [*0557.0020.0002] # KHMER SYMBOL PRAM-MUOY KOET
19E7 ; [*0558.0020.0002] # KHMER SYMBOL PRAM-PII KOET
19E8 ; [*0559.0020.0002] # KHMER SYMBOL PRAM-BEI KOET
19E9 ; [*055A.0020.0002] # KHMER SYMBOL PRAM-BUON KOET
19EA ; [*055B.0020.0002] # KHMER SYMBOL DAP KOET
19EB ; [*055C.0020.0002] # KHMER SYMBOL DAP-MUOY KOET
19EC ; [*055D.0020.0002] # KHMER SYMBOL DAP-PII KOET
19ED ; [*055E.0020.0002] # KHMER SYMBOL DAP-BEI KOET
19EE ; [*055F.0020.0002] # KHMER SYMBOL DAP-BUON KOET
19EF ; [*0560.0020.0002] # KHMER SYMBOL DAP-PRAM KOET
19F0 ; [*0561.0020.0002] # KHMER SYMBOL TUTEYASAT
19F1 ; [*0562.0020.0002] # KHMER SYMBOL MUOY ROC
19F2 ; [*0563.0020.0002] # KHMER SYMBOL PII ROC
19F3 ; [*0564.0020.0002] # KHMER SYMBOL BEI ROC
19F4 ; [*0565.0020.0002] # KHMER SYMBOL BUON ROC
19F5 ; [*0566.0020.0002] # KHMER SYMBOL PRAM ROC
19F6 ; [*0567.0020.0002] # KHMER SYMBOL PRAM-MUOY ROC
19F7 ; [*0568.0020.0002] # KHMER SYMBOL PRAM-PII ROC
19F8 ; [*0569.0020.0002] # KHMER SYMBOL PRAM-BEI ROC
19F9 ; [*056A.0020.0002] # KHMER SYMBOL PRAM-BUON ROC
19FA ; [*056B.0020.0002] # KHMER SYMBOL DAP ROC
19FB ; [*056C.0020.0002] # KHMER SYMBOL DAP-MUOY ROC
19FC ; [*056D.0020.0002] # KHMER SYMBOL DAP-PII ROC
19FD ; [*056E.0020.0002] # KHMER SYMBOL DAP-BEI ROC
19FE ; [*056F.0020.0002] # KHMER SYMBOL DAP-BUON ROC
19FF ; [*0570.0020.0002] # KHMER SYMBOL DAP-PRAM ROC
1A1E ; [*02C9.0020.0002] # BUGINESE PALLAWA
1A1F ; [*02CA.0020.0002] # BUGINESE END OF SECTION
1A7F ; [.0000.0000.0000] # TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AA0 ; [*0415.0020.0002] # TAI THAM SIGN WIANG
1AA1 ; [*0416.0020.0002] # TAI THAM SIGN WIANGWAAK
1AA2 ; [*0417.0020.0002] # TAI THAM SIGN SAWAN
1AA3 ; [*0418.0020.0002] # TAI THAM SIGN KEOW
1AA4 ; [*0419.0020.0002] # TAI THAM SIGN HOY
1AA5 ; [*041A.0020.0002] # TAI THAM SIGN DOKMAI
1AA6 ; [*041B.0020.0002] # TAI THAM SIGN REVERSED ROTATED RANA
1AA8 ; [*029D.0020.0002] # TAI THAM SIGN KAAN
1AA9 ; [*029E.0020.0002] # TAI THAM SIGN KAANKUU
1AAA ; [*029F.0020.0002] # TAI THAM SIGN SATKAAN
1AAB ; [*02A0.0020.0002] # TAI THAM SIGN SATKAANKUU
1AAC ; [*041C.0020.0002] # TAI THAM SIGN HANG
1AAD ; [*041D.0020.0002] # TAI THAM SIGN CAANG
1B5A ; [*02CB.0020.0002] # BALINESE PANTI
1B5B ; [*02CC.0020.0002] # BALINESE PAMADA
1B5C ; [*0280.0020.0002] # BALINESE WINDU
1B5D ; [*025A.0020.0002] # BALINESE CARIK PAMUNGKAH
1B5E ; [*02A1.0020.0002] # BALINESE CARIK SIKI
1B5F ; [*02A2.0020.0002] # BALINESE CARIK PAREREN
1B60 ; [*0210.0020.0002] # BALINESE PAMENENG
1B61 ; [*0571.0020.0002] # BALINESE MUSICAL SYMBOL DONG
1B62 ; [*0572.0020.0002] # BALINESE MUSICAL SYMBOL DENG
1B63 ; [*0573.0020.0002] # BALINESE MUSICAL SYMBOL DUNG
1B64 ; [*0574.0020.0002] # BALINESE MUSICAL SYMBOL DANG
1B65 ; [*0575.0020.0002] # BALINESE MUSICAL SYMBOL DANG SURANG
1B66 ; [*0576.0020.0002] # BALINESE MUSICAL SYMBOL DING
1B67 ; [*0577.0020.0002] # BALINESE MUSICAL SYMBOL DAENG
1B68 ; [*0578.0020.0002] # BALINESE MUSICAL SYMBOL DEUNG
1B69 ; [*0579.0020.0002] # BALINESE MUSICAL SYMBOL DAING
1B6A ; [*057A.0020.0002] # BALINESE MUSICAL SYMBOL DANG GEDE
1B6B ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING TEGEH
1B6C ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING ENDEP
1B6D ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPUL
1B6E ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPLI
1B6F ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING JEGOGAN
1B70 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN
1B71 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN
1B72 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING BENDE
1B73 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING GONG
1B74 ; [*057B.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG
1B75 ; [*057C.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG
1B76 ; [*057D.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK
1B77 ; [*057E.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK
1B78 ; [*057F.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG
1B79 ; [*0580.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG
1B7A ; [*0581.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK
1B7B ; [*0582.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK
1B7C ; [*0583.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
1BFC ; [*042A.0020.0002] # BATAK SYMBOL BINDU NA METEK
1BFD ; [*042B.0020.0002] # BATAK SYMBOL BINDU PINARBORAS
1BFE ; [*042C.0020.0002] # BATAK SYMBOL BINDU JUDUL
1BFF ; [*042D.0020.0002] # BATAK SYMBOL BINDU PANGOLAT
1C3B ; [*0292.0020.0002] # LEPCHA PUNCTUATION TA-ROL
1C3C ; [*0293.0020.0002] # LEPCHA PUNCTUATION NYET THYOOM TA-ROL
1C3D ; [*040B.0020.0002] # LEPCHA PUNCTUATION CER-WA
1C3E ; [*040C.0020.0002] # LEPCHA PUNCTUATION TSHOOK CER-WA
1C3F ; [*040D.0020.0002] # LEPCHA PUNCTUATION TSHOOK
1C7E ; [*02C2.0020.0002] # OL CHIKI PUNCTUATION MUCAAD
1C7F ; [*02C3.0020.0002] # OL CHIKI PUNCTUATION DOUBLE MUCAAD
1CC0 ; [*041F.0020.0002] # SUNDANESE PUNCTUATION BINDU SURYA
1CC1 ; [*0420.0020.0002] # SUNDANESE PUNCTUATION BINDU PANGLONG
1CC2 ; [*0421.0020.0002] # SUNDANESE PUNCTUATION BINDU PURNAMA
1CC3 ; [*0422.0020.0002] # SUNDANESE PUNCTUATION BINDU CAKRA
1CC4 ; [*0423.0020.0002] # SUNDANESE PUNCTUATION BINDU LEU SATANGA
1CC5 ; [*0424.0020.0002] # SUNDANESE PUNCTUATION BINDU KA SATANGA
1CC6 ; [*0425.0020.0002] # SUNDANESE PUNCTUATION BINDU DA SATANGA
1CC7 ; [*0426.0020.0002] # SUNDANESE PUNCTUATION BINDU BA SATANGA
1CD0 ; [.0000.0000.0000] # VEDIC TONE KARSHANA
1CD1 ; [.0000.0000.0000] # VEDIC TONE SHARA
1CD2 ; [.0000.0000.0000] # VEDIC TONE PRENKHA
1CD3 ; [.0000.0000.0000] # VEDIC SIGN NIHSHVASA
1CD4 ; [.0000.0000.0000] # VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
1CD5 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA
1CD6 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
1CD7 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
1CD8 ; [.0000.0000.0000] # VEDIC TONE CANDRA BELOW
1CD9 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
1CDA ; [.0000.0000.0000] # VEDIC TONE DOUBLE SVARITA
1CDB ; [.0000.0000.0000] # VEDIC TONE TRIPLE SVARITA
1CDC ; [.0000.0000.0000] # VEDIC TONE KATHAKA ANUDATTA
1CDD ; [.0000.0000.0000] # VEDIC TONE DOT BELOW
1CDE ; [.0000.0000.0000] # VEDIC TONE TWO DOTS BELOW
1CDF ; [.0000.0000.0000] # VEDIC TONE THREE DOTS BELOW
1CE0 ; [.0000.0000.0000] # VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
1CE1 ; [.0000.0000.0000] # VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
1CE2 ; [.0000.0000.0000] # VEDIC SIGN VISARGA SVARITA
1CE3 ; [.0000.0000.0000] # VEDIC SIGN VISARGA UDATTA
1CE4 ; [.0000.0000.0000] # VEDIC SIGN REVERSED VISARGA UDATTA
1CE5 ; [.0000.0000.0000] # VEDIC SIGN VISARGA ANUDATTA
1CE6 ; [.0000.0000.0000] # VEDIC SIGN REVERSED VISARGA ANUDATTA
1CE7 ; [.0000.0000.0000] # VEDIC SIGN VISARGA UDATTA WITH TAIL
1CE8 ; [.0000.0000.0000] # VEDIC SIGN VISARGA ANUDATTA WITH TAIL
1CF4 ; [.0000.0000.0000] # VEDIC TONE CANDRA ABOVE
1CF8 ; [.0000.0000.0000] # VEDIC TONE RING ABOVE
1CF9 ; [.0000.0000.0000] # VEDIC TONE DOUBLE RING ABOVE
1FBD ; [*048E.0020.0002] # GREEK KORONIS
1FBF ; [*048E.0020.0002] # GREEK PSILI
1FC0 ; [*0490.0020.0002] # GREEK PERISPOMENI
1FC1 ; [*0489.0020.0002][.0000.002A.0002] # GREEK DIALYTIKA AND PERISPOMENI
1FCD ; [*048E.0020.0002][.0000.0025.0002] # GREEK PSILI AND VARIA
1FCE ; [*048E.0020.0002][.0000.0024.0002] # GREEK PSILI AND OXIA
1FCF ; [*048E.0020.0002][.0000.002A.0002] # GREEK PSILI AND PERISPOMENI
1FDD ; [*048F.0020.0002][.0000.0025.0002] # GREEK DASIA AND VARIA
1FDE ; [*048F.0020.0002][.0000.0024.0002] # GREEK DASIA AND OXIA
1FDF ; [*048F.0020.0002][.0000.002A.0002] # GREEK DASIA AND PERISPOMENI
1FED ; [*0489.0020.0002][.0000.0025.0002] # GREEK DIALYTIKA AND VARIA
1FEE ; [*0489.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA AND OXIA
1FEF ; [*0482.0020.0002] # GREEK VARIA
1FFD ; [*0483.0020.0002] # GREEK OXIA
1FFE ; [*048F.0020.0002] # GREEK DASIA
2000 ; [*0209.0020.0004] # EN QUAD
2001 ; [*0209.0020.0004] # EM QUAD
2002 ; [*0209.0020.0004] # EN SPACE
2003 ; [*0209.0020.0004] # EM SPACE
2004 ; [*0209.0020.0004] # THREE-PER-EM SPACE
2005 ; [*0209.0020.0004] # FOUR-PER-EM SPACE
2006 ; [*0209.0020.0004] # SIX-PER-EM SPACE
2007 ; [*0209.0020.001B] # FIGURE SPACE
2008 ; [*0209.0020.0004] # PUNCTUATION SPACE
2009 ; [*0209.0020.0004] # THIN SPACE
200A ; [*0209.0020.0004] # HAIR SPACE
2010 ; [*0213.0020.0002] # HYPHEN
2011 ; [*0213.0020.001B] # NON-BREAKING HYPHEN
2012 ; [*0214.0020.0002] # FIGURE DASH
2013 ; [*0215.0020.0002] # EN DASH
2014 ; [*0216.0020.0002] # EM DASH
2015 ; [*0217.0020.0002] # HORIZONTAL BAR
2016 ; [*0383.0020.0002] # DOUBLE VERTICAL LINE
2017 ; [*020C.0020.0002] # DOUBLE LOW LINE
2018 ; [*0306.0020.0002] # LEFT SINGLE QUOTATION MARK
2019 ; [*0307.0020.0002] # RIGHT SINGLE QUOTATION MARK
201A ; [*0308.0020.0002] # SINGLE LOW-9 QUOTATION MARK
201B ; [*0309.0020.0002] # SINGLE HIGH-REVERSED-9 QUOTATION MARK
201C ; [*030D.0020.0002] # LEFT DOUBLE QUOTATION MARK
201D ; [*030E.0020.0002] # RIGHT DOUBLE QUOTATION MARK
201E ; [*030F.0020.0002] # DOUBLE LOW-9 QUOTATION MARK
201F ; [*0310.0020.0002] # DOUBLE HIGH-REVERSED-9 QUOTATION MARK
2020 ; [*039F.0020.0002] # DAGGER
2021 ; [*03A0.0020.0002] # DOUBLE DAGGER
2022 ; [*03A4.0020.0002] # BULLET
2023 ; [*03A5.0020.0002] # TRIANGULAR BULLET
2024 ; [*0277.0020.0004] # ONE DOT LEADER
2025 ; [*0277.0020.0004][*0277.0020.0004] # TWO DOT LEADER
2026 ; [*0277.0020.0004][*0277.0020.0004][*0277.0020.0004] # HORIZONTAL ELLIPSIS
2027 ; [*03A6.0020.0002] # HYPHENATION POINT
2028 ; [*0207.0020.0002] # LINE SEPARATOR
2029 ; [*0208.0020.0002] # PARAGRAPH SEPARATOR
202F ; [*0209.0020.001B] # NARROW NO-BREAK SPACE
2030 ; [*039B.0020.0002] # PER MILLE SIGN
2031 ; [*039D.0020.0002] # PER TEN THOUSAND SIGN
2032 ; [*03AA.0020.0002] # PRIME
2033 ; [*03AA.0020.0004][*03AA.0020.0004] # DOUBLE PRIME
2034 ; [*03AA.0020.0004][*03AA.0020.0004][*03AA.0020.0004] # TRIPLE PRIME
2035 ; [*03AB.0020.0002] # REVERSED PRIME
2036 ; [*03AB.0020.0004][*03AB.0020.0004] # REVERSED DOUBLE PRIME
2037 ; [*03AB.0020.0004][*03AB.0020.0004][*03AB.0020.0004] # REVERSED TRIPLE PRIME
2038 ; [*03AE.0020.0002] # CARET
2039 ; [*030A.0020.0002] # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
203A ; [*030B.0020.0002] # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
203B ; [*03AF.0020.0002] # REFERENCE MARK
203C ; [*0260.0020.0004][*0260.0020.0004] # DOUBLE EXCLAMATION MARK
203D ; [*0275.0020.0002] # INTERROBANG
203E ; [*020A.0020.0002] # OVERLINE
203F ; [*03B0.0020.0002] # UNDERTIE
2040 ; [*03B2.0020.0002] # CHARACTER TIE
2041 ; [*03B4.0020.0002] # CARET INSERTION POINT
2042 ; [*03B5.0020.0002] # ASTERISM
2043 ; [*03A7.0020.0002] # HYPHEN BULLET
2044 ; [*0626.0020.0002] # FRACTION SLASH
2045 ; [*0323.0020.0002] # LEFT SQUARE BRACKET WITH QUILL
2046 ; [*0324.0020.0002] # RIGHT SQUARE BRACKET WITH QUILL
2047 ; [*0266.0020.0004][*0266.0020.0004] # DOUBLE QUESTION MARK
2048 ; [*0266.0020.0004][*0260.0020.0004] # QUESTION EXCLAMATION MARK
2049 ; [*0260.0020.0004][*0266.0020.0004] # EXCLAMATION QUESTION MARK
204A ; [*0397.0020.0002] # TIRONIAN SIGN ET
204B ; [*038C.0020.0002] # REVERSED PILCROW SIGN
204C ; [*03A8.0020.0002] # BLACK LEFTWARDS BULLET
204D ; [*03A9.0020.0002] # BLACK RIGHTWARDS BULLET
204E ; [*0390.0020.0002] # LOW ASTERISK
204F ; [*0236.0020.0002] # REVERSED SEMICOLON
2050 ; [*03B3.0020.0002] # CLOSE UP
2051 ; [*0391.0020.0002] # TWO ASTERISKS ALIGNED VERTICALLY
2052 ; [*0622.0020.0002] # COMMERCIAL MINUS SIGN
2053 ; [*021A.0020.0002] # SWUNG DASH
2054 ; [*03B1.0020.0002] # INVERTED UNDERTIE
2055 ; [*02E8.0020.0002] # FLOWER PUNCTUATION MARK
2056 ; [*02E9.0020.0002] # THREE DOT PUNCTUATION
2057 ; [*03AA.0020.0004][*03AA.0020.0004][*03AA.0020.0004][*03AA.0020.0004] # QUADRUPLE PRIME
2058 ; [*02EA.0020.0002] # FOUR DOT PUNCTUATION
2059 ; [*02EB.0020.0002] # FIVE DOT PUNCTUATION
205A ; [*02EC.0020.0002] # TWO DOT PUNCTUATION
205B ; [*02ED.0020.0002] # FOUR DOT MARK
205C ; [*02EE.0020.0002] # DOTTED CROSS
205D ; [*02EF.0020.0002] # TRICOLON
205E ; [*02F0.0020.0002] # VERTICAL FOUR DOTS
205F ; [*0209.0020.0004] # MEDIUM MATHEMATICAL SPACE
2061 ; [.0000.0000.0000] # FUNCTION APPLICATION
2062 ; [.0000.0000.0000] # INVISIBLE TIMES
2063 ; [.0000.0000.0000] # INVISIBLE SEPARATOR
2064 ; [.0000.0000.0000] # INVISIBLE PLUS
207A ; [*0616.0020.0014] # SUPERSCRIPT PLUS SIGN
207B ; [*0621.0020.0014] # SUPERSCRIPT MINUS
207C ; [*061B.0020.0014] # SUPERSCRIPT EQUALS SIGN
207D ; [*0317.0020.0014] # SUPERSCRIPT LEFT PARENTHESIS
207E ; [*0318.0020.0014] # SUPERSCRIPT RIGHT PARENTHESIS
208A ; [*0616.0020.0015] # SUBSCRIPT PLUS SIGN
208B ; [*0621.0020.0015] # SUBSCRIPT MINUS
208C ; [*061B.0020.0015] # SUBSCRIPT EQUALS SIGN
208D ; [*0317.0020.0015] # SUBSCRIPT LEFT PARENTHESIS
208E ; [*0318.0020.0015] # SUBSCRIPT RIGHT PARENTHESIS
2104 ; [*0586.0020.0002] # CENTRE LINE SYMBOL
2108 ; [*0587.0020.0002] # SCRUPLE
2114 ; [*0588.0020.0002] # L B BAR SYMBOL
2117 ; [*0589.0020.0002] # SOUND RECORDING COPYRIGHT
2118 ; [*058A.0020.0002] # SCRIPT CAPITAL P
211E ; [*058B.0020.0002] # PRESCRIPTION TAKE
211F ; [*058C.0020.0002] # RESPONSE
2123 ; [*058D.0020.0002] # VERSICLE
2125 ; [*058E.0020.0002] # OUNCE SIGN
2127 ; [*058F.0020.0002] # INVERTED OHM SIGN
2129 ; [*0590.0020.0002] # TURNED GREEK SMALL LETTER IOTA
212E ; [*0591.0020.0002] # ESTIMATED SYMBOL
213A ; [*0592.0020.0002] # ROTATED CAPITAL Q
2140 ; [*0615.0020.0005] # DOUBLE-STRUCK N-ARY SUMMATION
2141 ; [*0593.0020.0002] # TURNED SANS-SERIF CAPITAL G
2142 ; [*0594.0020.0002] # TURNED SANS-SERIF CAPITAL L
2143 ; [*0595.0020.0002] # REVERSED SANS-SERIF CAPITAL L
2144 ; [*0596.0020.0002] # TURNED SANS-SERIF CAPITAL Y
214A ; [*0597.0020.0002] # PROPERTY LINE
214B ; [*06B1.0020.0002] # TURNED AMPERSAND
214C ; [*0598.0020.0002] # PER SIGN
214F ; [*0599.0020.0002] # SYMBOL FOR SAMARITAN SOURCE
2180 ; [*1AC6.0020.0002] # ROMAN NUMERAL ONE THOUSAND C D
2181 ; [*1AC7.0020.0002] # ROMAN NUMERAL FIVE THOUSAND
2182 ; [*1AC8.0020.0002] # ROMAN NUMERAL TEN THOUSAND
2186 ; [*1AC9.0020.0002] # ROMAN NUMERAL FIFTY EARLY FORM
2187 ; [*1ACA.0020.0002] # ROMAN NUMERAL FIFTY THOUSAND
2188 ; [*1ACB.0020.0002] # ROMAN NUMERAL ONE HUNDRED THOUSAND
218A ; [*059A.0020.0002] # TURNED DIGIT TWO
218B ; [*059B.0020.0002] # TURNED DIGIT THREE
2190 ; [*059C.0020.0002] # LEFTWARDS ARROW
2191 ; [*059E.0020.0002] # UPWARDS ARROW
2192 ; [*059D.0020.0002] # RIGHTWARDS ARROW
2193 ; [*059F.0020.0002] # DOWNWARDS ARROW
2194 ; [*05A0.0020.0002] # LEFT RIGHT ARROW
2195 ; [*05A1.0020.0002] # UP DOWN ARROW
2196 ; [*05A2.0020.0002] # NORTH WEST ARROW
2197 ; [*05A3.0020.0002] # NORTH EAST ARROW
2198 ; [*05A4.0020.0002] # SOUTH EAST ARROW
2199 ; [*05A5.0020.0002] # SOUTH WEST ARROW
219A ; [*059C.0020.0002][.0000.002F.0002] # LEFTWARDS ARROW WITH STROKE
219B ; [*059D.0020.0002][.0000.002F.0002] # RIGHTWARDS ARROW WITH STROKE
219C ; [*05A6.0020.0002] # LEFTWARDS WAVE ARROW
219D ; [*05A7.0020.0002] # RIGHTWARDS WAVE ARROW
219E ; [*05A8.0020.0002] # LEFTWARDS TWO HEADED ARROW
219F ; [*05A9.0020.0002] # UPWARDS TWO HEADED ARROW
21A0 ; [*05AA.0020.0002] # RIGHTWARDS TWO HEADED ARROW
21A1 ; [*05AB.0020.0002] # DOWNWARDS TWO HEADED ARROW
21A2 ; [*05AC.0020.0002] # LEFTWARDS ARROW WITH TAIL
21A3 ; [*05AD.0020.0002] # RIGHTWARDS ARROW WITH TAIL
21A4 ; [*05AE.0020.0002] # LEFTWARDS ARROW FROM BAR
21A5 ; [*05AF.0020.0002] # UPWARDS ARROW FROM BAR
21A6 ; [*05B0.0020.0002] # RIGHTWARDS ARROW FROM BAR
21A7 ; [*05B1.0020.0002] # DOWNWARDS ARROW FROM BAR
21A8 ; [*05B2.0020.0002] # UP DOWN ARROW WITH BASE
21A9 ; [*05B3.0020.0002] # LEFTWARDS ARROW WITH HOOK
21AA ; [*05B4.0020.0002] # RIGHTWARDS ARROW WITH HOOK
21AB ; [*05B5.0020.0002] # LEFTWARDS ARROW WITH LOOP
21AC ; [*05B6.0020.0002] # RIGHTWARDS ARROW WITH LOOP
21AD ; [*05B7.0020.0002] # LEFT RIGHT WAVE ARROW
21AE ; [*05A0.0020.0002][.0000.002F.0002] # LEFT RIGHT ARROW WITH STROKE
21AF ; [*05B8.0020.0002] # DOWNWARDS ZIGZAG ARROW
21B0 ; [*05B9.0020.0002] # UPWARDS ARROW WITH TIP LEFTWARDS
21B1 ; [*05BA.0020.0002] # UPWARDS ARROW WITH TIP RIGHTWARDS
21B2 ; [*05BB.0020.0002] # DOWNWARDS ARROW WITH TIP LEFTWARDS
21B3 ; [*05BC.0020.0002] # DOWNWARDS ARROW WITH TIP RIGHTWARDS
21B4 ; [*05BD.0020.0002] # RIGHTWARDS ARROW WITH CORNER DOWNWARDS
21B5 ; [*05BE.0020.0002] # DOWNWARDS ARROW WITH CORNER LEFTWARDS
21B6 ; [*05BF.0020.0002] # ANTICLOCKWISE TOP SEMICIRCLE ARROW
21B7 ; [*05C0.0020.0002] # CLOCKWISE TOP SEMICIRCLE ARROW
21B8 ; [*05C1.0020.0002] # NORTH WEST ARROW TO LONG BAR
21B9 ; [*05C2.0020.0002] # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
21BA ; [*05C3.0020.0002] # ANTICLOCKWISE OPEN CIRCLE ARROW
21BB ; [*05C4.0020.0002] # CLOCKWISE OPEN CIRCLE ARROW
21BC ; [*05C5.0020.0002] # LEFTWARDS HARPOON WITH BARB UPWARDS
21BD ; [*05C6.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWNWARDS
21BE ; [*05C7.0020.0002] # UPWARDS HARPOON WITH BARB RIGHTWARDS
21BF ; [*05C8.0020.0002] # UPWARDS HARPOON WITH BARB LEFTWARDS
21C0 ; [*05C9.0020.0002] # RIGHTWARDS HARPOON WITH BARB UPWARDS
21C1 ; [*05CA.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWNWARDS
21C2 ; [*05CB.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHTWARDS
21C3 ; [*05CC.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFTWARDS
21C4 ; [*05CD.0020.0002] # RIGHTWARDS ARROW OVER LEFTWARDS ARROW
21C5 ; [*05CE.0020.0002] # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
21C6 ; [*05CF.0020.0002] # LEFTWARDS ARROW OVER RIGHTWARDS ARROW
21C7 ; [*05D0.0020.0002] # LEFTWARDS PAIRED ARROWS
21C8 ; [*05D1.0020.0002] # UPWARDS PAIRED ARROWS
21C9 ; [*05D2.0020.0002] # RIGHTWARDS PAIRED ARROWS
21CA ; [*05D3.0020.0002] # DOWNWARDS PAIRED ARROWS
21CB ; [*05D4.0020.0002] # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
21CC ; [*05D5.0020.0002] # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
21CD ; [*05D6.0020.0002][.0000.002F.0002] # LEFTWARDS DOUBLE ARROW WITH STROKE
21CE ; [*05DA.0020.0002][.0000.002F.0002] # LEFT RIGHT DOUBLE ARROW WITH STROKE
21CF ; [*05D8.0020.0002][.0000.002F.0002] # RIGHTWARDS DOUBLE ARROW WITH STROKE
21D0 ; [*05D6.0020.0002] # LEFTWARDS DOUBLE ARROW
21D1 ; [*05D7.0020.0002] # UPWARDS DOUBLE ARROW
21D2 ; [*05D8.0020.0002] # RIGHTWARDS DOUBLE ARROW
21D3 ; [*05D9.0020.0002] # DOWNWARDS DOUBLE ARROW
21D4 ; [*05DA.0020.0002] # LEFT RIGHT DOUBLE ARROW
21D5 ; [*05DB.0020.0002] # UP DOWN DOUBLE ARROW
21D6 ; [*05DC.0020.0002] # NORTH WEST DOUBLE ARROW
21D7 ; [*05DD.0020.0002] # NORTH EAST DOUBLE ARROW
21D8 ; [*05DE.0020.0002] # SOUTH EAST DOUBLE ARROW
21D9 ; [*05DF.0020.0002] # SOUTH WEST DOUBLE ARROW
21DA ; [*05E0.0020.0002] # LEFTWARDS TRIPLE ARROW
21DB ; [*05E1.0020.0002] # RIGHTWARDS TRIPLE ARROW
21DC ; [*05E2.0020.0002] # LEFTWARDS SQUIGGLE ARROW
21DD ; [*05E3.0020.0002] # RIGHTWARDS SQUIGGLE ARROW
21DE ; [*05E4.0020.0002] # UPWARDS ARROW WITH DOUBLE STROKE
21DF ; [*05E5.0020.0002] # DOWNWARDS ARROW WITH DOUBLE STROKE
21E0 ; [*05E6.0020.0002] # LEFTWARDS DASHED ARROW
21E1 ; [*05E7.0020.0002] # UPWARDS DASHED ARROW
21E2 ; [*05E8.0020.0002] # RIGHTWARDS DASHED ARROW
21E3 ; [*05E9.0020.0002] # DOWNWARDS DASHED ARROW
21E4 ; [*05EA.0020.0002] # LEFTWARDS ARROW TO BAR
21E5 ; [*05EB.0020.0002] # RIGHTWARDS ARROW TO BAR
21E6 ; [*05EC.0020.0002] # LEFTWARDS WHITE ARROW
21E7 ; [*05ED.0020.0002] # UPWARDS WHITE ARROW
21E8 ; [*05EE.0020.0002] # RIGHTWARDS WHITE ARROW
21E9 ; [*05EF.0020.0002] # DOWNWARDS WHITE ARROW
21EA ; [*05F0.0020.0002] # UPWARDS WHITE ARROW FROM BAR
21EB ; [*05F1.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL
21EC ; [*05F2.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
21ED ; [*05F3.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
21EE ; [*05F4.0020.0002] # UPWARDS WHITE DOUBLE ARROW
21EF ; [*05F5.0020.0002] # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
21F0 ; [*05F6.0020.0002] # RIGHTWARDS WHITE ARROW FROM WALL
21F1 ; [*05F7.0020.0002] # NORTH WEST ARROW TO CORNER
21F2 ; [*05F8.0020.0002] # SOUTH EAST ARROW TO CORNER
21F3 ; [*05F9.0020.0002] # UP DOWN WHITE ARROW
21F4 ; [*05FA.0020.0002] # RIGHT ARROW WITH SMALL CIRCLE
21F5 ; [*05FB.0020.0002] # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
21F6 ; [*05FC.0020.0002] # THREE RIGHTWARDS ARROWS
21F7 ; [*05FD.0020.0002] # LEFTWARDS ARROW WITH VERTICAL STROKE
21F8 ; [*05FE.0020.0002] # RIGHTWARDS ARROW WITH VERTICAL STROKE
21F9 ; [*05FF.0020.0002] # LEFT RIGHT ARROW WITH VERTICAL STROKE
21FA ; [*0600.0020.0002] # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
21FB ; [*0601.0020.0002] # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
21FC ; [*0602.0020.0002] # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
21FD ; [*0603.0020.0002] # LEFTWARDS OPEN-HEADED ARROW
21FE ; [*0604.0020.0002] # RIGHTWARDS OPEN-HEADED ARROW
21FF ; [*0605.0020.0002] # LEFT RIGHT OPEN-HEADED ARROW
2200 ; [*0606.0020.0002] # FOR ALL
2201 ; [*0607.0020.0002] # COMPLEMENT
2202 ; [*0608.0020.0002] # PARTIAL DIFFERENTIAL
2203 ; [*0609.0020.0002] # THERE EXISTS
2204 ; [*0609.0020.0002][.0000.002F.0002] # THERE DOES NOT EXIST
2205 ; [*060A.0020.0002] # EMPTY SET
2206 ; [*060B.0020.0002] # INCREMENT
2207 ; [*060C.0020.0002] # NABLA
2208 ; [*060D.0020.0002] # ELEMENT OF
2209 ; [*060D.0020.0002][.0000.002F.0002] # NOT AN ELEMENT OF
220A ; [*060E.0020.0002] # SMALL ELEMENT OF
220B ; [*060F.0020.0002] # CONTAINS AS MEMBER
220C ; [*060F.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS MEMBER
220D ; [*0610.0020.0002] # SMALL CONTAINS AS MEMBER
220E ; [*0612.0020.0002] # END OF PROOF
220F ; [*0613.0020.0002] # N-ARY PRODUCT
2210 ; [*0614.0020.0002] # N-ARY COPRODUCT
2211 ; [*0615.0020.0002] # N-ARY SUMMATION
2212 ; [*0621.0020.0002] # MINUS SIGN
2213 ; [*0623.0020.0002] # MINUS-OR-PLUS SIGN
2214 ; [*0624.0020.0002] # DOT PLUS
2215 ; [*0625.0020.0002] # DIVISION SLASH
2216 ; [*0627.0020.0002] # SET MINUS
2217 ; [*0628.0020.0002] # ASTERISK OPERATOR
2218 ; [*0629.0020.0002] # RING OPERATOR
2219 ; [*062A.0020.0002] # BULLET OPERATOR
221A ; [*062B.0020.0002] # SQUARE ROOT
221B ; [*062C.0020.0002] # CUBE ROOT
221C ; [*062E.0020.0002] # FOURTH ROOT
221D ; [*0630.0020.0002] # PROPORTIONAL TO
221E ; [*0631.0020.0002] # INFINITY
221F ; [*0632.0020.0002] # RIGHT ANGLE
2220 ; [*0633.0020.0002] # ANGLE
2221 ; [*0634.0020.0002] # MEASURED ANGLE
2222 ; [*0635.0020.0002] # SPHERICAL ANGLE
2223 ; [*0636.0020.0002] # DIVIDES
2224 ; [*0636.0020.0002][.0000.002F.0002] # DOES NOT DIVIDE
2225 ; [*0637.0020.0002] # PARALLEL TO
2226 ; [*0637.0020.0002][.0000.002F.0002] # NOT PARALLEL TO
2227 ; [*0638.0020.0002] # LOGICAL AND
2228 ; [*0639.0020.0002] # LOGICAL OR
2229 ; [*063A.0020.0002] # INTERSECTION
222A ; [*063B.0020.0002] # UNION
222B ; [*063C.0020.0002] # INTEGRAL
222C ; [*063C.0020.0004][*063C.0020.0004] # DOUBLE INTEGRAL
222D ; [*063C.0020.0004][*063C.0020.0004][*063C.0020.0004] # TRIPLE INTEGRAL
222E ; [*063D.0020.0002] # CONTOUR INTEGRAL
222F ; [*063D.0020.0004][*063D.0020.0004] # SURFACE INTEGRAL
2230 ; [*063D.0020.0004][*063D.0020.0004][*063D.0020.0004] # VOLUME INTEGRAL
2231 ; [*063E.0020.0002] # CLOCKWISE INTEGRAL
2232 ; [*063F.0020.0002] # CLOCKWISE CONTOUR INTEGRAL
2233 ; [*0640.0020.0002] # ANTICLOCKWISE CONTOUR INTEGRAL
2234 ; [*0641.0020.0002] # THEREFORE
2235 ; [*0642.0020.0002] # BECAUSE
2236 ; [*0643.0020.0002] # RATIO
2237 ; [*0644.0020.0002] # PROPORTION
2238 ; [*0645.0020.0002] # DOT MINUS
2239 ; [*0646.0020.0002] # EXCESS
223A ; [*0647.0020.0002] # GEOMETRIC PROPORTION
223B ; [*0648.0020.0002] # HOMOTHETIC
223C ; [*0649.0020.0002] # TILDE OPERATOR
223D ; [*064A.0020.0002] # REVERSED TILDE
223E ; [*064B.0020.0002] # INVERTED LAZY S
223F ; [*064C.0020.0002] # SINE WAVE
2240 ; [*064D.0020.0002] # WREATH PRODUCT
2241 ; [*0649.0020.0002][.0000.002F.0002] # NOT TILDE
2242 ; [*064E.0020.0002] # MINUS TILDE
2243 ; [*064F.0020.0002] # ASYMPTOTICALLY EQUAL TO
2244 ; [*064F.0020.0002][.0000.002F.0002] # NOT ASYMPTOTICALLY EQUAL TO
2245 ; [*0650.0020.0002] # APPROXIMATELY EQUAL TO
2246 ; [*0651.0020.0002] # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
2247 ; [*0650.0020.0002][.0000.002F.0002] # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
2248 ; [*0652.0020.0002] # ALMOST EQUAL TO
2249 ; [*0652.0020.0002][.0000.002F.0002] # NOT ALMOST EQUAL TO
224A ; [*0653.0020.0002] # ALMOST EQUAL OR EQUAL TO
224B ; [*0654.0020.0002] # TRIPLE TILDE
224C ; [*0655.0020.0002] # ALL EQUAL TO
224D ; [*0656.0020.0002] # EQUIVALENT TO
224E ; [*0657.0020.0002] # GEOMETRICALLY EQUIVALENT TO
224F ; [*0658.0020.0002] # DIFFERENCE BETWEEN
2250 ; [*0659.0020.0002] # APPROACHES THE LIMIT
2251 ; [*065A.0020.0002] # GEOMETRICALLY EQUAL TO
2252 ; [*065B.0020.0002] # APPROXIMATELY EQUAL TO OR THE IMAGE OF
2253 ; [*065C.0020.0002] # IMAGE OF OR APPROXIMATELY EQUAL TO
2254 ; [*065D.0020.0002] # COLON EQUALS
2255 ; [*065E.0020.0002] # EQUALS COLON
2256 ; [*065F.0020.0002] # RING IN EQUAL TO
2257 ; [*0660.0020.0002] # RING EQUAL TO
2258 ; [*0661.0020.0002] # CORRESPONDS TO
2259 ; [*0662.0020.0002] # ESTIMATES
225A ; [*0663.0020.0002] # EQUIANGULAR TO
225B ; [*0664.0020.0002] # STAR EQUALS
225C ; [*0665.0020.0002] # DELTA EQUAL TO
225D ; [*0666.0020.0002] # EQUAL TO BY DEFINITION
225E ; [*0667.0020.0002] # MEASURED BY
225F ; [*0668.0020.0002] # QUESTIONED EQUAL TO
2260 ; [*061B.0020.0002][.0000.002F.0002] # NOT EQUAL TO
2261 ; [*0669.0020.0002] # IDENTICAL TO
2262 ; [*0669.0020.0002][.0000.002F.0002] # NOT IDENTICAL TO
2263 ; [*066A.0020.0002] # STRICTLY EQUIVALENT TO
2264 ; [*066B.0020.0002] # LESS-THAN OR EQUAL TO
2265 ; [*066C.0020.0002] # GREATER-THAN OR EQUAL TO
2266 ; [*066D.0020.0002] # LESS-THAN OVER EQUAL TO
2267 ; [*066E.0020.0002] # GREATER-THAN OVER EQUAL TO
2268 ; [*066F.0020.0002] # LESS-THAN BUT NOT EQUAL TO
2269 ; [*0670.0020.0002] # GREATER-THAN BUT NOT EQUAL TO
226A ; [*0671.0020.0002] # MUCH LESS-THAN
226B ; [*0672.0020.0002] # MUCH GREATER-THAN
226C ; [*0673.0020.0002] # BETWEEN
226D ; [*0656.0020.0002][.0000.002F.0002] # NOT EQUIVALENT TO
226E ; [*061A.0020.0002][.0000.002F.0002] # NOT LESS-THAN
226F ; [*061C.0020.0002][.0000.002F.0002] # NOT GREATER-THAN
2270 ; [*066B.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUAL TO
2271 ; [*066C.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUAL TO
2272 ; [*0674.0020.0002] # LESS-THAN OR EQUIVALENT TO
2273 ; [*0675.0020.0002] # GREATER-THAN OR EQUIVALENT TO
2274 ; [*0674.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUIVALENT TO
2275 ; [*0675.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUIVALENT TO
2276 ; [*0676.0020.0002] # LESS-THAN OR GREATER-THAN
2277 ; [*0677.0020.0002] # GREATER-THAN OR LESS-THAN
2278 ; [*0676.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR GREATER-THAN
2279 ; [*0677.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR LESS-THAN
227A ; [*0678.0020.0002] # PRECEDES
227B ; [*0679.0020.0002] # SUCCEEDS
227C ; [*067A.0020.0002] # PRECEDES OR EQUAL TO
227D ; [*067B.0020.0002] # SUCCEEDS OR EQUAL TO
227E ; [*067C.0020.0002] # PRECEDES OR EQUIVALENT TO
227F ; [*067D.0020.0002] # SUCCEEDS OR EQUIVALENT TO
2280 ; [*0678.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE
2281 ; [*0679.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED
2282 ; [*067E.0020.0002] # SUBSET OF
2283 ; [*067F.0020.0002] # SUPERSET OF
2284 ; [*067E.0020.0002][.0000.002F.0002] # NOT A SUBSET OF
2285 ; [*067F.0020.0002][.0000.002F.0002] # NOT A SUPERSET OF
2286 ; [*0680.0020.0002] # SUBSET OF OR EQUAL TO
2287 ; [*0681.0020.0002] # SUPERSET OF OR EQUAL TO
2288 ; [*0680.0020.0002][.0000.002F.0002] # NEITHER A SUBSET OF NOR EQUAL TO
2289 ; [*0681.0020.0002][.0000.002F.0002] # NEITHER A SUPERSET OF NOR EQUAL TO
228A ; [*0682.0020.0002] # SUBSET OF WITH NOT EQUAL TO
228B ; [*0683.0020.0002] # SUPERSET OF WITH NOT EQUAL TO
228C ; [*0684.0020.0002] # MULTISET
228D ; [*0685.0020.0002] # MULTISET MULTIPLICATION
228E ; [*0686.0020.0002] # MULTISET UNION
228F ; [*0687.0020.0002] # SQUARE IMAGE OF
2290 ; [*0688.0020.0002] # SQUARE ORIGINAL OF
2291 ; [*0689.0020.0002] # SQUARE IMAGE OF OR EQUAL TO
2292 ; [*068A.0020.0002] # SQUARE ORIGINAL OF OR EQUAL TO
2293 ; [*068B.0020.0002] # SQUARE CAP
2294 ; [*068C.0020.0002] # SQUARE CUP
2295 ; [*068D.0020.0002] # CIRCLED PLUS
2296 ; [*068E.0020.0002] # CIRCLED MINUS
2297 ; [*068F.0020.0002] # CIRCLED TIMES
2298 ; [*0690.0020.0002] # CIRCLED DIVISION SLASH
2299 ; [*0691.0020.0002] # CIRCLED DOT OPERATOR
229A ; [*0692.0020.0002] # CIRCLED RING OPERATOR
229B ; [*0693.0020.0002] # CIRCLED ASTERISK OPERATOR
229C ; [*0694.0020.0002] # CIRCLED EQUALS
229D ; [*0695.0020.0002] # CIRCLED DASH
229E ; [*0696.0020.0002] # SQUARED PLUS
229F ; [*0697.0020.0002] # SQUARED MINUS
22A0 ; [*0698.0020.0002] # SQUARED TIMES
22A1 ; [*0699.0020.0002] # SQUARED DOT OPERATOR
22A2 ; [*069A.0020.0002] # RIGHT TACK
22A3 ; [*069B.0020.0002] # LEFT TACK
22A4 ; [*069C.0020.0002] # DOWN TACK
22A5 ; [*069D.0020.0002] # UP TACK
22A6 ; [*069E.0020.0002] # ASSERTION
22A7 ; [*069F.0020.0002] # MODELS
22A8 ; [*06A0.0020.0002] # TRUE
22A9 ; [*06A1.0020.0002] # FORCES
22AA ; [*06A2.0020.0002] # TRIPLE VERTICAL BAR RIGHT TURNSTILE
22AB ; [*06A3.0020.0002] # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
22AC ; [*069A.0020.0002][.0000.002F.0002] # DOES NOT PROVE
22AD ; [*06A0.0020.0002][.0000.002F.0002] # NOT TRUE
22AE ; [*06A1.0020.0002][.0000.002F.0002] # DOES NOT FORCE
22AF ; [*06A3.0020.0002][.0000.002F.0002] # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
22B0 ; [*06A4.0020.0002] # PRECEDES UNDER RELATION
22B1 ; [*06A5.0020.0002] # SUCCEEDS UNDER RELATION
22B2 ; [*06A6.0020.0002] # NORMAL SUBGROUP OF
22B3 ; [*06A7.0020.0002] # CONTAINS AS NORMAL SUBGROUP
22B4 ; [*06A8.0020.0002] # NORMAL SUBGROUP OF OR EQUAL TO
22B5 ; [*06A9.0020.0002] # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
22B6 ; [*06AA.0020.0002] # ORIGINAL OF
22B7 ; [*06AB.0020.0002] # IMAGE OF
22B8 ; [*06AC.0020.0002] # MULTIMAP
22B9 ; [*06AD.0020.0002] # HERMITIAN CONJUGATE MATRIX
22BA ; [*06AE.0020.0002] # INTERCALATE
22BB ; [*06AF.0020.0002] # XOR
22BC ; [*06B0.0020.0002] # NAND
22BD ; [*06B2.0020.0002] # NOR
22BE ; [*06B3.0020.0002] # RIGHT ANGLE WITH ARC
22BF ; [*06B4.0020.0002] # RIGHT TRIANGLE
22C0 ; [*06B5.0020.0002] # N-ARY LOGICAL AND
22C1 ; [*06B6.0020.0002] # N-ARY LOGICAL OR
22C2 ; [*06B7.0020.0002] # N-ARY INTERSECTION
22C3 ; [*06B8.0020.0002] # N-ARY UNION
22C4 ; [*06B9.0020.0002] # DIAMOND OPERATOR
22C5 ; [*06BA.0020.0002] # DOT OPERATOR
22C6 ; [*06BB.0020.0002] # STAR OPERATOR
22C7 ; [*06BC.0020.0002] # DIVISION TIMES
22C8 ; [*06BD.0020.0002] # BOWTIE
22C9 ; [*06BE.0020.0002] # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
22CA ; [*06BF.0020.0002] # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
22CB ; [*06C0.0020.0002] # LEFT SEMIDIRECT PRODUCT
22CC ; [*06C1.0020.0002] # RIGHT SEMIDIRECT PRODUCT
22CD ; [*06C2.0020.0002] # REVERSED TILDE EQUALS
22CE ; [*06C3.0020.0002] # CURLY LOGICAL OR
22CF ; [*06C4.0020.0002] # CURLY LOGICAL AND
22D0 ; [*06C5.0020.0002] # DOUBLE SUBSET
22D1 ; [*06C6.0020.0002] # DOUBLE SUPERSET
22D2 ; [*06C7.0020.0002] # DOUBLE INTERSECTION
22D3 ; [*06C8.0020.0002] # DOUBLE UNION
22D4 ; [*06C9.0020.0002] # PITCHFORK
22D5 ; [*06CA.0020.0002] # EQUAL AND PARALLEL TO
22D6 ; [*06CB.0020.0002] # LESS-THAN WITH DOT
22D7 ; [*06CC.0020.0002] # GREATER-THAN WITH DOT
22D8 ; [*06CD.0020.0002] # VERY MUCH LESS-THAN
22D9 ; [*06CE.0020.0002] # VERY MUCH GREATER-THAN
22DA ; [*06CF.0020.0002] # LESS-THAN EQUAL TO OR GREATER-THAN
22DB ; [*06D0.0020.0002] # GREATER-THAN EQUAL TO OR LESS-THAN
22DC ; [*06D1.0020.0002] # EQUAL TO OR LESS-THAN
22DD ; [*06D2.0020.0002] # EQUAL TO OR GREATER-THAN
22DE ; [*06D3.0020.0002] # EQUAL TO OR PRECEDES
22DF ; [*06D4.0020.0002] # EQUAL TO OR SUCCEEDS
22E0 ; [*067A.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE OR EQUAL
22E1 ; [*067B.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED OR EQUAL
22E2 ; [*0689.0020.0002][.0000.002F.0002] # NOT SQUARE IMAGE OF OR EQUAL TO
22E3 ; [*068A.0020.0002][.0000.002F.0002] # NOT SQUARE ORIGINAL OF OR EQUAL TO
22E4 ; [*06D5.0020.0002] # SQUARE IMAGE OF OR NOT EQUAL TO
22E5 ; [*06D6.0020.0002] # SQUARE ORIGINAL OF OR NOT EQUAL TO
22E6 ; [*06D7.0020.0002] # LESS-THAN BUT NOT EQUIVALENT TO
22E7 ; [*06D8.0020.0002] # GREATER-THAN BUT NOT EQUIVALENT TO
22E8 ; [*06D9.0020.0002] # PRECEDES BUT NOT EQUIVALENT TO
22E9 ; [*06DA.0020.0002] # SUCCEEDS BUT NOT EQUIVALENT TO
22EA ; [*06A6.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF
22EB ; [*06A7.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP
22EC ; [*06A8.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF OR EQUAL TO
22ED ; [*06A9.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
22EE ; [*06DB.0020.0002] # VERTICAL ELLIPSIS
22EF ; [*06DC.0020.0002] # MIDLINE HORIZONTAL ELLIPSIS
22F0 ; [*06DD.0020.0002] # UP RIGHT DIAGONAL ELLIPSIS
22F1 ; [*06DE.0020.0002] # DOWN RIGHT DIAGONAL ELLIPSIS
22F2 ; [*06DF.0020.0002] # ELEMENT OF WITH LONG HORIZONTAL STROKE
22F3 ; [*06E0.0020.0002] # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22F4 ; [*06E1.0020.0002] # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22F5 ; [*06E2.0020.0002] # ELEMENT OF WITH DOT ABOVE
22F6 ; [*06E3.0020.0002] # ELEMENT OF WITH OVERBAR
22F7 ; [*06E4.0020.0002] # SMALL ELEMENT OF WITH OVERBAR
22F8 ; [*06E5.0020.0002] # ELEMENT OF WITH UNDERBAR
22F9 ; [*06E6.0020.0002] # ELEMENT OF WITH TWO HORIZONTAL STROKES
22FA ; [*06E7.0020.0002] # CONTAINS WITH LONG HORIZONTAL STROKE
22FB ; [*06E8.0020.0002] # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22FC ; [*06E9.0020.0002] # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22FD ; [*06EA.0020.0002] # CONTAINS WITH OVERBAR
22FE ; [*06EB.0020.0002] # SMALL CONTAINS WITH OVERBAR
22FF ; [*06EC.0020.0002] # Z NOTATION BAG MEMBERSHIP
2300 ; [*06ED.0020.0002] # DIAMETER SIGN
2301 ; [*06EE.0020.0002] # ELECTRIC ARROW
2302 ; [*06EF.0020.0002] # HOUSE
2303 ; [*06F0.0020.0002] # UP ARROWHEAD
2304 ; [*06F1.0020.0002] # DOWN ARROWHEAD
2305 ; [*06F2.0020.0002] # PROJECTIVE
2306 ; [*06F3.0020.0002] # PERSPECTIVE
2307 ; [*06F4.0020.0002] # WAVY LINE
2308 ; [*0325.0020.0002] # LEFT CEILING
2309 ; [*0326.0020.0002] # RIGHT CEILING
230A ; [*0327.0020.0002] # LEFT FLOOR
230B ; [*0328.0020.0002] # RIGHT FLOOR
230C ; [*06F5.0020.0002] # BOTTOM RIGHT CROP
230D ; [*06F6.0020.0002] # BOTTOM LEFT CROP
230E ; [*06F7.0020.0002] # TOP RIGHT CROP
230F ; [*06F8.0020.0002] # TOP LEFT CROP
2310 ; [*06F9.0020.0002] # REVERSED NOT SIGN
2311 ; [*06FA.0020.0002] # SQUARE LOZENGE
2312 ; [*06FB.0020.0002] # ARC
2313 ; [*06FC.0020.0002] # SEGMENT
2314 ; [*06FD.0020.0002] # SECTOR
2315 ; [*06FE.0020.0002] # TELEPHONE RECORDER
2316 ; [*06FF.0020.0002] # POSITION INDICATOR
2317 ; [*0700.0020.0002] # VIEWDATA SQUARE
2318 ; [*0701.0020.0002] # PLACE OF INTEREST SIGN
2319 ; [*0702.0020.0002] # TURNED NOT SIGN
231A ; [*0703.0020.0002] # WATCH
231B ; [*0704.0020.0002] # HOURGLASS
231C ; [*0705.0020.0002] # TOP LEFT CORNER
231D ; [*0706.0020.0002] # TOP RIGHT CORNER
231E ; [*0707.0020.0002] # BOTTOM LEFT CORNER
231F ; [*0708.0020.0002] # BOTTOM RIGHT CORNER
2320 ; [*0709.0020.0002] # TOP HALF INTEGRAL
2321 ; [*070A.0020.0002] # BOTTOM HALF INTEGRAL
2322 ; [*070B.0020.0002] # FROWN
2323 ; [*070C.0020.0002] # SMILE
2324 ; [*070D.0020.0002] # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
2325 ; [*070E.0020.0002] # OPTION KEY
2326 ; [*070F.0020.0002] # ERASE TO THE RIGHT
2327 ; [*0710.0020.0002] # X IN A RECTANGLE BOX
2328 ; [*0711.0020.0002] # KEYBOARD
2329 ; [*036F.0020.0002] # LEFT-POINTING ANGLE BRACKET
232A ; [*0370.0020.0002] # RIGHT-POINTING ANGLE BRACKET
232B ; [*0712.0020.0002] # ERASE TO THE LEFT
232C ; [*0713.0020.0002] # BENZENE RING
232D ; [*0714.0020.0002] # CYLINDRICITY
232E ; [*0715.0020.0002] # ALL AROUND-PROFILE
232F ; [*0716.0020.0002] # SYMMETRY
2330 ; [*0717.0020.0002] # TOTAL RUNOUT
2331 ; [*0718.0020.0002] # DIMENSION ORIGIN
2332 ; [*0719.0020.0002] # CONICAL TAPER
2333 ; [*071A.0020.0002] # SLOPE
2334 ; [*071B.0020.0002] # COUNTERBORE
2335 ; [*071C.0020.0002] # COUNTERSINK
2336 ; [*071D.0020.0002] # APL FUNCTIONAL SYMBOL I-BEAM
2337 ; [*071E.0020.0002] # APL FUNCTIONAL SYMBOL SQUISH QUAD
2338 ; [*071F.0020.0002] # APL FUNCTIONAL SYMBOL QUAD EQUAL
2339 ; [*0720.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIVIDE
233A ; [*0721.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIAMOND
233B ; [*0722.0020.0002] # APL FUNCTIONAL SYMBOL QUAD JOT
233C ; [*0723.0020.0002] # APL FUNCTIONAL SYMBOL QUAD CIRCLE
233D ; [*0724.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STILE
233E ; [*0725.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE JOT
233F ; [*0726.0020.0002] # APL FUNCTIONAL SYMBOL SLASH BAR
2340 ; [*0727.0020.0002] # APL FUNCTIONAL SYMBOL BACKSLASH BAR
2341 ; [*0728.0020.0002] # APL FUNCTIONAL SYMBOL QUAD SLASH
2342 ; [*0729.0020.0002] # APL FUNCTIONAL SYMBOL QUAD BACKSLASH
2343 ; [*072A.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LESS-THAN
2344 ; [*072B.0020.0002] # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
2345 ; [*072C.0020.0002] # APL FUNCTIONAL SYMBOL LEFTWARDS VANE
2346 ; [*072D.0020.0002] # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
2347 ; [*072E.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
2348 ; [*072F.0020.0002] # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
2349 ; [*0730.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
234A ; [*0731.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
234B ; [*0732.0020.0002] # APL FUNCTIONAL SYMBOL DELTA STILE
234C ; [*0733.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWN CARET
234D ; [*0734.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DELTA
234E ; [*0735.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK JOT
234F ; [*0736.0020.0002] # APL FUNCTIONAL SYMBOL UPWARDS VANE
2350 ; [*0737.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
2351 ; [*0738.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK OVERBAR
2352 ; [*0739.0020.0002] # APL FUNCTIONAL SYMBOL DEL STILE
2353 ; [*073A.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UP CARET
2354 ; [*073B.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DEL
2355 ; [*073C.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK JOT
2356 ; [*073D.0020.0002] # APL FUNCTIONAL SYMBOL DOWNWARDS VANE
2357 ; [*073E.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
2358 ; [*073F.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
2359 ; [*0740.0020.0002] # APL FUNCTIONAL SYMBOL DELTA UNDERBAR
235A ; [*0741.0020.0002] # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
235B ; [*0742.0020.0002] # APL FUNCTIONAL SYMBOL JOT UNDERBAR
235C ; [*0743.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
235D ; [*0744.0020.0002] # APL FUNCTIONAL SYMBOL UP SHOE JOT
235E ; [*0745.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE QUAD
235F ; [*0746.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STAR
2360 ; [*0747.0020.0002] # APL FUNCTIONAL SYMBOL QUAD COLON
2361 ; [*0748.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
2362 ; [*0749.0020.0002] # APL FUNCTIONAL SYMBOL DEL DIAERESIS
2363 ; [*074A.0020.0002] # APL FUNCTIONAL SYMBOL STAR DIAERESIS
2364 ; [*074B.0020.0002] # APL FUNCTIONAL SYMBOL JOT DIAERESIS
2365 ; [*074C.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
2366 ; [*074D.0020.0002] # APL FUNCTIONAL SYMBOL DOWN SHOE STILE
2367 ; [*074E.0020.0002] # APL FUNCTIONAL SYMBOL LEFT SHOE STILE
2368 ; [*074F.0020.0002] # APL FUNCTIONAL SYMBOL TILDE DIAERESIS
2369 ; [*0750.0020.0002] # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
236A ; [*0751.0020.0002] # APL FUNCTIONAL SYMBOL COMMA BAR
236B ; [*0752.0020.0002] # APL FUNCTIONAL SYMBOL DEL TILDE
236C ; [*0753.0020.0002] # APL FUNCTIONAL SYMBOL ZILDE
236D ; [*0754.0020.0002] # APL FUNCTIONAL SYMBOL STILE TILDE
236E ; [*0755.0020.0002] # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
236F ; [*0756.0020.0002] # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
2370 ; [*0757.0020.0002] # APL FUNCTIONAL SYMBOL QUAD QUESTION
2371 ; [*0758.0020.0002] # APL FUNCTIONAL SYMBOL DOWN CARET TILDE
2372 ; [*0759.0020.0002] # APL FUNCTIONAL SYMBOL UP CARET TILDE
2373 ; [*075A.0020.0002] # APL FUNCTIONAL SYMBOL IOTA
2374 ; [*075B.0020.0002] # APL FUNCTIONAL SYMBOL RHO
2375 ; [*075C.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA
2376 ; [*075D.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
2377 ; [*075E.0020.0002] # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
2378 ; [*075F.0020.0002] # APL FUNCTIONAL SYMBOL IOTA UNDERBAR
2379 ; [*0760.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
237A ; [*0761.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA
237B ; [*0762.0020.0002] # NOT CHECK MARK
237C ; [*0763.0020.0002] # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
237D ; [*0764.0020.0002] # SHOULDERED OPEN BOX
237E ; [*0765.0020.0002] # BELL SYMBOL
237F ; [*0766.0020.0002] # VERTICAL LINE WITH MIDDLE DOT
2380 ; [*0767.0020.0002] # INSERTION SYMBOL
2381 ; [*0768.0020.0002] # CONTINUOUS UNDERLINE SYMBOL
2382 ; [*0769.0020.0002] # DISCONTINUOUS UNDERLINE SYMBOL
2383 ; [*076A.0020.0002] # EMPHASIS SYMBOL
2384 ; [*076B.0020.0002] # COMPOSITION SYMBOL
2385 ; [*076C.0020.0002] # WHITE SQUARE WITH CENTRE VERTICAL LINE
2386 ; [*076D.0020.0002] # ENTER SYMBOL
2387 ; [*076E.0020.0002] # ALTERNATIVE KEY SYMBOL
2388 ; [*076F.0020.0002] # HELM SYMBOL
2389 ; [*0770.0020.0002] # CIRCLED HORIZONTAL BAR WITH NOTCH
238A ; [*0771.0020.0002] # CIRCLED TRIANGLE DOWN
238B ; [*0772.0020.0002] # BROKEN CIRCLE WITH NORTHWEST ARROW
238C ; [*0773.0020.0002] # UNDO SYMBOL
238D ; [*0774.0020.0002] # MONOSTABLE SYMBOL
238E ; [*0775.0020.0002] # HYSTERESIS SYMBOL
238F ; [*0776.0020.0002] # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
2390 ; [*0777.0020.0002] # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
2391 ; [*0778.0020.0002] # PASSIVE-PULL-DOWN-OUTPUT SYMBOL
2392 ; [*0779.0020.0002] # PASSIVE-PULL-UP-OUTPUT SYMBOL
2393 ; [*077A.0020.0002] # DIRECT CURRENT SYMBOL FORM TWO
2394 ; [*077B.0020.0002] # SOFTWARE-FUNCTION SYMBOL
2395 ; [*077C.0020.0002] # APL FUNCTIONAL SYMBOL QUAD
2396 ; [*077D.0020.0002] # DECIMAL SEPARATOR KEY SYMBOL
2397 ; [*077E.0020.0002] # PREVIOUS PAGE
2398 ; [*077F.0020.0002] # NEXT PAGE
2399 ; [*0780.0020.0002] # PRINT SCREEN SYMBOL
239A ; [*0781.0020.0002] # CLEAR SCREEN SYMBOL
239B ; [*0782.0020.0002] # LEFT PARENTHESIS UPPER HOOK
239C ; [*0783.0020.0002] # LEFT PARENTHESIS EXTENSION
239D ; [*0784.0020.0002] # LEFT PARENTHESIS LOWER HOOK
239E ; [*0785.0020.0002] # RIGHT PARENTHESIS UPPER HOOK
239F ; [*0786.0020.0002] # RIGHT PARENTHESIS EXTENSION
23A0 ; [*0787.0020.0002] # RIGHT PARENTHESIS LOWER HOOK
23A1 ; [*0788.0020.0002] # LEFT SQUARE BRACKET UPPER CORNER
23A2 ; [*0789.0020.0002] # LEFT SQUARE BRACKET EXTENSION
23A3 ; [*078A.0020.0002] # LEFT SQUARE BRACKET LOWER CORNER
23A4 ; [*078B.0020.0002] # RIGHT SQUARE BRACKET UPPER CORNER
23A5 ; [*078C.0020.0002] # RIGHT SQUARE BRACKET EXTENSION
23A6 ; [*078D.0020.0002] # RIGHT SQUARE BRACKET LOWER CORNER
23A7 ; [*078E.0020.0002] # LEFT CURLY BRACKET UPPER HOOK
23A8 ; [*078F.0020.0002] # LEFT CURLY BRACKET MIDDLE PIECE
23A9 ; [*0790.0020.0002] # LEFT CURLY BRACKET LOWER HOOK
23AA ; [*0791.0020.0002] # CURLY BRACKET EXTENSION
23AB ; [*0792.0020.0002] # RIGHT CURLY BRACKET UPPER HOOK
23AC ; [*0793.0020.0002] # RIGHT CURLY BRACKET MIDDLE PIECE
23AD ; [*0794.0020.0002] # RIGHT CURLY BRACKET LOWER HOOK
23AE ; [*0795.0020.0002] # INTEGRAL EXTENSION
23AF ; [*0796.0020.0002] # HORIZONTAL LINE EXTENSION
23B0 ; [*0797.0020.0002] # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
23B1 ; [*0798.0020.0002] # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
23B2 ; [*0799.0020.0002] # SUMMATION TOP
23B3 ; [*079A.0020.0002] # SUMMATION BOTTOM
23B4 ; [*079B.0020.0002] # TOP SQUARE BRACKET
23B5 ; [*079C.0020.0002] # BOTTOM SQUARE BRACKET
23B6 ; [*079D.0020.0002] # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
23B7 ; [*079E.0020.0002] # RADICAL SYMBOL BOTTOM
23B8 ; [*079F.0020.0002] # LEFT VERTICAL BOX LINE
23B9 ; [*07A0.0020.0002] # RIGHT VERTICAL BOX LINE
23BA ; [*07A1.0020.0002] # HORIZONTAL SCAN LINE-1
23BB ; [*07A2.0020.0002] # HORIZONTAL SCAN LINE-3
23BC ; [*07A3.0020.0002] # HORIZONTAL SCAN LINE-7
23BD ; [*07A4.0020.0002] # HORIZONTAL SCAN LINE-9
23BE ; [*07A5.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
23BF ; [*07A6.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
23C0 ; [*07A7.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
23C1 ; [*07A8.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
23C2 ; [*07A9.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
23C3 ; [*07AA.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
23C4 ; [*07AB.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
23C5 ; [*07AC.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
23C6 ; [*07AD.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
23C7 ; [*07AE.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
23C8 ; [*07AF.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
23C9 ; [*07B0.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
23CA ; [*07B1.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
23CB ; [*07B2.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
23CC ; [*07B3.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
23CD ; [*07B4.0020.0002] # SQUARE FOOT
23CE ; [*07B5.0020.0002] # RETURN SYMBOL
23CF ; [*07B6.0020.0002] # EJECT SYMBOL
23D0 ; [*07B7.0020.0002] # VERTICAL LINE EXTENSION
23D1 ; [*07B8.0020.0002] # METRICAL BREVE
23D2 ; [*07B9.0020.0002] # METRICAL LONG OVER SHORT
23D3 ; [*07BA.0020.0002] # METRICAL SHORT OVER LONG
23D4 ; [*07BB.0020.0002] # METRICAL LONG OVER TWO SHORTS
23D5 ; [*07BC.0020.0002] # METRICAL TWO SHORTS OVER LONG
23D6 ; [*07BD.0020.0002] # METRICAL TWO SHORTS JOINED
23D7 ; [*07BE.0020.0002] # METRICAL TRISEME
23D8 ; [*07BF.0020.0002] # METRICAL TETRASEME
23D9 ; [*07C0.0020.0002] # METRICAL PENTASEME
23DA ; [*07C1.0020.0002] # EARTH GROUND
23DB ; [*07C2.0020.0002] # FUSE
23DC ; [*07C3.0020.0002] # TOP PARENTHESIS
23DD ; [*07C4.0020.0002] # BOTTOM PARENTHESIS
23DE ; [*07C5.0020.0002] # TOP CURLY BRACKET
23DF ; [*07C6.0020.0002] # BOTTOM CURLY BRACKET
23E0 ; [*07C7.0020.0002] # TOP TORTOISE SHELL BRACKET
23E1 ; [*07C8.0020.0002] # BOTTOM TORTOISE SHELL BRACKET
23E2 ; [*07C9.0020.0002] # WHITE TRAPEZIUM
23E3 ; [*07CA.0020.0002] # BENZENE RING WITH CIRCLE
23E4 ; [*07CB.0020.0002] # STRAIGHTNESS
23E5 ; [*07CC.0020.0002] # FLATNESS
23E6 ; [*07CD.0020.0002] # AC CURRENT
23E7 ; [*07CE.0020.0002] # ELECTRICAL INTERSECTION
23E8 ; [*07CF.0020.0002] # DECIMAL EXPONENT SYMBOL
23E9 ; [*07D0.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE
23EA ; [*07D1.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE
23EB ; [*07D2.0020.0002] # BLACK UP-POINTING DOUBLE TRIANGLE
23EC ; [*07D3.0020.0002] # BLACK DOWN-POINTING DOUBLE TRIANGLE
23ED ; [*07D4.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
23EE ; [*07D5.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
23EF ; [*07D6.0020.0002] # BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
23F0 ; [*07D7.0020.0002] # ALARM CLOCK
23F1 ; [*07D8.0020.0002] # STOPWATCH
23F2 ; [*07D9.0020.0002] # TIMER CLOCK
23F3 ; [*07DA.0020.0002] # HOURGLASS WITH FLOWING SAND
23F4 ; [*07DB.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE
23F5 ; [*07DC.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE
23F6 ; [*07DD.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE
23F7 ; [*07DE.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE
23F8 ; [*07DF.0020.0002] # DOUBLE VERTICAL BAR
23F9 ; [*07E0.0020.0002] # BLACK SQUARE FOR STOP
23FA ; [*07E1.0020.0002] # BLACK CIRCLE FOR RECORD
23FB ; [*07E2.0020.0002] # POWER SYMBOL
23FC ; [*07E3.0020.0002] # POWER ON-OFF SYMBOL
23FD ; [*07E4.0020.0002] # POWER ON SYMBOL
23FE ; [*07E5.0020.0002] # POWER SLEEP SYMBOL
2400 ; [*07E6.0020.0002] # SYMBOL FOR NULL
2401 ; [*07E7.0020.0002] # SYMBOL FOR START OF HEADING
2402 ; [*07E8.0020.0002] # SYMBOL FOR START OF TEXT
2403 ; [*07E9.0020.0002] # SYMBOL FOR END OF TEXT
2404 ; [*07EA.0020.0002] # SYMBOL FOR END OF TRANSMISSION
2405 ; [*07EB.0020.0002] # SYMBOL FOR ENQUIRY
2406 ; [*07EC.0020.0002] # SYMBOL FOR ACKNOWLEDGE
2407 ; [*07ED.0020.0002] # SYMBOL FOR BELL
2408 ; [*07EE.0020.0002] # SYMBOL FOR BACKSPACE
2409 ; [*07EF.0020.0002] # SYMBOL FOR HORIZONTAL TABULATION
240A ; [*07F0.0020.0002] # SYMBOL FOR LINE FEED
240B ; [*07F1.0020.0002] # SYMBOL FOR VERTICAL TABULATION
240C ; [*07F2.0020.0002] # SYMBOL FOR FORM FEED
240D ; [*07F3.0020.0002] # SYMBOL FOR CARRIAGE RETURN
240E ; [*07F4.0020.0002] # SYMBOL FOR SHIFT OUT
240F ; [*07F5.0020.0002] # SYMBOL FOR SHIFT IN
2410 ; [*07F6.0020.0002] # SYMBOL FOR DATA LINK ESCAPE
2411 ; [*07F7.0020.0002] # SYMBOL FOR DEVICE CONTROL ONE
2412 ; [*07F8.0020.0002] # SYMBOL FOR DEVICE CONTROL TWO
2413 ; [*07F9.0020.0002] # SYMBOL FOR DEVICE CONTROL THREE
2414 ; [*07FA.0020.0002] # SYMBOL FOR DEVICE CONTROL FOUR
2415 ; [*07FB.0020.0002] # SYMBOL FOR NEGATIVE ACKNOWLEDGE
2416 ; [*07FC.0020.0002] # SYMBOL FOR SYNCHRONOUS IDLE
2417 ; [*07FD.0020.0002] # SYMBOL FOR END OF TRANSMISSION BLOCK
2418 ; [*07FE.0020.0002] # SYMBOL FOR CANCEL
2419 ; [*07FF.0020.0002] # SYMBOL FOR END OF MEDIUM
241A ; [*0800.0020.0002] # SYMBOL FOR SUBSTITUTE
241B ; [*0801.0020.0002] # SYMBOL FOR ESCAPE
241C ; [*0802.0020.0002] # SYMBOL FOR FILE SEPARATOR
241D ; [*0803.0020.0002] # SYMBOL FOR GROUP SEPARATOR
241E ; [*0804.0020.0002] # SYMBOL FOR RECORD SEPARATOR
241F ; [*0805.0020.0002] # SYMBOL FOR UNIT SEPARATOR
2420 ; [*0806.0020.0002] # SYMBOL FOR SPACE
2421 ; [*0807.0020.0002] # SYMBOL FOR DELETE
2422 ; [*0808.0020.0002] # BLANK SYMBOL
2423 ; [*0809.0020.0002] # OPEN BOX
2424 ; [*080A.0020.0002] # SYMBOL FOR NEWLINE
2425 ; [*080B.0020.0002] # SYMBOL FOR DELETE FORM TWO
2426 ; [*080C.0020.0002] # SYMBOL FOR SUBSTITUTE FORM TWO
2440 ; [*080D.0020.0002] # OCR HOOK
2441 ; [*080E.0020.0002] # OCR CHAIR
2442 ; [*080F.0020.0002] # OCR FORK
2443 ; [*0810.0020.0002] # OCR INVERTED FORK
2444 ; [*0811.0020.0002] # OCR BELT BUCKLE
2445 ; [*0812.0020.0002] # OCR BOW TIE
2446 ; [*0813.0020.0002] # OCR BRANCH BANK IDENTIFICATION
2447 ; [*0814.0020.0002] # OCR AMOUNT OF CHECK
2448 ; [*0815.0020.0002] # OCR DASH
2449 ; [*0816.0020.0002] # OCR CUSTOMER ACCOUNT NUMBER
244A ; [*0817.0020.0002] # OCR DOUBLE BACKSLASH
2500 ; [*0818.0020.0002] # BOX DRAWINGS LIGHT HORIZONTAL
2501 ; [*0819.0020.0002] # BOX DRAWINGS HEAVY HORIZONTAL
2502 ; [*081A.0020.0002] # BOX DRAWINGS LIGHT VERTICAL
2503 ; [*081B.0020.0002] # BOX DRAWINGS HEAVY VERTICAL
2504 ; [*081C.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
2505 ; [*081D.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
2506 ; [*081E.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
2507 ; [*081F.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
2508 ; [*0820.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
2509 ; [*0821.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
250A ; [*0822.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
250B ; [*0823.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
250C ; [*0824.0020.0002] # BOX DRAWINGS LIGHT DOWN AND RIGHT
250D ; [*0825.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
250E ; [*0826.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
250F ; [*0827.0020.0002] # BOX DRAWINGS HEAVY DOWN AND RIGHT
2510 ; [*0828.0020.0002] # BOX DRAWINGS LIGHT DOWN AND LEFT
2511 ; [*0829.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
2512 ; [*082A.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
2513 ; [*082B.0020.0002] # BOX DRAWINGS HEAVY DOWN AND LEFT
2514 ; [*082C.0020.0002] # BOX DRAWINGS LIGHT UP AND RIGHT
2515 ; [*082D.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
2516 ; [*082E.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
2517 ; [*082F.0020.0002] # BOX DRAWINGS HEAVY UP AND RIGHT
2518 ; [*0830.0020.0002] # BOX DRAWINGS LIGHT UP AND LEFT
2519 ; [*0831.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT HEAVY
251A ; [*0832.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT LIGHT
251B ; [*0833.0020.0002] # BOX DRAWINGS HEAVY UP AND LEFT
251C ; [*0834.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
251D ; [*0835.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
251E ; [*0836.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
251F ; [*0837.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
2520 ; [*0838.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
2521 ; [*0839.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
2522 ; [*083A.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
2523 ; [*083B.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND RIGHT
2524 ; [*083C.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND LEFT
2525 ; [*083D.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
2526 ; [*083E.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
2527 ; [*083F.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
2528 ; [*0840.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
2529 ; [*0841.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
252A ; [*0842.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
252B ; [*0843.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND LEFT
252C ; [*0844.0020.0002] # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
252D ; [*0845.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
252E ; [*0846.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
252F ; [*0847.0020.0002] # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
2530 ; [*0848.0020.0002] # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
2531 ; [*0849.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
2532 ; [*084A.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
2533 ; [*084B.0020.0002] # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
2534 ; [*084C.0020.0002] # BOX DRAWINGS LIGHT UP AND HORIZONTAL
2535 ; [*084D.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
2536 ; [*084E.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
2537 ; [*084F.0020.0002] # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
2538 ; [*0850.0020.0002] # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
2539 ; [*0851.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
253A ; [*0852.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
253B ; [*0853.0020.0002] # BOX DRAWINGS HEAVY UP AND HORIZONTAL
253C ; [*0854.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
253D ; [*0855.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
253E ; [*0856.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
253F ; [*0857.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
2540 ; [*0858.0020.0002] # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
2541 ; [*0859.0020.0002] # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
2542 ; [*085A.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
2543 ; [*085B.0020.0002] # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
2544 ; [*085C.0020.0002] # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
2545 ; [*085D.0020.0002] # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
2546 ; [*085E.0020.0002] # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
2547 ; [*085F.0020.0002] # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
2548 ; [*0860.0020.0002] # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
2549 ; [*0861.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
254A ; [*0862.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
254B ; [*0863.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
254C ; [*0864.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
254D ; [*0865.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
254E ; [*0866.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
254F ; [*0867.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
2550 ; [*0868.0020.0002] # BOX DRAWINGS DOUBLE HORIZONTAL
2551 ; [*0869.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL
2552 ; [*086A.0020.0002] # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
2553 ; [*086B.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
2554 ; [*086C.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND RIGHT
2555 ; [*086D.0020.0002] # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
2556 ; [*086E.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
2557 ; [*086F.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND LEFT
2558 ; [*0870.0020.0002] # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
2559 ; [*0871.0020.0002] # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
255A ; [*0872.0020.0002] # BOX DRAWINGS DOUBLE UP AND RIGHT
255B ; [*0873.0020.0002] # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
255C ; [*0874.0020.0002] # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
255D ; [*0875.0020.0002] # BOX DRAWINGS DOUBLE UP AND LEFT
255E ; [*0876.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
255F ; [*0877.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
2560 ; [*0878.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
2561 ; [*0879.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
2562 ; [*087A.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
2563 ; [*087B.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
2564 ; [*087C.0020.0002] # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
2565 ; [*087D.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
2566 ; [*087E.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
2567 ; [*087F.0020.0002] # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
2568 ; [*0880.0020.0002] # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
2569 ; [*0881.0020.0002] # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
256A ; [*0882.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
256B ; [*0883.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
256C ; [*0884.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
256D ; [*0885.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
256E ; [*0886.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND LEFT
256F ; [*0887.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND LEFT
2570 ; [*0888.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND RIGHT
2571 ; [*0889.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
2572 ; [*088A.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
2573 ; [*088B.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL CROSS
2574 ; [*088C.0020.0002] # BOX DRAWINGS LIGHT LEFT
2575 ; [*088D.0020.0002] # BOX DRAWINGS LIGHT UP
2576 ; [*088E.0020.0002] # BOX DRAWINGS LIGHT RIGHT
2577 ; [*088F.0020.0002] # BOX DRAWINGS LIGHT DOWN
2578 ; [*0890.0020.0002] # BOX DRAWINGS HEAVY LEFT
2579 ; [*0891.0020.0002] # BOX DRAWINGS HEAVY UP
257A ; [*0892.0020.0002] # BOX DRAWINGS HEAVY RIGHT
257B ; [*0893.0020.0002] # BOX DRAWINGS HEAVY DOWN
257C ; [*0894.0020.0002] # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
257D ; [*0895.0020.0002] # BOX DRAWINGS LIGHT UP AND HEAVY DOWN
257E ; [*0896.0020.0002] # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
257F ; [*0897.0020.0002] # BOX DRAWINGS HEAVY UP AND LIGHT DOWN
2580 ; [*0898.0020.0002] # UPPER HALF BLOCK
2581 ; [*0899.0020.0002] # LOWER ONE EIGHTH BLOCK
2582 ; [*089A.0020.0002] # LOWER ONE QUARTER BLOCK
2583 ; [*089B.0020.0002] # LOWER THREE EIGHTHS BLOCK
2584 ; [*089C.0020.0002] # LOWER HALF BLOCK
2585 ; [*089D.0020.0002] # LOWER FIVE EIGHTHS BLOCK
2586 ; [*089E.0020.0002] # LOWER THREE QUARTERS BLOCK
2587 ; [*089F.0020.0002] # LOWER SEVEN EIGHTHS BLOCK
2588 ; [*08A0.0020.0002] # FULL BLOCK
2589 ; [*08A1.0020.0002] # LEFT SEVEN EIGHTHS BLOCK
258A ; [*08A2.0020.0002] # LEFT THREE QUARTERS BLOCK
258B ; [*08A3.0020.0002] # LEFT FIVE EIGHTHS BLOCK
258C ; [*08A4.0020.0002] # LEFT HALF BLOCK
258D ; [*08A5.0020.0002] # LEFT THREE EIGHTHS BLOCK
258E ; [*08A6.0020.0002] # LEFT ONE QUARTER BLOCK
258F ; [*08A7.0020.0002] # LEFT ONE EIGHTH BLOCK
2590 ; [*08A8.0020.0002] # RIGHT HALF BLOCK
2591 ; [*08A9.0020.0002] # LIGHT SHADE
2592 ; [*08AA.0020.0002] # MEDIUM SHADE
2593 ; [*08AB.0020.0002] # DARK SHADE
2594 ; [*08AC.0020.0002] # UPPER ONE EIGHTH BLOCK
2595 ; [*08AD.0020.0002] # RIGHT ONE EIGHTH BLOCK
2596 ; [*08AE.0020.0002] # QUADRANT LOWER LEFT
2597 ; [*08AF.0020.0002] # QUADRANT LOWER RIGHT
2598 ; [*08B0.0020.0002] # QUADRANT UPPER LEFT
2599 ; [*08B1.0020.0002] # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
259A ; [*08B2.0020.0002] # QUADRANT UPPER LEFT AND LOWER RIGHT
259B ; [*08B3.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
259C ; [*08B4.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
259D ; [*08B5.0020.0002] # QUADRANT UPPER RIGHT
259E ; [*08B6.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT
259F ; [*08B7.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
25A0 ; [*08B8.0020.0002] # BLACK SQUARE
25A1 ; [*08B9.0020.0002] # WHITE SQUARE
25A2 ; [*08BA.0020.0002] # WHITE SQUARE WITH ROUNDED CORNERS
25A3 ; [*08BB.0020.0002] # WHITE SQUARE CONTAINING BLACK SMALL SQUARE
25A4 ; [*08BC.0020.0002] # SQUARE WITH HORIZONTAL FILL
25A5 ; [*08BD.0020.0002] # SQUARE WITH VERTICAL FILL
25A6 ; [*08BE.0020.0002] # SQUARE WITH ORTHOGONAL CROSSHATCH FILL
25A7 ; [*08BF.0020.0002] # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
25A8 ; [*08C0.0020.0002] # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
25A9 ; [*08C1.0020.0002] # SQUARE WITH DIAGONAL CROSSHATCH FILL
25AA ; [*08C2.0020.0002] # BLACK SMALL SQUARE
25AB ; [*08C3.0020.0002] # WHITE SMALL SQUARE
25AC ; [*08C4.0020.0002] # BLACK RECTANGLE
25AD ; [*08C5.0020.0002] # WHITE RECTANGLE
25AE ; [*08C6.0020.0002] # BLACK VERTICAL RECTANGLE
25AF ; [*08C7.0020.0002] # WHITE VERTICAL RECTANGLE
25B0 ; [*08C8.0020.0002] # BLACK PARALLELOGRAM
25B1 ; [*08C9.0020.0002] # WHITE PARALLELOGRAM
25B2 ; [*08CA.0020.0002] # BLACK UP-POINTING TRIANGLE
25B3 ; [*08CB.0020.0002] # WHITE UP-POINTING TRIANGLE
25B4 ; [*08CC.0020.0002] # BLACK UP-POINTING SMALL TRIANGLE
25B5 ; [*08CD.0020.0002] # WHITE UP-POINTING SMALL TRIANGLE
25B6 ; [*08CE.0020.0002] # BLACK RIGHT-POINTING TRIANGLE
25B7 ; [*08CF.0020.0002] # WHITE RIGHT-POINTING TRIANGLE
25B8 ; [*08D0.0020.0002] # BLACK RIGHT-POINTING SMALL TRIANGLE
25B9 ; [*08D1.0020.0002] # WHITE RIGHT-POINTING SMALL TRIANGLE
25BA ; [*08D2.0020.0002] # BLACK RIGHT-POINTING POINTER
25BB ; [*08D3.0020.0002] # WHITE RIGHT-POINTING POINTER
25BC ; [*08D4.0020.0002] # BLACK DOWN-POINTING TRIANGLE
25BD ; [*08D5.0020.0002] # WHITE DOWN-POINTING TRIANGLE
25BE ; [*08D6.0020.0002] # BLACK DOWN-POINTING SMALL TRIANGLE
25BF ; [*08D7.0020.0002] # WHITE DOWN-POINTING SMALL TRIANGLE
25C0 ; [*08D8.0020.0002] # BLACK LEFT-POINTING TRIANGLE
25C1 ; [*08D9.0020.0002] # WHITE LEFT-POINTING TRIANGLE
25C2 ; [*08DA.0020.0002] # BLACK LEFT-POINTING SMALL TRIANGLE
25C3 ; [*08DB.0020.0002] # WHITE LEFT-POINTING SMALL TRIANGLE
25C4 ; [*08DC.0020.0002] # BLACK LEFT-POINTING POINTER
25C5 ; [*08DD.0020.0002] # WHITE LEFT-POINTING POINTER
25C6 ; [*08DE.0020.0002] # BLACK DIAMOND
25C7 ; [*08DF.0020.0002] # WHITE DIAMOND
25C8 ; [*08E0.0020.0002] # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
25C9 ; [*08E1.0020.0002] # FISHEYE
25CA ; [*08E2.0020.0002] # LOZENGE
25CB ; [*08E3.0020.0002] # WHITE CIRCLE
25CC ; [*08E4.0020.0002] # DOTTED CIRCLE
25CD ; [*08E5.0020.0002] # CIRCLE WITH VERTICAL FILL
25CE ; [*08E6.0020.0002] # BULLSEYE
25CF ; [*08E7.0020.0002] # BLACK CIRCLE
25D0 ; [*08E8.0020.0002] # CIRCLE WITH LEFT HALF BLACK
25D1 ; [*08E9.0020.0002] # CIRCLE WITH RIGHT HALF BLACK
25D2 ; [*08EA.0020.0002] # CIRCLE WITH LOWER HALF BLACK
25D3 ; [*08EB.0020.0002] # CIRCLE WITH UPPER HALF BLACK
25D4 ; [*08EC.0020.0002] # CIRCLE WITH UPPER RIGHT QUADRANT BLACK
25D5 ; [*08ED.0020.0002] # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
25D6 ; [*08EE.0020.0002] # LEFT HALF BLACK CIRCLE
25D7 ; [*08EF.0020.0002] # RIGHT HALF BLACK CIRCLE
25D8 ; [*08F0.0020.0002] # INVERSE BULLET
25D9 ; [*08F1.0020.0002] # INVERSE WHITE CIRCLE
25DA ; [*08F2.0020.0002] # UPPER HALF INVERSE WHITE CIRCLE
25DB ; [*08F3.0020.0002] # LOWER HALF INVERSE WHITE CIRCLE
25DC ; [*08F4.0020.0002] # UPPER LEFT QUADRANT CIRCULAR ARC
25DD ; [*08F5.0020.0002] # UPPER RIGHT QUADRANT CIRCULAR ARC
25DE ; [*08F6.0020.0002] # LOWER RIGHT QUADRANT CIRCULAR ARC
25DF ; [*08F7.0020.0002] # LOWER LEFT QUADRANT CIRCULAR ARC
25E0 ; [*08F8.0020.0002] # UPPER HALF CIRCLE
25E1 ; [*08F9.0020.0002] # LOWER HALF CIRCLE
25E2 ; [*08FA.0020.0002] # BLACK LOWER RIGHT TRIANGLE
25E3 ; [*08FB.0020.0002] # BLACK LOWER LEFT TRIANGLE
25E4 ; [*08FC.0020.0002] # BLACK UPPER LEFT TRIANGLE
25E5 ; [*08FD.0020.0002] # BLACK UPPER RIGHT TRIANGLE
25E6 ; [*08FE.0020.0002] # WHITE BULLET
25E7 ; [*08FF.0020.0002] # SQUARE WITH LEFT HALF BLACK
25E8 ; [*0900.0020.0002] # SQUARE WITH RIGHT HALF BLACK
25E9 ; [*0901.0020.0002] # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
25EA ; [*0902.0020.0002] # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
25EB ; [*0903.0020.0002] # WHITE SQUARE WITH VERTICAL BISECTING LINE
25EC ; [*0904.0020.0002] # WHITE UP-POINTING TRIANGLE WITH DOT
25ED ; [*0905.0020.0002] # UP-POINTING TRIANGLE WITH LEFT HALF BLACK
25EE ; [*0906.0020.0002] # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
25EF ; [*0907.0020.0002] # LARGE CIRCLE
25F0 ; [*0908.0020.0002] # WHITE SQUARE WITH UPPER LEFT QUADRANT
25F1 ; [*0909.0020.0002] # WHITE SQUARE WITH LOWER LEFT QUADRANT
25F2 ; [*090A.0020.0002] # WHITE SQUARE WITH LOWER RIGHT QUADRANT
25F3 ; [*090B.0020.0002] # WHITE SQUARE WITH UPPER RIGHT QUADRANT
25F4 ; [*090C.0020.0002] # WHITE CIRCLE WITH UPPER LEFT QUADRANT
25F5 ; [*090D.0020.0002] # WHITE CIRCLE WITH LOWER LEFT QUADRANT
25F6 ; [*090E.0020.0002] # WHITE CIRCLE WITH LOWER RIGHT QUADRANT
25F7 ; [*090F.0020.0002] # WHITE CIRCLE WITH UPPER RIGHT QUADRANT
25F8 ; [*0910.0020.0002] # UPPER LEFT TRIANGLE
25F9 ; [*0911.0020.0002] # UPPER RIGHT TRIANGLE
25FA ; [*0912.0020.0002] # LOWER LEFT TRIANGLE
25FB ; [*0913.0020.0002] # WHITE MEDIUM SQUARE
25FC ; [*0914.0020.0002] # BLACK MEDIUM SQUARE
25FD ; [*0915.0020.0002] # WHITE MEDIUM SMALL SQUARE
25FE ; [*0916.0020.0002] # BLACK MEDIUM SMALL SQUARE
25FF ; [*0917.0020.0002] # LOWER RIGHT TRIANGLE
2600 ; [*0918.0020.0002] # BLACK SUN WITH RAYS
2601 ; [*0919.0020.0002] # CLOUD
2602 ; [*091A.0020.0002] # UMBRELLA
2603 ; [*091B.0020.0002] # SNOWMAN
2604 ; [*091C.0020.0002] # COMET
2605 ; [*091D.0020.0002] # BLACK STAR
2606 ; [*091E.0020.0002] # WHITE STAR
2607 ; [*091F.0020.0002] # LIGHTNING
2608 ; [*0920.0020.0002] # THUNDERSTORM
2609 ; [*0921.0020.0002] # SUN
260A ; [*0922.0020.0002] # ASCENDING NODE
260B ; [*0923.0020.0002] # DESCENDING NODE
260C ; [*0924.0020.0002] # CONJUNCTION
260D ; [*0925.0020.0002] # OPPOSITION
260E ; [*0926.0020.0002] # BLACK TELEPHONE
260F ; [*0927.0020.0002] # WHITE TELEPHONE
2610 ; [*0928.0020.0002] # BALLOT BOX
2611 ; [*0929.0020.0002] # BALLOT BOX WITH CHECK
2612 ; [*092A.0020.0002] # BALLOT BOX WITH X
2613 ; [*092B.0020.0002] # SALTIRE
2614 ; [*092C.0020.0002] # UMBRELLA WITH RAIN DROPS
2615 ; [*092D.0020.0002] # HOT BEVERAGE
2616 ; [*092E.0020.0002] # WHITE SHOGI PIECE
2617 ; [*092F.0020.0002] # BLACK SHOGI PIECE
2618 ; [*0930.0020.0002] # SHAMROCK
2619 ; [*0931.0020.0002] # REVERSED ROTATED FLORAL HEART BULLET
261A ; [*0932.0020.0002] # BLACK LEFT POINTING INDEX
261B ; [*0933.0020.0002] # BLACK RIGHT POINTING INDEX
261C ; [*0934.0020.0002] # WHITE LEFT POINTING INDEX
261D ; [*0935.0020.0002] # WHITE UP POINTING INDEX
261E ; [*0936.0020.0002] # WHITE RIGHT POINTING INDEX
261F ; [*0937.0020.0002] # WHITE DOWN POINTING INDEX
2620 ; [*0938.0020.0002] # SKULL AND CROSSBONES
2621 ; [*0939.0020.0002] # CAUTION SIGN
2622 ; [*093A.0020.0002] # RADIOACTIVE SIGN
2623 ; [*093B.0020.0002] # BIOHAZARD SIGN
2624 ; [*093C.0020.0002] # CADUCEUS
2625 ; [*093D.0020.0002] # ANKH
2626 ; [*093E.0020.0002] # ORTHODOX CROSS
2627 ; [*093F.0020.0002] # CHI RHO
2628 ; [*0940.0020.0002] # CROSS OF LORRAINE
2629 ; [*0941.0020.0002] # CROSS OF JERUSALEM
262A ; [*0942.0020.0002] # STAR AND CRESCENT
262B ; [*0943.0020.0002] # FARSI SYMBOL
262C ; [*0944.0020.0002] # ADI SHAKTI
262D ; [*0945.0020.0002] # HAMMER AND SICKLE
262E ; [*0946.0020.0002] # PEACE SYMBOL
262F ; [*0947.0020.0002] # YIN YANG
2630 ; [*0EA2.0020.0002] # TRIGRAM FOR HEAVEN
2631 ; [*0EA3.0020.0002] # TRIGRAM FOR LAKE
2632 ; [*0EA4.0020.0002] # TRIGRAM FOR FIRE
2633 ; [*0EA5.0020.0002] # TRIGRAM FOR THUNDER
2634 ; [*0EA6.0020.0002] # TRIGRAM FOR WIND
2635 ; [*0EA7.0020.0002] # TRIGRAM FOR WATER
2636 ; [*0EA8.0020.0002] # TRIGRAM FOR MOUNTAIN
2637 ; [*0EA9.0020.0002] # TRIGRAM FOR EARTH
2638 ; [*0948.0020.0002] # WHEEL OF DHARMA
2639 ; [*0949.0020.0002] # WHITE FROWNING FACE
263A ; [*094A.0020.0002] # WHITE SMILING FACE
263B ; [*094B.0020.0002] # BLACK SMILING FACE
263C ; [*094C.0020.0002] # WHITE SUN WITH RAYS
263D ; [*094D.0020.0002] # FIRST QUARTER MOON
263E ; [*094E.0020.0002] # LAST QUARTER MOON
263F ; [*094F.0020.0002] # MERCURY
2640 ; [*0950.0020.0002] # FEMALE SIGN
2641 ; [*0951.0020.0002] # EARTH
2642 ; [*0952.0020.0002] # MALE SIGN
2643 ; [*0953.0020.0002] # JUPITER
2644 ; [*0954.0020.0002] # SATURN
2645 ; [*0955.0020.0002] # URANUS
2646 ; [*0956.0020.0002] # NEPTUNE
2647 ; [*0957.0020.0002] # PLUTO
2648 ; [*0958.0020.0002] # ARIES
2649 ; [*0959.0020.0002] # TAURUS
264A ; [*095A.0020.0002] # GEMINI
264B ; [*095B.0020.0002] # CANCER
264C ; [*095C.0020.0002] # LEO
264D ; [*095D.0020.0002] # VIRGO
264E ; [*095E.0020.0002] # LIBRA
264F ; [*095F.0020.0002] # SCORPIUS
2650 ; [*0960.0020.0002] # SAGITTARIUS
2651 ; [*0961.0020.0002] # CAPRICORN
2652 ; [*0962.0020.0002] # AQUARIUS
2653 ; [*0963.0020.0002] # PISCES
2654 ; [*0964.0020.0002] # WHITE CHESS KING
2655 ; [*0965.0020.0002] # WHITE CHESS QUEEN
2656 ; [*0966.0020.0002] # WHITE CHESS ROOK
2657 ; [*0967.0020.0002] # WHITE CHESS BISHOP
2658 ; [*0968.0020.0002] # WHITE CHESS KNIGHT
2659 ; [*0969.0020.0002] # WHITE CHESS PAWN
265A ; [*096A.0020.0002] # BLACK CHESS KING
265B ; [*096B.0020.0002] # BLACK CHESS QUEEN
265C ; [*096C.0020.0002] # BLACK CHESS ROOK
265D ; [*096D.0020.0002] # BLACK CHESS BISHOP
265E ; [*096E.0020.0002] # BLACK CHESS KNIGHT
265F ; [*096F.0020.0002] # BLACK CHESS PAWN
2660 ; [*0970.0020.0002] # BLACK SPADE SUIT
2661 ; [*0971.0020.0002] # WHITE HEART SUIT
2662 ; [*0972.0020.0002] # WHITE DIAMOND SUIT
2663 ; [*0973.0020.0002] # BLACK CLUB SUIT
2664 ; [*0974.0020.0002] # WHITE SPADE SUIT
2665 ; [*0975.0020.0002] # BLACK HEART SUIT
2666 ; [*0976.0020.0002] # BLACK DIAMOND SUIT
2667 ; [*0977.0020.0002] # WHITE CLUB SUIT
2668 ; [*0978.0020.0002] # HOT SPRINGS
2669 ; [*0979.0020.0002] # QUARTER NOTE
266A ; [*097A.0020.0002] # EIGHTH NOTE
266B ; [*097B.0020.0002] # BEAMED EIGHTH NOTES
266C ; [*097C.0020.0002] # BEAMED SIXTEENTH NOTES
266D ; [*10F3.0020.0002] # MUSIC FLAT SIGN
266E ; [*10F4.0020.0002] # MUSIC NATURAL SIGN
266F ; [*10F5.0020.0002] # MUSIC SHARP SIGN
2670 ; [*097D.0020.0002] # WEST SYRIAC CROSS
2671 ; [*097E.0020.0002] # EAST SYRIAC CROSS
2672 ; [*097F.0020.0002] # UNIVERSAL RECYCLING SYMBOL
2673 ; [*0980.0020.0002] # RECYCLING SYMBOL FOR TYPE-1 PLASTICS
2674 ; [*0981.0020.0002] # RECYCLING SYMBOL FOR TYPE-2 PLASTICS
2675 ; [*0982.0020.0002] # RECYCLING SYMBOL FOR TYPE-3 PLASTICS
2676 ; [*0983.0020.0002] # RECYCLING SYMBOL FOR TYPE-4 PLASTICS
2677 ; [*0984.0020.0002] # RECYCLING SYMBOL FOR TYPE-5 PLASTICS
2678 ; [*0985.0020.0002] # RECYCLING SYMBOL FOR TYPE-6 PLASTICS
2679 ; [*0986.0020.0002] # RECYCLING SYMBOL FOR TYPE-7 PLASTICS
267A ; [*0987.0020.0002] # RECYCLING SYMBOL FOR GENERIC MATERIALS
267B ; [*0988.0020.0002] # BLACK UNIVERSAL RECYCLING SYMBOL
267C ; [*0989.0020.0002] # RECYCLED PAPER SYMBOL
267D ; [*098A.0020.0002] # PARTIALLY-RECYCLED PAPER SYMBOL
267E ; [*098B.0020.0002] # PERMANENT PAPER SIGN
267F ; [*098C.0020.0002] # WHEELCHAIR SYMBOL
2680 ; [*098D.0020.0002] # DIE FACE-1
2681 ; [*098E.0020.0002] # DIE FACE-2
2682 ; [*098F.0020.0002] # DIE FACE-3
2683 ; [*0990.0020.0002] # DIE FACE-4
2684 ; [*0991.0020.0002] # DIE FACE-5
2685 ; [*0992.0020.0002] # DIE FACE-6
2686 ; [*0993.0020.0002] # WHITE CIRCLE WITH DOT RIGHT
2687 ; [*0994.0020.0002] # WHITE CIRCLE WITH TWO DOTS
2688 ; [*0995.0020.0002] # BLACK CIRCLE WITH WHITE DOT RIGHT
2689 ; [*0996.0020.0002] # BLACK CIRCLE WITH TWO WHITE DOTS
268A ; [*0E9C.0020.0002] # MONOGRAM FOR YANG
268B ; [*0E9D.0020.0002] # MONOGRAM FOR YIN
268C ; [*0E9E.0020.0002] # DIGRAM FOR GREATER YANG
268D ; [*0E9F.0020.0002] # DIGRAM FOR LESSER YIN
268E ; [*0EA0.0020.0002] # DIGRAM FOR LESSER YANG
268F ; [*0EA1.0020.0002] # DIGRAM FOR GREATER YIN
2690 ; [*0997.0020.0002] # WHITE FLAG
2691 ; [*0998.0020.0002] # BLACK FLAG
2692 ; [*0999.0020.0002] # HAMMER AND PICK
2693 ; [*099A.0020.0002] # ANCHOR
2694 ; [*099B.0020.0002] # CROSSED SWORDS
2695 ; [*099C.0020.0002] # STAFF OF AESCULAPIUS
2696 ; [*099D.0020.0002] # SCALES
2697 ; [*099E.0020.0002] # ALEMBIC
2698 ; [*099F.0020.0002] # FLOWER
2699 ; [*09A0.0020.0002] # GEAR
269A ; [*09A1.0020.0002] # STAFF OF HERMES
269B ; [*09A2.0020.0002] # ATOM SYMBOL
269C ; [*09A3.0020.0002] # FLEUR-DE-LIS
269D ; [*09A4.0020.0002] # OUTLINED WHITE STAR
269E ; [*09A5.0020.0002] # THREE LINES CONVERGING RIGHT
269F ; [*09A6.0020.0002] # THREE LINES CONVERGING LEFT
26A0 ; [*09A7.0020.0002] # WARNING SIGN
26A1 ; [*09A8.0020.0002] # HIGH VOLTAGE SIGN
26A2 ; [*09A9.0020.0002] # DOUBLED FEMALE SIGN
26A3 ; [*09AA.0020.0002] # DOUBLED MALE SIGN
26A4 ; [*09AB.0020.0002] # INTERLOCKED FEMALE AND MALE SIGN
26A5 ; [*09AC.0020.0002] # MALE AND FEMALE SIGN
26A6 ; [*09AD.0020.0002] # MALE WITH STROKE SIGN
26A7 ; [*09AE.0020.0002] # MALE WITH STROKE AND MALE AND FEMALE SIGN
26A8 ; [*09AF.0020.0002] # VERTICAL MALE WITH STROKE SIGN
26A9 ; [*09B0.0020.0002] # HORIZONTAL MALE WITH STROKE SIGN
26AA ; [*09B1.0020.0002] # MEDIUM WHITE CIRCLE
26AB ; [*09B2.0020.0002] # MEDIUM BLACK CIRCLE
26AC ; [*09B3.0020.0002] # MEDIUM SMALL WHITE CIRCLE
26AD ; [*09B4.0020.0002] # MARRIAGE SYMBOL
26AE ; [*09B5.0020.0002] # DIVORCE SYMBOL
26AF ; [*09B6.0020.0002] # UNMARRIED PARTNERSHIP SYMBOL
26B0 ; [*09B7.0020.0002] # COFFIN
26B1 ; [*09B8.0020.0002] # FUNERAL URN
26B2 ; [*09B9.0020.0002] # NEUTER
26B3 ; [*09BA.0020.0002] # CERES
26B4 ; [*09BB.0020.0002] # PALLAS
26B5 ; [*09BC.0020.0002] # JUNO
26B6 ; [*09BD.0020.0002] # VESTA
26B7 ; [*09BE.0020.0002] # CHIRON
26B8 ; [*09BF.0020.0002] # BLACK MOON LILITH
26B9 ; [*09C0.0020.0002] # SEXTILE
26BA ; [*09C1.0020.0002] # SEMISEXTILE
26BB ; [*09C2.0020.0002] # QUINCUNX
26BC ; [*09C3.0020.0002] # SESQUIQUADRATE
26BD ; [*09C4.0020.0002] # SOCCER BALL
26BE ; [*09C5.0020.0002] # BASEBALL
26BF ; [*09C6.0020.0002] # SQUARED KEY
26C0 ; [*09C7.0020.0002] # WHITE DRAUGHTS MAN
26C1 ; [*09C8.0020.0002] # WHITE DRAUGHTS KING
26C2 ; [*09C9.0020.0002] # BLACK DRAUGHTS MAN
26C3 ; [*09CA.0020.0002] # BLACK DRAUGHTS KING
26C4 ; [*09CB.0020.0002] # SNOWMAN WITHOUT SNOW
26C5 ; [*09CC.0020.0002] # SUN BEHIND CLOUD
26C6 ; [*09CD.0020.0002] # RAIN
26C7 ; [*09CE.0020.0002] # BLACK SNOWMAN
26C8 ; [*09CF.0020.0002] # THUNDER CLOUD AND RAIN
26C9 ; [*09D0.0020.0002] # TURNED WHITE SHOGI PIECE
26CA ; [*09D1.0020.0002] # TURNED BLACK SHOGI PIECE
26CB ; [*09D2.0020.0002] # WHITE DIAMOND IN SQUARE
26CC ; [*09D3.0020.0002] # CROSSING LANES
26CD ; [*09D4.0020.0002] # DISABLED CAR
26CE ; [*09D5.0020.0002] # OPHIUCHUS
26CF ; [*09D6.0020.0002] # PICK
26D0 ; [*09D7.0020.0002] # CAR SLIDING
26D1 ; [*09D8.0020.0002] # HELMET WITH WHITE CROSS
26D2 ; [*09D9.0020.0002] # CIRCLED CROSSING LANES
26D3 ; [*09DA.0020.0002] # CHAINS
26D4 ; [*09DB.0020.0002] # NO ENTRY
26D5 ; [*09DC.0020.0002] # ALTERNATE ONE-WAY LEFT WAY TRAFFIC
26D6 ; [*09DD.0020.0002] # BLACK TWO-WAY LEFT WAY TRAFFIC
26D7 ; [*09DE.0020.0002] # WHITE TWO-WAY LEFT WAY TRAFFIC
26D8 ; [*09DF.0020.0002] # BLACK LEFT LANE MERGE
26D9 ; [*09E0.0020.0002] # WHITE LEFT LANE MERGE
26DA ; [*09E1.0020.0002] # DRIVE SLOW SIGN
26DB ; [*09E2.0020.0002] # HEAVY WHITE DOWN-POINTING TRIANGLE
26DC ; [*09E3.0020.0002] # LEFT CLOSED ENTRY
26DD ; [*09E4.0020.0002] # SQUARED SALTIRE
26DE ; [*09E5.0020.0002] # FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
26DF ; [*09E6.0020.0002] # BLACK TRUCK
26E0 ; [*09E7.0020.0002] # RESTRICTED LEFT ENTRY-1
26E1 ; [*09E8.0020.0002] # RESTRICTED LEFT ENTRY-2
26E2 ; [*09E9.0020.0002] # ASTRONOMICAL SYMBOL FOR URANUS
26E3 ; [*09EA.0020.0002] # HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
26E4 ; [*09EB.0020.0002] # PENTAGRAM
26E5 ; [*09EC.0020.0002] # RIGHT-HANDED INTERLACED PENTAGRAM
26E6 ; [*09ED.0020.0002] # LEFT-HANDED INTERLACED PENTAGRAM
26E7 ; [*09EE.0020.0002] # INVERTED PENTAGRAM
26E8 ; [*09EF.0020.0002] # BLACK CROSS ON SHIELD
26E9 ; [*09F0.0020.0002] # SHINTO SHRINE
26EA ; [*09F1.0020.0002] # CHURCH
26EB ; [*09F2.0020.0002] # CASTLE
26EC ; [*09F3.0020.0002] # HISTORIC SITE
26ED ; [*09F4.0020.0002] # GEAR WITHOUT HUB
26EE ; [*09F5.0020.0002] # GEAR WITH HANDLES
26EF ; [*09F6.0020.0002] # MAP SYMBOL FOR LIGHTHOUSE
26F0 ; [*09F7.0020.0002] # MOUNTAIN
26F1 ; [*09F8.0020.0002] # UMBRELLA ON GROUND
26F2 ; [*09F9.0020.0002] # FOUNTAIN
26F3 ; [*09FA.0020.0002] # FLAG IN HOLE
26F4 ; [*09FB.0020.0002] # FERRY
26F5 ; [*09FC.0020.0002] # SAILBOAT
26F6 ; [*09FD.0020.0002] # SQUARE FOUR CORNERS
26F7 ; [*09FE.0020.0002] # SKIER
26F8 ; [*09FF.0020.0002] # ICE SKATE
26F9 ; [*0A00.0020.0002] # PERSON WITH BALL
26FA ; [*0A01.0020.0002] # TENT
26FB ; [*0A02.0020.0002] # JAPANESE BANK SYMBOL
26FC ; [*0A03.0020.0002] # HEADSTONE GRAVEYARD SYMBOL
26FD ; [*0A04.0020.0002] # FUEL PUMP
26FE ; [*0A05.0020.0002] # CUP ON BLACK SQUARE
26FF ; [*0A06.0020.0002] # WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
2700 ; [*0A21.0020.0002] # BLACK SAFETY SCISSORS
2701 ; [*0A22.0020.0002] # UPPER BLADE SCISSORS
2702 ; [*0A23.0020.0002] # BLACK SCISSORS
2703 ; [*0A24.0020.0002] # LOWER BLADE SCISSORS
2704 ; [*0A25.0020.0002] # WHITE SCISSORS
2705 ; [*0A26.0020.0002] # WHITE HEAVY CHECK MARK
2706 ; [*0A27.0020.0002] # TELEPHONE LOCATION SIGN
2707 ; [*0A28.0020.0002] # TAPE DRIVE
2708 ; [*0A29.0020.0002] # AIRPLANE
2709 ; [*0A2A.0020.0002] # ENVELOPE
270A ; [*0A2B.0020.0002] # RAISED FIST
270B ; [*0A2C.0020.0002] # RAISED HAND
270C ; [*0A2D.0020.0002] # VICTORY HAND
270D ; [*0A2E.0020.0002] # WRITING HAND
270E ; [*0A2F.0020.0002] # LOWER RIGHT PENCIL
270F ; [*0A30.0020.0002] # PENCIL
2710 ; [*0A31.0020.0002] # UPPER RIGHT PENCIL
2711 ; [*0A32.0020.0002] # WHITE NIB
2712 ; [*0A33.0020.0002] # BLACK NIB
2713 ; [*0A34.0020.0002] # CHECK MARK
2714 ; [*0A35.0020.0002] # HEAVY CHECK MARK
2715 ; [*0A36.0020.0002] # MULTIPLICATION X
2716 ; [*0A37.0020.0002] # HEAVY MULTIPLICATION X
2717 ; [*0A38.0020.0002] # BALLOT X
2718 ; [*0A39.0020.0002] # HEAVY BALLOT X
2719 ; [*0A3A.0020.0002] # OUTLINED GREEK CROSS
271A ; [*0A3B.0020.0002] # HEAVY GREEK CROSS
271B ; [*0A3C.0020.0002] # OPEN CENTRE CROSS
271C ; [*0A3D.0020.0002] # HEAVY OPEN CENTRE CROSS
271D ; [*0A3E.0020.0002] # LATIN CROSS
271E ; [*0A3F.0020.0002] # SHADOWED WHITE LATIN CROSS
271F ; [*0A40.0020.0002] # OUTLINED LATIN CROSS
2720 ; [*0A41.0020.0002] # MALTESE CROSS
2721 ; [*0A42.0020.0002] # STAR OF DAVID
2722 ; [*0A43.0020.0002] # FOUR TEARDROP-SPOKED ASTERISK
2723 ; [*0A44.0020.0002] # FOUR BALLOON-SPOKED ASTERISK
2724 ; [*0A45.0020.0002] # HEAVY FOUR BALLOON-SPOKED ASTERISK
2725 ; [*0A46.0020.0002] # FOUR CLUB-SPOKED ASTERISK
2726 ; [*0A47.0020.0002] # BLACK FOUR POINTED STAR
2727 ; [*0A48.0020.0002] # WHITE FOUR POINTED STAR
2728 ; [*0A49.0020.0002] # SPARKLES
2729 ; [*0A4A.0020.0002] # STRESS OUTLINED WHITE STAR
272A ; [*0A4B.0020.0002] # CIRCLED WHITE STAR
272B ; [*0A4C.0020.0002] # OPEN CENTRE BLACK STAR
272C ; [*0A4D.0020.0002] # BLACK CENTRE WHITE STAR
272D ; [*0A4E.0020.0002] # OUTLINED BLACK STAR
272E ; [*0A4F.0020.0002] # HEAVY OUTLINED BLACK STAR
272F ; [*0A50.0020.0002] # PINWHEEL STAR
2730 ; [*0A51.0020.0002] # SHADOWED WHITE STAR
2731 ; [*0A52.0020.0002] # HEAVY ASTERISK
2732 ; [*0A53.0020.0002] # OPEN CENTRE ASTERISK
2733 ; [*0A54.0020.0002] # EIGHT SPOKED ASTERISK
2734 ; [*0A55.0020.0002] # EIGHT POINTED BLACK STAR
2735 ; [*0A56.0020.0002] # EIGHT POINTED PINWHEEL STAR
2736 ; [*0A57.0020.0002] # SIX POINTED BLACK STAR
2737 ; [*0A58.0020.0002] # EIGHT POINTED RECTILINEAR BLACK STAR
2738 ; [*0A59.0020.0002] # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
2739 ; [*0A5A.0020.0002] # TWELVE POINTED BLACK STAR
273A ; [*0A5B.0020.0002] # SIXTEEN POINTED ASTERISK
273B ; [*0A5C.0020.0002] # TEARDROP-SPOKED ASTERISK
273C ; [*0A5D.0020.0002] # OPEN CENTRE TEARDROP-SPOKED ASTERISK
273D ; [*0A5E.0020.0002] # HEAVY TEARDROP-SPOKED ASTERISK
273E ; [*0A5F.0020.0002] # SIX PETALLED BLACK AND WHITE FLORETTE
273F ; [*0A60.0020.0002] # BLACK FLORETTE
2740 ; [*0A61.0020.0002] # WHITE FLORETTE
2741 ; [*0A62.0020.0002] # EIGHT PETALLED OUTLINED BLACK FLORETTE
2742 ; [*0A63.0020.0002] # CIRCLED OPEN CENTRE EIGHT POINTED STAR
2743 ; [*0A64.0020.0002] # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
2744 ; [*0A65.0020.0002] # SNOWFLAKE
2745 ; [*0A66.0020.0002] # TIGHT TRIFOLIATE SNOWFLAKE
2746 ; [*0A67.0020.0002] # HEAVY CHEVRON SNOWFLAKE
2747 ; [*0A68.0020.0002] # SPARKLE
2748 ; [*0A69.0020.0002] # HEAVY SPARKLE
2749 ; [*0A6A.0020.0002] # BALLOON-SPOKED ASTERISK
274A ; [*0A6B.0020.0002] # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
274B ; [*0A6C.0020.0002] # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
274C ; [*0A6D.0020.0002] # CROSS MARK
274D ; [*0A6E.0020.0002] # SHADOWED WHITE CIRCLE
274E ; [*0A6F.0020.0002] # NEGATIVE SQUARED CROSS MARK
274F ; [*0A70.0020.0002] # LOWER RIGHT DROP-SHADOWED WHITE SQUARE
2750 ; [*0A71.0020.0002] # UPPER RIGHT DROP-SHADOWED WHITE SQUARE
2751 ; [*0A72.0020.0002] # LOWER RIGHT SHADOWED WHITE SQUARE
2752 ; [*0A73.0020.0002] # UPPER RIGHT SHADOWED WHITE SQUARE
2753 ; [*0A74.0020.0002] # BLACK QUESTION MARK ORNAMENT
2754 ; [*0A75.0020.0002] # WHITE QUESTION MARK ORNAMENT
2755 ; [*0A76.0020.0002] # WHITE EXCLAMATION MARK ORNAMENT
2756 ; [*0A77.0020.0002] # BLACK DIAMOND MINUS WHITE X
2757 ; [*0A78.0020.0002] # HEAVY EXCLAMATION MARK SYMBOL
2758 ; [*0A79.0020.0002] # LIGHT VERTICAL BAR
2759 ; [*0A7A.0020.0002] # MEDIUM VERTICAL BAR
275A ; [*0A7B.0020.0002] # HEAVY VERTICAL BAR
275B ; [*0A7C.0020.0002] # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
275C ; [*0A7D.0020.0002] # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
275D ; [*0A7E.0020.0002] # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
275E ; [*0A7F.0020.0002] # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
275F ; [*0A80.0020.0002] # HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
2760 ; [*0A81.0020.0002] # HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
2761 ; [*0A82.0020.0002] # CURVED STEM PARAGRAPH SIGN ORNAMENT
2762 ; [*0A83.0020.0002] # HEAVY EXCLAMATION MARK ORNAMENT
2763 ; [*0A84.0020.0002] # HEAVY HEART EXCLAMATION MARK ORNAMENT
2764 ; [*0A85.0020.0002] # HEAVY BLACK HEART
2765 ; [*0A86.0020.0002] # ROTATED HEAVY BLACK HEART BULLET
2766 ; [*0A87.0020.0002] # FLORAL HEART
2767 ; [*0A88.0020.0002] # ROTATED FLORAL HEART BULLET
2768 ; [*034D.0020.0002] # MEDIUM LEFT PARENTHESIS ORNAMENT
2769 ; [*034E.0020.0002] # MEDIUM RIGHT PARENTHESIS ORNAMENT
276A ; [*034F.0020.0002] # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
276B ; [*0350.0020.0002] # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
276C ; [*0351.0020.0002] # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
276D ; [*0352.0020.0002] # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
276E ; [*0353.0020.0002] # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
276F ; [*0354.0020.0002] # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
2770 ; [*0355.0020.0002] # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
2771 ; [*0356.0020.0002] # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
2772 ; [*0357.0020.0002] # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
2773 ; [*0358.0020.0002] # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
2774 ; [*0359.0020.0002] # MEDIUM LEFT CURLY BRACKET ORNAMENT
2775 ; [*035A.0020.0002] # MEDIUM RIGHT CURLY BRACKET ORNAMENT
2794 ; [*0A89.0020.0002] # HEAVY WIDE-HEADED RIGHTWARDS ARROW
2795 ; [*0A8A.0020.0002] # HEAVY PLUS SIGN
2796 ; [*0A8B.0020.0002] # HEAVY MINUS SIGN
2797 ; [*0A8C.0020.0002] # HEAVY DIVISION SIGN
2798 ; [*0A8D.0020.0002] # HEAVY SOUTH EAST ARROW
2799 ; [*0A8E.0020.0002] # HEAVY RIGHTWARDS ARROW
279A ; [*0A8F.0020.0002] # HEAVY NORTH EAST ARROW
279B ; [*0A90.0020.0002] # DRAFTING POINT RIGHTWARDS ARROW
279C ; [*0A91.0020.0002] # HEAVY ROUND-TIPPED RIGHTWARDS ARROW
279D ; [*0A92.0020.0002] # TRIANGLE-HEADED RIGHTWARDS ARROW
279E ; [*0A93.0020.0002] # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
279F ; [*0A94.0020.0002] # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
27A0 ; [*0A95.0020.0002] # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
27A1 ; [*0A96.0020.0002] # BLACK RIGHTWARDS ARROW
27A2 ; [*0A97.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
27A3 ; [*0A98.0020.0002] # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
27A4 ; [*0A99.0020.0002] # BLACK RIGHTWARDS ARROWHEAD
27A5 ; [*0A9A.0020.0002] # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
27A6 ; [*0A9B.0020.0002] # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
27A7 ; [*0A9C.0020.0002] # SQUAT BLACK RIGHTWARDS ARROW
27A8 ; [*0A9D.0020.0002] # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
27A9 ; [*0A9E.0020.0002] # RIGHT-SHADED WHITE RIGHTWARDS ARROW
27AA ; [*0A9F.0020.0002] # LEFT-SHADED WHITE RIGHTWARDS ARROW
27AB ; [*0AA0.0020.0002] # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
27AC ; [*0AA1.0020.0002] # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
27AD ; [*0AA2.0020.0002] # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
27AE ; [*0AA3.0020.0002] # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
27AF ; [*0AA4.0020.0002] # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
27B0 ; [*0AA5.0020.0002] # CURLY LOOP
27B1 ; [*0AA6.0020.0002] # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
27B2 ; [*0AA7.0020.0002] # CIRCLED HEAVY WHITE RIGHTWARDS ARROW
27B3 ; [*0AA8.0020.0002] # WHITE-FEATHERED RIGHTWARDS ARROW
27B4 ; [*0AA9.0020.0002] # BLACK-FEATHERED SOUTH EAST ARROW
27B5 ; [*0AAA.0020.0002] # BLACK-FEATHERED RIGHTWARDS ARROW
27B6 ; [*0AAB.0020.0002] # BLACK-FEATHERED NORTH EAST ARROW
27B7 ; [*0AAC.0020.0002] # HEAVY BLACK-FEATHERED SOUTH EAST ARROW
27B8 ; [*0AAD.0020.0002] # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
27B9 ; [*0AAE.0020.0002] # HEAVY BLACK-FEATHERED NORTH EAST ARROW
27BA ; [*0AAF.0020.0002] # TEARDROP-BARBED RIGHTWARDS ARROW
27BB ; [*0AB0.0020.0002] # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
27BC ; [*0AB1.0020.0002] # WEDGE-TAILED RIGHTWARDS ARROW
27BD ; [*0AB2.0020.0002] # HEAVY WEDGE-TAILED RIGHTWARDS ARROW
27BE ; [*0AB3.0020.0002] # OPEN-OUTLINED RIGHTWARDS ARROW
27BF ; [*0AB4.0020.0002] # DOUBLE CURLY LOOP
27C0 ; [*0AB5.0020.0002] # THREE DIMENSIONAL ANGLE
27C1 ; [*0AB6.0020.0002] # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
27C2 ; [*0AB7.0020.0002] # PERPENDICULAR
27C3 ; [*0AB8.0020.0002] # OPEN SUBSET
27C4 ; [*0AB9.0020.0002] # OPEN SUPERSET
27C5 ; [*0341.0020.0002] # LEFT S-SHAPED BAG DELIMITER
27C6 ; [*0342.0020.0002] # RIGHT S-SHAPED BAG DELIMITER
27C7 ; [*0ABA.0020.0002] # OR WITH DOT INSIDE
27C8 ; [*0ABB.0020.0002] # REVERSE SOLIDUS PRECEDING SUBSET
27C9 ; [*0ABC.0020.0002] # SUPERSET PRECEDING SOLIDUS
27CA ; [*0ABD.0020.0002] # VERTICAL BAR WITH HORIZONTAL STROKE
27CB ; [*0ABE.0020.0002] # MATHEMATICAL RISING DIAGONAL
27CC ; [*0ABF.0020.0002] # LONG DIVISION
27CD ; [*0AC0.0020.0002] # MATHEMATICAL FALLING DIAGONAL
27CE ; [*0AC1.0020.0002] # SQUARED LOGICAL AND
27CF ; [*0AC2.0020.0002] # SQUARED LOGICAL OR
27D0 ; [*0AC3.0020.0002] # WHITE DIAMOND WITH CENTRED DOT
27D1 ; [*0AC4.0020.0002] # AND WITH DOT
27D2 ; [*0AC5.0020.0002] # ELEMENT OF OPENING UPWARDS
27D3 ; [*0AC6.0020.0002] # LOWER RIGHT CORNER WITH DOT
27D4 ; [*0AC7.0020.0002] # UPPER LEFT CORNER WITH DOT
27D5 ; [*0AC8.0020.0002] # LEFT OUTER JOIN
27D6 ; [*0AC9.0020.0002] # RIGHT OUTER JOIN
27D7 ; [*0ACA.0020.0002] # FULL OUTER JOIN
27D8 ; [*0ACB.0020.0002] # LARGE UP TACK
27D9 ; [*0ACC.0020.0002] # LARGE DOWN TACK
27DA ; [*0ACD.0020.0002] # LEFT AND RIGHT DOUBLE TURNSTILE
27DB ; [*0ACE.0020.0002] # LEFT AND RIGHT TACK
27DC ; [*0ACF.0020.0002] # LEFT MULTIMAP
27DD ; [*0AD0.0020.0002] # LONG RIGHT TACK
27DE ; [*0AD1.0020.0002] # LONG LEFT TACK
27DF ; [*0AD2.0020.0002] # UP TACK WITH CIRCLE ABOVE
27E0 ; [*0AD3.0020.0002] # LOZENGE DIVIDED BY HORIZONTAL RULE
27E1 ; [*0AD4.0020.0002] # WHITE CONCAVE-SIDED DIAMOND
27E2 ; [*0AD5.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
27E3 ; [*0AD6.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
27E4 ; [*0AD7.0020.0002] # WHITE SQUARE WITH LEFTWARDS TICK
27E5 ; [*0AD8.0020.0002] # WHITE SQUARE WITH RIGHTWARDS TICK
27E6 ; [*0343.0020.0002] # MATHEMATICAL LEFT WHITE SQUARE BRACKET
27E7 ; [*0344.0020.0002] # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
27E8 ; [*0345.0020.0002] # MATHEMATICAL LEFT ANGLE BRACKET
27E9 ; [*0346.0020.0002] # MATHEMATICAL RIGHT ANGLE BRACKET
27EA ; [*0347.0020.0002] # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
27EB ; [*0348.0020.0002] # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
27EC ; [*0349.0020.0002] # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
27ED ; [*034A.0020.0002] # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
27EE ; [*034B.0020.0002] # MATHEMATICAL LEFT FLATTENED PARENTHESIS
27EF ; [*034C.0020.0002] # MATHEMATICAL RIGHT FLATTENED PARENTHESIS
27F0 ; [*0AD9.0020.0002] # UPWARDS QUADRUPLE ARROW
27F1 ; [*0ADA.0020.0002] # DOWNWARDS QUADRUPLE ARROW
27F2 ; [*0ADB.0020.0002] # ANTICLOCKWISE GAPPED CIRCLE ARROW
27F3 ; [*0ADC.0020.0002] # CLOCKWISE GAPPED CIRCLE ARROW
27F4 ; [*0ADD.0020.0002] # RIGHT ARROW WITH CIRCLED PLUS
27F5 ; [*0ADE.0020.0002] # LONG LEFTWARDS ARROW
27F6 ; [*0ADF.0020.0002] # LONG RIGHTWARDS ARROW
27F7 ; [*0AE0.0020.0002] # LONG LEFT RIGHT ARROW
27F8 ; [*0AE1.0020.0002] # LONG LEFTWARDS DOUBLE ARROW
27F9 ; [*0AE2.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW
27FA ; [*0AE3.0020.0002] # LONG LEFT RIGHT DOUBLE ARROW
27FB ; [*0AE4.0020.0002] # LONG LEFTWARDS ARROW FROM BAR
27FC ; [*0AE5.0020.0002] # LONG RIGHTWARDS ARROW FROM BAR
27FD ; [*0AE6.0020.0002] # LONG LEFTWARDS DOUBLE ARROW FROM BAR
27FE ; [*0AE7.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW FROM BAR
27FF ; [*0AE8.0020.0002] # LONG RIGHTWARDS SQUIGGLE ARROW
2800 ; [*0D9C.0020.0002] # BRAILLE PATTERN BLANK
2801 ; [*0D9D.0020.0002] # BRAILLE PATTERN DOTS-1
2802 ; [*0D9E.0020.0002] # BRAILLE PATTERN DOTS-2
2803 ; [*0D9F.0020.0002] # BRAILLE PATTERN DOTS-12
2804 ; [*0DA0.0020.0002] # BRAILLE PATTERN DOTS-3
2805 ; [*0DA1.0020.0002] # BRAILLE PATTERN DOTS-13
2806 ; [*0DA2.0020.0002] # BRAILLE PATTERN DOTS-23
2807 ; [*0DA3.0020.0002] # BRAILLE PATTERN DOTS-123
2808 ; [*0DA4.0020.0002] # BRAILLE PATTERN DOTS-4
2809 ; [*0DA5.0020.0002] # BRAILLE PATTERN DOTS-14
280A ; [*0DA6.0020.0002] # BRAILLE PATTERN DOTS-24
280B ; [*0DA7.0020.0002] # BRAILLE PATTERN DOTS-124
280C ; [*0DA8.0020.0002] # BRAILLE PATTERN DOTS-34
280D ; [*0DA9.0020.0002] # BRAILLE PATTERN DOTS-134
280E ; [*0DAA.0020.0002] # BRAILLE PATTERN DOTS-234
280F ; [*0DAB.0020.0002] # BRAILLE PATTERN DOTS-1234
2810 ; [*0DAC.0020.0002] # BRAILLE PATTERN DOTS-5
2811 ; [*0DAD.0020.0002] # BRAILLE PATTERN DOTS-15
2812 ; [*0DAE.0020.0002] # BRAILLE PATTERN DOTS-25
2813 ; [*0DAF.0020.0002] # BRAILLE PATTERN DOTS-125
2814 ; [*0DB0.0020.0002] # BRAILLE PATTERN DOTS-35
2815 ; [*0DB1.0020.0002] # BRAILLE PATTERN DOTS-135
2816 ; [*0DB2.0020.0002] # BRAILLE PATTERN DOTS-235
2817 ; [*0DB3.0020.0002] # BRAILLE PATTERN DOTS-1235
2818 ; [*0DB4.0020.0002] # BRAILLE PATTERN DOTS-45
2819 ; [*0DB5.0020.0002] # BRAILLE PATTERN DOTS-145
281A ; [*0DB6.0020.0002] # BRAILLE PATTERN DOTS-245
281B ; [*0DB7.0020.0002] # BRAILLE PATTERN DOTS-1245
281C ; [*0DB8.0020.0002] # BRAILLE PATTERN DOTS-345
281D ; [*0DB9.0020.0002] # BRAILLE PATTERN DOTS-1345
281E ; [*0DBA.0020.0002] # BRAILLE PATTERN DOTS-2345
281F ; [*0DBB.0020.0002] # BRAILLE PATTERN DOTS-12345
2820 ; [*0DBC.0020.0002] # BRAILLE PATTERN DOTS-6
2821 ; [*0DBD.0020.0002] # BRAILLE PATTERN DOTS-16
2822 ; [*0DBE.0020.0002] # BRAILLE PATTERN DOTS-26
2823 ; [*0DBF.0020.0002] # BRAILLE PATTERN DOTS-126
2824 ; [*0DC0.0020.0002] # BRAILLE PATTERN DOTS-36
2825 ; [*0DC1.0020.0002] # BRAILLE PATTERN DOTS-136
2826 ; [*0DC2.0020.0002] # BRAILLE PATTERN DOTS-236
2827 ; [*0DC3.0020.0002] # BRAILLE PATTERN DOTS-1236
2828 ; [*0DC4.0020.0002] # BRAILLE PATTERN DOTS-46
2829 ; [*0DC5.0020.0002] # BRAILLE PATTERN DOTS-146
282A ; [*0DC6.0020.0002] # BRAILLE PATTERN DOTS-246
282B ; [*0DC7.0020.0002] # BRAILLE PATTERN DOTS-1246
282C ; [*0DC8.0020.0002] # BRAILLE PATTERN DOTS-346
282D ; [*0DC9.0020.0002] # BRAILLE PATTERN DOTS-1346
282E ; [*0DCA.0020.0002] # BRAILLE PATTERN DOTS-2346
282F ; [*0DCB.0020.0002] # BRAILLE PATTERN DOTS-12346
2830 ; [*0DCC.0020.0002] # BRAILLE PATTERN DOTS-56
2831 ; [*0DCD.0020.0002] # BRAILLE PATTERN DOTS-156
2832 ; [*0DCE.0020.0002] # BRAILLE PATTERN DOTS-256
2833 ; [*0DCF.0020.0002] # BRAILLE PATTERN DOTS-1256
2834 ; [*0DD0.0020.0002] # BRAILLE PATTERN DOTS-356
2835 ; [*0DD1.0020.0002] # BRAILLE PATTERN DOTS-1356
2836 ; [*0DD2.0020.0002] # BRAILLE PATTERN DOTS-2356
2837 ; [*0DD3.0020.0002] # BRAILLE PATTERN DOTS-12356
2838 ; [*0DD4.0020.0002] # BRAILLE PATTERN DOTS-456
2839 ; [*0DD5.0020.0002] # BRAILLE PATTERN DOTS-1456
283A ; [*0DD6.0020.0002] # BRAILLE PATTERN DOTS-2456
283B ; [*0DD7.0020.0002] # BRAILLE PATTERN DOTS-12456
283C ; [*0DD8.0020.0002] # BRAILLE PATTERN DOTS-3456
283D ; [*0DD9.0020.0002] # BRAILLE PATTERN DOTS-13456
283E ; [*0DDA.0020.0002] # BRAILLE PATTERN DOTS-23456
283F ; [*0DDB.0020.0002] # BRAILLE PATTERN DOTS-123456
2840 ; [*0DDC.0020.0002] # BRAILLE PATTERN DOTS-7
2841 ; [*0DDD.0020.0002] # BRAILLE PATTERN DOTS-17
2842 ; [*0DDE.0020.0002] # BRAILLE PATTERN DOTS-27
2843 ; [*0DDF.0020.0002] # BRAILLE PATTERN DOTS-127
2844 ; [*0DE0.0020.0002] # BRAILLE PATTERN DOTS-37
2845 ; [*0DE1.0020.0002] # BRAILLE PATTERN DOTS-137
2846 ; [*0DE2.0020.0002] # BRAILLE PATTERN DOTS-237
2847 ; [*0DE3.0020.0002] # BRAILLE PATTERN DOTS-1237
2848 ; [*0DE4.0020.0002] # BRAILLE PATTERN DOTS-47
2849 ; [*0DE5.0020.0002] # BRAILLE PATTERN DOTS-147
284A ; [*0DE6.0020.0002] # BRAILLE PATTERN DOTS-247
284B ; [*0DE7.0020.0002] # BRAILLE PATTERN DOTS-1247
284C ; [*0DE8.0020.0002] # BRAILLE PATTERN DOTS-347
284D ; [*0DE9.0020.0002] # BRAILLE PATTERN DOTS-1347
284E ; [*0DEA.0020.0002] # BRAILLE PATTERN DOTS-2347
284F ; [*0DEB.0020.0002] # BRAILLE PATTERN DOTS-12347
2850 ; [*0DEC.0020.0002] # BRAILLE PATTERN DOTS-57
2851 ; [*0DED.0020.0002] # BRAILLE PATTERN DOTS-157
2852 ; [*0DEE.0020.0002] # BRAILLE PATTERN DOTS-257
2853 ; [*0DEF.0020.0002] # BRAILLE PATTERN DOTS-1257
2854 ; [*0DF0.0020.0002] # BRAILLE PATTERN DOTS-357
2855 ; [*0DF1.0020.0002] # BRAILLE PATTERN DOTS-1357
2856 ; [*0DF2.0020.0002] # BRAILLE PATTERN DOTS-2357
2857 ; [*0DF3.0020.0002] # BRAILLE PATTERN DOTS-12357
2858 ; [*0DF4.0020.0002] # BRAILLE PATTERN DOTS-457
2859 ; [*0DF5.0020.0002] # BRAILLE PATTERN DOTS-1457
285A ; [*0DF6.0020.0002] # BRAILLE PATTERN DOTS-2457
285B ; [*0DF7.0020.0002] # BRAILLE PATTERN DOTS-12457
285C ; [*0DF8.0020.0002] # BRAILLE PATTERN DOTS-3457
285D ; [*0DF9.0020.0002] # BRAILLE PATTERN DOTS-13457
285E ; [*0DFA.0020.0002] # BRAILLE PATTERN DOTS-23457
285F ; [*0DFB.0020.0002] # BRAILLE PATTERN DOTS-123457
2860 ; [*0DFC.0020.0002] # BRAILLE PATTERN DOTS-67
2861 ; [*0DFD.0020.0002] # BRAILLE PATTERN DOTS-167
2862 ; [*0DFE.0020.0002] # BRAILLE PATTERN DOTS-267
2863 ; [*0DFF.0020.0002] # BRAILLE PATTERN DOTS-1267
2864 ; [*0E00.0020.0002] # BRAILLE PATTERN DOTS-367
2865 ; [*0E01.0020.0002] # BRAILLE PATTERN DOTS-1367
2866 ; [*0E02.0020.0002] # BRAILLE PATTERN DOTS-2367
2867 ; [*0E03.0020.0002] # BRAILLE PATTERN DOTS-12367
2868 ; [*0E04.0020.0002] # BRAILLE PATTERN DOTS-467
2869 ; [*0E05.0020.0002] # BRAILLE PATTERN DOTS-1467
286A ; [*0E06.0020.0002] # BRAILLE PATTERN DOTS-2467
286B ; [*0E07.0020.0002] # BRAILLE PATTERN DOTS-12467
286C ; [*0E08.0020.0002] # BRAILLE PATTERN DOTS-3467
286D ; [*0E09.0020.0002] # BRAILLE PATTERN DOTS-13467
286E ; [*0E0A.0020.0002] # BRAILLE PATTERN DOTS-23467
286F ; [*0E0B.0020.0002] # BRAILLE PATTERN DOTS-123467
2870 ; [*0E0C.0020.0002] # BRAILLE PATTERN DOTS-567
2871 ; [*0E0D.0020.0002] # BRAILLE PATTERN DOTS-1567
2872 ; [*0E0E.0020.0002] # BRAILLE PATTERN DOTS-2567
2873 ; [*0E0F.0020.0002] # BRAILLE PATTERN DOTS-12567
2874 ; [*0E10.0020.0002] # BRAILLE PATTERN DOTS-3567
2875 ; [*0E11.0020.0002] # BRAILLE PATTERN DOTS-13567
2876 ; [*0E12.0020.0002] # BRAILLE PATTERN DOTS-23567
2877 ; [*0E13.0020.0002] # BRAILLE PATTERN DOTS-123567
2878 ; [*0E14.0020.0002] # BRAILLE PATTERN DOTS-4567
2879 ; [*0E15.0020.0002] # BRAILLE PATTERN DOTS-14567
287A ; [*0E16.0020.0002] # BRAILLE PATTERN DOTS-24567
287B ; [*0E17.0020.0002] # BRAILLE PATTERN DOTS-124567
287C ; [*0E18.0020.0002] # BRAILLE PATTERN DOTS-34567
287D ; [*0E19.0020.0002] # BRAILLE PATTERN DOTS-134567
287E ; [*0E1A.0020.0002] # BRAILLE PATTERN DOTS-234567
287F ; [*0E1B.0020.0002] # BRAILLE PATTERN DOTS-1234567
2880 ; [*0E1C.0020.0002] # BRAILLE PATTERN DOTS-8
2881 ; [*0E1D.0020.0002] # BRAILLE PATTERN DOTS-18
2882 ; [*0E1E.0020.0002] # BRAILLE PATTERN DOTS-28
2883 ; [*0E1F.0020.0002] # BRAILLE PATTERN DOTS-128
2884 ; [*0E20.0020.0002] # BRAILLE PATTERN DOTS-38
2885 ; [*0E21.0020.0002] # BRAILLE PATTERN DOTS-138
2886 ; [*0E22.0020.0002] # BRAILLE PATTERN DOTS-238
2887 ; [*0E23.0020.0002] # BRAILLE PATTERN DOTS-1238
2888 ; [*0E24.0020.0002] # BRAILLE PATTERN DOTS-48
2889 ; [*0E25.0020.0002] # BRAILLE PATTERN DOTS-148
288A ; [*0E26.0020.0002] # BRAILLE PATTERN DOTS-248
288B ; [*0E27.0020.0002] # BRAILLE PATTERN DOTS-1248
288C ; [*0E28.0020.0002] # BRAILLE PATTERN DOTS-348
288D ; [*0E29.0020.0002] # BRAILLE PATTERN DOTS-1348
288E ; [*0E2A.0020.0002] # BRAILLE PATTERN DOTS-2348
288F ; [*0E2B.0020.0002] # BRAILLE PATTERN DOTS-12348
2890 ; [*0E2C.0020.0002] # BRAILLE PATTERN DOTS-58
2891 ; [*0E2D.0020.0002] # BRAILLE PATTERN DOTS-158
2892 ; [*0E2E.0020.0002] # BRAILLE PATTERN DOTS-258
2893 ; [*0E2F.0020.0002] # BRAILLE PATTERN DOTS-1258
2894 ; [*0E30.0020.0002] # BRAILLE PATTERN DOTS-358
2895 ; [*0E31.0020.0002] # BRAILLE PATTERN DOTS-1358
2896 ; [*0E32.0020.0002] # BRAILLE PATTERN DOTS-2358
2897 ; [*0E33.0020.0002] # BRAILLE PATTERN DOTS-12358
2898 ; [*0E34.0020.0002] # BRAILLE PATTERN DOTS-458
2899 ; [*0E35.0020.0002] # BRAILLE PATTERN DOTS-1458
289A ; [*0E36.0020.0002] # BRAILLE PATTERN DOTS-2458
289B ; [*0E37.0020.0002] # BRAILLE PATTERN DOTS-12458
289C ; [*0E38.0020.0002] # BRAILLE PATTERN DOTS-3458
289D ; [*0E39.0020.0002] # BRAILLE PATTERN DOTS-13458
289E ; [*0E3A.0020.0002] # BRAILLE PATTERN DOTS-23458
289F ; [*0E3B.0020.0002] # BRAILLE PATTERN DOTS-123458
28A0 ; [*0E3C.0020.0002] # BRAILLE PATTERN DOTS-68
28A1 ; [*0E3D.0020.0002] # BRAILLE PATTERN DOTS-168
28A2 ; [*0E3E.0020.0002] # BRAILLE PATTERN DOTS-268
28A3 ; [*0E3F.0020.0002] # BRAILLE PATTERN DOTS-1268
28A4 ; [*0E40.0020.0002] # BRAILLE PATTERN DOTS-368
28A5 ; [*0E41.0020.0002] # BRAILLE PATTERN DOTS-1368
28A6 ; [*0E42.0020.0002] # BRAILLE PATTERN DOTS-2368
28A7 ; [*0E43.0020.0002] # BRAILLE PATTERN DOTS-12368
28A8 ; [*0E44.0020.0002] # BRAILLE PATTERN DOTS-468
28A9 ; [*0E45.0020.0002] # BRAILLE PATTERN DOTS-1468
28AA ; [*0E46.0020.0002] # BRAILLE PATTERN DOTS-2468
28AB ; [*0E47.0020.0002] # BRAILLE PATTERN DOTS-12468
28AC ; [*0E48.0020.0002] # BRAILLE PATTERN DOTS-3468
28AD ; [*0E49.0020.0002] # BRAILLE PATTERN DOTS-13468
28AE ; [*0E4A.0020.0002] # BRAILLE PATTERN DOTS-23468
28AF ; [*0E4B.0020.0002] # BRAILLE PATTERN DOTS-123468
28B0 ; [*0E4C.0020.0002] # BRAILLE PATTERN DOTS-568
28B1 ; [*0E4D.0020.0002] # BRAILLE PATTERN DOTS-1568
28B2 ; [*0E4E.0020.0002] # BRAILLE PATTERN DOTS-2568
28B3 ; [*0E4F.0020.0002] # BRAILLE PATTERN DOTS-12568
28B4 ; [*0E50.0020.0002] # BRAILLE PATTERN DOTS-3568
28B5 ; [*0E51.0020.0002] # BRAILLE PATTERN DOTS-13568
28B6 ; [*0E52.0020.0002] # BRAILLE PATTERN DOTS-23568
28B7 ; [*0E53.0020.0002] # BRAILLE PATTERN DOTS-123568
28B8 ; [*0E54.0020.0002] # BRAILLE PATTERN DOTS-4568
28B9 ; [*0E55.0020.0002] # BRAILLE PATTERN DOTS-14568
28BA ; [*0E56.0020.0002] # BRAILLE PATTERN DOTS-24568
28BB ; [*0E57.0020.0002] # BRAILLE PATTERN DOTS-124568
28BC ; [*0E58.0020.0002] # BRAILLE PATTERN DOTS-34568
28BD ; [*0E59.0020.0002] # BRAILLE PATTERN DOTS-134568
28BE ; [*0E5A.0020.0002] # BRAILLE PATTERN DOTS-234568
28BF ; [*0E5B.0020.0002] # BRAILLE PATTERN DOTS-1234568
28C0 ; [*0E5C.0020.0002] # BRAILLE PATTERN DOTS-78
28C1 ; [*0E5D.0020.0002] # BRAILLE PATTERN DOTS-178
28C2 ; [*0E5E.0020.0002] # BRAILLE PATTERN DOTS-278
28C3 ; [*0E5F.0020.0002] # BRAILLE PATTERN DOTS-1278
28C4 ; [*0E60.0020.0002] # BRAILLE PATTERN DOTS-378
28C5 ; [*0E61.0020.0002] # BRAILLE PATTERN DOTS-1378
28C6 ; [*0E62.0020.0002] # BRAILLE PATTERN DOTS-2378
28C7 ; [*0E63.0020.0002] # BRAILLE PATTERN DOTS-12378
28C8 ; [*0E64.0020.0002] # BRAILLE PATTERN DOTS-478
28C9 ; [*0E65.0020.0002] # BRAILLE PATTERN DOTS-1478
28CA ; [*0E66.0020.0002] # BRAILLE PATTERN DOTS-2478
28CB ; [*0E67.0020.0002] # BRAILLE PATTERN DOTS-12478
28CC ; [*0E68.0020.0002] # BRAILLE PATTERN DOTS-3478
28CD ; [*0E69.0020.0002] # BRAILLE PATTERN DOTS-13478
28CE ; [*0E6A.0020.0002] # BRAILLE PATTERN DOTS-23478
28CF ; [*0E6B.0020.0002] # BRAILLE PATTERN DOTS-123478
28D0 ; [*0E6C.0020.0002] # BRAILLE PATTERN DOTS-578
28D1 ; [*0E6D.0020.0002] # BRAILLE PATTERN DOTS-1578
28D2 ; [*0E6E.0020.0002] # BRAILLE PATTERN DOTS-2578
28D3 ; [*0E6F.0020.0002] # BRAILLE PATTERN DOTS-12578
28D4 ; [*0E70.0020.0002] # BRAILLE PATTERN DOTS-3578
28D5 ; [*0E71.0020.0002] # BRAILLE PATTERN DOTS-13578
28D6 ; [*0E72.0020.0002] # BRAILLE PATTERN DOTS-23578
28D7 ; [*0E73.0020.0002] # BRAILLE PATTERN DOTS-123578
28D8 ; [*0E74.0020.0002] # BRAILLE PATTERN DOTS-4578
28D9 ; [*0E75.0020.0002] # BRAILLE PATTERN DOTS-14578
28DA ; [*0E76.0020.0002] # BRAILLE PATTERN DOTS-24578
28DB ; [*0E77.0020.0002] # BRAILLE PATTERN DOTS-124578
28DC ; [*0E78.0020.0002] # BRAILLE PATTERN DOTS-34578
28DD ; [*0E79.0020.0002] # BRAILLE PATTERN DOTS-134578
28DE ; [*0E7A.0020.0002] # BRAILLE PATTERN DOTS-234578
28DF ; [*0E7B.0020.0002] # BRAILLE PATTERN DOTS-1234578
28E0 ; [*0E7C.0020.0002] # BRAILLE PATTERN DOTS-678
28E1 ; [*0E7D.0020.0002] # BRAILLE PATTERN DOTS-1678
28E2 ; [*0E7E.0020.0002] # BRAILLE PATTERN DOTS-2678
28E3 ; [*0E7F.0020.0002] # BRAILLE PATTERN DOTS-12678
28E4 ; [*0E80.0020.0002] # BRAILLE PATTERN DOTS-3678
28E5 ; [*0E81.0020.0002] # BRAILLE PATTERN DOTS-13678
28E6 ; [*0E82.0020.0002] # BRAILLE PATTERN DOTS-23678
28E7 ; [*0E83.0020.0002] # BRAILLE PATTERN DOTS-123678
28E8 ; [*0E84.0020.0002] # BRAILLE PATTERN DOTS-4678
28E9 ; [*0E85.0020.0002] # BRAILLE PATTERN DOTS-14678
28EA ; [*0E86.0020.0002] # BRAILLE PATTERN DOTS-24678
28EB ; [*0E87.0020.0002] # BRAILLE PATTERN DOTS-124678
28EC ; [*0E88.0020.0002] # BRAILLE PATTERN DOTS-34678
28ED ; [*0E89.0020.0002] # BRAILLE PATTERN DOTS-134678
28EE ; [*0E8A.0020.0002] # BRAILLE PATTERN DOTS-234678
28EF ; [*0E8B.0020.0002] # BRAILLE PATTERN DOTS-1234678
28F0 ; [*0E8C.0020.0002] # BRAILLE PATTERN DOTS-5678
28F1 ; [*0E8D.0020.0002] # BRAILLE PATTERN DOTS-15678
28F2 ; [*0E8E.0020.0002] # BRAILLE PATTERN DOTS-25678
28F3 ; [*0E8F.0020.0002] # BRAILLE PATTERN DOTS-125678
28F4 ; [*0E90.0020.0002] # BRAILLE PATTERN DOTS-35678
28F5 ; [*0E91.0020.0002] # BRAILLE PATTERN DOTS-135678
28F6 ; [*0E92.0020.0002] # BRAILLE PATTERN DOTS-235678
28F7 ; [*0E93.0020.0002] # BRAILLE PATTERN DOTS-1235678
28F8 ; [*0E94.0020.0002] # BRAILLE PATTERN DOTS-45678
28F9 ; [*0E95.0020.0002] # BRAILLE PATTERN DOTS-145678
28FA ; [*0E96.0020.0002] # BRAILLE PATTERN DOTS-245678
28FB ; [*0E97.0020.0002] # BRAILLE PATTERN DOTS-1245678
28FC ; [*0E98.0020.0002] # BRAILLE PATTERN DOTS-345678
28FD ; [*0E99.0020.0002] # BRAILLE PATTERN DOTS-1345678
28FE ; [*0E9A.0020.0002] # BRAILLE PATTERN DOTS-2345678
28FF ; [*0E9B.0020.0002] # BRAILLE PATTERN DOTS-12345678
2900 ; [*0AE9.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
2901 ; [*0AEA.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
2902 ; [*0AEB.0020.0002] # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
2903 ; [*0AEC.0020.0002] # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
2904 ; [*0AED.0020.0002] # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
2905 ; [*0AEE.0020.0002] # RIGHTWARDS TWO-HEADED ARROW FROM BAR
2906 ; [*0AEF.0020.0002] # LEFTWARDS DOUBLE ARROW FROM BAR
2907 ; [*0AF0.0020.0002] # RIGHTWARDS DOUBLE ARROW FROM BAR
2908 ; [*0AF1.0020.0002] # DOWNWARDS ARROW WITH HORIZONTAL STROKE
2909 ; [*0AF2.0020.0002] # UPWARDS ARROW WITH HORIZONTAL STROKE
290A ; [*0AF3.0020.0002] # UPWARDS TRIPLE ARROW
290B ; [*0AF4.0020.0002] # DOWNWARDS TRIPLE ARROW
290C ; [*0AF5.0020.0002] # LEFTWARDS DOUBLE DASH ARROW
290D ; [*0AF6.0020.0002] # RIGHTWARDS DOUBLE DASH ARROW
290E ; [*0AF7.0020.0002] # LEFTWARDS TRIPLE DASH ARROW
290F ; [*0AF8.0020.0002] # RIGHTWARDS TRIPLE DASH ARROW
2910 ; [*0AF9.0020.0002] # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
2911 ; [*0AFA.0020.0002] # RIGHTWARDS ARROW WITH DOTTED STEM
2912 ; [*0AFB.0020.0002] # UPWARDS ARROW TO BAR
2913 ; [*0AFC.0020.0002] # DOWNWARDS ARROW TO BAR
2914 ; [*0AFD.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
2915 ; [*0AFE.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
2916 ; [*0AFF.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL
2917 ; [*0B00.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
2918 ; [*0B01.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
2919 ; [*0B02.0020.0002] # LEFTWARDS ARROW-TAIL
291A ; [*0B03.0020.0002] # RIGHTWARDS ARROW-TAIL
291B ; [*0B04.0020.0002] # LEFTWARDS DOUBLE ARROW-TAIL
291C ; [*0B05.0020.0002] # RIGHTWARDS DOUBLE ARROW-TAIL
291D ; [*0B06.0020.0002] # LEFTWARDS ARROW TO BLACK DIAMOND
291E ; [*0B07.0020.0002] # RIGHTWARDS ARROW TO BLACK DIAMOND
291F ; [*0B08.0020.0002] # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
2920 ; [*0B09.0020.0002] # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
2921 ; [*0B0A.0020.0002] # NORTH WEST AND SOUTH EAST ARROW
2922 ; [*0B0B.0020.0002] # NORTH EAST AND SOUTH WEST ARROW
2923 ; [*0B0C.0020.0002] # NORTH WEST ARROW WITH HOOK
2924 ; [*0B0D.0020.0002] # NORTH EAST ARROW WITH HOOK
2925 ; [*0B0E.0020.0002] # SOUTH EAST ARROW WITH HOOK
2926 ; [*0B0F.0020.0002] # SOUTH WEST ARROW WITH HOOK
2927 ; [*0B10.0020.0002] # NORTH WEST ARROW AND NORTH EAST ARROW
2928 ; [*0B11.0020.0002] # NORTH EAST ARROW AND SOUTH EAST ARROW
2929 ; [*0B12.0020.0002] # SOUTH EAST ARROW AND SOUTH WEST ARROW
292A ; [*0B13.0020.0002] # SOUTH WEST ARROW AND NORTH WEST ARROW
292B ; [*0B14.0020.0002] # RISING DIAGONAL CROSSING FALLING DIAGONAL
292C ; [*0B15.0020.0002] # FALLING DIAGONAL CROSSING RISING DIAGONAL
292D ; [*0B16.0020.0002] # SOUTH EAST ARROW CROSSING NORTH EAST ARROW
292E ; [*0B17.0020.0002] # NORTH EAST ARROW CROSSING SOUTH EAST ARROW
292F ; [*0B18.0020.0002] # FALLING DIAGONAL CROSSING NORTH EAST ARROW
2930 ; [*0B19.0020.0002] # RISING DIAGONAL CROSSING SOUTH EAST ARROW
2931 ; [*0B1A.0020.0002] # NORTH EAST ARROW CROSSING NORTH WEST ARROW
2932 ; [*0B1B.0020.0002] # NORTH WEST ARROW CROSSING NORTH EAST ARROW
2933 ; [*0B1C.0020.0002] # WAVE ARROW POINTING DIRECTLY RIGHT
2934 ; [*0B1D.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
2935 ; [*0B1E.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
2936 ; [*0B1F.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
2937 ; [*0B20.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
2938 ; [*0B21.0020.0002] # RIGHT-SIDE ARC CLOCKWISE ARROW
2939 ; [*0B22.0020.0002] # LEFT-SIDE ARC ANTICLOCKWISE ARROW
293A ; [*0B23.0020.0002] # TOP ARC ANTICLOCKWISE ARROW
293B ; [*0B24.0020.0002] # BOTTOM ARC ANTICLOCKWISE ARROW
293C ; [*0B25.0020.0002] # TOP ARC CLOCKWISE ARROW WITH MINUS
293D ; [*0B26.0020.0002] # TOP ARC ANTICLOCKWISE ARROW WITH PLUS
293E ; [*0B27.0020.0002] # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
293F ; [*0B28.0020.0002] # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
2940 ; [*0B29.0020.0002] # ANTICLOCKWISE CLOSED CIRCLE ARROW
2941 ; [*0B2A.0020.0002] # CLOCKWISE CLOSED CIRCLE ARROW
2942 ; [*0B2B.0020.0002] # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
2943 ; [*0B2C.0020.0002] # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
2944 ; [*0B2D.0020.0002] # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
2945 ; [*0B2E.0020.0002] # RIGHTWARDS ARROW WITH PLUS BELOW
2946 ; [*0B2F.0020.0002] # LEFTWARDS ARROW WITH PLUS BELOW
2947 ; [*0B30.0020.0002] # RIGHTWARDS ARROW THROUGH X
2948 ; [*0B31.0020.0002] # LEFT RIGHT ARROW THROUGH SMALL CIRCLE
2949 ; [*0B32.0020.0002] # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
294A ; [*0B33.0020.0002] # LEFT BARB UP RIGHT BARB DOWN HARPOON
294B ; [*0B34.0020.0002] # LEFT BARB DOWN RIGHT BARB UP HARPOON
294C ; [*0B35.0020.0002] # UP BARB RIGHT DOWN BARB LEFT HARPOON
294D ; [*0B36.0020.0002] # UP BARB LEFT DOWN BARB RIGHT HARPOON
294E ; [*0B37.0020.0002] # LEFT BARB UP RIGHT BARB UP HARPOON
294F ; [*0B38.0020.0002] # UP BARB RIGHT DOWN BARB RIGHT HARPOON
2950 ; [*0B39.0020.0002] # LEFT BARB DOWN RIGHT BARB DOWN HARPOON
2951 ; [*0B3A.0020.0002] # UP BARB LEFT DOWN BARB LEFT HARPOON
2952 ; [*0B3B.0020.0002] # LEFTWARDS HARPOON WITH BARB UP TO BAR
2953 ; [*0B3C.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP TO BAR
2954 ; [*0B3D.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT TO BAR
2955 ; [*0B3E.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
2956 ; [*0B3F.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN TO BAR
2957 ; [*0B40.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
2958 ; [*0B41.0020.0002] # UPWARDS HARPOON WITH BARB LEFT TO BAR
2959 ; [*0B42.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT TO BAR
295A ; [*0B43.0020.0002] # LEFTWARDS HARPOON WITH BARB UP FROM BAR
295B ; [*0B44.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP FROM BAR
295C ; [*0B45.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
295D ; [*0B46.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
295E ; [*0B47.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
295F ; [*0B48.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
2960 ; [*0B49.0020.0002] # UPWARDS HARPOON WITH BARB LEFT FROM BAR
2961 ; [*0B4A.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
2962 ; [*0B4B.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
2963 ; [*0B4C.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
2964 ; [*0B4D.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
2965 ; [*0B4E.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
2966 ; [*0B4F.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
2967 ; [*0B50.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
2968 ; [*0B51.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
2969 ; [*0B52.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
296A ; [*0B53.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
296B ; [*0B54.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
296C ; [*0B55.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
296D ; [*0B56.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
296E ; [*0B57.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
296F ; [*0B58.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
2970 ; [*0B59.0020.0002] # RIGHT DOUBLE ARROW WITH ROUNDED HEAD
2971 ; [*0B5A.0020.0002] # EQUALS SIGN ABOVE RIGHTWARDS ARROW
2972 ; [*0B5B.0020.0002] # TILDE OPERATOR ABOVE RIGHTWARDS ARROW
2973 ; [*0B5C.0020.0002] # LEFTWARDS ARROW ABOVE TILDE OPERATOR
2974 ; [*0B5D.0020.0002] # RIGHTWARDS ARROW ABOVE TILDE OPERATOR
2975 ; [*0B5E.0020.0002] # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
2976 ; [*0B5F.0020.0002] # LESS-THAN ABOVE LEFTWARDS ARROW
2977 ; [*0B60.0020.0002] # LEFTWARDS ARROW THROUGH LESS-THAN
2978 ; [*0B61.0020.0002] # GREATER-THAN ABOVE RIGHTWARDS ARROW
2979 ; [*0B62.0020.0002] # SUBSET ABOVE RIGHTWARDS ARROW
297A ; [*0B63.0020.0002] # LEFTWARDS ARROW THROUGH SUBSET
297B ; [*0B64.0020.0002] # SUPERSET ABOVE LEFTWARDS ARROW
297C ; [*0B65.0020.0002] # LEFT FISH TAIL
297D ; [*0B66.0020.0002] # RIGHT FISH TAIL
297E ; [*0B67.0020.0002] # UP FISH TAIL
297F ; [*0B68.0020.0002] # DOWN FISH TAIL
2980 ; [*0B69.0020.0002] # TRIPLE VERTICAL BAR DELIMITER
2981 ; [*0B6A.0020.0002] # Z NOTATION SPOT
2982 ; [*0B6B.0020.0002] # Z NOTATION TYPE COLON
2983 ; [*032B.0020.0002] # LEFT WHITE CURLY BRACKET
2984 ; [*032C.0020.0002] # RIGHT WHITE CURLY BRACKET
2985 ; [*032D.0020.0002] # LEFT WHITE PARENTHESIS
2986 ; [*032E.0020.0002] # RIGHT WHITE PARENTHESIS
2987 ; [*032F.0020.0002] # Z NOTATION LEFT IMAGE BRACKET
2988 ; [*0330.0020.0002] # Z NOTATION RIGHT IMAGE BRACKET
2989 ; [*0331.0020.0002] # Z NOTATION LEFT BINDING BRACKET
298A ; [*0332.0020.0002] # Z NOTATION RIGHT BINDING BRACKET
298B ; [*0333.0020.0002] # LEFT SQUARE BRACKET WITH UNDERBAR
298C ; [*0334.0020.0002] # RIGHT SQUARE BRACKET WITH UNDERBAR
298D ; [*0335.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
298E ; [*0336.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
298F ; [*0337.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
2990 ; [*0338.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
2991 ; [*0339.0020.0002] # LEFT ANGLE BRACKET WITH DOT
2992 ; [*033A.0020.0002] # RIGHT ANGLE BRACKET WITH DOT
2993 ; [*033B.0020.0002] # LEFT ARC LESS-THAN BRACKET
2994 ; [*033C.0020.0002] # RIGHT ARC GREATER-THAN BRACKET
2995 ; [*033D.0020.0002] # DOUBLE LEFT ARC GREATER-THAN BRACKET
2996 ; [*033E.0020.0002] # DOUBLE RIGHT ARC LESS-THAN BRACKET
2997 ; [*033F.0020.0002] # LEFT BLACK TORTOISE SHELL BRACKET
2998 ; [*0340.0020.0002] # RIGHT BLACK TORTOISE SHELL BRACKET
2999 ; [*0B6C.0020.0002] # DOTTED FENCE
299A ; [*0B6D.0020.0002] # VERTICAL ZIGZAG LINE
299B ; [*0B6E.0020.0002] # MEASURED ANGLE OPENING LEFT
299C ; [*0B6F.0020.0002] # RIGHT ANGLE VARIANT WITH SQUARE
299D ; [*0B70.0020.0002] # MEASURED RIGHT ANGLE WITH DOT
299E ; [*0B71.0020.0002] # ANGLE WITH S INSIDE
299F ; [*0B72.0020.0002] # ACUTE ANGLE
29A0 ; [*0B73.0020.0002] # SPHERICAL ANGLE OPENING LEFT
29A1 ; [*0B74.0020.0002] # SPHERICAL ANGLE OPENING UP
29A2 ; [*0B75.0020.0002] # TURNED ANGLE
29A3 ; [*0B76.0020.0002] # REVERSED ANGLE
29A4 ; [*0B77.0020.0002] # ANGLE WITH UNDERBAR
29A5 ; [*0B78.0020.0002] # REVERSED ANGLE WITH UNDERBAR
29A6 ; [*0B79.0020.0002] # OBLIQUE ANGLE OPENING UP
29A7 ; [*0B7A.0020.0002] # OBLIQUE ANGLE OPENING DOWN
29A8 ; [*0B7B.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
29A9 ; [*0B7C.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
29AA ; [*0B7D.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
29AB ; [*0B7E.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
29AC ; [*0B7F.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
29AD ; [*0B80.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
29AE ; [*0B81.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
29AF ; [*0B82.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
29B0 ; [*0B83.0020.0002] # REVERSED EMPTY SET
29B1 ; [*0B84.0020.0002] # EMPTY SET WITH OVERBAR
29B2 ; [*0B85.0020.0002] # EMPTY SET WITH SMALL CIRCLE ABOVE
29B3 ; [*0B86.0020.0002] # EMPTY SET WITH RIGHT ARROW ABOVE
29B4 ; [*0B87.0020.0002] # EMPTY SET WITH LEFT ARROW ABOVE
29B5 ; [*0B88.0020.0002] # CIRCLE WITH HORIZONTAL BAR
29B6 ; [*0B89.0020.0002] # CIRCLED VERTICAL BAR
29B7 ; [*0B8A.0020.0002] # CIRCLED PARALLEL
29B8 ; [*0B8B.0020.0002] # CIRCLED REVERSE SOLIDUS
29B9 ; [*0B8C.0020.0002] # CIRCLED PERPENDICULAR
29BA ; [*0B8D.0020.0002] # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
29BB ; [*0B8E.0020.0002] # CIRCLE WITH SUPERIMPOSED X
29BC ; [*0B8F.0020.0002] # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
29BD ; [*0B90.0020.0002] # UP ARROW THROUGH CIRCLE
29BE ; [*0B91.0020.0002] # CIRCLED WHITE BULLET
29BF ; [*0B92.0020.0002] # CIRCLED BULLET
29C0 ; [*0B93.0020.0002] # CIRCLED LESS-THAN
29C1 ; [*0B94.0020.0002] # CIRCLED GREATER-THAN
29C2 ; [*0B95.0020.0002] # CIRCLE WITH SMALL CIRCLE TO THE RIGHT
29C3 ; [*0B96.0020.0002] # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
29C4 ; [*0B97.0020.0002] # SQUARED RISING DIAGONAL SLASH
29C5 ; [*0B98.0020.0002] # SQUARED FALLING DIAGONAL SLASH
29C6 ; [*0B99.0020.0002] # SQUARED ASTERISK
29C7 ; [*0B9A.0020.0002] # SQUARED SMALL CIRCLE
29C8 ; [*0B9B.0020.0002] # SQUARED SQUARE
29C9 ; [*0B9C.0020.0002] # TWO JOINED SQUARES
29CA ; [*0B9D.0020.0002] # TRIANGLE WITH DOT ABOVE
29CB ; [*0B9E.0020.0002] # TRIANGLE WITH UNDERBAR
29CC ; [*0B9F.0020.0002] # S IN TRIANGLE
29CD ; [*0BA0.0020.0002] # TRIANGLE WITH SERIFS AT BOTTOM
29CE ; [*0BA1.0020.0002] # RIGHT TRIANGLE ABOVE LEFT TRIANGLE
29CF ; [*0BA2.0020.0002] # LEFT TRIANGLE BESIDE VERTICAL BAR
29D0 ; [*0BA3.0020.0002] # VERTICAL BAR BESIDE RIGHT TRIANGLE
29D1 ; [*0BA4.0020.0002] # BOWTIE WITH LEFT HALF BLACK
29D2 ; [*0BA5.0020.0002] # BOWTIE WITH RIGHT HALF BLACK
29D3 ; [*0BA6.0020.0002] # BLACK BOWTIE
29D4 ; [*0BA7.0020.0002] # TIMES WITH LEFT HALF BLACK
29D5 ; [*0BA8.0020.0002] # TIMES WITH RIGHT HALF BLACK
29D6 ; [*0BA9.0020.0002] # WHITE HOURGLASS
29D7 ; [*0BAA.0020.0002] # BLACK HOURGLASS
29D8 ; [*0385.0020.0002] # LEFT WIGGLY FENCE
29D9 ; [*0386.0020.0002] # RIGHT WIGGLY FENCE
29DA ; [*0387.0020.0002] # LEFT DOUBLE WIGGLY FENCE
29DB ; [*0388.0020.0002] # RIGHT DOUBLE WIGGLY FENCE
29DC ; [*0BAB.0020.0002] # INCOMPLETE INFINITY
29DD ; [*0BAC.0020.0002] # TIE OVER INFINITY
29DE ; [*0BAD.0020.0002] # INFINITY NEGATED WITH VERTICAL BAR
29DF ; [*0BAE.0020.0002] # DOUBLE-ENDED MULTIMAP
29E0 ; [*0BAF.0020.0002] # SQUARE WITH CONTOURED OUTLINE
29E1 ; [*0BB0.0020.0002] # INCREASES AS
29E2 ; [*0BB1.0020.0002] # SHUFFLE PRODUCT
29E3 ; [*0BB2.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL
29E4 ; [*0BB3.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
29E5 ; [*0BB4.0020.0002] # IDENTICAL TO AND SLANTED PARALLEL
29E6 ; [*0BB5.0020.0002] # GLEICH STARK
29E7 ; [*0BB6.0020.0002] # THERMODYNAMIC
29E8 ; [*0BB7.0020.0002] # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
29E9 ; [*0BB8.0020.0002] # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
29EA ; [*0BB9.0020.0002] # BLACK DIAMOND WITH DOWN ARROW
29EB ; [*0BBA.0020.0002] # BLACK LOZENGE
29EC ; [*0BBB.0020.0002] # WHITE CIRCLE WITH DOWN ARROW
29ED ; [*0BBC.0020.0002] # BLACK CIRCLE WITH DOWN ARROW
29EE ; [*0BBD.0020.0002] # ERROR-BARRED WHITE SQUARE
29EF ; [*0BBE.0020.0002] # ERROR-BARRED BLACK SQUARE
29F0 ; [*0BBF.0020.0002] # ERROR-BARRED WHITE DIAMOND
29F1 ; [*0BC0.0020.0002] # ERROR-BARRED BLACK DIAMOND
29F2 ; [*0BC1.0020.0002] # ERROR-BARRED WHITE CIRCLE
29F3 ; [*0BC2.0020.0002] # ERROR-BARRED BLACK CIRCLE
29F4 ; [*0BC3.0020.0002] # RULE-DELAYED
29F5 ; [*0BC4.0020.0002] # REVERSE SOLIDUS OPERATOR
29F6 ; [*0BC5.0020.0002] # SOLIDUS WITH OVERBAR
29F7 ; [*0BC6.0020.0002] # REVERSE SOLIDUS WITH HORIZONTAL STROKE
29F8 ; [*0BC7.0020.0002] # BIG SOLIDUS
29F9 ; [*0BC8.0020.0002] # BIG REVERSE SOLIDUS
29FA ; [*0BC9.0020.0002] # DOUBLE PLUS
29FB ; [*0BCA.0020.0002] # TRIPLE PLUS
29FC ; [*0329.0020.0002] # LEFT-POINTING CURVED ANGLE BRACKET
29FD ; [*032A.0020.0002] # RIGHT-POINTING CURVED ANGLE BRACKET
29FE ; [*0BCB.0020.0002] # TINY
29FF ; [*0BCC.0020.0002] # MINY
2A00 ; [*0BCD.0020.0002] # N-ARY CIRCLED DOT OPERATOR
2A01 ; [*0BCE.0020.0002] # N-ARY CIRCLED PLUS OPERATOR
2A02 ; [*0BCF.0020.0002] # N-ARY CIRCLED TIMES OPERATOR
2A03 ; [*0BD0.0020.0002] # N-ARY UNION OPERATOR WITH DOT
2A04 ; [*0BD1.0020.0002] # N-ARY UNION OPERATOR WITH PLUS
2A05 ; [*0BD2.0020.0002] # N-ARY SQUARE INTERSECTION OPERATOR
2A06 ; [*0BD3.0020.0002] # N-ARY SQUARE UNION OPERATOR
2A07 ; [*0BD4.0020.0002] # TWO LOGICAL AND OPERATOR
2A08 ; [*0BD5.0020.0002] # TWO LOGICAL OR OPERATOR
2A09 ; [*0BD6.0020.0002] # N-ARY TIMES OPERATOR
2A0A ; [*0BD7.0020.0002] # MODULO TWO SUM
2A0B ; [*0BD8.0020.0002] # SUMMATION WITH INTEGRAL
2A0C ; [*063C.0020.0004][*063C.0020.0004][*063C.0020.0004][*063C.0020.0004] # QUADRUPLE INTEGRAL OPERATOR
2A0D ; [*0BD9.0020.0002] # FINITE PART INTEGRAL
2A0E ; [*0BDA.0020.0002] # INTEGRAL WITH DOUBLE STROKE
2A0F ; [*0BDB.0020.0002] # INTEGRAL AVERAGE WITH SLASH
2A10 ; [*0BDC.0020.0002] # CIRCULATION FUNCTION
2A11 ; [*0BDD.0020.0002] # ANTICLOCKWISE INTEGRATION
2A12 ; [*0BDE.0020.0002] # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
2A13 ; [*0BDF.0020.0002] # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
2A14 ; [*0BE0.0020.0002] # LINE INTEGRATION NOT INCLUDING THE POLE
2A15 ; [*0BE1.0020.0002] # INTEGRAL AROUND A POINT OPERATOR
2A16 ; [*0BE2.0020.0002] # QUATERNION INTEGRAL OPERATOR
2A17 ; [*0BE3.0020.0002] # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
2A18 ; [*0BE4.0020.0002] # INTEGRAL WITH TIMES SIGN
2A19 ; [*0BE5.0020.0002] # INTEGRAL WITH INTERSECTION
2A1A ; [*0BE6.0020.0002] # INTEGRAL WITH UNION
2A1B ; [*0BE7.0020.0002] # INTEGRAL WITH OVERBAR
2A1C ; [*0BE8.0020.0002] # INTEGRAL WITH UNDERBAR
2A1D ; [*0BE9.0020.0002] # JOIN
2A1E ; [*0BEA.0020.0002] # LARGE LEFT TRIANGLE OPERATOR
2A1F ; [*0BEB.0020.0002] # Z NOTATION SCHEMA COMPOSITION
2A20 ; [*0BEC.0020.0002] # Z NOTATION SCHEMA PIPING
2A21 ; [*0BED.0020.0002] # Z NOTATION SCHEMA PROJECTION
2A22 ; [*0BEE.0020.0002] # PLUS SIGN WITH SMALL CIRCLE ABOVE
2A23 ; [*0BEF.0020.0002] # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
2A24 ; [*0BF0.0020.0002] # PLUS SIGN WITH TILDE ABOVE
2A25 ; [*0BF1.0020.0002] # PLUS SIGN WITH DOT BELOW
2A26 ; [*0BF2.0020.0002] # PLUS SIGN WITH TILDE BELOW
2A27 ; [*0BF3.0020.0002] # PLUS SIGN WITH SUBSCRIPT TWO
2A28 ; [*0BF4.0020.0002] # PLUS SIGN WITH BLACK TRIANGLE
2A29 ; [*0BF5.0020.0002] # MINUS SIGN WITH COMMA ABOVE
2A2A ; [*0BF6.0020.0002] # MINUS SIGN WITH DOT BELOW
2A2B ; [*0BF7.0020.0002] # MINUS SIGN WITH FALLING DOTS
2A2C ; [*0BF8.0020.0002] # MINUS SIGN WITH RISING DOTS
2A2D ; [*0BF9.0020.0002] # PLUS SIGN IN LEFT HALF CIRCLE
2A2E ; [*0BFA.0020.0002] # PLUS SIGN IN RIGHT HALF CIRCLE
2A2F ; [*0BFB.0020.0002] # VECTOR OR CROSS PRODUCT
2A30 ; [*0BFC.0020.0002] # MULTIPLICATION SIGN WITH DOT ABOVE
2A31 ; [*0BFD.0020.0002] # MULTIPLICATION SIGN WITH UNDERBAR
2A32 ; [*0BFE.0020.0002] # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
2A33 ; [*0BFF.0020.0002] # SMASH PRODUCT
2A34 ; [*0C00.0020.0002] # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
2A35 ; [*0C01.0020.0002] # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
2A36 ; [*0C02.0020.0002] # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
2A37 ; [*0C03.0020.0002] # MULTIPLICATION SIGN IN DOUBLE CIRCLE
2A38 ; [*0C04.0020.0002] # CIRCLED DIVISION SIGN
2A39 ; [*0C05.0020.0002] # PLUS SIGN IN TRIANGLE
2A3A ; [*0C06.0020.0002] # MINUS SIGN IN TRIANGLE
2A3B ; [*0C07.0020.0002] # MULTIPLICATION SIGN IN TRIANGLE
2A3C ; [*0C08.0020.0002] # INTERIOR PRODUCT
2A3D ; [*0C09.0020.0002] # RIGHTHAND INTERIOR PRODUCT
2A3E ; [*0C0A.0020.0002] # Z NOTATION RELATIONAL COMPOSITION
2A3F ; [*0C0B.0020.0002] # AMALGAMATION OR COPRODUCT
2A40 ; [*0C0C.0020.0002] # INTERSECTION WITH DOT
2A41 ; [*0C0D.0020.0002] # UNION WITH MINUS SIGN
2A42 ; [*0C0E.0020.0002] # UNION WITH OVERBAR
2A43 ; [*0C0F.0020.0002] # INTERSECTION WITH OVERBAR
2A44 ; [*0C10.0020.0002] # INTERSECTION WITH LOGICAL AND
2A45 ; [*0C11.0020.0002] # UNION WITH LOGICAL OR
2A46 ; [*0C12.0020.0002] # UNION ABOVE INTERSECTION
2A47 ; [*0C13.0020.0002] # INTERSECTION ABOVE UNION
2A48 ; [*0C14.0020.0002] # UNION ABOVE BAR ABOVE INTERSECTION
2A49 ; [*0C15.0020.0002] # INTERSECTION ABOVE BAR ABOVE UNION
2A4A ; [*0C16.0020.0002] # UNION BESIDE AND JOINED WITH UNION
2A4B ; [*0C17.0020.0002] # INTERSECTION BESIDE AND JOINED WITH INTERSECTION
2A4C ; [*0C18.0020.0002] # CLOSED UNION WITH SERIFS
2A4D ; [*0C19.0020.0002] # CLOSED INTERSECTION WITH SERIFS
2A4E ; [*0C1A.0020.0002] # DOUBLE SQUARE INTERSECTION
2A4F ; [*0C1B.0020.0002] # DOUBLE SQUARE UNION
2A50 ; [*0C1C.0020.0002] # CLOSED UNION WITH SERIFS AND SMASH PRODUCT
2A51 ; [*0C1D.0020.0002] # LOGICAL AND WITH DOT ABOVE
2A52 ; [*0C1E.0020.0002] # LOGICAL OR WITH DOT ABOVE
2A53 ; [*0C1F.0020.0002] # DOUBLE LOGICAL AND
2A54 ; [*0C20.0020.0002] # DOUBLE LOGICAL OR
2A55 ; [*0C21.0020.0002] # TWO INTERSECTING LOGICAL AND
2A56 ; [*0C22.0020.0002] # TWO INTERSECTING LOGICAL OR
2A57 ; [*0C23.0020.0002] # SLOPING LARGE OR
2A58 ; [*0C24.0020.0002] # SLOPING LARGE AND
2A59 ; [*0C25.0020.0002] # LOGICAL OR OVERLAPPING LOGICAL AND
2A5A ; [*0C26.0020.0002] # LOGICAL AND WITH MIDDLE STEM
2A5B ; [*0C27.0020.0002] # LOGICAL OR WITH MIDDLE STEM
2A5C ; [*0C28.0020.0002] # LOGICAL AND WITH HORIZONTAL DASH
2A5D ; [*0C29.0020.0002] # LOGICAL OR WITH HORIZONTAL DASH
2A5E ; [*0C2A.0020.0002] # LOGICAL AND WITH DOUBLE OVERBAR
2A5F ; [*0C2B.0020.0002] # LOGICAL AND WITH UNDERBAR
2A60 ; [*0C2C.0020.0002] # LOGICAL AND WITH DOUBLE UNDERBAR
2A61 ; [*0C2D.0020.0002] # SMALL VEE WITH UNDERBAR
2A62 ; [*0C2E.0020.0002] # LOGICAL OR WITH DOUBLE OVERBAR
2A63 ; [*0C2F.0020.0002] # LOGICAL OR WITH DOUBLE UNDERBAR
2A64 ; [*0C30.0020.0002] # Z NOTATION DOMAIN ANTIRESTRICTION
2A65 ; [*0C31.0020.0002] # Z NOTATION RANGE ANTIRESTRICTION
2A66 ; [*0C32.0020.0002] # EQUALS SIGN WITH DOT BELOW
2A67 ; [*0C33.0020.0002] # IDENTICAL WITH DOT ABOVE
2A68 ; [*0C34.0020.0002] # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
2A69 ; [*0C35.0020.0002] # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
2A6A ; [*0C36.0020.0002] # TILDE OPERATOR WITH DOT ABOVE
2A6B ; [*0C37.0020.0002] # TILDE OPERATOR WITH RISING DOTS
2A6C ; [*0C38.0020.0002] # SIMILAR MINUS SIMILAR
2A6D ; [*0C39.0020.0002] # CONGRUENT WITH DOT ABOVE
2A6E ; [*0C3A.0020.0002] # EQUALS WITH ASTERISK
2A6F ; [*0C3B.0020.0002] # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
2A70 ; [*0C3C.0020.0002] # APPROXIMATELY EQUAL OR EQUAL TO
2A71 ; [*0C3D.0020.0002] # EQUALS SIGN ABOVE PLUS SIGN
2A72 ; [*0C3E.0020.0002] # PLUS SIGN ABOVE EQUALS SIGN
2A73 ; [*0C3F.0020.0002] # EQUALS SIGN ABOVE TILDE OPERATOR
2A74 ; [*0239.0020.0004][*0239.0020.0004][*061B.0020.0004] # DOUBLE COLON EQUAL
2A75 ; [*061B.0020.0004][*061B.0020.0004] # TWO CONSECUTIVE EQUALS SIGNS
2A76 ; [*061B.0020.0004][*061B.0020.0004][*061B.0020.0004] # THREE CONSECUTIVE EQUALS SIGNS
2A77 ; [*0C40.0020.0002] # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
2A78 ; [*0C41.0020.0002] # EQUIVALENT WITH FOUR DOTS ABOVE
2A79 ; [*0C42.0020.0002] # LESS-THAN WITH CIRCLE INSIDE
2A7A ; [*0C43.0020.0002] # GREATER-THAN WITH CIRCLE INSIDE
2A7B ; [*0C44.0020.0002] # LESS-THAN WITH QUESTION MARK ABOVE
2A7C ; [*0C45.0020.0002] # GREATER-THAN WITH QUESTION MARK ABOVE
2A7D ; [*0C46.0020.0002] # LESS-THAN OR SLANTED EQUAL TO
2A7E ; [*0C47.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO
2A7F ; [*0C48.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
2A80 ; [*0C49.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
2A81 ; [*0C4A.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
2A82 ; [*0C4B.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
2A83 ; [*0C4C.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
2A84 ; [*0C4D.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
2A85 ; [*0C4E.0020.0002] # LESS-THAN OR APPROXIMATE
2A86 ; [*0C4F.0020.0002] # GREATER-THAN OR APPROXIMATE
2A87 ; [*0C50.0020.0002] # LESS-THAN AND SINGLE-LINE NOT EQUAL TO
2A88 ; [*0C51.0020.0002] # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
2A89 ; [*0C52.0020.0002] # LESS-THAN AND NOT APPROXIMATE
2A8A ; [*0C53.0020.0002] # GREATER-THAN AND NOT APPROXIMATE
2A8B ; [*0C54.0020.0002] # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
2A8C ; [*0C55.0020.0002] # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
2A8D ; [*0C56.0020.0002] # LESS-THAN ABOVE SIMILAR OR EQUAL
2A8E ; [*0C57.0020.0002] # GREATER-THAN ABOVE SIMILAR OR EQUAL
2A8F ; [*0C58.0020.0002] # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
2A90 ; [*0C59.0020.0002] # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
2A91 ; [*0C5A.0020.0002] # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
2A92 ; [*0C5B.0020.0002] # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
2A93 ; [*0C5C.0020.0002] # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
2A94 ; [*0C5D.0020.0002] # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
2A95 ; [*0C5E.0020.0002] # SLANTED EQUAL TO OR LESS-THAN
2A96 ; [*0C5F.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN
2A97 ; [*0C60.0020.0002] # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
2A98 ; [*0C61.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
2A99 ; [*0C62.0020.0002] # DOUBLE-LINE EQUAL TO OR LESS-THAN
2A9A ; [*0C63.0020.0002] # DOUBLE-LINE EQUAL TO OR GREATER-THAN
2A9B ; [*0C64.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
2A9C ; [*0C65.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
2A9D ; [*0C66.0020.0002] # SIMILAR OR LESS-THAN
2A9E ; [*0C67.0020.0002] # SIMILAR OR GREATER-THAN
2A9F ; [*0C68.0020.0002] # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
2AA0 ; [*0C69.0020.0002] # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
2AA1 ; [*0C6A.0020.0002] # DOUBLE NESTED LESS-THAN
2AA2 ; [*0C6B.0020.0002] # DOUBLE NESTED GREATER-THAN
2AA3 ; [*0C6C.0020.0002] # DOUBLE NESTED LESS-THAN WITH UNDERBAR
2AA4 ; [*0C6D.0020.0002] # GREATER-THAN OVERLAPPING LESS-THAN
2AA5 ; [*0C6E.0020.0002] # GREATER-THAN BESIDE LESS-THAN
2AA6 ; [*0C6F.0020.0002] # LESS-THAN CLOSED BY CURVE
2AA7 ; [*0C70.0020.0002] # GREATER-THAN CLOSED BY CURVE
2AA8 ; [*0C71.0020.0002] # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
2AA9 ; [*0C72.0020.0002] # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
2AAA ; [*0C73.0020.0002] # SMALLER THAN
2AAB ; [*0C74.0020.0002] # LARGER THAN
2AAC ; [*0C75.0020.0002] # SMALLER THAN OR EQUAL TO
2AAD ; [*0C76.0020.0002] # LARGER THAN OR EQUAL TO
2AAE ; [*0C77.0020.0002] # EQUALS SIGN WITH BUMPY ABOVE
2AAF ; [*0C78.0020.0002] # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
2AB0 ; [*0C79.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
2AB1 ; [*0C7A.0020.0002] # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
2AB2 ; [*0C7B.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
2AB3 ; [*0C7C.0020.0002] # PRECEDES ABOVE EQUALS SIGN
2AB4 ; [*0C7D.0020.0002] # SUCCEEDS ABOVE EQUALS SIGN
2AB5 ; [*0C7E.0020.0002] # PRECEDES ABOVE NOT EQUAL TO
2AB6 ; [*0C7F.0020.0002] # SUCCEEDS ABOVE NOT EQUAL TO
2AB7 ; [*0C80.0020.0002] # PRECEDES ABOVE ALMOST EQUAL TO
2AB8 ; [*0C81.0020.0002] # SUCCEEDS ABOVE ALMOST EQUAL TO
2AB9 ; [*0C82.0020.0002] # PRECEDES ABOVE NOT ALMOST EQUAL TO
2ABA ; [*0C83.0020.0002] # SUCCEEDS ABOVE NOT ALMOST EQUAL TO
2ABB ; [*0C84.0020.0002] # DOUBLE PRECEDES
2ABC ; [*0C85.0020.0002] # DOUBLE SUCCEEDS
2ABD ; [*0C86.0020.0002] # SUBSET WITH DOT
2ABE ; [*0C87.0020.0002] # SUPERSET WITH DOT
2ABF ; [*0C88.0020.0002] # SUBSET WITH PLUS SIGN BELOW
2AC0 ; [*0C89.0020.0002] # SUPERSET WITH PLUS SIGN BELOW
2AC1 ; [*0C8A.0020.0002] # SUBSET WITH MULTIPLICATION SIGN BELOW
2AC2 ; [*0C8B.0020.0002] # SUPERSET WITH MULTIPLICATION SIGN BELOW
2AC3 ; [*0C8C.0020.0002] # SUBSET OF OR EQUAL TO WITH DOT ABOVE
2AC4 ; [*0C8D.0020.0002] # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
2AC5 ; [*0C8E.0020.0002] # SUBSET OF ABOVE EQUALS SIGN
2AC6 ; [*0C8F.0020.0002] # SUPERSET OF ABOVE EQUALS SIGN
2AC7 ; [*0C90.0020.0002] # SUBSET OF ABOVE TILDE OPERATOR
2AC8 ; [*0C91.0020.0002] # SUPERSET OF ABOVE TILDE OPERATOR
2AC9 ; [*0C92.0020.0002] # SUBSET OF ABOVE ALMOST EQUAL TO
2ACA ; [*0C93.0020.0002] # SUPERSET OF ABOVE ALMOST EQUAL TO
2ACB ; [*0C94.0020.0002] # SUBSET OF ABOVE NOT EQUAL TO
2ACC ; [*0C95.0020.0002] # SUPERSET OF ABOVE NOT EQUAL TO
2ACD ; [*0C96.0020.0002] # SQUARE LEFT OPEN BOX OPERATOR
2ACE ; [*0C97.0020.0002] # SQUARE RIGHT OPEN BOX OPERATOR
2ACF ; [*0C98.0020.0002] # CLOSED SUBSET
2AD0 ; [*0C99.0020.0002] # CLOSED SUPERSET
2AD1 ; [*0C9A.0020.0002] # CLOSED SUBSET OR EQUAL TO
2AD2 ; [*0C9B.0020.0002] # CLOSED SUPERSET OR EQUAL TO
2AD3 ; [*0C9C.0020.0002] # SUBSET ABOVE SUPERSET
2AD4 ; [*0C9D.0020.0002] # SUPERSET ABOVE SUBSET
2AD5 ; [*0C9E.0020.0002] # SUBSET ABOVE SUBSET
2AD6 ; [*0C9F.0020.0002] # SUPERSET ABOVE SUPERSET
2AD7 ; [*0CA0.0020.0002] # SUPERSET BESIDE SUBSET
2AD8 ; [*0CA1.0020.0002] # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
2AD9 ; [*0CA2.0020.0002] # ELEMENT OF OPENING DOWNWARDS
2ADA ; [*0CA3.0020.0002] # PITCHFORK WITH TEE TOP
2ADB ; [*0CA4.0020.0002] # TRANSVERSAL INTERSECTION
2ADC ; [*0CA5.0020.0002][.0000.002F.0002] # FORKING
2ADD ; [*0CA5.0020.0002] # NONFORKING
2ADE ; [*0CA6.0020.0002] # SHORT LEFT TACK
2ADF ; [*0CA7.0020.0002] # SHORT DOWN TACK
2AE0 ; [*0CA8.0020.0002] # SHORT UP TACK
2AE1 ; [*0CA9.0020.0002] # PERPENDICULAR WITH S
2AE2 ; [*0CAA.0020.0002] # VERTICAL BAR TRIPLE RIGHT TURNSTILE
2AE3 ; [*0CAB.0020.0002] # DOUBLE VERTICAL BAR LEFT TURNSTILE
2AE4 ; [*0CAC.0020.0002] # VERTICAL BAR DOUBLE LEFT TURNSTILE
2AE5 ; [*0CAD.0020.0002] # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
2AE6 ; [*0CAE.0020.0002] # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
2AE7 ; [*0CAF.0020.0002] # SHORT DOWN TACK WITH OVERBAR
2AE8 ; [*0CB0.0020.0002] # SHORT UP TACK WITH UNDERBAR
2AE9 ; [*0CB1.0020.0002] # SHORT UP TACK ABOVE SHORT DOWN TACK
2AEA ; [*0CB2.0020.0002] # DOUBLE DOWN TACK
2AEB ; [*0CB3.0020.0002] # DOUBLE UP TACK
2AEC ; [*0CB4.0020.0002] # DOUBLE STROKE NOT SIGN
2AED ; [*0CB5.0020.0002] # REVERSED DOUBLE STROKE NOT SIGN
2AEE ; [*0CB6.0020.0002] # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
2AEF ; [*0CB7.0020.0002] # VERTICAL LINE WITH CIRCLE ABOVE
2AF0 ; [*0CB8.0020.0002] # VERTICAL LINE WITH CIRCLE BELOW
2AF1 ; [*0CB9.0020.0002] # DOWN TACK WITH CIRCLE BELOW
2AF2 ; [*0CBA.0020.0002] # PARALLEL WITH HORIZONTAL STROKE
2AF3 ; [*0CBB.0020.0002] # PARALLEL WITH TILDE OPERATOR
2AF4 ; [*0CBC.0020.0002] # TRIPLE VERTICAL BAR BINARY RELATION
2AF5 ; [*0CBD.0020.0002] # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
2AF6 ; [*0CBE.0020.0002] # TRIPLE COLON OPERATOR
2AF7 ; [*0CBF.0020.0002] # TRIPLE NESTED LESS-THAN
2AF8 ; [*0CC0.0020.0002] # TRIPLE NESTED GREATER-THAN
2AF9 ; [*0CC1.0020.0002] # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
2AFA ; [*0CC2.0020.0002] # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
2AFB ; [*0CC3.0020.0002] # TRIPLE SOLIDUS BINARY RELATION
2AFC ; [*0CC4.0020.0002] # LARGE TRIPLE VERTICAL BAR OPERATOR
2AFD ; [*0CC5.0020.0002] # DOUBLE SOLIDUS OPERATOR
2AFE ; [*0CC6.0020.0002] # WHITE VERTICAL BAR
2AFF ; [*0CC7.0020.0002] # N-ARY WHITE VERTICAL BAR
2B00 ; [*0CC8.0020.0002] # NORTH EAST WHITE ARROW
2B01 ; [*0CC9.0020.0002] # NORTH WEST WHITE ARROW
2B02 ; [*0CCA.0020.0002] # SOUTH EAST WHITE ARROW
2B03 ; [*0CCB.0020.0002] # SOUTH WEST WHITE ARROW
2B04 ; [*0CCC.0020.0002] # LEFT RIGHT WHITE ARROW
2B05 ; [*0CCD.0020.0002] # LEFTWARDS BLACK ARROW
2B06 ; [*0CCE.0020.0002] # UPWARDS BLACK ARROW
2B07 ; [*0CCF.0020.0002] # DOWNWARDS BLACK ARROW
2B08 ; [*0CD0.0020.0002] # NORTH EAST BLACK ARROW
2B09 ; [*0CD1.0020.0002] # NORTH WEST BLACK ARROW
2B0A ; [*0CD2.0020.0002] # SOUTH EAST BLACK ARROW
2B0B ; [*0CD3.0020.0002] # SOUTH WEST BLACK ARROW
2B0C ; [*0CD4.0020.0002] # LEFT RIGHT BLACK ARROW
2B0D ; [*0CD5.0020.0002] # UP DOWN BLACK ARROW
2B0E ; [*0CD6.0020.0002] # RIGHTWARDS ARROW WITH TIP DOWNWARDS
2B0F ; [*0CD7.0020.0002] # RIGHTWARDS ARROW WITH TIP UPWARDS
2B10 ; [*0CD8.0020.0002] # LEFTWARDS ARROW WITH TIP DOWNWARDS
2B11 ; [*0CD9.0020.0002] # LEFTWARDS ARROW WITH TIP UPWARDS
2B12 ; [*0CDA.0020.0002] # SQUARE WITH TOP HALF BLACK
2B13 ; [*0CDB.0020.0002] # SQUARE WITH BOTTOM HALF BLACK
2B14 ; [*0CDC.0020.0002] # SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK
2B15 ; [*0CDD.0020.0002] # SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK
2B16 ; [*0CDE.0020.0002] # DIAMOND WITH LEFT HALF BLACK
2B17 ; [*0CDF.0020.0002] # DIAMOND WITH RIGHT HALF BLACK
2B18 ; [*0CE0.0020.0002] # DIAMOND WITH TOP HALF BLACK
2B19 ; [*0CE1.0020.0002] # DIAMOND WITH BOTTOM HALF BLACK
2B1A ; [*0CE2.0020.0002] # DOTTED SQUARE
2B1B ; [*0CE3.0020.0002] # BLACK LARGE SQUARE
2B1C ; [*0CE4.0020.0002] # WHITE LARGE SQUARE
2B1D ; [*0CE5.0020.0002] # BLACK VERY SMALL SQUARE
2B1E ; [*0CE6.0020.0002] # WHITE VERY SMALL SQUARE
2B1F ; [*0CE7.0020.0002] # BLACK PENTAGON
2B20 ; [*0CE8.0020.0002] # WHITE PENTAGON
2B21 ; [*0CE9.0020.0002] # WHITE HEXAGON
2B22 ; [*0CEA.0020.0002] # BLACK HEXAGON
2B23 ; [*0CEB.0020.0002] # HORIZONTAL BLACK HEXAGON
2B24 ; [*0CEC.0020.0002] # BLACK LARGE CIRCLE
2B25 ; [*0CED.0020.0002] # BLACK MEDIUM DIAMOND
2B26 ; [*0CEE.0020.0002] # WHITE MEDIUM DIAMOND
2B27 ; [*0CEF.0020.0002] # BLACK MEDIUM LOZENGE
2B28 ; [*0CF0.0020.0002] # WHITE MEDIUM LOZENGE
2B29 ; [*0CF1.0020.0002] # BLACK SMALL DIAMOND
2B2A ; [*0CF2.0020.0002] # BLACK SMALL LOZENGE
2B2B ; [*0CF3.0020.0002] # WHITE SMALL LOZENGE
2B2C ; [*0CF4.0020.0002] # BLACK HORIZONTAL ELLIPSE
2B2D ; [*0CF5.0020.0002] # WHITE HORIZONTAL ELLIPSE
2B2E ; [*0CF6.0020.0002] # BLACK VERTICAL ELLIPSE
2B2F ; [*0CF7.0020.0002] # WHITE VERTICAL ELLIPSE
2B30 ; [*0CF8.0020.0002] # LEFT ARROW WITH SMALL CIRCLE
2B31 ; [*0CF9.0020.0002] # THREE LEFTWARDS ARROWS
2B32 ; [*0CFA.0020.0002] # LEFT ARROW WITH CIRCLED PLUS
2B33 ; [*0CFB.0020.0002] # LONG LEFTWARDS SQUIGGLE ARROW
2B34 ; [*0CFC.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
2B35 ; [*0CFD.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
2B36 ; [*0CFE.0020.0002] # LEFTWARDS TWO-HEADED ARROW FROM BAR
2B37 ; [*0CFF.0020.0002] # LEFTWARDS TWO-HEADED TRIPLE DASH ARROW
2B38 ; [*0D00.0020.0002] # LEFTWARDS ARROW WITH DOTTED STEM
2B39 ; [*0D01.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
2B3A ; [*0D02.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
2B3B ; [*0D03.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL
2B3C ; [*0D04.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
2B3D ; [*0D05.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
2B3E ; [*0D06.0020.0002] # LEFTWARDS ARROW THROUGH X
2B3F ; [*0D07.0020.0002] # WAVE ARROW POINTING DIRECTLY LEFT
2B40 ; [*0D08.0020.0002] # EQUALS SIGN ABOVE LEFTWARDS ARROW
2B41 ; [*0D09.0020.0002] # REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW
2B42 ; [*0D0A.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
2B43 ; [*0D0B.0020.0002] # RIGHTWARDS ARROW THROUGH GREATER-THAN
2B44 ; [*0D0C.0020.0002] # RIGHTWARDS ARROW THROUGH SUPERSET
2B45 ; [*0D0D.0020.0002] # LEFTWARDS QUADRUPLE ARROW
2B46 ; [*0D0E.0020.0002] # RIGHTWARDS QUADRUPLE ARROW
2B47 ; [*0D0F.0020.0002] # REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW
2B48 ; [*0D10.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
2B49 ; [*0D11.0020.0002] # TILDE OPERATOR ABOVE LEFTWARDS ARROW
2B4A ; [*0D12.0020.0002] # LEFTWARDS ARROW ABOVE ALMOST EQUAL TO
2B4B ; [*0D13.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4C ; [*0D14.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4D ; [*0D15.0020.0002] # DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW
2B4E ; [*0D16.0020.0002] # SHORT SLANTED NORTH ARROW
2B4F ; [*0D17.0020.0002] # SHORT BACKSLANTED SOUTH ARROW
2B50 ; [*0D18.0020.0002] # WHITE MEDIUM STAR
2B51 ; [*0D19.0020.0002] # BLACK SMALL STAR
2B52 ; [*0D1A.0020.0002] # WHITE SMALL STAR
2B53 ; [*0D1B.0020.0002] # BLACK RIGHT-POINTING PENTAGON
2B54 ; [*0D1C.0020.0002] # WHITE RIGHT-POINTING PENTAGON
2B55 ; [*0D1D.0020.0002] # HEAVY LARGE CIRCLE
2B56 ; [*0D1E.0020.0002] # HEAVY OVAL WITH OVAL INSIDE
2B57 ; [*0D1F.0020.0002] # HEAVY CIRCLE WITH CIRCLE INSIDE
2B58 ; [*0D20.0020.0002] # HEAVY CIRCLE
2B59 ; [*0D21.0020.0002] # HEAVY CIRCLED SALTIRE
2B5A ; [*0D22.0020.0002] # SLANTED NORTH ARROW WITH HOOKED HEAD
2B5B ; [*0D23.0020.0002] # BACKSLANTED SOUTH ARROW WITH HOOKED TAIL
2B5C ; [*0D24.0020.0002] # SLANTED NORTH ARROW WITH HORIZONTAL TAIL
2B5D ; [*0D25.0020.0002] # BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL
2B5E ; [*0D26.0020.0002] # BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
2B5F ; [*0D27.0020.0002] # SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
2B60 ; [*0D28.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW
2B61 ; [*0D29.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW
2B62 ; [*0D2A.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW
2B63 ; [*0D2B.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW
2B64 ; [*0D2C.0020.0002] # LEFT RIGHT TRIANGLE-HEADED ARROW
2B65 ; [*0D2D.0020.0002] # UP DOWN TRIANGLE-HEADED ARROW
2B66 ; [*0D2E.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW
2B67 ; [*0D2F.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW
2B68 ; [*0D30.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW
2B69 ; [*0D31.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW
2B6A ; [*0D32.0020.0002] # LEFTWARDS TRIANGLE-HEADED DASHED ARROW
2B6B ; [*0D33.0020.0002] # UPWARDS TRIANGLE-HEADED DASHED ARROW
2B6C ; [*0D34.0020.0002] # RIGHTWARDS TRIANGLE-HEADED DASHED ARROW
2B6D ; [*0D35.0020.0002] # DOWNWARDS TRIANGLE-HEADED DASHED ARROW
2B6E ; [*0D36.0020.0002] # CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
2B6F ; [*0D37.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
2B70 ; [*0D38.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW TO BAR
2B71 ; [*0D39.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW TO BAR
2B72 ; [*0D3A.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR
2B73 ; [*0D3B.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76 ; [*0D3C.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW TO BAR
2B77 ; [*0D3D.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW TO BAR
2B78 ; [*0D3E.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW TO BAR
2B79 ; [*0D3F.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW TO BAR
2B7A ; [*0D40.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
2B7B ; [*0D41.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
2B7C ; [*0D42.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
2B7D ; [*0D43.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
2B7E ; [*0D44.0020.0002] # HORIZONTAL TAB KEY
2B7F ; [*0D45.0020.0002] # VERTICAL TAB KEY
2B80 ; [*0D46.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW
2B81 ; [*0D47.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW
2B82 ; [*0D48.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW
2B83 ; [*0D49.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW
2B84 ; [*0D4A.0020.0002] # LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS
2B85 ; [*0D4B.0020.0002] # UPWARDS TRIANGLE-HEADED PAIRED ARROWS
2B86 ; [*0D4C.0020.0002] # RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS
2B87 ; [*0D4D.0020.0002] # DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS
2B88 ; [*0D4E.0020.0002] # LEFTWARDS BLACK CIRCLED WHITE ARROW
2B89 ; [*0D4F.0020.0002] # UPWARDS BLACK CIRCLED WHITE ARROW
2B8A ; [*0D50.0020.0002] # RIGHTWARDS BLACK CIRCLED WHITE ARROW
2B8B ; [*0D51.0020.0002] # DOWNWARDS BLACK CIRCLED WHITE ARROW
2B8C ; [*0D52.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW
2B8D ; [*0D53.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW
2B8E ; [*0D54.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW
2B8F ; [*0D55.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW
2B90 ; [*0D56.0020.0002] # RETURN LEFT
2B91 ; [*0D57.0020.0002] # RETURN RIGHT
2B92 ; [*0D58.0020.0002] # NEWLINE LEFT
2B93 ; [*0D59.0020.0002] # NEWLINE RIGHT
2B94 ; [*0D5A.0020.0002] # FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE
2B95 ; [*0D5B.0020.0002] # RIGHTWARDS BLACK ARROW
2B98 ; [*0D5C.0020.0002] # THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD
2B99 ; [*0D5D.0020.0002] # THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD
2B9A ; [*0D5E.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD
2B9B ; [*0D5F.0020.0002] # THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD
2B9C ; [*0D60.0020.0002] # BLACK LEFTWARDS EQUILATERAL ARROWHEAD
2B9D ; [*0D61.0020.0002] # BLACK UPWARDS EQUILATERAL ARROWHEAD
2B9E ; [*0D62.0020.0002] # BLACK RIGHTWARDS EQUILATERAL ARROWHEAD
2B9F ; [*0D63.0020.0002] # BLACK DOWNWARDS EQUILATERAL ARROWHEAD
2BA0 ; [*0D64.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
2BA1 ; [*0D65.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
2BA2 ; [*0D66.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
2BA3 ; [*0D67.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
2BA4 ; [*0D68.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
2BA5 ; [*0D69.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
2BA6 ; [*0D6A.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
2BA7 ; [*0D6B.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
2BA8 ; [*0D6C.0020.0002] # BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW
2BA9 ; [*0D6D.0020.0002] # BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
2BAA ; [*0D6E.0020.0002] # BLACK CURVED UPWARDS AND LEFTWARDS ARROW
2BAB ; [*0D6F.0020.0002] # BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
2BAC ; [*0D70.0020.0002] # BLACK CURVED LEFTWARDS AND UPWARDS ARROW
2BAD ; [*0D71.0020.0002] # BLACK CURVED RIGHTWARDS AND UPWARDS ARROW
2BAE ; [*0D72.0020.0002] # BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW
2BAF ; [*0D73.0020.0002] # BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW
2BB0 ; [*0D74.0020.0002] # RIBBON ARROW DOWN LEFT
2BB1 ; [*0D75.0020.0002] # RIBBON ARROW DOWN RIGHT
2BB2 ; [*0D76.0020.0002] # RIBBON ARROW UP LEFT
2BB3 ; [*0D77.0020.0002] # RIBBON ARROW UP RIGHT
2BB4 ; [*0D78.0020.0002] # RIBBON ARROW LEFT UP
2BB5 ; [*0D79.0020.0002] # RIBBON ARROW RIGHT UP
2BB6 ; [*0D7A.0020.0002] # RIBBON ARROW LEFT DOWN
2BB7 ; [*0D7B.0020.0002] # RIBBON ARROW RIGHT DOWN
2BB8 ; [*0D7C.0020.0002] # UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR
2BB9 ; [*0D7D.0020.0002] # UP ARROWHEAD IN A RECTANGLE BOX
2BBD ; [*0D7E.0020.0002] # BALLOT BOX WITH LIGHT X
2BBE ; [*0D7F.0020.0002] # CIRCLED X
2BBF ; [*0D80.0020.0002] # CIRCLED BOLD X
2BC0 ; [*0D81.0020.0002] # BLACK SQUARE CENTRED
2BC1 ; [*0D82.0020.0002] # BLACK DIAMOND CENTRED
2BC2 ; [*0D83.0020.0002] # TURNED BLACK PENTAGON
2BC3 ; [*0D84.0020.0002] # HORIZONTAL BLACK OCTAGON
2BC4 ; [*0D85.0020.0002] # BLACK OCTAGON
2BC5 ; [*0D86.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE CENTRED
2BC6 ; [*0D87.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED
2BC7 ; [*0D88.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED
2BC8 ; [*0D89.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
2BCA ; [*0D8A.0020.0002] # TOP HALF BLACK CIRCLE
2BCB ; [*0D8B.0020.0002] # BOTTOM HALF BLACK CIRCLE
2BCC ; [*0D8C.0020.0002] # LIGHT FOUR POINTED BLACK CUSP
2BCD ; [*0D8D.0020.0002] # ROTATED LIGHT FOUR POINTED BLACK CUSP
2BCE ; [*0D8E.0020.0002] # WHITE FOUR POINTED CUSP
2BCF ; [*0D8F.0020.0002] # ROTATED WHITE FOUR POINTED CUSP
2BD0 ; [*0D90.0020.0002] # SQUARE POSITION INDICATOR
2BD1 ; [*0D91.0020.0002] # UNCERTAINTY SIGN
2BEC ; [*0D92.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2BED ; [*0D93.0020.0002] # UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2BEE ; [*0D94.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2BEF ; [*0D95.0020.0002] # DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2CE5 ; [*0D96.0020.0002] # COPTIC SYMBOL MI RO
2CE6 ; [*0D97.0020.0002] # COPTIC SYMBOL PI RO
2CE7 ; [*0D98.0020.0002] # COPTIC SYMBOL STAUROS
2CE8 ; [*0D99.0020.0002] # COPTIC SYMBOL TAU RO
2CE9 ; [*0D9A.0020.0002] # COPTIC SYMBOL KHI RO
2CEA ; [*0D9B.0020.0002] # COPTIC SYMBOL SHIMA SIMA
2CF9 ; [*0281.0020.0002] # COPTIC OLD NUBIAN FULL STOP
2CFA ; [*026E.0020.0002] # COPTIC OLD NUBIAN DIRECT QUESTION MARK
2CFB ; [*026F.0020.0002] # COPTIC OLD NUBIAN INDIRECT QUESTION MARK
2CFC ; [*02F6.0020.0002] # COPTIC OLD NUBIAN VERSE DIVIDER
2CFD ; [*1AE2.0020.0002] # COPTIC FRACTION ONE HALF
2CFE ; [*0282.0020.0002] # COPTIC FULL STOP
2CFF ; [*02F7.0020.0002] # COPTIC MORPHOLOGICAL DIVIDER
2D70 ; [*0427.0020.0002] # TIFINAGH SEPARATOR MARK
2D7F ; [.0000.0000.0000] # TIFINAGH CONSONANT JOINER
2E00 ; [*03B6.0020.0002] # RIGHT ANGLE SUBSTITUTION MARKER
2E01 ; [*03B7.0020.0002] # RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; [*035B.0020.0002] # LEFT SUBSTITUTION BRACKET
2E03 ; [*035C.0020.0002] # RIGHT SUBSTITUTION BRACKET
2E04 ; [*035D.0020.0002] # LEFT DOTTED SUBSTITUTION BRACKET
2E05 ; [*035E.0020.0002] # RIGHT DOTTED SUBSTITUTION BRACKET
2E06 ; [*03B8.0020.0002] # RAISED INTERPOLATION MARKER
2E07 ; [*03B9.0020.0002] # RAISED DOTTED INTERPOLATION MARKER
2E08 ; [*03BA.0020.0002] # DOTTED TRANSPOSITION MARKER
2E09 ; [*035F.0020.0002] # LEFT TRANSPOSITION BRACKET
2E0A ; [*0360.0020.0002] # RIGHT TRANSPOSITION BRACKET
2E0B ; [*03BB.0020.0002] # RAISED SQUARE
2E0C ; [*0361.0020.0002] # LEFT RAISED OMISSION BRACKET
2E0D ; [*0362.0020.0002] # RIGHT RAISED OMISSION BRACKET
2E0E ; [*03BC.0020.0002] # EDITORIAL CORONIS
2E0F ; [*03BD.0020.0002] # PARAGRAPHOS
2E10 ; [*03BE.0020.0002] # FORKED PARAGRAPHOS
2E11 ; [*03BF.0020.0002] # REVERSED FORKED PARAGRAPHOS
2E12 ; [*03C0.0020.0002] # HYPODIASTOLE
2E13 ; [*03C1.0020.0002] # DOTTED OBELOS
2E14 ; [*03C2.0020.0002] # DOWNWARDS ANCORA
2E15 ; [*03C3.0020.0002] # UPWARDS ANCORA
2E16 ; [*03C4.0020.0002] # DOTTED RIGHT-POINTING ANGLE
2E17 ; [*021C.0020.0002] # DOUBLE OBLIQUE HYPHEN
2E18 ; [*0276.0020.0002] # INVERTED INTERROBANG
2E19 ; [*02F8.0020.0002] # PALM BRANCH
2E1A ; [*03C5.0020.0002] # HYPHEN WITH DIAERESIS
2E1B ; [*03C6.0020.0002] # TILDE WITH RING ABOVE
2E1C ; [*0363.0020.0002] # LEFT LOW PARAPHRASE BRACKET
2E1D ; [*0364.0020.0002] # RIGHT LOW PARAPHRASE BRACKET
2E1E ; [*03C7.0020.0002] # TILDE WITH DOT ABOVE
2E1F ; [*03C8.0020.0002] # TILDE WITH DOT BELOW
2E20 ; [*0365.0020.0002] # LEFT VERTICAL BAR WITH QUILL
2E21 ; [*0366.0020.0002] # RIGHT VERTICAL BAR WITH QUILL
2E22 ; [*0367.0020.0002] # TOP LEFT HALF BRACKET
2E23 ; [*0368.0020.0002] # TOP RIGHT HALF BRACKET
2E24 ; [*0369.0020.0002] # BOTTOM LEFT HALF BRACKET
2E25 ; [*036A.0020.0002] # BOTTOM RIGHT HALF BRACKET
2E26 ; [*036B.0020.0002] # LEFT SIDEWAYS U BRACKET
2E27 ; [*036C.0020.0002] # RIGHT SIDEWAYS U BRACKET
2E28 ; [*036D.0020.0002] # LEFT DOUBLE PARENTHESIS
2E29 ; [*036E.0020.0002] # RIGHT DOUBLE PARENTHESIS
2E2A ; [*02F1.0020.0002] # TWO DOTS OVER ONE DOT PUNCTUATION
2E2B ; [*02F2.0020.0002] # ONE DOT OVER TWO DOTS PUNCTUATION
2E2C ; [*02F3.0020.0002] # SQUARED FOUR DOT PUNCTUATION
2E2D ; [*02F4.0020.0002] # FIVE DOT MARK
2E2E ; [*0268.0020.0002] # REVERSED QUESTION MARK
2E30 ; [*0283.0020.0002] # RING POINT
2E31 ; [*028C.0020.0002] # WORD SEPARATOR MIDDLE DOT
2E32 ; [*0224.0020.0002] # TURNED COMMA
2E33 ; [*028D.0020.0002] # RAISED DOT
2E34 ; [*0223.0020.0002] # RAISED COMMA
2E35 ; [*0237.0020.0002] # TURNED SEMICOLON
2E36 ; [*03A1.0020.0002] # DAGGER WITH LEFT GUARD
2E37 ; [*03A2.0020.0002] # DAGGER WITH RIGHT GUARD
2E38 ; [*03A3.0020.0002] # TURNED DAGGER
2E39 ; [*038A.0020.0002] # TOP HALF SECTION SIGN
2E3A ; [*0218.0020.0002] # TWO-EM DASH
2E3B ; [*0219.0020.0002] # THREE-EM DASH
2E3C ; [*0284.0020.0002] # STENOGRAPHIC FULL STOP
2E3D ; [*02F5.0020.0002] # VERTICAL SIX DOTS
2E3E ; [*0384.0020.0002] # WIGGLY VERTICAL LINE
2E3F ; [*038D.0020.0002] # CAPITULUM
2E40 ; [*021D.0020.0002] # DOUBLE HYPHEN
2E41 ; [*0225.0020.0002] # REVERSED COMMA
2E42 ; [*0311.0020.0002] # DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43 ; [*021B.0020.0002] # DASH WITH LEFT UPTURN
2E44 ; [*03C9.0020.0002] # DOUBLE SUSPENSION MARK
2FF0 ; [*1A5B.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
2FF1 ; [*1A5C.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
2FF2 ; [*1A5D.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
2FF3 ; [*1A5E.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
2FF4 ; [*1A5F.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
2FF5 ; [*1A60.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
2FF6 ; [*1A61.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
2FF7 ; [*1A62.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
2FF8 ; [*1A63.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
2FF9 ; [*1A64.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
2FFA ; [*1A65.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
2FFB ; [*1A66.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
3000 ; [*0209.0020.0003] # IDEOGRAPHIC SPACE
3001 ; [*0231.0020.0002] # IDEOGRAPHIC COMMA
3002 ; [*028A.0020.0002] # IDEOGRAPHIC FULL STOP
3003 ; [*03AC.0020.0002] # DITTO MARK
3004 ; [*1A8B.0020.0002] # JAPANESE INDUSTRIAL STANDARD SYMBOL
3008 ; [*036F.0020.0002] # LEFT ANGLE BRACKET
3009 ; [*0370.0020.0002] # RIGHT ANGLE BRACKET
300A ; [*0371.0020.0002] # LEFT DOUBLE ANGLE BRACKET
300B ; [*0372.0020.0002] # RIGHT DOUBLE ANGLE BRACKET
300C ; [*0373.0020.0002] # LEFT CORNER BRACKET
300D ; [*0374.0020.0002] # RIGHT CORNER BRACKET
300E ; [*0375.0020.0002] # LEFT WHITE CORNER BRACKET
300F ; [*0376.0020.0002] # RIGHT WHITE CORNER BRACKET
3010 ; [*0377.0020.0002] # LEFT BLACK LENTICULAR BRACKET
3011 ; [*0378.0020.0002] # RIGHT BLACK LENTICULAR BRACKET
3012 ; [*1A8C.0020.0002] # POSTAL MARK
3013 ; [*1A8D.0020.0002] # GETA MARK
3014 ; [*0379.0020.0002] # LEFT TORTOISE SHELL BRACKET
3015 ; [*037A.0020.0002] # RIGHT TORTOISE SHELL BRACKET
3016 ; [*037B.0020.0002] # LEFT WHITE LENTICULAR BRACKET
3017 ; [*037C.0020.0002] # RIGHT WHITE LENTICULAR BRACKET
3018 ; [*037D.0020.0002] # LEFT WHITE TORTOISE SHELL BRACKET
3019 ; [*037E.0020.0002] # RIGHT WHITE TORTOISE SHELL BRACKET
301A ; [*037F.0020.0002] # LEFT WHITE SQUARE BRACKET
301B ; [*0380.0020.0002] # RIGHT WHITE SQUARE BRACKET
301C ; [*021E.0020.0002] # WAVE DASH
301D ; [*0312.0020.0002] # REVERSED DOUBLE PRIME QUOTATION MARK
301E ; [*0313.0020.0002] # DOUBLE PRIME QUOTATION MARK
301F ; [*0314.0020.0002] # LOW DOUBLE PRIME QUOTATION MARK
3020 ; [*1A8E.0020.0002] # POSTAL MARK FACE
3030 ; [*021F.0020.0002] # WAVY DASH
3036 ; [*1A8C.0020.0004] # CIRCLED POSTAL MARK
3037 ; [*1A8F.0020.0002] # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
303D ; [*03AD.0020.0002] # PART ALTERNATION MARK
303E ; [*1A90.0020.0002] # IDEOGRAPHIC VARIATION INDICATOR
303F ; [*1A91.0020.0002] # IDEOGRAPHIC HALF FILL SPACE
309B ; [*0491.0020.0002] # KATAKANA-HIRAGANA VOICED SOUND MARK
309C ; [*0492.0020.0002] # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
30A0 ; [*0220.0020.0002] # KATAKANA-HIRAGANA DOUBLE HYPHEN
30FB ; [*0221.0020.0002] # KATAKANA MIDDLE DOT
3190 ; [*1A92.0020.0002] # IDEOGRAPHIC ANNOTATION LINKING MARK
3191 ; [*1A93.0020.0002] # IDEOGRAPHIC ANNOTATION REVERSE MARK
31C0 ; [*1A67.0020.0002] # CJK STROKE T
31C1 ; [*1A68.0020.0002] # CJK STROKE WG
31C2 ; [*1A69.0020.0002] # CJK STROKE XG
31C3 ; [*1A6A.0020.0002] # CJK STROKE BXG
31C4 ; [*1A6B.0020.0002] # CJK STROKE SW
31C5 ; [*1A6C.0020.0002] # CJK STROKE HZZ
31C6 ; [*1A6D.0020.0002] # CJK STROKE HZG
31C7 ; [*1A6E.0020.0002] # CJK STROKE HP
31C8 ; [*1A6F.0020.0002] # CJK STROKE HZWG
31C9 ; [*1A70.0020.0002] # CJK STROKE SZWG
31CA ; [*1A71.0020.0002] # CJK STROKE HZT
31CB ; [*1A72.0020.0002] # CJK STROKE HZZP
31CC ; [*1A73.0020.0002] # CJK STROKE HPWG
31CD ; [*1A74.0020.0002] # CJK STROKE HZW
31CE ; [*1A75.0020.0002] # CJK STROKE HZZZ
31CF ; [*1A76.0020.0002] # CJK STROKE N
31D0 ; [*1A77.0020.0002] # CJK STROKE H
31D1 ; [*1A78.0020.0002] # CJK STROKE S
31D2 ; [*1A79.0020.0002] # CJK STROKE P
31D3 ; [*1A7A.0020.0002] # CJK STROKE SP
31D4 ; [*1A7B.0020.0002] # CJK STROKE D
31D5 ; [*1A7C.0020.0002] # CJK STROKE HZ
31D6 ; [*1A7D.0020.0002] # CJK STROKE HG
31D7 ; [*1A7E.0020.0002] # CJK STROKE SZ
31D8 ; [*1A7F.0020.0002] # CJK STROKE SWZ
31D9 ; [*1A80.0020.0002] # CJK STROKE ST
31DA ; [*1A81.0020.0002] # CJK STROKE SG
31DB ; [*1A82.0020.0002] # CJK STROKE PD
31DC ; [*1A83.0020.0002] # CJK STROKE PZ
31DD ; [*1A84.0020.0002] # CJK STROKE TN
31DE ; [*1A85.0020.0002] # CJK STROKE SZZ
31DF ; [*1A86.0020.0002] # CJK STROKE SWG
31E0 ; [*1A87.0020.0002] # CJK STROKE HXWG
31E1 ; [*1A88.0020.0002] # CJK STROKE HZZZG
31E2 ; [*1A89.0020.0002] # CJK STROKE PG
31E3 ; [*1A8A.0020.0002] # CJK STROKE Q
327F ; [*1A94.0020.0002] # KOREAN STANDARD SYMBOL
4DC0 ; [*0EAA.0020.0002] # HEXAGRAM FOR THE CREATIVE HEAVEN
4DC1 ; [*0EAB.0020.0002] # HEXAGRAM FOR THE RECEPTIVE EARTH
4DC2 ; [*0EAC.0020.0002] # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
4DC3 ; [*0EAD.0020.0002] # HEXAGRAM FOR YOUTHFUL FOLLY
4DC4 ; [*0EAE.0020.0002] # HEXAGRAM FOR WAITING
4DC5 ; [*0EAF.0020.0002] # HEXAGRAM FOR CONFLICT
4DC6 ; [*0EB0.0020.0002] # HEXAGRAM FOR THE ARMY
4DC7 ; [*0EB1.0020.0002] # HEXAGRAM FOR HOLDING TOGETHER
4DC8 ; [*0EB2.0020.0002] # HEXAGRAM FOR SMALL TAMING
4DC9 ; [*0EB3.0020.0002] # HEXAGRAM FOR TREADING
4DCA ; [*0EB4.0020.0002] # HEXAGRAM FOR PEACE
4DCB ; [*0EB5.0020.0002] # HEXAGRAM FOR STANDSTILL
4DCC ; [*0EB6.0020.0002] # HEXAGRAM FOR FELLOWSHIP
4DCD ; [*0EB7.0020.0002] # HEXAGRAM FOR GREAT POSSESSION
4DCE ; [*0EB8.0020.0002] # HEXAGRAM FOR MODESTY
4DCF ; [*0EB9.0020.0002] # HEXAGRAM FOR ENTHUSIASM
4DD0 ; [*0EBA.0020.0002] # HEXAGRAM FOR FOLLOWING
4DD1 ; [*0EBB.0020.0002] # HEXAGRAM FOR WORK ON THE DECAYED
4DD2 ; [*0EBC.0020.0002] # HEXAGRAM FOR APPROACH
4DD3 ; [*0EBD.0020.0002] # HEXAGRAM FOR CONTEMPLATION
4DD4 ; [*0EBE.0020.0002] # HEXAGRAM FOR BITING THROUGH
4DD5 ; [*0EBF.0020.0002] # HEXAGRAM FOR GRACE
4DD6 ; [*0EC0.0020.0002] # HEXAGRAM FOR SPLITTING APART
4DD7 ; [*0EC1.0020.0002] # HEXAGRAM FOR RETURN
4DD8 ; [*0EC2.0020.0002] # HEXAGRAM FOR INNOCENCE
4DD9 ; [*0EC3.0020.0002] # HEXAGRAM FOR GREAT TAMING
4DDA ; [*0EC4.0020.0002] # HEXAGRAM FOR MOUTH CORNERS
4DDB ; [*0EC5.0020.0002] # HEXAGRAM FOR GREAT PREPONDERANCE
4DDC ; [*0EC6.0020.0002] # HEXAGRAM FOR THE ABYSMAL WATER
4DDD ; [*0EC7.0020.0002] # HEXAGRAM FOR THE CLINGING FIRE
4DDE ; [*0EC8.0020.0002] # HEXAGRAM FOR INFLUENCE
4DDF ; [*0EC9.0020.0002] # HEXAGRAM FOR DURATION
4DE0 ; [*0ECA.0020.0002] # HEXAGRAM FOR RETREAT
4DE1 ; [*0ECB.0020.0002] # HEXAGRAM FOR GREAT POWER
4DE2 ; [*0ECC.0020.0002] # HEXAGRAM FOR PROGRESS
4DE3 ; [*0ECD.0020.0002] # HEXAGRAM FOR DARKENING OF THE LIGHT
4DE4 ; [*0ECE.0020.0002] # HEXAGRAM FOR THE FAMILY
4DE5 ; [*0ECF.0020.0002] # HEXAGRAM FOR OPPOSITION
4DE6 ; [*0ED0.0020.0002] # HEXAGRAM FOR OBSTRUCTION
4DE7 ; [*0ED1.0020.0002] # HEXAGRAM FOR DELIVERANCE
4DE8 ; [*0ED2.0020.0002] # HEXAGRAM FOR DECREASE
4DE9 ; [*0ED3.0020.0002] # HEXAGRAM FOR INCREASE
4DEA ; [*0ED4.0020.0002] # HEXAGRAM FOR BREAKTHROUGH
4DEB ; [*0ED5.0020.0002] # HEXAGRAM FOR COMING TO MEET
4DEC ; [*0ED6.0020.0002] # HEXAGRAM FOR GATHERING TOGETHER
4DED ; [*0ED7.0020.0002] # HEXAGRAM FOR PUSHING UPWARD
4DEE ; [*0ED8.0020.0002] # HEXAGRAM FOR OPPRESSION
4DEF ; [*0ED9.0020.0002] # HEXAGRAM FOR THE WELL
4DF0 ; [*0EDA.0020.0002] # HEXAGRAM FOR REVOLUTION
4DF1 ; [*0EDB.0020.0002] # HEXAGRAM FOR THE CAULDRON
4DF2 ; [*0EDC.0020.0002] # HEXAGRAM FOR THE AROUSING THUNDER
4DF3 ; [*0EDD.0020.0002] # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
4DF4 ; [*0EDE.0020.0002] # HEXAGRAM FOR DEVELOPMENT
4DF5 ; [*0EDF.0020.0002] # HEXAGRAM FOR THE MARRYING MAIDEN
4DF6 ; [*0EE0.0020.0002] # HEXAGRAM FOR ABUNDANCE
4DF7 ; [*0EE1.0020.0002] # HEXAGRAM FOR THE WANDERER
4DF8 ; [*0EE2.0020.0002] # HEXAGRAM FOR THE GENTLE WIND
4DF9 ; [*0EE3.0020.0002] # HEXAGRAM FOR THE JOYOUS LAKE
4DFA ; [*0EE4.0020.0002] # HEXAGRAM FOR DISPERSION
4DFB ; [*0EE5.0020.0002] # HEXAGRAM FOR LIMITATION
4DFC ; [*0EE6.0020.0002] # HEXAGRAM FOR INNER TRUTH
4DFD ; [*0EE7.0020.0002] # HEXAGRAM FOR SMALL PREPONDERANCE
4DFE ; [*0EE8.0020.0002] # HEXAGRAM FOR AFTER COMPLETION
4DFF ; [*0EE9.0020.0002] # HEXAGRAM FOR BEFORE COMPLETION
A490 ; [*0F41.0020.0002] # YI RADICAL QOT
A491 ; [*0F42.0020.0002] # YI RADICAL LI
A492 ; [*0F43.0020.0002] # YI RADICAL KIT
A493 ; [*0F44.0020.0002] # YI RADICAL NYIP
A494 ; [*0F45.0020.0002] # YI RADICAL CYP
A495 ; [*0F46.0020.0002] # YI RADICAL SSI
A496 ; [*0F47.0020.0002] # YI RADICAL GGOP
A497 ; [*0F48.0020.0002] # YI RADICAL GEP
A498 ; [*0F49.0020.0002] # YI RADICAL MI
A499 ; [*0F4A.0020.0002] # YI RADICAL HXIT
A49A ; [*0F4B.0020.0002] # YI RADICAL LYR
A49B ; [*0F4C.0020.0002] # YI RADICAL BBUT
A49C ; [*0F4D.0020.0002] # YI RADICAL MOP
A49D ; [*0F4E.0020.0002] # YI RADICAL YO
A49E ; [*0F4F.0020.0002] # YI RADICAL PUT
A49F ; [*0F50.0020.0002] # YI RADICAL HXUO
A4A0 ; [*0F51.0020.0002] # YI RADICAL TAT
A4A1 ; [*0F52.0020.0002] # YI RADICAL GA
A4A2 ; [*0F53.0020.0002] # YI RADICAL ZUP
A4A3 ; [*0F54.0020.0002] # YI RADICAL CYT
A4A4 ; [*0F55.0020.0002] # YI RADICAL DDUR
A4A5 ; [*0F56.0020.0002] # YI RADICAL BUR
A4A6 ; [*0F57.0020.0002] # YI RADICAL GGUO
A4A7 ; [*0F58.0020.0002] # YI RADICAL NYOP
A4A8 ; [*0F59.0020.0002] # YI RADICAL TU
A4A9 ; [*0F5A.0020.0002] # YI RADICAL OP
A4AA ; [*0F5B.0020.0002] # YI RADICAL JJUT
A4AB ; [*0F5C.0020.0002] # YI RADICAL ZOT
A4AC ; [*0F5D.0020.0002] # YI RADICAL PYT
A4AD ; [*0F5E.0020.0002] # YI RADICAL HMO
A4AE ; [*0F5F.0020.0002] # YI RADICAL YIT
A4AF ; [*0F60.0020.0002] # YI RADICAL VUR
A4B0 ; [*0F61.0020.0002] # YI RADICAL SHY
A4B1 ; [*0F62.0020.0002] # YI RADICAL VEP
A4B2 ; [*0F63.0020.0002] # YI RADICAL ZA
A4B3 ; [*0F64.0020.0002] # YI RADICAL JO
A4B4 ; [*0F65.0020.0002] # YI RADICAL NZUP
A4B5 ; [*0F66.0020.0002] # YI RADICAL JJY
A4B6 ; [*0F67.0020.0002] # YI RADICAL GOT
A4B7 ; [*0F68.0020.0002] # YI RADICAL JJIE
A4B8 ; [*0F69.0020.0002] # YI RADICAL WO
A4B9 ; [*0F6A.0020.0002] # YI RADICAL DU
A4BA ; [*0F6B.0020.0002] # YI RADICAL SHUR
A4BB ; [*0F6C.0020.0002] # YI RADICAL LIE
A4BC ; [*0F6D.0020.0002] # YI RADICAL CY
A4BD ; [*0F6E.0020.0002] # YI RADICAL CUOP
A4BE ; [*0F6F.0020.0002] # YI RADICAL CIP
A4BF ; [*0F70.0020.0002] # YI RADICAL HXOP
A4C0 ; [*0F71.0020.0002] # YI RADICAL SHAT
A4C1 ; [*0F72.0020.0002] # YI RADICAL ZUR
A4C2 ; [*0F73.0020.0002] # YI RADICAL SHOP
A4C3 ; [*0F74.0020.0002] # YI RADICAL CHE
A4C4 ; [*0F75.0020.0002] # YI RADICAL ZZIET
A4C5 ; [*0F76.0020.0002] # YI RADICAL NBIE
A4C6 ; [*0F77.0020.0002] # YI RADICAL KE
A4FE ; [*022E.0020.0002] # LISU PUNCTUATION COMMA
A4FF ; [*0285.0020.0002] # LISU PUNCTUATION FULL STOP
A60D ; [*022F.0020.0002] # VAI COMMA
A60E ; [*0286.0020.0002] # VAI FULL STOP
A60F ; [*0270.0020.0002] # VAI QUESTION MARK
A670 ; [.0000.0000.0000] # COMBINING CYRILLIC TEN MILLIONS SIGN
A671 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED MILLIONS SIGN
A672 ; [.0000.0000.0000] # COMBINING CYRILLIC THOUSAND MILLIONS SIGN
A673 ; [*0393.0020.0002] # SLAVONIC ASTERISK
A67E ; [*03CA.0020.0002] # CYRILLIC KAVYKA
A6F2 ; [*02D7.0020.0002] # BAMUM NJAEMLI
A6F3 ; [*0287.0020.0002] # BAMUM FULL STOP
A6F4 ; [*025F.0020.0002] # BAMUM COLON
A6F5 ; [*0230.0020.0002] # BAMUM COMMA
A6F6 ; [*0238.0020.0002] # BAMUM SEMICOLON
A6F7 ; [*0271.0020.0002] # BAMUM QUESTION MARK
A700 ; [*04D0.0020.0002] # MODIFIER LETTER CHINESE TONE YIN PING
A701 ; [*04D1.0020.0002] # MODIFIER LETTER CHINESE TONE YANG PING
A702 ; [*04D2.0020.0002] # MODIFIER LETTER CHINESE TONE YIN SHANG
A703 ; [*04D3.0020.0002] # MODIFIER LETTER CHINESE TONE YANG SHANG
A704 ; [*04D4.0020.0002] # MODIFIER LETTER CHINESE TONE YIN QU
A705 ; [*04D5.0020.0002] # MODIFIER LETTER CHINESE TONE YANG QU
A706 ; [*04D6.0020.0002] # MODIFIER LETTER CHINESE TONE YIN RU
A707 ; [*04D7.0020.0002] # MODIFIER LETTER CHINESE TONE YANG RU
A708 ; [*04D8.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
A709 ; [*04D9.0020.0002] # MODIFIER LETTER HIGH DOTTED TONE BAR
A70A ; [*04DA.0020.0002] # MODIFIER LETTER MID DOTTED TONE BAR
A70B ; [*04DB.0020.0002] # MODIFIER LETTER LOW DOTTED TONE BAR
A70C ; [*04DC.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
A70D ; [*04DD.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
A70E ; [*04DE.0020.0002] # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
A70F ; [*04DF.0020.0002] # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
A710 ; [*04E0.0020.0002] # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
A711 ; [*04E1.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
A712 ; [*04E2.0020.0002] # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
A713 ; [*04E3.0020.0002] # MODIFIER LETTER HIGH LEFT-STEM TONE BAR
A714 ; [*04E4.0020.0002] # MODIFIER LETTER MID LEFT-STEM TONE BAR
A715 ; [*04E5.0020.0002] # MODIFIER LETTER LOW LEFT-STEM TONE BAR
A716 ; [*04E6.0020.0002] # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
A717 ; [*04E7.0020.0002] # MODIFIER LETTER DOT VERTICAL BAR
A718 ; [*04E8.0020.0002] # MODIFIER LETTER DOT SLASH
A719 ; [*04E9.0020.0002] # MODIFIER LETTER DOT HORIZONTAL BAR
A71A ; [*04EA.0020.0002] # MODIFIER LETTER LOWER RIGHT CORNER ANGLE
A71B ; [*04EB.0020.0002] # MODIFIER LETTER RAISED UP ARROW
A71C ; [*04EC.0020.0002] # MODIFIER LETTER RAISED DOWN ARROW
A71D ; [*04ED.0020.0002] # MODIFIER LETTER RAISED EXCLAMATION MARK
A71E ; [*04EE.0020.0002] # MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK
A71F ; [*04EF.0020.0002] # MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
A720 ; [*04F0.0020.0002] # MODIFIER LETTER STRESS AND HIGH TONE
A721 ; [*04F1.0020.0002] # MODIFIER LETTER STRESS AND LOW TONE
A788 ; [*04F2.0020.0002] # MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A789 ; [*04F3.0020.0002] # MODIFIER LETTER COLON
A78A ; [*04F4.0020.0002] # MODIFIER LETTER SHORT EQUALS SIGN
A828 ; [*051F.0020.0002] # SYLOTI NAGRI POETRY MARK-1
A829 ; [*0520.0020.0002] # SYLOTI NAGRI POETRY MARK-2
A82A ; [*0521.0020.0002] # SYLOTI NAGRI POETRY MARK-3
A82B ; [*0522.0020.0002] # SYLOTI NAGRI POETRY MARK-4
A830 ; [*1AA2.0020.0002] # NORTH INDIC FRACTION ONE QUARTER
A831 ; [*1AA3.0020.0002] # NORTH INDIC FRACTION ONE HALF
A832 ; [*1AA4.0020.0002] # NORTH INDIC FRACTION THREE QUARTERS
A833 ; [*1AA5.0020.0002] # NORTH INDIC FRACTION ONE SIXTEENTH
A834 ; [*1AA6.0020.0002] # NORTH INDIC FRACTION ONE EIGHTH
A835 ; [*1AA7.0020.0002] # NORTH INDIC FRACTION THREE SIXTEENTHS
A836 ; [*0523.0020.0002] # NORTH INDIC QUARTER MARK
A837 ; [*0524.0020.0002] # NORTH INDIC PLACEHOLDER MARK
A839 ; [*0525.0020.0002] # NORTH INDIC QUANTITY MARK
A874 ; [*0428.0020.0002] # PHAGS-PA SINGLE HEAD MARK
A875 ; [*0429.0020.0002] # PHAGS-PA DOUBLE HEAD MARK
A876 ; [*0294.0020.0002] # PHAGS-PA MARK SHAD
A877 ; [*0295.0020.0002] # PHAGS-PA MARK DOUBLE SHAD
A8CE ; [*0290.0020.0002] # SAURASHTRA DANDA
A8CF ; [*0291.0020.0002] # SAURASHTRA DOUBLE DANDA
A8E0 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ZERO
A8E1 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ONE
A8E2 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT TWO
A8E3 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT THREE
A8E4 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT FOUR
A8E5 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT FIVE
A8E6 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT SIX
A8E7 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT SEVEN
A8E8 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT EIGHT
A8E9 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT NINE
A8EA ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER A
A8EB ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER U
A8EC ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER KA
A8ED ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER NA
A8EE ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER PA
A8EF ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER RA
A8F0 ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER VI
A8F1 ; [.0000.0000.0000] # COMBINING DEVANAGARI SIGN AVAGRAHA
A8F8 ; [*03E8.0020.0002] # DEVANAGARI SIGN PUSHPIKA
A8F9 ; [*03E9.0020.0002] # DEVANAGARI GAP FILLER
A8FA ; [*03EA.0020.0002] # DEVANAGARI CARET
A8FC ; [*03EB.0020.0002] # DEVANAGARI SIGN SIDDHAM
A92E ; [*042E.0020.0002] # KAYAH LI SIGN CWI
A92F ; [*0298.0020.0002] # KAYAH LI SIGN SHYA
A95F ; [*02D8.0020.0002] # REJANG SECTION MARK
A9C1 ; [*02CD.0020.0002] # JAVANESE LEFT RERENGGAN
A9C2 ; [*02CE.0020.0002] # JAVANESE RIGHT RERENGGAN
A9C3 ; [*02CF.0020.0002] # JAVANESE PADA ANDAP
A9C4 ; [*02D0.0020.0002] # JAVANESE PADA MADYA
A9C5 ; [*02D1.0020.0002] # JAVANESE PADA LUHUR
A9C6 ; [*02D2.0020.0002] # JAVANESE PADA WINDU
A9C7 ; [*025B.0020.0002] # JAVANESE PADA PANGKAT
A9C8 ; [*02A3.0020.0002] # JAVANESE PADA LINGSA
A9C9 ; [*02A4.0020.0002] # JAVANESE PADA LUNGSI
A9CA ; [*02D3.0020.0002] # JAVANESE PADA ADEG
A9CB ; [*02D4.0020.0002] # JAVANESE PADA ADEG ADEG
A9CC ; [*02D5.0020.0002] # JAVANESE PADA PISELEH
A9CD ; [*02D6.0020.0002] # JAVANESE TURNED PADA PISELEH
A9DE ; [*042F.0020.0002] # JAVANESE PADA TIRTA TUMETES
A9DF ; [*0430.0020.0002] # JAVANESE PADA ISEN-ISEN
AA5C ; [*0431.0020.0002] # CHAM PUNCTUATION SPIRAL
AA5D ; [*02A5.0020.0002] # CHAM PUNCTUATION DANDA
AA5E ; [*02A6.0020.0002] # CHAM PUNCTUATION DOUBLE DANDA
AA5F ; [*02A7.0020.0002] # CHAM PUNCTUATION TRIPLE DANDA
AA77 ; [*054D.0020.0002] # MYANMAR SYMBOL AITON EXCLAMATION
AA78 ; [*054E.0020.0002] # MYANMAR SYMBOL AITON ONE
AA79 ; [*054F.0020.0002] # MYANMAR SYMBOL AITON TWO
AADE ; [*03F1.0020.0002] # TAI VIET SYMBOL HO HOI
AADF ; [*03F2.0020.0002] # TAI VIET SYMBOL KOI KOI
AAF0 ; [*02A8.0020.0002] # MEETEI MAYEK CHEIKHAN
AAF1 ; [*0272.0020.0002] # MEETEI MAYEK AHANG KHUDAM
AB5B ; [*04F5.0020.0002] # MODIFIER BREVE WITH INVERTED BREVE
ABEB ; [*02A9.0020.0002] # MEETEI MAYEK CHEIKHEI
FB29 ; [*0616.0020.0005] # HEBREW LETTER ALTERNATIVE PLUS SIGN
FBB2 ; [*0502.0020.0002] # ARABIC SYMBOL DOT ABOVE
FBB3 ; [*0503.0020.0002] # ARABIC SYMBOL DOT BELOW
FBB4 ; [*0504.0020.0002] # ARABIC SYMBOL TWO DOTS ABOVE
FBB5 ; [*0505.0020.0002] # ARABIC SYMBOL TWO DOTS BELOW
FBB6 ; [*0506.0020.0002] # ARABIC SYMBOL THREE DOTS ABOVE
FBB7 ; [*0507.0020.0002] # ARABIC SYMBOL THREE DOTS BELOW
FBB8 ; [*0508.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE
FBB9 ; [*0509.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW
FBBA ; [*050A.0020.0002] # ARABIC SYMBOL FOUR DOTS ABOVE
FBBB ; [*050B.0020.0002] # ARABIC SYMBOL FOUR DOTS BELOW
FBBC ; [*050C.0020.0002] # ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW
FBBD ; [*050D.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE
FBBE ; [*050E.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY BELOW
FBBF ; [*050F.0020.0002] # ARABIC SYMBOL RING
FBC0 ; [*0510.0020.0002] # ARABIC SYMBOL SMALL TAH ABOVE
FBC1 ; [*0511.0020.0002] # ARABIC SYMBOL SMALL TAH BELOW
FD3E ; [*0381.0020.0002] # ORNATE LEFT PARENTHESIS
FD3F ; [*0382.0020.0002] # ORNATE RIGHT PARENTHESIS
FDFD ; [*0501.0020.0002] # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
FE10 ; [*0222.0020.0016] # PRESENTATION FORM FOR VERTICAL COMMA
FE11 ; [*0231.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
FE12 ; [*028A.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
FE13 ; [*0239.0020.0016] # PRESENTATION FORM FOR VERTICAL COLON
FE14 ; [*0234.0020.0016] # PRESENTATION FORM FOR VERTICAL SEMICOLON
FE15 ; [*0260.0020.0016] # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
FE16 ; [*0266.0020.0016] # PRESENTATION FORM FOR VERTICAL QUESTION MARK
FE17 ; [*037B.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
FE18 ; [*037C.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
FE19 ; [*0277.0020.0016][*0277.0020.0016][*0277.0020.0016] # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
FE21 ; [.0000.0000.0000] # COMBINING LIGATURE RIGHT HALF
FE23 ; [.0000.0000.0000] # COMBINING DOUBLE TILDE RIGHT HALF
FE24 ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF
FE25 ; [.0000.0000.0000] # COMBINING MACRON RIGHT HALF
FE26 ; [.0000.0000.0000] # COMBINING CONJOINING MACRON
FE28 ; [.0000.0000.0000] # COMBINING LIGATURE RIGHT HALF BELOW
FE2A ; [.0000.0000.0000] # COMBINING TILDE RIGHT HALF BELOW
FE2B ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF BELOW
FE2C ; [.0000.0000.0000] # COMBINING MACRON RIGHT HALF BELOW
FE2D ; [.0000.0000.0000] # COMBINING CONJOINING MACRON BELOW
FE2F ; [.0000.0000.0000] # COMBINING CYRILLIC TITLO RIGHT HALF
FE30 ; [*0277.0020.0016][*0277.0020.0016] # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
FE31 ; [*0216.0020.0016] # PRESENTATION FORM FOR VERTICAL EM DASH
FE32 ; [*0215.0020.0016] # PRESENTATION FORM FOR VERTICAL EN DASH
FE33 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL LOW LINE
FE34 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
FE35 ; [*0317.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
FE36 ; [*0318.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
FE37 ; [*031B.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
FE38 ; [*031C.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
FE39 ; [*0379.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
FE3A ; [*037A.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
FE3B ; [*0377.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
FE3C ; [*0378.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
FE3D ; [*0371.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
FE3E ; [*0372.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
FE3F ; [*036F.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
FE40 ; [*0370.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
FE41 ; [*0373.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
FE42 ; [*0374.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
FE43 ; [*0375.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
FE44 ; [*0376.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
FE45 ; [*0232.0020.0002] # SESAME DOT
FE46 ; [*0233.0020.0002] # WHITE SESAME DOT
FE47 ; [*0319.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
FE48 ; [*031A.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
FE49 ; [*020A.0020.0004] # DASHED OVERLINE
FE4A ; [*020A.0020.0004] # CENTRELINE OVERLINE
FE4B ; [*020A.0020.0004] # WAVY OVERLINE
FE4C ; [*020A.0020.0004] # DOUBLE WAVY OVERLINE
FE4D ; [*020B.0020.0004] # DASHED LOW LINE
FE4E ; [*020B.0020.0004] # CENTRELINE LOW LINE
FE4F ; [*020B.0020.0004] # WAVY LOW LINE
FE50 ; [*0222.0020.000F] # SMALL COMMA
FE51 ; [*0231.0020.000F] # SMALL IDEOGRAPHIC COMMA
FE52 ; [*0277.0020.000F] # SMALL FULL STOP
FE54 ; [*0234.0020.000F] # SMALL SEMICOLON
FE55 ; [*0239.0020.000F] # SMALL COLON
FE56 ; [*0266.0020.000F] # SMALL QUESTION MARK
FE57 ; [*0260.0020.000F] # SMALL EXCLAMATION MARK
FE58 ; [*0216.0020.000F] # SMALL EM DASH
FE59 ; [*0317.0020.000F] # SMALL LEFT PARENTHESIS
FE5A ; [*0318.0020.000F] # SMALL RIGHT PARENTHESIS
FE5B ; [*031B.0020.000F] # SMALL LEFT CURLY BRACKET
FE5C ; [*031C.0020.000F] # SMALL RIGHT CURLY BRACKET
FE5D ; [*0379.0020.000F] # SMALL LEFT TORTOISE SHELL BRACKET
FE5E ; [*037A.0020.000F] # SMALL RIGHT TORTOISE SHELL BRACKET
FE5F ; [*0398.0020.000F] # SMALL NUMBER SIGN
FE60 ; [*0396.0020.000F] # SMALL AMPERSAND
FE61 ; [*038F.0020.000F] # SMALL ASTERISK
FE62 ; [*0616.0020.000F] # SMALL PLUS SIGN
FE63 ; [*020D.0020.000F] # SMALL HYPHEN-MINUS
FE64 ; [*061A.0020.000F] # SMALL LESS-THAN SIGN
FE65 ; [*061C.0020.000F] # SMALL GREATER-THAN SIGN
FE66 ; [*061B.0020.000F] # SMALL EQUALS SIGN
FE68 ; [*0395.0020.000F] # SMALL REVERSE SOLIDUS
FE6A ; [*0399.0020.000F] # SMALL PERCENT SIGN
FE6B ; [*038E.0020.000F] # SMALL COMMERCIAL AT
FE73 ; [.0000.0000.0000] # ARABIC TAIL FRAGMENT
FF01 ; [*0260.0020.0003] # FULLWIDTH EXCLAMATION MARK
FF02 ; [*030C.0020.0003] # FULLWIDTH QUOTATION MARK
FF03 ; [*0398.0020.0003] # FULLWIDTH NUMBER SIGN
FF05 ; [*0399.0020.0003] # FULLWIDTH PERCENT SIGN
FF06 ; [*0396.0020.0003] # FULLWIDTH AMPERSAND
FF07 ; [*0305.0020.0003] # FULLWIDTH APOSTROPHE
FF08 ; [*0317.0020.0003] # FULLWIDTH LEFT PARENTHESIS
FF09 ; [*0318.0020.0003] # FULLWIDTH RIGHT PARENTHESIS
FF0A ; [*038F.0020.0003] # FULLWIDTH ASTERISK
FF0B ; [*0616.0020.0003] # FULLWIDTH PLUS SIGN
FF0C ; [*0222.0020.0003] # FULLWIDTH COMMA
FF0D ; [*020D.0020.0003] # FULLWIDTH HYPHEN-MINUS
FF0E ; [*0277.0020.0003] # FULLWIDTH FULL STOP
FF0F ; [*0394.0020.0003] # FULLWIDTH SOLIDUS
FF1A ; [*0239.0020.0003] # FULLWIDTH COLON
FF1B ; [*0234.0020.0003] # FULLWIDTH SEMICOLON
FF1C ; [*061A.0020.0003] # FULLWIDTH LESS-THAN SIGN
FF1D ; [*061B.0020.0003] # FULLWIDTH EQUALS SIGN
FF1E ; [*061C.0020.0003] # FULLWIDTH GREATER-THAN SIGN
FF1F ; [*0266.0020.0003] # FULLWIDTH QUESTION MARK
FF20 ; [*038E.0020.0003] # FULLWIDTH COMMERCIAL AT
FF3B ; [*0319.0020.0003] # FULLWIDTH LEFT SQUARE BRACKET
FF3C ; [*0395.0020.0003] # FULLWIDTH REVERSE SOLIDUS
FF3D ; [*031A.0020.0003] # FULLWIDTH RIGHT SQUARE BRACKET
FF3E ; [*0485.0020.0003] # FULLWIDTH CIRCUMFLEX ACCENT
FF3F ; [*020B.0020.0003] # FULLWIDTH LOW LINE
FF40 ; [*0482.0020.0003] # FULLWIDTH GRAVE ACCENT
FF5B ; [*031B.0020.0003] # FULLWIDTH LEFT CURLY BRACKET
FF5C ; [*061E.0020.0003] # FULLWIDTH VERTICAL LINE
FF5D ; [*031C.0020.0003] # FULLWIDTH RIGHT CURLY BRACKET
FF5E ; [*0620.0020.0003] # FULLWIDTH TILDE
FF5F ; [*032D.0020.0003] # FULLWIDTH LEFT WHITE PARENTHESIS
FF60 ; [*032E.0020.0003] # FULLWIDTH RIGHT WHITE PARENTHESIS
FF61 ; [*028A.0020.0012] # HALFWIDTH IDEOGRAPHIC FULL STOP
FF62 ; [*0373.0020.0012] # HALFWIDTH LEFT CORNER BRACKET
FF63 ; [*0374.0020.0012] # HALFWIDTH RIGHT CORNER BRACKET
FF64 ; [*0231.0020.0012] # HALFWIDTH IDEOGRAPHIC COMMA
FF65 ; [*0221.0020.0012] # HALFWIDTH KATAKANA MIDDLE DOT
FFE2 ; [*061D.0020.0003] # FULLWIDTH NOT SIGN
FFE3 ; [*0486.0020.0003] # FULLWIDTH MACRON
FFE4 ; [*061F.0020.0003] # FULLWIDTH BROKEN BAR
FFE8 ; [*081A.0020.0012] # HALFWIDTH FORMS LIGHT VERTICAL
FFE9 ; [*059C.0020.0012] # HALFWIDTH LEFTWARDS ARROW
FFEA ; [*059E.0020.0012] # HALFWIDTH UPWARDS ARROW
FFEB ; [*059D.0020.0012] # HALFWIDTH RIGHTWARDS ARROW
FFEC ; [*059F.0020.0012] # HALFWIDTH DOWNWARDS ARROW
FFED ; [*08B8.0020.0012] # HALFWIDTH BLACK SQUARE
FFEE ; [*08E3.0020.0012] # HALFWIDTH WHITE CIRCLE
FFFC ; [*1A95.0020.0002] # OBJECT REPLACEMENT CHARACTER
10100 ; [*02FA.0020.0002] # AEGEAN WORD SEPARATOR LINE
10101 ; [*02FB.0020.0002] # AEGEAN WORD SEPARATOR DOT
10102 ; [*02FC.0020.0002] # AEGEAN CHECK MARK
10110 ; [*1AE9.0020.0002] # AEGEAN NUMBER TEN
10111 ; [*1AEA.0020.0002] # AEGEAN NUMBER TWENTY
10112 ; [*1AEB.0020.0002] # AEGEAN NUMBER THIRTY
10113 ; [*1AEC.0020.0002] # AEGEAN NUMBER FORTY
10114 ; [*1AED.0020.0002] # AEGEAN NUMBER FIFTY
10115 ; [*1AEE.0020.0002] # AEGEAN NUMBER SIXTY
10116 ; [*1AEF.0020.0002] # AEGEAN NUMBER SEVENTY
10117 ; [*1AF0.0020.0002] # AEGEAN NUMBER EIGHTY
10118 ; [*1AF1.0020.0002] # AEGEAN NUMBER NINETY
10119 ; [*1AF2.0020.0002] # AEGEAN NUMBER ONE HUNDRED
1011A ; [*1AF3.0020.0002] # AEGEAN NUMBER TWO HUNDRED
1011B ; [*1AF4.0020.0002] # AEGEAN NUMBER THREE HUNDRED
1011C ; [*1AF5.0020.0002] # AEGEAN NUMBER FOUR HUNDRED
1011D ; [*1AF6.0020.0002] # AEGEAN NUMBER FIVE HUNDRED
1011E ; [*1AF7.0020.0002] # AEGEAN NUMBER SIX HUNDRED
1011F ; [*1AF8.0020.0002] # AEGEAN NUMBER SEVEN HUNDRED
10120 ; [*1AF9.0020.0002] # AEGEAN NUMBER EIGHT HUNDRED
10121 ; [*1AFA.0020.0002] # AEGEAN NUMBER NINE HUNDRED
10122 ; [*1AFB.0020.0002] # AEGEAN NUMBER ONE THOUSAND
10123 ; [*1AFC.0020.0002] # AEGEAN NUMBER TWO THOUSAND
10124 ; [*1AFD.0020.0002] # AEGEAN NUMBER THREE THOUSAND
10125 ; [*1AFE.0020.0002] # AEGEAN NUMBER FOUR THOUSAND
10126 ; [*1AFF.0020.0002] # AEGEAN NUMBER FIVE THOUSAND
10127 ; [*1B00.0020.0002] # AEGEAN NUMBER SIX THOUSAND
10128 ; [*1B01.0020.0002] # AEGEAN NUMBER SEVEN THOUSAND
10129 ; [*1B02.0020.0002] # AEGEAN NUMBER EIGHT THOUSAND
1012A ; [*1B03.0020.0002] # AEGEAN NUMBER NINE THOUSAND
1012B ; [*1B04.0020.0002] # AEGEAN NUMBER TEN THOUSAND
1012C ; [*1B05.0020.0002] # AEGEAN NUMBER TWENTY THOUSAND
1012D ; [*1B06.0020.0002] # AEGEAN NUMBER THIRTY THOUSAND
1012E ; [*1B07.0020.0002] # AEGEAN NUMBER FORTY THOUSAND
1012F ; [*1B08.0020.0002] # AEGEAN NUMBER FIFTY THOUSAND
10130 ; [*1B09.0020.0002] # AEGEAN NUMBER SIXTY THOUSAND
10131 ; [*1B0A.0020.0002] # AEGEAN NUMBER SEVENTY THOUSAND
10132 ; [*1B0B.0020.0002] # AEGEAN NUMBER EIGHTY THOUSAND
10133 ; [*1B0C.0020.0002] # AEGEAN NUMBER NINETY THOUSAND
10137 ; [*0F78.0020.0002] # AEGEAN WEIGHT BASE UNIT
10138 ; [*0F79.0020.0002] # AEGEAN WEIGHT FIRST SUBUNIT
10139 ; [*0F7A.0020.0002] # AEGEAN WEIGHT SECOND SUBUNIT
1013A ; [*0F7B.0020.0002] # AEGEAN WEIGHT THIRD SUBUNIT
1013B ; [*0F7C.0020.0002] # AEGEAN WEIGHT FOURTH SUBUNIT
1013C ; [*0F7D.0020.0002] # AEGEAN DRY MEASURE FIRST SUBUNIT
1013D ; [*0F7E.0020.0002] # AEGEAN LIQUID MEASURE FIRST SUBUNIT
1013E ; [*0F7F.0020.0002] # AEGEAN MEASURE SECOND SUBUNIT
1013F ; [*0F80.0020.0002] # AEGEAN MEASURE THIRD SUBUNIT
10140 ; [*1B0D.0020.0002] # GREEK ACROPHONIC ATTIC ONE QUARTER
10141 ; [*1B0E.0020.0002] # GREEK ACROPHONIC ATTIC ONE HALF
10144 ; [*1B0F.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY
10145 ; [*1B10.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED
10146 ; [*1B11.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND
10147 ; [*1B12.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND
10149 ; [*1B13.0020.0002] # GREEK ACROPHONIC ATTIC TEN TALENTS
1014A ; [*1B14.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY TALENTS
1014B ; [*1B15.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
1014C ; [*1B16.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
1014D ; [*1B17.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
1014E ; [*1B18.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
10150 ; [*1B19.0020.0002] # GREEK ACROPHONIC ATTIC TEN STATERS
10151 ; [*1B1A.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY STATERS
10152 ; [*1B1B.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
10153 ; [*1B1C.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
10154 ; [*1B1D.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
10155 ; [*1B1E.0020.0002] # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
10156 ; [*1B1F.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
10157 ; [*1B20.0020.0002] # GREEK ACROPHONIC ATTIC TEN MNAS
10160 ; [*1B21.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN
10161 ; [*1B22.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
10162 ; [*1B23.0020.0002] # GREEK ACROPHONIC HERMIONIAN TEN
10163 ; [*1B24.0020.0002] # GREEK ACROPHONIC MESSENIAN TEN
10164 ; [*1B25.0020.0002] # GREEK ACROPHONIC THESPIAN TEN
10165 ; [*1B26.0020.0002] # GREEK ACROPHONIC THESPIAN THIRTY
10166 ; [*1B27.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY
10167 ; [*1B28.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
10168 ; [*1B29.0020.0002] # GREEK ACROPHONIC HERMIONIAN FIFTY
10169 ; [*1B2A.0020.0002] # GREEK ACROPHONIC THESPIAN FIFTY
1016A ; [*1B2B.0020.0002] # GREEK ACROPHONIC THESPIAN ONE HUNDRED
1016B ; [*1B2C.0020.0002] # GREEK ACROPHONIC THESPIAN THREE HUNDRED
1016C ; [*1B2D.0020.0002] # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
1016D ; [*1B2E.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
1016E ; [*1B2F.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE HUNDRED
1016F ; [*1B30.0020.0002] # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
10170 ; [*1B31.0020.0002] # GREEK ACROPHONIC NAXIAN FIVE HUNDRED
10171 ; [*1B32.0020.0002] # GREEK ACROPHONIC THESPIAN ONE THOUSAND
10172 ; [*1B33.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE THOUSAND
10174 ; [*1B34.0020.0002] # GREEK ACROPHONIC STRATIAN FIFTY MNAS
10175 ; [*1B35.0020.0002] # GREEK ONE HALF SIGN
10176 ; [*1B36.0020.0002] # GREEK ONE HALF SIGN ALTERNATE FORM
10177 ; [*1B37.0020.0002] # GREEK TWO THIRDS SIGN
10178 ; [*1B38.0020.0002] # GREEK THREE QUARTERS SIGN
10179 ; [*0F81.0020.0002] # GREEK YEAR SIGN
1017A ; [*0F82.0020.0002] # GREEK TALENT SIGN
1017B ; [*0F83.0020.0002] # GREEK DRACHMA SIGN
1017C ; [*0F84.0020.0002] # GREEK OBOL SIGN
1017D ; [*0F85.0020.0002] # GREEK TWO OBOLS SIGN
1017E ; [*0F86.0020.0002] # GREEK THREE OBOLS SIGN
1017F ; [*0F87.0020.0002] # GREEK FOUR OBOLS SIGN
10180 ; [*0F88.0020.0002] # GREEK FIVE OBOLS SIGN
10181 ; [*0F89.0020.0002] # GREEK METRETES SIGN
10182 ; [*0F8A.0020.0002] # GREEK KYATHOS BASE SIGN
10183 ; [*0F8B.0020.0002] # GREEK LITRA SIGN
10184 ; [*0F8C.0020.0002] # GREEK OUNKIA SIGN
10185 ; [*0F8D.0020.0002] # GREEK XESTES SIGN
10186 ; [*0F8E.0020.0002] # GREEK ARTABE SIGN
10187 ; [*0F8F.0020.0002] # GREEK AROURA SIGN
10188 ; [*0F90.0020.0002] # GREEK GRAMMA SIGN
10189 ; [*0F91.0020.0002] # GREEK TRYBLION BASE SIGN
1018B ; [*1B39.0020.0002] # GREEK ONE QUARTER SIGN
1018C ; [*0F92.0020.0002] # GREEK SINUSOID SIGN
1018D ; [*0F93.0020.0002] # GREEK INDICTION SIGN
1018E ; [*0F94.0020.0002] # NOMISMA SIGN
10190 ; [*0F95.0020.0002] # ROMAN SEXTANS SIGN
10191 ; [*0F96.0020.0002] # ROMAN UNCIA SIGN
10192 ; [*0F97.0020.0002] # ROMAN SEMUNCIA SIGN
10193 ; [*0F98.0020.0002] # ROMAN SEXTULA SIGN
10194 ; [*0F99.0020.0002] # ROMAN DIMIDIA SEXTULA SIGN
10195 ; [*0F9A.0020.0002] # ROMAN SILIQUA SIGN
10196 ; [*0F9B.0020.0002] # ROMAN DENARIUS SIGN
10197 ; [*0F9C.0020.0002] # ROMAN QUINARIUS SIGN
10198 ; [*0F9D.0020.0002] # ROMAN SESTERTIUS SIGN
10199 ; [*0F9E.0020.0002] # ROMAN DUPONDIUS SIGN
1019A ; [*0F9F.0020.0002] # ROMAN AS SIGN
1019B ; [*0FA0.0020.0002] # ROMAN CENTURIAL SIGN
101A0 ; [*0FA1.0020.0002] # GREEK SYMBOL TAU RHO
101D0 ; [*0FA2.0020.0002] # PHAISTOS DISC SIGN PEDESTRIAN
101D1 ; [*0FA3.0020.0002] # PHAISTOS DISC SIGN PLUMED HEAD
101D2 ; [*0FA4.0020.0002] # PHAISTOS DISC SIGN TATTOOED HEAD
101D3 ; [*0FA5.0020.0002] # PHAISTOS DISC SIGN CAPTIVE
101D4 ; [*0FA6.0020.0002] # PHAISTOS DISC SIGN CHILD
101D5 ; [*0FA7.0020.0002] # PHAISTOS DISC SIGN WOMAN
101D6 ; [*0FA8.0020.0002] # PHAISTOS DISC SIGN HELMET
101D7 ; [*0FA9.0020.0002] # PHAISTOS DISC SIGN GAUNTLET
101D8 ; [*0FAA.0020.0002] # PHAISTOS DISC SIGN TIARA
101D9 ; [*0FAB.0020.0002] # PHAISTOS DISC SIGN ARROW
101DA ; [*0FAC.0020.0002] # PHAISTOS DISC SIGN BOW
101DB ; [*0FAD.0020.0002] # PHAISTOS DISC SIGN SHIELD
101DC ; [*0FAE.0020.0002] # PHAISTOS DISC SIGN CLUB
101DD ; [*0FAF.0020.0002] # PHAISTOS DISC SIGN MANACLES
101DE ; [*0FB0.0020.0002] # PHAISTOS DISC SIGN MATTOCK
101DF ; [*0FB1.0020.0002] # PHAISTOS DISC SIGN SAW
101E0 ; [*0FB2.0020.0002] # PHAISTOS DISC SIGN LID
101E1 ; [*0FB3.0020.0002] # PHAISTOS DISC SIGN BOOMERANG
101E2 ; [*0FB4.0020.0002] # PHAISTOS DISC SIGN CARPENTRY PLANE
101E3 ; [*0FB5.0020.0002] # PHAISTOS DISC SIGN DOLIUM
101E4 ; [*0FB6.0020.0002] # PHAISTOS DISC SIGN COMB
101E5 ; [*0FB7.0020.0002] # PHAISTOS DISC SIGN SLING
101E6 ; [*0FB8.0020.0002] # PHAISTOS DISC SIGN COLUMN
101E7 ; [*0FB9.0020.0002] # PHAISTOS DISC SIGN BEEHIVE
101E8 ; [*0FBA.0020.0002] # PHAISTOS DISC SIGN SHIP
101E9 ; [*0FBB.0020.0002] # PHAISTOS DISC SIGN HORN
101EA ; [*0FBC.0020.0002] # PHAISTOS DISC SIGN HIDE
101EB ; [*0FBD.0020.0002] # PHAISTOS DISC SIGN BULLS LEG
101EC ; [*0FBE.0020.0002] # PHAISTOS DISC SIGN CAT
101ED ; [*0FBF.0020.0002] # PHAISTOS DISC SIGN RAM
101EE ; [*0FC0.0020.0002] # PHAISTOS DISC SIGN EAGLE
101EF ; [*0FC1.0020.0002] # PHAISTOS DISC SIGN DOVE
101F0 ; [*0FC2.0020.0002] # PHAISTOS DISC SIGN TUNNY
101F1 ; [*0FC3.0020.0002] # PHAISTOS DISC SIGN BEE
101F2 ; [*0FC4.0020.0002] # PHAISTOS DISC SIGN PLANE TREE
101F3 ; [*0FC5.0020.0002] # PHAISTOS DISC SIGN VINE
101F4 ; [*0FC6.0020.0002] # PHAISTOS DISC SIGN PAPYRUS
101F5 ; [*0FC7.0020.0002] # PHAISTOS DISC SIGN ROSETTE
101F6 ; [*0FC8.0020.0002] # PHAISTOS DISC SIGN LILY
101F7 ; [*0FC9.0020.0002] # PHAISTOS DISC SIGN OX BACK
101F8 ; [*0FCA.0020.0002] # PHAISTOS DISC SIGN FLUTE
101F9 ; [*0FCB.0020.0002] # PHAISTOS DISC SIGN GRATER
101FA ; [*0FCC.0020.0002] # PHAISTOS DISC SIGN STRAINER
101FB ; [*0FCD.0020.0002] # PHAISTOS DISC SIGN SMALL AXE
101FC ; [*0FCE.0020.0002] # PHAISTOS DISC SIGN WAVY BAND
102E0 ; [.0000.0000.0000] # COPTIC EPACT THOUSANDS MARK
102EA ; [*1B3A.0020.0002] # COPTIC EPACT NUMBER TEN
102EB ; [*1B3B.0020.0002] # COPTIC EPACT NUMBER TWENTY
102EC ; [*1B3C.0020.0002] # COPTIC EPACT NUMBER THIRTY
102ED ; [*1B3D.0020.0002] # COPTIC EPACT NUMBER FORTY
102EE ; [*1B3E.0020.0002] # COPTIC EPACT NUMBER FIFTY
102EF ; [*1B3F.0020.0002] # COPTIC EPACT NUMBER SIXTY
102F0 ; [*1B40.0020.0002] # COPTIC EPACT NUMBER SEVENTY
102F1 ; [*1B41.0020.0002] # COPTIC EPACT NUMBER EIGHTY
102F2 ; [*1B42.0020.0002] # COPTIC EPACT NUMBER NINETY
102F3 ; [*1B43.0020.0002] # COPTIC EPACT NUMBER ONE HUNDRED
102F4 ; [*1B44.0020.0002] # COPTIC EPACT NUMBER TWO HUNDRED
102F5 ; [*1B45.0020.0002] # COPTIC EPACT NUMBER THREE HUNDRED
102F6 ; [*1B46.0020.0002] # COPTIC EPACT NUMBER FOUR HUNDRED
102F7 ; [*1B47.0020.0002] # COPTIC EPACT NUMBER FIVE HUNDRED
102F8 ; [*1B48.0020.0002] # COPTIC EPACT NUMBER SIX HUNDRED
102F9 ; [*1B49.0020.0002] # COPTIC EPACT NUMBER SEVEN HUNDRED
102FA ; [*1B4A.0020.0002] # COPTIC EPACT NUMBER EIGHT HUNDRED
102FB ; [*1B4B.0020.0002] # COPTIC EPACT NUMBER NINE HUNDRED
10322 ; [*1AE3.0020.0002] # OLD ITALIC NUMERAL TEN
10323 ; [*1AE4.0020.0002] # OLD ITALIC NUMERAL FIFTY
1039F ; [*02FD.0020.0002] # UGARITIC WORD DIVIDER
103D0 ; [*02FE.0020.0002] # OLD PERSIAN WORD DIVIDER
103D3 ; [*1B4C.0020.0002] # OLD PERSIAN NUMBER TEN
103D4 ; [*1B4D.0020.0002] # OLD PERSIAN NUMBER TWENTY
103D5 ; [*1B4E.0020.0002] # OLD PERSIAN NUMBER HUNDRED
1056F ; [*0432.0020.0002] # CAUCASIAN ALBANIAN CITATION MARK
10857 ; [*02D9.0020.0002] # IMPERIAL ARAMAIC SECTION SIGN
1085B ; [*1B5E.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN
1085C ; [*1B5F.0020.0002] # IMPERIAL ARAMAIC NUMBER TWENTY
1085D ; [*1B60.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE HUNDRED
1085E ; [*1B61.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE THOUSAND
1085F ; [*1B62.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN THOUSAND
10877 ; [*0FCF.0020.0002] # PALMYRENE LEFT-POINTING FLEURON
10878 ; [*0FD0.0020.0002] # PALMYRENE RIGHT-POINTING FLEURON
1087E ; [*1B4F.0020.0002] # PALMYRENE NUMBER TEN
1087F ; [*1B50.0020.0002] # PALMYRENE NUMBER TWENTY
108AD ; [*1B51.0020.0002] # NABATAEAN NUMBER TEN
108AE ; [*1B52.0020.0002] # NABATAEAN NUMBER TWENTY
108AF ; [*1B53.0020.0002] # NABATAEAN NUMBER ONE HUNDRED
108FD ; [*1B54.0020.0002] # HATRAN NUMBER TEN
108FE ; [*1B55.0020.0002] # HATRAN NUMBER TWENTY
108FF ; [*1B56.0020.0002] # HATRAN NUMBER ONE HUNDRED
10917 ; [*1B5B.0020.0002] # PHOENICIAN NUMBER TEN
10918 ; [*1B5C.0020.0002] # PHOENICIAN NUMBER TWENTY
10919 ; [*1B5D.0020.0002] # PHOENICIAN NUMBER ONE HUNDRED
1091F ; [*02FF.0020.0002] # PHOENICIAN WORD SEPARATOR
1093F ; [*02F9.0020.0002] # LYDIAN TRIANGULAR MARK
109BC ; [*1BDD.0020.0002] # MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS
109BD ; [*1BD2.0020.0002] # MEROITIC CURSIVE FRACTION ONE HALF
109C9 ; [*1BA7.0020.0002] # MEROITIC CURSIVE NUMBER TEN
109CA ; [*1BA8.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY
109CB ; [*1BA9.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY
109CC ; [*1BAA.0020.0002] # MEROITIC CURSIVE NUMBER FORTY
109CD ; [*1BAB.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY
109CE ; [*1BAC.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY
109CF ; [*1BAD.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY
109D2 ; [*1BAE.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED
109D3 ; [*1BAF.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED
109D4 ; [*1BB0.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED
109D5 ; [*1BB1.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED
109D6 ; [*1BB2.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED
109D7 ; [*1BB3.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED
109D8 ; [*1BB4.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED
109D9 ; [*1BB5.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED
109DA ; [*1BB6.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED
109DB ; [*1BB7.0020.0002] # MEROITIC CURSIVE NUMBER ONE THOUSAND
109DC ; [*1BB8.0020.0002] # MEROITIC CURSIVE NUMBER TWO THOUSAND
109DD ; [*1BB9.0020.0002] # MEROITIC CURSIVE NUMBER THREE THOUSAND
109DE ; [*1BBA.0020.0002] # MEROITIC CURSIVE NUMBER FOUR THOUSAND
109DF ; [*1BBB.0020.0002] # MEROITIC CURSIVE NUMBER FIVE THOUSAND
109E0 ; [*1BBC.0020.0002] # MEROITIC CURSIVE NUMBER SIX THOUSAND
109E1 ; [*1BBD.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN THOUSAND
109E2 ; [*1BBE.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT THOUSAND
109E3 ; [*1BBF.0020.0002] # MEROITIC CURSIVE NUMBER NINE THOUSAND
109E4 ; [*1BC0.0020.0002] # MEROITIC CURSIVE NUMBER TEN THOUSAND
109E5 ; [*1BC1.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY THOUSAND
109E6 ; [*1BC2.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY THOUSAND
109E7 ; [*1BC3.0020.0002] # MEROITIC CURSIVE NUMBER FORTY THOUSAND
109E8 ; [*1BC4.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY THOUSAND
109E9 ; [*1BC5.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY THOUSAND
109EA ; [*1BC6.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY THOUSAND
109EB ; [*1BC7.0020.0002] # MEROITIC CURSIVE NUMBER EIGHTY THOUSAND
109EC ; [*1BC8.0020.0002] # MEROITIC CURSIVE NUMBER NINETY THOUSAND
109ED ; [*1BC9.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND
109EE ; [*1BCA.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND
109EF ; [*1BCB.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND
109F0 ; [*1BCC.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND
109F1 ; [*1BCD.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND
109F2 ; [*1BCE.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND
109F3 ; [*1BCF.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND
109F4 ; [*1BD0.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND
109F5 ; [*1BD1.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND
109F6 ; [*1BD3.0020.0002] # MEROITIC CURSIVE FRACTION ONE TWELFTH
109F7 ; [*1BD4.0020.0002] # MEROITIC CURSIVE FRACTION TWO TWELFTHS
109F8 ; [*1BD5.0020.0002] # MEROITIC CURSIVE FRACTION THREE TWELFTHS
109F9 ; [*1BD6.0020.0002] # MEROITIC CURSIVE FRACTION FOUR TWELFTHS
109FA ; [*1BD7.0020.0002] # MEROITIC CURSIVE FRACTION FIVE TWELFTHS
109FB ; [*1BD8.0020.0002] # MEROITIC CURSIVE FRACTION SIX TWELFTHS
109FC ; [*1BD9.0020.0002] # MEROITIC CURSIVE FRACTION SEVEN TWELFTHS
109FD ; [*1BDA.0020.0002] # MEROITIC CURSIVE FRACTION EIGHT TWELFTHS
109FE ; [*1BDB.0020.0002] # MEROITIC CURSIVE FRACTION NINE TWELFTHS
109FF ; [*1BDC.0020.0002] # MEROITIC CURSIVE FRACTION TEN TWELFTHS
10A44 ; [*1B7E.0020.0002] # KHAROSHTHI NUMBER TEN
10A45 ; [*1B7F.0020.0002] # KHAROSHTHI NUMBER TWENTY
10A46 ; [*1B80.0020.0002] # KHAROSHTHI NUMBER ONE HUNDRED
10A47 ; [*1B81.0020.0002] # KHAROSHTHI NUMBER ONE THOUSAND
10A50 ; [*0438.0020.0002] # KHAROSHTHI PUNCTUATION DOT
10A51 ; [*0439.0020.0002] # KHAROSHTHI PUNCTUATION SMALL CIRCLE
10A52 ; [*043A.0020.0002] # KHAROSHTHI PUNCTUATION CIRCLE
10A53 ; [*043B.0020.0002] # KHAROSHTHI PUNCTUATION CRESCENT BAR
10A54 ; [*043C.0020.0002] # KHAROSHTHI PUNCTUATION MANGALAM
10A55 ; [*043D.0020.0002] # KHAROSHTHI PUNCTUATION LOTUS
10A56 ; [*02AA.0020.0002] # KHAROSHTHI PUNCTUATION DANDA
10A57 ; [*02AB.0020.0002] # KHAROSHTHI PUNCTUATION DOUBLE DANDA
10A58 ; [*043E.0020.0002] # KHAROSHTHI PUNCTUATION LINES
10A7E ; [*1B57.0020.0002] # OLD SOUTH ARABIAN NUMBER FIFTY
10A7F ; [*1B58.0020.0002] # OLD SOUTH ARABIAN NUMERIC INDICATOR
10A9E ; [*1B59.0020.0002] # OLD NORTH ARABIAN NUMBER TEN
10A9F ; [*1B5A.0020.0002] # OLD NORTH ARABIAN NUMBER TWENTY
10AED ; [*1B63.0020.0002] # MANICHAEAN NUMBER TEN
10AEE ; [*1B64.0020.0002] # MANICHAEAN NUMBER TWENTY
10AEF ; [*1B65.0020.0002] # MANICHAEAN NUMBER ONE HUNDRED
10AF0 ; [*0443.0020.0002] # MANICHAEAN PUNCTUATION STAR
10AF1 ; [*0444.0020.0002] # MANICHAEAN PUNCTUATION FLEURON
10AF2 ; [*0445.0020.0002] # MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT
10AF3 ; [*0446.0020.0002] # MANICHAEAN PUNCTUATION DOT WITHIN DOT
10AF4 ; [*0447.0020.0002] # MANICHAEAN PUNCTUATION DOT
10AF5 ; [*0448.0020.0002] # MANICHAEAN PUNCTUATION TWO DOTS
10AF6 ; [*0449.0020.0002] # MANICHAEAN PUNCTUATION LINE FILLER
10B39 ; [*0442.0020.0002] # AVESTAN ABBREVIATION MARK
10B3A ; [*02DA.0020.0002] # TINY TWO DOTS OVER ONE DOT PUNCTUATION
10B3B ; [*02DB.0020.0002] # SMALL TWO DOTS OVER ONE DOT PUNCTUATION
10B3C ; [*02DC.0020.0002] # LARGE TWO DOTS OVER ONE DOT PUNCTUATION
10B3D ; [*02DD.0020.0002] # LARGE ONE DOT OVER TWO DOTS PUNCTUATION
10B3E ; [*02DE.0020.0002] # LARGE TWO RINGS OVER ONE RING PUNCTUATION
10B3F ; [*02DF.0020.0002] # LARGE ONE RING OVER TWO RINGS PUNCTUATION
10B5C ; [*1B66.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TEN
10B5D ; [*1B67.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWENTY
10B5E ; [*1B68.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED
10B5F ; [*1B69.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
10B7C ; [*1B6A.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TEN
10B7D ; [*1B6B.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWENTY
10B7E ; [*1B6C.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
10B7F ; [*1B6D.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
10B99 ; [*044A.0020.0002] # PSALTER PAHLAVI SECTION MARK
10B9A ; [*044B.0020.0002] # PSALTER PAHLAVI TURNED SECTION MARK
10B9B ; [*044C.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH CROSS
10B9C ; [*044D.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH DOT
10BAD ; [*1B6E.0020.0002] # PSALTER PAHLAVI NUMBER TEN
10BAE ; [*1B6F.0020.0002] # PSALTER PAHLAVI NUMBER TWENTY
10BAF ; [*1B70.0020.0002] # PSALTER PAHLAVI NUMBER ONE HUNDRED
10CFC ; [*1AE5.0020.0002] # OLD HUNGARIAN NUMBER TEN
10CFD ; [*1AE6.0020.0002] # OLD HUNGARIAN NUMBER FIFTY
10CFE ; [*1AE7.0020.0002] # OLD HUNGARIAN NUMBER ONE HUNDRED
10CFF ; [*1AE8.0020.0002] # OLD HUNGARIAN NUMBER ONE THOUSAND
10E69 ; [*1ACC.0020.0002] # RUMI NUMBER TEN
10E6A ; [*1ACD.0020.0002] # RUMI NUMBER TWENTY
10E6B ; [*1ACE.0020.0002] # RUMI NUMBER THIRTY
10E6C ; [*1ACF.0020.0002] # RUMI NUMBER FORTY
10E6D ; [*1AD0.0020.0002] # RUMI NUMBER FIFTY
10E6E ; [*1AD1.0020.0002] # RUMI NUMBER SIXTY
10E6F ; [*1AD2.0020.0002] # RUMI NUMBER SEVENTY
10E70 ; [*1AD3.0020.0002] # RUMI NUMBER EIGHTY
10E71 ; [*1AD4.0020.0002] # RUMI NUMBER NINETY
10E72 ; [*1AD5.0020.0002] # RUMI NUMBER ONE HUNDRED
10E73 ; [*1AD6.0020.0002] # RUMI NUMBER TWO HUNDRED
10E74 ; [*1AD7.0020.0002] # RUMI NUMBER THREE HUNDRED
10E75 ; [*1AD8.0020.0002] # RUMI NUMBER FOUR HUNDRED
10E76 ; [*1AD9.0020.0002] # RUMI NUMBER FIVE HUNDRED
10E77 ; [*1ADA.0020.0002] # RUMI NUMBER SIX HUNDRED
10E78 ; [*1ADB.0020.0002] # RUMI NUMBER SEVEN HUNDRED
10E79 ; [*1ADC.0020.0002] # RUMI NUMBER EIGHT HUNDRED
10E7A ; [*1ADD.0020.0002] # RUMI NUMBER NINE HUNDRED
10E7B ; [*1ADE.0020.0002] # RUMI FRACTION ONE HALF
10E7C ; [*1ADF.0020.0002] # RUMI FRACTION ONE QUARTER
10E7D ; [*1AE0.0020.0002] # RUMI FRACTION ONE THIRD
10E7E ; [*1AE1.0020.0002] # RUMI FRACTION TWO THIRDS
11047 ; [*02AC.0020.0002] # BRAHMI DANDA
11048 ; [*02AD.0020.0002] # BRAHMI DOUBLE DANDA
11049 ; [*0433.0020.0002] # BRAHMI PUNCTUATION DOT
1104A ; [*0434.0020.0002] # BRAHMI PUNCTUATION DOUBLE DOT
1104B ; [*0435.0020.0002] # BRAHMI PUNCTUATION LINE
1104C ; [*0436.0020.0002] # BRAHMI PUNCTUATION CRESCENT BAR
1104D ; [*0437.0020.0002] # BRAHMI PUNCTUATION LOTUS
1105B ; [*1B73.0020.0002] # BRAHMI NUMBER TEN
1105C ; [*1B74.0020.0002] # BRAHMI NUMBER TWENTY
1105D ; [*1B75.0020.0002] # BRAHMI NUMBER THIRTY
1105E ; [*1B76.0020.0002] # BRAHMI NUMBER FORTY
1105F ; [*1B77.0020.0002] # BRAHMI NUMBER FIFTY
11060 ; [*1B78.0020.0002] # BRAHMI NUMBER SIXTY
11061 ; [*1B79.0020.0002] # BRAHMI NUMBER SEVENTY
11062 ; [*1B7A.0020.0002] # BRAHMI NUMBER EIGHTY
11063 ; [*1B7B.0020.0002] # BRAHMI NUMBER NINETY
11064 ; [*1B7C.0020.0002] # BRAHMI NUMBER ONE HUNDRED
11065 ; [*1B7D.0020.0002] # BRAHMI NUMBER ONE THOUSAND
110BB ; [*044E.0020.0002] # KAITHI ABBREVIATION SIGN
110BC ; [*044F.0020.0002] # KAITHI ENUMERATION SIGN
110BD ; [.0000.0000.0000] # KAITHI NUMBER SIGN
110BE ; [*02E0.0020.0002] # KAITHI SECTION MARK
110BF ; [*02E1.0020.0002] # KAITHI DOUBLE SECTION MARK
110C0 ; [*02AE.0020.0002] # KAITHI DANDA
110C1 ; [*02AF.0020.0002] # KAITHI DOUBLE DANDA
11140 ; [*02E2.0020.0002] # CHAKMA SECTION MARK
11141 ; [*02B0.0020.0002] # CHAKMA DANDA
11142 ; [*02B1.0020.0002] # CHAKMA DOUBLE DANDA
11143 ; [*0273.0020.0002] # CHAKMA QUESTION MARK
11174 ; [*0450.0020.0002] # MAHAJANI ABBREVIATION SIGN
11175 ; [*0451.0020.0002] # MAHAJANI SECTION MARK
111C5 ; [*02B2.0020.0002] # SHARADA DANDA
111C6 ; [*02B3.0020.0002] # SHARADA DOUBLE DANDA
111C7 ; [*0453.0020.0002] # SHARADA ABBREVIATION SIGN
111C8 ; [*02E3.0020.0002] # SHARADA SEPARATOR
111C9 ; [*0454.0020.0002] # SHARADA SANDHI MARK
111CD ; [*0452.0020.0002] # SHARADA SUTRA MARK
111DB ; [*0455.0020.0002] # SHARADA SIGN SIDDHAM
111DD ; [*0456.0020.0002] # SHARADA CONTINUATION SIGN
111DE ; [*02E4.0020.0002] # SHARADA SECTION MARK-1
111DF ; [*02E5.0020.0002] # SHARADA SECTION MARK-2
111EA ; [*1B8C.0020.0002] # SINHALA ARCHAIC NUMBER TEN
111EB ; [*1B8D.0020.0002] # SINHALA ARCHAIC NUMBER TWENTY
111EC ; [*1B8E.0020.0002] # SINHALA ARCHAIC NUMBER THIRTY
111ED ; [*1B8F.0020.0002] # SINHALA ARCHAIC NUMBER FORTY
111EE ; [*1B90.0020.0002] # SINHALA ARCHAIC NUMBER FIFTY
111EF ; [*1B91.0020.0002] # SINHALA ARCHAIC NUMBER SIXTY
111F0 ; [*1B92.0020.0002] # SINHALA ARCHAIC NUMBER SEVENTY
111F1 ; [*1B93.0020.0002] # SINHALA ARCHAIC NUMBER EIGHTY
111F2 ; [*1B94.0020.0002] # SINHALA ARCHAIC NUMBER NINETY
111F3 ; [*1B95.0020.0002] # SINHALA ARCHAIC NUMBER ONE HUNDRED
111F4 ; [*1B96.0020.0002] # SINHALA ARCHAIC NUMBER ONE THOUSAND
11238 ; [*02B4.0020.0002] # KHOJKI DANDA
11239 ; [*02B5.0020.0002] # KHOJKI DOUBLE DANDA
1123A ; [*0457.0020.0002] # KHOJKI WORD SEPARATOR
1123B ; [*0458.0020.0002] # KHOJKI SECTION MARK
1123C ; [*0459.0020.0002] # KHOJKI DOUBLE SECTION MARK
1123D ; [*045A.0020.0002] # KHOJKI ABBREVIATION SIGN
112A9 ; [*02E6.0020.0002] # MULTANI SECTION MARK
11366 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ZERO
11367 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ONE
11368 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT TWO
11369 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT THREE
1136A ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT FOUR
1136B ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT FIVE
1136C ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT SIX
11370 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER A
11371 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER KA
11372 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER NA
11373 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER VI
11374 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER PA
1144B ; [*02B6.0020.0002] # NEWA DANDA
1144C ; [*02B7.0020.0002] # NEWA DOUBLE DANDA
1144D ; [*045B.0020.0002] # NEWA COMMA
1144E ; [*045C.0020.0002] # NEWA GAP FILLER
1144F ; [*045D.0020.0002] # NEWA ABBREVIATION SIGN
1145B ; [*045E.0020.0002] # NEWA PLACEHOLDER MARK
1145D ; [*045F.0020.0002] # NEWA INSERTION SIGN
114C6 ; [*0460.0020.0002] # TIRHUTA ABBREVIATION SIGN
115C1 ; [*0461.0020.0002] # SIDDHAM SIGN SIDDHAM
115C2 ; [*02B8.0020.0002] # SIDDHAM DANDA
115C3 ; [*02B9.0020.0002] # SIDDHAM DOUBLE DANDA
115C4 ; [*0462.0020.0002] # SIDDHAM SEPARATOR DOT
115C5 ; [*0463.0020.0002] # SIDDHAM SEPARATOR BAR
115C6 ; [*0464.0020.0002] # SIDDHAM REPETITION MARK-1
115C7 ; [*0465.0020.0002] # SIDDHAM REPETITION MARK-2
115C8 ; [*0466.0020.0002] # SIDDHAM REPETITION MARK-3
115C9 ; [*0467.0020.0002] # SIDDHAM END OF TEXT MARK
115CA ; [*0468.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS
115CB ; [*0469.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS
115CC ; [*046A.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS
115CD ; [*046B.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS
115CE ; [*046C.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS
115CF ; [*046D.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING
115D0 ; [*046E.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING WITH RAYS
115D1 ; [*046F.0020.0002] # SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS
115D2 ; [*0470.0020.0002] # SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS
115D3 ; [*0471.0020.0002] # SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS
115D4 ; [*0472.0020.0002] # SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS
115D5 ; [*0473.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND RAYS
115D6 ; [*0474.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES
115D7 ; [*0475.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641 ; [*02BA.0020.0002] # MODI DANDA
11642 ; [*02BB.0020.0002] # MODI DOUBLE DANDA
11643 ; [*0476.0020.0002] # MODI ABBREVIATION SIGN
11660 ; [*03DA.0020.0002] # MONGOLIAN BIRGA WITH ORNAMENT
11661 ; [*03DB.0020.0002] # MONGOLIAN ROTATED BIRGA
11662 ; [*03DC.0020.0002] # MONGOLIAN DOUBLE BIRGA WITH ORNAMENT
11663 ; [*03DD.0020.0002] # MONGOLIAN TRIPLE BIRGA WITH ORNAMENT
11664 ; [*03DE.0020.0002] # MONGOLIAN BIRGA WITH DOUBLE ORNAMENT
11665 ; [*03DF.0020.0002] # MONGOLIAN ROTATED BIRGA WITH ORNAMENT
11666 ; [*03E0.0020.0002] # MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT
11667 ; [*03E1.0020.0002] # MONGOLIAN INVERTED BIRGA
11668 ; [*03E2.0020.0002] # MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT
11669 ; [*03E3.0020.0002] # MONGOLIAN SWIRL BIRGA
1166A ; [*03E4.0020.0002] # MONGOLIAN SWIRL BIRGA WITH ORNAMENT
1166B ; [*03E5.0020.0002] # MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT
1166C ; [*03E6.0020.0002] # MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
1173A ; [*1B71.0020.0002] # AHOM NUMBER TEN
1173B ; [*1B72.0020.0002] # AHOM NUMBER TWENTY
1173C ; [*02BC.0020.0002] # AHOM SIGN SMALL SECTION
1173D ; [*02BD.0020.0002] # AHOM SIGN SECTION
1173E ; [*02E7.0020.0002] # AHOM SIGN RULAI
1173F ; [*0550.0020.0002] # AHOM SYMBOL VI
118EA ; [*1B97.0020.0002] # WARANG CITI NUMBER TEN
118EB ; [*1B98.0020.0002] # WARANG CITI NUMBER TWENTY
118EC ; [*1B99.0020.0002] # WARANG CITI NUMBER THIRTY
118ED ; [*1B9A.0020.0002] # WARANG CITI NUMBER FORTY
118EE ; [*1B9B.0020.0002] # WARANG CITI NUMBER FIFTY
118EF ; [*1B9C.0020.0002] # WARANG CITI NUMBER SIXTY
118F0 ; [*1B9D.0020.0002] # WARANG CITI NUMBER SEVENTY
118F1 ; [*1B9E.0020.0002] # WARANG CITI NUMBER EIGHTY
118F2 ; [*1B9F.0020.0002] # WARANG CITI NUMBER NINETY
11C41 ; [*02BE.0020.0002] # BHAIKSUKI DANDA
11C42 ; [*02BF.0020.0002] # BHAIKSUKI DOUBLE DANDA
11C43 ; [*043F.0020.0002] # BHAIKSUKI WORD SEPARATOR
11C44 ; [*0440.0020.0002] # BHAIKSUKI GAP FILLER-1
11C45 ; [*0441.0020.0002] # BHAIKSUKI GAP FILLER-2
11C63 ; [*1B82.0020.0002] # BHAIKSUKI NUMBER TEN
11C64 ; [*1B83.0020.0002] # BHAIKSUKI NUMBER TWENTY
11C65 ; [*1B84.0020.0002] # BHAIKSUKI NUMBER THIRTY
11C66 ; [*1B85.0020.0002] # BHAIKSUKI NUMBER FORTY
11C67 ; [*1B86.0020.0002] # BHAIKSUKI NUMBER FIFTY
11C68 ; [*1B87.0020.0002] # BHAIKSUKI NUMBER SIXTY
11C69 ; [*1B88.0020.0002] # BHAIKSUKI NUMBER SEVENTY
11C6A ; [*1B89.0020.0002] # BHAIKSUKI NUMBER EIGHTY
11C6B ; [*1B8A.0020.0002] # BHAIKSUKI NUMBER NINETY
11C6C ; [*1B8B.0020.0002] # BHAIKSUKI HUNDREDS UNIT MARK
11C70 ; [*0409.0020.0002] # MARCHEN HEAD MARK
11C71 ; [*040A.0020.0002] # MARCHEN MARK SHAD
12432 ; [*1BDE.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH
12433 ; [*1BDF.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN
1245A ; [*1BE0.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD DISH
1245B ; [*1BE1.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS DISH
1245C ; [*1BE2.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH
1245D ; [*1BE3.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A
1245E ; [*1BE4.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A
1245F ; [*1BE5.0020.0002] # CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH
12460 ; [*1BE6.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER ASH
12461 ; [*1BE7.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH
12462 ; [*1BE8.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
12463 ; [*1BE9.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER GUR
12464 ; [*1BEA.0020.0002] # CUNEIFORM NUMERIC SIGN ONE HALF GUR
12465 ; [*1BEB.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD
12466 ; [*1BEC.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS
12467 ; [*1BED.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FORTY
12468 ; [*1BEE.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FIFTY
12470 ; [*0300.0020.0002] # CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER
12471 ; [*0301.0020.0002] # CUNEIFORM PUNCTUATION SIGN VERTICAL COLON
12472 ; [*0302.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON
12473 ; [*0303.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
12474 ; [*0304.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
16A6E ; [*02C0.0020.0002] # MRO DANDA
16A6F ; [*02C1.0020.0002] # MRO DOUBLE DANDA
16AF5 ; [*0288.0020.0002] # BASSA VAH FULL STOP
16B37 ; [*0477.0020.0002] # PAHAWH HMONG SIGN VOS THOM
16B38 ; [*0478.0020.0002] # PAHAWH HMONG SIGN VOS TSHAB CEEB
16B39 ; [*0479.0020.0002] # PAHAWH HMONG SIGN CIM CHEEM
16B3A ; [*047A.0020.0002] # PAHAWH HMONG SIGN VOS THIAB
16B3B ; [*047B.0020.0002] # PAHAWH HMONG SIGN VOS FEEM
16B3C ; [*0FD1.0020.0002] # PAHAWH HMONG SIGN XYEEM NTXIV
16B3D ; [*0FD2.0020.0002] # PAHAWH HMONG SIGN XYEEM RHO
16B3E ; [*0FD3.0020.0002] # PAHAWH HMONG SIGN XYEEM TOV
16B3F ; [*0FD4.0020.0002] # PAHAWH HMONG SIGN XYEEM FAIB
16B44 ; [*047C.0020.0002] # PAHAWH HMONG SIGN XAUS
16B45 ; [*0FD5.0020.0002] # PAHAWH HMONG SIGN CIM TSOV ROG
16B5B ; [*1BA0.0020.0002] # PAHAWH HMONG NUMBER TENS
16B5C ; [*1BA1.0020.0002] # PAHAWH HMONG NUMBER HUNDREDS
16B5D ; [*1BA2.0020.0002] # PAHAWH HMONG NUMBER TEN THOUSANDS
16B5E ; [*1BA3.0020.0002] # PAHAWH HMONG NUMBER MILLIONS
16B5F ; [*1BA4.0020.0002] # PAHAWH HMONG NUMBER HUNDRED MILLIONS
16B60 ; [*1BA5.0020.0002] # PAHAWH HMONG NUMBER TEN BILLIONS
16B61 ; [*1BA6.0020.0002] # PAHAWH HMONG NUMBER TRILLIONS
1BC9C ; [*11C6.0020.0002] # DUPLOYAN SIGN O WITH CROSS
1BC9F ; [*0289.0020.0002] # DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1D000 ; [*0FD6.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILI
1D001 ; [*0FD7.0020.0002] # BYZANTINE MUSICAL SYMBOL DASEIA
1D002 ; [*0FD8.0020.0002] # BYZANTINE MUSICAL SYMBOL PERISPOMENI
1D003 ; [*0FD9.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
1D004 ; [*0FDA.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
1D005 ; [*0FDB.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
1D006 ; [*0FDC.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
1D007 ; [*0FDD.0020.0002] # BYZANTINE MUSICAL SYMBOL KATHISTI
1D008 ; [*0FDE.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMATIKI
1D009 ; [*0FDF.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI
1D00A ; [*0FE0.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS
1D00B ; [*0FE1.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
1D00C ; [*0FE2.0020.0002] # BYZANTINE MUSICAL SYMBOL KREMASTI
1D00D ; [*0FE3.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
1D00E ; [*0FE4.0020.0002] # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
1D00F ; [*0FE5.0020.0002] # BYZANTINE MUSICAL SYMBOL TELEIA
1D010 ; [*0FE6.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA
1D011 ; [*0FE7.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS
1D012 ; [*0FE8.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
1D013 ; [*0FE9.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNEVMA
1D014 ; [*0FEA.0020.0002] # BYZANTINE MUSICAL SYMBOL THITA
1D015 ; [*0FEB.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
1D016 ; [*0FEC.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
1D017 ; [*0FED.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILON
1D018 ; [*0FEE.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILON
1D019 ; [*0FEF.0020.0002] # BYZANTINE MUSICAL SYMBOL VATHY
1D01A ; [*0FF0.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON ARCHAION
1D01B ; [*0FF1.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
1D01C ; [*0FF2.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
1D01D ; [*0FF3.0020.0002] # BYZANTINE MUSICAL SYMBOL SAXIMATA
1D01E ; [*0FF4.0020.0002] # BYZANTINE MUSICAL SYMBOL PARICHON
1D01F ; [*0FF5.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
1D020 ; [*0FF6.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
1D021 ; [*0FF7.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
1D022 ; [*0FF8.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
1D023 ; [*0FF9.0020.0002] # BYZANTINE MUSICAL SYMBOL APOTHEMA
1D024 ; [*0FFA.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA
1D025 ; [*0FFB.0020.0002] # BYZANTINE MUSICAL SYMBOL REVMA
1D026 ; [*0FFC.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
1D027 ; [*0FFD.0020.0002] # BYZANTINE MUSICAL SYMBOL TINAGMA
1D028 ; [*0FFE.0020.0002] # BYZANTINE MUSICAL SYMBOL ANATRICHISMA
1D029 ; [*0FFF.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA
1D02A ; [*1000.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
1D02B ; [*1001.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
1D02C ; [*1002.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
1D02D ; [*1003.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA
1D02E ; [*1004.0020.0002] # BYZANTINE MUSICAL SYMBOL LEMOI
1D02F ; [*1005.0020.0002] # BYZANTINE MUSICAL SYMBOL DYO
1D030 ; [*1006.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIA
1D031 ; [*1007.0020.0002] # BYZANTINE MUSICAL SYMBOL TESSERA
1D032 ; [*1008.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMATA
1D033 ; [*1009.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EXO NEO
1D034 ; [*100A.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
1D035 ; [*100B.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORA
1D036 ; [*100C.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
1D037 ; [*100D.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
1D038 ; [*100E.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON
1D039 ; [*100F.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON
1D03A ; [*1010.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA
1D03B ; [*1011.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
1D03C ; [*1012.0020.0002] # BYZANTINE MUSICAL SYMBOL RAPISMA
1D03D ; [*1013.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
1D03E ; [*1014.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
1D03F ; [*1015.0020.0002] # BYZANTINE MUSICAL SYMBOL ICHADIN
1D040 ; [*1016.0020.0002] # BYZANTINE MUSICAL SYMBOL NANA
1D041 ; [*1017.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASMA
1D042 ; [*1018.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
1D043 ; [*1019.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
1D044 ; [*101A.0020.0002] # BYZANTINE MUSICAL SYMBOL STRAGGISMATA
1D045 ; [*101B.0020.0002] # BYZANTINE MUSICAL SYMBOL GRONTHISMATA
1D046 ; [*101C.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON NEO
1D047 ; [*101D.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON NEO
1D048 ; [*101E.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA NEO
1D049 ; [*101F.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTI
1D04A ; [*1020.0020.0002] # BYZANTINE MUSICAL SYMBOL KOUFISMA
1D04B ; [*1021.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
1D04C ; [*1022.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
1D04D ; [*1023.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON NEO
1D04E ; [*1024.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
1D04F ; [*1025.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
1D050 ; [*1026.0020.0002] # BYZANTINE MUSICAL SYMBOL YPSILI
1D051 ; [*1027.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
1D052 ; [*1028.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
1D053 ; [*1029.0020.0002] # BYZANTINE MUSICAL SYMBOL YPORROI
1D054 ; [*102A.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
1D055 ; [*102B.0020.0002] # BYZANTINE MUSICAL SYMBOL ELAFRON
1D056 ; [*102C.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILI
1D057 ; [*102D.0020.0002] # BYZANTINE MUSICAL SYMBOL MIKRON ISON
1D058 ; [*102E.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA NEO
1D059 ; [*102F.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA NEO
1D05A ; [*1030.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
1D05B ; [*1031.0020.0002] # BYZANTINE MUSICAL SYMBOL OMALON
1D05C ; [*1032.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOMA
1D05D ; [*1033.0020.0002] # BYZANTINE MUSICAL SYMBOL LYGISMA
1D05E ; [*1034.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
1D05F ; [*1035.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
1D060 ; [*1036.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
1D061 ; [*1037.0020.0002] # BYZANTINE MUSICAL SYMBOL KYLISMA
1D062 ; [*1038.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
1D063 ; [*1039.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON NEO
1D064 ; [*103A.0020.0002] # BYZANTINE MUSICAL SYMBOL EKSTREPTON
1D065 ; [*103B.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
1D066 ; [*103C.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMA
1D067 ; [*103D.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
1D068 ; [*103E.0020.0002] # BYZANTINE MUSICAL SYMBOL EPEGERMA
1D069 ; [*103F.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA NEO
1D06A ; [*1040.0020.0002] # BYZANTINE MUSICAL SYMBOL XIRON KLASMA
1D06B ; [*1041.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
1D06C ; [*1042.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
1D06D ; [*1043.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
1D06E ; [*1044.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
1D06F ; [*1045.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
1D070 ; [*1046.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
1D071 ; [*1047.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
1D072 ; [*1048.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
1D073 ; [*1049.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
1D074 ; [*104A.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
1D075 ; [*104B.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
1D076 ; [*104C.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
1D077 ; [*104D.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
1D078 ; [*104E.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA APLOUN
1D079 ; [*104F.0020.0002] # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
1D07A ; [*1050.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVASMA
1D07B ; [*1051.0020.0002] # BYZANTINE MUSICAL SYMBOL ENDOFONON
1D07C ; [*1052.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN KATO
1D07D ; [*1053.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN ANO
1D07E ; [*1054.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS
1D07F ; [*1055.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA ANO
1D080 ; [*1056.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
1D081 ; [*1057.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
1D082 ; [*1058.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
1D083 ; [*1059.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA NEO
1D084 ; [*105A.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA NEO
1D085 ; [*105B.0020.0002] # BYZANTINE MUSICAL SYMBOL APLI
1D086 ; [*105C.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI
1D087 ; [*105D.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIPLI
1D088 ; [*105E.0020.0002] # BYZANTINE MUSICAL SYMBOL TETRAPLI
1D089 ; [*105F.0020.0002] # BYZANTINE MUSICAL SYMBOL KORONIS
1D08A ; [*1060.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
1D08B ; [*1061.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
1D08C ; [*1062.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
1D08D ; [*1063.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
1D08E ; [*1064.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
1D08F ; [*1065.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
1D090 ; [*1066.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
1D091 ; [*1067.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
1D092 ; [*1068.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON
1D093 ; [*1069.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
1D094 ; [*106A.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
1D095 ; [*106B.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
1D096 ; [*106C.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIGORGON
1D097 ; [*106D.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGON
1D098 ; [*106E.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIDIARGON
1D099 ; [*106F.0020.0002] # BYZANTINE MUSICAL SYMBOL DIARGON
1D09A ; [*1070.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
1D09B ; [*1071.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
1D09C ; [*1072.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGI
1D09D ; [*1073.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI METRIA
1D09E ; [*1074.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI MESI
1D09F ; [*1075.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGI
1D0A0 ; [*1076.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
1D0A1 ; [*1077.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
1D0A2 ; [*1078.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
1D0A3 ; [*1079.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
1D0A4 ; [*107A.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
1D0A5 ; [*107B.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
1D0A6 ; [*107C.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
1D0A7 ; [*107D.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
1D0A8 ; [*107E.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
1D0A9 ; [*107F.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
1D0AA ; [*1080.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
1D0AB ; [*1081.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
1D0AC ; [*1082.0020.0002] # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
1D0AD ; [*1083.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
1D0AE ; [*1084.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
1D0AF ; [*1085.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
1D0B0 ; [*1086.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
1D0B1 ; [*1087.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
1D0B2 ; [*1088.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
1D0B3 ; [*1089.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
1D0B4 ; [*108A.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
1D0B5 ; [*108B.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
1D0B6 ; [*108C.0020.0002] # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
1D0B7 ; [*108D.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFONON
1D0B8 ; [*108E.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORON
1D0B9 ; [*108F.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
1D0BA ; [*1090.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
1D0BB ; [*1091.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
1D0BC ; [*1092.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
1D0BD ; [*1093.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
1D0BE ; [*1094.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
1D0BF ; [*1095.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
1D0C0 ; [*1096.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
1D0C1 ; [*1097.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
1D0C2 ; [*1098.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
1D0C3 ; [*1099.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
1D0C4 ; [*109A.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
1D0C5 ; [*109B.0020.0002] # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
1D0C6 ; [*109C.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
1D0C7 ; [*109D.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NENANO
1D0C8 ; [*109E.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
1D0C9 ; [*109F.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA KLITON
1D0CA ; [*10A0.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA SPATHI
1D0CB ; [*10A1.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
1D0CC ; [*10A2.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
1D0CD ; [*10A3.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
1D0CE ; [*10A4.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
1D0CF ; [*10A5.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
1D0D0 ; [*10A6.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
1D0D1 ; [*10A7.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
1D0D2 ; [*10A8.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
1D0D3 ; [*10A9.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
1D0D4 ; [*10AA.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
1D0D5 ; [*10AB.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
1D0D6 ; [*10AC.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
1D0D7 ; [*10AD.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
1D0D8 ; [*10AE.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
1D0D9 ; [*10AF.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
1D0DA ; [*10B0.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
1D0DB ; [*10B1.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
1D0DC ; [*10B2.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
1D0DD ; [*10B3.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
1D0DE ; [*10B4.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
1D0DF ; [*10B5.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
1D0E0 ; [*10B6.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
1D0E1 ; [*10B7.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
1D0E2 ; [*10B8.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
1D0E3 ; [*10B9.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
1D0E4 ; [*10BA.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
1D0E5 ; [*10BB.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
1D0E6 ; [*10BC.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
1D0E7 ; [*10BD.0020.0002] # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
1D0E8 ; [*10BE.0020.0002] # BYZANTINE MUSICAL SYMBOL STIGMA
1D0E9 ; [*10BF.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO PA
1D0EA ; [*10C0.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
1D0EB ; [*10C1.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO GA
1D0EC ; [*10C2.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO DI
1D0ED ; [*10C3.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO KE
1D0EE ; [*10C4.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
1D0EF ; [*10C5.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO NI
1D0F0 ; [*10C6.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
1D0F1 ; [*10C7.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
1D0F2 ; [*10C8.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
1D0F3 ; [*10C9.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
1D0F4 ; [*10CA.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA KATO
1D0F5 ; [*10CB.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
1D100 ; [*10CC.0020.0002] # MUSICAL SYMBOL SINGLE BARLINE
1D101 ; [*10CD.0020.0002] # MUSICAL SYMBOL DOUBLE BARLINE
1D102 ; [*10CE.0020.0002] # MUSICAL SYMBOL FINAL BARLINE
1D103 ; [*10CF.0020.0002] # MUSICAL SYMBOL REVERSE FINAL BARLINE
1D104 ; [*10D0.0020.0002] # MUSICAL SYMBOL DASHED BARLINE
1D105 ; [*10D1.0020.0002] # MUSICAL SYMBOL SHORT BARLINE
1D106 ; [*10D2.0020.0002] # MUSICAL SYMBOL LEFT REPEAT SIGN
1D107 ; [*10D3.0020.0002] # MUSICAL SYMBOL RIGHT REPEAT SIGN
1D108 ; [*10D4.0020.0002] # MUSICAL SYMBOL REPEAT DOTS
1D109 ; [*10D5.0020.0002] # MUSICAL SYMBOL DAL SEGNO
1D10A ; [*10D6.0020.0002] # MUSICAL SYMBOL DA CAPO
1D10B ; [*10D7.0020.0002] # MUSICAL SYMBOL SEGNO
1D10C ; [*10D8.0020.0002] # MUSICAL SYMBOL CODA
1D10D ; [*10D9.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-1
1D10E ; [*10DA.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-2
1D10F ; [*10DB.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-3
1D110 ; [*10DC.0020.0002] # MUSICAL SYMBOL FERMATA
1D111 ; [*10DD.0020.0002] # MUSICAL SYMBOL FERMATA BELOW
1D112 ; [*10DE.0020.0002] # MUSICAL SYMBOL BREATH MARK
1D113 ; [*10DF.0020.0002] # MUSICAL SYMBOL CAESURA
1D114 ; [*10E0.0020.0002] # MUSICAL SYMBOL BRACE
1D115 ; [*10E1.0020.0002] # MUSICAL SYMBOL BRACKET
1D116 ; [*10E2.0020.0002] # MUSICAL SYMBOL ONE-LINE STAFF
1D117 ; [*10E3.0020.0002] # MUSICAL SYMBOL TWO-LINE STAFF
1D118 ; [*10E4.0020.0002] # MUSICAL SYMBOL THREE-LINE STAFF
1D119 ; [*10E5.0020.0002] # MUSICAL SYMBOL FOUR-LINE STAFF
1D11A ; [*10E6.0020.0002] # MUSICAL SYMBOL FIVE-LINE STAFF
1D11B ; [*10E7.0020.0002] # MUSICAL SYMBOL SIX-LINE STAFF
1D11C ; [*10E8.0020.0002] # MUSICAL SYMBOL SIX-STRING FRETBOARD
1D11D ; [*10E9.0020.0002] # MUSICAL SYMBOL FOUR-STRING FRETBOARD
1D11E ; [*10EA.0020.0002] # MUSICAL SYMBOL G CLEF
1D11F ; [*10EB.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA ALTA
1D120 ; [*10EC.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA BASSA
1D121 ; [*10ED.0020.0002] # MUSICAL SYMBOL C CLEF
1D122 ; [*10EE.0020.0002] # MUSICAL SYMBOL F CLEF
1D123 ; [*10EF.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA ALTA
1D124 ; [*10F0.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA BASSA
1D125 ; [*10F1.0020.0002] # MUSICAL SYMBOL DRUM CLEF-1
1D126 ; [*10F2.0020.0002] # MUSICAL SYMBOL DRUM CLEF-2
1D129 ; [*1106.0020.0002] # MUSICAL SYMBOL MULTIPLE MEASURE REST
1D12A ; [*10F6.0020.0002] # MUSICAL SYMBOL DOUBLE SHARP
1D12B ; [*10F7.0020.0002] # MUSICAL SYMBOL DOUBLE FLAT
1D12C ; [*10F8.0020.0002] # MUSICAL SYMBOL FLAT UP
1D12D ; [*10F9.0020.0002] # MUSICAL SYMBOL FLAT DOWN
1D12E ; [*10FA.0020.0002] # MUSICAL SYMBOL NATURAL UP
1D12F ; [*10FB.0020.0002] # MUSICAL SYMBOL NATURAL DOWN
1D130 ; [*10FC.0020.0002] # MUSICAL SYMBOL SHARP UP
1D131 ; [*10FD.0020.0002] # MUSICAL SYMBOL SHARP DOWN
1D132 ; [*10FE.0020.0002] # MUSICAL SYMBOL QUARTER TONE SHARP
1D133 ; [*10FF.0020.0002] # MUSICAL SYMBOL QUARTER TONE FLAT
1D134 ; [*1100.0020.0002] # MUSICAL SYMBOL COMMON TIME
1D135 ; [*1101.0020.0002] # MUSICAL SYMBOL CUT TIME
1D136 ; [*1102.0020.0002] # MUSICAL SYMBOL OTTAVA ALTA
1D137 ; [*1103.0020.0002] # MUSICAL SYMBOL OTTAVA BASSA
1D138 ; [*1104.0020.0002] # MUSICAL SYMBOL QUINDICESIMA ALTA
1D139 ; [*1105.0020.0002] # MUSICAL SYMBOL QUINDICESIMA BASSA
1D13A ; [*1107.0020.0002] # MUSICAL SYMBOL MULTI REST
1D13B ; [*1108.0020.0002] # MUSICAL SYMBOL WHOLE REST
1D13C ; [*1109.0020.0002] # MUSICAL SYMBOL HALF REST
1D13D ; [*110A.0020.0002] # MUSICAL SYMBOL QUARTER REST
1D13E ; [*110B.0020.0002] # MUSICAL SYMBOL EIGHTH REST
1D13F ; [*110C.0020.0002] # MUSICAL SYMBOL SIXTEENTH REST
1D140 ; [*110D.0020.0002] # MUSICAL SYMBOL THIRTY-SECOND REST
1D141 ; [*110E.0020.0002] # MUSICAL SYMBOL SIXTY-FOURTH REST
1D142 ; [*110F.0020.0002] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
1D143 ; [*1110.0020.0002] # MUSICAL SYMBOL X NOTEHEAD
1D144 ; [*1111.0020.0002] # MUSICAL SYMBOL PLUS NOTEHEAD
1D145 ; [*1112.0020.0002] # MUSICAL SYMBOL CIRCLE X NOTEHEAD
1D146 ; [*1113.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
1D147 ; [*1114.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
1D148 ; [*1115.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
1D149 ; [*1116.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
1D14A ; [*1117.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
1D14B ; [*1118.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
1D14C ; [*1119.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
1D14D ; [*111A.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
1D14E ; [*111B.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
1D14F ; [*111C.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
1D150 ; [*111D.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
1D151 ; [*111E.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
1D152 ; [*111F.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD WHITE
1D153 ; [*1120.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD BLACK
1D154 ; [*1121.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
1D155 ; [*1122.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
1D156 ; [*1123.0020.0002] # MUSICAL SYMBOL PARENTHESIS NOTEHEAD
1D157 ; [*1124.0020.0002] # MUSICAL SYMBOL VOID NOTEHEAD
1D158 ; [*1125.0020.0002] # MUSICAL SYMBOL NOTEHEAD BLACK
1D159 ; [*1126.0020.0002] # MUSICAL SYMBOL NULL NOTEHEAD
1D15A ; [*1127.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
1D15B ; [*1128.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
1D15C ; [*1129.0020.0002] # MUSICAL SYMBOL BREVE
1D15D ; [*112A.0020.0002] # MUSICAL SYMBOL WHOLE NOTE
1D15E ; [*1124.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL HALF NOTE
1D15F ; [*1125.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL QUARTER NOTE
1D160 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL EIGHTH NOTE
1D161 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTEENTH NOTE
1D162 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL THIRTY-SECOND NOTE
1D163 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTY-FOURTH NOTE
1D164 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
1D165 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STEM
1D166 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
1D167 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-1
1D168 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-2
1D169 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-3
1D16A ; [*112B.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-1
1D16B ; [*112C.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-2
1D16C ; [*112D.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-3
1D16D ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING AUGMENTATION DOT
1D16E ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-1
1D16F ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-2
1D170 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-3
1D171 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-4
1D172 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-5
1D17B ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING ACCENT
1D17C ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STACCATO
1D17D ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TENUTO
1D17E ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STACCATISSIMO
1D17F ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING MARCATO
1D180 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING MARCATO-STACCATO
1D181 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING ACCENT-STACCATO
1D182 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING LOURE
1D183 ; [*112E.0020.0002] # MUSICAL SYMBOL ARPEGGIATO UP
1D184 ; [*112F.0020.0002] # MUSICAL SYMBOL ARPEGGIATO DOWN
1D185 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOIT
1D186 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING RIP
1D187 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLIP
1D188 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SMEAR
1D189 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING BEND
1D18A ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOUBLE TONGUE
1D18B ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1D18C ; [*1130.0020.0002] # MUSICAL SYMBOL RINFORZANDO
1D18D ; [*1131.0020.0002] # MUSICAL SYMBOL SUBITO
1D18E ; [*1132.0020.0002] # MUSICAL SYMBOL Z
1D18F ; [*1133.0020.0002] # MUSICAL SYMBOL PIANO
1D190 ; [*1134.0020.0002] # MUSICAL SYMBOL MEZZO
1D191 ; [*1135.0020.0002] # MUSICAL SYMBOL FORTE
1D192 ; [*1136.0020.0002] # MUSICAL SYMBOL CRESCENDO
1D193 ; [*1137.0020.0002] # MUSICAL SYMBOL DECRESCENDO
1D194 ; [*1138.0020.0002] # MUSICAL SYMBOL GRACE NOTE SLASH
1D195 ; [*1139.0020.0002] # MUSICAL SYMBOL GRACE NOTE NO SLASH
1D196 ; [*113A.0020.0002] # MUSICAL SYMBOL TR
1D197 ; [*113B.0020.0002] # MUSICAL SYMBOL TURN
1D198 ; [*113C.0020.0002] # MUSICAL SYMBOL INVERTED TURN
1D199 ; [*113D.0020.0002] # MUSICAL SYMBOL TURN SLASH
1D19A ; [*113E.0020.0002] # MUSICAL SYMBOL TURN UP
1D19B ; [*113F.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-1
1D19C ; [*1140.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-2
1D19D ; [*1141.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-3
1D19E ; [*1142.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-4
1D19F ; [*1143.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-5
1D1A0 ; [*1144.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-6
1D1A1 ; [*1145.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-7
1D1A2 ; [*1146.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-8
1D1A3 ; [*1147.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-9
1D1A4 ; [*1148.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-10
1D1A5 ; [*1149.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-11
1D1A6 ; [*114A.0020.0002] # MUSICAL SYMBOL HAUPTSTIMME
1D1A7 ; [*114B.0020.0002] # MUSICAL SYMBOL NEBENSTIMME
1D1A8 ; [*114C.0020.0002] # MUSICAL SYMBOL END OF STIMME
1D1A9 ; [*114D.0020.0002] # MUSICAL SYMBOL DEGREE SLASH
1D1AA ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOWN BOW
1D1AB ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING UP BOW
1D1AC ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING HARMONIC
1D1AD ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SNAP PIZZICATO
1D1AE ; [*114E.0020.0002] # MUSICAL SYMBOL PEDAL MARK
1D1AF ; [*114F.0020.0002] # MUSICAL SYMBOL PEDAL UP MARK
1D1B0 ; [*1150.0020.0002] # MUSICAL SYMBOL HALF PEDAL MARK
1D1B1 ; [*1151.0020.0002] # MUSICAL SYMBOL GLISSANDO UP
1D1B2 ; [*1152.0020.0002] # MUSICAL SYMBOL GLISSANDO DOWN
1D1B3 ; [*1153.0020.0002] # MUSICAL SYMBOL WITH FINGERNAILS
1D1B4 ; [*1154.0020.0002] # MUSICAL SYMBOL DAMP
1D1B5 ; [*1155.0020.0002] # MUSICAL SYMBOL DAMP ALL
1D1B6 ; [*1156.0020.0002] # MUSICAL SYMBOL MAXIMA
1D1B7 ; [*1157.0020.0002] # MUSICAL SYMBOL LONGA
1D1B8 ; [*1158.0020.0002] # MUSICAL SYMBOL BREVIS
1D1B9 ; [*1159.0020.0002] # MUSICAL SYMBOL SEMIBREVIS WHITE
1D1BA ; [*115A.0020.0002] # MUSICAL SYMBOL SEMIBREVIS BLACK
1D1BB ; [*1159.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA
1D1BC ; [*115A.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA BLACK
1D1BD ; [*1159.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA WHITE
1D1BE ; [*115A.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA BLACK
1D1BF ; [*1159.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA WHITE
1D1C0 ; [*115A.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA BLACK
1D1C1 ; [*115B.0020.0002] # MUSICAL SYMBOL LONGA PERFECTA REST
1D1C2 ; [*115C.0020.0002] # MUSICAL SYMBOL LONGA IMPERFECTA REST
1D1C3 ; [*115D.0020.0002] # MUSICAL SYMBOL BREVIS REST
1D1C4 ; [*115E.0020.0002] # MUSICAL SYMBOL SEMIBREVIS REST
1D1C5 ; [*115F.0020.0002] # MUSICAL SYMBOL MINIMA REST
1D1C6 ; [*1160.0020.0002] # MUSICAL SYMBOL SEMIMINIMA REST
1D1C7 ; [*1161.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
1D1C8 ; [*1162.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
1D1C9 ; [*1163.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
1D1CA ; [*1164.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
1D1CB ; [*1165.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
1D1CC ; [*1166.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
1D1CD ; [*1167.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
1D1CE ; [*1168.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
1D1CF ; [*1169.0020.0002] # MUSICAL SYMBOL CROIX
1D1D0 ; [*116A.0020.0002] # MUSICAL SYMBOL GREGORIAN C CLEF
1D1D1 ; [*116B.0020.0002] # MUSICAL SYMBOL GREGORIAN F CLEF
1D1D2 ; [*116C.0020.0002] # MUSICAL SYMBOL SQUARE B
1D1D3 ; [*116D.0020.0002] # MUSICAL SYMBOL VIRGA
1D1D4 ; [*116E.0020.0002] # MUSICAL SYMBOL PODATUS
1D1D5 ; [*116F.0020.0002] # MUSICAL SYMBOL CLIVIS
1D1D6 ; [*1170.0020.0002] # MUSICAL SYMBOL SCANDICUS
1D1D7 ; [*1171.0020.0002] # MUSICAL SYMBOL CLIMACUS
1D1D8 ; [*1172.0020.0002] # MUSICAL SYMBOL TORCULUS
1D1D9 ; [*1173.0020.0002] # MUSICAL SYMBOL PORRECTUS
1D1DA ; [*1174.0020.0002] # MUSICAL SYMBOL PORRECTUS FLEXUS
1D1DB ; [*1175.0020.0002] # MUSICAL SYMBOL SCANDICUS FLEXUS
1D1DC ; [*1176.0020.0002] # MUSICAL SYMBOL TORCULUS RESUPINUS
1D1DD ; [*1177.0020.0002] # MUSICAL SYMBOL PES SUBPUNCTIS
1D1DE ; [*1178.0020.0002] # MUSICAL SYMBOL KIEVAN C CLEF
1D1DF ; [*1179.0020.0002] # MUSICAL SYMBOL KIEVAN END OF PIECE
1D1E0 ; [*117A.0020.0002] # MUSICAL SYMBOL KIEVAN FINAL NOTE
1D1E1 ; [*117B.0020.0002] # MUSICAL SYMBOL KIEVAN RECITATIVE MARK
1D1E2 ; [*117C.0020.0002] # MUSICAL SYMBOL KIEVAN WHOLE NOTE
1D1E3 ; [*117D.0020.0002] # MUSICAL SYMBOL KIEVAN HALF NOTE
1D1E4 ; [*117E.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN
1D1E5 ; [*117F.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP
1D1E6 ; [*1180.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN
1D1E7 ; [*1181.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP
1D1E8 ; [*1182.0020.0002] # MUSICAL SYMBOL KIEVAN FLAT SIGN
1D200 ; [*1183.0020.0002] # GREEK VOCAL NOTATION SYMBOL-1
1D201 ; [*1184.0020.0002] # GREEK VOCAL NOTATION SYMBOL-2
1D202 ; [*1185.0020.0002] # GREEK VOCAL NOTATION SYMBOL-3
1D203 ; [*1186.0020.0002] # GREEK VOCAL NOTATION SYMBOL-4
1D204 ; [*1187.0020.0002] # GREEK VOCAL NOTATION SYMBOL-5
1D205 ; [*1188.0020.0002] # GREEK VOCAL NOTATION SYMBOL-6
1D206 ; [*1189.0020.0002] # GREEK VOCAL NOTATION SYMBOL-7
1D207 ; [*118A.0020.0002] # GREEK VOCAL NOTATION SYMBOL-8
1D208 ; [*118B.0020.0002] # GREEK VOCAL NOTATION SYMBOL-9
1D209 ; [*118C.0020.0002] # GREEK VOCAL NOTATION SYMBOL-10
1D20A ; [*118D.0020.0002] # GREEK VOCAL NOTATION SYMBOL-11
1D20B ; [*118E.0020.0002] # GREEK VOCAL NOTATION SYMBOL-12
1D20C ; [*118F.0020.0002] # GREEK VOCAL NOTATION SYMBOL-13
1D20D ; [*1190.0020.0002] # GREEK VOCAL NOTATION SYMBOL-14
1D20E ; [*1191.0020.0002] # GREEK VOCAL NOTATION SYMBOL-15
1D20F ; [*1192.0020.0002] # GREEK VOCAL NOTATION SYMBOL-16
1D210 ; [*1193.0020.0002] # GREEK VOCAL NOTATION SYMBOL-17
1D211 ; [*1194.0020.0002] # GREEK VOCAL NOTATION SYMBOL-18
1D212 ; [*1195.0020.0002] # GREEK VOCAL NOTATION SYMBOL-19
1D213 ; [*1196.0020.0002] # GREEK VOCAL NOTATION SYMBOL-20
1D214 ; [*1197.0020.0002] # GREEK VOCAL NOTATION SYMBOL-21
1D215 ; [*1198.0020.0002] # GREEK VOCAL NOTATION SYMBOL-22
1D216 ; [*1199.0020.0002] # GREEK VOCAL NOTATION SYMBOL-23
1D217 ; [*119A.0020.0002] # GREEK VOCAL NOTATION SYMBOL-24
1D218 ; [*119B.0020.0002] # GREEK VOCAL NOTATION SYMBOL-50
1D219 ; [*119C.0020.0002] # GREEK VOCAL NOTATION SYMBOL-51
1D21A ; [*119D.0020.0002] # GREEK VOCAL NOTATION SYMBOL-52
1D21B ; [*119E.0020.0002] # GREEK VOCAL NOTATION SYMBOL-53
1D21C ; [*119F.0020.0002] # GREEK VOCAL NOTATION SYMBOL-54
1D21D ; [*11A0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-1
1D21E ; [*11A1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-2
1D21F ; [*11A2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-4
1D220 ; [*11A3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-5
1D221 ; [*11A4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-7
1D222 ; [*11A5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-8
1D223 ; [*11A6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-11
1D224 ; [*11A7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-12
1D225 ; [*11A8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-13
1D226 ; [*11A9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-14
1D227 ; [*11AA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-17
1D228 ; [*11AB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-18
1D229 ; [*11AC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-19
1D22A ; [*11AD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-23
1D22B ; [*11AE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-24
1D22C ; [*11AF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-25
1D22D ; [*11B0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-26
1D22E ; [*11B1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-27
1D22F ; [*11B2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-29
1D230 ; [*11B3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-30
1D231 ; [*11B4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-32
1D232 ; [*11B5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-36
1D233 ; [*11B6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-37
1D234 ; [*11B7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-38
1D235 ; [*11B8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-39
1D236 ; [*11B9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-40
1D237 ; [*11BA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-42
1D238 ; [*11BB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-43
1D239 ; [*11BC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-45
1D23A ; [*11BD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-47
1D23B ; [*11BE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-48
1D23C ; [*11BF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-49
1D23D ; [*11C0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-50
1D23E ; [*11C1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-51
1D23F ; [*11C2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-52
1D240 ; [*11C3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-53
1D241 ; [*11C4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-54
1D242 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TRISEME
1D243 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TETRASEME
1D244 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL PENTASEME
1D245 ; [*11C5.0020.0002] # GREEK MUSICAL LEIMMA
1D300 ; [*0EEA.0020.0002] # MONOGRAM FOR EARTH
1D301 ; [*0EEB.0020.0002] # DIGRAM FOR HEAVENLY EARTH
1D302 ; [*0EEC.0020.0002] # DIGRAM FOR HUMAN EARTH
1D303 ; [*0EED.0020.0002] # DIGRAM FOR EARTHLY HEAVEN
1D304 ; [*0EEE.0020.0002] # DIGRAM FOR EARTHLY HUMAN
1D305 ; [*0EEF.0020.0002] # DIGRAM FOR EARTH
1D306 ; [*0EF0.0020.0002] # TETRAGRAM FOR CENTRE
1D307 ; [*0EF1.0020.0002] # TETRAGRAM FOR FULL CIRCLE
1D308 ; [*0EF2.0020.0002] # TETRAGRAM FOR MIRED
1D309 ; [*0EF3.0020.0002] # TETRAGRAM FOR BARRIER
1D30A ; [*0EF4.0020.0002] # TETRAGRAM FOR KEEPING SMALL
1D30B ; [*0EF5.0020.0002] # TETRAGRAM FOR CONTRARIETY
1D30C ; [*0EF6.0020.0002] # TETRAGRAM FOR ASCENT
1D30D ; [*0EF7.0020.0002] # TETRAGRAM FOR OPPOSITION
1D30E ; [*0EF8.0020.0002] # TETRAGRAM FOR BRANCHING OUT
1D30F ; [*0EF9.0020.0002] # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION
1D310 ; [*0EFA.0020.0002] # TETRAGRAM FOR DIVERGENCE
1D311 ; [*0EFB.0020.0002] # TETRAGRAM FOR YOUTHFULNESS
1D312 ; [*0EFC.0020.0002] # TETRAGRAM FOR INCREASE
1D313 ; [*0EFD.0020.0002] # TETRAGRAM FOR PENETRATION
1D314 ; [*0EFE.0020.0002] # TETRAGRAM FOR REACH
1D315 ; [*0EFF.0020.0002] # TETRAGRAM FOR CONTACT
1D316 ; [*0F00.0020.0002] # TETRAGRAM FOR HOLDING BACK
1D317 ; [*0F01.0020.0002] # TETRAGRAM FOR WAITING
1D318 ; [*0F02.0020.0002] # TETRAGRAM FOR FOLLOWING
1D319 ; [*0F03.0020.0002] # TETRAGRAM FOR ADVANCE
1D31A ; [*0F04.0020.0002] # TETRAGRAM FOR RELEASE
1D31B ; [*0F05.0020.0002] # TETRAGRAM FOR RESISTANCE
1D31C ; [*0F06.0020.0002] # TETRAGRAM FOR EASE
1D31D ; [*0F07.0020.0002] # TETRAGRAM FOR JOY
1D31E ; [*0F08.0020.0002] # TETRAGRAM FOR CONTENTION
1D31F ; [*0F09.0020.0002] # TETRAGRAM FOR ENDEAVOUR
1D320 ; [*0F0A.0020.0002] # TETRAGRAM FOR DUTIES
1D321 ; [*0F0B.0020.0002] # TETRAGRAM FOR CHANGE
1D322 ; [*0F0C.0020.0002] # TETRAGRAM FOR DECISIVENESS
1D323 ; [*0F0D.0020.0002] # TETRAGRAM FOR BOLD RESOLUTION
1D324 ; [*0F0E.0020.0002] # TETRAGRAM FOR PACKING
1D325 ; [*0F0F.0020.0002] # TETRAGRAM FOR LEGION
1D326 ; [*0F10.0020.0002] # TETRAGRAM FOR CLOSENESS
1D327 ; [*0F11.0020.0002] # TETRAGRAM FOR KINSHIP
1D328 ; [*0F12.0020.0002] # TETRAGRAM FOR GATHERING
1D329 ; [*0F13.0020.0002] # TETRAGRAM FOR STRENGTH
1D32A ; [*0F14.0020.0002] # TETRAGRAM FOR PURITY
1D32B ; [*0F15.0020.0002] # TETRAGRAM FOR FULLNESS
1D32C ; [*0F16.0020.0002] # TETRAGRAM FOR RESIDENCE
1D32D ; [*0F17.0020.0002] # TETRAGRAM FOR LAW OR MODEL
1D32E ; [*0F18.0020.0002] # TETRAGRAM FOR RESPONSE
1D32F ; [*0F19.0020.0002] # TETRAGRAM FOR GOING TO MEET
1D330 ; [*0F1A.0020.0002] # TETRAGRAM FOR ENCOUNTERS
1D331 ; [*0F1B.0020.0002] # TETRAGRAM FOR STOVE
1D332 ; [*0F1C.0020.0002] # TETRAGRAM FOR GREATNESS
1D333 ; [*0F1D.0020.0002] # TETRAGRAM FOR ENLARGEMENT
1D334 ; [*0F1E.0020.0002] # TETRAGRAM FOR PATTERN
1D335 ; [*0F1F.0020.0002] # TETRAGRAM FOR RITUAL
1D336 ; [*0F20.0020.0002] # TETRAGRAM FOR FLIGHT
1D337 ; [*0F21.0020.0002] # TETRAGRAM FOR VASTNESS OR WASTING
1D338 ; [*0F22.0020.0002] # TETRAGRAM FOR CONSTANCY
1D339 ; [*0F23.0020.0002] # TETRAGRAM FOR MEASURE
1D33A ; [*0F24.0020.0002] # TETRAGRAM FOR ETERNITY
1D33B ; [*0F25.0020.0002] # TETRAGRAM FOR UNITY
1D33C ; [*0F26.0020.0002] # TETRAGRAM FOR DIMINISHMENT
1D33D ; [*0F27.0020.0002] # TETRAGRAM FOR CLOSED MOUTH
1D33E ; [*0F28.0020.0002] # TETRAGRAM FOR GUARDEDNESS
1D33F ; [*0F29.0020.0002] # TETRAGRAM FOR GATHERING IN
1D340 ; [*0F2A.0020.0002] # TETRAGRAM FOR MASSING
1D341 ; [*0F2B.0020.0002] # TETRAGRAM FOR ACCUMULATION
1D342 ; [*0F2C.0020.0002] # TETRAGRAM FOR EMBELLISHMENT
1D343 ; [*0F2D.0020.0002] # TETRAGRAM FOR DOUBT
1D344 ; [*0F2E.0020.0002] # TETRAGRAM FOR WATCH
1D345 ; [*0F2F.0020.0002] # TETRAGRAM FOR SINKING
1D346 ; [*0F30.0020.0002] # TETRAGRAM FOR INNER
1D347 ; [*0F31.0020.0002] # TETRAGRAM FOR DEPARTURE
1D348 ; [*0F32.0020.0002] # TETRAGRAM FOR DARKENING
1D349 ; [*0F33.0020.0002] # TETRAGRAM FOR DIMMING
1D34A ; [*0F34.0020.0002] # TETRAGRAM FOR EXHAUSTION
1D34B ; [*0F35.0020.0002] # TETRAGRAM FOR SEVERANCE
1D34C ; [*0F36.0020.0002] # TETRAGRAM FOR STOPPAGE
1D34D ; [*0F37.0020.0002] # TETRAGRAM FOR HARDNESS
1D34E ; [*0F38.0020.0002] # TETRAGRAM FOR COMPLETION
1D34F ; [*0F39.0020.0002] # TETRAGRAM FOR CLOSURE
1D350 ; [*0F3A.0020.0002] # TETRAGRAM FOR FAILURE
1D351 ; [*0F3B.0020.0002] # TETRAGRAM FOR AGGRAVATION
1D352 ; [*0F3C.0020.0002] # TETRAGRAM FOR COMPLIANCE
1D353 ; [*0F3D.0020.0002] # TETRAGRAM FOR ON THE VERGE
1D354 ; [*0F3E.0020.0002] # TETRAGRAM FOR DIFFICULTIES
1D355 ; [*0F3F.0020.0002] # TETRAGRAM FOR LABOURING
1D356 ; [*0F40.0020.0002] # TETRAGRAM FOR FOSTERING
1D369 ; [*1BEF.0020.0002] # COUNTING ROD TENS DIGIT ONE
1D36A ; [*1BF0.0020.0002] # COUNTING ROD TENS DIGIT TWO
1D36B ; [*1BF1.0020.0002] # COUNTING ROD TENS DIGIT THREE
1D36C ; [*1BF2.0020.0002] # COUNTING ROD TENS DIGIT FOUR
1D36D ; [*1BF3.0020.0002] # COUNTING ROD TENS DIGIT FIVE
1D36E ; [*1BF4.0020.0002] # COUNTING ROD TENS DIGIT SIX
1D36F ; [*1BF5.0020.0002] # COUNTING ROD TENS DIGIT SEVEN
1D370 ; [*1BF6.0020.0002] # COUNTING ROD TENS DIGIT EIGHT
1D371 ; [*1BF7.0020.0002] # COUNTING ROD TENS DIGIT NINE
1D6C1 ; [*060C.0020.0005] # MATHEMATICAL BOLD NABLA
1D6DB ; [*0608.0020.0005] # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
1D6FB ; [*060C.0020.0005] # MATHEMATICAL ITALIC NABLA
1D715 ; [*0608.0020.0005] # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
1D735 ; [*060C.0020.0005] # MATHEMATICAL BOLD ITALIC NABLA
1D74F ; [*0608.0020.0005] # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
1D76F ; [*060C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD NABLA
1D789 ; [*0608.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
1D7A9 ; [*060C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
1D7C3 ; [*0608.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
1D800 ; [*183F.0020.0002] # SIGNWRITING HAND-FIST INDEX
1D801 ; [*1840.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX
1D802 ; [*1841.0020.0002] # SIGNWRITING HAND-CUP INDEX
1D803 ; [*1842.0020.0002] # SIGNWRITING HAND-OVAL INDEX
1D804 ; [*1843.0020.0002] # SIGNWRITING HAND-HINGE INDEX
1D805 ; [*1844.0020.0002] # SIGNWRITING HAND-ANGLE INDEX
1D806 ; [*1845.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT
1D807 ; [*1846.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX BENT
1D808 ; [*1847.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT
1D809 ; [*1848.0020.0002] # SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE
1D80A ; [*1849.0020.0002] # SIGNWRITING HAND-FIST INDEX CUPPED
1D80B ; [*184A.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED
1D80C ; [*184B.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED LOW
1D80D ; [*184C.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX HINGE
1D80E ; [*184D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE
1D80F ; [*184E.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE
1D810 ; [*184F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT
1D811 ; [*1850.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES
1D812 ; [*1851.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED
1D813 ; [*1852.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED
1D814 ; [*1853.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP
1D815 ; [*1854.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED
1D816 ; [*1855.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT
1D817 ; [*1856.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT
1D818 ; [*1857.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED
1D819 ; [*1858.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED
1D81A ; [*1859.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED
1D81B ; [*185A.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED
1D81C ; [*185B.0020.0002] # SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX
1D81D ; [*185C.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE
1D81E ; [*185D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB
1D81F ; [*185E.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB
1D820 ; [*185F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT
1D821 ; [*1860.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT
1D822 ; [*1861.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT
1D823 ; [*1862.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE
1D824 ; [*1863.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE
1D825 ; [*1864.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED
1D826 ; [*1865.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE
1D827 ; [*1866.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD
1D828 ; [*1867.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED
1D829 ; [*1868.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED
1D82A ; [*1869.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED
1D82B ; [*186A.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED
1D82C ; [*186B.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT
1D82D ; [*186C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE
1D82E ; [*186D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED
1D82F ; [*186E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT
1D830 ; [*186F.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP
1D831 ; [*1870.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP
1D832 ; [*1871.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE
1D833 ; [*1872.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE
1D834 ; [*1873.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD
1D835 ; [*1874.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD
1D836 ; [*1875.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP
1D837 ; [*1876.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP
1D838 ; [*1877.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP
1D839 ; [*1878.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED
1D83A ; [*1879.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP
1D83B ; [*187A.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP
1D83C ; [*187B.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP
1D83D ; [*187C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED
1D83E ; [*187D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT
1D83F ; [*187E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED
1D840 ; [*187F.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP
1D841 ; [*1880.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED
1D842 ; [*1881.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP
1D843 ; [*1882.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED
1D844 ; [*1883.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS
1D845 ; [*1884.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS BENT
1D846 ; [*1885.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS HINGED
1D847 ; [*1886.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED
1D848 ; [*1887.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT
1D849 ; [*1888.0020.0002] # SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED
1D84A ; [*1889.0020.0002] # SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT
1D84B ; [*188A.0020.0002] # SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED
1D84C ; [*188B.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD
1D84D ; [*188C.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD
1D84E ; [*188D.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT
1D84F ; [*188E.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT
1D850 ; [*188F.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT
1D851 ; [*1890.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT
1D852 ; [*1891.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD
1D853 ; [*1892.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD
1D854 ; [*1893.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN
1D855 ; [*1894.0020.0002] # SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN
1D856 ; [*1895.0020.0002] # SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD
1D857 ; [*1896.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED
1D858 ; [*1897.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE
1D859 ; [*1898.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB
1D85A ; [*1899.0020.0002] # SIGNWRITING HAND-FLAT
1D85B ; [*189A.0020.0002] # SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS
1D85C ; [*189B.0020.0002] # SIGNWRITING HAND-FLAT HEEL
1D85D ; [*189C.0020.0002] # SIGNWRITING HAND-FLAT THUMB SIDE
1D85E ; [*189D.0020.0002] # SIGNWRITING HAND-FLAT HEEL THUMB SIDE
1D85F ; [*189E.0020.0002] # SIGNWRITING HAND-FLAT THUMB BENT
1D860 ; [*189F.0020.0002] # SIGNWRITING HAND-FLAT THUMB FORWARD
1D861 ; [*18A0.0020.0002] # SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE
1D862 ; [*18A1.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE
1D863 ; [*18A2.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE
1D864 ; [*18A3.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT
1D865 ; [*18A4.0020.0002] # SIGNWRITING HAND-FLAT SPLIT LITTLE
1D866 ; [*18A5.0020.0002] # SIGNWRITING HAND-CLAW
1D867 ; [*18A6.0020.0002] # SIGNWRITING HAND-CLAW THUMB SIDE
1D868 ; [*18A7.0020.0002] # SIGNWRITING HAND-CLAW NO THUMB
1D869 ; [*18A8.0020.0002] # SIGNWRITING HAND-CLAW THUMB FORWARD
1D86A ; [*18A9.0020.0002] # SIGNWRITING HAND-HOOK CURLICUE
1D86B ; [*18AA.0020.0002] # SIGNWRITING HAND-HOOK
1D86C ; [*18AB.0020.0002] # SIGNWRITING HAND-CUP OPEN
1D86D ; [*18AC.0020.0002] # SIGNWRITING HAND-CUP
1D86E ; [*18AD.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB SIDE
1D86F ; [*18AE.0020.0002] # SIGNWRITING HAND-CUP THUMB SIDE
1D870 ; [*18AF.0020.0002] # SIGNWRITING HAND-CUP OPEN NO THUMB
1D871 ; [*18B0.0020.0002] # SIGNWRITING HAND-CUP NO THUMB
1D872 ; [*18B1.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB FORWARD
1D873 ; [*18B2.0020.0002] # SIGNWRITING HAND-CUP THUMB FORWARD
1D874 ; [*18B3.0020.0002] # SIGNWRITING HAND-CURLICUE OPEN
1D875 ; [*18B4.0020.0002] # SIGNWRITING HAND-CURLICUE
1D876 ; [*18B5.0020.0002] # SIGNWRITING HAND-CIRCLE
1D877 ; [*18B6.0020.0002] # SIGNWRITING HAND-OVAL
1D878 ; [*18B7.0020.0002] # SIGNWRITING HAND-OVAL THUMB SIDE
1D879 ; [*18B8.0020.0002] # SIGNWRITING HAND-OVAL NO THUMB
1D87A ; [*18B9.0020.0002] # SIGNWRITING HAND-OVAL THUMB FORWARD
1D87B ; [*18BA.0020.0002] # SIGNWRITING HAND-HINGE OPEN
1D87C ; [*18BB.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB FORWARD
1D87D ; [*18BC.0020.0002] # SIGNWRITING HAND-HINGE
1D87E ; [*18BD.0020.0002] # SIGNWRITING HAND-HINGE SMALL
1D87F ; [*18BE.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB SIDE
1D880 ; [*18BF.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE
1D881 ; [*18C0.0020.0002] # SIGNWRITING HAND-HINGE OPEN NO THUMB
1D882 ; [*18C1.0020.0002] # SIGNWRITING HAND-HINGE NO THUMB
1D883 ; [*18C2.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX
1D884 ; [*18C3.0020.0002] # SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING
1D885 ; [*18C4.0020.0002] # SIGNWRITING HAND-ANGLE
1D886 ; [*18C5.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING
1D887 ; [*18C6.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING
1D888 ; [*18C7.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING
1D889 ; [*18C8.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE RING
1D88A ; [*18C9.0020.0002] # SIGNWRITING HAND-HINGE LITTLE
1D88B ; [*18CA.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT
1D88C ; [*18CB.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED
1D88D ; [*18CC.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED
1D88E ; [*18CD.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN
1D88F ; [*18CE.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT
1D890 ; [*18CF.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED
1D891 ; [*18D0.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED
1D892 ; [*18D1.0020.0002] # SIGNWRITING HAND-FIST LITTLE UP
1D893 ; [*18D2.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP
1D894 ; [*18D3.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE UP
1D895 ; [*18D4.0020.0002] # SIGNWRITING HAND-OVAL LITTLE UP
1D896 ; [*18D5.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE UP
1D897 ; [*18D6.0020.0002] # SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE
1D898 ; [*18D7.0020.0002] # SIGNWRITING HAND-FIST LITTLE BENT
1D899 ; [*18D8.0020.0002] # SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB
1D89A ; [*18D9.0020.0002] # SIGNWRITING HAND-FIST LITTLE THUMB
1D89B ; [*18DA.0020.0002] # SIGNWRITING HAND-HINGE LITTLE THUMB
1D89C ; [*18DB.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX THUMB
1D89D ; [*18DC.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX THUMB
1D89E ; [*18DD.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT
1D89F ; [*18DE.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB
1D8A0 ; [*18DF.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX
1D8A1 ; [*18E0.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE INDEX
1D8A2 ; [*18E1.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX
1D8A3 ; [*18E2.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX
1D8A4 ; [*18E3.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE
1D8A5 ; [*18E4.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE
1D8A6 ; [*18E5.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE
1D8A7 ; [*18E6.0020.0002] # SIGNWRITING HAND-HINGE RING
1D8A8 ; [*18E7.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE
1D8A9 ; [*18E8.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE
1D8AA ; [*18E9.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE
1D8AB ; [*18EA.0020.0002] # SIGNWRITING HAND-FIST RING DOWN
1D8AC ; [*18EB.0020.0002] # SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE
1D8AD ; [*18EC.0020.0002] # SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS
1D8AE ; [*18ED.0020.0002] # SIGNWRITING HAND-FIST RING UP
1D8AF ; [*18EE.0020.0002] # SIGNWRITING HAND-FIST RING RAISED KNUCKLE
1D8B0 ; [*18EF.0020.0002] # SIGNWRITING HAND-FIST RING LITTLE
1D8B1 ; [*18F0.0020.0002] # SIGNWRITING HAND-CIRCLE RING LITTLE
1D8B2 ; [*18F1.0020.0002] # SIGNWRITING HAND-OVAL RING LITTLE
1D8B3 ; [*18F2.0020.0002] # SIGNWRITING HAND-ANGLE RING LITTLE
1D8B4 ; [*18F3.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE
1D8B5 ; [*18F4.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE CONJOINED
1D8B6 ; [*18F5.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES
1D8B7 ; [*18F6.0020.0002] # SIGNWRITING HAND-FIST RING INDEX
1D8B8 ; [*18F7.0020.0002] # SIGNWRITING HAND-FIST RING THUMB
1D8B9 ; [*18F8.0020.0002] # SIGNWRITING HAND-HOOK RING THUMB
1D8BA ; [*18F9.0020.0002] # SIGNWRITING HAND-FIST INDEX RING LITTLE
1D8BB ; [*18FA.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX RING LITTLE
1D8BC ; [*18FB.0020.0002] # SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON
1D8BD ; [*18FC.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT
1D8BE ; [*18FD.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE IN
1D8BF ; [*18FE.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER
1D8C0 ; [*18FF.0020.0002] # SIGNWRITING HAND-CUP INDEX RING LITTLE
1D8C1 ; [*1900.0020.0002] # SIGNWRITING HAND-HINGE INDEX RING LITTLE
1D8C2 ; [*1901.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT
1D8C3 ; [*1902.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE
1D8C4 ; [*1903.0020.0002] # SIGNWRITING HAND-FIST MIDDLE DOWN
1D8C5 ; [*1904.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE
1D8C6 ; [*1905.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP
1D8C7 ; [*1906.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE UP
1D8C8 ; [*1907.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE
1D8C9 ; [*1908.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE
1D8CA ; [*1909.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE THUMB
1D8CB ; [*190A.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE
1D8CC ; [*190B.0020.0002] # SIGNWRITING HAND-FIST MIDDLE LITTLE
1D8CD ; [*190C.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RING LITTLE
1D8CE ; [*190D.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE
1D8CF ; [*190E.0020.0002] # SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON
1D8D0 ; [*190F.0020.0002] # SIGNWRITING HAND-CUP MIDDLE RING LITTLE
1D8D1 ; [*1910.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE RING LITTLE
1D8D2 ; [*1911.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT
1D8D3 ; [*1912.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN
1D8D4 ; [*1913.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE
1D8D5 ; [*1914.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT
1D8D6 ; [*1915.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED
1D8D7 ; [*1916.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE
1D8D8 ; [*1917.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT
1D8D9 ; [*1918.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN
1D8DA ; [*1919.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED
1D8DB ; [*191A.0020.0002] # SIGNWRITING HAND-HINGE INDEX HINGED
1D8DC ; [*191B.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE
1D8DD ; [*191C.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SIDE
1D8DE ; [*191D.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL
1D8DF ; [*191E.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED
1D8E0 ; [*191F.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT
1D8E1 ; [*1920.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT
1D8E2 ; [*1921.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT
1D8E3 ; [*1922.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE
1D8E4 ; [*1923.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT
1D8E5 ; [*1924.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT
1D8E6 ; [*1925.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOK
1D8E7 ; [*1926.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURLICUE
1D8E8 ; [*1927.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE
1D8E9 ; [*1928.0020.0002] # SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE
1D8EA ; [*1929.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER
1D8EB ; [*192A.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLE
1D8EC ; [*192B.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB
1D8ED ; [*192C.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB OPEN
1D8EE ; [*192D.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB OPEN
1D8EF ; [*192E.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB LARGE
1D8F0 ; [*192F.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB
1D8F1 ; [*1930.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SMALL
1D8F2 ; [*1931.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB OUT
1D8F3 ; [*1932.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB IN
1D8F4 ; [*1933.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB
1D8F5 ; [*1934.0020.0002] # SIGNWRITING HAND-FIST THUMB
1D8F6 ; [*1935.0020.0002] # SIGNWRITING HAND-FIST THUMB HEEL
1D8F7 ; [*1936.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL
1D8F8 ; [*1937.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE CONJOINED
1D8F9 ; [*1938.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE BENT
1D8FA ; [*1939.0020.0002] # SIGNWRITING HAND-FIST THUMB FORWARD
1D8FB ; [*193A.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE
1D8FC ; [*193B.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING
1D8FD ; [*193C.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE
1D8FE ; [*193D.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS
1D8FF ; [*193E.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS
1D900 ; [*193F.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS
1D901 ; [*1940.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS
1D902 ; [*1941.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES
1D903 ; [*1942.0020.0002] # SIGNWRITING HAND-FIST
1D904 ; [*1943.0020.0002] # SIGNWRITING HAND-FIST HEEL
1D905 ; [*1944.0020.0002] # SIGNWRITING TOUCH SINGLE
1D906 ; [*1945.0020.0002] # SIGNWRITING TOUCH MULTIPLE
1D907 ; [*1946.0020.0002] # SIGNWRITING TOUCH BETWEEN
1D908 ; [*1947.0020.0002] # SIGNWRITING GRASP SINGLE
1D909 ; [*1948.0020.0002] # SIGNWRITING GRASP MULTIPLE
1D90A ; [*1949.0020.0002] # SIGNWRITING GRASP BETWEEN
1D90B ; [*194A.0020.0002] # SIGNWRITING STRIKE SINGLE
1D90C ; [*194B.0020.0002] # SIGNWRITING STRIKE MULTIPLE
1D90D ; [*194C.0020.0002] # SIGNWRITING STRIKE BETWEEN
1D90E ; [*194D.0020.0002] # SIGNWRITING BRUSH SINGLE
1D90F ; [*194E.0020.0002] # SIGNWRITING BRUSH MULTIPLE
1D910 ; [*194F.0020.0002] # SIGNWRITING BRUSH BETWEEN
1D911 ; [*1950.0020.0002] # SIGNWRITING RUB SINGLE
1D912 ; [*1951.0020.0002] # SIGNWRITING RUB MULTIPLE
1D913 ; [*1952.0020.0002] # SIGNWRITING RUB BETWEEN
1D914 ; [*1953.0020.0002] # SIGNWRITING SURFACE SYMBOLS
1D915 ; [*1954.0020.0002] # SIGNWRITING SURFACE BETWEEN
1D916 ; [*1955.0020.0002] # SIGNWRITING SQUEEZE LARGE SINGLE
1D917 ; [*1956.0020.0002] # SIGNWRITING SQUEEZE SMALL SINGLE
1D918 ; [*1957.0020.0002] # SIGNWRITING SQUEEZE LARGE MULTIPLE
1D919 ; [*1958.0020.0002] # SIGNWRITING SQUEEZE SMALL MULTIPLE
1D91A ; [*1959.0020.0002] # SIGNWRITING SQUEEZE SEQUENTIAL
1D91B ; [*195A.0020.0002] # SIGNWRITING FLICK LARGE SINGLE
1D91C ; [*195B.0020.0002] # SIGNWRITING FLICK SMALL SINGLE
1D91D ; [*195C.0020.0002] # SIGNWRITING FLICK LARGE MULTIPLE
1D91E ; [*195D.0020.0002] # SIGNWRITING FLICK SMALL MULTIPLE
1D91F ; [*195E.0020.0002] # SIGNWRITING FLICK SEQUENTIAL
1D920 ; [*195F.0020.0002] # SIGNWRITING SQUEEZE FLICK ALTERNATING
1D921 ; [*1960.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE
1D922 ; [*1961.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL
1D923 ; [*1962.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL
1D924 ; [*1963.0020.0002] # SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL
1D925 ; [*1964.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE
1D926 ; [*1965.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL
1D927 ; [*1966.0020.0002] # SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS
1D928 ; [*1967.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT
1D929 ; [*1968.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT
1D92A ; [*1969.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL
1D92B ; [*196A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM
1D92C ; [*196B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE
1D92D ; [*196C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST
1D92E ; [*196D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX
1D92F ; [*196E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT
1D930 ; [*196F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX
1D931 ; [*1970.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING
1D932 ; [*1971.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX
1D933 ; [*1972.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CROSS
1D934 ; [*1973.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT
1D935 ; [*1974.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX
1D936 ; [*1975.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING
1D937 ; [*1976.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX
1D938 ; [*1977.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL
1D939 ; [*1978.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM
1D93A ; [*1979.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE
1D93B ; [*197A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL
1D93C ; [*197B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM
1D93D ; [*197C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE
1D93E ; [*197D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION
1D93F ; [*197E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL
1D940 ; [*197F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM
1D941 ; [*1980.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE
1D942 ; [*1981.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL
1D943 ; [*1982.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM
1D944 ; [*1983.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE
1D945 ; [*1984.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL
1D946 ; [*1985.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM
1D947 ; [*1986.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE
1D948 ; [*1987.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL
1D949 ; [*1988.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM
1D94A ; [*1989.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE
1D94B ; [*198A.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE
1D94C ; [*198B.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE
1D94D ; [*198C.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING
1D94E ; [*198D.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE
1D94F ; [*198E.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE
1D950 ; [*198F.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING
1D951 ; [*1990.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE SHAKING
1D952 ; [*1991.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE
1D953 ; [*1992.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE
1D954 ; [*1993.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE
1D955 ; [*1994.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL
1D956 ; [*1995.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM
1D957 ; [*1996.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE
1D958 ; [*1997.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST
1D959 ; [*1998.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL
1D95A ; [*1999.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM
1D95B ; [*199A.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE
1D95C ; [*199B.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST
1D95D ; [*199C.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL
1D95E ; [*199D.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM
1D95F ; [*199E.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE
1D960 ; [*199F.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST
1D961 ; [*19A0.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL
1D962 ; [*19A1.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM
1D963 ; [*19A2.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE
1D964 ; [*19A3.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST
1D965 ; [*19A4.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL
1D966 ; [*19A5.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM
1D967 ; [*19A6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE
1D968 ; [*19A7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST
1D969 ; [*19A8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX
1D96A ; [*19A9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT
1D96B ; [*19AA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX
1D96C ; [*19AB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING
1D96D ; [*19AC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX
1D96E ; [*19AD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CROSS
1D96F ; [*19AE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT
1D970 ; [*19AF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX
1D971 ; [*19B0.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT
1D972 ; [*19B1.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX
1D973 ; [*19B2.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BEND
1D974 ; [*19B3.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL
1D975 ; [*19B4.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM
1D976 ; [*19B5.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE
1D977 ; [*19B6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CHECK
1D978 ; [*19B7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL
1D979 ; [*19B8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM
1D97A ; [*19B9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE
1D97B ; [*19BA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL
1D97C ; [*19BB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM
1D97D ; [*19BC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE
1D97E ; [*19BD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL
1D97F ; [*19BE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM
1D980 ; [*19BF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE
1D981 ; [*19C0.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE
1D982 ; [*19C1.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE
1D983 ; [*19C2.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING
1D984 ; [*19C3.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE
1D985 ; [*19C4.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE
1D986 ; [*19C5.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING
1D987 ; [*19C6.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE SHAKING
1D988 ; [*19C7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL
1D989 ; [*19C8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM
1D98A ; [*19C9.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE
1D98B ; [*19CA.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST
1D98C ; [*19CB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL
1D98D ; [*19CC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM
1D98E ; [*19CD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE
1D98F ; [*19CE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST
1D990 ; [*19CF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL
1D991 ; [*19D0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM
1D992 ; [*19D1.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL
1D993 ; [*19D2.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM
1D994 ; [*19D3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE
1D995 ; [*19D4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL
1D996 ; [*19D5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM
1D997 ; [*19D6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE
1D998 ; [*19D7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE
1D999 ; [*19D8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL
1D99A ; [*19D9.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM
1D99B ; [*19DA.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE
1D99C ; [*19DB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL
1D99D ; [*19DC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM
1D99E ; [*19DD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE
1D99F ; [*19DE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT
1D9A0 ; [*19DF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL
1D9A1 ; [*19E0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM
1D9A2 ; [*19E1.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE
1D9A3 ; [*19E2.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE
1D9A4 ; [*19E3.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATE
1D9A5 ; [*19E4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SHAKING
1D9A6 ; [*19E5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL
1D9A7 ; [*19E6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL
1D9A8 ; [*19E7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL
1D9A9 ; [*19E8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL
1D9AA ; [*19E9.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL
1D9AB ; [*19EA.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL
1D9AC ; [*19EB.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL
1D9AD ; [*19EC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST
1D9AE ; [*19ED.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST
1D9AF ; [*19EE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST
1D9B0 ; [*19EF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST
1D9B1 ; [*19F0.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST
1D9B2 ; [*19F1.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST
1D9B3 ; [*19F2.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST
1D9B4 ; [*19F3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL
1D9B5 ; [*19F4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM
1D9B6 ; [*19F5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE
1D9B7 ; [*19F6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL
1D9B8 ; [*19F7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE
1D9B9 ; [*19F8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE
1D9BA ; [*19F9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE
1D9BB ; [*19FA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE
1D9BC ; [*19FB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE
1D9BD ; [*19FC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE
1D9BE ; [*19FD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE
1D9BF ; [*19FE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE
1D9C0 ; [*19FF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE
1D9C1 ; [*1A00.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL
1D9C2 ; [*1A01.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE
1D9C3 ; [*1A02.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING
1D9C4 ; [*1A03.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING
1D9C5 ; [*1A04.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING
1D9C6 ; [*1A05.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL
1D9C7 ; [*1A06.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE
1D9C8 ; [*1A07.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE
1D9C9 ; [*1A08.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE
1D9CA ; [*1A09.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE
1D9CB ; [*1A0A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE
1D9CC ; [*1A0B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE
1D9CD ; [*1A0C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE
1D9CE ; [*1A0D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE
1D9CF ; [*1A0E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE
1D9D0 ; [*1A0F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL
1D9D1 ; [*1A10.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE
1D9D2 ; [*1A11.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR
1D9D3 ; [*1A12.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR
1D9D4 ; [*1A13.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR
1D9D5 ; [*1A14.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL
1D9D6 ; [*1A15.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM
1D9D7 ; [*1A16.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE
1D9D8 ; [*1A17.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST
1D9D9 ; [*1A18.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED
1D9DA ; [*1A19.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL
1D9DB ; [*1A1A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL
1D9DC ; [*1A1B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE
1D9DD ; [*1A1C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL
1D9DE ; [*1A1D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE
1D9DF ; [*1A1E.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE
1D9E0 ; [*1A1F.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE
1D9E1 ; [*1A20.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING
1D9E2 ; [*1A21.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL
1D9E3 ; [*1A22.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE
1D9E4 ; [*1A23.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE
1D9E5 ; [*1A24.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE
1D9E6 ; [*1A25.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE
1D9E7 ; [*1A26.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE
1D9E8 ; [*1A27.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE
1D9E9 ; [*1A28.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE
1D9EA ; [*1A29.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE
1D9EB ; [*1A2A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE
1D9EC ; [*1A2B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE
1D9ED ; [*1A2C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE
1D9EE ; [*1A2D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE
1D9EF ; [*1A2E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE
1D9F0 ; [*1A2F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE
1D9F1 ; [*1A30.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE
1D9F2 ; [*1A31.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE
1D9F3 ; [*1A32.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE
1D9F4 ; [*1A33.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE
1D9F5 ; [*1A34.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD SMALL
1D9F6 ; [*1A35.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD LARGE
1D9F7 ; [*1A36.0020.0002] # SIGNWRITING DYNAMIC FAST
1D9F8 ; [*1A37.0020.0002] # SIGNWRITING DYNAMIC SLOW
1D9F9 ; [*1A38.0020.0002] # SIGNWRITING DYNAMIC TENSE
1D9FA ; [*1A39.0020.0002] # SIGNWRITING DYNAMIC RELAXED
1D9FB ; [*1A3A.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS
1D9FC ; [*1A3B.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING
1D9FD ; [*1A3C.0020.0002] # SIGNWRITING DYNAMIC EVERY OTHER TIME
1D9FE ; [*1A3D.0020.0002] # SIGNWRITING DYNAMIC GRADUAL
1D9FF ; [*1A3E.0020.0002] # SIGNWRITING HEAD
1DA00 ; [.0000.0000.0000] # SIGNWRITING HEAD RIM
1DA01 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT
1DA02 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT
1DA03 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT
1DA04 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE
1DA05 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE
1DA06 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT CIRCLE
1DA07 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING
1DA08 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN
1DA09 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING
1DA0A ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT UP
1DA0B ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT NEUTRAL
1DA0C ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT DOWN
1DA0D ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN
1DA0E ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL
1DA0F ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS UP NEUTRAL
1DA10 ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS NEUTRAL UP
1DA11 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD NEUTRAL
1DA12 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD CONTACT
1DA13 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD WRINKLED
1DA14 ; [.0000.0000.0000] # SIGNWRITING EYES OPEN
1DA15 ; [.0000.0000.0000] # SIGNWRITING EYES SQUEEZED
1DA16 ; [.0000.0000.0000] # SIGNWRITING EYES CLOSED
1DA17 ; [.0000.0000.0000] # SIGNWRITING EYE BLINK SINGLE
1DA18 ; [.0000.0000.0000] # SIGNWRITING EYE BLINK MULTIPLE
1DA19 ; [.0000.0000.0000] # SIGNWRITING EYES HALF OPEN
1DA1A ; [.0000.0000.0000] # SIGNWRITING EYES WIDE OPEN
1DA1B ; [.0000.0000.0000] # SIGNWRITING EYES HALF CLOSED
1DA1C ; [.0000.0000.0000] # SIGNWRITING EYES WIDENING MOVEMENT
1DA1D ; [.0000.0000.0000] # SIGNWRITING EYE WINK
1DA1E ; [.0000.0000.0000] # SIGNWRITING EYELASHES UP
1DA1F ; [.0000.0000.0000] # SIGNWRITING EYELASHES DOWN
1DA20 ; [.0000.0000.0000] # SIGNWRITING EYELASHES FLUTTERING
1DA21 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT
1DA22 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE
1DA23 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING
1DA24 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT
1DA25 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE
1DA26 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING
1DA27 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE CURVED
1DA28 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE CURVED
1DA29 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE CIRCLING
1DA2A ; [.0000.0000.0000] # SIGNWRITING CHEEKS PUFFED
1DA2B ; [.0000.0000.0000] # SIGNWRITING CHEEKS NEUTRAL
1DA2C ; [.0000.0000.0000] # SIGNWRITING CHEEKS SUCKED
1DA2D ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS HIGH
1DA2E ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS MIDDLE
1DA2F ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS LOW
1DA30 ; [.0000.0000.0000] # SIGNWRITING EARS
1DA31 ; [.0000.0000.0000] # SIGNWRITING NOSE NEUTRAL
1DA32 ; [.0000.0000.0000] # SIGNWRITING NOSE CONTACT
1DA33 ; [.0000.0000.0000] # SIGNWRITING NOSE WRINKLES
1DA34 ; [.0000.0000.0000] # SIGNWRITING NOSE WIGGLES
1DA35 ; [.0000.0000.0000] # SIGNWRITING AIR BLOWING OUT
1DA36 ; [.0000.0000.0000] # SIGNWRITING AIR SUCKING IN
1DA37 ; [*1A3F.0020.0002] # SIGNWRITING AIR BLOW SMALL ROTATIONS
1DA38 ; [*1A40.0020.0002] # SIGNWRITING AIR SUCK SMALL ROTATIONS
1DA39 ; [*1A41.0020.0002] # SIGNWRITING BREATH INHALE
1DA3A ; [*1A42.0020.0002] # SIGNWRITING BREATH EXHALE
1DA3B ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED NEUTRAL
1DA3C ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED FORWARD
1DA3D ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED CONTACT
1DA3E ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE
1DA3F ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE WRINKLED
1DA40 ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE OPEN
1DA41 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN
1DA42 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN WRINKLED
1DA43 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN OPEN
1DA44 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN CIRCLE
1DA45 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN FORWARD
1DA46 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN WRINKLED
1DA47 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL
1DA48 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL WRINKLED
1DA49 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL YAWN
1DA4A ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE
1DA4B ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED
1DA4C ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE YAWN
1DA4D ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS
1DA4E ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS FORWARD
1DA4F ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS WRINKLED
1DA50 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE
1DA51 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE FORWARD
1DA52 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE SUCKED
1DA53 ; [.0000.0000.0000] # SIGNWRITING LIPS PRESSED TOGETHER
1DA54 ; [.0000.0000.0000] # SIGNWRITING LIP LOWER OVER UPPER
1DA55 ; [.0000.0000.0000] # SIGNWRITING LIP UPPER OVER LOWER
1DA56 ; [.0000.0000.0000] # SIGNWRITING MOUTH CORNERS
1DA57 ; [.0000.0000.0000] # SIGNWRITING MOUTH WRINKLES SINGLE
1DA58 ; [.0000.0000.0000] # SIGNWRITING MOUTH WRINKLES DOUBLE
1DA59 ; [.0000.0000.0000] # SIGNWRITING TONGUE STICKING OUT FAR
1DA5A ; [.0000.0000.0000] # SIGNWRITING TONGUE LICKING LIPS
1DA5B ; [.0000.0000.0000] # SIGNWRITING TONGUE TIP BETWEEN LIPS
1DA5C ; [.0000.0000.0000] # SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH
1DA5D ; [.0000.0000.0000] # SIGNWRITING TONGUE INSIDE MOUTH RELAXED
1DA5E ; [.0000.0000.0000] # SIGNWRITING TONGUE MOVES AGAINST CHEEK
1DA5F ; [.0000.0000.0000] # SIGNWRITING TONGUE CENTRE STICKING OUT
1DA60 ; [.0000.0000.0000] # SIGNWRITING TONGUE CENTRE INSIDE MOUTH
1DA61 ; [.0000.0000.0000] # SIGNWRITING TEETH
1DA62 ; [.0000.0000.0000] # SIGNWRITING TEETH MOVEMENT
1DA63 ; [.0000.0000.0000] # SIGNWRITING TEETH ON TONGUE
1DA64 ; [.0000.0000.0000] # SIGNWRITING TEETH ON TONGUE MOVEMENT
1DA65 ; [.0000.0000.0000] # SIGNWRITING TEETH ON LIPS
1DA66 ; [.0000.0000.0000] # SIGNWRITING TEETH ON LIPS MOVEMENT
1DA67 ; [.0000.0000.0000] # SIGNWRITING TEETH BITE LIPS
1DA68 ; [.0000.0000.0000] # SIGNWRITING MOVEMENT-WALLPLANE JAW
1DA69 ; [.0000.0000.0000] # SIGNWRITING MOVEMENT-FLOORPLANE JAW
1DA6A ; [.0000.0000.0000] # SIGNWRITING NECK
1DA6B ; [.0000.0000.0000] # SIGNWRITING HAIR
1DA6C ; [.0000.0000.0000] # SIGNWRITING EXCITEMENT
1DA6D ; [*1A43.0020.0002] # SIGNWRITING SHOULDER HIP SPINE
1DA6E ; [*1A44.0020.0002] # SIGNWRITING SHOULDER HIP POSITIONS
1DA6F ; [*1A45.0020.0002] # SIGNWRITING WALLPLANE SHOULDER HIP MOVE
1DA70 ; [*1A46.0020.0002] # SIGNWRITING FLOORPLANE SHOULDER HIP MOVE
1DA71 ; [*1A47.0020.0002] # SIGNWRITING SHOULDER TILTING FROM WAIST
1DA72 ; [*1A48.0020.0002] # SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH
1DA73 ; [*1A49.0020.0002] # SIGNWRITING TORSO-WALLPLANE CURVED BEND
1DA74 ; [*1A4A.0020.0002] # SIGNWRITING TORSO-FLOORPLANE TWISTING
1DA75 ; [.0000.0000.0000] # SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
1DA76 ; [*1A4B.0020.0002] # SIGNWRITING LIMB COMBINATION
1DA77 ; [*1A4C.0020.0002] # SIGNWRITING LIMB LENGTH-1
1DA78 ; [*1A4D.0020.0002] # SIGNWRITING LIMB LENGTH-2
1DA79 ; [*1A4E.0020.0002] # SIGNWRITING LIMB LENGTH-3
1DA7A ; [*1A4F.0020.0002] # SIGNWRITING LIMB LENGTH-4
1DA7B ; [*1A50.0020.0002] # SIGNWRITING LIMB LENGTH-5
1DA7C ; [*1A51.0020.0002] # SIGNWRITING LIMB LENGTH-6
1DA7D ; [*1A52.0020.0002] # SIGNWRITING LIMB LENGTH-7
1DA7E ; [*1A53.0020.0002] # SIGNWRITING FINGER
1DA7F ; [*1A54.0020.0002] # SIGNWRITING LOCATION-WALLPLANE SPACE
1DA80 ; [*1A55.0020.0002] # SIGNWRITING LOCATION-FLOORPLANE SPACE
1DA81 ; [*1A56.0020.0002] # SIGNWRITING LOCATION HEIGHT
1DA82 ; [*1A57.0020.0002] # SIGNWRITING LOCATION WIDTH
1DA83 ; [*1A58.0020.0002] # SIGNWRITING LOCATION DEPTH
1DA84 ; [.0000.0000.0000] # SIGNWRITING LOCATION HEAD NECK
1DA85 ; [*1A59.0020.0002] # SIGNWRITING LOCATION TORSO
1DA86 ; [*1A5A.0020.0002] # SIGNWRITING LOCATION LIMBS DIGITS
1DA87 ; [*047D.0020.0002] # SIGNWRITING COMMA
1DA88 ; [*047E.0020.0002] # SIGNWRITING FULL STOP
1DA89 ; [*047F.0020.0002] # SIGNWRITING SEMICOLON
1DA8A ; [*0480.0020.0002] # SIGNWRITING COLON
1DA8B ; [*0481.0020.0002] # SIGNWRITING PARENTHESIS
1DA9B ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-2
1DA9C ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-3
1DA9D ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-4
1DA9E ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-5
1DA9F ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-6
1DAA1 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-2
1DAA2 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-3
1DAA3 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-4
1DAA4 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-5
1DAA5 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-6
1DAA6 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-7
1DAA7 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-8
1DAA8 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-9
1DAA9 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-10
1DAAA ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-11
1DAAB ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-12
1DAAC ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-13
1DAAD ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-14
1DAAE ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-15
1DAAF ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-16
1E8D0 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEENS
1E8D1 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TENS
1E8D2 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDREDS
1E8D3 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER THOUSANDS
1E8D4 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS
1E8D5 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS
1E8D6 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER MILLIONS
1E95E ; [*0265.0020.0002] # ADLAM INITIAL EXCLAMATION MARK
1E95F ; [*0274.0020.0002] # ADLAM INITIAL QUESTION MARK
1EEF0 ; [*04FB.0020.0002] # ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL
1EEF1 ; [*04FC.0020.0002] # ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
1F000 ; [*11C7.0020.0002] # MAHJONG TILE EAST WIND
1F001 ; [*11C8.0020.0002] # MAHJONG TILE SOUTH WIND
1F002 ; [*11C9.0020.0002] # MAHJONG TILE WEST WIND
1F003 ; [*11CA.0020.0002] # MAHJONG TILE NORTH WIND
1F004 ; [*11CB.0020.0002] # MAHJONG TILE RED DRAGON
1F005 ; [*11CC.0020.0002] # MAHJONG TILE GREEN DRAGON
1F006 ; [*11CD.0020.0002] # MAHJONG TILE WHITE DRAGON
1F007 ; [*11CE.0020.0002] # MAHJONG TILE ONE OF CHARACTERS
1F008 ; [*11CF.0020.0002] # MAHJONG TILE TWO OF CHARACTERS
1F009 ; [*11D0.0020.0002] # MAHJONG TILE THREE OF CHARACTERS
1F00A ; [*11D1.0020.0002] # MAHJONG TILE FOUR OF CHARACTERS
1F00B ; [*11D2.0020.0002] # MAHJONG TILE FIVE OF CHARACTERS
1F00C ; [*11D3.0020.0002] # MAHJONG TILE SIX OF CHARACTERS
1F00D ; [*11D4.0020.0002] # MAHJONG TILE SEVEN OF CHARACTERS
1F00E ; [*11D5.0020.0002] # MAHJONG TILE EIGHT OF CHARACTERS
1F00F ; [*11D6.0020.0002] # MAHJONG TILE NINE OF CHARACTERS
1F010 ; [*11D7.0020.0002] # MAHJONG TILE ONE OF BAMBOOS
1F011 ; [*11D8.0020.0002] # MAHJONG TILE TWO OF BAMBOOS
1F012 ; [*11D9.0020.0002] # MAHJONG TILE THREE OF BAMBOOS
1F013 ; [*11DA.0020.0002] # MAHJONG TILE FOUR OF BAMBOOS
1F014 ; [*11DB.0020.0002] # MAHJONG TILE FIVE OF BAMBOOS
1F015 ; [*11DC.0020.0002] # MAHJONG TILE SIX OF BAMBOOS
1F016 ; [*11DD.0020.0002] # MAHJONG TILE SEVEN OF BAMBOOS
1F017 ; [*11DE.0020.0002] # MAHJONG TILE EIGHT OF BAMBOOS
1F018 ; [*11DF.0020.0002] # MAHJONG TILE NINE OF BAMBOOS
1F019 ; [*11E0.0020.0002] # MAHJONG TILE ONE OF CIRCLES
1F01A ; [*11E1.0020.0002] # MAHJONG TILE TWO OF CIRCLES
1F01B ; [*11E2.0020.0002] # MAHJONG TILE THREE OF CIRCLES
1F01C ; [*11E3.0020.0002] # MAHJONG TILE FOUR OF CIRCLES
1F01D ; [*11E4.0020.0002] # MAHJONG TILE FIVE OF CIRCLES
1F01E ; [*11E5.0020.0002] # MAHJONG TILE SIX OF CIRCLES
1F01F ; [*11E6.0020.0002] # MAHJONG TILE SEVEN OF CIRCLES
1F020 ; [*11E7.0020.0002] # MAHJONG TILE EIGHT OF CIRCLES
1F021 ; [*11E8.0020.0002] # MAHJONG TILE NINE OF CIRCLES
1F022 ; [*11E9.0020.0002] # MAHJONG TILE PLUM
1F023 ; [*11EA.0020.0002] # MAHJONG TILE ORCHID
1F024 ; [*11EB.0020.0002] # MAHJONG TILE BAMBOO
1F025 ; [*11EC.0020.0002] # MAHJONG TILE CHRYSANTHEMUM
1F026 ; [*11ED.0020.0002] # MAHJONG TILE SPRING
1F027 ; [*11EE.0020.0002] # MAHJONG TILE SUMMER
1F028 ; [*11EF.0020.0002] # MAHJONG TILE AUTUMN
1F029 ; [*11F0.0020.0002] # MAHJONG TILE WINTER
1F02A ; [*11F1.0020.0002] # MAHJONG TILE JOKER
1F02B ; [*11F2.0020.0002] # MAHJONG TILE BACK
1F030 ; [*11F3.0020.0002] # DOMINO TILE HORIZONTAL BACK
1F031 ; [*11F4.0020.0002] # DOMINO TILE HORIZONTAL-00-00
1F032 ; [*11F5.0020.0002] # DOMINO TILE HORIZONTAL-00-01
1F033 ; [*11F6.0020.0002] # DOMINO TILE HORIZONTAL-00-02
1F034 ; [*11F7.0020.0002] # DOMINO TILE HORIZONTAL-00-03
1F035 ; [*11F8.0020.0002] # DOMINO TILE HORIZONTAL-00-04
1F036 ; [*11F9.0020.0002] # DOMINO TILE HORIZONTAL-00-05
1F037 ; [*11FA.0020.0002] # DOMINO TILE HORIZONTAL-00-06
1F038 ; [*11FB.0020.0002] # DOMINO TILE HORIZONTAL-01-00
1F039 ; [*11FC.0020.0002] # DOMINO TILE HORIZONTAL-01-01
1F03A ; [*11FD.0020.0002] # DOMINO TILE HORIZONTAL-01-02
1F03B ; [*11FE.0020.0002] # DOMINO TILE HORIZONTAL-01-03
1F03C ; [*11FF.0020.0002] # DOMINO TILE HORIZONTAL-01-04
1F03D ; [*1200.0020.0002] # DOMINO TILE HORIZONTAL-01-05
1F03E ; [*1201.0020.0002] # DOMINO TILE HORIZONTAL-01-06
1F03F ; [*1202.0020.0002] # DOMINO TILE HORIZONTAL-02-00
1F040 ; [*1203.0020.0002] # DOMINO TILE HORIZONTAL-02-01
1F041 ; [*1204.0020.0002] # DOMINO TILE HORIZONTAL-02-02
1F042 ; [*1205.0020.0002] # DOMINO TILE HORIZONTAL-02-03
1F043 ; [*1206.0020.0002] # DOMINO TILE HORIZONTAL-02-04
1F044 ; [*1207.0020.0002] # DOMINO TILE HORIZONTAL-02-05
1F045 ; [*1208.0020.0002] # DOMINO TILE HORIZONTAL-02-06
1F046 ; [*1209.0020.0002] # DOMINO TILE HORIZONTAL-03-00
1F047 ; [*120A.0020.0002] # DOMINO TILE HORIZONTAL-03-01
1F048 ; [*120B.0020.0002] # DOMINO TILE HORIZONTAL-03-02
1F049 ; [*120C.0020.0002] # DOMINO TILE HORIZONTAL-03-03
1F04A ; [*120D.0020.0002] # DOMINO TILE HORIZONTAL-03-04
1F04B ; [*120E.0020.0002] # DOMINO TILE HORIZONTAL-03-05
1F04C ; [*120F.0020.0002] # DOMINO TILE HORIZONTAL-03-06
1F04D ; [*1210.0020.0002] # DOMINO TILE HORIZONTAL-04-00
1F04E ; [*1211.0020.0002] # DOMINO TILE HORIZONTAL-04-01
1F04F ; [*1212.0020.0002] # DOMINO TILE HORIZONTAL-04-02
1F050 ; [*1213.0020.0002] # DOMINO TILE HORIZONTAL-04-03
1F051 ; [*1214.0020.0002] # DOMINO TILE HORIZONTAL-04-04
1F052 ; [*1215.0020.0002] # DOMINO TILE HORIZONTAL-04-05
1F053 ; [*1216.0020.0002] # DOMINO TILE HORIZONTAL-04-06
1F054 ; [*1217.0020.0002] # DOMINO TILE HORIZONTAL-05-00
1F055 ; [*1218.0020.0002] # DOMINO TILE HORIZONTAL-05-01
1F056 ; [*1219.0020.0002] # DOMINO TILE HORIZONTAL-05-02
1F057 ; [*121A.0020.0002] # DOMINO TILE HORIZONTAL-05-03
1F058 ; [*121B.0020.0002] # DOMINO TILE HORIZONTAL-05-04
1F059 ; [*121C.0020.0002] # DOMINO TILE HORIZONTAL-05-05
1F05A ; [*121D.0020.0002] # DOMINO TILE HORIZONTAL-05-06
1F05B ; [*121E.0020.0002] # DOMINO TILE HORIZONTAL-06-00
1F05C ; [*121F.0020.0002] # DOMINO TILE HORIZONTAL-06-01
1F05D ; [*1220.0020.0002] # DOMINO TILE HORIZONTAL-06-02
1F05E ; [*1221.0020.0002] # DOMINO TILE HORIZONTAL-06-03
1F05F ; [*1222.0020.0002] # DOMINO TILE HORIZONTAL-06-04
1F060 ; [*1223.0020.0002] # DOMINO TILE HORIZONTAL-06-05
1F061 ; [*1224.0020.0002] # DOMINO TILE HORIZONTAL-06-06
1F062 ; [*1225.0020.0002] # DOMINO TILE VERTICAL BACK
1F063 ; [*1226.0020.0002] # DOMINO TILE VERTICAL-00-00
1F064 ; [*1227.0020.0002] # DOMINO TILE VERTICAL-00-01
1F065 ; [*1228.0020.0002] # DOMINO TILE VERTICAL-00-02
1F066 ; [*1229.0020.0002] # DOMINO TILE VERTICAL-00-03
1F067 ; [*122A.0020.0002] # DOMINO TILE VERTICAL-00-04
1F068 ; [*122B.0020.0002] # DOMINO TILE VERTICAL-00-05
1F069 ; [*122C.0020.0002] # DOMINO TILE VERTICAL-00-06
1F06A ; [*122D.0020.0002] # DOMINO TILE VERTICAL-01-00
1F06B ; [*122E.0020.0002] # DOMINO TILE VERTICAL-01-01
1F06C ; [*122F.0020.0002] # DOMINO TILE VERTICAL-01-02
1F06D ; [*1230.0020.0002] # DOMINO TILE VERTICAL-01-03
1F06E ; [*1231.0020.0002] # DOMINO TILE VERTICAL-01-04
1F06F ; [*1232.0020.0002] # DOMINO TILE VERTICAL-01-05
1F070 ; [*1233.0020.0002] # DOMINO TILE VERTICAL-01-06
1F071 ; [*1234.0020.0002] # DOMINO TILE VERTICAL-02-00
1F072 ; [*1235.0020.0002] # DOMINO TILE VERTICAL-02-01
1F073 ; [*1236.0020.0002] # DOMINO TILE VERTICAL-02-02
1F074 ; [*1237.0020.0002] # DOMINO TILE VERTICAL-02-03
1F075 ; [*1238.0020.0002] # DOMINO TILE VERTICAL-02-04
1F076 ; [*1239.0020.0002] # DOMINO TILE VERTICAL-02-05
1F077 ; [*123A.0020.0002] # DOMINO TILE VERTICAL-02-06
1F078 ; [*123B.0020.0002] # DOMINO TILE VERTICAL-03-00
1F079 ; [*123C.0020.0002] # DOMINO TILE VERTICAL-03-01
1F07A ; [*123D.0020.0002] # DOMINO TILE VERTICAL-03-02
1F07B ; [*123E.0020.0002] # DOMINO TILE VERTICAL-03-03
1F07C ; [*123F.0020.0002] # DOMINO TILE VERTICAL-03-04
1F07D ; [*1240.0020.0002] # DOMINO TILE VERTICAL-03-05
1F07E ; [*1241.0020.0002] # DOMINO TILE VERTICAL-03-06
1F07F ; [*1242.0020.0002] # DOMINO TILE VERTICAL-04-00
1F080 ; [*1243.0020.0002] # DOMINO TILE VERTICAL-04-01
1F081 ; [*1244.0020.0002] # DOMINO TILE VERTICAL-04-02
1F082 ; [*1245.0020.0002] # DOMINO TILE VERTICAL-04-03
1F083 ; [*1246.0020.0002] # DOMINO TILE VERTICAL-04-04
1F084 ; [*1247.0020.0002] # DOMINO TILE VERTICAL-04-05
1F085 ; [*1248.0020.0002] # DOMINO TILE VERTICAL-04-06
1F086 ; [*1249.0020.0002] # DOMINO TILE VERTICAL-05-00
1F087 ; [*124A.0020.0002] # DOMINO TILE VERTICAL-05-01
1F088 ; [*124B.0020.0002] # DOMINO TILE VERTICAL-05-02
1F089 ; [*124C.0020.0002] # DOMINO TILE VERTICAL-05-03
1F08A ; [*124D.0020.0002] # DOMINO TILE VERTICAL-05-04
1F08B ; [*124E.0020.0002] # DOMINO TILE VERTICAL-05-05
1F08C ; [*124F.0020.0002] # DOMINO TILE VERTICAL-05-06
1F08D ; [*1250.0020.0002] # DOMINO TILE VERTICAL-06-00
1F08E ; [*1251.0020.0002] # DOMINO TILE VERTICAL-06-01
1F08F ; [*1252.0020.0002] # DOMINO TILE VERTICAL-06-02
1F090 ; [*1253.0020.0002] # DOMINO TILE VERTICAL-06-03
1F091 ; [*1254.0020.0002] # DOMINO TILE VERTICAL-06-04
1F092 ; [*1255.0020.0002] # DOMINO TILE VERTICAL-06-05
1F093 ; [*1256.0020.0002] # DOMINO TILE VERTICAL-06-06
1F0A0 ; [*1257.0020.0002] # PLAYING CARD BACK
1F0A1 ; [*1258.0020.0002] # PLAYING CARD ACE OF SPADES
1F0A2 ; [*1259.0020.0002] # PLAYING CARD TWO OF SPADES
1F0A3 ; [*125A.0020.0002] # PLAYING CARD THREE OF SPADES
1F0A4 ; [*125B.0020.0002] # PLAYING CARD FOUR OF SPADES
1F0A5 ; [*125C.0020.0002] # PLAYING CARD FIVE OF SPADES
1F0A6 ; [*125D.0020.0002] # PLAYING CARD SIX OF SPADES
1F0A7 ; [*125E.0020.0002] # PLAYING CARD SEVEN OF SPADES
1F0A8 ; [*125F.0020.0002] # PLAYING CARD EIGHT OF SPADES
1F0A9 ; [*1260.0020.0002] # PLAYING CARD NINE OF SPADES
1F0AA ; [*1261.0020.0002] # PLAYING CARD TEN OF SPADES
1F0AB ; [*1262.0020.0002] # PLAYING CARD JACK OF SPADES
1F0AC ; [*1263.0020.0002] # PLAYING CARD KNIGHT OF SPADES
1F0AD ; [*1264.0020.0002] # PLAYING CARD QUEEN OF SPADES
1F0AE ; [*1265.0020.0002] # PLAYING CARD KING OF SPADES
1F0B1 ; [*1266.0020.0002] # PLAYING CARD ACE OF HEARTS
1F0B2 ; [*1267.0020.0002] # PLAYING CARD TWO OF HEARTS
1F0B3 ; [*1268.0020.0002] # PLAYING CARD THREE OF HEARTS
1F0B4 ; [*1269.0020.0002] # PLAYING CARD FOUR OF HEARTS
1F0B5 ; [*126A.0020.0002] # PLAYING CARD FIVE OF HEARTS
1F0B6 ; [*126B.0020.0002] # PLAYING CARD SIX OF HEARTS
1F0B7 ; [*126C.0020.0002] # PLAYING CARD SEVEN OF HEARTS
1F0B8 ; [*126D.0020.0002] # PLAYING CARD EIGHT OF HEARTS
1F0B9 ; [*126E.0020.0002] # PLAYING CARD NINE OF HEARTS
1F0BA ; [*126F.0020.0002] # PLAYING CARD TEN OF HEARTS
1F0BB ; [*1270.0020.0002] # PLAYING CARD JACK OF HEARTS
1F0BC ; [*1271.0020.0002] # PLAYING CARD KNIGHT OF HEARTS
1F0BD ; [*1272.0020.0002] # PLAYING CARD QUEEN OF HEARTS
1F0BE ; [*1273.0020.0002] # PLAYING CARD KING OF HEARTS
1F0BF ; [*1274.0020.0002] # PLAYING CARD RED JOKER
1F0C1 ; [*1275.0020.0002] # PLAYING CARD ACE OF DIAMONDS
1F0C2 ; [*1276.0020.0002] # PLAYING CARD TWO OF DIAMONDS
1F0C3 ; [*1277.0020.0002] # PLAYING CARD THREE OF DIAMONDS
1F0C4 ; [*1278.0020.0002] # PLAYING CARD FOUR OF DIAMONDS
1F0C5 ; [*1279.0020.0002] # PLAYING CARD FIVE OF DIAMONDS
1F0C6 ; [*127A.0020.0002] # PLAYING CARD SIX OF DIAMONDS
1F0C7 ; [*127B.0020.0002] # PLAYING CARD SEVEN OF DIAMONDS
1F0C8 ; [*127C.0020.0002] # PLAYING CARD EIGHT OF DIAMONDS
1F0C9 ; [*127D.0020.0002] # PLAYING CARD NINE OF DIAMONDS
1F0CA ; [*127E.0020.0002] # PLAYING CARD TEN OF DIAMONDS
1F0CB ; [*127F.0020.0002] # PLAYING CARD JACK OF DIAMONDS
1F0CC ; [*1280.0020.0002] # PLAYING CARD KNIGHT OF DIAMONDS
1F0CD ; [*1281.0020.0002] # PLAYING CARD QUEEN OF DIAMONDS
1F0CE ; [*1282.0020.0002] # PLAYING CARD KING OF DIAMONDS
1F0CF ; [*1283.0020.0002] # PLAYING CARD BLACK JOKER
1F0D1 ; [*1284.0020.0002] # PLAYING CARD ACE OF CLUBS
1F0D2 ; [*1285.0020.0002] # PLAYING CARD TWO OF CLUBS
1F0D3 ; [*1286.0020.0002] # PLAYING CARD THREE OF CLUBS
1F0D4 ; [*1287.0020.0002] # PLAYING CARD FOUR OF CLUBS
1F0D5 ; [*1288.0020.0002] # PLAYING CARD FIVE OF CLUBS
1F0D6 ; [*1289.0020.0002] # PLAYING CARD SIX OF CLUBS
1F0D7 ; [*128A.0020.0002] # PLAYING CARD SEVEN OF CLUBS
1F0D8 ; [*128B.0020.0002] # PLAYING CARD EIGHT OF CLUBS
1F0D9 ; [*128C.0020.0002] # PLAYING CARD NINE OF CLUBS
1F0DA ; [*128D.0020.0002] # PLAYING CARD TEN OF CLUBS
1F0DB ; [*128E.0020.0002] # PLAYING CARD JACK OF CLUBS
1F0DC ; [*128F.0020.0002] # PLAYING CARD KNIGHT OF CLUBS
1F0DD ; [*1290.0020.0002] # PLAYING CARD QUEEN OF CLUBS
1F0DE ; [*1291.0020.0002] # PLAYING CARD KING OF CLUBS
1F0DF ; [*1292.0020.0002] # PLAYING CARD WHITE JOKER
1F0E0 ; [*1293.0020.0002] # PLAYING CARD FOOL
1F0E1 ; [*1294.0020.0002] # PLAYING CARD TRUMP-1
1F0E2 ; [*1295.0020.0002] # PLAYING CARD TRUMP-2
1F0E3 ; [*1296.0020.0002] # PLAYING CARD TRUMP-3
1F0E4 ; [*1297.0020.0002] # PLAYING CARD TRUMP-4
1F0E5 ; [*1298.0020.0002] # PLAYING CARD TRUMP-5
1F0E6 ; [*1299.0020.0002] # PLAYING CARD TRUMP-6
1F0E7 ; [*129A.0020.0002] # PLAYING CARD TRUMP-7
1F0E8 ; [*129B.0020.0002] # PLAYING CARD TRUMP-8
1F0E9 ; [*129C.0020.0002] # PLAYING CARD TRUMP-9
1F0EA ; [*129D.0020.0002] # PLAYING CARD TRUMP-10
1F0EB ; [*129E.0020.0002] # PLAYING CARD TRUMP-11
1F0EC ; [*129F.0020.0002] # PLAYING CARD TRUMP-12
1F0ED ; [*12A0.0020.0002] # PLAYING CARD TRUMP-13
1F0EE ; [*12A1.0020.0002] # PLAYING CARD TRUMP-14
1F0EF ; [*12A2.0020.0002] # PLAYING CARD TRUMP-15
1F0F0 ; [*12A3.0020.0002] # PLAYING CARD TRUMP-16
1F0F1 ; [*12A4.0020.0002] # PLAYING CARD TRUMP-17
1F0F2 ; [*12A5.0020.0002] # PLAYING CARD TRUMP-18
1F0F3 ; [*12A6.0020.0002] # PLAYING CARD TRUMP-19
1F0F4 ; [*12A7.0020.0002] # PLAYING CARD TRUMP-20
1F0F5 ; [*12A8.0020.0002] # PLAYING CARD TRUMP-21
1F1E6 ; [*0A07.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER A
1F1E7 ; [*0A08.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER B
1F1E8 ; [*0A09.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER C
1F1E9 ; [*0A0A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER D
1F1EA ; [*0A0B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER E
1F1EB ; [*0A0C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER F
1F1EC ; [*0A0D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER G
1F1ED ; [*0A0E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER H
1F1EE ; [*0A0F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER I
1F1EF ; [*0A10.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER J
1F1F0 ; [*0A11.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER K
1F1F1 ; [*0A12.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER L
1F1F2 ; [*0A13.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER M
1F1F3 ; [*0A14.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER N
1F1F4 ; [*0A15.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER O
1F1F5 ; [*0A16.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER P
1F1F6 ; [*0A17.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Q
1F1F7 ; [*0A18.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER R
1F1F8 ; [*0A19.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER S
1F1F9 ; [*0A1A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER T
1F1FA ; [*0A1B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER U
1F1FB ; [*0A1C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER V
1F1FC ; [*0A1D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER W
1F1FD ; [*0A1E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER X
1F1FE ; [*0A1F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Y
1F1FF ; [*0A20.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Z
1F300 ; [*12A9.0020.0002] # CYCLONE
1F301 ; [*12AA.0020.0002] # FOGGY
1F302 ; [*12AB.0020.0002] # CLOSED UMBRELLA
1F303 ; [*12AC.0020.0002] # NIGHT WITH STARS
1F304 ; [*12AD.0020.0002] # SUNRISE OVER MOUNTAINS
1F305 ; [*12AE.0020.0002] # SUNRISE
1F306 ; [*12AF.0020.0002] # CITYSCAPE AT DUSK
1F307 ; [*12B0.0020.0002] # SUNSET OVER BUILDINGS
1F308 ; [*12B1.0020.0002] # RAINBOW
1F309 ; [*12B2.0020.0002] # BRIDGE AT NIGHT
1F30A ; [*12B3.0020.0002] # WATER WAVE
1F30B ; [*12B4.0020.0002] # VOLCANO
1F30C ; [*12B5.0020.0002] # MILKY WAY
1F30D ; [*12B6.0020.0002] # EARTH GLOBE EUROPE-AFRICA
1F30E ; [*12B7.0020.0002] # EARTH GLOBE AMERICAS
1F30F ; [*12B8.0020.0002] # EARTH GLOBE ASIA-AUSTRALIA
1F310 ; [*12B9.0020.0002] # GLOBE WITH MERIDIANS
1F311 ; [*12BA.0020.0002] # NEW MOON SYMBOL
1F312 ; [*12BB.0020.0002] # WAXING CRESCENT MOON SYMBOL
1F313 ; [*12BC.0020.0002] # FIRST QUARTER MOON SYMBOL
1F314 ; [*12BD.0020.0002] # WAXING GIBBOUS MOON SYMBOL
1F315 ; [*12BE.0020.0002] # FULL MOON SYMBOL
1F316 ; [*12BF.0020.0002] # WANING GIBBOUS MOON SYMBOL
1F317 ; [*12C0.0020.0002] # LAST QUARTER MOON SYMBOL
1F318 ; [*12C1.0020.0002] # WANING CRESCENT MOON SYMBOL
1F319 ; [*12C2.0020.0002] # CRESCENT MOON
1F31A ; [*12C3.0020.0002] # NEW MOON WITH FACE
1F31B ; [*12C4.0020.0002] # FIRST QUARTER MOON WITH FACE
1F31C ; [*12C5.0020.0002] # LAST QUARTER MOON WITH FACE
1F31D ; [*12C6.0020.0002] # FULL MOON WITH FACE
1F31E ; [*12C7.0020.0002] # SUN WITH FACE
1F31F ; [*12C8.0020.0002] # GLOWING STAR
1F320 ; [*12C9.0020.0002] # SHOOTING STAR
1F321 ; [*12CA.0020.0002] # THERMOMETER
1F322 ; [*12CB.0020.0002] # BLACK DROPLET
1F323 ; [*12CC.0020.0002] # WHITE SUN
1F324 ; [*12CD.0020.0002] # WHITE SUN WITH SMALL CLOUD
1F325 ; [*12CE.0020.0002] # WHITE SUN BEHIND CLOUD
1F326 ; [*12CF.0020.0002] # WHITE SUN BEHIND CLOUD WITH RAIN
1F327 ; [*12D0.0020.0002] # CLOUD WITH RAIN
1F328 ; [*12D1.0020.0002] # CLOUD WITH SNOW
1F329 ; [*12D2.0020.0002] # CLOUD WITH LIGHTNING
1F32A ; [*12D3.0020.0002] # CLOUD WITH TORNADO
1F32B ; [*12D4.0020.0002] # FOG
1F32C ; [*12D5.0020.0002] # WIND BLOWING FACE
1F32D ; [*12D6.0020.0002] # HOT DOG
1F32E ; [*12D7.0020.0002] # TACO
1F32F ; [*12D8.0020.0002] # BURRITO
1F330 ; [*12D9.0020.0002] # CHESTNUT
1F331 ; [*12DA.0020.0002] # SEEDLING
1F332 ; [*12DB.0020.0002] # EVERGREEN TREE
1F333 ; [*12DC.0020.0002] # DECIDUOUS TREE
1F334 ; [*12DD.0020.0002] # PALM TREE
1F335 ; [*12DE.0020.0002] # CACTUS
1F336 ; [*12DF.0020.0002] # HOT PEPPER
1F337 ; [*12E0.0020.0002] # TULIP
1F338 ; [*12E1.0020.0002] # CHERRY BLOSSOM
1F339 ; [*12E2.0020.0002] # ROSE
1F33A ; [*12E3.0020.0002] # HIBISCUS
1F33B ; [*12E4.0020.0002] # SUNFLOWER
1F33C ; [*12E5.0020.0002] # BLOSSOM
1F33D ; [*12E6.0020.0002] # EAR OF MAIZE
1F33E ; [*12E7.0020.0002] # EAR OF RICE
1F33F ; [*12E8.0020.0002] # HERB
1F340 ; [*12E9.0020.0002] # FOUR LEAF CLOVER
1F341 ; [*12EA.0020.0002] # MAPLE LEAF
1F342 ; [*12EB.0020.0002] # FALLEN LEAF
1F343 ; [*12EC.0020.0002] # LEAF FLUTTERING IN WIND
1F344 ; [*12ED.0020.0002] # MUSHROOM
1F345 ; [*12EE.0020.0002] # TOMATO
1F346 ; [*12EF.0020.0002] # AUBERGINE
1F347 ; [*12F0.0020.0002] # GRAPES
1F348 ; [*12F1.0020.0002] # MELON
1F349 ; [*12F2.0020.0002] # WATERMELON
1F34A ; [*12F3.0020.0002] # TANGERINE
1F34B ; [*12F4.0020.0002] # LEMON
1F34C ; [*12F5.0020.0002] # BANANA
1F34D ; [*12F6.0020.0002] # PINEAPPLE
1F34E ; [*12F7.0020.0002] # RED APPLE
1F34F ; [*12F8.0020.0002] # GREEN APPLE
1F350 ; [*12F9.0020.0002] # PEAR
1F351 ; [*12FA.0020.0002] # PEACH
1F352 ; [*12FB.0020.0002] # CHERRIES
1F353 ; [*12FC.0020.0002] # STRAWBERRY
1F354 ; [*12FD.0020.0002] # HAMBURGER
1F355 ; [*12FE.0020.0002] # SLICE OF PIZZA
1F356 ; [*12FF.0020.0002] # MEAT ON BONE
1F357 ; [*1300.0020.0002] # POULTRY LEG
1F358 ; [*1301.0020.0002] # RICE CRACKER
1F359 ; [*1302.0020.0002] # RICE BALL
1F35A ; [*1303.0020.0002] # COOKED RICE
1F35B ; [*1304.0020.0002] # CURRY AND RICE
1F35C ; [*1305.0020.0002] # STEAMING BOWL
1F35D ; [*1306.0020.0002] # SPAGHETTI
1F35E ; [*1307.0020.0002] # BREAD
1F35F ; [*1308.0020.0002] # FRENCH FRIES
1F360 ; [*1309.0020.0002] # ROASTED SWEET POTATO
1F361 ; [*130A.0020.0002] # DANGO
1F362 ; [*130B.0020.0002] # ODEN
1F363 ; [*130C.0020.0002] # SUSHI
1F364 ; [*130D.0020.0002] # FRIED SHRIMP
1F365 ; [*130E.0020.0002] # FISH CAKE WITH SWIRL DESIGN
1F366 ; [*130F.0020.0002] # SOFT ICE CREAM
1F367 ; [*1310.0020.0002] # SHAVED ICE
1F368 ; [*1311.0020.0002] # ICE CREAM
1F369 ; [*1312.0020.0002] # DOUGHNUT
1F36A ; [*1313.0020.0002] # COOKIE
1F36B ; [*1314.0020.0002] # CHOCOLATE BAR
1F36C ; [*1315.0020.0002] # CANDY
1F36D ; [*1316.0020.0002] # LOLLIPOP
1F36E ; [*1317.0020.0002] # CUSTARD
1F36F ; [*1318.0020.0002] # HONEY POT
1F370 ; [*1319.0020.0002] # SHORTCAKE
1F371 ; [*131A.0020.0002] # BENTO BOX
1F372 ; [*131B.0020.0002] # POT OF FOOD
1F373 ; [*131C.0020.0002] # COOKING
1F374 ; [*131D.0020.0002] # FORK AND KNIFE
1F375 ; [*131E.0020.0002] # TEACUP WITHOUT HANDLE
1F376 ; [*131F.0020.0002] # SAKE BOTTLE AND CUP
1F377 ; [*1320.0020.0002] # WINE GLASS
1F378 ; [*1321.0020.0002] # COCKTAIL GLASS
1F379 ; [*1322.0020.0002] # TROPICAL DRINK
1F37A ; [*1323.0020.0002] # BEER MUG
1F37B ; [*1324.0020.0002] # CLINKING BEER MUGS
1F37C ; [*1325.0020.0002] # BABY BOTTLE
1F37D ; [*1326.0020.0002] # FORK AND KNIFE WITH PLATE
1F37E ; [*1327.0020.0002] # BOTTLE WITH POPPING CORK
1F37F ; [*1328.0020.0002] # POPCORN
1F380 ; [*1329.0020.0002] # RIBBON
1F381 ; [*132A.0020.0002] # WRAPPED PRESENT
1F382 ; [*132B.0020.0002] # BIRTHDAY CAKE
1F383 ; [*132C.0020.0002] # JACK-O-LANTERN
1F384 ; [*132D.0020.0002] # CHRISTMAS TREE
1F385 ; [*132E.0020.0002] # FATHER CHRISTMAS
1F386 ; [*132F.0020.0002] # FIREWORKS
1F387 ; [*1330.0020.0002] # FIREWORK SPARKLER
1F388 ; [*1331.0020.0002] # BALLOON
1F389 ; [*1332.0020.0002] # PARTY POPPER
1F38A ; [*1333.0020.0002] # CONFETTI BALL
1F38B ; [*1334.0020.0002] # TANABATA TREE
1F38C ; [*1335.0020.0002] # CROSSED FLAGS
1F38D ; [*1336.0020.0002] # PINE DECORATION
1F38E ; [*1337.0020.0002] # JAPANESE DOLLS
1F38F ; [*1338.0020.0002] # CARP STREAMER
1F390 ; [*1339.0020.0002] # WIND CHIME
1F391 ; [*133A.0020.0002] # MOON VIEWING CEREMONY
1F392 ; [*133B.0020.0002] # SCHOOL SATCHEL
1F393 ; [*133C.0020.0002] # GRADUATION CAP
1F394 ; [*133D.0020.0002] # HEART WITH TIP ON THE LEFT
1F395 ; [*133E.0020.0002] # BOUQUET OF FLOWERS
1F396 ; [*133F.0020.0002] # MILITARY MEDAL
1F397 ; [*1340.0020.0002] # REMINDER RIBBON
1F398 ; [*1341.0020.0002] # MUSICAL KEYBOARD WITH JACKS
1F399 ; [*1342.0020.0002] # STUDIO MICROPHONE
1F39A ; [*1343.0020.0002] # LEVEL SLIDER
1F39B ; [*1344.0020.0002] # CONTROL KNOBS
1F39C ; [*1345.0020.0002] # BEAMED ASCENDING MUSICAL NOTES
1F39D ; [*1346.0020.0002] # BEAMED DESCENDING MUSICAL NOTES
1F39E ; [*1347.0020.0002] # FILM FRAMES
1F39F ; [*1348.0020.0002] # ADMISSION TICKETS
1F3A0 ; [*1349.0020.0002] # CAROUSEL HORSE
1F3A1 ; [*134A.0020.0002] # FERRIS WHEEL
1F3A2 ; [*134B.0020.0002] # ROLLER COASTER
1F3A3 ; [*134C.0020.0002] # FISHING POLE AND FISH
1F3A4 ; [*134D.0020.0002] # MICROPHONE
1F3A5 ; [*134E.0020.0002] # MOVIE CAMERA
1F3A6 ; [*134F.0020.0002] # CINEMA
1F3A7 ; [*1350.0020.0002] # HEADPHONE
1F3A8 ; [*1351.0020.0002] # ARTIST PALETTE
1F3A9 ; [*1352.0020.0002] # TOP HAT
1F3AA ; [*1353.0020.0002] # CIRCUS TENT
1F3AB ; [*1354.0020.0002] # TICKET
1F3AC ; [*1355.0020.0002] # CLAPPER BOARD
1F3AD ; [*1356.0020.0002] # PERFORMING ARTS
1F3AE ; [*1357.0020.0002] # VIDEO GAME
1F3AF ; [*1358.0020.0002] # DIRECT HIT
1F3B0 ; [*1359.0020.0002] # SLOT MACHINE
1F3B1 ; [*135A.0020.0002] # BILLIARDS
1F3B2 ; [*135B.0020.0002] # GAME DIE
1F3B3 ; [*135C.0020.0002] # BOWLING
1F3B4 ; [*135D.0020.0002] # FLOWER PLAYING CARDS
1F3B5 ; [*135E.0020.0002] # MUSICAL NOTE
1F3B6 ; [*135F.0020.0002] # MULTIPLE MUSICAL NOTES
1F3B7 ; [*1360.0020.0002] # SAXOPHONE
1F3B8 ; [*1361.0020.0002] # GUITAR
1F3B9 ; [*1362.0020.0002] # MUSICAL KEYBOARD
1F3BA ; [*1363.0020.0002] # TRUMPET
1F3BB ; [*1364.0020.0002] # VIOLIN
1F3BC ; [*1365.0020.0002] # MUSICAL SCORE
1F3BD ; [*1366.0020.0002] # RUNNING SHIRT WITH SASH
1F3BE ; [*1367.0020.0002] # TENNIS RACQUET AND BALL
1F3BF ; [*1368.0020.0002] # SKI AND SKI BOOT
1F3C0 ; [*1369.0020.0002] # BASKETBALL AND HOOP
1F3C1 ; [*136A.0020.0002] # CHEQUERED FLAG
1F3C2 ; [*136B.0020.0002] # SNOWBOARDER
1F3C3 ; [*136C.0020.0002] # RUNNER
1F3C4 ; [*136D.0020.0002] # SURFER
1F3C5 ; [*136E.0020.0002] # SPORTS MEDAL
1F3C6 ; [*136F.0020.0002] # TROPHY
1F3C7 ; [*1370.0020.0002] # HORSE RACING
1F3C8 ; [*1371.0020.0002] # AMERICAN FOOTBALL
1F3C9 ; [*1372.0020.0002] # RUGBY FOOTBALL
1F3CA ; [*1373.0020.0002] # SWIMMER
1F3CB ; [*1374.0020.0002] # WEIGHT LIFTER
1F3CC ; [*1375.0020.0002] # GOLFER
1F3CD ; [*1376.0020.0002] # RACING MOTORCYCLE
1F3CE ; [*1377.0020.0002] # RACING CAR
1F3CF ; [*1378.0020.0002] # CRICKET BAT AND BALL
1F3D0 ; [*1379.0020.0002] # VOLLEYBALL
1F3D1 ; [*137A.0020.0002] # FIELD HOCKEY STICK AND BALL
1F3D2 ; [*137B.0020.0002] # ICE HOCKEY STICK AND PUCK
1F3D3 ; [*137C.0020.0002] # TABLE TENNIS PADDLE AND BALL
1F3D4 ; [*137D.0020.0002] # SNOW CAPPED MOUNTAIN
1F3D5 ; [*137E.0020.0002] # CAMPING
1F3D6 ; [*137F.0020.0002] # BEACH WITH UMBRELLA
1F3D7 ; [*1380.0020.0002] # BUILDING CONSTRUCTION
1F3D8 ; [*1381.0020.0002] # HOUSE BUILDINGS
1F3D9 ; [*1382.0020.0002] # CITYSCAPE
1F3DA ; [*1383.0020.0002] # DERELICT HOUSE BUILDING
1F3DB ; [*1384.0020.0002] # CLASSICAL BUILDING
1F3DC ; [*1385.0020.0002] # DESERT
1F3DD ; [*1386.0020.0002] # DESERT ISLAND
1F3DE ; [*1387.0020.0002] # NATIONAL PARK
1F3DF ; [*1388.0020.0002] # STADIUM
1F3E0 ; [*1389.0020.0002] # HOUSE BUILDING
1F3E1 ; [*138A.0020.0002] # HOUSE WITH GARDEN
1F3E2 ; [*138B.0020.0002] # OFFICE BUILDING
1F3E3 ; [*138C.0020.0002] # JAPANESE POST OFFICE
1F3E4 ; [*138D.0020.0002] # EUROPEAN POST OFFICE
1F3E5 ; [*138E.0020.0002] # HOSPITAL
1F3E6 ; [*138F.0020.0002] # BANK
1F3E7 ; [*1390.0020.0002] # AUTOMATED TELLER MACHINE
1F3E8 ; [*1391.0020.0002] # HOTEL
1F3E9 ; [*1392.0020.0002] # LOVE HOTEL
1F3EA ; [*1393.0020.0002] # CONVENIENCE STORE
1F3EB ; [*1394.0020.0002] # SCHOOL
1F3EC ; [*1395.0020.0002] # DEPARTMENT STORE
1F3ED ; [*1396.0020.0002] # FACTORY
1F3EE ; [*1397.0020.0002] # IZAKAYA LANTERN
1F3EF ; [*1398.0020.0002] # JAPANESE CASTLE
1F3F0 ; [*1399.0020.0002] # EUROPEAN CASTLE
1F3F1 ; [*139A.0020.0002] # WHITE PENNANT
1F3F2 ; [*139B.0020.0002] # BLACK PENNANT
1F3F3 ; [*139C.0020.0002] # WAVING WHITE FLAG
1F3F4 ; [*139D.0020.0002] # WAVING BLACK FLAG
1F3F5 ; [*139E.0020.0002] # ROSETTE
1F3F6 ; [*139F.0020.0002] # BLACK ROSETTE
1F3F7 ; [*13A0.0020.0002] # LABEL
1F3F8 ; [*13A1.0020.0002] # BADMINTON RACQUET AND SHUTTLECOCK
1F3F9 ; [*13A2.0020.0002] # BOW AND ARROW
1F3FA ; [*13A3.0020.0002] # AMPHORA
1F3FB ; [*13A4.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-1-2
1F3FC ; [*13A5.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-3
1F3FD ; [*13A6.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-4
1F3FE ; [*13A7.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-5
1F3FF ; [*13A8.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-6
1F400 ; [*13A9.0020.0002] # RAT
1F401 ; [*13AA.0020.0002] # MOUSE
1F402 ; [*13AB.0020.0002] # OX
1F403 ; [*13AC.0020.0002] # WATER BUFFALO
1F404 ; [*13AD.0020.0002] # COW
1F405 ; [*13AE.0020.0002] # TIGER
1F406 ; [*13AF.0020.0002] # LEOPARD
1F407 ; [*13B0.0020.0002] # RABBIT
1F408 ; [*13B1.0020.0002] # CAT
1F409 ; [*13B2.0020.0002] # DRAGON
1F40A ; [*13B3.0020.0002] # CROCODILE
1F40B ; [*13B4.0020.0002] # WHALE
1F40C ; [*13B5.0020.0002] # SNAIL
1F40D ; [*13B6.0020.0002] # SNAKE
1F40E ; [*13B7.0020.0002] # HORSE
1F40F ; [*13B8.0020.0002] # RAM
1F410 ; [*13B9.0020.0002] # GOAT
1F411 ; [*13BA.0020.0002] # SHEEP
1F412 ; [*13BB.0020.0002] # MONKEY
1F413 ; [*13BC.0020.0002] # ROOSTER
1F414 ; [*13BD.0020.0002] # CHICKEN
1F415 ; [*13BE.0020.0002] # DOG
1F416 ; [*13BF.0020.0002] # PIG
1F417 ; [*13C0.0020.0002] # BOAR
1F418 ; [*13C1.0020.0002] # ELEPHANT
1F419 ; [*13C2.0020.0002] # OCTOPUS
1F41A ; [*13C3.0020.0002] # SPIRAL SHELL
1F41B ; [*13C4.0020.0002] # BUG
1F41C ; [*13C5.0020.0002] # ANT
1F41D ; [*13C6.0020.0002] # HONEYBEE
1F41E ; [*13C7.0020.0002] # LADY BEETLE
1F41F ; [*13C8.0020.0002] # FISH
1F420 ; [*13C9.0020.0002] # TROPICAL FISH
1F421 ; [*13CA.0020.0002] # BLOWFISH
1F422 ; [*13CB.0020.0002] # TURTLE
1F423 ; [*13CC.0020.0002] # HATCHING CHICK
1F424 ; [*13CD.0020.0002] # BABY CHICK
1F425 ; [*13CE.0020.0002] # FRONT-FACING BABY CHICK
1F426 ; [*13CF.0020.0002] # BIRD
1F427 ; [*13D0.0020.0002] # PENGUIN
1F428 ; [*13D1.0020.0002] # KOALA
1F429 ; [*13D2.0020.0002] # POODLE
1F42A ; [*13D3.0020.0002] # DROMEDARY CAMEL
1F42B ; [*13D4.0020.0002] # BACTRIAN CAMEL
1F42C ; [*13D5.0020.0002] # DOLPHIN
1F42D ; [*13D6.0020.0002] # MOUSE FACE
1F42E ; [*13D7.0020.0002] # COW FACE
1F42F ; [*13D8.0020.0002] # TIGER FACE
1F430 ; [*13D9.0020.0002] # RABBIT FACE
1F431 ; [*13DA.0020.0002] # CAT FACE
1F432 ; [*13DB.0020.0002] # DRAGON FACE
1F433 ; [*13DC.0020.0002] # SPOUTING WHALE
1F434 ; [*13DD.0020.0002] # HORSE FACE
1F435 ; [*13DE.0020.0002] # MONKEY FACE
1F436 ; [*13DF.0020.0002] # DOG FACE
1F437 ; [*13E0.0020.0002] # PIG FACE
1F438 ; [*13E1.0020.0002] # FROG FACE
1F439 ; [*13E2.0020.0002] # HAMSTER FACE
1F43A ; [*13E3.0020.0002] # WOLF FACE
1F43B ; [*13E4.0020.0002] # BEAR FACE
1F43C ; [*13E5.0020.0002] # PANDA FACE
1F43D ; [*13E6.0020.0002] # PIG NOSE
1F43E ; [*13E7.0020.0002] # PAW PRINTS
1F43F ; [*13E8.0020.0002] # CHIPMUNK
1F440 ; [*13E9.0020.0002] # EYES
1F441 ; [*13EA.0020.0002] # EYE
1F442 ; [*13EB.0020.0002] # EAR
1F443 ; [*13EC.0020.0002] # NOSE
1F444 ; [*13ED.0020.0002] # MOUTH
1F445 ; [*13EE.0020.0002] # TONGUE
1F446 ; [*13EF.0020.0002] # WHITE UP POINTING BACKHAND INDEX
1F447 ; [*13F0.0020.0002] # WHITE DOWN POINTING BACKHAND INDEX
1F448 ; [*13F1.0020.0002] # WHITE LEFT POINTING BACKHAND INDEX
1F449 ; [*13F2.0020.0002] # WHITE RIGHT POINTING BACKHAND INDEX
1F44A ; [*13F3.0020.0002] # FISTED HAND SIGN
1F44B ; [*13F4.0020.0002] # WAVING HAND SIGN
1F44C ; [*13F5.0020.0002] # OK HAND SIGN
1F44D ; [*13F6.0020.0002] # THUMBS UP SIGN
1F44E ; [*13F7.0020.0002] # THUMBS DOWN SIGN
1F44F ; [*13F8.0020.0002] # CLAPPING HANDS SIGN
1F450 ; [*13F9.0020.0002] # OPEN HANDS SIGN
1F451 ; [*13FA.0020.0002] # CROWN
1F452 ; [*13FB.0020.0002] # WOMANS HAT
1F453 ; [*13FC.0020.0002] # EYEGLASSES
1F454 ; [*13FD.0020.0002] # NECKTIE
1F455 ; [*13FE.0020.0002] # T-SHIRT
1F456 ; [*13FF.0020.0002] # JEANS
1F457 ; [*1400.0020.0002] # DRESS
1F458 ; [*1401.0020.0002] # KIMONO
1F459 ; [*1402.0020.0002] # BIKINI
1F45A ; [*1403.0020.0002] # WOMANS CLOTHES
1F45B ; [*1404.0020.0002] # PURSE
1F45C ; [*1405.0020.0002] # HANDBAG
1F45D ; [*1406.0020.0002] # POUCH
1F45E ; [*1407.0020.0002] # MANS SHOE
1F45F ; [*1408.0020.0002] # ATHLETIC SHOE
1F460 ; [*1409.0020.0002] # HIGH-HEELED SHOE
1F461 ; [*140A.0020.0002] # WOMANS SANDAL
1F462 ; [*140B.0020.0002] # WOMANS BOOTS
1F463 ; [*140C.0020.0002] # FOOTPRINTS
1F464 ; [*140D.0020.0002] # BUST IN SILHOUETTE
1F465 ; [*140E.0020.0002] # BUSTS IN SILHOUETTE
1F466 ; [*140F.0020.0002] # BOY
1F467 ; [*1410.0020.0002] # GIRL
1F468 ; [*1411.0020.0002] # MAN
1F469 ; [*1412.0020.0002] # WOMAN
1F46A ; [*1413.0020.0002] # FAMILY
1F46B ; [*1414.0020.0002] # MAN AND WOMAN HOLDING HANDS
1F46C ; [*1415.0020.0002] # TWO MEN HOLDING HANDS
1F46D ; [*1416.0020.0002] # TWO WOMEN HOLDING HANDS
1F46E ; [*1417.0020.0002] # POLICE OFFICER
1F46F ; [*1418.0020.0002] # WOMAN WITH BUNNY EARS
1F470 ; [*1419.0020.0002] # BRIDE WITH VEIL
1F471 ; [*141A.0020.0002] # PERSON WITH BLOND HAIR
1F472 ; [*141B.0020.0002] # MAN WITH GUA PI MAO
1F473 ; [*141C.0020.0002] # MAN WITH TURBAN
1F474 ; [*141D.0020.0002] # OLDER MAN
1F475 ; [*141E.0020.0002] # OLDER WOMAN
1F476 ; [*141F.0020.0002] # BABY
1F477 ; [*1420.0020.0002] # CONSTRUCTION WORKER
1F478 ; [*1421.0020.0002] # PRINCESS
1F479 ; [*1422.0020.0002] # JAPANESE OGRE
1F47A ; [*1423.0020.0002] # JAPANESE GOBLIN
1F47B ; [*1424.0020.0002] # GHOST
1F47C ; [*1425.0020.0002] # BABY ANGEL
1F47D ; [*1426.0020.0002] # EXTRATERRESTRIAL ALIEN
1F47E ; [*1427.0020.0002] # ALIEN MONSTER
1F47F ; [*1428.0020.0002] # IMP
1F480 ; [*1429.0020.0002] # SKULL
1F481 ; [*142A.0020.0002] # INFORMATION DESK PERSON
1F482 ; [*142B.0020.0002] # GUARDSMAN
1F483 ; [*142C.0020.0002] # DANCER
1F484 ; [*142D.0020.0002] # LIPSTICK
1F485 ; [*142E.0020.0002] # NAIL POLISH
1F486 ; [*142F.0020.0002] # FACE MASSAGE
1F487 ; [*1430.0020.0002] # HAIRCUT
1F488 ; [*1431.0020.0002] # BARBER POLE
1F489 ; [*1432.0020.0002] # SYRINGE
1F48A ; [*1433.0020.0002] # PILL
1F48B ; [*1434.0020.0002] # KISS MARK
1F48C ; [*1435.0020.0002] # LOVE LETTER
1F48D ; [*1436.0020.0002] # RING
1F48E ; [*1437.0020.0002] # GEM STONE
1F48F ; [*1438.0020.0002] # KISS
1F490 ; [*1439.0020.0002] # BOUQUET
1F491 ; [*143A.0020.0002] # COUPLE WITH HEART
1F492 ; [*143B.0020.0002] # WEDDING
1F493 ; [*143C.0020.0002] # BEATING HEART
1F494 ; [*143D.0020.0002] # BROKEN HEART
1F495 ; [*143E.0020.0002] # TWO HEARTS
1F496 ; [*143F.0020.0002] # SPARKLING HEART
1F497 ; [*1440.0020.0002] # GROWING HEART
1F498 ; [*1441.0020.0002] # HEART WITH ARROW
1F499 ; [*1442.0020.0002] # BLUE HEART
1F49A ; [*1443.0020.0002] # GREEN HEART
1F49B ; [*1444.0020.0002] # YELLOW HEART
1F49C ; [*1445.0020.0002] # PURPLE HEART
1F49D ; [*1446.0020.0002] # HEART WITH RIBBON
1F49E ; [*1447.0020.0002] # REVOLVING HEARTS
1F49F ; [*1448.0020.0002] # HEART DECORATION
1F4A0 ; [*1449.0020.0002] # DIAMOND SHAPE WITH A DOT INSIDE
1F4A1 ; [*144A.0020.0002] # ELECTRIC LIGHT BULB
1F4A2 ; [*144B.0020.0002] # ANGER SYMBOL
1F4A3 ; [*144C.0020.0002] # BOMB
1F4A4 ; [*144D.0020.0002] # SLEEPING SYMBOL
1F4A5 ; [*144E.0020.0002] # COLLISION SYMBOL
1F4A6 ; [*144F.0020.0002] # SPLASHING SWEAT SYMBOL
1F4A7 ; [*1450.0020.0002] # DROPLET
1F4A8 ; [*1451.0020.0002] # DASH SYMBOL
1F4A9 ; [*1452.0020.0002] # PILE OF POO
1F4AA ; [*1453.0020.0002] # FLEXED BICEPS
1F4AB ; [*1454.0020.0002] # DIZZY SYMBOL
1F4AC ; [*1455.0020.0002] # SPEECH BALLOON
1F4AD ; [*1456.0020.0002] # THOUGHT BALLOON
1F4AE ; [*1457.0020.0002] # WHITE FLOWER
1F4AF ; [*1458.0020.0002] # HUNDRED POINTS SYMBOL
1F4B0 ; [*1459.0020.0002] # MONEY BAG
1F4B1 ; [*145A.0020.0002] # CURRENCY EXCHANGE
1F4B2 ; [*145B.0020.0002] # HEAVY DOLLAR SIGN
1F4B3 ; [*145C.0020.0002] # CREDIT CARD
1F4B4 ; [*145D.0020.0002] # BANKNOTE WITH YEN SIGN
1F4B5 ; [*145E.0020.0002] # BANKNOTE WITH DOLLAR SIGN
1F4B6 ; [*145F.0020.0002] # BANKNOTE WITH EURO SIGN
1F4B7 ; [*1460.0020.0002] # BANKNOTE WITH POUND SIGN
1F4B8 ; [*1461.0020.0002] # MONEY WITH WINGS
1F4B9 ; [*1462.0020.0002] # CHART WITH UPWARDS TREND AND YEN SIGN
1F4BA ; [*1463.0020.0002] # SEAT
1F4BB ; [*1464.0020.0002] # PERSONAL COMPUTER
1F4BC ; [*1465.0020.0002] # BRIEFCASE
1F4BD ; [*1466.0020.0002] # MINIDISC
1F4BE ; [*1467.0020.0002] # FLOPPY DISK
1F4BF ; [*1468.0020.0002] # OPTICAL DISC
1F4C0 ; [*1469.0020.0002] # DVD
1F4C1 ; [*146A.0020.0002] # FILE FOLDER
1F4C2 ; [*146B.0020.0002] # OPEN FILE FOLDER
1F4C3 ; [*146C.0020.0002] # PAGE WITH CURL
1F4C4 ; [*146D.0020.0002] # PAGE FACING UP
1F4C5 ; [*146E.0020.0002] # CALENDAR
1F4C6 ; [*146F.0020.0002] # TEAR-OFF CALENDAR
1F4C7 ; [*1470.0020.0002] # CARD INDEX
1F4C8 ; [*1471.0020.0002] # CHART WITH UPWARDS TREND
1F4C9 ; [*1472.0020.0002] # CHART WITH DOWNWARDS TREND
1F4CA ; [*1473.0020.0002] # BAR CHART
1F4CB ; [*1474.0020.0002] # CLIPBOARD
1F4CC ; [*1475.0020.0002] # PUSHPIN
1F4CD ; [*1476.0020.0002] # ROUND PUSHPIN
1F4CE ; [*1477.0020.0002] # PAPERCLIP
1F4CF ; [*1478.0020.0002] # STRAIGHT RULER
1F4D0 ; [*1479.0020.0002] # TRIANGULAR RULER
1F4D1 ; [*147A.0020.0002] # BOOKMARK TABS
1F4D2 ; [*147B.0020.0002] # LEDGER
1F4D3 ; [*147C.0020.0002] # NOTEBOOK
1F4D4 ; [*147D.0020.0002] # NOTEBOOK WITH DECORATIVE COVER
1F4D5 ; [*147E.0020.0002] # CLOSED BOOK
1F4D6 ; [*147F.0020.0002] # OPEN BOOK
1F4D7 ; [*1480.0020.0002] # GREEN BOOK
1F4D8 ; [*1481.0020.0002] # BLUE BOOK
1F4D9 ; [*1482.0020.0002] # ORANGE BOOK
1F4DA ; [*1483.0020.0002] # BOOKS
1F4DB ; [*1484.0020.0002] # NAME BADGE
1F4DC ; [*1485.0020.0002] # SCROLL
1F4DD ; [*1486.0020.0002] # MEMO
1F4DE ; [*1487.0020.0002] # TELEPHONE RECEIVER
1F4DF ; [*1488.0020.0002] # PAGER
1F4E0 ; [*1489.0020.0002] # FAX MACHINE
1F4E1 ; [*148A.0020.0002] # SATELLITE ANTENNA
1F4E2 ; [*148B.0020.0002] # PUBLIC ADDRESS LOUDSPEAKER
1F4E3 ; [*148C.0020.0002] # CHEERING MEGAPHONE
1F4E4 ; [*148D.0020.0002] # OUTBOX TRAY
1F4E5 ; [*148E.0020.0002] # INBOX TRAY
1F4E6 ; [*148F.0020.0002] # PACKAGE
1F4E7 ; [*1490.0020.0002] # E-MAIL SYMBOL
1F4E8 ; [*1491.0020.0002] # INCOMING ENVELOPE
1F4E9 ; [*1492.0020.0002] # ENVELOPE WITH DOWNWARDS ARROW ABOVE
1F4EA ; [*1493.0020.0002] # CLOSED MAILBOX WITH LOWERED FLAG
1F4EB ; [*1494.0020.0002] # CLOSED MAILBOX WITH RAISED FLAG
1F4EC ; [*1495.0020.0002] # OPEN MAILBOX WITH RAISED FLAG
1F4ED ; [*1496.0020.0002] # OPEN MAILBOX WITH LOWERED FLAG
1F4EE ; [*1497.0020.0002] # POSTBOX
1F4EF ; [*1498.0020.0002] # POSTAL HORN
1F4F0 ; [*1499.0020.0002] # NEWSPAPER
1F4F1 ; [*149A.0020.0002] # MOBILE PHONE
1F4F2 ; [*149B.0020.0002] # MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT
1F4F3 ; [*149C.0020.0002] # VIBRATION MODE
1F4F4 ; [*149D.0020.0002] # MOBILE PHONE OFF
1F4F5 ; [*149E.0020.0002] # NO MOBILE PHONES
1F4F6 ; [*149F.0020.0002] # ANTENNA WITH BARS
1F4F7 ; [*14A0.0020.0002] # CAMERA
1F4F8 ; [*14A1.0020.0002] # CAMERA WITH FLASH
1F4F9 ; [*14A2.0020.0002] # VIDEO CAMERA
1F4FA ; [*14A3.0020.0002] # TELEVISION
1F4FB ; [*14A4.0020.0002] # RADIO
1F4FC ; [*14A5.0020.0002] # VIDEOCASSETTE
1F4FD ; [*14A6.0020.0002] # FILM PROJECTOR
1F4FE ; [*14A7.0020.0002] # PORTABLE STEREO
1F4FF ; [*14A8.0020.0002] # PRAYER BEADS
1F500 ; [*14A9.0020.0002] # TWISTED RIGHTWARDS ARROWS
1F501 ; [*14AA.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS
1F502 ; [*14AB.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY
1F503 ; [*14AC.0020.0002] # CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
1F504 ; [*14AD.0020.0002] # ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
1F505 ; [*14AE.0020.0002] # LOW BRIGHTNESS SYMBOL
1F506 ; [*14AF.0020.0002] # HIGH BRIGHTNESS SYMBOL
1F507 ; [*14B0.0020.0002] # SPEAKER WITH CANCELLATION STROKE
1F508 ; [*14B1.0020.0002] # SPEAKER
1F509 ; [*14B2.0020.0002] # SPEAKER WITH ONE SOUND WAVE
1F50A ; [*14B3.0020.0002] # SPEAKER WITH THREE SOUND WAVES
1F50B ; [*14B4.0020.0002] # BATTERY
1F50C ; [*14B5.0020.0002] # ELECTRIC PLUG
1F50D ; [*14B6.0020.0002] # LEFT-POINTING MAGNIFYING GLASS
1F50E ; [*14B7.0020.0002] # RIGHT-POINTING MAGNIFYING GLASS
1F50F ; [*14B8.0020.0002] # LOCK WITH INK PEN
1F510 ; [*14B9.0020.0002] # CLOSED LOCK WITH KEY
1F511 ; [*14BA.0020.0002] # KEY
1F512 ; [*14BB.0020.0002] # LOCK
1F513 ; [*14BC.0020.0002] # OPEN LOCK
1F514 ; [*14BD.0020.0002] # BELL
1F515 ; [*14BE.0020.0002] # BELL WITH CANCELLATION STROKE
1F516 ; [*14BF.0020.0002] # BOOKMARK
1F517 ; [*14C0.0020.0002] # LINK SYMBOL
1F518 ; [*14C1.0020.0002] # RADIO BUTTON
1F519 ; [*14C2.0020.0002] # BACK WITH LEFTWARDS ARROW ABOVE
1F51A ; [*14C3.0020.0002] # END WITH LEFTWARDS ARROW ABOVE
1F51B ; [*14C4.0020.0002] # ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE
1F51C ; [*14C5.0020.0002] # SOON WITH RIGHTWARDS ARROW ABOVE
1F51D ; [*14C6.0020.0002] # TOP WITH UPWARDS ARROW ABOVE
1F51E ; [*14C7.0020.0002] # NO ONE UNDER EIGHTEEN SYMBOL
1F51F ; [*14C8.0020.0002] # KEYCAP TEN
1F520 ; [*14C9.0020.0002] # INPUT SYMBOL FOR LATIN CAPITAL LETTERS
1F521 ; [*14CA.0020.0002] # INPUT SYMBOL FOR LATIN SMALL LETTERS
1F522 ; [*14CB.0020.0002] # INPUT SYMBOL FOR NUMBERS
1F523 ; [*14CC.0020.0002] # INPUT SYMBOL FOR SYMBOLS
1F524 ; [*14CD.0020.0002] # INPUT SYMBOL FOR LATIN LETTERS
1F525 ; [*14CE.0020.0002] # FIRE
1F526 ; [*14CF.0020.0002] # ELECTRIC TORCH
1F527 ; [*14D0.0020.0002] # WRENCH
1F528 ; [*14D1.0020.0002] # HAMMER
1F529 ; [*14D2.0020.0002] # NUT AND BOLT
1F52A ; [*14D3.0020.0002] # HOCHO
1F52B ; [*14D4.0020.0002] # PISTOL
1F52C ; [*14D5.0020.0002] # MICROSCOPE
1F52D ; [*14D6.0020.0002] # TELESCOPE
1F52E ; [*14D7.0020.0002] # CRYSTAL BALL
1F52F ; [*14D8.0020.0002] # SIX POINTED STAR WITH MIDDLE DOT
1F530 ; [*14D9.0020.0002] # JAPANESE SYMBOL FOR BEGINNER
1F531 ; [*14DA.0020.0002] # TRIDENT EMBLEM
1F532 ; [*14DB.0020.0002] # BLACK SQUARE BUTTON
1F533 ; [*14DC.0020.0002] # WHITE SQUARE BUTTON
1F534 ; [*14DD.0020.0002] # LARGE RED CIRCLE
1F535 ; [*14DE.0020.0002] # LARGE BLUE CIRCLE
1F536 ; [*14DF.0020.0002] # LARGE ORANGE DIAMOND
1F537 ; [*14E0.0020.0002] # LARGE BLUE DIAMOND
1F538 ; [*14E1.0020.0002] # SMALL ORANGE DIAMOND
1F539 ; [*14E2.0020.0002] # SMALL BLUE DIAMOND
1F53A ; [*14E3.0020.0002] # UP-POINTING RED TRIANGLE
1F53B ; [*14E4.0020.0002] # DOWN-POINTING RED TRIANGLE
1F53C ; [*14E5.0020.0002] # UP-POINTING SMALL RED TRIANGLE
1F53D ; [*14E6.0020.0002] # DOWN-POINTING SMALL RED TRIANGLE
1F53E ; [*14E7.0020.0002] # LOWER RIGHT SHADOWED WHITE CIRCLE
1F53F ; [*14E8.0020.0002] # UPPER RIGHT SHADOWED WHITE CIRCLE
1F540 ; [*14E9.0020.0002] # CIRCLED CROSS POMMEE
1F541 ; [*14EA.0020.0002] # CROSS POMMEE WITH HALF-CIRCLE BELOW
1F542 ; [*14EB.0020.0002] # CROSS POMMEE
1F543 ; [*14EC.0020.0002] # NOTCHED LEFT SEMICIRCLE WITH THREE DOTS
1F544 ; [*14ED.0020.0002] # NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS
1F545 ; [*14EE.0020.0002] # SYMBOL FOR MARKS CHAPTER
1F546 ; [*14EF.0020.0002] # WHITE LATIN CROSS
1F547 ; [*14F0.0020.0002] # HEAVY LATIN CROSS
1F548 ; [*14F1.0020.0002] # CELTIC CROSS
1F549 ; [*14F2.0020.0002] # OM SYMBOL
1F54A ; [*14F3.0020.0002] # DOVE OF PEACE
1F54B ; [*14F4.0020.0002] # KAABA
1F54C ; [*14F5.0020.0002] # MOSQUE
1F54D ; [*14F6.0020.0002] # SYNAGOGUE
1F54E ; [*14F7.0020.0002] # MENORAH WITH NINE BRANCHES
1F54F ; [*14F8.0020.0002] # BOWL OF HYGIEIA
1F550 ; [*14F9.0020.0002] # CLOCK FACE ONE OCLOCK
1F551 ; [*14FA.0020.0002] # CLOCK FACE TWO OCLOCK
1F552 ; [*14FB.0020.0002] # CLOCK FACE THREE OCLOCK
1F553 ; [*14FC.0020.0002] # CLOCK FACE FOUR OCLOCK
1F554 ; [*14FD.0020.0002] # CLOCK FACE FIVE OCLOCK
1F555 ; [*14FE.0020.0002] # CLOCK FACE SIX OCLOCK
1F556 ; [*14FF.0020.0002] # CLOCK FACE SEVEN OCLOCK
1F557 ; [*1500.0020.0002] # CLOCK FACE EIGHT OCLOCK
1F558 ; [*1501.0020.0002] # CLOCK FACE NINE OCLOCK
1F559 ; [*1502.0020.0002] # CLOCK FACE TEN OCLOCK
1F55A ; [*1503.0020.0002] # CLOCK FACE ELEVEN OCLOCK
1F55B ; [*1504.0020.0002] # CLOCK FACE TWELVE OCLOCK
1F55C ; [*1505.0020.0002] # CLOCK FACE ONE-THIRTY
1F55D ; [*1506.0020.0002] # CLOCK FACE TWO-THIRTY
1F55E ; [*1507.0020.0002] # CLOCK FACE THREE-THIRTY
1F55F ; [*1508.0020.0002] # CLOCK FACE FOUR-THIRTY
1F560 ; [*1509.0020.0002] # CLOCK FACE FIVE-THIRTY
1F561 ; [*150A.0020.0002] # CLOCK FACE SIX-THIRTY
1F562 ; [*150B.0020.0002] # CLOCK FACE SEVEN-THIRTY
1F563 ; [*150C.0020.0002] # CLOCK FACE EIGHT-THIRTY
1F564 ; [*150D.0020.0002] # CLOCK FACE NINE-THIRTY
1F565 ; [*150E.0020.0002] # CLOCK FACE TEN-THIRTY
1F566 ; [*150F.0020.0002] # CLOCK FACE ELEVEN-THIRTY
1F567 ; [*1510.0020.0002] # CLOCK FACE TWELVE-THIRTY
1F568 ; [*1511.0020.0002] # RIGHT SPEAKER
1F569 ; [*1512.0020.0002] # RIGHT SPEAKER WITH ONE SOUND WAVE
1F56A ; [*1513.0020.0002] # RIGHT SPEAKER WITH THREE SOUND WAVES
1F56B ; [*1514.0020.0002] # BULLHORN
1F56C ; [*1515.0020.0002] # BULLHORN WITH SOUND WAVES
1F56D ; [*1516.0020.0002] # RINGING BELL
1F56E ; [*1517.0020.0002] # BOOK
1F56F ; [*1518.0020.0002] # CANDLE
1F570 ; [*1519.0020.0002] # MANTELPIECE CLOCK
1F571 ; [*151A.0020.0002] # BLACK SKULL AND CROSSBONES
1F572 ; [*151B.0020.0002] # NO PIRACY
1F573 ; [*151C.0020.0002] # HOLE
1F574 ; [*151D.0020.0002] # MAN IN BUSINESS SUIT LEVITATING
1F575 ; [*151E.0020.0002] # SLEUTH OR SPY
1F576 ; [*151F.0020.0002] # DARK SUNGLASSES
1F577 ; [*1520.0020.0002] # SPIDER
1F578 ; [*1521.0020.0002] # SPIDER WEB
1F579 ; [*1522.0020.0002] # JOYSTICK
1F57A ; [*1523.0020.0002] # MAN DANCING
1F57B ; [*1524.0020.0002] # LEFT HAND TELEPHONE RECEIVER
1F57C ; [*1525.0020.0002] # TELEPHONE RECEIVER WITH PAGE
1F57D ; [*1526.0020.0002] # RIGHT HAND TELEPHONE RECEIVER
1F57E ; [*1527.0020.0002] # WHITE TOUCHTONE TELEPHONE
1F57F ; [*1528.0020.0002] # BLACK TOUCHTONE TELEPHONE
1F580 ; [*1529.0020.0002] # TELEPHONE ON TOP OF MODEM
1F581 ; [*152A.0020.0002] # CLAMSHELL MOBILE PHONE
1F582 ; [*152B.0020.0002] # BACK OF ENVELOPE
1F583 ; [*152C.0020.0002] # STAMPED ENVELOPE
1F584 ; [*152D.0020.0002] # ENVELOPE WITH LIGHTNING
1F585 ; [*152E.0020.0002] # FLYING ENVELOPE
1F586 ; [*152F.0020.0002] # PEN OVER STAMPED ENVELOPE
1F587 ; [*1530.0020.0002] # LINKED PAPERCLIPS
1F588 ; [*1531.0020.0002] # BLACK PUSHPIN
1F589 ; [*1532.0020.0002] # LOWER LEFT PENCIL
1F58A ; [*1533.0020.0002] # LOWER LEFT BALLPOINT PEN
1F58B ; [*1534.0020.0002] # LOWER LEFT FOUNTAIN PEN
1F58C ; [*1535.0020.0002] # LOWER LEFT PAINTBRUSH
1F58D ; [*1536.0020.0002] # LOWER LEFT CRAYON
1F58E ; [*1537.0020.0002] # LEFT WRITING HAND
1F58F ; [*1538.0020.0002] # TURNED OK HAND SIGN
1F590 ; [*1539.0020.0002] # RAISED HAND WITH FINGERS SPLAYED
1F591 ; [*153A.0020.0002] # REVERSED RAISED HAND WITH FINGERS SPLAYED
1F592 ; [*153B.0020.0002] # REVERSED THUMBS UP SIGN
1F593 ; [*153C.0020.0002] # REVERSED THUMBS DOWN SIGN
1F594 ; [*153D.0020.0002] # REVERSED VICTORY HAND
1F595 ; [*153E.0020.0002] # REVERSED HAND WITH MIDDLE FINGER EXTENDED
1F596 ; [*153F.0020.0002] # RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
1F597 ; [*1540.0020.0002] # WHITE DOWN POINTING LEFT HAND INDEX
1F598 ; [*1541.0020.0002] # SIDEWAYS WHITE LEFT POINTING INDEX
1F599 ; [*1542.0020.0002] # SIDEWAYS WHITE RIGHT POINTING INDEX
1F59A ; [*1543.0020.0002] # SIDEWAYS BLACK LEFT POINTING INDEX
1F59B ; [*1544.0020.0002] # SIDEWAYS BLACK RIGHT POINTING INDEX
1F59C ; [*1545.0020.0002] # BLACK LEFT POINTING BACKHAND INDEX
1F59D ; [*1546.0020.0002] # BLACK RIGHT POINTING BACKHAND INDEX
1F59E ; [*1547.0020.0002] # SIDEWAYS WHITE UP POINTING INDEX
1F59F ; [*1548.0020.0002] # SIDEWAYS WHITE DOWN POINTING INDEX
1F5A0 ; [*1549.0020.0002] # SIDEWAYS BLACK UP POINTING INDEX
1F5A1 ; [*154A.0020.0002] # SIDEWAYS BLACK DOWN POINTING INDEX
1F5A2 ; [*154B.0020.0002] # BLACK UP POINTING BACKHAND INDEX
1F5A3 ; [*154C.0020.0002] # BLACK DOWN POINTING BACKHAND INDEX
1F5A4 ; [*154D.0020.0002] # BLACK HEART
1F5A5 ; [*154E.0020.0002] # DESKTOP COMPUTER
1F5A6 ; [*154F.0020.0002] # KEYBOARD AND MOUSE
1F5A7 ; [*1550.0020.0002] # THREE NETWORKED COMPUTERS
1F5A8 ; [*1551.0020.0002] # PRINTER
1F5A9 ; [*1552.0020.0002] # POCKET CALCULATOR
1F5AA ; [*1553.0020.0002] # BLACK HARD SHELL FLOPPY DISK
1F5AB ; [*1554.0020.0002] # WHITE HARD SHELL FLOPPY DISK
1F5AC ; [*1555.0020.0002] # SOFT SHELL FLOPPY DISK
1F5AD ; [*1556.0020.0002] # TAPE CARTRIDGE
1F5AE ; [*1557.0020.0002] # WIRED KEYBOARD
1F5AF ; [*1558.0020.0002] # ONE BUTTON MOUSE
1F5B0 ; [*1559.0020.0002] # TWO BUTTON MOUSE
1F5B1 ; [*155A.0020.0002] # THREE BUTTON MOUSE
1F5B2 ; [*155B.0020.0002] # TRACKBALL
1F5B3 ; [*155C.0020.0002] # OLD PERSONAL COMPUTER
1F5B4 ; [*155D.0020.0002] # HARD DISK
1F5B5 ; [*155E.0020.0002] # SCREEN
1F5B6 ; [*155F.0020.0002] # PRINTER ICON
1F5B7 ; [*1560.0020.0002] # FAX ICON
1F5B8 ; [*1561.0020.0002] # OPTICAL DISC ICON
1F5B9 ; [*1562.0020.0002] # DOCUMENT WITH TEXT
1F5BA ; [*1563.0020.0002] # DOCUMENT WITH TEXT AND PICTURE
1F5BB ; [*1564.0020.0002] # DOCUMENT WITH PICTURE
1F5BC ; [*1565.0020.0002] # FRAME WITH PICTURE
1F5BD ; [*1566.0020.0002] # FRAME WITH TILES
1F5BE ; [*1567.0020.0002] # FRAME WITH AN X
1F5BF ; [*1568.0020.0002] # BLACK FOLDER
1F5C0 ; [*1569.0020.0002] # FOLDER
1F5C1 ; [*156A.0020.0002] # OPEN FOLDER
1F5C2 ; [*156B.0020.0002] # CARD INDEX DIVIDERS
1F5C3 ; [*156C.0020.0002] # CARD FILE BOX
1F5C4 ; [*156D.0020.0002] # FILE CABINET
1F5C5 ; [*156E.0020.0002] # EMPTY NOTE
1F5C6 ; [*156F.0020.0002] # EMPTY NOTE PAGE
1F5C7 ; [*1570.0020.0002] # EMPTY NOTE PAD
1F5C8 ; [*1571.0020.0002] # NOTE
1F5C9 ; [*1572.0020.0002] # NOTE PAGE
1F5CA ; [*1573.0020.0002] # NOTE PAD
1F5CB ; [*1574.0020.0002] # EMPTY DOCUMENT
1F5CC ; [*1575.0020.0002] # EMPTY PAGE
1F5CD ; [*1576.0020.0002] # EMPTY PAGES
1F5CE ; [*1577.0020.0002] # DOCUMENT
1F5CF ; [*1578.0020.0002] # PAGE
1F5D0 ; [*1579.0020.0002] # PAGES
1F5D1 ; [*157A.0020.0002] # WASTEBASKET
1F5D2 ; [*157B.0020.0002] # SPIRAL NOTE PAD
1F5D3 ; [*157C.0020.0002] # SPIRAL CALENDAR PAD
1F5D4 ; [*157D.0020.0002] # DESKTOP WINDOW
1F5D5 ; [*157E.0020.0002] # MINIMIZE
1F5D6 ; [*157F.0020.0002] # MAXIMIZE
1F5D7 ; [*1580.0020.0002] # OVERLAP
1F5D8 ; [*1581.0020.0002] # CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS
1F5D9 ; [*1582.0020.0002] # CANCELLATION X
1F5DA ; [*1583.0020.0002] # INCREASE FONT SIZE SYMBOL
1F5DB ; [*1584.0020.0002] # DECREASE FONT SIZE SYMBOL
1F5DC ; [*1585.0020.0002] # COMPRESSION
1F5DD ; [*1586.0020.0002] # OLD KEY
1F5DE ; [*1587.0020.0002] # ROLLED-UP NEWSPAPER
1F5DF ; [*1588.0020.0002] # PAGE WITH CIRCLED TEXT
1F5E0 ; [*1589.0020.0002] # STOCK CHART
1F5E1 ; [*158A.0020.0002] # DAGGER KNIFE
1F5E2 ; [*158B.0020.0002] # LIPS
1F5E3 ; [*158C.0020.0002] # SPEAKING HEAD IN SILHOUETTE
1F5E4 ; [*158D.0020.0002] # THREE RAYS ABOVE
1F5E5 ; [*158E.0020.0002] # THREE RAYS BELOW
1F5E6 ; [*158F.0020.0002] # THREE RAYS LEFT
1F5E7 ; [*1590.0020.0002] # THREE RAYS RIGHT
1F5E8 ; [*1591.0020.0002] # LEFT SPEECH BUBBLE
1F5E9 ; [*1592.0020.0002] # RIGHT SPEECH BUBBLE
1F5EA ; [*1593.0020.0002] # TWO SPEECH BUBBLES
1F5EB ; [*1594.0020.0002] # THREE SPEECH BUBBLES
1F5EC ; [*1595.0020.0002] # LEFT THOUGHT BUBBLE
1F5ED ; [*1596.0020.0002] # RIGHT THOUGHT BUBBLE
1F5EE ; [*1597.0020.0002] # LEFT ANGER BUBBLE
1F5EF ; [*1598.0020.0002] # RIGHT ANGER BUBBLE
1F5F0 ; [*1599.0020.0002] # MOOD BUBBLE
1F5F1 ; [*159A.0020.0002] # LIGHTNING MOOD BUBBLE
1F5F2 ; [*159B.0020.0002] # LIGHTNING MOOD
1F5F3 ; [*159C.0020.0002] # BALLOT BOX WITH BALLOT
1F5F4 ; [*159D.0020.0002] # BALLOT SCRIPT X
1F5F5 ; [*159E.0020.0002] # BALLOT BOX WITH SCRIPT X
1F5F6 ; [*159F.0020.0002] # BALLOT BOLD SCRIPT X
1F5F7 ; [*15A0.0020.0002] # BALLOT BOX WITH BOLD SCRIPT X
1F5F8 ; [*15A1.0020.0002] # LIGHT CHECK MARK
1F5F9 ; [*15A2.0020.0002] # BALLOT BOX WITH BOLD CHECK
1F5FA ; [*15A3.0020.0002] # WORLD MAP
1F5FB ; [*15A4.0020.0002] # MOUNT FUJI
1F5FC ; [*15A5.0020.0002] # TOKYO TOWER
1F5FD ; [*15A6.0020.0002] # STATUE OF LIBERTY
1F5FE ; [*15A7.0020.0002] # SILHOUETTE OF JAPAN
1F5FF ; [*15A8.0020.0002] # MOYAI
1F600 ; [*15FB.0020.0002] # GRINNING FACE
1F601 ; [*15FC.0020.0002] # GRINNING FACE WITH SMILING EYES
1F602 ; [*15FD.0020.0002] # FACE WITH TEARS OF JOY
1F603 ; [*15FE.0020.0002] # SMILING FACE WITH OPEN MOUTH
1F604 ; [*15FF.0020.0002] # SMILING FACE WITH OPEN MOUTH AND SMILING EYES
1F605 ; [*1600.0020.0002] # SMILING FACE WITH OPEN MOUTH AND COLD SWEAT
1F606 ; [*1601.0020.0002] # SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES
1F607 ; [*1602.0020.0002] # SMILING FACE WITH HALO
1F608 ; [*1603.0020.0002] # SMILING FACE WITH HORNS
1F609 ; [*1604.0020.0002] # WINKING FACE
1F60A ; [*1605.0020.0002] # SMILING FACE WITH SMILING EYES
1F60B ; [*1606.0020.0002] # FACE SAVOURING DELICIOUS FOOD
1F60C ; [*1607.0020.0002] # RELIEVED FACE
1F60D ; [*1608.0020.0002] # SMILING FACE WITH HEART-SHAPED EYES
1F60E ; [*1609.0020.0002] # SMILING FACE WITH SUNGLASSES
1F60F ; [*160A.0020.0002] # SMIRKING FACE
1F610 ; [*160B.0020.0002] # NEUTRAL FACE
1F611 ; [*160C.0020.0002] # EXPRESSIONLESS FACE
1F612 ; [*160D.0020.0002] # UNAMUSED FACE
1F613 ; [*160E.0020.0002] # FACE WITH COLD SWEAT
1F614 ; [*160F.0020.0002] # PENSIVE FACE
1F615 ; [*1610.0020.0002] # CONFUSED FACE
1F616 ; [*1611.0020.0002] # CONFOUNDED FACE
1F617 ; [*1612.0020.0002] # KISSING FACE
1F618 ; [*1613.0020.0002] # FACE THROWING A KISS
1F619 ; [*1614.0020.0002] # KISSING FACE WITH SMILING EYES
1F61A ; [*1615.0020.0002] # KISSING FACE WITH CLOSED EYES
1F61B ; [*1616.0020.0002] # FACE WITH STUCK-OUT TONGUE
1F61C ; [*1617.0020.0002] # FACE WITH STUCK-OUT TONGUE AND WINKING EYE
1F61D ; [*1618.0020.0002] # FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES
1F61E ; [*1619.0020.0002] # DISAPPOINTED FACE
1F61F ; [*161A.0020.0002] # WORRIED FACE
1F620 ; [*161B.0020.0002] # ANGRY FACE
1F621 ; [*161C.0020.0002] # POUTING FACE
1F622 ; [*161D.0020.0002] # CRYING FACE
1F623 ; [*161E.0020.0002] # PERSEVERING FACE
1F624 ; [*161F.0020.0002] # FACE WITH LOOK OF TRIUMPH
1F625 ; [*1620.0020.0002] # DISAPPOINTED BUT RELIEVED FACE
1F626 ; [*1621.0020.0002] # FROWNING FACE WITH OPEN MOUTH
1F627 ; [*1622.0020.0002] # ANGUISHED FACE
1F628 ; [*1623.0020.0002] # FEARFUL FACE
1F629 ; [*1624.0020.0002] # WEARY FACE
1F62A ; [*1625.0020.0002] # SLEEPY FACE
1F62B ; [*1626.0020.0002] # TIRED FACE
1F62C ; [*1627.0020.0002] # GRIMACING FACE
1F62D ; [*1628.0020.0002] # LOUDLY CRYING FACE
1F62E ; [*1629.0020.0002] # FACE WITH OPEN MOUTH
1F62F ; [*162A.0020.0002] # HUSHED FACE
1F630 ; [*162B.0020.0002] # FACE WITH OPEN MOUTH AND COLD SWEAT
1F631 ; [*162C.0020.0002] # FACE SCREAMING IN FEAR
1F632 ; [*162D.0020.0002] # ASTONISHED FACE
1F633 ; [*162E.0020.0002] # FLUSHED FACE
1F634 ; [*162F.0020.0002] # SLEEPING FACE
1F635 ; [*1630.0020.0002] # DIZZY FACE
1F636 ; [*1631.0020.0002] # FACE WITHOUT MOUTH
1F637 ; [*1632.0020.0002] # FACE WITH MEDICAL MASK
1F638 ; [*1633.0020.0002] # GRINNING CAT FACE WITH SMILING EYES
1F639 ; [*1634.0020.0002] # CAT FACE WITH TEARS OF JOY
1F63A ; [*1635.0020.0002] # SMILING CAT FACE WITH OPEN MOUTH
1F63B ; [*1636.0020.0002] # SMILING CAT FACE WITH HEART-SHAPED EYES
1F63C ; [*1637.0020.0002] # CAT FACE WITH WRY SMILE
1F63D ; [*1638.0020.0002] # KISSING CAT FACE WITH CLOSED EYES
1F63E ; [*1639.0020.0002] # POUTING CAT FACE
1F63F ; [*163A.0020.0002] # CRYING CAT FACE
1F640 ; [*163B.0020.0002] # WEARY CAT FACE
1F641 ; [*163C.0020.0002] # SLIGHTLY FROWNING FACE
1F642 ; [*163D.0020.0002] # SLIGHTLY SMILING FACE
1F643 ; [*163E.0020.0002] # UPSIDE-DOWN FACE
1F644 ; [*163F.0020.0002] # FACE WITH ROLLING EYES
1F645 ; [*1640.0020.0002] # FACE WITH NO GOOD GESTURE
1F646 ; [*1641.0020.0002] # FACE WITH OK GESTURE
1F647 ; [*1642.0020.0002] # PERSON BOWING DEEPLY
1F648 ; [*1643.0020.0002] # SEE-NO-EVIL MONKEY
1F649 ; [*1644.0020.0002] # HEAR-NO-EVIL MONKEY
1F64A ; [*1645.0020.0002] # SPEAK-NO-EVIL MONKEY
1F64B ; [*1646.0020.0002] # HAPPY PERSON RAISING ONE HAND
1F64C ; [*1647.0020.0002] # PERSON RAISING BOTH HANDS IN CELEBRATION
1F64D ; [*1648.0020.0002] # PERSON FROWNING
1F64E ; [*1649.0020.0002] # PERSON WITH POUTING FACE
1F64F ; [*164A.0020.0002] # PERSON WITH FOLDED HANDS
1F650 ; [*164B.0020.0002] # NORTH WEST POINTING LEAF
1F651 ; [*164C.0020.0002] # SOUTH WEST POINTING LEAF
1F652 ; [*164D.0020.0002] # NORTH EAST POINTING LEAF
1F653 ; [*164E.0020.0002] # SOUTH EAST POINTING LEAF
1F654 ; [*164F.0020.0002] # TURNED NORTH WEST POINTING LEAF
1F655 ; [*1650.0020.0002] # TURNED SOUTH WEST POINTING LEAF
1F656 ; [*1651.0020.0002] # TURNED NORTH EAST POINTING LEAF
1F657 ; [*1652.0020.0002] # TURNED SOUTH EAST POINTING LEAF
1F658 ; [*1653.0020.0002] # NORTH WEST POINTING VINE LEAF
1F659 ; [*1654.0020.0002] # SOUTH WEST POINTING VINE LEAF
1F65A ; [*1655.0020.0002] # NORTH EAST POINTING VINE LEAF
1F65B ; [*1656.0020.0002] # SOUTH EAST POINTING VINE LEAF
1F65C ; [*1657.0020.0002] # HEAVY NORTH WEST POINTING VINE LEAF
1F65D ; [*1658.0020.0002] # HEAVY SOUTH WEST POINTING VINE LEAF
1F65E ; [*1659.0020.0002] # HEAVY NORTH EAST POINTING VINE LEAF
1F65F ; [*165A.0020.0002] # HEAVY SOUTH EAST POINTING VINE LEAF
1F660 ; [*165B.0020.0002] # NORTH WEST POINTING BUD
1F661 ; [*165C.0020.0002] # SOUTH WEST POINTING BUD
1F662 ; [*165D.0020.0002] # NORTH EAST POINTING BUD
1F663 ; [*165E.0020.0002] # SOUTH EAST POINTING BUD
1F664 ; [*165F.0020.0002] # HEAVY NORTH WEST POINTING BUD
1F665 ; [*1660.0020.0002] # HEAVY SOUTH WEST POINTING BUD
1F666 ; [*1661.0020.0002] # HEAVY NORTH EAST POINTING BUD
1F667 ; [*1662.0020.0002] # HEAVY SOUTH EAST POINTING BUD
1F668 ; [*1663.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT
1F669 ; [*1664.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE
1F66A ; [*1665.0020.0002] # SOLID QUILT SQUARE ORNAMENT
1F66B ; [*1666.0020.0002] # SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE
1F66C ; [*1667.0020.0002] # LEFTWARDS ROCKET
1F66D ; [*1668.0020.0002] # UPWARDS ROCKET
1F66E ; [*1669.0020.0002] # RIGHTWARDS ROCKET
1F66F ; [*166A.0020.0002] # DOWNWARDS ROCKET
1F670 ; [*166B.0020.0002] # SCRIPT LIGATURE ET ORNAMENT
1F671 ; [*166C.0020.0002] # HEAVY SCRIPT LIGATURE ET ORNAMENT
1F672 ; [*166D.0020.0002] # LIGATURE OPEN ET ORNAMENT
1F673 ; [*166E.0020.0002] # HEAVY LIGATURE OPEN ET ORNAMENT
1F674 ; [*166F.0020.0002] # HEAVY AMPERSAND ORNAMENT
1F675 ; [*1670.0020.0002] # SWASH AMPERSAND ORNAMENT
1F676 ; [*1671.0020.0002] # SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
1F677 ; [*1672.0020.0002] # SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
1F678 ; [*1673.0020.0002] # SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
1F679 ; [*1674.0020.0002] # HEAVY INTERROBANG ORNAMENT
1F67A ; [*1675.0020.0002] # SANS-SERIF INTERROBANG ORNAMENT
1F67B ; [*1676.0020.0002] # HEAVY SANS-SERIF INTERROBANG ORNAMENT
1F67C ; [*1677.0020.0002] # VERY HEAVY SOLIDUS
1F67D ; [*1678.0020.0002] # VERY HEAVY REVERSE SOLIDUS
1F67E ; [*1679.0020.0002] # CHECKER BOARD
1F67F ; [*167A.0020.0002] # REVERSE CHECKER BOARD
1F680 ; [*167B.0020.0002] # ROCKET
1F681 ; [*167C.0020.0002] # HELICOPTER
1F682 ; [*167D.0020.0002] # STEAM LOCOMOTIVE
1F683 ; [*167E.0020.0002] # RAILWAY CAR
1F684 ; [*167F.0020.0002] # HIGH-SPEED TRAIN
1F685 ; [*1680.0020.0002] # HIGH-SPEED TRAIN WITH BULLET NOSE
1F686 ; [*1681.0020.0002] # TRAIN
1F687 ; [*1682.0020.0002] # METRO
1F688 ; [*1683.0020.0002] # LIGHT RAIL
1F689 ; [*1684.0020.0002] # STATION
1F68A ; [*1685.0020.0002] # TRAM
1F68B ; [*1686.0020.0002] # TRAM CAR
1F68C ; [*1687.0020.0002] # BUS
1F68D ; [*1688.0020.0002] # ONCOMING BUS
1F68E ; [*1689.0020.0002] # TROLLEYBUS
1F68F ; [*168A.0020.0002] # BUS STOP
1F690 ; [*168B.0020.0002] # MINIBUS
1F691 ; [*168C.0020.0002] # AMBULANCE
1F692 ; [*168D.0020.0002] # FIRE ENGINE
1F693 ; [*168E.0020.0002] # POLICE CAR
1F694 ; [*168F.0020.0002] # ONCOMING POLICE CAR
1F695 ; [*1690.0020.0002] # TAXI
1F696 ; [*1691.0020.0002] # ONCOMING TAXI
1F697 ; [*1692.0020.0002] # AUTOMOBILE
1F698 ; [*1693.0020.0002] # ONCOMING AUTOMOBILE
1F699 ; [*1694.0020.0002] # RECREATIONAL VEHICLE
1F69A ; [*1695.0020.0002] # DELIVERY TRUCK
1F69B ; [*1696.0020.0002] # ARTICULATED LORRY
1F69C ; [*1697.0020.0002] # TRACTOR
1F69D ; [*1698.0020.0002] # MONORAIL
1F69E ; [*1699.0020.0002] # MOUNTAIN RAILWAY
1F69F ; [*169A.0020.0002] # SUSPENSION RAILWAY
1F6A0 ; [*169B.0020.0002] # MOUNTAIN CABLEWAY
1F6A1 ; [*169C.0020.0002] # AERIAL TRAMWAY
1F6A2 ; [*169D.0020.0002] # SHIP
1F6A3 ; [*169E.0020.0002] # ROWBOAT
1F6A4 ; [*169F.0020.0002] # SPEEDBOAT
1F6A5 ; [*16A0.0020.0002] # HORIZONTAL TRAFFIC LIGHT
1F6A6 ; [*16A1.0020.0002] # VERTICAL TRAFFIC LIGHT
1F6A7 ; [*16A2.0020.0002] # CONSTRUCTION SIGN
1F6A8 ; [*16A3.0020.0002] # POLICE CARS REVOLVING LIGHT
1F6A9 ; [*16A4.0020.0002] # TRIANGULAR FLAG ON POST
1F6AA ; [*16A5.0020.0002] # DOOR
1F6AB ; [*16A6.0020.0002] # NO ENTRY SIGN
1F6AC ; [*16A7.0020.0002] # SMOKING SYMBOL
1F6AD ; [*16A8.0020.0002] # NO SMOKING SYMBOL
1F6AE ; [*16A9.0020.0002] # PUT LITTER IN ITS PLACE SYMBOL
1F6AF ; [*16AA.0020.0002] # DO NOT LITTER SYMBOL
1F6B0 ; [*16AB.0020.0002] # POTABLE WATER SYMBOL
1F6B1 ; [*16AC.0020.0002] # NON-POTABLE WATER SYMBOL
1F6B2 ; [*16AD.0020.0002] # BICYCLE
1F6B3 ; [*16AE.0020.0002] # NO BICYCLES
1F6B4 ; [*16AF.0020.0002] # BICYCLIST
1F6B5 ; [*16B0.0020.0002] # MOUNTAIN BICYCLIST
1F6B6 ; [*16B1.0020.0002] # PEDESTRIAN
1F6B7 ; [*16B2.0020.0002] # NO PEDESTRIANS
1F6B8 ; [*16B3.0020.0002] # CHILDREN CROSSING
1F6B9 ; [*16B4.0020.0002] # MENS SYMBOL
1F6BA ; [*16B5.0020.0002] # WOMENS SYMBOL
1F6BB ; [*16B6.0020.0002] # RESTROOM
1F6BC ; [*16B7.0020.0002] # BABY SYMBOL
1F6BD ; [*16B8.0020.0002] # TOILET
1F6BE ; [*16B9.0020.0002] # WATER CLOSET
1F6BF ; [*16BA.0020.0002] # SHOWER
1F6C0 ; [*16BB.0020.0002] # BATH
1F6C1 ; [*16BC.0020.0002] # BATHTUB
1F6C2 ; [*16BD.0020.0002] # PASSPORT CONTROL
1F6C3 ; [*16BE.0020.0002] # CUSTOMS
1F6C4 ; [*16BF.0020.0002] # BAGGAGE CLAIM
1F6C5 ; [*16C0.0020.0002] # LEFT LUGGAGE
1F6C6 ; [*16C1.0020.0002] # TRIANGLE WITH ROUNDED CORNERS
1F6C7 ; [*16C2.0020.0002] # PROHIBITED SIGN
1F6C8 ; [*16C3.0020.0002] # CIRCLED INFORMATION SOURCE
1F6C9 ; [*16C4.0020.0002] # BOYS SYMBOL
1F6CA ; [*16C5.0020.0002] # GIRLS SYMBOL
1F6CB ; [*16C6.0020.0002] # COUCH AND LAMP
1F6CC ; [*16C7.0020.0002] # SLEEPING ACCOMMODATION
1F6CD ; [*16C8.0020.0002] # SHOPPING BAGS
1F6CE ; [*16C9.0020.0002] # BELLHOP BELL
1F6CF ; [*16CA.0020.0002] # BED
1F6D0 ; [*16CB.0020.0002] # PLACE OF WORSHIP
1F6D1 ; [*16CC.0020.0002] # OCTAGONAL SIGN
1F6D2 ; [*16CD.0020.0002] # SHOPPING TROLLEY
1F6E0 ; [*16CE.0020.0002] # HAMMER AND WRENCH
1F6E1 ; [*16CF.0020.0002] # SHIELD
1F6E2 ; [*16D0.0020.0002] # OIL DRUM
1F6E3 ; [*16D1.0020.0002] # MOTORWAY
1F6E4 ; [*16D2.0020.0002] # RAILWAY TRACK
1F6E5 ; [*16D3.0020.0002] # MOTOR BOAT
1F6E6 ; [*16D4.0020.0002] # UP-POINTING MILITARY AIRPLANE
1F6E7 ; [*16D5.0020.0002] # UP-POINTING AIRPLANE
1F6E8 ; [*16D6.0020.0002] # UP-POINTING SMALL AIRPLANE
1F6E9 ; [*16D7.0020.0002] # SMALL AIRPLANE
1F6EA ; [*16D8.0020.0002] # NORTHEAST-POINTING AIRPLANE
1F6EB ; [*16D9.0020.0002] # AIRPLANE DEPARTURE
1F6EC ; [*16DA.0020.0002] # AIRPLANE ARRIVING
1F6F0 ; [*16DB.0020.0002] # SATELLITE
1F6F1 ; [*16DC.0020.0002] # ONCOMING FIRE ENGINE
1F6F2 ; [*16DD.0020.0002] # DIESEL LOCOMOTIVE
1F6F3 ; [*16DE.0020.0002] # PASSENGER SHIP
1F6F4 ; [*16DF.0020.0002] # SCOOTER
1F6F5 ; [*16E0.0020.0002] # MOTOR SCOOTER
1F6F6 ; [*16E1.0020.0002] # CANOE
1F700 ; [*16E2.0020.0002] # ALCHEMICAL SYMBOL FOR QUINTESSENCE
1F701 ; [*16E3.0020.0002] # ALCHEMICAL SYMBOL FOR AIR
1F702 ; [*16E4.0020.0002] # ALCHEMICAL SYMBOL FOR FIRE
1F703 ; [*16E5.0020.0002] # ALCHEMICAL SYMBOL FOR EARTH
1F704 ; [*16E6.0020.0002] # ALCHEMICAL SYMBOL FOR WATER
1F705 ; [*16E7.0020.0002] # ALCHEMICAL SYMBOL FOR AQUAFORTIS
1F706 ; [*16E8.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA
1F707 ; [*16E9.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA-2
1F708 ; [*16EA.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE
1F709 ; [*16EB.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE-2
1F70A ; [*16EC.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR
1F70B ; [*16ED.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-2
1F70C ; [*16EE.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-3
1F70D ; [*16EF.0020.0002] # ALCHEMICAL SYMBOL FOR SULFUR
1F70E ; [*16F0.0020.0002] # ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR
1F70F ; [*16F1.0020.0002] # ALCHEMICAL SYMBOL FOR BLACK SULFUR
1F710 ; [*16F2.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE
1F711 ; [*16F3.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2
1F712 ; [*16F4.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3
1F713 ; [*16F5.0020.0002] # ALCHEMICAL SYMBOL FOR CINNABAR
1F714 ; [*16F6.0020.0002] # ALCHEMICAL SYMBOL FOR SALT
1F715 ; [*16F7.0020.0002] # ALCHEMICAL SYMBOL FOR NITRE
1F716 ; [*16F8.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL
1F717 ; [*16F9.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL-2
1F718 ; [*16FA.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT
1F719 ; [*16FB.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT-2
1F71A ; [*16FC.0020.0002] # ALCHEMICAL SYMBOL FOR GOLD
1F71B ; [*16FD.0020.0002] # ALCHEMICAL SYMBOL FOR SILVER
1F71C ; [*16FE.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE
1F71D ; [*16FF.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE-2
1F71E ; [*1700.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF IRON
1F71F ; [*1701.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF IRON
1F720 ; [*1702.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ORE
1F721 ; [*1703.0020.0002] # ALCHEMICAL SYMBOL FOR IRON-COPPER ORE
1F722 ; [*1704.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER
1F723 ; [*1705.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER
1F724 ; [*1706.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2
1F725 ; [*1707.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE
1F726 ; [*1708.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE
1F727 ; [*1709.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER
1F728 ; [*170A.0020.0002] # ALCHEMICAL SYMBOL FOR VERDIGRIS
1F729 ; [*170B.0020.0002] # ALCHEMICAL SYMBOL FOR TIN ORE
1F72A ; [*170C.0020.0002] # ALCHEMICAL SYMBOL FOR LEAD ORE
1F72B ; [*170D.0020.0002] # ALCHEMICAL SYMBOL FOR ANTIMONY ORE
1F72C ; [*170E.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY
1F72D ; [*170F.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY
1F72E ; [*1710.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY
1F72F ; [*1711.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY
1F730 ; [*1712.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY
1F731 ; [*1713.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2
1F732 ; [*1714.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS
1F733 ; [*1715.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-2
1F734 ; [*1716.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-3
1F735 ; [*1717.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-4
1F736 ; [*1718.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI
1F737 ; [*1719.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI-2
1F738 ; [*171A.0020.0002] # ALCHEMICAL SYMBOL FOR MARCASITE
1F739 ; [*171B.0020.0002] # ALCHEMICAL SYMBOL FOR SAL-AMMONIAC
1F73A ; [*171C.0020.0002] # ALCHEMICAL SYMBOL FOR ARSENIC
1F73B ; [*171D.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR
1F73C ; [*171E.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR-2
1F73D ; [*171F.0020.0002] # ALCHEMICAL SYMBOL FOR AURIPIGMENT
1F73E ; [*1720.0020.0002] # ALCHEMICAL SYMBOL FOR BISMUTH ORE
1F73F ; [*1721.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR
1F740 ; [*1722.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR-2
1F741 ; [*1723.0020.0002] # ALCHEMICAL SYMBOL FOR QUICK LIME
1F742 ; [*1724.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX
1F743 ; [*1725.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-2
1F744 ; [*1726.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-3
1F745 ; [*1727.0020.0002] # ALCHEMICAL SYMBOL FOR ALUM
1F746 ; [*1728.0020.0002] # ALCHEMICAL SYMBOL FOR OIL
1F747 ; [*1729.0020.0002] # ALCHEMICAL SYMBOL FOR SPIRIT
1F748 ; [*172A.0020.0002] # ALCHEMICAL SYMBOL FOR TINCTURE
1F749 ; [*172B.0020.0002] # ALCHEMICAL SYMBOL FOR GUM
1F74A ; [*172C.0020.0002] # ALCHEMICAL SYMBOL FOR WAX
1F74B ; [*172D.0020.0002] # ALCHEMICAL SYMBOL FOR POWDER
1F74C ; [*172E.0020.0002] # ALCHEMICAL SYMBOL FOR CALX
1F74D ; [*172F.0020.0002] # ALCHEMICAL SYMBOL FOR TUTTY
1F74E ; [*1730.0020.0002] # ALCHEMICAL SYMBOL FOR CAPUT MORTUUM
1F74F ; [*1731.0020.0002] # ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE
1F750 ; [*1732.0020.0002] # ALCHEMICAL SYMBOL FOR CADUCEUS
1F751 ; [*1733.0020.0002] # ALCHEMICAL SYMBOL FOR TRIDENT
1F752 ; [*1734.0020.0002] # ALCHEMICAL SYMBOL FOR STARRED TRIDENT
1F753 ; [*1735.0020.0002] # ALCHEMICAL SYMBOL FOR LODESTONE
1F754 ; [*1736.0020.0002] # ALCHEMICAL SYMBOL FOR SOAP
1F755 ; [*1737.0020.0002] # ALCHEMICAL SYMBOL FOR URINE
1F756 ; [*1738.0020.0002] # ALCHEMICAL SYMBOL FOR HORSE DUNG
1F757 ; [*1739.0020.0002] # ALCHEMICAL SYMBOL FOR ASHES
1F758 ; [*173A.0020.0002] # ALCHEMICAL SYMBOL FOR POT ASHES
1F759 ; [*173B.0020.0002] # ALCHEMICAL SYMBOL FOR BRICK
1F75A ; [*173C.0020.0002] # ALCHEMICAL SYMBOL FOR POWDERED BRICK
1F75B ; [*173D.0020.0002] # ALCHEMICAL SYMBOL FOR AMALGAM
1F75C ; [*173E.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM
1F75D ; [*173F.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2
1F75E ; [*1740.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATION
1F75F ; [*1741.0020.0002] # ALCHEMICAL SYMBOL FOR PRECIPITATE
1F760 ; [*1742.0020.0002] # ALCHEMICAL SYMBOL FOR DISTILL
1F761 ; [*1743.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE
1F762 ; [*1744.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE-2
1F763 ; [*1745.0020.0002] # ALCHEMICAL SYMBOL FOR PURIFY
1F764 ; [*1746.0020.0002] # ALCHEMICAL SYMBOL FOR PUTREFACTION
1F765 ; [*1747.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE
1F766 ; [*1748.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-2
1F767 ; [*1749.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-3
1F768 ; [*174A.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-4
1F769 ; [*174B.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-5
1F76A ; [*174C.0020.0002] # ALCHEMICAL SYMBOL FOR ALEMBIC
1F76B ; [*174D.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF MARY
1F76C ; [*174E.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF VAPOURS
1F76D ; [*174F.0020.0002] # ALCHEMICAL SYMBOL FOR RETORT
1F76E ; [*1750.0020.0002] # ALCHEMICAL SYMBOL FOR HOUR
1F76F ; [*1751.0020.0002] # ALCHEMICAL SYMBOL FOR NIGHT
1F770 ; [*1752.0020.0002] # ALCHEMICAL SYMBOL FOR DAY-NIGHT
1F771 ; [*1753.0020.0002] # ALCHEMICAL SYMBOL FOR MONTH
1F772 ; [*1754.0020.0002] # ALCHEMICAL SYMBOL FOR HALF DRAM
1F773 ; [*1755.0020.0002] # ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780 ; [*1756.0020.0002] # BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE
1F781 ; [*1757.0020.0002] # BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE
1F782 ; [*1758.0020.0002] # BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE
1F783 ; [*1759.0020.0002] # BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE
1F784 ; [*175A.0020.0002] # BLACK SLIGHTLY SMALL CIRCLE
1F785 ; [*175B.0020.0002] # MEDIUM BOLD WHITE CIRCLE
1F786 ; [*175C.0020.0002] # BOLD WHITE CIRCLE
1F787 ; [*175D.0020.0002] # HEAVY WHITE CIRCLE
1F788 ; [*175E.0020.0002] # VERY HEAVY WHITE CIRCLE
1F789 ; [*175F.0020.0002] # EXTREMELY HEAVY WHITE CIRCLE
1F78A ; [*1760.0020.0002] # WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE
1F78B ; [*1761.0020.0002] # ROUND TARGET
1F78C ; [*1762.0020.0002] # BLACK TINY SQUARE
1F78D ; [*1763.0020.0002] # BLACK SLIGHTLY SMALL SQUARE
1F78E ; [*1764.0020.0002] # LIGHT WHITE SQUARE
1F78F ; [*1765.0020.0002] # MEDIUM WHITE SQUARE
1F790 ; [*1766.0020.0002] # BOLD WHITE SQUARE
1F791 ; [*1767.0020.0002] # HEAVY WHITE SQUARE
1F792 ; [*1768.0020.0002] # VERY HEAVY WHITE SQUARE
1F793 ; [*1769.0020.0002] # EXTREMELY HEAVY WHITE SQUARE
1F794 ; [*176A.0020.0002] # WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE
1F795 ; [*176B.0020.0002] # WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE
1F796 ; [*176C.0020.0002] # SQUARE TARGET
1F797 ; [*176D.0020.0002] # BLACK TINY DIAMOND
1F798 ; [*176E.0020.0002] # BLACK VERY SMALL DIAMOND
1F799 ; [*176F.0020.0002] # BLACK MEDIUM SMALL DIAMOND
1F79A ; [*1770.0020.0002] # WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND
1F79B ; [*1771.0020.0002] # WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND
1F79C ; [*1772.0020.0002] # DIAMOND TARGET
1F79D ; [*1773.0020.0002] # BLACK TINY LOZENGE
1F79E ; [*1774.0020.0002] # BLACK VERY SMALL LOZENGE
1F79F ; [*1775.0020.0002] # BLACK MEDIUM SMALL LOZENGE
1F7A0 ; [*1776.0020.0002] # WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE
1F7A1 ; [*1777.0020.0002] # THIN GREEK CROSS
1F7A2 ; [*1778.0020.0002] # LIGHT GREEK CROSS
1F7A3 ; [*1779.0020.0002] # MEDIUM GREEK CROSS
1F7A4 ; [*177A.0020.0002] # BOLD GREEK CROSS
1F7A5 ; [*177B.0020.0002] # VERY BOLD GREEK CROSS
1F7A6 ; [*177C.0020.0002] # VERY HEAVY GREEK CROSS
1F7A7 ; [*177D.0020.0002] # EXTREMELY HEAVY GREEK CROSS
1F7A8 ; [*177E.0020.0002] # THIN SALTIRE
1F7A9 ; [*177F.0020.0002] # LIGHT SALTIRE
1F7AA ; [*1780.0020.0002] # MEDIUM SALTIRE
1F7AB ; [*1781.0020.0002] # BOLD SALTIRE
1F7AC ; [*1782.0020.0002] # HEAVY SALTIRE
1F7AD ; [*1783.0020.0002] # VERY HEAVY SALTIRE
1F7AE ; [*1784.0020.0002] # EXTREMELY HEAVY SALTIRE
1F7AF ; [*1785.0020.0002] # LIGHT FIVE SPOKED ASTERISK
1F7B0 ; [*1786.0020.0002] # MEDIUM FIVE SPOKED ASTERISK
1F7B1 ; [*1787.0020.0002] # BOLD FIVE SPOKED ASTERISK
1F7B2 ; [*1788.0020.0002] # HEAVY FIVE SPOKED ASTERISK
1F7B3 ; [*1789.0020.0002] # VERY HEAVY FIVE SPOKED ASTERISK
1F7B4 ; [*178A.0020.0002] # EXTREMELY HEAVY FIVE SPOKED ASTERISK
1F7B5 ; [*178B.0020.0002] # LIGHT SIX SPOKED ASTERISK
1F7B6 ; [*178C.0020.0002] # MEDIUM SIX SPOKED ASTERISK
1F7B7 ; [*178D.0020.0002] # BOLD SIX SPOKED ASTERISK
1F7B8 ; [*178E.0020.0002] # HEAVY SIX SPOKED ASTERISK
1F7B9 ; [*178F.0020.0002] # VERY HEAVY SIX SPOKED ASTERISK
1F7BA ; [*1790.0020.0002] # EXTREMELY HEAVY SIX SPOKED ASTERISK
1F7BB ; [*1791.0020.0002] # LIGHT EIGHT SPOKED ASTERISK
1F7BC ; [*1792.0020.0002] # MEDIUM EIGHT SPOKED ASTERISK
1F7BD ; [*1793.0020.0002] # BOLD EIGHT SPOKED ASTERISK
1F7BE ; [*1794.0020.0002] # HEAVY EIGHT SPOKED ASTERISK
1F7BF ; [*1795.0020.0002] # VERY HEAVY EIGHT SPOKED ASTERISK
1F7C0 ; [*1796.0020.0002] # LIGHT THREE POINTED BLACK STAR
1F7C1 ; [*1797.0020.0002] # MEDIUM THREE POINTED BLACK STAR
1F7C2 ; [*1798.0020.0002] # THREE POINTED BLACK STAR
1F7C3 ; [*1799.0020.0002] # MEDIUM THREE POINTED PINWHEEL STAR
1F7C4 ; [*179A.0020.0002] # LIGHT FOUR POINTED BLACK STAR
1F7C5 ; [*179B.0020.0002] # MEDIUM FOUR POINTED BLACK STAR
1F7C6 ; [*179C.0020.0002] # FOUR POINTED BLACK STAR
1F7C7 ; [*179D.0020.0002] # MEDIUM FOUR POINTED PINWHEEL STAR
1F7C8 ; [*179E.0020.0002] # REVERSE LIGHT FOUR POINTED PINWHEEL STAR
1F7C9 ; [*179F.0020.0002] # LIGHT FIVE POINTED BLACK STAR
1F7CA ; [*17A0.0020.0002] # HEAVY FIVE POINTED BLACK STAR
1F7CB ; [*17A1.0020.0002] # MEDIUM SIX POINTED BLACK STAR
1F7CC ; [*17A2.0020.0002] # HEAVY SIX POINTED BLACK STAR
1F7CD ; [*17A3.0020.0002] # SIX POINTED PINWHEEL STAR
1F7CE ; [*17A4.0020.0002] # MEDIUM EIGHT POINTED BLACK STAR
1F7CF ; [*17A5.0020.0002] # HEAVY EIGHT POINTED BLACK STAR
1F7D0 ; [*17A6.0020.0002] # VERY HEAVY EIGHT POINTED BLACK STAR
1F7D1 ; [*17A7.0020.0002] # HEAVY EIGHT POINTED PINWHEEL STAR
1F7D2 ; [*17A8.0020.0002] # LIGHT TWELVE POINTED BLACK STAR
1F7D3 ; [*17A9.0020.0002] # HEAVY TWELVE POINTED BLACK STAR
1F7D4 ; [*17AA.0020.0002] # HEAVY TWELVE POINTED PINWHEEL STAR
1F800 ; [*17AB.0020.0002] # LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
1F801 ; [*17AC.0020.0002] # UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
1F802 ; [*17AD.0020.0002] # RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
1F803 ; [*17AE.0020.0002] # DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
1F804 ; [*17AF.0020.0002] # LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
1F805 ; [*17B0.0020.0002] # UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
1F806 ; [*17B1.0020.0002] # RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
1F807 ; [*17B2.0020.0002] # DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
1F808 ; [*17B3.0020.0002] # LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F809 ; [*17B4.0020.0002] # UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F80A ; [*17B5.0020.0002] # RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F80B ; [*17B6.0020.0002] # DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F810 ; [*17B7.0020.0002] # LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
1F811 ; [*17B8.0020.0002] # UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
1F812 ; [*17B9.0020.0002] # RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
1F813 ; [*17BA.0020.0002] # DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
1F814 ; [*17BB.0020.0002] # LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F815 ; [*17BC.0020.0002] # UPWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F816 ; [*17BD.0020.0002] # RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F817 ; [*17BE.0020.0002] # DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F818 ; [*17BF.0020.0002] # HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F819 ; [*17C0.0020.0002] # HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F81A ; [*17C1.0020.0002] # HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F81B ; [*17C2.0020.0002] # HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD
1F81C ; [*17C3.0020.0002] # HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
1F81D ; [*17C4.0020.0002] # HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
1F81E ; [*17C5.0020.0002] # HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
1F81F ; [*17C6.0020.0002] # HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
1F820 ; [*17C7.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
1F821 ; [*17C8.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
1F822 ; [*17C9.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
1F823 ; [*17CA.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
1F824 ; [*17CB.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
1F825 ; [*17CC.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
1F826 ; [*17CD.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
1F827 ; [*17CE.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
1F828 ; [*17CF.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
1F829 ; [*17D0.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
1F82A ; [*17D1.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
1F82B ; [*17D2.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
1F82C ; [*17D3.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
1F82D ; [*17D4.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
1F82E ; [*17D5.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
1F82F ; [*17D6.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
1F830 ; [*17D7.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
1F831 ; [*17D8.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
1F832 ; [*17D9.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
1F833 ; [*17DA.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
1F834 ; [*17DB.0020.0002] # LEFTWARDS FINGER-POST ARROW
1F835 ; [*17DC.0020.0002] # UPWARDS FINGER-POST ARROW
1F836 ; [*17DD.0020.0002] # RIGHTWARDS FINGER-POST ARROW
1F837 ; [*17DE.0020.0002] # DOWNWARDS FINGER-POST ARROW
1F838 ; [*17DF.0020.0002] # LEFTWARDS SQUARED ARROW
1F839 ; [*17E0.0020.0002] # UPWARDS SQUARED ARROW
1F83A ; [*17E1.0020.0002] # RIGHTWARDS SQUARED ARROW
1F83B ; [*17E2.0020.0002] # DOWNWARDS SQUARED ARROW
1F83C ; [*17E3.0020.0002] # LEFTWARDS COMPRESSED ARROW
1F83D ; [*17E4.0020.0002] # UPWARDS COMPRESSED ARROW
1F83E ; [*17E5.0020.0002] # RIGHTWARDS COMPRESSED ARROW
1F83F ; [*17E6.0020.0002] # DOWNWARDS COMPRESSED ARROW
1F840 ; [*17E7.0020.0002] # LEFTWARDS HEAVY COMPRESSED ARROW
1F841 ; [*17E8.0020.0002] # UPWARDS HEAVY COMPRESSED ARROW
1F842 ; [*17E9.0020.0002] # RIGHTWARDS HEAVY COMPRESSED ARROW
1F843 ; [*17EA.0020.0002] # DOWNWARDS HEAVY COMPRESSED ARROW
1F844 ; [*17EB.0020.0002] # LEFTWARDS HEAVY ARROW
1F845 ; [*17EC.0020.0002] # UPWARDS HEAVY ARROW
1F846 ; [*17ED.0020.0002] # RIGHTWARDS HEAVY ARROW
1F847 ; [*17EE.0020.0002] # DOWNWARDS HEAVY ARROW
1F850 ; [*17EF.0020.0002] # LEFTWARDS SANS-SERIF ARROW
1F851 ; [*17F0.0020.0002] # UPWARDS SANS-SERIF ARROW
1F852 ; [*17F1.0020.0002] # RIGHTWARDS SANS-SERIF ARROW
1F853 ; [*17F2.0020.0002] # DOWNWARDS SANS-SERIF ARROW
1F854 ; [*17F3.0020.0002] # NORTH WEST SANS-SERIF ARROW
1F855 ; [*17F4.0020.0002] # NORTH EAST SANS-SERIF ARROW
1F856 ; [*17F5.0020.0002] # SOUTH EAST SANS-SERIF ARROW
1F857 ; [*17F6.0020.0002] # SOUTH WEST SANS-SERIF ARROW
1F858 ; [*17F7.0020.0002] # LEFT RIGHT SANS-SERIF ARROW
1F859 ; [*17F8.0020.0002] # UP DOWN SANS-SERIF ARROW
1F860 ; [*17F9.0020.0002] # WIDE-HEADED LEFTWARDS LIGHT BARB ARROW
1F861 ; [*17FA.0020.0002] # WIDE-HEADED UPWARDS LIGHT BARB ARROW
1F862 ; [*17FB.0020.0002] # WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW
1F863 ; [*17FC.0020.0002] # WIDE-HEADED DOWNWARDS LIGHT BARB ARROW
1F864 ; [*17FD.0020.0002] # WIDE-HEADED NORTH WEST LIGHT BARB ARROW
1F865 ; [*17FE.0020.0002] # WIDE-HEADED NORTH EAST LIGHT BARB ARROW
1F866 ; [*17FF.0020.0002] # WIDE-HEADED SOUTH EAST LIGHT BARB ARROW
1F867 ; [*1800.0020.0002] # WIDE-HEADED SOUTH WEST LIGHT BARB ARROW
1F868 ; [*1801.0020.0002] # WIDE-HEADED LEFTWARDS BARB ARROW
1F869 ; [*1802.0020.0002] # WIDE-HEADED UPWARDS BARB ARROW
1F86A ; [*1803.0020.0002] # WIDE-HEADED RIGHTWARDS BARB ARROW
1F86B ; [*1804.0020.0002] # WIDE-HEADED DOWNWARDS BARB ARROW
1F86C ; [*1805.0020.0002] # WIDE-HEADED NORTH WEST BARB ARROW
1F86D ; [*1806.0020.0002] # WIDE-HEADED NORTH EAST BARB ARROW
1F86E ; [*1807.0020.0002] # WIDE-HEADED SOUTH EAST BARB ARROW
1F86F ; [*1808.0020.0002] # WIDE-HEADED SOUTH WEST BARB ARROW
1F870 ; [*1809.0020.0002] # WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW
1F871 ; [*180A.0020.0002] # WIDE-HEADED UPWARDS MEDIUM BARB ARROW
1F872 ; [*180B.0020.0002] # WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW
1F873 ; [*180C.0020.0002] # WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW
1F874 ; [*180D.0020.0002] # WIDE-HEADED NORTH WEST MEDIUM BARB ARROW
1F875 ; [*180E.0020.0002] # WIDE-HEADED NORTH EAST MEDIUM BARB ARROW
1F876 ; [*180F.0020.0002] # WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW
1F877 ; [*1810.0020.0002] # WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW
1F878 ; [*1811.0020.0002] # WIDE-HEADED LEFTWARDS HEAVY BARB ARROW
1F879 ; [*1812.0020.0002] # WIDE-HEADED UPWARDS HEAVY BARB ARROW
1F87A ; [*1813.0020.0002] # WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW
1F87B ; [*1814.0020.0002] # WIDE-HEADED DOWNWARDS HEAVY BARB ARROW
1F87C ; [*1815.0020.0002] # WIDE-HEADED NORTH WEST HEAVY BARB ARROW
1F87D ; [*1816.0020.0002] # WIDE-HEADED NORTH EAST HEAVY BARB ARROW
1F87E ; [*1817.0020.0002] # WIDE-HEADED SOUTH EAST HEAVY BARB ARROW
1F87F ; [*1818.0020.0002] # WIDE-HEADED SOUTH WEST HEAVY BARB ARROW
1F880 ; [*1819.0020.0002] # WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW
1F881 ; [*181A.0020.0002] # WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW
1F882 ; [*181B.0020.0002] # WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW
1F883 ; [*181C.0020.0002] # WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW
1F884 ; [*181D.0020.0002] # WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW
1F885 ; [*181E.0020.0002] # WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW
1F886 ; [*181F.0020.0002] # WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW
1F887 ; [*1820.0020.0002] # WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890 ; [*1821.0020.0002] # LEFTWARDS TRIANGLE ARROWHEAD
1F891 ; [*1822.0020.0002] # UPWARDS TRIANGLE ARROWHEAD
1F892 ; [*1823.0020.0002] # RIGHTWARDS TRIANGLE ARROWHEAD
1F893 ; [*1824.0020.0002] # DOWNWARDS TRIANGLE ARROWHEAD
1F894 ; [*1825.0020.0002] # LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
1F895 ; [*1826.0020.0002] # UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
1F896 ; [*1827.0020.0002] # RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
1F897 ; [*1828.0020.0002] # DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
1F898 ; [*1829.0020.0002] # LEFTWARDS ARROW WITH NOTCHED TAIL
1F899 ; [*182A.0020.0002] # UPWARDS ARROW WITH NOTCHED TAIL
1F89A ; [*182B.0020.0002] # RIGHTWARDS ARROW WITH NOTCHED TAIL
1F89B ; [*182C.0020.0002] # DOWNWARDS ARROW WITH NOTCHED TAIL
1F89C ; [*182D.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE
1F89D ; [*182E.0020.0002] # HEAVY ARROW SHAFT WIDTH TWO THIRDS
1F89E ; [*182F.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE HALF
1F89F ; [*1830.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE THIRD
1F8A0 ; [*1831.0020.0002] # LEFTWARDS BOTTOM-SHADED WHITE ARROW
1F8A1 ; [*1832.0020.0002] # RIGHTWARDS BOTTOM SHADED WHITE ARROW
1F8A2 ; [*1833.0020.0002] # LEFTWARDS TOP SHADED WHITE ARROW
1F8A3 ; [*1834.0020.0002] # RIGHTWARDS TOP SHADED WHITE ARROW
1F8A4 ; [*1835.0020.0002] # LEFTWARDS LEFT-SHADED WHITE ARROW
1F8A5 ; [*1836.0020.0002] # RIGHTWARDS RIGHT-SHADED WHITE ARROW
1F8A6 ; [*1837.0020.0002] # LEFTWARDS RIGHT-SHADED WHITE ARROW
1F8A7 ; [*1838.0020.0002] # RIGHTWARDS LEFT-SHADED WHITE ARROW
1F8A8 ; [*1839.0020.0002] # LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW
1F8A9 ; [*183A.0020.0002] # RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW
1F8AA ; [*183B.0020.0002] # LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW
1F8AB ; [*183C.0020.0002] # RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW
1F8AC ; [*183D.0020.0002] # WHITE ARROW SHAFT WIDTH ONE
1F8AD ; [*183E.0020.0002] # WHITE ARROW SHAFT WIDTH TWO THIRDS
1F910 ; [*15A9.0020.0002] # ZIPPER-MOUTH FACE
1F911 ; [*15AA.0020.0002] # MONEY-MOUTH FACE
1F912 ; [*15AB.0020.0002] # FACE WITH THERMOMETER
1F913 ; [*15AC.0020.0002] # NERD FACE
1F914 ; [*15AD.0020.0002] # THINKING FACE
1F915 ; [*15AE.0020.0002] # FACE WITH HEAD-BANDAGE
1F916 ; [*15AF.0020.0002] # ROBOT FACE
1F917 ; [*15B0.0020.0002] # HUGGING FACE
1F918 ; [*15B1.0020.0002] # SIGN OF THE HORNS
1F919 ; [*15B2.0020.0002] # CALL ME HAND
1F91A ; [*15B3.0020.0002] # RAISED BACK OF HAND
1F91B ; [*15B4.0020.0002] # LEFT-FACING FIST
1F91C ; [*15B5.0020.0002] # RIGHT-FACING FIST
1F91D ; [*15B6.0020.0002] # HANDSHAKE
1F91E ; [*15B7.0020.0002] # HAND WITH INDEX AND MIDDLE FINGERS CROSSED
1F920 ; [*15B8.0020.0002] # FACE WITH COWBOY HAT
1F921 ; [*15B9.0020.0002] # CLOWN FACE
1F922 ; [*15BA.0020.0002] # NAUSEATED FACE
1F923 ; [*15BB.0020.0002] # ROLLING ON THE FLOOR LAUGHING
1F924 ; [*15BC.0020.0002] # DROOLING FACE
1F925 ; [*15BD.0020.0002] # LYING FACE
1F926 ; [*15BE.0020.0002] # FACE PALM
1F927 ; [*15BF.0020.0002] # SNEEZING FACE
1F930 ; [*15C0.0020.0002] # PREGNANT WOMAN
1F933 ; [*15C1.0020.0002] # SELFIE
1F934 ; [*15C2.0020.0002] # PRINCE
1F935 ; [*15C3.0020.0002] # MAN IN TUXEDO
1F936 ; [*15C4.0020.0002] # MOTHER CHRISTMAS
1F937 ; [*15C5.0020.0002] # SHRUG
1F938 ; [*15C6.0020.0002] # PERSON DOING CARTWHEEL
1F939 ; [*15C7.0020.0002] # JUGGLING
1F93A ; [*15C8.0020.0002] # FENCER
1F93B ; [*15C9.0020.0002] # MODERN PENTATHLON
1F93C ; [*15CA.0020.0002] # WRESTLERS
1F93D ; [*15CB.0020.0002] # WATER POLO
1F93E ; [*15CC.0020.0002] # HANDBALL
1F940 ; [*15CD.0020.0002] # WILTED FLOWER
1F941 ; [*15CE.0020.0002] # DRUM WITH DRUMSTICKS
1F942 ; [*15CF.0020.0002] # CLINKING GLASSES
1F943 ; [*15D0.0020.0002] # TUMBLER GLASS
1F944 ; [*15D1.0020.0002] # SPOON
1F945 ; [*15D2.0020.0002] # GOAL NET
1F946 ; [*15D3.0020.0002] # RIFLE
1F947 ; [*15D4.0020.0002] # FIRST PLACE MEDAL
1F948 ; [*15D5.0020.0002] # SECOND PLACE MEDAL
1F949 ; [*15D6.0020.0002] # THIRD PLACE MEDAL
1F94A ; [*15D7.0020.0002] # BOXING GLOVE
1F94B ; [*15D8.0020.0002] # MARTIAL ARTS UNIFORM
1F950 ; [*15D9.0020.0002] # CROISSANT
1F951 ; [*15DA.0020.0002] # AVOCADO
1F952 ; [*15DB.0020.0002] # CUCUMBER
1F953 ; [*15DC.0020.0002] # BACON
1F954 ; [*15DD.0020.0002] # POTATO
1F955 ; [*15DE.0020.0002] # CARROT
1F956 ; [*15DF.0020.0002] # BAGUETTE BREAD
1F957 ; [*15E0.0020.0002] # GREEN SALAD
1F958 ; [*15E1.0020.0002] # SHALLOW PAN OF FOOD
1F959 ; [*15E2.0020.0002] # STUFFED FLATBREAD
1F95A ; [*15E3.0020.0002] # EGG
1F95B ; [*15E4.0020.0002] # GLASS OF MILK
1F95C ; [*15E5.0020.0002] # PEANUTS
1F95D ; [*15E6.0020.0002] # KIWIFRUIT
1F95E ; [*15E7.0020.0002] # PANCAKES
1F980 ; [*15E8.0020.0002] # CRAB
1F981 ; [*15E9.0020.0002] # LION FACE
1F982 ; [*15EA.0020.0002] # SCORPION
1F983 ; [*15EB.0020.0002] # TURKEY
1F984 ; [*15EC.0020.0002] # UNICORN FACE
1F985 ; [*15ED.0020.0002] # EAGLE
1F986 ; [*15EE.0020.0002] # DUCK
1F987 ; [*15EF.0020.0002] # BAT
1F988 ; [*15F0.0020.0002] # SHARK
1F989 ; [*15F1.0020.0002] # OWL
1F98A ; [*15F2.0020.0002] # FOX FACE
1F98B ; [*15F3.0020.0002] # BUTTERFLY
1F98C ; [*15F4.0020.0002] # DEER
1F98D ; [*15F5.0020.0002] # GORILLA
1F98E ; [*15F6.0020.0002] # LIZARD
1F98F ; [*15F7.0020.0002] # RHINOCEROS
1F990 ; [*15F8.0020.0002] # SHRIMP
1F991 ; [*15F9.0020.0002] # SQUID
1F9C0 ; [*15FA.0020.0002] # CHEESE WEDGE
0332 ; [.0000.0021.0002] # COMBINING LOW LINE
0313 ; [.0000.0022.0002] # COMBINING COMMA ABOVE
0343 ; [.0000.0022.0002] # COMBINING GREEK KORONIS
0486 ; [.0000.0022.0002] # COMBINING CYRILLIC PSILI PNEUMATA
2CF1 ; [.0000.0022.0002] # COPTIC COMBINING SPIRITUS LENIS
0314 ; [.0000.0023.0002] # COMBINING REVERSED COMMA ABOVE
0485 ; [.0000.0023.0002] # COMBINING CYRILLIC DASIA PNEUMATA
2CF0 ; [.0000.0023.0002] # COPTIC COMBINING SPIRITUS ASPER
0301 ; [.0000.0024.0002] # COMBINING ACUTE ACCENT
0341 ; [.0000.0024.0002] # COMBINING ACUTE TONE MARK
0954 ; [.0000.0024.0002] # DEVANAGARI ACUTE ACCENT
0300 ; [.0000.0025.0002] # COMBINING GRAVE ACCENT
0340 ; [.0000.0025.0002] # COMBINING GRAVE TONE MARK
0953 ; [.0000.0025.0002] # DEVANAGARI GRAVE ACCENT
0306 ; [.0000.0026.0002] # COMBINING BREVE
0302 ; [.0000.0027.0002] # COMBINING CIRCUMFLEX ACCENT
030C ; [.0000.0028.0002] # COMBINING CARON
030A ; [.0000.0029.0002] # COMBINING RING ABOVE
0342 ; [.0000.002A.0002] # COMBINING GREEK PERISPOMENI
0308 ; [.0000.002B.0002] # COMBINING DIAERESIS
0344 ; [.0000.002B.0002][.0000.0024.0002] # COMBINING GREEK DIALYTIKA TONOS
030B ; [.0000.002C.0002] # COMBINING DOUBLE ACUTE ACCENT
0303 ; [.0000.002D.0002] # COMBINING TILDE
0307 ; [.0000.002E.0002] # COMBINING DOT ABOVE
0338 ; [.0000.002F.0002] # COMBINING LONG SOLIDUS OVERLAY
0327 ; [.0000.0030.0002] # COMBINING CEDILLA
0328 ; [.0000.0031.0002] # COMBINING OGONEK
0304 ; [.0000.0032.0002] # COMBINING MACRON
030D ; [.0000.0033.0002] # COMBINING VERTICAL LINE ABOVE
030E ; [.0000.0033.0002] # COMBINING DOUBLE VERTICAL LINE ABOVE
0312 ; [.0000.0033.0002] # COMBINING TURNED COMMA ABOVE
0315 ; [.0000.0033.0002] # COMBINING COMMA ABOVE RIGHT
031A ; [.0000.0033.0002] # COMBINING LEFT ANGLE ABOVE
033D ; [.0000.0033.0002] # COMBINING X ABOVE
033E ; [.0000.0033.0002] # COMBINING VERTICAL TILDE
033F ; [.0000.0033.0002] # COMBINING DOUBLE OVERLINE
0346 ; [.0000.0033.0002] # COMBINING BRIDGE ABOVE
034A ; [.0000.0033.0002] # COMBINING NOT TILDE ABOVE
034B ; [.0000.0033.0002] # COMBINING HOMOTHETIC ABOVE
034C ; [.0000.0033.0002] # COMBINING ALMOST EQUAL TO ABOVE
0350 ; [.0000.0033.0002] # COMBINING RIGHT ARROWHEAD ABOVE
0351 ; [.0000.0033.0002] # COMBINING LEFT HALF RING ABOVE
0352 ; [.0000.0033.0002] # COMBINING FERMATA
0357 ; [.0000.0033.0002] # COMBINING RIGHT HALF RING ABOVE
035B ; [.0000.0033.0002] # COMBINING ZIGZAG ABOVE
035D ; [.0000.0033.0002] # COMBINING DOUBLE BREVE
035E ; [.0000.0033.0002] # COMBINING DOUBLE MACRON
0484 ; [.0000.0033.0002] # COMBINING CYRILLIC PALATALIZATION
0487 ; [.0000.0033.0002] # COMBINING CYRILLIC POKRYTIE
0741 ; [.0000.0033.0002] # SYRIAC QUSHSHAYA
0745 ; [.0000.0033.0002] # SYRIAC THREE DOTS ABOVE
17CB ; [.0000.0033.0002] # KHMER SIGN BANTOC
17CC ; [.0000.0033.0002] # KHMER SIGN ROBAT
17CD ; [.0000.0033.0002] # KHMER SIGN TOANDAKHIAT
17CE ; [.0000.0033.0002] # KHMER SIGN KAKABAT
17CF ; [.0000.0033.0002] # KHMER SIGN AHSDA
17D0 ; [.0000.0033.0002] # KHMER SIGN SAMYOK SANNYA
17D1 ; [.0000.0033.0002] # KHMER SIGN VIRIAM
17DD ; [.0000.0033.0002] # KHMER SIGN ATTHACAN
1AB0 ; [.0000.0033.0002] # COMBINING DOUBLED CIRCUMFLEX ACCENT
1AB1 ; [.0000.0033.0002] # COMBINING DIAERESIS-RING
1AB2 ; [.0000.0033.0002] # COMBINING INFINITY
1AB3 ; [.0000.0033.0002] # COMBINING DOWNWARDS ARROW
1AB4 ; [.0000.0033.0002] # COMBINING TRIPLE DOT
1ABB ; [.0000.0033.0002] # COMBINING PARENTHESES ABOVE
1ABC ; [.0000.0033.0002] # COMBINING DOUBLE PARENTHESES ABOVE
1DC0 ; [.0000.0033.0002] # COMBINING DOTTED GRAVE ACCENT
1DC1 ; [.0000.0033.0002] # COMBINING DOTTED ACUTE ACCENT
1DC3 ; [.0000.0033.0002] # COMBINING SUSPENSION MARK
1DC4 ; [.0000.0033.0002] # COMBINING MACRON-ACUTE
1DC5 ; [.0000.0033.0002] # COMBINING GRAVE-MACRON
1DC6 ; [.0000.0033.0002] # COMBINING MACRON-GRAVE
1DC7 ; [.0000.0033.0002] # COMBINING ACUTE-MACRON
1DC8 ; [.0000.0033.0002] # COMBINING GRAVE-ACUTE-GRAVE
1DC9 ; [.0000.0033.0002] # COMBINING ACUTE-GRAVE-ACUTE
1DCB ; [.0000.0033.0002] # COMBINING BREVE-MACRON
1DCC ; [.0000.0033.0002] # COMBINING MACRON-BREVE
1DCD ; [.0000.0033.0002] # COMBINING DOUBLE CIRCUMFLEX ABOVE
1DCE ; [.0000.0033.0002] # COMBINING OGONEK ABOVE
1DD1 ; [.0000.0033.0002] # COMBINING UR ABOVE
1DF5 ; [.0000.0033.0002] # COMBINING UP TACK ABOVE
1DFB ; [.0000.0033.0002] # COMBINING DELETION MARK
1DFE ; [.0000.0033.0002] # COMBINING LEFT ARROWHEAD ABOVE
20F0 ; [.0000.0033.0002] # COMBINING ASTERISK ABOVE
2CEF ; [.0000.0033.0002] # COPTIC COMBINING NI ABOVE
A67C ; [.0000.0033.0002] # COMBINING CYRILLIC KAVYKA
A67D ; [.0000.0033.0002] # COMBINING CYRILLIC PAYEROK
10AE5 ; [.0000.0033.0002] # MANICHAEAN ABBREVIATION MARK ABOVE
1BC9D ; [.0000.0033.0002] # DUPLOYAN THICK LETTER SELECTOR
0316 ; [.0000.0034.0002] # COMBINING GRAVE ACCENT BELOW
0317 ; [.0000.0034.0002] # COMBINING ACUTE ACCENT BELOW
0318 ; [.0000.0034.0002] # COMBINING LEFT TACK BELOW
0319 ; [.0000.0034.0002] # COMBINING RIGHT TACK BELOW
031C ; [.0000.0034.0002] # COMBINING LEFT HALF RING BELOW
031D ; [.0000.0034.0002] # COMBINING UP TACK BELOW
031E ; [.0000.0034.0002] # COMBINING DOWN TACK BELOW
031F ; [.0000.0034.0002] # COMBINING PLUS SIGN BELOW
0320 ; [.0000.0034.0002] # COMBINING MINUS SIGN BELOW
0329 ; [.0000.0034.0002] # COMBINING VERTICAL LINE BELOW
032A ; [.0000.0034.0002] # COMBINING BRIDGE BELOW
032B ; [.0000.0034.0002] # COMBINING INVERTED DOUBLE ARCH BELOW
032C ; [.0000.0034.0002] # COMBINING CARON BELOW
032F ; [.0000.0034.0002] # COMBINING INVERTED BREVE BELOW
0333 ; [.0000.0034.0002] # COMBINING DOUBLE LOW LINE
033A ; [.0000.0034.0002] # COMBINING INVERTED BRIDGE BELOW
033B ; [.0000.0034.0002] # COMBINING SQUARE BELOW
033C ; [.0000.0034.0002] # COMBINING SEAGULL BELOW
0347 ; [.0000.0034.0002] # COMBINING EQUALS SIGN BELOW
0348 ; [.0000.0034.0002] # COMBINING DOUBLE VERTICAL LINE BELOW
0349 ; [.0000.0034.0002] # COMBINING LEFT ANGLE BELOW
034D ; [.0000.0034.0002] # COMBINING LEFT RIGHT ARROW BELOW
034E ; [.0000.0034.0002] # COMBINING UPWARDS ARROW BELOW
0353 ; [.0000.0034.0002] # COMBINING X BELOW
0354 ; [.0000.0034.0002] # COMBINING LEFT ARROWHEAD BELOW
0355 ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD BELOW
0356 ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
0359 ; [.0000.0034.0002] # COMBINING ASTERISK BELOW
035A ; [.0000.0034.0002] # COMBINING DOUBLE RING BELOW
035C ; [.0000.0034.0002] # COMBINING DOUBLE BREVE BELOW
035F ; [.0000.0034.0002] # COMBINING DOUBLE MACRON BELOW
0362 ; [.0000.0034.0002] # COMBINING DOUBLE RIGHTWARDS ARROW BELOW
0742 ; [.0000.0034.0002] # SYRIAC RUKKAKHA
0746 ; [.0000.0034.0002] # SYRIAC THREE DOTS BELOW
0859 ; [.0000.0034.0002] # MANDAIC AFFRICATION MARK
085A ; [.0000.0034.0002] # MANDAIC VOCALIZATION MARK
085B ; [.0000.0034.0002] # MANDAIC GEMINATION MARK
1AB5 ; [.0000.0034.0002] # COMBINING X-X BELOW
1AB6 ; [.0000.0034.0002] # COMBINING WIGGLY LINE BELOW
1AB7 ; [.0000.0034.0002] # COMBINING OPEN MARK BELOW
1AB8 ; [.0000.0034.0002] # COMBINING DOUBLE OPEN MARK BELOW
1AB9 ; [.0000.0034.0002] # COMBINING LIGHT CENTRALIZATION STROKE BELOW
1ABA ; [.0000.0034.0002] # COMBINING STRONG CENTRALIZATION STROKE BELOW
1ABD ; [.0000.0034.0002] # COMBINING PARENTHESES BELOW
1DC2 ; [.0000.0034.0002] # COMBINING SNAKE BELOW
1DCF ; [.0000.0034.0002] # COMBINING ZIGZAG BELOW
1DD0 ; [.0000.0034.0002] # COMBINING IS BELOW
1DFC ; [.0000.0034.0002] # COMBINING DOUBLE INVERTED BREVE BELOW
1DFD ; [.0000.0034.0002] # COMBINING ALMOST EQUAL TO BELOW
1DFF ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
20EC ; [.0000.0034.0002] # COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS
20ED ; [.0000.0034.0002] # COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS
20EE ; [.0000.0034.0002] # COMBINING LEFT ARROW BELOW
20EF ; [.0000.0034.0002] # COMBINING RIGHT ARROW BELOW
FE27 ; [.0000.0034.0002] # COMBINING LIGATURE LEFT HALF BELOW
10A0D ; [.0000.0034.0002] # KHAROSHTHI SIGN DOUBLE RING BELOW
10AE6 ; [.0000.0034.0002] # MANICHAEAN ABBREVIATION MARK BELOW
0336 ; [.0000.0035.0002] # COMBINING LONG STROKE OVERLAY
0337 ; [.0000.0035.0002] # COMBINING SHORT SOLIDUS OVERLAY
20D8 ; [.0000.0035.0002] # COMBINING RING OVERLAY
20D9 ; [.0000.0035.0002] # COMBINING CLOCKWISE RING OVERLAY
20DA ; [.0000.0035.0002] # COMBINING ANTICLOCKWISE RING OVERLAY
20E5 ; [.0000.0035.0002] # COMBINING REVERSE SOLIDUS OVERLAY
20EA ; [.0000.0035.0002] # COMBINING LEFTWARDS ARROW OVERLAY
20EB ; [.0000.0035.0002] # COMBINING LONG DOUBLE SOLIDUS OVERLAY
1BC9E ; [.0000.0035.0002] # DUPLOYAN DOUBLE MARK
1ABE ; [.0000.0036.0002] # COMBINING PARENTHESES OVERLAY
20DD ; [.0000.0036.0002] # COMBINING ENCLOSING CIRCLE
20DE ; [.0000.0036.0002] # COMBINING ENCLOSING SQUARE
20DF ; [.0000.0036.0002] # COMBINING ENCLOSING DIAMOND
20E0 ; [.0000.0036.0002] # COMBINING ENCLOSING CIRCLE BACKSLASH
20E2 ; [.0000.0036.0002] # COMBINING ENCLOSING SCREEN
20E3 ; [.0000.0036.0002] # COMBINING ENCLOSING KEYCAP
20E4 ; [.0000.0036.0002] # COMBINING ENCLOSING UPWARD POINTING TRIANGLE
3099 ; [.0000.0037.0002] # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
FF9E ; [.0000.0037.0012] # HALFWIDTH KATAKANA VOICED SOUND MARK
309A ; [.0000.0038.0002] # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
FF9F ; [.0000.0038.0012] # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
0335 ; [.0000.0039.0002] # COMBINING SHORT STROKE OVERLAY
0305 ; [.0000.003A.0002] # COMBINING OVERLINE
0309 ; [.0000.003B.0002] # COMBINING HOOK ABOVE
030F ; [.0000.003C.0002] # COMBINING DOUBLE GRAVE ACCENT
0310 ; [.0000.003D.0002] # COMBINING CANDRABINDU
0311 ; [.0000.003E.0002] # COMBINING INVERTED BREVE
031B ; [.0000.003F.0002] # COMBINING HORN
0321 ; [.0000.0040.0002] # COMBINING PALATALIZED HOOK BELOW
0322 ; [.0000.0041.0002] # COMBINING RETROFLEX HOOK BELOW
0323 ; [.0000.0042.0002] # COMBINING DOT BELOW
0324 ; [.0000.0043.0002] # COMBINING DIAERESIS BELOW
0325 ; [.0000.0044.0002] # COMBINING RING BELOW
0326 ; [.0000.0045.0002] # COMBINING COMMA BELOW
032D ; [.0000.0046.0002] # COMBINING CIRCUMFLEX ACCENT BELOW
032E ; [.0000.0047.0002] # COMBINING BREVE BELOW
0330 ; [.0000.0048.0002] # COMBINING TILDE BELOW
0331 ; [.0000.0049.0002] # COMBINING MACRON BELOW
0334 ; [.0000.004A.0002] # COMBINING TILDE OVERLAY
0339 ; [.0000.004B.0002] # COMBINING RIGHT HALF RING BELOW
0345 ; [.0000.004C.0002] # COMBINING GREEK YPOGEGRAMMENI
0358 ; [.0000.004D.0002] # COMBINING DOT ABOVE RIGHT
0360 ; [.0000.004E.0002] # COMBINING DOUBLE TILDE
FE22 ; [.0000.004E.0002] # COMBINING DOUBLE TILDE LEFT HALF
FE29 ; [.0000.004E.0002] # COMBINING TILDE LEFT HALF BELOW
0361 ; [.0000.004F.0002] # COMBINING DOUBLE INVERTED BREVE
FE20 ; [.0000.004F.0002] # COMBINING LIGATURE LEFT HALF
0483 ; [.0000.0050.0002] # COMBINING CYRILLIC TITLO
FE2E ; [.0000.0050.0002] # COMBINING CYRILLIC TITLO LEFT HALF
A66F ; [.0000.0051.0002] # COMBINING CYRILLIC VZMET
05B0 ; [.0000.0052.0002] # HEBREW POINT SHEVA
05B1 ; [.0000.0053.0002] # HEBREW POINT HATAF SEGOL
05B2 ; [.0000.0054.0002] # HEBREW POINT HATAF PATAH
05B3 ; [.0000.0055.0002] # HEBREW POINT HATAF QAMATS
05B4 ; [.0000.0056.0002] # HEBREW POINT HIRIQ
05B5 ; [.0000.0057.0002] # HEBREW POINT TSERE
05B6 ; [.0000.0058.0002] # HEBREW POINT SEGOL
05B7 ; [.0000.0059.0002] # HEBREW POINT PATAH
05B8 ; [.0000.005A.0002] # HEBREW POINT QAMATS
05C7 ; [.0000.005A.0002] # HEBREW POINT QAMATS QATAN
05B9 ; [.0000.005B.0002] # HEBREW POINT HOLAM
05BA ; [.0000.005B.0002] # HEBREW POINT HOLAM HASER FOR VAV
05BB ; [.0000.005C.0002] # HEBREW POINT QUBUTS
05C2 ; [.0000.005D.0002] # HEBREW POINT SIN DOT
05C1 ; [.0000.005E.0002] # HEBREW POINT SHIN DOT
05BC ; [.0000.005F.0002] # HEBREW POINT DAGESH OR MAPIQ
05BF ; [.0000.0060.0002] # HEBREW POINT RAFE
FB1E ; [.0000.0061.0002] # HEBREW POINT JUDEO-SPANISH VARIKA
081C ; [.0000.0062.0002] # SAMARITAN VOWEL SIGN LONG E
081D ; [.0000.0062.0002] # SAMARITAN VOWEL SIGN E
081E ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN OVERLONG AA
081F ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN LONG AA
0820 ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN AA
0821 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN OVERLONG A
0822 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN LONG A
0823 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN A
0824 ; [.0000.0065.0002] # SAMARITAN MODIFIER LETTER SHORT A
0825 ; [.0000.0065.0002] # SAMARITAN VOWEL SIGN SHORT A
0826 ; [.0000.0066.0002] # SAMARITAN VOWEL SIGN LONG U
0827 ; [.0000.0066.0002] # SAMARITAN VOWEL SIGN U
0828 ; [.0000.0067.0002] # SAMARITAN MODIFIER LETTER I
0829 ; [.0000.0067.0002] # SAMARITAN VOWEL SIGN LONG I
082A ; [.0000.0067.0002] # SAMARITAN VOWEL SIGN I
082B ; [.0000.0068.0002] # SAMARITAN VOWEL SIGN O
082C ; [.0000.0069.0002] # SAMARITAN VOWEL SIGN SUKUN
0818 ; [.0000.006A.0002] # SAMARITAN MARK OCCLUSION
0819 ; [.0000.006B.0002] # SAMARITAN MARK DAGESH
082D ; [.0000.006C.0002] # SAMARITAN MARK NEQUDAA
064B ; [.0000.006D.0002] # ARABIC FATHATAN
FE71 ; [.0000.006D.0018] # ARABIC TATWEEL WITH FATHATAN ABOVE
FE70 ; [.0000.006D.001A] # ARABIC FATHATAN ISOLATED FORM
08F0 ; [.0000.006E.0002] # ARABIC OPEN FATHATAN
08E7 ; [.0000.006F.0002] # ARABIC CURLY FATHATAN
064C ; [.0000.0070.0002] # ARABIC DAMMATAN
FE72 ; [.0000.0070.001A] # ARABIC DAMMATAN ISOLATED FORM
FC5E ; [.0000.0070.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
08F1 ; [.0000.0071.0002] # ARABIC OPEN DAMMATAN
08E8 ; [.0000.0072.0002] # ARABIC CURLY DAMMATAN
064D ; [.0000.0073.0002] # ARABIC KASRATAN
FE74 ; [.0000.0073.001A] # ARABIC KASRATAN ISOLATED FORM
FC5F ; [.0000.0073.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
08F2 ; [.0000.0074.0002] # ARABIC OPEN KASRATAN
08E9 ; [.0000.0075.0002] # ARABIC CURLY KASRATAN
064E ; [.0000.0076.0002] # ARABIC FATHA
FE77 ; [.0000.0076.0018] # ARABIC FATHA MEDIAL FORM
FE76 ; [.0000.0076.001A] # ARABIC FATHA ISOLATED FORM
FCF2 ; [.0000.0076.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
FC60 ; [.0000.0076.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
08E4 ; [.0000.0077.0002] # ARABIC CURLY FATHA
08F4 ; [.0000.0078.0002] # ARABIC FATHA WITH RING
08F5 ; [.0000.0079.0002] # ARABIC FATHA WITH DOT ABOVE
064F ; [.0000.007A.0002] # ARABIC DAMMA
FE79 ; [.0000.007A.0018] # ARABIC DAMMA MEDIAL FORM
FE78 ; [.0000.007A.001A] # ARABIC DAMMA ISOLATED FORM
FCF3 ; [.0000.007A.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
FC61 ; [.0000.007A.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
08E5 ; [.0000.007B.0002] # ARABIC CURLY DAMMA
08FE ; [.0000.007C.0002] # ARABIC DAMMA WITH DOT
0650 ; [.0000.007D.0002] # ARABIC KASRA
FE7B ; [.0000.007D.0018] # ARABIC KASRA MEDIAL FORM
FE7A ; [.0000.007D.001A] # ARABIC KASRA ISOLATED FORM
FCF4 ; [.0000.007D.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
FC62 ; [.0000.007D.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
08E6 ; [.0000.007E.0002] # ARABIC CURLY KASRA
08F6 ; [.0000.007F.0002] # ARABIC KASRA WITH DOT BELOW
0651 ; [.0000.0080.0002] # ARABIC SHADDA
11237 ; [.0000.0080.0002] # KHOJKI SIGN SHADDA
FE7D ; [.0000.0080.0018] # ARABIC SHADDA MEDIAL FORM
FE7C ; [.0000.0080.001A] # ARABIC SHADDA ISOLATED FORM
FC63 ; [.0000.0080.001A][.0000.0098.001A] # ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
0652 ; [.0000.0081.0002] # ARABIC SUKUN
1123E ; [.0000.0081.0002] # KHOJKI SIGN SUKUN
FE7F ; [.0000.0081.0018] # ARABIC SUKUN MEDIAL FORM
FE7E ; [.0000.0081.001A] # ARABIC SUKUN ISOLATED FORM
0653 ; [.0000.0082.0002] # ARABIC MADDAH ABOVE
0654 ; [.0000.0083.0002] # ARABIC HAMZA ABOVE
0655 ; [.0000.0084.0002] # ARABIC HAMZA BELOW
065F ; [.0000.0085.0002] # ARABIC WAVY HAMZA BELOW
0656 ; [.0000.0086.0002] # ARABIC SUBSCRIPT ALEF
0657 ; [.0000.0087.0002] # ARABIC INVERTED DAMMA
0658 ; [.0000.0088.0002] # ARABIC MARK NOON GHUNNA
08FF ; [.0000.0089.0002] # ARABIC MARK SIDEWAYS NOON GHUNNA
0659 ; [.0000.008A.0002] # ARABIC ZWARAKAY
065A ; [.0000.008B.0002] # ARABIC VOWEL SIGN SMALL V ABOVE
065B ; [.0000.008C.0002] # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
065C ; [.0000.008D.0002] # ARABIC VOWEL SIGN DOT BELOW
065D ; [.0000.008E.0002] # ARABIC REVERSED DAMMA
065E ; [.0000.008F.0002] # ARABIC FATHA WITH TWO DOTS
08E3 ; [.0000.0090.0002] # ARABIC TURNED DAMMA BELOW
08F7 ; [.0000.0091.0002] # ARABIC LEFT ARROWHEAD ABOVE
08F8 ; [.0000.0092.0002] # ARABIC RIGHT ARROWHEAD ABOVE
08FD ; [.0000.0093.0002] # ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
08FB ; [.0000.0094.0002] # ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
08FC ; [.0000.0095.0002] # ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
08F9 ; [.0000.0096.0002] # ARABIC LEFT ARROWHEAD BELOW
08FA ; [.0000.0097.0002] # ARABIC RIGHT ARROWHEAD BELOW
0670 ; [.0000.0098.0002] # ARABIC LETTER SUPERSCRIPT ALEF
0711 ; [.0000.0099.0002] # SYRIAC LETTER SUPERSCRIPT ALAPH
0730 ; [.0000.009A.0002] # SYRIAC PTHAHA ABOVE
0731 ; [.0000.009B.0002] # SYRIAC PTHAHA BELOW
0732 ; [.0000.009C.0002] # SYRIAC PTHAHA DOTTED
0733 ; [.0000.009D.0002] # SYRIAC ZQAPHA ABOVE
0734 ; [.0000.009E.0002] # SYRIAC ZQAPHA BELOW
0735 ; [.0000.009F.0002] # SYRIAC ZQAPHA DOTTED
0736 ; [.0000.00A0.0002] # SYRIAC RBASA ABOVE
0737 ; [.0000.00A1.0002] # SYRIAC RBASA BELOW
0738 ; [.0000.00A2.0002] # SYRIAC DOTTED ZLAMA HORIZONTAL
0739 ; [.0000.00A3.0002] # SYRIAC DOTTED ZLAMA ANGULAR
073A ; [.0000.00A4.0002] # SYRIAC HBASA ABOVE
073B ; [.0000.00A5.0002] # SYRIAC HBASA BELOW
073C ; [.0000.00A6.0002] # SYRIAC HBASA-ESASA DOTTED
073D ; [.0000.00A7.0002] # SYRIAC ESASA ABOVE
073E ; [.0000.00A8.0002] # SYRIAC ESASA BELOW
073F ; [.0000.00A9.0002] # SYRIAC RWAHA
07EB ; [.0000.00AA.0002] # NKO COMBINING SHORT HIGH TONE
07EC ; [.0000.00AB.0002] # NKO COMBINING SHORT LOW TONE
07ED ; [.0000.00AC.0002] # NKO COMBINING SHORT RISING TONE
07EE ; [.0000.00AD.0002] # NKO COMBINING LONG DESCENDING TONE
07EF ; [.0000.00AE.0002] # NKO COMBINING LONG HIGH TONE
07F0 ; [.0000.00AF.0002] # NKO COMBINING LONG LOW TONE
07F1 ; [.0000.00B0.0002] # NKO COMBINING LONG RISING TONE
07F2 ; [.0000.00B1.0002] # NKO COMBINING NASALIZATION MARK
07F3 ; [.0000.00B2.0002] # NKO COMBINING DOUBLE DOT ABOVE
135F ; [.0000.00B3.0002] # ETHIOPIC COMBINING GEMINATION MARK
135E ; [.0000.00B4.0002] # ETHIOPIC COMBINING VOWEL LENGTH MARK
135D ; [.0000.00B5.0002] # ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK
A6F0 ; [.0000.00B6.0002] # BAMUM COMBINING MARK KOQNDON
A6F1 ; [.0000.00B7.0002] # BAMUM COMBINING MARK TUKWENTIS
16AF0 ; [.0000.00B8.0002] # BASSA VAH COMBINING HIGH TONE
16AF1 ; [.0000.00B9.0002] # BASSA VAH COMBINING LOW TONE
16AF2 ; [.0000.00BA.0002] # BASSA VAH COMBINING MID TONE
16AF3 ; [.0000.00BB.0002] # BASSA VAH COMBINING LOW-MID TONE
16AF4 ; [.0000.00BC.0002] # BASSA VAH COMBINING HIGH-LOW TONE
1E944 ; [.0000.00BD.0002] # ADLAM ALIF LENGTHENER
1E945 ; [.0000.00BD.0002] # ADLAM VOWEL LENGTHENER
1E946 ; [.0000.00BD.0002] # ADLAM GEMINATION MARK
1E94A ; [.0000.00BE.0002] # ADLAM NUKTA
1E947 ; [.0000.00BF.0002] # ADLAM HAMZA
1E948 ; [.0000.00C0.0002] # ADLAM CONSONANT MODIFIER
1E949 ; [.0000.00C1.0002] # ADLAM GEMINATE CONSONANT MODIFIER
093C ; [.0000.00C2.0002] # DEVANAGARI SIGN NUKTA
09BC ; [.0000.00C2.0002] # BENGALI SIGN NUKTA
0A3C ; [.0000.00C2.0002] # GURMUKHI SIGN NUKTA
0ABC ; [.0000.00C2.0002] # GUJARATI SIGN NUKTA
0B3C ; [.0000.00C2.0002] # ORIYA SIGN NUKTA
0CBC ; [.0000.00C2.0002] # KANNADA SIGN NUKTA
1B34 ; [.0000.00C2.0002] # BALINESE SIGN REREKAN
1BE6 ; [.0000.00C2.0002] # BATAK SIGN TOMPI
1C37 ; [.0000.00C2.0002] # LEPCHA SIGN NUKTA
A9B3 ; [.0000.00C2.0002] # JAVANESE SIGN CECAK TELU
110BA ; [.0000.00C2.0002] # KAITHI SIGN NUKTA
11173 ; [.0000.00C2.0002] # MAHAJANI SIGN NUKTA
111CA ; [.0000.00C2.0002] # SHARADA SIGN NUKTA
11236 ; [.0000.00C2.0002] # KHOJKI SIGN NUKTA
112E9 ; [.0000.00C2.0002] # KHUDAWADI SIGN NUKTA
1133C ; [.0000.00C2.0002] # GRANTHA SIGN NUKTA
11446 ; [.0000.00C2.0002] # NEWA SIGN NUKTA
114C3 ; [.0000.00C2.0002] # TIRHUTA SIGN NUKTA
115C0 ; [.0000.00C2.0002] # SIDDHAM SIGN NUKTA
116B7 ; [.0000.00C2.0002] # TAKRI SIGN NUKTA
0900 ; [.0000.00C3.0002] # DEVANAGARI SIGN INVERTED CANDRABINDU
0901 ; [.0000.00C3.0002] # DEVANAGARI SIGN CANDRABINDU
0981 ; [.0000.00C3.0002] # BENGALI SIGN CANDRABINDU
0A01 ; [.0000.00C3.0002] # GURMUKHI SIGN ADAK BINDI
0A81 ; [.0000.00C3.0002] # GUJARATI SIGN CANDRABINDU
0B01 ; [.0000.00C3.0002] # ORIYA SIGN CANDRABINDU
0C00 ; [.0000.00C3.0002] # TELUGU SIGN COMBINING CANDRABINDU ABOVE
0C01 ; [.0000.00C3.0002] # TELUGU SIGN CANDRABINDU
0C81 ; [.0000.00C3.0002] # KANNADA SIGN CANDRABINDU
0D01 ; [.0000.00C3.0002] # MALAYALAM SIGN CANDRABINDU
1B00 ; [.0000.00C3.0002] # BALINESE SIGN ULU RICEM
1B01 ; [.0000.00C3.0002] # BALINESE SIGN ULU CANDRA
A8C5 ; [.0000.00C3.0002] # SAURASHTRA SIGN CANDRABINDU
A980 ; [.0000.00C3.0002] # JAVANESE SIGN PANYANGGA
11000 ; [.0000.00C3.0002] # BRAHMI SIGN CANDRABINDU
11080 ; [.0000.00C3.0002] # KAITHI SIGN CANDRABINDU
11100 ; [.0000.00C3.0002] # CHAKMA SIGN CANDRABINDU
11180 ; [.0000.00C3.0002] # SHARADA SIGN CANDRABINDU
11301 ; [.0000.00C3.0002] # GRANTHA SIGN CANDRABINDU
11443 ; [.0000.00C3.0002] # NEWA SIGN CANDRABINDU
114BF ; [.0000.00C3.0002] # TIRHUTA SIGN CANDRABINDU
115BC ; [.0000.00C3.0002] # SIDDHAM SIGN CANDRABINDU
11640 ; [.0000.00C3.0002] # MODI SIGN ARDHACANDRA
11C3C ; [.0000.00C3.0002] # BHAIKSUKI SIGN CANDRABINDU
11CB6 ; [.0000.00C3.0002] # MARCHEN SIGN CANDRABINDU
0902 ; [.0000.00C4.0002] # DEVANAGARI SIGN ANUSVARA
0982 ; [.0000.00C4.0002] # BENGALI SIGN ANUSVARA
0A02 ; [.0000.00C4.0002] # GURMUKHI SIGN BINDI
0A82 ; [.0000.00C4.0002] # GUJARATI SIGN ANUSVARA
0B02 ; [.0000.00C4.0002] # ORIYA SIGN ANUSVARA
0B82 ; [.0000.00C4.0002] # TAMIL SIGN ANUSVARA
0C02 ; [.0000.00C4.0002] # TELUGU SIGN ANUSVARA
0C82 ; [.0000.00C4.0002] # KANNADA SIGN ANUSVARA
0D02 ; [.0000.00C4.0002] # MALAYALAM SIGN ANUSVARA
0D82 ; [.0000.00C4.0002] # SINHALA SIGN ANUSVARAYA
0F7E ; [.0000.00C4.0002] # TIBETAN SIGN RJES SU NGA RO
1036 ; [.0000.00C4.0002] # MYANMAR SIGN ANUSVARA
17C6 ; [.0000.00C4.0002] # KHMER SIGN NIKAHIT
1A74 ; [.0000.00C4.0002] # TAI THAM SIGN MAI KANG
1B02 ; [.0000.00C4.0002] # BALINESE SIGN CECEK
1B80 ; [.0000.00C4.0002] # SUNDANESE SIGN PANYECEK
1CED ; [.0000.00C4.0002] # VEDIC SIGN TIRYAK
A80B ; [.0000.00C4.0002] # SYLOTI NAGRI SIGN ANUSVARA
A880 ; [.0000.00C4.0002] # SAURASHTRA SIGN ANUSVARA
A981 ; [.0000.00C4.0002] # JAVANESE SIGN CECAK
10A0E ; [.0000.00C4.0002] # KHAROSHTHI SIGN ANUSVARA
11001 ; [.0000.00C4.0002] # BRAHMI SIGN ANUSVARA
11081 ; [.0000.00C4.0002] # KAITHI SIGN ANUSVARA
11101 ; [.0000.00C4.0002] # CHAKMA SIGN ANUSVARA
11181 ; [.0000.00C4.0002] # SHARADA SIGN ANUSVARA
11234 ; [.0000.00C4.0002] # KHOJKI SIGN ANUSVARA
112DF ; [.0000.00C4.0002] # KHUDAWADI SIGN ANUSVARA
11300 ; [.0000.00C4.0002] # GRANTHA SIGN COMBINING ANUSVARA ABOVE
11302 ; [.0000.00C4.0002] # GRANTHA SIGN ANUSVARA
11444 ; [.0000.00C4.0002] # NEWA SIGN ANUSVARA
114C0 ; [.0000.00C4.0002] # TIRHUTA SIGN ANUSVARA
115BD ; [.0000.00C4.0002] # SIDDHAM SIGN ANUSVARA
1163D ; [.0000.00C4.0002] # MODI SIGN ANUSVARA
116AB ; [.0000.00C4.0002] # TAKRI SIGN ANUSVARA
11C3D ; [.0000.00C4.0002] # BHAIKSUKI SIGN ANUSVARA
11CB5 ; [.0000.00C4.0002] # MARCHEN SIGN ANUSVARA
0903 ; [.0000.00C5.0002] # DEVANAGARI SIGN VISARGA
0983 ; [.0000.00C5.0002] # BENGALI SIGN VISARGA
0A03 ; [.0000.00C5.0002] # GURMUKHI SIGN VISARGA
0A83 ; [.0000.00C5.0002] # GUJARATI SIGN VISARGA
0B03 ; [.0000.00C5.0002] # ORIYA SIGN VISARGA
0C03 ; [.0000.00C5.0002] # TELUGU SIGN VISARGA
0C83 ; [.0000.00C5.0002] # KANNADA SIGN VISARGA
0D03 ; [.0000.00C5.0002] # MALAYALAM SIGN VISARGA
0D83 ; [.0000.00C5.0002] # SINHALA SIGN VISARGAYA
0F7F ; [.0000.00C5.0002] # TIBETAN SIGN RNAM BCAD
1038 ; [.0000.00C5.0002] # MYANMAR SIGN VISARGA
17C7 ; [.0000.00C5.0002] # KHMER SIGN REAHMUK
1B04 ; [.0000.00C5.0002] # BALINESE SIGN BISAH
1B82 ; [.0000.00C5.0002] # SUNDANESE SIGN PANGWISAD
1CF2 ; [.0000.00C5.0002] # VEDIC SIGN ARDHAVISARGA
1CF3 ; [.0000.00C5.0002] # VEDIC SIGN ROTATED ARDHAVISARGA
A881 ; [.0000.00C5.0002] # SAURASHTRA SIGN VISARGA
A983 ; [.0000.00C5.0002] # JAVANESE SIGN WIGNYAN
10A0F ; [.0000.00C5.0002] # KHAROSHTHI SIGN VISARGA
11002 ; [.0000.00C5.0002] # BRAHMI SIGN VISARGA
11082 ; [.0000.00C5.0002] # KAITHI SIGN VISARGA
11102 ; [.0000.00C5.0002] # CHAKMA SIGN VISARGA
11182 ; [.0000.00C5.0002] # SHARADA SIGN VISARGA
11303 ; [.0000.00C5.0002] # GRANTHA SIGN VISARGA
11445 ; [.0000.00C5.0002] # NEWA SIGN VISARGA
114C1 ; [.0000.00C5.0002] # TIRHUTA SIGN VISARGA
115BE ; [.0000.00C5.0002] # SIDDHAM SIGN VISARGA
1163E ; [.0000.00C5.0002] # MODI SIGN VISARGA
116AC ; [.0000.00C5.0002] # TAKRI SIGN VISARGA
11C3E ; [.0000.00C5.0002] # BHAIKSUKI SIGN VISARGA
0A70 ; [.0000.00C6.0002] # GURMUKHI TIPPI
0A71 ; [.0000.00C7.0002] # GURMUKHI ADDAK
1B03 ; [.0000.00C8.0002] # BALINESE SIGN SURANG
A982 ; [.0000.00C9.0002] # JAVANESE SIGN LAYAR
1B81 ; [.0000.00CA.0002] # SUNDANESE SIGN PANGLAYAR
ABEC ; [.0000.00CB.0002] # MEETEI MAYEK LUM IYEK
10A38 ; [.0000.00CC.0002] # KHAROSHTHI SIGN BAR ABOVE
10A39 ; [.0000.00CD.0002] # KHAROSHTHI SIGN CAUDA
10A3A ; [.0000.00CE.0002] # KHAROSHTHI SIGN DOT BELOW
111CB ; [.0000.00CF.0002] # SHARADA VOWEL MODIFIER MARK
111CC ; [.0000.00D0.0002] # SHARADA EXTRA SHORT VOWEL MARK
0E4E ; [.0000.00D1.0002] # THAI CHARACTER YAMAKKAN
0E47 ; [.0000.00D2.0002] # THAI CHARACTER MAITAIKHU
0E48 ; [.0000.00D3.0002] # THAI CHARACTER MAI EK
0E49 ; [.0000.00D4.0002] # THAI CHARACTER MAI THO
0E4A ; [.0000.00D5.0002] # THAI CHARACTER MAI TRI
0E4B ; [.0000.00D6.0002] # THAI CHARACTER MAI CHATTAWA
0E4C ; [.0000.00D7.0002] # THAI CHARACTER THANTHAKHAT
0E4D ; [.0000.00D8.0002] # THAI CHARACTER NIKHAHIT
0EC8 ; [.0000.00D9.0002] # LAO TONE MAI EK
0EC9 ; [.0000.00DA.0002] # LAO TONE MAI THO
0ECA ; [.0000.00DB.0002] # LAO TONE MAI TI
0ECB ; [.0000.00DC.0002] # LAO TONE MAI CATAWA
0ECC ; [.0000.00DD.0002] # LAO CANCELLATION MARK
0ECD ; [.0000.00DE.0002] # LAO NIGGAHITA
AABF ; [.0000.00DF.0002] # TAI VIET TONE MAI EK
AAC1 ; [.0000.00E0.0002] # TAI VIET TONE MAI THO
0F39 ; [.0000.00E1.0002] # TIBETAN MARK TSA -PHRU
A92B ; [.0000.00E2.0002] # KAYAH LI TONE PLOPHU
A92C ; [.0000.00E3.0002] # KAYAH LI TONE CALYA
A92D ; [.0000.00E4.0002] # KAYAH LI TONE CALYA PLOPHU
1037 ; [.0000.00E5.0002] # MYANMAR SIGN DOT BELOW
17C8 ; [.0000.00E6.0002] # KHMER SIGN YUUKALEAPINTU
17C9 ; [.0000.00E7.0002] # KHMER SIGN MUUSIKATOAN
17CA ; [.0000.00E8.0002] # KHMER SIGN TRIISAP
1A75 ; [.0000.00E9.0002] # TAI THAM SIGN TONE-1
1A76 ; [.0000.00EA.0002] # TAI THAM SIGN TONE-2
1A77 ; [.0000.00EB.0002] # TAI THAM SIGN KHUEN TONE-3
1A78 ; [.0000.00EC.0002] # TAI THAM SIGN KHUEN TONE-4
1A79 ; [.0000.00ED.0002] # TAI THAM SIGN KHUEN TONE-5
1A7A ; [.0000.00EE.0002] # TAI THAM SIGN RA HAAM
1A7B ; [.0000.00EF.0002] # TAI THAM SIGN MAI SAM
1A7C ; [.0000.00F0.0002] # TAI THAM SIGN KHUEN-LUE KARAN
1939 ; [.0000.00F1.0002] # LIMBU SIGN MUKPHRENG
193A ; [.0000.00F2.0002] # LIMBU SIGN KEMPHRENG
193B ; [.0000.00F3.0002] # LIMBU SIGN SA-I
16B30 ; [.0000.00F4.0002] # PAHAWH HMONG MARK CIM TUB
16B31 ; [.0000.00F5.0002] # PAHAWH HMONG MARK CIM SO
16B32 ; [.0000.00F6.0002] # PAHAWH HMONG MARK CIM KES
16B33 ; [.0000.00F7.0002] # PAHAWH HMONG MARK CIM KHAV
16B34 ; [.0000.00F8.0002] # PAHAWH HMONG MARK CIM SUAM
16B35 ; [.0000.00F9.0002] # PAHAWH HMONG MARK CIM HOM
16B36 ; [.0000.00FA.0002] # PAHAWH HMONG MARK CIM TAUM
302A ; [.0000.00FB.0002] # IDEOGRAPHIC LEVEL TONE MARK
302B ; [.0000.00FC.0002] # IDEOGRAPHIC RISING TONE MARK
302C ; [.0000.00FD.0002] # IDEOGRAPHIC DEPARTING TONE MARK
302D ; [.0000.00FE.0002] # IDEOGRAPHIC ENTERING TONE MARK
302E ; [.0000.00FF.0002] # HANGUL SINGLE DOT TONE MARK
302F ; [.0000.0100.0002] # HANGUL DOUBLE DOT TONE MARK
20D0 ; [.0000.0101.0002] # COMBINING LEFT HARPOON ABOVE
20D1 ; [.0000.0102.0002] # COMBINING RIGHT HARPOON ABOVE
20D2 ; [.0000.0103.0002] # COMBINING LONG VERTICAL LINE OVERLAY
20D3 ; [.0000.0103.0002] # COMBINING SHORT VERTICAL LINE OVERLAY
20D4 ; [.0000.0104.0002] # COMBINING ANTICLOCKWISE ARROW ABOVE
20D5 ; [.0000.0105.0002] # COMBINING CLOCKWISE ARROW ABOVE
20D6 ; [.0000.0106.0002] # COMBINING LEFT ARROW ABOVE
20D7 ; [.0000.0107.0002] # COMBINING RIGHT ARROW ABOVE
20DB ; [.0000.0108.0002] # COMBINING THREE DOTS ABOVE
20DC ; [.0000.0109.0002] # COMBINING FOUR DOTS ABOVE
20E1 ; [.0000.010A.0002] # COMBINING LEFT RIGHT ARROW ABOVE
20E6 ; [.0000.010B.0002] # COMBINING DOUBLE VERTICAL STROKE OVERLAY
20E7 ; [.0000.010C.0002] # COMBINING ANNUITY SYMBOL
20E8 ; [.0000.010D.0002] # COMBINING TRIPLE UNDERDOT
20E9 ; [.0000.010E.0002] # COMBINING WIDE BRIDGE ABOVE
101FD ; [.0000.010F.0002] # PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
02D0 ; [.1BF8.0020.0002] # MODIFIER LETTER TRIANGULAR COLON
02D1 ; [.1BF9.0020.0002] # MODIFIER LETTER HALF TRIANGULAR COLON
0971 ; [.1BFA.0020.0002] # DEVANAGARI SIGN HIGH SPACING DOT
0E46 ; [.1BFB.0020.0002] # THAI CHARACTER MAIYAMOK
0EC6 ; [.1BFC.0020.0002] # LAO KO LA
17D7 ; [.1BFD.0020.0002] # KHMER SIGN LEK TOO
1AA7 ; [.1BFE.0020.0002] # TAI THAM SIGN MAI YAMOK
A9CF ; [.1BFF.0020.0002] # JAVANESE PANGRANGKEP
A9E6 ; [.1C00.0020.0002] # MYANMAR MODIFIER LETTER SHAN REDUPLICATION
AA70 ; [.1C01.0020.0002] # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
AADD ; [.1C02.0020.0002] # TAI VIET SYMBOL SAM
AAF3 ; [.1C03.0020.0002] # MEETEI MAYEK SYLLABLE REPETITION MARK
AAF4 ; [.1C04.0020.0002] # MEETEI MAYEK WORD REPETITION MARK
16B42 ; [.1C05.0020.0002] # PAHAWH HMONG SIGN VOS NRUA
16B43 ; [.1C06.0020.0002] # PAHAWH HMONG SIGN IB YAM
3005 ; [.1C07.0020.0002] # IDEOGRAPHIC ITERATION MARK
303B ; [.1C08.0020.0002] # VERTICAL IDEOGRAPHIC ITERATION MARK
16FE0 ; [.1C09.0020.0002] # TANGUT ITERATION MARK
3031 ; [.1C0A.0020.0002] # VERTICAL KANA REPEAT MARK
3032 ; [.1C0A.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK
3033 ; [.1C0B.0020.0002] # VERTICAL KANA REPEAT MARK UPPER HALF
3034 ; [.1C0B.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
3035 ; [.1C0C.0020.0002] # VERTICAL KANA REPEAT MARK LOWER HALF
309D ; [.1C0D.0020.0002] # HIRAGANA ITERATION MARK
309E ; [.1C0D.0020.0002][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK
30FC ; [.1C0E.0020.0002] # KATAKANA-HIRAGANA PROLONGED SOUND MARK
FF70 ; [.1C0E.0020.0012] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
30FD ; [.1C0F.0020.0002] # KATAKANA ITERATION MARK
30FE ; [.1C0F.0020.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK
00A4 ; [.1C10.0020.0002] # CURRENCY SIGN
00A2 ; [.1C11.0020.0002] # CENT SIGN
FFE0 ; [.1C11.0020.0003] # FULLWIDTH CENT SIGN
0024 ; [.1C12.0020.0002] # DOLLAR SIGN
FF04 ; [.1C12.0020.0003] # FULLWIDTH DOLLAR SIGN
FE69 ; [.1C12.0020.000F] # SMALL DOLLAR SIGN
00A3 ; [.1C13.0020.0002] # POUND SIGN
FFE1 ; [.1C13.0020.0003] # FULLWIDTH POUND SIGN
00A5 ; [.1C14.0020.0002] # YEN SIGN
FFE5 ; [.1C14.0020.0003] # FULLWIDTH YEN SIGN
058F ; [.1C15.0020.0002] # ARMENIAN DRAM SIGN
060B ; [.1C16.0020.0002] # AFGHANI SIGN
09F2 ; [.1C17.0020.0002] # BENGALI RUPEE MARK
09F3 ; [.1C18.0020.0002] # BENGALI RUPEE SIGN
09FB ; [.1C19.0020.0002] # BENGALI GANDA MARK
0AF1 ; [.1C1A.0020.0002] # GUJARATI RUPEE SIGN
A838 ; [.1C1B.0020.0002] # NORTH INDIC RUPEE MARK
0BF9 ; [.1C1C.0020.0002] # TAMIL RUPEE SIGN
0E3F ; [.1C1D.0020.0002] # THAI CURRENCY SYMBOL BAHT
17DB ; [.1C1E.0020.0002] # KHMER CURRENCY SYMBOL RIEL
20A0 ; [.1C1F.0020.0002] # EURO-CURRENCY SIGN
20A1 ; [.1C20.0020.0002] # COLON SIGN
20A2 ; [.1C21.0020.0002] # CRUZEIRO SIGN
20A3 ; [.1C22.0020.0002] # FRENCH FRANC SIGN
20A4 ; [.1C23.0020.0002] # LIRA SIGN
20A5 ; [.1C24.0020.0002] # MILL SIGN
20A6 ; [.1C25.0020.0002] # NAIRA SIGN
20A7 ; [.1C26.0020.0002] # PESETA SIGN
20A9 ; [.1C27.0020.0002] # WON SIGN
FFE6 ; [.1C27.0020.0003] # FULLWIDTH WON SIGN
20AA ; [.1C28.0020.0002] # NEW SHEQEL SIGN
20AB ; [.1C29.0020.0002] # DONG SIGN
20AC ; [.1C2A.0020.0002] # EURO SIGN
20AD ; [.1C2B.0020.0002] # KIP SIGN
20AE ; [.1C2C.0020.0002] # TUGRIK SIGN
20AF ; [.1C2D.0020.0002] # DRACHMA SIGN
20B0 ; [.1C2E.0020.0002] # GERMAN PENNY SIGN
20B1 ; [.1C2F.0020.0002] # PESO SIGN
20B2 ; [.1C30.0020.0002] # GUARANI SIGN
20B3 ; [.1C31.0020.0002] # AUSTRAL SIGN
20B4 ; [.1C32.0020.0002] # HRYVNIA SIGN
20B5 ; [.1C33.0020.0002] # CEDI SIGN
20B6 ; [.1C34.0020.0002] # LIVRE TOURNOIS SIGN
20B7 ; [.1C35.0020.0002] # SPESMILO SIGN
20B8 ; [.1C36.0020.0002] # TENGE SIGN
20B9 ; [.1C37.0020.0002] # INDIAN RUPEE SIGN
20BA ; [.1C38.0020.0002] # TURKISH LIRA SIGN
20BB ; [.1C39.0020.0002] # NORDIC MARK SIGN
20BC ; [.1C3A.0020.0002] # MANAT SIGN
20BD ; [.1C3B.0020.0002] # RUBLE SIGN
20BE ; [.1C3C.0020.0002] # LARI SIGN
0030 ; [.1C3D.0020.0002] # DIGIT ZERO
0660 ; [.1C3D.0020.0002] # ARABIC-INDIC DIGIT ZERO
06F0 ; [.1C3D.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ZERO
07C0 ; [.1C3D.0020.0002] # NKO DIGIT ZERO
0966 ; [.1C3D.0020.0002] # DEVANAGARI DIGIT ZERO
09E6 ; [.1C3D.0020.0002] # BENGALI DIGIT ZERO
0A66 ; [.1C3D.0020.0002] # GURMUKHI DIGIT ZERO
0AE6 ; [.1C3D.0020.0002] # GUJARATI DIGIT ZERO
0B66 ; [.1C3D.0020.0002] # ORIYA DIGIT ZERO
0BE6 ; [.1C3D.0020.0002] # TAMIL DIGIT ZERO
0C66 ; [.1C3D.0020.0002] # TELUGU DIGIT ZERO
0C78 ; [.1C3D.0020.0002] # TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR
0CE6 ; [.1C3D.0020.0002] # KANNADA DIGIT ZERO
0D66 ; [.1C3D.0020.0002] # MALAYALAM DIGIT ZERO
0DE6 ; [.1C3D.0020.0002] # SINHALA LITH DIGIT ZERO
0E50 ; [.1C3D.0020.0002] # THAI DIGIT ZERO
0ED0 ; [.1C3D.0020.0002] # LAO DIGIT ZERO
0F20 ; [.1C3D.0020.0002] # TIBETAN DIGIT ZERO
1040 ; [.1C3D.0020.0002] # MYANMAR DIGIT ZERO
1090 ; [.1C3D.0020.0002] # MYANMAR SHAN DIGIT ZERO
17E0 ; [.1C3D.0020.0002] # KHMER DIGIT ZERO
17F0 ; [.1C3D.0020.0002] # KHMER SYMBOL LEK ATTAK SON
1810 ; [.1C3D.0020.0002] # MONGOLIAN DIGIT ZERO
1946 ; [.1C3D.0020.0002] # LIMBU DIGIT ZERO
19D0 ; [.1C3D.0020.0002] # NEW TAI LUE DIGIT ZERO
1A80 ; [.1C3D.0020.0002] # TAI THAM HORA DIGIT ZERO
1A90 ; [.1C3D.0020.0002] # TAI THAM THAM DIGIT ZERO
1B50 ; [.1C3D.0020.0002] # BALINESE DIGIT ZERO
1BB0 ; [.1C3D.0020.0002] # SUNDANESE DIGIT ZERO
1C40 ; [.1C3D.0020.0002] # LEPCHA DIGIT ZERO
1C50 ; [.1C3D.0020.0002] # OL CHIKI DIGIT ZERO
3007 ; [.1C3D.0020.0002] # IDEOGRAPHIC NUMBER ZERO
A620 ; [.1C3D.0020.0002] # VAI DIGIT ZERO
A8D0 ; [.1C3D.0020.0002] # SAURASHTRA DIGIT ZERO
A900 ; [.1C3D.0020.0002] # KAYAH LI DIGIT ZERO
A9D0 ; [.1C3D.0020.0002] # JAVANESE DIGIT ZERO
A9F0 ; [.1C3D.0020.0002] # MYANMAR TAI LAING DIGIT ZERO
AA50 ; [.1C3D.0020.0002] # CHAM DIGIT ZERO
ABF0 ; [.1C3D.0020.0002] # MEETEI MAYEK DIGIT ZERO
1018A ; [.1C3D.0020.0002] # GREEK ZERO SIGN
104A0 ; [.1C3D.0020.0002] # OSMANYA DIGIT ZERO
11066 ; [.1C3D.0020.0002] # BRAHMI DIGIT ZERO
110F0 ; [.1C3D.0020.0002] # SORA SOMPENG DIGIT ZERO
11136 ; [.1C3D.0020.0002] # CHAKMA DIGIT ZERO
111D0 ; [.1C3D.0020.0002] # SHARADA DIGIT ZERO
112F0 ; [.1C3D.0020.0002] # KHUDAWADI DIGIT ZERO
11450 ; [.1C3D.0020.0002] # NEWA DIGIT ZERO
114D0 ; [.1C3D.0020.0002] # TIRHUTA DIGIT ZERO
11650 ; [.1C3D.0020.0002] # MODI DIGIT ZERO
116C0 ; [.1C3D.0020.0002] # TAKRI DIGIT ZERO
11730 ; [.1C3D.0020.0002] # AHOM DIGIT ZERO
118E0 ; [.1C3D.0020.0002] # WARANG CITI DIGIT ZERO
11C50 ; [.1C3D.0020.0002] # BHAIKSUKI DIGIT ZERO
16A60 ; [.1C3D.0020.0002] # MRO DIGIT ZERO
16B50 ; [.1C3D.0020.0002] # PAHAWH HMONG DIGIT ZERO
1E950 ; [.1C3D.0020.0002] # ADLAM DIGIT ZERO
FF10 ; [.1C3D.0020.0003] # FULLWIDTH DIGIT ZERO
0F33 ; [.1C3D.0020.0004] # TIBETAN DIGIT HALF ZERO
1F100 ; [.1C3D.0020.0004][*0277.0020.0004] # DIGIT ZERO FULL STOP
1F101 ; [.1C3D.0020.0004][*0222.0020.0004] # DIGIT ZERO COMMA
1D7CE ; [.1C3D.0020.0005] # MATHEMATICAL BOLD DIGIT ZERO
1D7D8 ; [.1C3D.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
1D7E2 ; [.1C3D.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ZERO
1D7EC ; [.1C3D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
1D7F6 ; [.1C3D.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ZERO
24EA ; [.1C3D.0020.0006] # CIRCLED DIGIT ZERO
24FF ; [.1C3D.0020.0006] # NEGATIVE CIRCLED DIGIT ZERO
1F10B ; [.1C3D.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ZERO
1F10C ; [.1C3D.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
2070 ; [.1C3D.0020.0014] # SUPERSCRIPT ZERO
2080 ; [.1C3D.0020.0015] # SUBSCRIPT ZERO
2189 ; [.1C3D.0020.001E][*0626.0020.001E][.1C40.0020.001E] # VULGAR FRACTION ZERO THIRDS
3358 ; [.1C3D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
0031 ; [.1C3E.0020.0002] # DIGIT ONE
0661 ; [.1C3E.0020.0002] # ARABIC-INDIC DIGIT ONE
06F1 ; [.1C3E.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ONE
07C1 ; [.1C3E.0020.0002] # NKO DIGIT ONE
0967 ; [.1C3E.0020.0002] # DEVANAGARI DIGIT ONE
09E7 ; [.1C3E.0020.0002] # BENGALI DIGIT ONE
0A67 ; [.1C3E.0020.0002] # GURMUKHI DIGIT ONE
0AE7 ; [.1C3E.0020.0002] # GUJARATI DIGIT ONE
0B67 ; [.1C3E.0020.0002] # ORIYA DIGIT ONE
0BE7 ; [.1C3E.0020.0002] # TAMIL DIGIT ONE
0C67 ; [.1C3E.0020.0002] # TELUGU DIGIT ONE
0C79 ; [.1C3E.0020.0002] # TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR
0C7C ; [.1C3E.0020.0002] # TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR
0CE7 ; [.1C3E.0020.0002] # KANNADA DIGIT ONE
0D67 ; [.1C3E.0020.0002] # MALAYALAM DIGIT ONE
0DE7 ; [.1C3E.0020.0002] # SINHALA LITH DIGIT ONE
0E51 ; [.1C3E.0020.0002] # THAI DIGIT ONE
0ED1 ; [.1C3E.0020.0002] # LAO DIGIT ONE
0F21 ; [.1C3E.0020.0002] # TIBETAN DIGIT ONE
1041 ; [.1C3E.0020.0002] # MYANMAR DIGIT ONE
1091 ; [.1C3E.0020.0002] # MYANMAR SHAN DIGIT ONE
1369 ; [.1C3E.0020.0002] # ETHIOPIC DIGIT ONE
17E1 ; [.1C3E.0020.0002] # KHMER DIGIT ONE
17F1 ; [.1C3E.0020.0002] # KHMER SYMBOL LEK ATTAK MUOY
1811 ; [.1C3E.0020.0002] # MONGOLIAN DIGIT ONE
1947 ; [.1C3E.0020.0002] # LIMBU DIGIT ONE
19D1 ; [.1C3E.0020.0002] # NEW TAI LUE DIGIT ONE
19DA ; [.1C3E.0020.0002] # NEW TAI LUE THAM DIGIT ONE
1A81 ; [.1C3E.0020.0002] # TAI THAM HORA DIGIT ONE
1A91 ; [.1C3E.0020.0002] # TAI THAM THAM DIGIT ONE
1B51 ; [.1C3E.0020.0002] # BALINESE DIGIT ONE
1BB1 ; [.1C3E.0020.0002] # SUNDANESE DIGIT ONE
1C41 ; [.1C3E.0020.0002] # LEPCHA DIGIT ONE
1C51 ; [.1C3E.0020.0002] # OL CHIKI DIGIT ONE
3021 ; [.1C3E.0020.0002] # HANGZHOU NUMERAL ONE
A621 ; [.1C3E.0020.0002] # VAI DIGIT ONE
A8D1 ; [.1C3E.0020.0002] # SAURASHTRA DIGIT ONE
A901 ; [.1C3E.0020.0002] # KAYAH LI DIGIT ONE
A9D1 ; [.1C3E.0020.0002] # JAVANESE DIGIT ONE
A9F1 ; [.1C3E.0020.0002] # MYANMAR TAI LAING DIGIT ONE
AA51 ; [.1C3E.0020.0002] # CHAM DIGIT ONE
ABF1 ; [.1C3E.0020.0002] # MEETEI MAYEK DIGIT ONE
10107 ; [.1C3E.0020.0002] # AEGEAN NUMBER ONE
10142 ; [.1C3E.0020.0002] # GREEK ACROPHONIC ATTIC ONE DRACHMA
10158 ; [.1C3E.0020.0002] # GREEK ACROPHONIC HERAEUM ONE PLETHRON
10159 ; [.1C3E.0020.0002] # GREEK ACROPHONIC THESPIAN ONE
1015A ; [.1C3E.0020.0002] # GREEK ACROPHONIC HERMIONIAN ONE
102E1 ; [.1C3E.0020.0002] # COPTIC EPACT DIGIT ONE
10320 ; [.1C3E.0020.0002] # OLD ITALIC NUMERAL ONE
103D1 ; [.1C3E.0020.0002] # OLD PERSIAN NUMBER ONE
104A1 ; [.1C3E.0020.0002] # OSMANYA DIGIT ONE
10858 ; [.1C3E.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE
10879 ; [.1C3E.0020.0002] # PALMYRENE NUMBER ONE
108A7 ; [.1C3E.0020.0002] # NABATAEAN NUMBER ONE
108FB ; [.1C3E.0020.0002] # HATRAN NUMBER ONE
10916 ; [.1C3E.0020.0002] # PHOENICIAN NUMBER ONE
109C0 ; [.1C3E.0020.0002] # MEROITIC CURSIVE NUMBER ONE
10A40 ; [.1C3E.0020.0002] # KHAROSHTHI DIGIT ONE
10A7D ; [.1C3E.0020.0002] # OLD SOUTH ARABIAN NUMBER ONE
10A9D ; [.1C3E.0020.0002] # OLD NORTH ARABIAN NUMBER ONE
10AEB ; [.1C3E.0020.0002] # MANICHAEAN NUMBER ONE
10B58 ; [.1C3E.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE
10B78 ; [.1C3E.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE
10BA9 ; [.1C3E.0020.0002] # PSALTER PAHLAVI NUMBER ONE
10CFA ; [.1C3E.0020.0002] # OLD HUNGARIAN NUMBER ONE
10E60 ; [.1C3E.0020.0002] # RUMI DIGIT ONE
11052 ; [.1C3E.0020.0002] # BRAHMI NUMBER ONE
11067 ; [.1C3E.0020.0002] # BRAHMI DIGIT ONE
110F1 ; [.1C3E.0020.0002] # SORA SOMPENG DIGIT ONE
11137 ; [.1C3E.0020.0002] # CHAKMA DIGIT ONE
111D1 ; [.1C3E.0020.0002] # SHARADA DIGIT ONE
111E1 ; [.1C3E.0020.0002] # SINHALA ARCHAIC DIGIT ONE
112F1 ; [.1C3E.0020.0002] # KHUDAWADI DIGIT ONE
11451 ; [.1C3E.0020.0002] # NEWA DIGIT ONE
114D1 ; [.1C3E.0020.0002] # TIRHUTA DIGIT ONE
11651 ; [.1C3E.0020.0002] # MODI DIGIT ONE
116C1 ; [.1C3E.0020.0002] # TAKRI DIGIT ONE
11731 ; [.1C3E.0020.0002] # AHOM DIGIT ONE
118E1 ; [.1C3E.0020.0002] # WARANG CITI DIGIT ONE
11C51 ; [.1C3E.0020.0002] # BHAIKSUKI DIGIT ONE
11C5A ; [.1C3E.0020.0002] # BHAIKSUKI NUMBER ONE
12415 ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESH2
1241E ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESHU
1242C ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE SHARU
12434 ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BURU
1244F ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BAN2
12458 ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE ESHE3
16A61 ; [.1C3E.0020.0002] # MRO DIGIT ONE
16B51 ; [.1C3E.0020.0002] # PAHAWH HMONG DIGIT ONE
1D360 ; [.1C3E.0020.0002] # COUNTING ROD UNIT DIGIT ONE
1E8C7 ; [.1C3E.0020.0002] # MENDE KIKAKUI DIGIT ONE
1E951 ; [.1C3E.0020.0002] # ADLAM DIGIT ONE
FF11 ; [.1C3E.0020.0003] # FULLWIDTH DIGIT ONE
0F2A ; [.1C3E.0020.0004] # TIBETAN DIGIT HALF ONE
2474 ; [*0317.0020.0004][.1C3E.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT ONE
2488 ; [.1C3E.0020.0004][*0277.0020.0004] # DIGIT ONE FULL STOP
1F102 ; [.1C3E.0020.0004][*0222.0020.0004] # DIGIT ONE COMMA
1D7CF ; [.1C3E.0020.0005] # MATHEMATICAL BOLD DIGIT ONE
1D7D9 ; [.1C3E.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
1D7E3 ; [.1C3E.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ONE
1D7ED ; [.1C3E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
1D7F7 ; [.1C3E.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ONE
2460 ; [.1C3E.0020.0006] # CIRCLED DIGIT ONE
24F5 ; [.1C3E.0020.0006] # DOUBLE CIRCLED DIGIT ONE
2776 ; [.1C3E.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT ONE
2780 ; [.1C3E.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ONE
278A ; [.1C3E.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
00B9 ; [.1C3E.0020.0014] # SUPERSCRIPT ONE
2081 ; [.1C3E.0020.0015] # SUBSCRIPT ONE
215F ; [.1C3E.0020.001E][*0626.0020.001E] # FRACTION NUMERATOR ONE
247D ; [*0317.0020.0004][.1C3E.0020.0004][.1C3D.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER TEN
2491 ; [.1C3E.0020.0004][.1C3D.0020.0004][*0277.0020.0004] # NUMBER TEN FULL STOP
2469 ; [.1C3E.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TEN
24FE ; [.1C3E.0020.0006][.1C3D.0020.0006] # DOUBLE CIRCLED NUMBER TEN
277F ; [.1C3E.0020.0006][.1C3D.0020.0006] # DINGBAT NEGATIVE CIRCLED NUMBER TEN
2789 ; [.1C3E.0020.0006][.1C3D.0020.0006] # DINGBAT CIRCLED SANS-SERIF NUMBER TEN
2793 ; [.1C3E.0020.0006][.1C3D.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
3248 ; [.1C3E.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TEN ON BLACK SQUARE
33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
247E ; [*0317.0020.0004][.1C3E.0020.0004][.1C3E.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER ELEVEN
2492 ; [.1C3E.0020.0004][.1C3E.0020.0004][*0277.0020.0004] # NUMBER ELEVEN FULL STOP
246A ; [.1C3E.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER ELEVEN
24EB ; [.1C3E.0020.0006][.1C3E.0020.0006] # NEGATIVE CIRCLED NUMBER ELEVEN
2152 ; [.1C3E.0020.001E][*0626.0020.001E][.1C3E.0020.001E][.1C3D.0020.001E] # VULGAR FRACTION ONE TENTH
33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
247F ; [*0317.0020.0004][.1C3E.0020.0004][.1C3F.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER TWELVE
2493 ; [.1C3E.0020.0004][.1C3F.0020.0004][*0277.0020.0004] # NUMBER TWELVE FULL STOP
246B ; [.1C3E.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER TWELVE
24EC ; [.1C3E.0020.0006][.1C3F.0020.0006] # NEGATIVE CIRCLED NUMBER TWELVE
00BD ; [.1C3E.0020.001E][*0626.0020.001E][.1C3F.0020.001E] # VULGAR FRACTION ONE HALF
1F1A4 ; [.1C3E.0020.001C][.1C3F.0020.001C][.1C3D.0020.001C][.1E0C.0020.001D] # SQUARED ONE HUNDRED TWENTY P
33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
2480 ; [*0317.0020.0004][.1C3E.0020.0004][.1C40.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER THIRTEEN
2494 ; [.1C3E.0020.0004][.1C40.0020.0004][*0277.0020.0004] # NUMBER THIRTEEN FULL STOP
246C ; [.1C3E.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER THIRTEEN
24ED ; [.1C3E.0020.0006][.1C40.0020.0006] # NEGATIVE CIRCLED NUMBER THIRTEEN
2153 ; [.1C3E.0020.001E][*0626.0020.001E][.1C40.0020.001E] # VULGAR FRACTION ONE THIRD
33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
2481 ; [*0317.0020.0004][.1C3E.0020.0004][.1C41.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER FOURTEEN
2495 ; [.1C3E.0020.0004][.1C41.0020.0004][*0277.0020.0004] # NUMBER FOURTEEN FULL STOP
246D ; [.1C3E.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER FOURTEEN
24EE ; [.1C3E.0020.0006][.1C41.0020.0006] # NEGATIVE CIRCLED NUMBER FOURTEEN
00BC ; [.1C3E.0020.001E][*0626.0020.001E][.1C41.0020.001E] # VULGAR FRACTION ONE QUARTER
33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
2482 ; [*0317.0020.0004][.1C3E.0020.0004][.1C42.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER FIFTEEN
2496 ; [.1C3E.0020.0004][.1C42.0020.0004][*0277.0020.0004] # NUMBER FIFTEEN FULL STOP
246E ; [.1C3E.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER FIFTEEN
24EF ; [.1C3E.0020.0006][.1C42.0020.0006] # NEGATIVE CIRCLED NUMBER FIFTEEN
2155 ; [.1C3E.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION ONE FIFTH
33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
2483 ; [*0317.0020.0004][.1C3E.0020.0004][.1C43.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER SIXTEEN
2497 ; [.1C3E.0020.0004][.1C43.0020.0004][*0277.0020.0004] # NUMBER SIXTEEN FULL STOP
246F ; [.1C3E.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER SIXTEEN
24F0 ; [.1C3E.0020.0006][.1C43.0020.0006] # NEGATIVE CIRCLED NUMBER SIXTEEN
2159 ; [.1C3E.0020.001E][*0626.0020.001E][.1C43.0020.001E] # VULGAR FRACTION ONE SIXTH
33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
2484 ; [*0317.0020.0004][.1C3E.0020.0004][.1C44.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER SEVENTEEN
2498 ; [.1C3E.0020.0004][.1C44.0020.0004][*0277.0020.0004] # NUMBER SEVENTEEN FULL STOP
2470 ; [.1C3E.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER SEVENTEEN
24F1 ; [.1C3E.0020.0006][.1C44.0020.0006] # NEGATIVE CIRCLED NUMBER SEVENTEEN
2150 ; [.1C3E.0020.001E][*0626.0020.001E][.1C44.0020.001E] # VULGAR FRACTION ONE SEVENTH
33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
2485 ; [*0317.0020.0004][.1C3E.0020.0004][.1C45.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER EIGHTEEN
2499 ; [.1C3E.0020.0004][.1C45.0020.0004][*0277.0020.0004] # NUMBER EIGHTEEN FULL STOP
2471 ; [.1C3E.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER EIGHTEEN
24F2 ; [.1C3E.0020.0006][.1C45.0020.0006] # NEGATIVE CIRCLED NUMBER EIGHTEEN
215B ; [.1C3E.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION ONE EIGHTH
33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
336A ; [.1C3E.0020.0004][.1C45.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
2486 ; [*0317.0020.0004][.1C3E.0020.0004][.1C46.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER NINETEEN
249A ; [.1C3E.0020.0004][.1C46.0020.0004][*0277.0020.0004] # NUMBER NINETEEN FULL STOP
2472 ; [.1C3E.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER NINETEEN
24F3 ; [.1C3E.0020.0006][.1C46.0020.0006] # NEGATIVE CIRCLED NUMBER NINETEEN
2151 ; [.1C3E.0020.001E][*0626.0020.001E][.1C46.0020.001E] # VULGAR FRACTION ONE NINTH
33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
336B ; [.1C3E.0020.0004][.1C46.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
33E0 ; [.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
32C0 ; [.1C3E.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
3359 ; [.1C3E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
0032 ; [.1C3F.0020.0002] # DIGIT TWO
0662 ; [.1C3F.0020.0002] # ARABIC-INDIC DIGIT TWO
06F2 ; [.1C3F.0020.0002] # EXTENDED ARABIC-INDIC DIGIT TWO
07C2 ; [.1C3F.0020.0002] # NKO DIGIT TWO
0968 ; [.1C3F.0020.0002] # DEVANAGARI DIGIT TWO
09E8 ; [.1C3F.0020.0002] # BENGALI DIGIT TWO
0A68 ; [.1C3F.0020.0002] # GURMUKHI DIGIT TWO
0AE8 ; [.1C3F.0020.0002] # GUJARATI DIGIT TWO
0B68 ; [.1C3F.0020.0002] # ORIYA DIGIT TWO
0BE8 ; [.1C3F.0020.0002] # TAMIL DIGIT TWO
0C68 ; [.1C3F.0020.0002] # TELUGU DIGIT TWO
0C7A ; [.1C3F.0020.0002] # TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR
0C7D ; [.1C3F.0020.0002] # TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR
0CE8 ; [.1C3F.0020.0002] # KANNADA DIGIT TWO
0D68 ; [.1C3F.0020.0002] # MALAYALAM DIGIT TWO
0DE8 ; [.1C3F.0020.0002] # SINHALA LITH DIGIT TWO
0E52 ; [.1C3F.0020.0002] # THAI DIGIT TWO
0ED2 ; [.1C3F.0020.0002] # LAO DIGIT TWO
0F22 ; [.1C3F.0020.0002] # TIBETAN DIGIT TWO
1042 ; [.1C3F.0020.0002] # MYANMAR DIGIT TWO
1092 ; [.1C3F.0020.0002] # MYANMAR SHAN DIGIT TWO
136A ; [.1C3F.0020.0002] # ETHIOPIC DIGIT TWO
17E2 ; [.1C3F.0020.0002] # KHMER DIGIT TWO
17F2 ; [.1C3F.0020.0002] # KHMER SYMBOL LEK ATTAK PII
1812 ; [.1C3F.0020.0002] # MONGOLIAN DIGIT TWO
1948 ; [.1C3F.0020.0002] # LIMBU DIGIT TWO
19D2 ; [.1C3F.0020.0002] # NEW TAI LUE DIGIT TWO
1A82 ; [.1C3F.0020.0002] # TAI THAM HORA DIGIT TWO
1A92 ; [.1C3F.0020.0002] # TAI THAM THAM DIGIT TWO
1B52 ; [.1C3F.0020.0002] # BALINESE DIGIT TWO
1BB2 ; [.1C3F.0020.0002] # SUNDANESE DIGIT TWO
1C42 ; [.1C3F.0020.0002] # LEPCHA DIGIT TWO
1C52 ; [.1C3F.0020.0002] # OL CHIKI DIGIT TWO
3022 ; [.1C3F.0020.0002] # HANGZHOU NUMERAL TWO
A622 ; [.1C3F.0020.0002] # VAI DIGIT TWO
A8D2 ; [.1C3F.0020.0002] # SAURASHTRA DIGIT TWO
A902 ; [.1C3F.0020.0002] # KAYAH LI DIGIT TWO
A9D2 ; [.1C3F.0020.0002] # JAVANESE DIGIT TWO
A9F2 ; [.1C3F.0020.0002] # MYANMAR TAI LAING DIGIT TWO
AA52 ; [.1C3F.0020.0002] # CHAM DIGIT TWO
ABF2 ; [.1C3F.0020.0002] # MEETEI MAYEK DIGIT TWO
10108 ; [.1C3F.0020.0002] # AEGEAN NUMBER TWO
1015B ; [.1C3F.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO
1015C ; [.1C3F.0020.0002] # GREEK ACROPHONIC THESPIAN TWO
1015D ; [.1C3F.0020.0002] # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
1015E ; [.1C3F.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
102E2 ; [.1C3F.0020.0002] # COPTIC EPACT DIGIT TWO
103D2 ; [.1C3F.0020.0002] # OLD PERSIAN NUMBER TWO
104A2 ; [.1C3F.0020.0002] # OSMANYA DIGIT TWO
10859 ; [.1C3F.0020.0002] # IMPERIAL ARAMAIC NUMBER TWO
1087A ; [.1C3F.0020.0002] # PALMYRENE NUMBER TWO
108A8 ; [.1C3F.0020.0002] # NABATAEAN NUMBER TWO
1091A ; [.1C3F.0020.0002] # PHOENICIAN NUMBER TWO
109C1 ; [.1C3F.0020.0002] # MEROITIC CURSIVE NUMBER TWO
10A41 ; [.1C3F.0020.0002] # KHAROSHTHI DIGIT TWO
10B59 ; [.1C3F.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWO
10B79 ; [.1C3F.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWO
10BAA ; [.1C3F.0020.0002] # PSALTER PAHLAVI NUMBER TWO
10E61 ; [.1C3F.0020.0002] # RUMI DIGIT TWO
11053 ; [.1C3F.0020.0002] # BRAHMI NUMBER TWO
11068 ; [.1C3F.0020.0002] # BRAHMI DIGIT TWO
110F2 ; [.1C3F.0020.0002] # SORA SOMPENG DIGIT TWO
11138 ; [.1C3F.0020.0002] # CHAKMA DIGIT TWO
111D2 ; [.1C3F.0020.0002] # SHARADA DIGIT TWO
111E2 ; [.1C3F.0020.0002] # SINHALA ARCHAIC DIGIT TWO
112F2 ; [.1C3F.0020.0002] # KHUDAWADI DIGIT TWO
11452 ; [.1C3F.0020.0002] # NEWA DIGIT TWO
114D2 ; [.1C3F.0020.0002] # TIRHUTA DIGIT TWO
11652 ; [.1C3F.0020.0002] # MODI DIGIT TWO
116C2 ; [.1C3F.0020.0002] # TAKRI DIGIT TWO
11732 ; [.1C3F.0020.0002] # AHOM DIGIT TWO
118E2 ; [.1C3F.0020.0002] # WARANG CITI DIGIT TWO
11C52 ; [.1C3F.0020.0002] # BHAIKSUKI DIGIT TWO
11C5B ; [.1C3F.0020.0002] # BHAIKSUKI NUMBER TWO
12400 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH
12416 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESH2
1241F ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESHU
12423 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHAR2
1242D ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHARU
12435 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BURU
1244A ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH TENU
12450 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BAN2
12456 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAMIN
12459 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ESHE3
16A62 ; [.1C3F.0020.0002] # MRO DIGIT TWO
16B52 ; [.1C3F.0020.0002] # PAHAWH HMONG DIGIT TWO
1D361 ; [.1C3F.0020.0002] # COUNTING ROD UNIT DIGIT TWO
1E8C8 ; [.1C3F.0020.0002] # MENDE KIKAKUI DIGIT TWO
1E952 ; [.1C3F.0020.0002] # ADLAM DIGIT TWO
FF12 ; [.1C3F.0020.0003] # FULLWIDTH DIGIT TWO
0F2B ; [.1C3F.0020.0004] # TIBETAN DIGIT HALF TWO
2475 ; [*0317.0020.0004][.1C3F.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT TWO
2489 ; [.1C3F.0020.0004][*0277.0020.0004] # DIGIT TWO FULL STOP
1F103 ; [.1C3F.0020.0004][*0222.0020.0004] # DIGIT TWO COMMA
1D7D0 ; [.1C3F.0020.0005] # MATHEMATICAL BOLD DIGIT TWO
1D7DA ; [.1C3F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
1D7E4 ; [.1C3F.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT TWO
1D7EE ; [.1C3F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
1D7F8 ; [.1C3F.0020.0005] # MATHEMATICAL MONOSPACE DIGIT TWO
2461 ; [.1C3F.0020.0006] # CIRCLED DIGIT TWO
24F6 ; [.1C3F.0020.0006] # DOUBLE CIRCLED DIGIT TWO
2777 ; [.1C3F.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT TWO
2781 ; [.1C3F.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT TWO
278B ; [.1C3F.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
00B2 ; [.1C3F.0020.0014] # SUPERSCRIPT TWO
2082 ; [.1C3F.0020.0015] # SUBSCRIPT TWO
2487 ; [*0317.0020.0004][.1C3F.0020.0004][.1C3D.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER TWENTY
249B ; [.1C3F.0020.0004][.1C3D.0020.0004][*0277.0020.0004] # NUMBER TWENTY FULL STOP
2473 ; [.1C3F.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TWENTY
24F4 ; [.1C3F.0020.0006][.1C3D.0020.0006] # NEGATIVE CIRCLED NUMBER TWENTY
3249 ; [.1C3F.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TWENTY ON BLACK SQUARE
33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
3251 ; [.1C3F.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER TWENTY ONE
33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
3252 ; [.1C3F.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER TWENTY TWO
1F1A2 ; [.1C3F.0020.001C][.1C3F.0020.001C][*0277.0020.001C][.1C3F.0020.001C] # SQUARED TWENTY-TWO POINT TWO
33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
3253 ; [.1C3F.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER TWENTY THREE
2154 ; [.1C3F.0020.001E][*0626.0020.001E][.1C40.0020.001E] # VULGAR FRACTION TWO THIRDS
33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
336F ; [.1C3F.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
3254 ; [.1C3F.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER TWENTY FOUR
33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
3255 ; [.1C3F.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER TWENTY FIVE
2156 ; [.1C3F.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION TWO FIFTHS
33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
3256 ; [.1C3F.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER TWENTY SIX
33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
3257 ; [.1C3F.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER TWENTY SEVEN
33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
3258 ; [.1C3F.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER TWENTY EIGHT
33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
3259 ; [.1C3F.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER TWENTY NINE
33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
1F19D ; [.1C3F.0020.001C][.1D65.0020.001D] # SQUARED TWO K
1F19C ; [.1C3F.0020.001C][.1DB9.0020.001C][.1C8F.0020.001C][*0209.0020.001C][.1E71.0020.001D][.1C7A.0020.001C][.1E33.0020.001C] # SQUARED SECOND SCREEN
33E1 ; [.1C3F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
32C1 ; [.1C3F.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
335A ; [.1C3F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
0033 ; [.1C40.0020.0002] # DIGIT THREE
0663 ; [.1C40.0020.0002] # ARABIC-INDIC DIGIT THREE
06F3 ; [.1C40.0020.0002] # EXTENDED ARABIC-INDIC DIGIT THREE
07C3 ; [.1C40.0020.0002] # NKO DIGIT THREE
0969 ; [.1C40.0020.0002] # DEVANAGARI DIGIT THREE
09E9 ; [.1C40.0020.0002] # BENGALI DIGIT THREE
0A69 ; [.1C40.0020.0002] # GURMUKHI DIGIT THREE
0AE9 ; [.1C40.0020.0002] # GUJARATI DIGIT THREE
0B69 ; [.1C40.0020.0002] # ORIYA DIGIT THREE
0BE9 ; [.1C40.0020.0002] # TAMIL DIGIT THREE
0C69 ; [.1C40.0020.0002] # TELUGU DIGIT THREE
0C7B ; [.1C40.0020.0002] # TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR
0C7E ; [.1C40.0020.0002] # TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
0CE9 ; [.1C40.0020.0002] # KANNADA DIGIT THREE
0D69 ; [.1C40.0020.0002] # MALAYALAM DIGIT THREE
0DE9 ; [.1C40.0020.0002] # SINHALA LITH DIGIT THREE
0E53 ; [.1C40.0020.0002] # THAI DIGIT THREE
0ED3 ; [.1C40.0020.0002] # LAO DIGIT THREE
0F23 ; [.1C40.0020.0002] # TIBETAN DIGIT THREE
1043 ; [.1C40.0020.0002] # MYANMAR DIGIT THREE
1093 ; [.1C40.0020.0002] # MYANMAR SHAN DIGIT THREE
136B ; [.1C40.0020.0002] # ETHIOPIC DIGIT THREE
17E3 ; [.1C40.0020.0002] # KHMER DIGIT THREE
17F3 ; [.1C40.0020.0002] # KHMER SYMBOL LEK ATTAK BEI
1813 ; [.1C40.0020.0002] # MONGOLIAN DIGIT THREE
1949 ; [.1C40.0020.0002] # LIMBU DIGIT THREE
19D3 ; [.1C40.0020.0002] # NEW TAI LUE DIGIT THREE
1A83 ; [.1C40.0020.0002] # TAI THAM HORA DIGIT THREE
1A93 ; [.1C40.0020.0002] # TAI THAM THAM DIGIT THREE
1B53 ; [.1C40.0020.0002] # BALINESE DIGIT THREE
1BB3 ; [.1C40.0020.0002] # SUNDANESE DIGIT THREE
1C43 ; [.1C40.0020.0002] # LEPCHA DIGIT THREE
1C53 ; [.1C40.0020.0002] # OL CHIKI DIGIT THREE
3023 ; [.1C40.0020.0002] # HANGZHOU NUMERAL THREE
A623 ; [.1C40.0020.0002] # VAI DIGIT THREE
A8D3 ; [.1C40.0020.0002] # SAURASHTRA DIGIT THREE
A903 ; [.1C40.0020.0002] # KAYAH LI DIGIT THREE
A9D3 ; [.1C40.0020.0002] # JAVANESE DIGIT THREE
A9F3 ; [.1C40.0020.0002] # MYANMAR TAI LAING DIGIT THREE
AA53 ; [.1C40.0020.0002] # CHAM DIGIT THREE
ABF3 ; [.1C40.0020.0002] # MEETEI MAYEK DIGIT THREE
10109 ; [.1C40.0020.0002] # AEGEAN NUMBER THREE
102E3 ; [.1C40.0020.0002] # COPTIC EPACT DIGIT THREE
104A3 ; [.1C40.0020.0002] # OSMANYA DIGIT THREE
1085A ; [.1C40.0020.0002] # IMPERIAL ARAMAIC NUMBER THREE
1087B ; [.1C40.0020.0002] # PALMYRENE NUMBER THREE
108A9 ; [.1C40.0020.0002] # NABATAEAN NUMBER THREE
1091B ; [.1C40.0020.0002] # PHOENICIAN NUMBER THREE
109C2 ; [.1C40.0020.0002] # MEROITIC CURSIVE NUMBER THREE
10A42 ; [.1C40.0020.0002] # KHAROSHTHI DIGIT THREE
10B5A ; [.1C40.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER THREE
10B7A ; [.1C40.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER THREE
10BAB ; [.1C40.0020.0002] # PSALTER PAHLAVI NUMBER THREE
10E62 ; [.1C40.0020.0002] # RUMI DIGIT THREE
11054 ; [.1C40.0020.0002] # BRAHMI NUMBER THREE
11069 ; [.1C40.0020.0002] # BRAHMI DIGIT THREE
110F3 ; [.1C40.0020.0002] # SORA SOMPENG DIGIT THREE
11139 ; [.1C40.0020.0002] # CHAKMA DIGIT THREE
111D3 ; [.1C40.0020.0002] # SHARADA DIGIT THREE
111E3 ; [.1C40.0020.0002] # SINHALA ARCHAIC DIGIT THREE
112F3 ; [.1C40.0020.0002] # KHUDAWADI DIGIT THREE
11453 ; [.1C40.0020.0002] # NEWA DIGIT THREE
114D3 ; [.1C40.0020.0002] # TIRHUTA DIGIT THREE
11653 ; [.1C40.0020.0002] # MODI DIGIT THREE
116C3 ; [.1C40.0020.0002] # TAKRI DIGIT THREE
11733 ; [.1C40.0020.0002] # AHOM DIGIT THREE
118E3 ; [.1C40.0020.0002] # WARANG CITI DIGIT THREE
11C53 ; [.1C40.0020.0002] # BHAIKSUKI DIGIT THREE
11C5C ; [.1C40.0020.0002] # BHAIKSUKI NUMBER THREE
12401 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH
12408 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE DISH
12417 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESH2
12420 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESHU
12424 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2
12425 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM
1242E ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU
1242F ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM
12436 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU
12437 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM
1243A ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16
1243B ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21
1244B ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH TENU
12451 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BAN2
12457 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAESH
16A63 ; [.1C40.0020.0002] # MRO DIGIT THREE
16B53 ; [.1C40.0020.0002] # PAHAWH HMONG DIGIT THREE
1D362 ; [.1C40.0020.0002] # COUNTING ROD UNIT DIGIT THREE
1E8C9 ; [.1C40.0020.0002] # MENDE KIKAKUI DIGIT THREE
1E953 ; [.1C40.0020.0002] # ADLAM DIGIT THREE
FF13 ; [.1C40.0020.0003] # FULLWIDTH DIGIT THREE
0F2C ; [.1C40.0020.0004] # TIBETAN DIGIT HALF THREE
2476 ; [*0317.0020.0004][.1C40.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT THREE
248A ; [.1C40.0020.0004][*0277.0020.0004] # DIGIT THREE FULL STOP
1F104 ; [.1C40.0020.0004][*0222.0020.0004] # DIGIT THREE COMMA
1D7D1 ; [.1C40.0020.0005] # MATHEMATICAL BOLD DIGIT THREE
1D7DB ; [.1C40.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
1D7E5 ; [.1C40.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT THREE
1D7EF ; [.1C40.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
1D7F9 ; [.1C40.0020.0005] # MATHEMATICAL MONOSPACE DIGIT THREE
2462 ; [.1C40.0020.0006] # CIRCLED DIGIT THREE
24F7 ; [.1C40.0020.0006] # DOUBLE CIRCLED DIGIT THREE
2778 ; [.1C40.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT THREE
2782 ; [.1C40.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT THREE
278C ; [.1C40.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
00B3 ; [.1C40.0020.0014] # SUPERSCRIPT THREE
2083 ; [.1C40.0020.0015] # SUBSCRIPT THREE
324A ; [.1C40.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER THIRTY ON BLACK SQUARE
325A ; [.1C40.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER THIRTY
33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
325B ; [.1C40.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER THIRTY ONE
33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
325C ; [.1C40.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER THIRTY TWO
325D ; [.1C40.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER THIRTY THREE
325E ; [.1C40.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER THIRTY FOUR
00BE ; [.1C40.0020.001E][*0626.0020.001E][.1C41.0020.001E] # VULGAR FRACTION THREE QUARTERS
325F ; [.1C40.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER THIRTY FIVE
2157 ; [.1C40.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION THREE FIFTHS
32B1 ; [.1C40.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER THIRTY SIX
32B2 ; [.1C40.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER THIRTY SEVEN
32B3 ; [.1C40.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER THIRTY EIGHT
215C ; [.1C40.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION THREE EIGHTHS
32B4 ; [.1C40.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER THIRTY NINE
1F19B ; [.1C40.0020.001C][.1C8F.0020.001D] # SQUARED THREE D
33E2 ; [.1C40.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
32C2 ; [.1C40.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
335B ; [.1C40.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
0034 ; [.1C41.0020.0002] # DIGIT FOUR
0664 ; [.1C41.0020.0002] # ARABIC-INDIC DIGIT FOUR
06F4 ; [.1C41.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FOUR
07C4 ; [.1C41.0020.0002] # NKO DIGIT FOUR
096A ; [.1C41.0020.0002] # DEVANAGARI DIGIT FOUR
09EA ; [.1C41.0020.0002] # BENGALI DIGIT FOUR
0A6A ; [.1C41.0020.0002] # GURMUKHI DIGIT FOUR
0AEA ; [.1C41.0020.0002] # GUJARATI DIGIT FOUR
0B6A ; [.1C41.0020.0002] # ORIYA DIGIT FOUR
0BEA ; [.1C41.0020.0002] # TAMIL DIGIT FOUR
0C6A ; [.1C41.0020.0002] # TELUGU DIGIT FOUR
0CEA ; [.1C41.0020.0002] # KANNADA DIGIT FOUR
0D6A ; [.1C41.0020.0002] # MALAYALAM DIGIT FOUR
0DEA ; [.1C41.0020.0002] # SINHALA LITH DIGIT FOUR
0E54 ; [.1C41.0020.0002] # THAI DIGIT FOUR
0ED4 ; [.1C41.0020.0002] # LAO DIGIT FOUR
0F24 ; [.1C41.0020.0002] # TIBETAN DIGIT FOUR
1044 ; [.1C41.0020.0002] # MYANMAR DIGIT FOUR
1094 ; [.1C41.0020.0002] # MYANMAR SHAN DIGIT FOUR
136C ; [.1C41.0020.0002] # ETHIOPIC DIGIT FOUR
17E4 ; [.1C41.0020.0002] # KHMER DIGIT FOUR
17F4 ; [.1C41.0020.0002] # KHMER SYMBOL LEK ATTAK BUON
1814 ; [.1C41.0020.0002] # MONGOLIAN DIGIT FOUR
194A ; [.1C41.0020.0002] # LIMBU DIGIT FOUR
19D4 ; [.1C41.0020.0002] # NEW TAI LUE DIGIT FOUR
1A84 ; [.1C41.0020.0002] # TAI THAM HORA DIGIT FOUR
1A94 ; [.1C41.0020.0002] # TAI THAM THAM DIGIT FOUR
1B54 ; [.1C41.0020.0002] # BALINESE DIGIT FOUR
1BB4 ; [.1C41.0020.0002] # SUNDANESE DIGIT FOUR
1C44 ; [.1C41.0020.0002] # LEPCHA DIGIT FOUR
1C54 ; [.1C41.0020.0002] # OL CHIKI DIGIT FOUR
3024 ; [.1C41.0020.0002] # HANGZHOU NUMERAL FOUR
A624 ; [.1C41.0020.0002] # VAI DIGIT FOUR
A8D4 ; [.1C41.0020.0002] # SAURASHTRA DIGIT FOUR
A904 ; [.1C41.0020.0002] # KAYAH LI DIGIT FOUR
A9D4 ; [.1C41.0020.0002] # JAVANESE DIGIT FOUR
A9F4 ; [.1C41.0020.0002] # MYANMAR TAI LAING DIGIT FOUR
AA54 ; [.1C41.0020.0002] # CHAM DIGIT FOUR
ABF4 ; [.1C41.0020.0002] # MEETEI MAYEK DIGIT FOUR
1010A ; [.1C41.0020.0002] # AEGEAN NUMBER FOUR
102E4 ; [.1C41.0020.0002] # COPTIC EPACT DIGIT FOUR
104A4 ; [.1C41.0020.0002] # OSMANYA DIGIT FOUR
1087C ; [.1C41.0020.0002] # PALMYRENE NUMBER FOUR
108AA ; [.1C41.0020.0002] # NABATAEAN NUMBER FOUR
108AB ; [.1C41.0020.0002] # NABATAEAN CRUCIFORM NUMBER FOUR
109C3 ; [.1C41.0020.0002] # MEROITIC CURSIVE NUMBER FOUR
10A43 ; [.1C41.0020.0002] # KHAROSHTHI DIGIT FOUR
10B5B ; [.1C41.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER FOUR
10B7B ; [.1C41.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER FOUR
10BAC ; [.1C41.0020.0002] # PSALTER PAHLAVI NUMBER FOUR
10E63 ; [.1C41.0020.0002] # RUMI DIGIT FOUR
11055 ; [.1C41.0020.0002] # BRAHMI NUMBER FOUR
1106A ; [.1C41.0020.0002] # BRAHMI DIGIT FOUR
110F4 ; [.1C41.0020.0002] # SORA SOMPENG DIGIT FOUR
1113A ; [.1C41.0020.0002] # CHAKMA DIGIT FOUR
111D4 ; [.1C41.0020.0002] # SHARADA DIGIT FOUR
111E4 ; [.1C41.0020.0002] # SINHALA ARCHAIC DIGIT FOUR
112F4 ; [.1C41.0020.0002] # KHUDAWADI DIGIT FOUR
11454 ; [.1C41.0020.0002] # NEWA DIGIT FOUR
114D4 ; [.1C41.0020.0002] # TIRHUTA DIGIT FOUR
11654 ; [.1C41.0020.0002] # MODI DIGIT FOUR
116C4 ; [.1C41.0020.0002] # TAKRI DIGIT FOUR
11734 ; [.1C41.0020.0002] # AHOM DIGIT FOUR
118E4 ; [.1C41.0020.0002] # WARANG CITI DIGIT FOUR
11C54 ; [.1C41.0020.0002] # BHAIKSUKI DIGIT FOUR
11C5D ; [.1C41.0020.0002] # BHAIKSUKI NUMBER FOUR
12402 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH
12409 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR DISH
1240F ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U
12418 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESH2
12421 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESHU
12426 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHAR2
12430 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHARU
12438 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BURU
1243C ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU
1243D ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4
1243E ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A
1243F ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B
1244C ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH TENU
12452 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2
12453 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM
12469 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM
16A64 ; [.1C41.0020.0002] # MRO DIGIT FOUR
16B54 ; [.1C41.0020.0002] # PAHAWH HMONG DIGIT FOUR
1D363 ; [.1C41.0020.0002] # COUNTING ROD UNIT DIGIT FOUR
1E8CA ; [.1C41.0020.0002] # MENDE KIKAKUI DIGIT FOUR
1E954 ; [.1C41.0020.0002] # ADLAM DIGIT FOUR
FF14 ; [.1C41.0020.0003] # FULLWIDTH DIGIT FOUR
0F2D ; [.1C41.0020.0004] # TIBETAN DIGIT HALF FOUR
2477 ; [*0317.0020.0004][.1C41.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT FOUR
248B ; [.1C41.0020.0004][*0277.0020.0004] # DIGIT FOUR FULL STOP
1F105 ; [.1C41.0020.0004][*0222.0020.0004] # DIGIT FOUR COMMA
1D7D2 ; [.1C41.0020.0005] # MATHEMATICAL BOLD DIGIT FOUR
1D7DC ; [.1C41.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
1D7E6 ; [.1C41.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FOUR
1D7F0 ; [.1C41.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
1D7FA ; [.1C41.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FOUR
2463 ; [.1C41.0020.0006] # CIRCLED DIGIT FOUR
24F8 ; [.1C41.0020.0006] # DOUBLE CIRCLED DIGIT FOUR
2779 ; [.1C41.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FOUR
2783 ; [.1C41.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
278D ; [.1C41.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
2074 ; [.1C41.0020.0014] # SUPERSCRIPT FOUR
2084 ; [.1C41.0020.0015] # SUBSCRIPT FOUR
324B ; [.1C41.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FORTY ON BLACK SQUARE
32B5 ; [.1C41.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FORTY
32B6 ; [.1C41.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER FORTY ONE
32B7 ; [.1C41.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER FORTY TWO
32B8 ; [.1C41.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER FORTY THREE
32B9 ; [.1C41.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER FORTY FOUR
32BA ; [.1C41.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER FORTY FIVE
2158 ; [.1C41.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION FOUR FIFTHS
32BB ; [.1C41.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER FORTY SIX
32BC ; [.1C41.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER FORTY SEVEN
32BD ; [.1C41.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER FORTY EIGHT
32BE ; [.1C41.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER FORTY NINE
1F19E ; [.1C41.0020.001C][.1D65.0020.001D] # SQUARED FOUR K
33E3 ; [.1C41.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
32C3 ; [.1C41.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
335C ; [.1C41.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
0035 ; [.1C42.0020.0002] # DIGIT FIVE
0665 ; [.1C42.0020.0002] # ARABIC-INDIC DIGIT FIVE
06F5 ; [.1C42.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FIVE
07C5 ; [.1C42.0020.0002] # NKO DIGIT FIVE
096B ; [.1C42.0020.0002] # DEVANAGARI DIGIT FIVE
09EB ; [.1C42.0020.0002] # BENGALI DIGIT FIVE
0A6B ; [.1C42.0020.0002] # GURMUKHI DIGIT FIVE
0AEB ; [.1C42.0020.0002] # GUJARATI DIGIT FIVE
0B6B ; [.1C42.0020.0002] # ORIYA DIGIT FIVE
0BEB ; [.1C42.0020.0002] # TAMIL DIGIT FIVE
0C6B ; [.1C42.0020.0002] # TELUGU DIGIT FIVE
0CEB ; [.1C42.0020.0002] # KANNADA DIGIT FIVE
0D6B ; [.1C42.0020.0002] # MALAYALAM DIGIT FIVE
0DEB ; [.1C42.0020.0002] # SINHALA LITH DIGIT FIVE
0E55 ; [.1C42.0020.0002] # THAI DIGIT FIVE
0ED5 ; [.1C42.0020.0002] # LAO DIGIT FIVE
0F25 ; [.1C42.0020.0002] # TIBETAN DIGIT FIVE
1045 ; [.1C42.0020.0002] # MYANMAR DIGIT FIVE
1095 ; [.1C42.0020.0002] # MYANMAR SHAN DIGIT FIVE
136D ; [.1C42.0020.0002] # ETHIOPIC DIGIT FIVE
17E5 ; [.1C42.0020.0002] # KHMER DIGIT FIVE
17F5 ; [.1C42.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM
1815 ; [.1C42.0020.0002] # MONGOLIAN DIGIT FIVE
194B ; [.1C42.0020.0002] # LIMBU DIGIT FIVE
19D5 ; [.1C42.0020.0002] # NEW TAI LUE DIGIT FIVE
1A85 ; [.1C42.0020.0002] # TAI THAM HORA DIGIT FIVE
1A95 ; [.1C42.0020.0002] # TAI THAM THAM DIGIT FIVE
1B55 ; [.1C42.0020.0002] # BALINESE DIGIT FIVE
1BB5 ; [.1C42.0020.0002] # SUNDANESE DIGIT FIVE
1C45 ; [.1C42.0020.0002] # LEPCHA DIGIT FIVE
1C55 ; [.1C42.0020.0002] # OL CHIKI DIGIT FIVE
3025 ; [.1C42.0020.0002] # HANGZHOU NUMERAL FIVE
A625 ; [.1C42.0020.0002] # VAI DIGIT FIVE
A8D5 ; [.1C42.0020.0002] # SAURASHTRA DIGIT FIVE
A905 ; [.1C42.0020.0002] # KAYAH LI DIGIT FIVE
A9D5 ; [.1C42.0020.0002] # JAVANESE DIGIT FIVE
A9F5 ; [.1C42.0020.0002] # MYANMAR TAI LAING DIGIT FIVE
AA55 ; [.1C42.0020.0002] # CHAM DIGIT FIVE
ABF5 ; [.1C42.0020.0002] # MEETEI MAYEK DIGIT FIVE
1010B ; [.1C42.0020.0002] # AEGEAN NUMBER FIVE
10143 ; [.1C42.0020.0002] # GREEK ACROPHONIC ATTIC FIVE
10148 ; [.1C42.0020.0002] # GREEK ACROPHONIC ATTIC FIVE TALENTS
1014F ; [.1C42.0020.0002] # GREEK ACROPHONIC ATTIC FIVE STATERS
1015F ; [.1C42.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE
10173 ; [.1C42.0020.0002] # GREEK ACROPHONIC DELPHIC FIVE MNAS
102E5 ; [.1C42.0020.0002] # COPTIC EPACT DIGIT FIVE
10321 ; [.1C42.0020.0002] # OLD ITALIC NUMERAL FIVE
104A5 ; [.1C42.0020.0002] # OSMANYA DIGIT FIVE
1087D ; [.1C42.0020.0002] # PALMYRENE NUMBER FIVE
108AC ; [.1C42.0020.0002] # NABATAEAN NUMBER FIVE
108FC ; [.1C42.0020.0002] # HATRAN NUMBER FIVE
109C4 ; [.1C42.0020.0002] # MEROITIC CURSIVE NUMBER FIVE
10AEC ; [.1C42.0020.0002] # MANICHAEAN NUMBER FIVE
10CFB ; [.1C42.0020.0002] # OLD HUNGARIAN NUMBER FIVE
10E64 ; [.1C42.0020.0002] # RUMI DIGIT FIVE
11056 ; [.1C42.0020.0002] # BRAHMI NUMBER FIVE
1106B ; [.1C42.0020.0002] # BRAHMI DIGIT FIVE
110F5 ; [.1C42.0020.0002] # SORA SOMPENG DIGIT FIVE
1113B ; [.1C42.0020.0002] # CHAKMA DIGIT FIVE
111D5 ; [.1C42.0020.0002] # SHARADA DIGIT FIVE
111E5 ; [.1C42.0020.0002] # SINHALA ARCHAIC DIGIT FIVE
112F5 ; [.1C42.0020.0002] # KHUDAWADI DIGIT FIVE
11455 ; [.1C42.0020.0002] # NEWA DIGIT FIVE
114D5 ; [.1C42.0020.0002] # TIRHUTA DIGIT FIVE
11655 ; [.1C42.0020.0002] # MODI DIGIT FIVE
116C5 ; [.1C42.0020.0002] # TAKRI DIGIT FIVE
11735 ; [.1C42.0020.0002] # AHOM DIGIT FIVE
118E5 ; [.1C42.0020.0002] # WARANG CITI DIGIT FIVE
11C55 ; [.1C42.0020.0002] # BHAIKSUKI DIGIT FIVE
11C5E ; [.1C42.0020.0002] # BHAIKSUKI NUMBER FIVE
12403 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH
1240A ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE DISH
12410 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U
12419 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESH2
12422 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESHU
12427 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHAR2
12431 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHARU
12439 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BURU
1244D ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH TENU
12454 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2
12455 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM
1246A ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM
16A65 ; [.1C42.0020.0002] # MRO DIGIT FIVE
16B55 ; [.1C42.0020.0002] # PAHAWH HMONG DIGIT FIVE
1D364 ; [.1C42.0020.0002] # COUNTING ROD UNIT DIGIT FIVE
1E8CB ; [.1C42.0020.0002] # MENDE KIKAKUI DIGIT FIVE
1E955 ; [.1C42.0020.0002] # ADLAM DIGIT FIVE
FF15 ; [.1C42.0020.0003] # FULLWIDTH DIGIT FIVE
0F2E ; [.1C42.0020.0004] # TIBETAN DIGIT HALF FIVE
2478 ; [*0317.0020.0004][.1C42.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT FIVE
248C ; [.1C42.0020.0004][*0277.0020.0004] # DIGIT FIVE FULL STOP
1F106 ; [.1C42.0020.0004][*0222.0020.0004] # DIGIT FIVE COMMA
1D7D3 ; [.1C42.0020.0005] # MATHEMATICAL BOLD DIGIT FIVE
1D7DD ; [.1C42.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
1D7E7 ; [.1C42.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FIVE
1D7F1 ; [.1C42.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
1D7FB ; [.1C42.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FIVE
2464 ; [.1C42.0020.0006] # CIRCLED DIGIT FIVE
24F9 ; [.1C42.0020.0006] # DOUBLE CIRCLED DIGIT FIVE
277A ; [.1C42.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FIVE
2784 ; [.1C42.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
278E ; [.1C42.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
2075 ; [.1C42.0020.0014] # SUPERSCRIPT FIVE
2085 ; [.1C42.0020.0015] # SUBSCRIPT FIVE
324C ; [.1C42.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FIFTY ON BLACK SQUARE
32BF ; [.1C42.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FIFTY
1F1A0 ; [.1C42.0020.001C][*0277.0020.001C][.1C3E.0020.001C] # SQUARED FIVE POINT ONE
215A ; [.1C42.0020.001E][*0626.0020.001E][.1C43.0020.001E] # VULGAR FRACTION FIVE SIXTHS
215D ; [.1C42.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION FIVE EIGHTHS
33E4 ; [.1C42.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
32C4 ; [.1C42.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
335D ; [.1C42.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
0036 ; [.1C43.0020.0002] # DIGIT SIX
0666 ; [.1C43.0020.0002] # ARABIC-INDIC DIGIT SIX
06F6 ; [.1C43.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SIX
07C6 ; [.1C43.0020.0002] # NKO DIGIT SIX
096C ; [.1C43.0020.0002] # DEVANAGARI DIGIT SIX
09EC ; [.1C43.0020.0002] # BENGALI DIGIT SIX
0A6C ; [.1C43.0020.0002] # GURMUKHI DIGIT SIX
0AEC ; [.1C43.0020.0002] # GUJARATI DIGIT SIX
0B6C ; [.1C43.0020.0002] # ORIYA DIGIT SIX
0BEC ; [.1C43.0020.0002] # TAMIL DIGIT SIX
0C6C ; [.1C43.0020.0002] # TELUGU DIGIT SIX
0CEC ; [.1C43.0020.0002] # KANNADA DIGIT SIX
0D6C ; [.1C43.0020.0002] # MALAYALAM DIGIT SIX
0DEC ; [.1C43.0020.0002] # SINHALA LITH DIGIT SIX
0E56 ; [.1C43.0020.0002] # THAI DIGIT SIX
0ED6 ; [.1C43.0020.0002] # LAO DIGIT SIX
0F26 ; [.1C43.0020.0002] # TIBETAN DIGIT SIX
1046 ; [.1C43.0020.0002] # MYANMAR DIGIT SIX
1096 ; [.1C43.0020.0002] # MYANMAR SHAN DIGIT SIX
136E ; [.1C43.0020.0002] # ETHIOPIC DIGIT SIX
17E6 ; [.1C43.0020.0002] # KHMER DIGIT SIX
17F6 ; [.1C43.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-MUOY
1816 ; [.1C43.0020.0002] # MONGOLIAN DIGIT SIX
194C ; [.1C43.0020.0002] # LIMBU DIGIT SIX
19D6 ; [.1C43.0020.0002] # NEW TAI LUE DIGIT SIX
1A86 ; [.1C43.0020.0002] # TAI THAM HORA DIGIT SIX
1A96 ; [.1C43.0020.0002] # TAI THAM THAM DIGIT SIX
1B56 ; [.1C43.0020.0002] # BALINESE DIGIT SIX
1BB6 ; [.1C43.0020.0002] # SUNDANESE DIGIT SIX
1C46 ; [.1C43.0020.0002] # LEPCHA DIGIT SIX
1C56 ; [.1C43.0020.0002] # OL CHIKI DIGIT SIX
2185 ; [.1C43.0020.0002] # ROMAN NUMERAL SIX LATE FORM
3026 ; [.1C43.0020.0002] # HANGZHOU NUMERAL SIX
A626 ; [.1C43.0020.0002] # VAI DIGIT SIX
A8D6 ; [.1C43.0020.0002] # SAURASHTRA DIGIT SIX
A906 ; [.1C43.0020.0002] # KAYAH LI DIGIT SIX
A9D6 ; [.1C43.0020.0002] # JAVANESE DIGIT SIX
A9F6 ; [.1C43.0020.0002] # MYANMAR TAI LAING DIGIT SIX
AA56 ; [.1C43.0020.0002] # CHAM DIGIT SIX
ABF6 ; [.1C43.0020.0002] # MEETEI MAYEK DIGIT SIX
1010C ; [.1C43.0020.0002] # AEGEAN NUMBER SIX
102E6 ; [.1C43.0020.0002] # COPTIC EPACT DIGIT SIX
104A6 ; [.1C43.0020.0002] # OSMANYA DIGIT SIX
109C5 ; [.1C43.0020.0002] # MEROITIC CURSIVE NUMBER SIX
10E65 ; [.1C43.0020.0002] # RUMI DIGIT SIX
11057 ; [.1C43.0020.0002] # BRAHMI NUMBER SIX
1106C ; [.1C43.0020.0002] # BRAHMI DIGIT SIX
110F6 ; [.1C43.0020.0002] # SORA SOMPENG DIGIT SIX
1113C ; [.1C43.0020.0002] # CHAKMA DIGIT SIX
111D6 ; [.1C43.0020.0002] # SHARADA DIGIT SIX
111E6 ; [.1C43.0020.0002] # SINHALA ARCHAIC DIGIT SIX
112F6 ; [.1C43.0020.0002] # KHUDAWADI DIGIT SIX
11456 ; [.1C43.0020.0002] # NEWA DIGIT SIX
114D6 ; [.1C43.0020.0002] # TIRHUTA DIGIT SIX
11656 ; [.1C43.0020.0002] # MODI DIGIT SIX
116C6 ; [.1C43.0020.0002] # TAKRI DIGIT SIX
11736 ; [.1C43.0020.0002] # AHOM DIGIT SIX
118E6 ; [.1C43.0020.0002] # WARANG CITI DIGIT SIX
11C56 ; [.1C43.0020.0002] # BHAIKSUKI DIGIT SIX
11C5F ; [.1C43.0020.0002] # BHAIKSUKI NUMBER SIX
12404 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH
1240B ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX DISH
12411 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U
1241A ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX GESH2
12428 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX SHAR2
12440 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9
1244E ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH TENU
1246B ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM
16A66 ; [.1C43.0020.0002] # MRO DIGIT SIX
16B56 ; [.1C43.0020.0002] # PAHAWH HMONG DIGIT SIX
1D365 ; [.1C43.0020.0002] # COUNTING ROD UNIT DIGIT SIX
1E8CC ; [.1C43.0020.0002] # MENDE KIKAKUI DIGIT SIX
1E956 ; [.1C43.0020.0002] # ADLAM DIGIT SIX
FF16 ; [.1C43.0020.0003] # FULLWIDTH DIGIT SIX
0F2F ; [.1C43.0020.0004] # TIBETAN DIGIT HALF SIX
2479 ; [*0317.0020.0004][.1C43.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT SIX
248D ; [.1C43.0020.0004][*0277.0020.0004] # DIGIT SIX FULL STOP
1F107 ; [.1C43.0020.0004][*0222.0020.0004] # DIGIT SIX COMMA
1D7D4 ; [.1C43.0020.0005] # MATHEMATICAL BOLD DIGIT SIX
1D7DE ; [.1C43.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
1D7E8 ; [.1C43.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SIX
1D7F2 ; [.1C43.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
1D7FC ; [.1C43.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SIX
2465 ; [.1C43.0020.0006] # CIRCLED DIGIT SIX
24FA ; [.1C43.0020.0006] # DOUBLE CIRCLED DIGIT SIX
277B ; [.1C43.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SIX
2785 ; [.1C43.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SIX
278F ; [.1C43.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
2076 ; [.1C43.0020.0014] # SUPERSCRIPT SIX
2086 ; [.1C43.0020.0015] # SUBSCRIPT SIX
324D ; [.1C43.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER SIXTY ON BLACK SQUARE
1F1A3 ; [.1C43.0020.001C][.1C3D.0020.001C][.1E0C.0020.001D] # SQUARED SIXTY P
33E5 ; [.1C43.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
32C5 ; [.1C43.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
335E ; [.1C43.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
0037 ; [.1C44.0020.0002] # DIGIT SEVEN
0667 ; [.1C44.0020.0002] # ARABIC-INDIC DIGIT SEVEN
06F7 ; [.1C44.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SEVEN
07C7 ; [.1C44.0020.0002] # NKO DIGIT SEVEN
096D ; [.1C44.0020.0002] # DEVANAGARI DIGIT SEVEN
09ED ; [.1C44.0020.0002] # BENGALI DIGIT SEVEN
0A6D ; [.1C44.0020.0002] # GURMUKHI DIGIT SEVEN
0AED ; [.1C44.0020.0002] # GUJARATI DIGIT SEVEN
0B6D ; [.1C44.0020.0002] # ORIYA DIGIT SEVEN
0BED ; [.1C44.0020.0002] # TAMIL DIGIT SEVEN
0C6D ; [.1C44.0020.0002] # TELUGU DIGIT SEVEN
0CED ; [.1C44.0020.0002] # KANNADA DIGIT SEVEN
0D6D ; [.1C44.0020.0002] # MALAYALAM DIGIT SEVEN
0DED ; [.1C44.0020.0002] # SINHALA LITH DIGIT SEVEN
0E57 ; [.1C44.0020.0002] # THAI DIGIT SEVEN
0ED7 ; [.1C44.0020.0002] # LAO DIGIT SEVEN
0F27 ; [.1C44.0020.0002] # TIBETAN DIGIT SEVEN
1047 ; [.1C44.0020.0002] # MYANMAR DIGIT SEVEN
1097 ; [.1C44.0020.0002] # MYANMAR SHAN DIGIT SEVEN
136F ; [.1C44.0020.0002] # ETHIOPIC DIGIT SEVEN
17E7 ; [.1C44.0020.0002] # KHMER DIGIT SEVEN
17F7 ; [.1C44.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-PII
1817 ; [.1C44.0020.0002] # MONGOLIAN DIGIT SEVEN
194D ; [.1C44.0020.0002] # LIMBU DIGIT SEVEN
19D7 ; [.1C44.0020.0002] # NEW TAI LUE DIGIT SEVEN
1A87 ; [.1C44.0020.0002] # TAI THAM HORA DIGIT SEVEN
1A97 ; [.1C44.0020.0002] # TAI THAM THAM DIGIT SEVEN
1B57 ; [.1C44.0020.0002] # BALINESE DIGIT SEVEN
1BB7 ; [.1C44.0020.0002] # SUNDANESE DIGIT SEVEN
1C47 ; [.1C44.0020.0002] # LEPCHA DIGIT SEVEN
1C57 ; [.1C44.0020.0002] # OL CHIKI DIGIT SEVEN
3027 ; [.1C44.0020.0002] # HANGZHOU NUMERAL SEVEN
A627 ; [.1C44.0020.0002] # VAI DIGIT SEVEN
A8D7 ; [.1C44.0020.0002] # SAURASHTRA DIGIT SEVEN
A907 ; [.1C44.0020.0002] # KAYAH LI DIGIT SEVEN
A9D7 ; [.1C44.0020.0002] # JAVANESE DIGIT SEVEN
A9F7 ; [.1C44.0020.0002] # MYANMAR TAI LAING DIGIT SEVEN
AA57 ; [.1C44.0020.0002] # CHAM DIGIT SEVEN
ABF7 ; [.1C44.0020.0002] # MEETEI MAYEK DIGIT SEVEN
1010D ; [.1C44.0020.0002] # AEGEAN NUMBER SEVEN
102E7 ; [.1C44.0020.0002] # COPTIC EPACT DIGIT SEVEN
104A7 ; [.1C44.0020.0002] # OSMANYA DIGIT SEVEN
109C6 ; [.1C44.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN
10E66 ; [.1C44.0020.0002] # RUMI DIGIT SEVEN
11058 ; [.1C44.0020.0002] # BRAHMI NUMBER SEVEN
1106D ; [.1C44.0020.0002] # BRAHMI DIGIT SEVEN
110F7 ; [.1C44.0020.0002] # SORA SOMPENG DIGIT SEVEN
1113D ; [.1C44.0020.0002] # CHAKMA DIGIT SEVEN
111D7 ; [.1C44.0020.0002] # SHARADA DIGIT SEVEN
111E7 ; [.1C44.0020.0002] # SINHALA ARCHAIC DIGIT SEVEN
112F7 ; [.1C44.0020.0002] # KHUDAWADI DIGIT SEVEN
11457 ; [.1C44.0020.0002] # NEWA DIGIT SEVEN
114D7 ; [.1C44.0020.0002] # TIRHUTA DIGIT SEVEN
11657 ; [.1C44.0020.0002] # MODI DIGIT SEVEN
116C7 ; [.1C44.0020.0002] # TAKRI DIGIT SEVEN
11737 ; [.1C44.0020.0002] # AHOM DIGIT SEVEN
118E7 ; [.1C44.0020.0002] # WARANG CITI DIGIT SEVEN
11C57 ; [.1C44.0020.0002] # BHAIKSUKI DIGIT SEVEN
11C60 ; [.1C44.0020.0002] # BHAIKSUKI NUMBER SEVEN
12405 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN ASH
1240C ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN DISH
12412 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U
1241B ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN GESH2
12429 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN SHAR2
12441 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3
12442 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A
12443 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B
1246C ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM
16A67 ; [.1C44.0020.0002] # MRO DIGIT SEVEN
16B57 ; [.1C44.0020.0002] # PAHAWH HMONG DIGIT SEVEN
1D366 ; [.1C44.0020.0002] # COUNTING ROD UNIT DIGIT SEVEN
1E8CD ; [.1C44.0020.0002] # MENDE KIKAKUI DIGIT SEVEN
1E957 ; [.1C44.0020.0002] # ADLAM DIGIT SEVEN
FF17 ; [.1C44.0020.0003] # FULLWIDTH DIGIT SEVEN
0F30 ; [.1C44.0020.0004] # TIBETAN DIGIT HALF SEVEN
247A ; [*0317.0020.0004][.1C44.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT SEVEN
248E ; [.1C44.0020.0004][*0277.0020.0004] # DIGIT SEVEN FULL STOP
1F108 ; [.1C44.0020.0004][*0222.0020.0004] # DIGIT SEVEN COMMA
1D7D5 ; [.1C44.0020.0005] # MATHEMATICAL BOLD DIGIT SEVEN
1D7DF ; [.1C44.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
1D7E9 ; [.1C44.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SEVEN
1D7F3 ; [.1C44.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
1D7FD ; [.1C44.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SEVEN
2466 ; [.1C44.0020.0006] # CIRCLED DIGIT SEVEN
24FB ; [.1C44.0020.0006] # DOUBLE CIRCLED DIGIT SEVEN
277C ; [.1C44.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
2786 ; [.1C44.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
2790 ; [.1C44.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
2077 ; [.1C44.0020.0014] # SUPERSCRIPT SEVEN
2087 ; [.1C44.0020.0015] # SUBSCRIPT SEVEN
324E ; [.1C44.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER SEVENTY ON BLACK SQUARE
1F1A1 ; [.1C44.0020.001C][*0277.0020.001C][.1C3E.0020.001C] # SQUARED SEVEN POINT ONE
215E ; [.1C44.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION SEVEN EIGHTHS
33E6 ; [.1C44.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
32C6 ; [.1C44.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
335F ; [.1C44.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
0038 ; [.1C45.0020.0002] # DIGIT EIGHT
0668 ; [.1C45.0020.0002] # ARABIC-INDIC DIGIT EIGHT
06F8 ; [.1C45.0020.0002] # EXTENDED ARABIC-INDIC DIGIT EIGHT
07C8 ; [.1C45.0020.0002] # NKO DIGIT EIGHT
096E ; [.1C45.0020.0002] # DEVANAGARI DIGIT EIGHT
09EE ; [.1C45.0020.0002] # BENGALI DIGIT EIGHT
0A6E ; [.1C45.0020.0002] # GURMUKHI DIGIT EIGHT
0AEE ; [.1C45.0020.0002] # GUJARATI DIGIT EIGHT
0B6E ; [.1C45.0020.0002] # ORIYA DIGIT EIGHT
0BEE ; [.1C45.0020.0002] # TAMIL DIGIT EIGHT
0C6E ; [.1C45.0020.0002] # TELUGU DIGIT EIGHT
0CEE ; [.1C45.0020.0002] # KANNADA DIGIT EIGHT
0D6E ; [.1C45.0020.0002] # MALAYALAM DIGIT EIGHT
0DEE ; [.1C45.0020.0002] # SINHALA LITH DIGIT EIGHT
0E58 ; [.1C45.0020.0002] # THAI DIGIT EIGHT
0ED8 ; [.1C45.0020.0002] # LAO DIGIT EIGHT
0F28 ; [.1C45.0020.0002] # TIBETAN DIGIT EIGHT
1048 ; [.1C45.0020.0002] # MYANMAR DIGIT EIGHT
1098 ; [.1C45.0020.0002] # MYANMAR SHAN DIGIT EIGHT
1370 ; [.1C45.0020.0002] # ETHIOPIC DIGIT EIGHT
17E8 ; [.1C45.0020.0002] # KHMER DIGIT EIGHT
17F8 ; [.1C45.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BEI
1818 ; [.1C45.0020.0002] # MONGOLIAN DIGIT EIGHT
194E ; [.1C45.0020.0002] # LIMBU DIGIT EIGHT
19D8 ; [.1C45.0020.0002] # NEW TAI LUE DIGIT EIGHT
1A88 ; [.1C45.0020.0002] # TAI THAM HORA DIGIT EIGHT
1A98 ; [.1C45.0020.0002] # TAI THAM THAM DIGIT EIGHT
1B58 ; [.1C45.0020.0002] # BALINESE DIGIT EIGHT
1BB8 ; [.1C45.0020.0002] # SUNDANESE DIGIT EIGHT
1C48 ; [.1C45.0020.0002] # LEPCHA DIGIT EIGHT
1C58 ; [.1C45.0020.0002] # OL CHIKI DIGIT EIGHT
3028 ; [.1C45.0020.0002] # HANGZHOU NUMERAL EIGHT
A628 ; [.1C45.0020.0002] # VAI DIGIT EIGHT
A8D8 ; [.1C45.0020.0002] # SAURASHTRA DIGIT EIGHT
A908 ; [.1C45.0020.0002] # KAYAH LI DIGIT EIGHT
A9D8 ; [.1C45.0020.0002] # JAVANESE DIGIT EIGHT
A9F8 ; [.1C45.0020.0002] # MYANMAR TAI LAING DIGIT EIGHT
AA58 ; [.1C45.0020.0002] # CHAM DIGIT EIGHT
ABF8 ; [.1C45.0020.0002] # MEETEI MAYEK DIGIT EIGHT
1010E ; [.1C45.0020.0002] # AEGEAN NUMBER EIGHT
102E8 ; [.1C45.0020.0002] # COPTIC EPACT DIGIT EIGHT
104A8 ; [.1C45.0020.0002] # OSMANYA DIGIT EIGHT
109C7 ; [.1C45.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT
10E67 ; [.1C45.0020.0002] # RUMI DIGIT EIGHT
11059 ; [.1C45.0020.0002] # BRAHMI NUMBER EIGHT
1106E ; [.1C45.0020.0002] # BRAHMI DIGIT EIGHT
110F8 ; [.1C45.0020.0002] # SORA SOMPENG DIGIT EIGHT
1113E ; [.1C45.0020.0002] # CHAKMA DIGIT EIGHT
111D8 ; [.1C45.0020.0002] # SHARADA DIGIT EIGHT
111E8 ; [.1C45.0020.0002] # SINHALA ARCHAIC DIGIT EIGHT
112F8 ; [.1C45.0020.0002] # KHUDAWADI DIGIT EIGHT
11458 ; [.1C45.0020.0002] # NEWA DIGIT EIGHT
114D8 ; [.1C45.0020.0002] # TIRHUTA DIGIT EIGHT
11658 ; [.1C45.0020.0002] # MODI DIGIT EIGHT
116C8 ; [.1C45.0020.0002] # TAKRI DIGIT EIGHT
11738 ; [.1C45.0020.0002] # AHOM DIGIT EIGHT
118E8 ; [.1C45.0020.0002] # WARANG CITI DIGIT EIGHT
11C58 ; [.1C45.0020.0002] # BHAIKSUKI DIGIT EIGHT
11C61 ; [.1C45.0020.0002] # BHAIKSUKI NUMBER EIGHT
12406 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT ASH
1240D ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT DISH
12413 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U
1241C ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT GESH2
1242A ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT SHAR2
12444 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU
12445 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3
1246D ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM
16A68 ; [.1C45.0020.0002] # MRO DIGIT EIGHT
16B58 ; [.1C45.0020.0002] # PAHAWH HMONG DIGIT EIGHT
1D367 ; [.1C45.0020.0002] # COUNTING ROD UNIT DIGIT EIGHT
1E8CE ; [.1C45.0020.0002] # MENDE KIKAKUI DIGIT EIGHT
1E958 ; [.1C45.0020.0002] # ADLAM DIGIT EIGHT
FF18 ; [.1C45.0020.0003] # FULLWIDTH DIGIT EIGHT
0F31 ; [.1C45.0020.0004] # TIBETAN DIGIT HALF EIGHT
247B ; [*0317.0020.0004][.1C45.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT EIGHT
248F ; [.1C45.0020.0004][*0277.0020.0004] # DIGIT EIGHT FULL STOP
1F109 ; [.1C45.0020.0004][*0222.0020.0004] # DIGIT EIGHT COMMA
1D7D6 ; [.1C45.0020.0005] # MATHEMATICAL BOLD DIGIT EIGHT
1D7E0 ; [.1C45.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
1D7EA ; [.1C45.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT EIGHT
1D7F4 ; [.1C45.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
1D7FE ; [.1C45.0020.0005] # MATHEMATICAL MONOSPACE DIGIT EIGHT
2467 ; [.1C45.0020.0006] # CIRCLED DIGIT EIGHT
24FC ; [.1C45.0020.0006] # DOUBLE CIRCLED DIGIT EIGHT
277D ; [.1C45.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
2787 ; [.1C45.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
2791 ; [.1C45.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
2078 ; [.1C45.0020.0014] # SUPERSCRIPT EIGHT
2088 ; [.1C45.0020.0015] # SUBSCRIPT EIGHT
324F ; [.1C45.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER EIGHTY ON BLACK SQUARE
1F19F ; [.1C45.0020.001C][.1D65.0020.001D] # SQUARED EIGHT K
33E7 ; [.1C45.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
32C7 ; [.1C45.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
3360 ; [.1C45.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
0039 ; [.1C46.0020.0002] # DIGIT NINE
0669 ; [.1C46.0020.0002] # ARABIC-INDIC DIGIT NINE
06F9 ; [.1C46.0020.0002] # EXTENDED ARABIC-INDIC DIGIT NINE
07C9 ; [.1C46.0020.0002] # NKO DIGIT NINE
096F ; [.1C46.0020.0002] # DEVANAGARI DIGIT NINE
09EF ; [.1C46.0020.0002] # BENGALI DIGIT NINE
0A6F ; [.1C46.0020.0002] # GURMUKHI DIGIT NINE
0AEF ; [.1C46.0020.0002] # GUJARATI DIGIT NINE
0B6F ; [.1C46.0020.0002] # ORIYA DIGIT NINE
0BEF ; [.1C46.0020.0002] # TAMIL DIGIT NINE
0C6F ; [.1C46.0020.0002] # TELUGU DIGIT NINE
0CEF ; [.1C46.0020.0002] # KANNADA DIGIT NINE
0D6F ; [.1C46.0020.0002] # MALAYALAM DIGIT NINE
0DEF ; [.1C46.0020.0002] # SINHALA LITH DIGIT NINE
0E59 ; [.1C46.0020.0002] # THAI DIGIT NINE
0ED9 ; [.1C46.0020.0002] # LAO DIGIT NINE
0F29 ; [.1C46.0020.0002] # TIBETAN DIGIT NINE
1049 ; [.1C46.0020.0002] # MYANMAR DIGIT NINE
1099 ; [.1C46.0020.0002] # MYANMAR SHAN DIGIT NINE
1371 ; [.1C46.0020.0002] # ETHIOPIC DIGIT NINE
17E9 ; [.1C46.0020.0002] # KHMER DIGIT NINE
17F9 ; [.1C46.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BUON
1819 ; [.1C46.0020.0002] # MONGOLIAN DIGIT NINE
194F ; [.1C46.0020.0002] # LIMBU DIGIT NINE
19D9 ; [.1C46.0020.0002] # NEW TAI LUE DIGIT NINE
1A89 ; [.1C46.0020.0002] # TAI THAM HORA DIGIT NINE
1A99 ; [.1C46.0020.0002] # TAI THAM THAM DIGIT NINE
1B59 ; [.1C46.0020.0002] # BALINESE DIGIT NINE
1BB9 ; [.1C46.0020.0002] # SUNDANESE DIGIT NINE
1C49 ; [.1C46.0020.0002] # LEPCHA DIGIT NINE
1C59 ; [.1C46.0020.0002] # OL CHIKI DIGIT NINE
3029 ; [.1C46.0020.0002] # HANGZHOU NUMERAL NINE
A629 ; [.1C46.0020.0002] # VAI DIGIT NINE
A8D9 ; [.1C46.0020.0002] # SAURASHTRA DIGIT NINE
A909 ; [.1C46.0020.0002] # KAYAH LI DIGIT NINE
A9D9 ; [.1C46.0020.0002] # JAVANESE DIGIT NINE
A9F9 ; [.1C46.0020.0002] # MYANMAR TAI LAING DIGIT NINE
AA59 ; [.1C46.0020.0002] # CHAM DIGIT NINE
ABF9 ; [.1C46.0020.0002] # MEETEI MAYEK DIGIT NINE
1010F ; [.1C46.0020.0002] # AEGEAN NUMBER NINE
102E9 ; [.1C46.0020.0002] # COPTIC EPACT DIGIT NINE
104A9 ; [.1C46.0020.0002] # OSMANYA DIGIT NINE
109C8 ; [.1C46.0020.0002] # MEROITIC CURSIVE NUMBER NINE
10E68 ; [.1C46.0020.0002] # RUMI DIGIT NINE
1105A ; [.1C46.0020.0002] # BRAHMI NUMBER NINE
1106F ; [.1C46.0020.0002] # BRAHMI DIGIT NINE
110F9 ; [.1C46.0020.0002] # SORA SOMPENG DIGIT NINE
1113F ; [.1C46.0020.0002] # CHAKMA DIGIT NINE
111D9 ; [.1C46.0020.0002] # SHARADA DIGIT NINE
111E9 ; [.1C46.0020.0002] # SINHALA ARCHAIC DIGIT NINE
112F9 ; [.1C46.0020.0002] # KHUDAWADI DIGIT NINE
11459 ; [.1C46.0020.0002] # NEWA DIGIT NINE
114D9 ; [.1C46.0020.0002] # TIRHUTA DIGIT NINE
11659 ; [.1C46.0020.0002] # MODI DIGIT NINE
116C9 ; [.1C46.0020.0002] # TAKRI DIGIT NINE
11739 ; [.1C46.0020.0002] # AHOM DIGIT NINE
118E9 ; [.1C46.0020.0002] # WARANG CITI DIGIT NINE
11C59 ; [.1C46.0020.0002] # BHAIKSUKI DIGIT NINE
11C62 ; [.1C46.0020.0002] # BHAIKSUKI NUMBER NINE
12407 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE ASH
1240E ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE DISH
12414 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U
1241D ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE GESH2
1242B ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE SHAR2
12446 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU
12447 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3
12448 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4
12449 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A
1246E ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
16A69 ; [.1C46.0020.0002] # MRO DIGIT NINE
16B59 ; [.1C46.0020.0002] # PAHAWH HMONG DIGIT NINE
1D368 ; [.1C46.0020.0002] # COUNTING ROD UNIT DIGIT NINE
1E8CF ; [.1C46.0020.0002] # MENDE KIKAKUI DIGIT NINE
1E959 ; [.1C46.0020.0002] # ADLAM DIGIT NINE
FF19 ; [.1C46.0020.0003] # FULLWIDTH DIGIT NINE
0F32 ; [.1C46.0020.0004] # TIBETAN DIGIT HALF NINE
247C ; [*0317.0020.0004][.1C46.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT NINE
2490 ; [.1C46.0020.0004][*0277.0020.0004] # DIGIT NINE FULL STOP
1F10A ; [.1C46.0020.0004][*0222.0020.0004] # DIGIT NINE COMMA
1D7D7 ; [.1C46.0020.0005] # MATHEMATICAL BOLD DIGIT NINE
1D7E1 ; [.1C46.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
1D7EB ; [.1C46.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT NINE
1D7F5 ; [.1C46.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
1D7FF ; [.1C46.0020.0005] # MATHEMATICAL MONOSPACE DIGIT NINE
2468 ; [.1C46.0020.0006] # CIRCLED DIGIT NINE
24FD ; [.1C46.0020.0006] # DOUBLE CIRCLED DIGIT NINE
277E ; [.1C46.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT NINE
2788 ; [.1C46.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT NINE
2792 ; [.1C46.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
2079 ; [.1C46.0020.0014] # SUPERSCRIPT NINE
2089 ; [.1C46.0020.0015] # SUBSCRIPT NINE
33E8 ; [.1C46.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
32C8 ; [.1C46.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
3361 ; [.1C46.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
0061 ; [.1C47.0020.0002] # LATIN SMALL LETTER A
FF41 ; [.1C47.0020.0003] # FULLWIDTH LATIN SMALL LETTER A
0363 ; [.1C47.0020.0004] # COMBINING LATIN SMALL LETTER A
249C ; [*0317.0020.0004][.1C47.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER A
1D41A ; [.1C47.0020.0005] # MATHEMATICAL BOLD SMALL A
1D44E ; [.1C47.0020.0005] # MATHEMATICAL ITALIC SMALL A
1D482 ; [.1C47.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL A
1D4B6 ; [.1C47.0020.0005] # MATHEMATICAL SCRIPT SMALL A
1D4EA ; [.1C47.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL A
1D51E ; [.1C47.0020.0005] # MATHEMATICAL FRAKTUR SMALL A
1D552 ; [.1C47.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL A
1D586 ; [.1C47.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL A
1D5BA ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF SMALL A
1D5EE ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL A
1D622 ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL A
1D656 ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
1D68A ; [.1C47.0020.0005] # MATHEMATICAL MONOSPACE SMALL A
24D0 ; [.1C47.0020.0006] # CIRCLED LATIN SMALL LETTER A
0041 ; [.1C47.0020.0008] # LATIN CAPITAL LETTER A
FF21 ; [.1C47.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER A
1F110 ; [*0317.0020.0004][.1C47.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER A
1D400 ; [.1C47.0020.000B] # MATHEMATICAL BOLD CAPITAL A
1D434 ; [.1C47.0020.000B] # MATHEMATICAL ITALIC CAPITAL A
1D468 ; [.1C47.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL A
1D49C ; [.1C47.0020.000B] # MATHEMATICAL SCRIPT CAPITAL A
1D4D0 ; [.1C47.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL A
1D504 ; [.1C47.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL A
1D538 ; [.1C47.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL A
1D56C ; [.1C47.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL A
1D5A0 ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL A
1D5D4 ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL A
1D608 ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
1D63C ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
1D670 ; [.1C47.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL A
24B6 ; [.1C47.0020.000C] # CIRCLED LATIN CAPITAL LETTER A
1F150 ; [.1C47.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER A
00AA ; [.1C47.0020.0014] # FEMININE ORDINAL INDICATOR
1D43 ; [.1C47.0020.0014] # MODIFIER LETTER SMALL A
2090 ; [.1C47.0020.0015] # LATIN SUBSCRIPT SMALL LETTER A
1D2C ; [.1C47.0020.001D] # MODIFIER LETTER CAPITAL A
1F130 ; [.1C47.0020.001D] # SQUARED LATIN CAPITAL LETTER A
1F170 ; [.1C47.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER A
00E1 ; [.1C47.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH ACUTE
00C1 ; [.1C47.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH ACUTE
00E0 ; [.1C47.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH GRAVE
00C0 ; [.1C47.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH GRAVE
0103 ; [.1C47.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE
0102 ; [.1C47.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE
1EAF ; [.1C47.0020.0002][.0000.0026.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE
1EAE ; [.1C47.0020.0008][.0000.0026.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
1EB1 ; [.1C47.0020.0002][.0000.0026.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE
1EB0 ; [.1C47.0020.0008][.0000.0026.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
1EB5 ; [.1C47.0020.0002][.0000.0026.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE
1EB4 ; [.1C47.0020.0008][.0000.0026.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
1EB3 ; [.1C47.0020.0002][.0000.0026.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
1EB2 ; [.1C47.0020.0008][.0000.0026.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
00E2 ; [.1C47.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX
00C2 ; [.1C47.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
1EA5 ; [.1C47.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
1EA4 ; [.1C47.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
1EA7 ; [.1C47.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
1EA6 ; [.1C47.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
1EAB ; [.1C47.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
1EAA ; [.1C47.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
1EA9 ; [.1C47.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
1EA8 ; [.1C47.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
01CE ; [.1C47.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER A WITH CARON
01CD ; [.1C47.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER A WITH CARON
00E5 ; [.1C47.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH RING ABOVE
00C5 ; [.1C47.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE
212B ; [.1C47.0020.0008][.0000.0029.0002] # ANGSTROM SIGN
01FB ; [.1C47.0020.0002][.0000.0029.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
01FA ; [.1C47.0020.0008][.0000.0029.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
00E4 ; [.1C47.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER A WITH DIAERESIS
1DF2 ; [.1C47.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER A WITH DIAERESIS
A79B ; [.1C47.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK AE
00C4 ; [.1C47.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS
A79A ; [.1C47.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK AE
01DF ; [.1C47.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
01DE ; [.1C47.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
00E3 ; [.1C47.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH TILDE
00C3 ; [.1C47.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH TILDE
0227 ; [.1C47.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER A WITH DOT ABOVE
0226 ; [.1C47.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE
01E1 ; [.1C47.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
01E0 ; [.1C47.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
0105 ; [.1C47.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER A WITH OGONEK
0104 ; [.1C47.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER A WITH OGONEK
0101 ; [.1C47.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH MACRON
0100 ; [.1C47.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH MACRON
1EA3 ; [.1C47.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH HOOK ABOVE
1EA2 ; [.1C47.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH HOOK ABOVE
0201 ; [.1C47.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER A WITH DOUBLE GRAVE
0200 ; [.1C47.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
0203 ; [.1C47.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER A WITH INVERTED BREVE
0202 ; [.1C47.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER A WITH INVERTED BREVE
1EA1 ; [.1C47.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH DOT BELOW
1EA0 ; [.1C47.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH DOT BELOW
1EB7 ; [.1C47.0020.0002][.0000.0042.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
1EB6 ; [.1C47.0020.0008][.0000.0042.0002][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
1EAD ; [.1C47.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
1EAC ; [.1C47.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
1E01 ; [.1C47.0020.0002][.0000.0044.0002] # LATIN SMALL LETTER A WITH RING BELOW
1E00 ; [.1C47.0020.0008][.0000.0044.0002] # LATIN CAPITAL LETTER A WITH RING BELOW
1DD3 ; [.1C47.0020.0004][.0000.0110.0004] # COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE
A733 ; [.1C47.0020.0004][.1C47.0020.0004] # LATIN SMALL LETTER AA
A732 ; [.1C47.0020.000A][.1C47.0020.000A] # LATIN CAPITAL LETTER AA
1F18E ; [.1C47.0020.001D][.1C60.0020.001D] # NEGATIVE SQUARED AB
2100 ; [.1C47.0020.0004][*0394.0020.0004][.1C7A.0020.0004] # ACCOUNT OF
00E6 ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004] # LATIN SMALL LETTER AE
1DD4 ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004] # COMBINING LATIN SMALL LETTER AE
00C6 ; [.1C47.0020.000A][.0000.0110.0004][.1CAA.0020.000A] # LATIN CAPITAL LETTER AE
1D2D ; [.1C47.0020.0014][.0000.0110.0014][.1CAA.0020.0014] # MODIFIER LETTER CAPITAL AE
01FD ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
01FC ; [.1C47.0020.000A][.0000.0110.0004][.1CAA.0020.000A][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
01E3 ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
01E2 ; [.1C47.0020.000A][.0000.0110.0004][.1CAA.0020.000A][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
33C2 ; [.1C47.0020.001C][*0277.0020.001C][.1DAA.0020.001C][*0277.0020.001C] # SQUARE AM
33DF ; [.1C47.0020.001D][*0625.0020.001C][.1DAA.0020.001C] # SQUARE A OVER M
1DD5 ; [.1C47.0020.0004][.1DDD.0020.0004] # COMBINING LATIN SMALL LETTER AO
A735 ; [.1C47.0020.0004][.1DDD.0020.0004] # LATIN SMALL LETTER AO
A734 ; [.1C47.0020.000A][.1DDD.0020.000A] # LATIN CAPITAL LETTER AO
2101 ; [.1C47.0020.0004][*0394.0020.0004][.1E71.0020.0004] # ADDRESSED TO THE SUBJECT
214D ; [.1C47.0020.000A][*0394.0020.0004][.1E71.0020.000A] # AKTIESELSKAB
A737 ; [.1C47.0020.0004][.1EB5.0020.0004] # LATIN SMALL LETTER AU
A736 ; [.1C47.0020.000A][.1EB5.0020.000A] # LATIN CAPITAL LETTER AU
3373 ; [.1C47.0020.001D][.1EB5.0020.001D] # SQUARE AU
1DD6 ; [.1C47.0020.0004][.1EE3.0020.0004] # COMBINING LATIN SMALL LETTER AV
A739 ; [.1C47.0020.0004][.1EE3.0020.0004] # LATIN SMALL LETTER AV
A738 ; [.1C47.0020.000A][.1EE3.0020.000A] # LATIN CAPITAL LETTER AV
A73B ; [.1C47.0020.0004][.0000.0110.0004][.1EE3.0020.0004] # LATIN SMALL LETTER AV WITH HORIZONTAL BAR
A73A ; [.1C47.0020.000A][.0000.0110.0004][.1EE3.0020.000A] # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
A73D ; [.1C47.0020.0004][.1F0B.0020.0004] # LATIN SMALL LETTER AY
A73C ; [.1C47.0020.000A][.1F0B.0020.000A] # LATIN CAPITAL LETTER AY
1E9A ; [.1C47.0020.0004][.1F80.0020.0004] # LATIN SMALL LETTER A WITH RIGHT HALF RING
1D00 ; [.1C4B.0020.0002] # LATIN LETTER SMALL CAPITAL A
2C65 ; [.1C4C.0020.0002] # LATIN SMALL LETTER A WITH STROKE
023A ; [.1C4C.0020.0008] # LATIN CAPITAL LETTER A WITH STROKE
1D8F ; [.1C4D.0020.0002] # LATIN SMALL LETTER A WITH RETROFLEX HOOK
1D01 ; [.1C4E.0020.0002] # LATIN LETTER SMALL CAPITAL AE
1D02 ; [.1C4F.0020.0002] # LATIN SMALL LETTER TURNED AE
1D46 ; [.1C4F.0020.0014] # MODIFIER LETTER SMALL TURNED AE
AB31 ; [.1C50.0020.0002] # LATIN SMALL LETTER A REVERSED-SCHWA
0250 ; [.1C51.0020.0002] # LATIN SMALL LETTER TURNED A
2C6F ; [.1C51.0020.0008] # LATIN CAPITAL LETTER TURNED A
1D44 ; [.1C51.0020.0014] # MODIFIER LETTER SMALL TURNED A
0251 ; [.1C55.0020.0002] # LATIN SMALL LETTER ALPHA
1DE7 ; [.1C55.0020.0004] # COMBINING LATIN SMALL LETTER ALPHA
2C6D ; [.1C55.0020.0008] # LATIN CAPITAL LETTER ALPHA
1D45 ; [.1C55.0020.0014] # MODIFIER LETTER SMALL ALPHA
AB30 ; [.1C59.0020.0002] # LATIN SMALL LETTER BARRED ALPHA
1D90 ; [.1C5A.0020.0002] # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
0252 ; [.1C5B.0020.0002] # LATIN SMALL LETTER TURNED ALPHA
2C70 ; [.1C5B.0020.0008] # LATIN CAPITAL LETTER TURNED ALPHA
1D9B ; [.1C5B.0020.0014] # MODIFIER LETTER SMALL TURNED ALPHA
AB64 ; [.1C5F.0020.0002] # LATIN SMALL LETTER INVERTED ALPHA
0062 ; [.1C60.0020.0002] # LATIN SMALL LETTER B
FF42 ; [.1C60.0020.0003] # FULLWIDTH LATIN SMALL LETTER B
1DE8 ; [.1C60.0020.0004] # COMBINING LATIN SMALL LETTER B
249D ; [*0317.0020.0004][.1C60.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER B
1D41B ; [.1C60.0020.0005] # MATHEMATICAL BOLD SMALL B
1D44F ; [.1C60.0020.0005] # MATHEMATICAL ITALIC SMALL B
1D483 ; [.1C60.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL B
1D4B7 ; [.1C60.0020.0005] # MATHEMATICAL SCRIPT SMALL B
1D4EB ; [.1C60.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL B
1D51F ; [.1C60.0020.0005] # MATHEMATICAL FRAKTUR SMALL B
1D553 ; [.1C60.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL B
1D587 ; [.1C60.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL B
1D5BB ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF SMALL B
1D5EF ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL B
1D623 ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL B
1D657 ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
1D68B ; [.1C60.0020.0005] # MATHEMATICAL MONOSPACE SMALL B
24D1 ; [.1C60.0020.0006] # CIRCLED LATIN SMALL LETTER B
0042 ; [.1C60.0020.0008] # LATIN CAPITAL LETTER B
FF22 ; [.1C60.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER B
1F111 ; [*0317.0020.0004][.1C60.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER B
212C ; [.1C60.0020.000B] # SCRIPT CAPITAL B
1D401 ; [.1C60.0020.000B] # MATHEMATICAL BOLD CAPITAL B
1D435 ; [.1C60.0020.000B] # MATHEMATICAL ITALIC CAPITAL B
1D469 ; [.1C60.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL B
1D4D1 ; [.1C60.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL B
1D505 ; [.1C60.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL B
1D539 ; [.1C60.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL B
1D56D ; [.1C60.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL B
1D5A1 ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL B
1D5D5 ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL B
1D609 ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
1D63D ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
1D671 ; [.1C60.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL B
24B7 ; [.1C60.0020.000C] # CIRCLED LATIN CAPITAL LETTER B
1F151 ; [.1C60.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER B
1D47 ; [.1C60.0020.0014] # MODIFIER LETTER SMALL B
1D2E ; [.1C60.0020.001D] # MODIFIER LETTER CAPITAL B
1F131 ; [.1C60.0020.001D] # SQUARED LATIN CAPITAL LETTER B
1F171 ; [.1C60.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER B
1E03 ; [.1C60.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER B WITH DOT ABOVE
1E02 ; [.1C60.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER B WITH DOT ABOVE
1E05 ; [.1C60.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER B WITH DOT BELOW
1E04 ; [.1C60.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER B WITH DOT BELOW
1E07 ; [.1C60.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER B WITH LINE BELOW
1E06 ; [.1C60.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER B WITH LINE BELOW
3374 ; [.1C60.0020.001C][.1C47.0020.001C][.1E33.0020.001C] # SQUARE BAR
33C3 ; [.1C60.0020.001D][.1E21.0020.001C] # SQUARE BQ
0299 ; [.1C64.0020.0002] # LATIN LETTER SMALL CAPITAL B
0180 ; [.1C68.0020.0002] # LATIN SMALL LETTER B WITH STROKE
0243 ; [.1C68.0020.0008] # LATIN CAPITAL LETTER B WITH STROKE
1D2F ; [.1C6C.0020.0002] # MODIFIER LETTER CAPITAL BARRED B
1D03 ; [.1C6D.0020.0002] # LATIN LETTER SMALL CAPITAL BARRED B
1D6C ; [.1C6E.0020.0002] # LATIN SMALL LETTER B WITH MIDDLE TILDE
A797 ; [.1C6F.0020.0002] # LATIN SMALL LETTER B WITH FLOURISH
A796 ; [.1C6F.0020.0008] # LATIN CAPITAL LETTER B WITH FLOURISH
1D80 ; [.1C70.0020.0002] # LATIN SMALL LETTER B WITH PALATAL HOOK
0253 ; [.1C71.0020.0002] # LATIN SMALL LETTER B WITH HOOK
0181 ; [.1C71.0020.0008] # LATIN CAPITAL LETTER B WITH HOOK
0183 ; [.1C75.0020.0002] # LATIN SMALL LETTER B WITH TOPBAR
0182 ; [.1C75.0020.0008] # LATIN CAPITAL LETTER B WITH TOPBAR
A7B5 ; [.1C79.0020.0002] # LATIN SMALL LETTER BETA
1DE9 ; [.1C79.0020.0004] # COMBINING LATIN SMALL LETTER BETA
A7B4 ; [.1C79.0020.0008] # LATIN CAPITAL LETTER BETA
0063 ; [.1C7A.0020.0002] # LATIN SMALL LETTER C
FF43 ; [.1C7A.0020.0003] # FULLWIDTH LATIN SMALL LETTER C
0368 ; [.1C7A.0020.0004] # COMBINING LATIN SMALL LETTER C
217D ; [.1C7A.0020.0004] # SMALL ROMAN NUMERAL ONE HUNDRED
249E ; [*0317.0020.0004][.1C7A.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER C
1D41C ; [.1C7A.0020.0005] # MATHEMATICAL BOLD SMALL C
1D450 ; [.1C7A.0020.0005] # MATHEMATICAL ITALIC SMALL C
1D484 ; [.1C7A.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL C
1D4B8 ; [.1C7A.0020.0005] # MATHEMATICAL SCRIPT SMALL C
1D4EC ; [.1C7A.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL C
1D520 ; [.1C7A.0020.0005] # MATHEMATICAL FRAKTUR SMALL C
1D554 ; [.1C7A.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL C
1D588 ; [.1C7A.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL C
1D5BC ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF SMALL C
1D5F0 ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL C
1D624 ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL C
1D658 ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
1D68C ; [.1C7A.0020.0005] # MATHEMATICAL MONOSPACE SMALL C
24D2 ; [.1C7A.0020.0006] # CIRCLED LATIN SMALL LETTER C
0043 ; [.1C7A.0020.0008] # LATIN CAPITAL LETTER C
FF23 ; [.1C7A.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER C
2103 ; [*04F6.0020.0004][.1C7A.0020.000A] # DEGREE CELSIUS
216D ; [.1C7A.0020.000A] # ROMAN NUMERAL ONE HUNDRED
1F112 ; [*0317.0020.0004][.1C7A.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER C
2102 ; [.1C7A.0020.000B] # DOUBLE-STRUCK CAPITAL C
212D ; [.1C7A.0020.000B] # BLACK-LETTER CAPITAL C
1D402 ; [.1C7A.0020.000B] # MATHEMATICAL BOLD CAPITAL C
1D436 ; [.1C7A.0020.000B] # MATHEMATICAL ITALIC CAPITAL C
1D46A ; [.1C7A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL C
1D49E ; [.1C7A.0020.000B] # MATHEMATICAL SCRIPT CAPITAL C
1D4D2 ; [.1C7A.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL C
1D56E ; [.1C7A.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL C
1D5A2 ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL C
1D5D6 ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL C
1D60A ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
1D63E ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
1D672 ; [.1C7A.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL C
24B8 ; [.1C7A.0020.000C] # CIRCLED LATIN CAPITAL LETTER C
1F12B ; [.1C7A.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER C
1F152 ; [.1C7A.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER C
1D9C ; [.1C7A.0020.0014] # MODIFIER LETTER SMALL C
1F132 ; [.1C7A.0020.001D] # SQUARED LATIN CAPITAL LETTER C
1F172 ; [.1C7A.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER C
0107 ; [.1C7A.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH ACUTE
0106 ; [.1C7A.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH ACUTE
0109 ; [.1C7A.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX
0108 ; [.1C7A.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
010D ; [.1C7A.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER C WITH CARON
010C ; [.1C7A.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER C WITH CARON
010B ; [.1C7A.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER C WITH DOT ABOVE
010A ; [.1C7A.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER C WITH DOT ABOVE
00E7 ; [.1C7A.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER C WITH CEDILLA
1DD7 ; [.1C7A.0020.0004][.0000.0030.0004] # COMBINING LATIN SMALL LETTER C CEDILLA
00C7 ; [.1C7A.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER C WITH CEDILLA
1E09 ; [.1C7A.0020.0002][.0000.0030.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
1E08 ; [.1C7A.0020.0008][.0000.0030.0002][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
3388 ; [.1C7A.0020.001C][.1C47.0020.001C][.1D77.0020.001C] # SQUARE CAL
33C4 ; [.1C7A.0020.001C][.1C7A.0020.001C] # SQUARE CC
1F12D ; [.1C7A.0020.000C][.1C8F.0020.000C] # CIRCLED CD
33C5 ; [.1C7A.0020.001C][.1C8F.0020.001C] # SQUARE CD
33C6 ; [.1C7A.0020.001D][*0625.0020.001C][.1D65.0020.001C][.1CF4.0020.001C] # SQUARE C OVER KG
1F191 ; [.1C7A.0020.001D][.1D77.0020.001D] # SQUARED CL
339D ; [.1C7A.0020.001C][.1DAA.0020.001C] # SQUARE CM
33A0 ; [.1C7A.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE CM SQUARED
33A4 ; [.1C7A.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE CM CUBED
2105 ; [.1C7A.0020.0004][*0394.0020.0004][.1DDD.0020.0004] # CARE OF
33C7 ; [.1C7A.0020.001D][.1DDD.0020.001C][*0277.0020.001C] # SQUARE CO
1F192 ; [.1C7A.0020.001D][.1DDD.0020.001D][.1DDD.0020.001D][.1D77.0020.001D] # SQUARED COOL
2106 ; [.1C7A.0020.0004][*0394.0020.0004][.1EB5.0020.0004] # CADA UNA
1D04 ; [.1C7E.0020.0002] # LATIN LETTER SMALL CAPITAL C
023C ; [.1C7F.0020.0002] # LATIN SMALL LETTER C WITH STROKE
023B ; [.1C7F.0020.0008] # LATIN CAPITAL LETTER C WITH STROKE
A793 ; [.1C83.0020.0002] # LATIN SMALL LETTER C WITH BAR
A792 ; [.1C83.0020.0008] # LATIN CAPITAL LETTER C WITH BAR
A794 ; [.1C84.0020.0002] # LATIN SMALL LETTER C WITH PALATAL HOOK
0188 ; [.1C85.0020.0002] # LATIN SMALL LETTER C WITH HOOK
0187 ; [.1C85.0020.0008] # LATIN CAPITAL LETTER C WITH HOOK
0255 ; [.1C89.0020.0002] # LATIN SMALL LETTER C WITH CURL
1D9D ; [.1C89.0020.0014] # MODIFIER LETTER SMALL C WITH CURL
2184 ; [.1C8D.0020.0002] # LATIN SMALL LETTER REVERSED C
2183 ; [.1C8D.0020.0008] # ROMAN NUMERAL REVERSED ONE HUNDRED
A73F ; [.1C8E.0020.0002] # LATIN SMALL LETTER REVERSED C WITH DOT
A73E ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER REVERSED C WITH DOT
0064 ; [.1C8F.0020.0002] # LATIN SMALL LETTER D
FF44 ; [.1C8F.0020.0003] # FULLWIDTH LATIN SMALL LETTER D
0369 ; [.1C8F.0020.0004] # COMBINING LATIN SMALL LETTER D
217E ; [.1C8F.0020.0004] # SMALL ROMAN NUMERAL FIVE HUNDRED
249F ; [*0317.0020.0004][.1C8F.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER D
2146 ; [.1C8F.0020.0005] # DOUBLE-STRUCK ITALIC SMALL D
1D41D ; [.1C8F.0020.0005] # MATHEMATICAL BOLD SMALL D
1D451 ; [.1C8F.0020.0005] # MATHEMATICAL ITALIC SMALL D
1D485 ; [.1C8F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL D
1D4B9 ; [.1C8F.0020.0005] # MATHEMATICAL SCRIPT SMALL D
1D4ED ; [.1C8F.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL D
1D521 ; [.1C8F.0020.0005] # MATHEMATICAL FRAKTUR SMALL D
1D555 ; [.1C8F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL D
1D589 ; [.1C8F.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL D
1D5BD ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF SMALL D
1D5F1 ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL D
1D625 ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL D
1D659 ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
1D68D ; [.1C8F.0020.0005] # MATHEMATICAL MONOSPACE SMALL D
24D3 ; [.1C8F.0020.0006] # CIRCLED LATIN SMALL LETTER D
0044 ; [.1C8F.0020.0008] # LATIN CAPITAL LETTER D
FF24 ; [.1C8F.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER D
216E ; [.1C8F.0020.000A] # ROMAN NUMERAL FIVE HUNDRED
1F113 ; [*0317.0020.0004][.1C8F.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER D
2145 ; [.1C8F.0020.000B] # DOUBLE-STRUCK ITALIC CAPITAL D
1D403 ; [.1C8F.0020.000B] # MATHEMATICAL BOLD CAPITAL D
1D437 ; [.1C8F.0020.000B] # MATHEMATICAL ITALIC CAPITAL D
1D46B ; [.1C8F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL D
1D49F ; [.1C8F.0020.000B] # MATHEMATICAL SCRIPT CAPITAL D
1D4D3 ; [.1C8F.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL D
1D507 ; [.1C8F.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL D
1D53B ; [.1C8F.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL D
1D56F ; [.1C8F.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL D
1D5A3 ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL D
1D5D7 ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL D
1D60B ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
1D63F ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
1D673 ; [.1C8F.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL D
24B9 ; [.1C8F.0020.000C] # CIRCLED LATIN CAPITAL LETTER D
1F153 ; [.1C8F.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER D
1D48 ; [.1C8F.0020.0014] # MODIFIER LETTER SMALL D
1F1A5 ; [.1C8F.0020.001C] # SQUARED LATIN SMALL LETTER D
1D30 ; [.1C8F.0020.001D] # MODIFIER LETTER CAPITAL D
1F133 ; [.1C8F.0020.001D] # SQUARED LATIN CAPITAL LETTER D
1F173 ; [.1C8F.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER D
010F ; [.1C8F.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER D WITH CARON
010E ; [.1C8F.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER D WITH CARON
1E0B ; [.1C8F.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER D WITH DOT ABOVE
1E0A ; [.1C8F.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER D WITH DOT ABOVE
1E11 ; [.1C8F.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER D WITH CEDILLA
1E10 ; [.1C8F.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER D WITH CEDILLA
0111 ; [.1C8F.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE
0110 ; [.1C8F.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE
1E0D ; [.1C8F.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER D WITH DOT BELOW
1E0C ; [.1C8F.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER D WITH DOT BELOW
1E13 ; [.1C8F.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
1E12 ; [.1C8F.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
1E0F ; [.1C8F.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER D WITH LINE BELOW
1E0E ; [.1C8F.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER D WITH LINE BELOW
00F0 ; [.1C8F.0020.0004][.0000.0110.0004] # LATIN SMALL LETTER ETH
1DD9 ; [.1C8F.0020.0004][.0000.0110.0004] # COMBINING LATIN SMALL LETTER ETH
00D0 ; [.1C8F.0020.000A][.0000.0110.0004] # LATIN CAPITAL LETTER ETH
1D9E ; [.1C8F.0020.0014][.0000.0110.0014] # MODIFIER LETTER SMALL ETH
1DD8 ; [.1C8F.0020.0004][.0000.0111.0004] # COMBINING LATIN SMALL LETTER INSULAR D
A77A ; [.1C8F.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR D
A779 ; [.1C8F.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR D
3372 ; [.1C8F.0020.001C][.1C47.0020.001C] # SQUARE DA
0238 ; [.1C8F.0020.0004][.1C60.0020.0004] # LATIN SMALL LETTER DB DIGRAPH
33C8 ; [.1C8F.0020.001C][.1C60.0020.001D] # SQUARE DB
1F190 ; [.1C8F.0020.001D][.1D4C.0020.001D] # SQUARE DJ
3397 ; [.1C8F.0020.001C][.1D77.0020.001C] # SQUARE DL
3377 ; [.1C8F.0020.001C][.1DAA.0020.001C] # SQUARE DM
3378 ; [.1C8F.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE DM SQUARED
3379 ; [.1C8F.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE DM CUBED
01F3 ; [.1C8F.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER DZ
02A3 ; [.1C8F.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH
01F2 ; [.1C8F.0020.000A][.1F21.0020.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
01F1 ; [.1C8F.0020.000A][.1F21.0020.000A] # LATIN CAPITAL LETTER DZ
01C6 ; [.1C8F.0020.0004][.1F21.0020.0004][.0000.0028.0004] # LATIN SMALL LETTER DZ WITH CARON
01C5 ; [.1C8F.0020.000A][.1F21.0020.0004][.0000.0028.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
01C4 ; [.1C8F.0020.000A][.1F21.0020.000A][.0000.0028.0004] # LATIN CAPITAL LETTER DZ WITH CARON
02A5 ; [.1C8F.0020.0004][.1F34.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH WITH CURL
02A4 ; [.1C8F.0020.0004][.1F3E.0020.0004] # LATIN SMALL LETTER DEZH DIGRAPH
1D05 ; [.1C93.0020.0002] # LATIN LETTER SMALL CAPITAL D
1D06 ; [.1C94.0020.0002] # LATIN LETTER SMALL CAPITAL ETH
1D6D ; [.1C95.0020.0002] # LATIN SMALL LETTER D WITH MIDDLE TILDE
1D81 ; [.1C96.0020.0002] # LATIN SMALL LETTER D WITH PALATAL HOOK
0256 ; [.1C97.0020.0002] # LATIN SMALL LETTER D WITH TAIL
0189 ; [.1C97.0020.0008] # LATIN CAPITAL LETTER AFRICAN D
0257 ; [.1C9B.0020.0002] # LATIN SMALL LETTER D WITH HOOK
018A ; [.1C9B.0020.0008] # LATIN CAPITAL LETTER D WITH HOOK
1D91 ; [.1C9F.0020.0002] # LATIN SMALL LETTER D WITH HOOK AND TAIL
018C ; [.1CA0.0020.0002] # LATIN SMALL LETTER D WITH TOPBAR
018B ; [.1CA0.0020.0008] # LATIN CAPITAL LETTER D WITH TOPBAR
0221 ; [.1CA4.0020.0002] # LATIN SMALL LETTER D WITH CURL
A771 ; [.1CA8.0020.0002] # LATIN SMALL LETTER DUM
1E9F ; [.1CA9.0020.0002] # LATIN SMALL LETTER DELTA
0065 ; [.1CAA.0020.0002] # LATIN SMALL LETTER E
FF45 ; [.1CAA.0020.0003] # FULLWIDTH LATIN SMALL LETTER E
0364 ; [.1CAA.0020.0004] # COMBINING LATIN SMALL LETTER E
24A0 ; [*0317.0020.0004][.1CAA.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER E
212F ; [.1CAA.0020.0005] # SCRIPT SMALL E
2147 ; [.1CAA.0020.0005] # DOUBLE-STRUCK ITALIC SMALL E
1D41E ; [.1CAA.0020.0005] # MATHEMATICAL BOLD SMALL E
1D452 ; [.1CAA.0020.0005] # MATHEMATICAL ITALIC SMALL E
1D486 ; [.1CAA.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL E
1D4EE ; [.1CAA.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL E
1D522 ; [.1CAA.0020.0005] # MATHEMATICAL FRAKTUR SMALL E
1D556 ; [.1CAA.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL E
1D58A ; [.1CAA.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL E
1D5BE ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF SMALL E
1D5F2 ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL E
1D626 ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL E
1D65A ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
1D68E ; [.1CAA.0020.0005] # MATHEMATICAL MONOSPACE SMALL E
24D4 ; [.1CAA.0020.0006] # CIRCLED LATIN SMALL LETTER E
0045 ; [.1CAA.0020.0008] # LATIN CAPITAL LETTER E
FF25 ; [.1CAA.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER E
1F114 ; [*0317.0020.0004][.1CAA.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER E
2130 ; [.1CAA.0020.000B] # SCRIPT CAPITAL E
1D404 ; [.1CAA.0020.000B] # MATHEMATICAL BOLD CAPITAL E
1D438 ; [.1CAA.0020.000B] # MATHEMATICAL ITALIC CAPITAL E
1D46C ; [.1CAA.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL E
1D4D4 ; [.1CAA.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL E
1D508 ; [.1CAA.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL E
1D53C ; [.1CAA.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL E
1D570 ; [.1CAA.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL E
1D5A4 ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL E
1D5D8 ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL E
1D60C ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
1D640 ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
1D674 ; [.1CAA.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL E
24BA ; [.1CAA.0020.000C] # CIRCLED LATIN CAPITAL LETTER E
1F154 ; [.1CAA.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER E
1D49 ; [.1CAA.0020.0014] # MODIFIER LETTER SMALL E
2091 ; [.1CAA.0020.0015] # LATIN SUBSCRIPT SMALL LETTER E
1D31 ; [.1CAA.0020.001D] # MODIFIER LETTER CAPITAL E
1F134 ; [.1CAA.0020.001D] # SQUARED LATIN CAPITAL LETTER E
1F174 ; [.1CAA.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER E
00E9 ; [.1CAA.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH ACUTE
00C9 ; [.1CAA.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH ACUTE
00E8 ; [.1CAA.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH GRAVE
00C8 ; [.1CAA.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH GRAVE
0115 ; [.1CAA.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH BREVE
0114 ; [.1CAA.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH BREVE
00EA ; [.1CAA.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
00CA ; [.1CAA.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
1EBF ; [.1CAA.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
1EBE ; [.1CAA.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
1EC1 ; [.1CAA.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC0 ; [.1CAA.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
1EC5 ; [.1CAA.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
1EC4 ; [.1CAA.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
1EC3 ; [.1CAA.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
1EC2 ; [.1CAA.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
011B ; [.1CAA.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER E WITH CARON
011A ; [.1CAA.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER E WITH CARON
00EB ; [.1CAA.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER E WITH DIAERESIS
00CB ; [.1CAA.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER E WITH DIAERESIS
1EBD ; [.1CAA.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH TILDE
1EBC ; [.1CAA.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH TILDE
0117 ; [.1CAA.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER E WITH DOT ABOVE
0116 ; [.1CAA.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER E WITH DOT ABOVE
0229 ; [.1CAA.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER E WITH CEDILLA
0228 ; [.1CAA.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER E WITH CEDILLA
1E1D ; [.1CAA.0020.0002][.0000.0030.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
1E1C ; [.1CAA.0020.0008][.0000.0030.0002][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
0119 ; [.1CAA.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER E WITH OGONEK
0118 ; [.1CAA.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER E WITH OGONEK
0113 ; [.1CAA.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON
0112 ; [.1CAA.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON
1E17 ; [.1CAA.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH MACRON AND ACUTE
1E16 ; [.1CAA.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
1E15 ; [.1CAA.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH MACRON AND GRAVE
1E14 ; [.1CAA.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
1EBB ; [.1CAA.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH HOOK ABOVE
1EBA ; [.1CAA.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH HOOK ABOVE
0205 ; [.1CAA.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER E WITH DOUBLE GRAVE
0204 ; [.1CAA.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
0207 ; [.1CAA.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER E WITH INVERTED BREVE
0206 ; [.1CAA.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER E WITH INVERTED BREVE
1EB9 ; [.1CAA.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH DOT BELOW
1EB8 ; [.1CAA.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH DOT BELOW
1EC7 ; [.1CAA.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1EC6 ; [.1CAA.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
1E19 ; [.1CAA.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
1E18 ; [.1CAA.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
1E1B ; [.1CAA.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER E WITH TILDE BELOW
1E1A ; [.1CAA.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER E WITH TILDE BELOW
32CD ; [.1CAA.0020.001C][.1E33.0020.001C][.1CF4.0020.001C] # SQUARE ERG
32CE ; [.1CAA.0020.001C][.1EE3.0020.001D] # SQUARE EV
1D07 ; [.1CAE.0020.0002] # LATIN LETTER SMALL CAPITAL E
AB32 ; [.1CAF.0020.0002] # LATIN SMALL LETTER BLACKLETTER E
AB33 ; [.1CB0.0020.0002] # LATIN SMALL LETTER BARRED E
0247 ; [.1CB1.0020.0002] # LATIN SMALL LETTER E WITH STROKE
0246 ; [.1CB1.0020.0008] # LATIN CAPITAL LETTER E WITH STROKE
1D92 ; [.1CB5.0020.0002] # LATIN SMALL LETTER E WITH RETROFLEX HOOK
AB34 ; [.1CB6.0020.0002] # LATIN SMALL LETTER E WITH FLOURISH
2C78 ; [.1CB7.0020.0002] # LATIN SMALL LETTER E WITH NOTCH
01DD ; [.1CB8.0020.0002] # LATIN SMALL LETTER TURNED E
018E ; [.1CB8.0020.0008] # LATIN CAPITAL LETTER REVERSED E
1D32 ; [.1CB8.0020.001D] # MODIFIER LETTER CAPITAL REVERSED E
2C7B ; [.1CBC.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED E
0259 ; [.1CBD.0020.0002] # LATIN SMALL LETTER SCHWA
1DEA ; [.1CBD.0020.0004] # COMBINING LATIN SMALL LETTER SCHWA
018F ; [.1CBD.0020.0008] # LATIN CAPITAL LETTER SCHWA
1D4A ; [.1CBD.0020.0014] # MODIFIER LETTER SMALL SCHWA
2094 ; [.1CBD.0020.0015] # LATIN SUBSCRIPT SMALL LETTER SCHWA
1D95 ; [.1CC1.0020.0002] # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
025B ; [.1CC2.0020.0002] # LATIN SMALL LETTER OPEN E
0190 ; [.1CC2.0020.0008] # LATIN CAPITAL LETTER OPEN E
2107 ; [.1CC2.0020.000A] # EULER CONSTANT
1D4B ; [.1CC2.0020.0014] # MODIFIER LETTER SMALL OPEN E
1D93 ; [.1CC6.0020.0002] # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
0258 ; [.1CC7.0020.0002] # LATIN SMALL LETTER REVERSED E
025A ; [.1CCB.0020.0002] # LATIN SMALL LETTER SCHWA WITH HOOK
025C ; [.1CCF.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E
A7AB ; [.1CCF.0020.0008] # LATIN CAPITAL LETTER REVERSED OPEN E
1D9F ; [.1CCF.0020.0014] # MODIFIER LETTER SMALL REVERSED OPEN E
1D94 ; [.1CD3.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
1D08 ; [.1CD4.0020.0002] # LATIN SMALL LETTER TURNED OPEN E
1D4C ; [.1CD4.0020.0014] # MODIFIER LETTER SMALL TURNED OPEN E
025D ; [.1CD5.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
025E ; [.1CD9.0020.0002] # LATIN SMALL LETTER CLOSED REVERSED OPEN E
029A ; [.1CDD.0020.0002] # LATIN SMALL LETTER CLOSED OPEN E
0264 ; [.1CE1.0020.0002] # LATIN SMALL LETTER RAMS HORN
0066 ; [.1CE5.0020.0002] # LATIN SMALL LETTER F
FF46 ; [.1CE5.0020.0003] # FULLWIDTH LATIN SMALL LETTER F
1DEB ; [.1CE5.0020.0004] # COMBINING LATIN SMALL LETTER F
24A1 ; [*0317.0020.0004][.1CE5.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER F
1D41F ; [.1CE5.0020.0005] # MATHEMATICAL BOLD SMALL F
1D453 ; [.1CE5.0020.0005] # MATHEMATICAL ITALIC SMALL F
1D487 ; [.1CE5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL F
1D4BB ; [.1CE5.0020.0005] # MATHEMATICAL SCRIPT SMALL F
1D4EF ; [.1CE5.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL F
1D523 ; [.1CE5.0020.0005] # MATHEMATICAL FRAKTUR SMALL F
1D557 ; [.1CE5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL F
1D58B ; [.1CE5.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL F
1D5BF ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF SMALL F
1D5F3 ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL F
1D627 ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL F
1D65B ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
1D68F ; [.1CE5.0020.0005] # MATHEMATICAL MONOSPACE SMALL F
24D5 ; [.1CE5.0020.0006] # CIRCLED LATIN SMALL LETTER F
0046 ; [.1CE5.0020.0008] # LATIN CAPITAL LETTER F
FF26 ; [.1CE5.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER F
2109 ; [*04F6.0020.0004][.1CE5.0020.000A] # DEGREE FAHRENHEIT
1F115 ; [*0317.0020.0004][.1CE5.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER F
2131 ; [.1CE5.0020.000B] # SCRIPT CAPITAL F
1D405 ; [.1CE5.0020.000B] # MATHEMATICAL BOLD CAPITAL F
1D439 ; [.1CE5.0020.000B] # MATHEMATICAL ITALIC CAPITAL F
1D46D ; [.1CE5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL F
1D4D5 ; [.1CE5.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL F
1D509 ; [.1CE5.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL F
1D53D ; [.1CE5.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL F
1D571 ; [.1CE5.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL F
1D5A5 ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL F
1D5D9 ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL F
1D60D ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
1D641 ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
1D675 ; [.1CE5.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL F
24BB ; [.1CE5.0020.000C] # CIRCLED LATIN CAPITAL LETTER F
1F155 ; [.1CE5.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER F
1DA0 ; [.1CE5.0020.0014] # MODIFIER LETTER SMALL F
1F135 ; [.1CE5.0020.001D] # SQUARED LATIN CAPITAL LETTER F
1F175 ; [.1CE5.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER F
1E1F ; [.1CE5.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER F WITH DOT ABOVE
1E1E ; [.1CE5.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER F WITH DOT ABOVE
A77C ; [.1CE5.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR F
A77B ; [.1CE5.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR F
213B ; [.1CE5.0020.000A][.1C47.0020.000A][.1EFF.0020.000A] # FACSIMILE SIGN
FB00 ; [.1CE5.0020.0004][.1CE5.0020.0004] # LATIN SMALL LIGATURE FF
FB03 ; [.1CE5.0020.0004][.1CE5.0020.0004][.1D32.0020.0004] # LATIN SMALL LIGATURE FFI
FB04 ; [.1CE5.0020.0004][.1CE5.0020.0004][.1D77.0020.0004] # LATIN SMALL LIGATURE FFL
FB01 ; [.1CE5.0020.0004][.1D32.0020.0004] # LATIN SMALL LIGATURE FI
FB02 ; [.1CE5.0020.0004][.1D77.0020.0004] # LATIN SMALL LIGATURE FL
3399 ; [.1CE5.0020.001C][.1DAA.0020.001C] # SQUARE FM
02A9 ; [.1CE5.0020.0004][.1DD8.0020.0004] # LATIN SMALL LETTER FENG DIGRAPH
1F193 ; [.1CE5.0020.001D][.1E33.0020.001D][.1CAA.0020.001D][.1CAA.0020.001D] # SQUARED FREE
A730 ; [.1CE9.0020.0002] # LATIN LETTER SMALL CAPITAL F
AB35 ; [.1CEA.0020.0002] # LATIN SMALL LETTER LENIS F
A799 ; [.1CEB.0020.0002] # LATIN SMALL LETTER F WITH STROKE
A798 ; [.1CEB.0020.0008] # LATIN CAPITAL LETTER F WITH STROKE
1D6E ; [.1CEC.0020.0002] # LATIN SMALL LETTER F WITH MIDDLE TILDE
1D82 ; [.1CED.0020.0002] # LATIN SMALL LETTER F WITH PALATAL HOOK
0192 ; [.1CEE.0020.0002] # LATIN SMALL LETTER F WITH HOOK
0191 ; [.1CEE.0020.0008] # LATIN CAPITAL LETTER F WITH HOOK
214E ; [.1CF2.0020.0002] # TURNED SMALL F
2132 ; [.1CF2.0020.0008] # TURNED CAPITAL F
A7FB ; [.1CF3.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED F
0067 ; [.1CF4.0020.0002] # LATIN SMALL LETTER G
FF47 ; [.1CF4.0020.0003] # FULLWIDTH LATIN SMALL LETTER G
1DDA ; [.1CF4.0020.0004] # COMBINING LATIN SMALL LETTER G
24A2 ; [*0317.0020.0004][.1CF4.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER G
210A ; [.1CF4.0020.0005] # SCRIPT SMALL G
1D420 ; [.1CF4.0020.0005] # MATHEMATICAL BOLD SMALL G
1D454 ; [.1CF4.0020.0005] # MATHEMATICAL ITALIC SMALL G
1D488 ; [.1CF4.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL G
1D4F0 ; [.1CF4.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL G
1D524 ; [.1CF4.0020.0005] # MATHEMATICAL FRAKTUR SMALL G
1D558 ; [.1CF4.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL G
1D58C ; [.1CF4.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL G
1D5C0 ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF SMALL G
1D5F4 ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL G
1D628 ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL G
1D65C ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
1D690 ; [.1CF4.0020.0005] # MATHEMATICAL MONOSPACE SMALL G
24D6 ; [.1CF4.0020.0006] # CIRCLED LATIN SMALL LETTER G
0047 ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER G
FF27 ; [.1CF4.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER G
1F116 ; [*0317.0020.0004][.1CF4.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER G
1D406 ; [.1CF4.0020.000B] # MATHEMATICAL BOLD CAPITAL G
1D43A ; [.1CF4.0020.000B] # MATHEMATICAL ITALIC CAPITAL G
1D46E ; [.1CF4.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL G
1D4A2 ; [.1CF4.0020.000B] # MATHEMATICAL SCRIPT CAPITAL G
1D4D6 ; [.1CF4.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL G
1D50A ; [.1CF4.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL G
1D53E ; [.1CF4.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL G
1D572 ; [.1CF4.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL G
1D5A6 ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL G
1D5DA ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL G
1D60E ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
1D642 ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
1D676 ; [.1CF4.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL G
24BC ; [.1CF4.0020.000C] # CIRCLED LATIN CAPITAL LETTER G
1F156 ; [.1CF4.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER G
1D4D ; [.1CF4.0020.0014] # MODIFIER LETTER SMALL G
1D33 ; [.1CF4.0020.001D] # MODIFIER LETTER CAPITAL G
1F136 ; [.1CF4.0020.001D] # SQUARED LATIN CAPITAL LETTER G
1F176 ; [.1CF4.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER G
01F5 ; [.1CF4.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER G WITH ACUTE
01F4 ; [.1CF4.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER G WITH ACUTE
011F ; [.1CF4.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER G WITH BREVE
011E ; [.1CF4.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER G WITH BREVE
011D ; [.1CF4.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX
011C ; [.1CF4.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
01E7 ; [.1CF4.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER G WITH CARON
01E6 ; [.1CF4.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER G WITH CARON
0121 ; [.1CF4.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER G WITH DOT ABOVE
0120 ; [.1CF4.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER G WITH DOT ABOVE
0123 ; [.1CF4.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER G WITH CEDILLA
0122 ; [.1CF4.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER G WITH CEDILLA
1E21 ; [.1CF4.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER G WITH MACRON
1E20 ; [.1CF4.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER G WITH MACRON
A7A1 ; [.1CF4.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER G WITH OBLIQUE STROKE
A7A0 ; [.1CF4.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
1D79 ; [.1CF4.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR G
A77D ; [.1CF4.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR G
33FF ; [.1CF4.0020.001C][.1C47.0020.001C][.1D77.0020.001C] # SQUARE GAL
3387 ; [.1CF4.0020.001D][.1C60.0020.001D] # SQUARE GB
3393 ; [.1CF4.0020.001D][.1D18.0020.001D][.1F21.0020.001C] # SQUARE GHZ
33AC ; [.1CF4.0020.001D][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE GPA
33C9 ; [.1CF4.0020.001D][.1F0B.0020.001C] # SQUARE GY
0261 ; [.1CF8.0020.0002] # LATIN SMALL LETTER SCRIPT G
A7AC ; [.1CF8.0020.0008] # LATIN CAPITAL LETTER SCRIPT G
1DA2 ; [.1CF8.0020.0014] # MODIFIER LETTER SMALL SCRIPT G
AB36 ; [.1CFC.0020.0002] # LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL
0262 ; [.1CFD.0020.0002] # LATIN LETTER SMALL CAPITAL G
1DDB ; [.1CFD.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL G
01E5 ; [.1D01.0020.0002] # LATIN SMALL LETTER G WITH STROKE
01E4 ; [.1D01.0020.0008] # LATIN CAPITAL LETTER G WITH STROKE
1D83 ; [.1D05.0020.0002] # LATIN SMALL LETTER G WITH PALATAL HOOK
0260 ; [.1D06.0020.0002] # LATIN SMALL LETTER G WITH HOOK
0193 ; [.1D06.0020.0008] # LATIN CAPITAL LETTER G WITH HOOK
029B ; [.1D0A.0020.0002] # LATIN LETTER SMALL CAPITAL G WITH HOOK
1D77 ; [.1D0E.0020.0002] # LATIN SMALL LETTER TURNED G
A77F ; [.1D0F.0020.0002] # LATIN SMALL LETTER TURNED INSULAR G
A77E ; [.1D0F.0020.0008] # LATIN CAPITAL LETTER TURNED INSULAR G
0263 ; [.1D10.0020.0002] # LATIN SMALL LETTER GAMMA
0194 ; [.1D10.0020.0008] # LATIN CAPITAL LETTER GAMMA
02E0 ; [.1D10.0020.0014] # MODIFIER LETTER SMALL GAMMA
01A3 ; [.1D14.0020.0002] # LATIN SMALL LETTER OI
01A2 ; [.1D14.0020.0008] # LATIN CAPITAL LETTER OI
0068 ; [.1D18.0020.0002] # LATIN SMALL LETTER H
FF48 ; [.1D18.0020.0003] # FULLWIDTH LATIN SMALL LETTER H
036A ; [.1D18.0020.0004] # COMBINING LATIN SMALL LETTER H
24A3 ; [*0317.0020.0004][.1D18.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER H
210E ; [.1D18.0020.0005] # PLANCK CONSTANT
1D421 ; [.1D18.0020.0005] # MATHEMATICAL BOLD SMALL H
1D489 ; [.1D18.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL H
1D4BD ; [.1D18.0020.0005] # MATHEMATICAL SCRIPT SMALL H
1D4F1 ; [.1D18.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL H
1D525 ; [.1D18.0020.0005] # MATHEMATICAL FRAKTUR SMALL H
1D559 ; [.1D18.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL H
1D58D ; [.1D18.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL H
1D5C1 ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF SMALL H
1D5F5 ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL H
1D629 ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL H
1D65D ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
1D691 ; [.1D18.0020.0005] # MATHEMATICAL MONOSPACE SMALL H
24D7 ; [.1D18.0020.0006] # CIRCLED LATIN SMALL LETTER H
0048 ; [.1D18.0020.0008] # LATIN CAPITAL LETTER H
FF28 ; [.1D18.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER H
1F117 ; [*0317.0020.0004][.1D18.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER H
210B ; [.1D18.0020.000B] # SCRIPT CAPITAL H
210C ; [.1D18.0020.000B] # BLACK-LETTER CAPITAL H
210D ; [.1D18.0020.000B] # DOUBLE-STRUCK CAPITAL H
1D407 ; [.1D18.0020.000B] # MATHEMATICAL BOLD CAPITAL H
1D43B ; [.1D18.0020.000B] # MATHEMATICAL ITALIC CAPITAL H
1D46F ; [.1D18.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL H
1D4D7 ; [.1D18.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL H
1D573 ; [.1D18.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL H
1D5A7 ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL H
1D5DB ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL H
1D60F ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
1D643 ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
1D677 ; [.1D18.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL H
24BD ; [.1D18.0020.000C] # CIRCLED LATIN CAPITAL LETTER H
1F157 ; [.1D18.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER H
02B0 ; [.1D18.0020.0014] # MODIFIER LETTER SMALL H
2095 ; [.1D18.0020.0015] # LATIN SUBSCRIPT SMALL LETTER H
1D34 ; [.1D18.0020.001D] # MODIFIER LETTER CAPITAL H
1F137 ; [.1D18.0020.001D] # SQUARED LATIN CAPITAL LETTER H
1F177 ; [.1D18.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER H
0125 ; [.1D18.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX
0124 ; [.1D18.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
021F ; [.1D18.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER H WITH CARON
021E ; [.1D18.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER H WITH CARON
1E27 ; [.1D18.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER H WITH DIAERESIS
1E26 ; [.1D18.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER H WITH DIAERESIS
1E23 ; [.1D18.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER H WITH DOT ABOVE
1E22 ; [.1D18.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER H WITH DOT ABOVE
1E29 ; [.1D18.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER H WITH CEDILLA
1E28 ; [.1D18.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER H WITH CEDILLA
0127 ; [.1D18.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER H WITH STROKE
210F ; [.1D18.0020.0002][.0000.0039.0002] # PLANCK CONSTANT OVER TWO PI
0126 ; [.1D18.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER H WITH STROKE
A7F8 ; [.1D18.0020.0014][.0000.0039.0014] # MODIFIER LETTER CAPITAL H WITH STROKE
1E25 ; [.1D18.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER H WITH DOT BELOW
1E24 ; [.1D18.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER H WITH DOT BELOW
1E2B ; [.1D18.0020.0002][.0000.0047.0002] # LATIN SMALL LETTER H WITH BREVE BELOW
1E2A ; [.1D18.0020.0008][.0000.0047.0002] # LATIN CAPITAL LETTER H WITH BREVE BELOW
1E96 ; [.1D18.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER H WITH LINE BELOW
33CA ; [.1D18.0020.001C][.1C47.0020.001C] # SQUARE HA
1F1A6 ; [.1D18.0020.001D][.1C7A.0020.001C] # SQUARED HC
1F1A7 ; [.1D18.0020.001D][.1C8F.0020.001C][.1E33.0020.001D] # SQUARED HDR
32CC ; [.1D18.0020.001D][.1CF4.0020.001C] # SQUARE HG
1F1A8 ; [.1D18.0020.001D][.1D32.0020.001C][*0209.0020.001C][.1E33.0020.001D][.1CAA.0020.001C][.1E71.0020.001C] # SQUARED HI-RES
33CB ; [.1D18.0020.001D][.1E0C.0020.001D] # SQUARE HP
3371 ; [.1D18.0020.001C][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE HPA
1F14A ; [.1D18.0020.001D][.1EE3.0020.001D] # SQUARED HV
3390 ; [.1D18.0020.001D][.1F21.0020.001C] # SQUARE HZ
029C ; [.1D1C.0020.0002] # LATIN LETTER SMALL CAPITAL H
0195 ; [.1D20.0020.0002] # LATIN SMALL LETTER HV
01F6 ; [.1D20.0020.0008] # LATIN CAPITAL LETTER HWAIR
A795 ; [.1D24.0020.0002] # LATIN SMALL LETTER H WITH PALATAL HOOK
0266 ; [.1D25.0020.0002] # LATIN SMALL LETTER H WITH HOOK
A7AA ; [.1D25.0020.0008] # LATIN CAPITAL LETTER H WITH HOOK
02B1 ; [.1D25.0020.0014] # MODIFIER LETTER SMALL H WITH HOOK
2C68 ; [.1D29.0020.0002] # LATIN SMALL LETTER H WITH DESCENDER
2C67 ; [.1D29.0020.0008] # LATIN CAPITAL LETTER H WITH DESCENDER
2C76 ; [.1D2A.0020.0002] # LATIN SMALL LETTER HALF H
2C75 ; [.1D2A.0020.0008] # LATIN CAPITAL LETTER HALF H
A727 ; [.1D2B.0020.0002] # LATIN SMALL LETTER HENG
A726 ; [.1D2B.0020.0008] # LATIN CAPITAL LETTER HENG
AB5C ; [.1D2B.0020.0014] # MODIFIER LETTER SMALL HENG
0267 ; [.1D2C.0020.0002] # LATIN SMALL LETTER HENG WITH HOOK
02BB ; [.1D30.0020.0002] # MODIFIER LETTER TURNED COMMA
02BD ; [.1D31.0020.0002] # MODIFIER LETTER REVERSED COMMA
0069 ; [.1D32.0020.0002] # LATIN SMALL LETTER I
FF49 ; [.1D32.0020.0003] # FULLWIDTH LATIN SMALL LETTER I
0365 ; [.1D32.0020.0004] # COMBINING LATIN SMALL LETTER I
2170 ; [.1D32.0020.0004] # SMALL ROMAN NUMERAL ONE
24A4 ; [*0317.0020.0004][.1D32.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER I
2139 ; [.1D32.0020.0005] # INFORMATION SOURCE
2148 ; [.1D32.0020.0005] # DOUBLE-STRUCK ITALIC SMALL I
1D422 ; [.1D32.0020.0005] # MATHEMATICAL BOLD SMALL I
1D456 ; [.1D32.0020.0005] # MATHEMATICAL ITALIC SMALL I
1D48A ; [.1D32.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL I
1D4BE ; [.1D32.0020.0005] # MATHEMATICAL SCRIPT SMALL I
1D4F2 ; [.1D32.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL I
1D526 ; [.1D32.0020.0005] # MATHEMATICAL FRAKTUR SMALL I
1D55A ; [.1D32.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL I
1D58E ; [.1D32.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL I
1D5C2 ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF SMALL I
1D5F6 ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL I
1D62A ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL I
1D65E ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
1D692 ; [.1D32.0020.0005] # MATHEMATICAL MONOSPACE SMALL I
24D8 ; [.1D32.0020.0006] # CIRCLED LATIN SMALL LETTER I
0049 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I
FF29 ; [.1D32.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER I
2160 ; [.1D32.0020.000A] # ROMAN NUMERAL ONE
1F118 ; [*0317.0020.0004][.1D32.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER I
2110 ; [.1D32.0020.000B] # SCRIPT CAPITAL I
2111 ; [.1D32.0020.000B] # BLACK-LETTER CAPITAL I
1D408 ; [.1D32.0020.000B] # MATHEMATICAL BOLD CAPITAL I
1D43C ; [.1D32.0020.000B] # MATHEMATICAL ITALIC CAPITAL I
1D470 ; [.1D32.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL I
1D4D8 ; [.1D32.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL I
1D540 ; [.1D32.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL I
1D574 ; [.1D32.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL I
1D5A8 ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL I
1D5DC ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL I
1D610 ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
1D644 ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
1D678 ; [.1D32.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL I
24BE ; [.1D32.0020.000C] # CIRCLED LATIN CAPITAL LETTER I
1F158 ; [.1D32.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER I
2071 ; [.1D32.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER I
1D62 ; [.1D32.0020.0015] # LATIN SUBSCRIPT SMALL LETTER I
1D35 ; [.1D32.0020.001D] # MODIFIER LETTER CAPITAL I
1F138 ; [.1D32.0020.001D] # SQUARED LATIN CAPITAL LETTER I
1F178 ; [.1D32.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER I
00ED ; [.1D32.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH ACUTE
00CD ; [.1D32.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE
00EC ; [.1D32.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER I WITH GRAVE
00CC ; [.1D32.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE
012D ; [.1D32.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER I WITH BREVE
012C ; [.1D32.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE
00EE ; [.1D32.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX
00CE ; [.1D32.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
01D0 ; [.1D32.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER I WITH CARON
01CF ; [.1D32.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER I WITH CARON
00EF ; [.1D32.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER I WITH DIAERESIS
00CF ; [.1D32.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS
1E2F ; [.1D32.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
1E2E ; [.1D32.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
0129 ; [.1D32.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER I WITH TILDE
0128 ; [.1D32.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER I WITH TILDE
0130 ; [.1D32.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER I WITH DOT ABOVE
012F ; [.1D32.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER I WITH OGONEK
012E ; [.1D32.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK
012B ; [.1D32.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON
012A ; [.1D32.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON
1EC9 ; [.1D32.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER I WITH HOOK ABOVE
1EC8 ; [.1D32.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER I WITH HOOK ABOVE
0209 ; [.1D32.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER I WITH DOUBLE GRAVE
0208 ; [.1D32.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
020B ; [.1D32.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER I WITH INVERTED BREVE
020A ; [.1D32.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER I WITH INVERTED BREVE
1ECB ; [.1D32.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER I WITH DOT BELOW
1ECA ; [.1D32.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER I WITH DOT BELOW
1E2D ; [.1D32.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER I WITH TILDE BELOW
1E2C ; [.1D32.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER I WITH TILDE BELOW
1F18B ; [.1D32.0020.001D][.1C7A.0020.001D] # NEGATIVE SQUARED IC
1F194 ; [.1D32.0020.001D][.1C8F.0020.001D] # SQUARED ID
2171 ; [.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL TWO
2161 ; [.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL TWO
2172 ; [.1D32.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL THREE
2162 ; [.1D32.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL THREE
0133 ; [.1D32.0020.0004][.1D4C.0020.0004] # LATIN SMALL LIGATURE IJ
0132 ; [.1D32.0020.000A][.1D4C.0020.000A] # LATIN CAPITAL LIGATURE IJ
33CC ; [.1D32.0020.001C][.1DB9.0020.001C] # SQUARE IN
337A ; [.1D32.0020.001D][.1EB5.0020.001D] # SQUARE IU
2173 ; [.1D32.0020.0004][.1EE3.0020.0004] # SMALL ROMAN NUMERAL FOUR
2163 ; [.1D32.0020.000A][.1EE3.0020.000A] # ROMAN NUMERAL FOUR
2178 ; [.1D32.0020.0004][.1EFF.0020.0004] # SMALL ROMAN NUMERAL NINE
2168 ; [.1D32.0020.000A][.1EFF.0020.000A] # ROMAN NUMERAL NINE
0131 ; [.1D36.0020.0002] # LATIN SMALL LETTER DOTLESS I
1D6A4 ; [.1D36.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS I
026A ; [.1D3A.0020.0002] # LATIN LETTER SMALL CAPITAL I
A7AE ; [.1D3A.0020.0008] # LATIN CAPITAL LETTER SMALL CAPITAL I
1DA6 ; [.1D3A.0020.0014] # MODIFIER LETTER SMALL CAPITAL I
A7FE ; [.1D3E.0020.0002] # LATIN EPIGRAPHIC LETTER I LONGA
A7F7 ; [.1D3F.0020.0002] # LATIN EPIGRAPHIC LETTER SIDEWAYS I
1D09 ; [.1D40.0020.0002] # LATIN SMALL LETTER TURNED I
1D4E ; [.1D40.0020.0014] # MODIFIER LETTER SMALL TURNED I
0268 ; [.1D41.0020.0002] # LATIN SMALL LETTER I WITH STROKE
0197 ; [.1D41.0020.0008] # LATIN CAPITAL LETTER I WITH STROKE
1DA4 ; [.1D41.0020.0014] # MODIFIER LETTER SMALL I WITH STROKE
1D7B ; [.1D45.0020.0002] # LATIN SMALL CAPITAL LETTER I WITH STROKE
1DA7 ; [.1D45.0020.0014] # MODIFIER LETTER SMALL CAPITAL I WITH STROKE
1D96 ; [.1D46.0020.0002] # LATIN SMALL LETTER I WITH RETROFLEX HOOK
0269 ; [.1D47.0020.0002] # LATIN SMALL LETTER IOTA
0196 ; [.1D47.0020.0008] # LATIN CAPITAL LETTER IOTA
1DA5 ; [.1D47.0020.0014] # MODIFIER LETTER SMALL IOTA
1D7C ; [.1D4B.0020.0002] # LATIN SMALL LETTER IOTA WITH STROKE
006A ; [.1D4C.0020.0002] # LATIN SMALL LETTER J
FF4A ; [.1D4C.0020.0003] # FULLWIDTH LATIN SMALL LETTER J
24A5 ; [*0317.0020.0004][.1D4C.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER J
2149 ; [.1D4C.0020.0005] # DOUBLE-STRUCK ITALIC SMALL J
1D423 ; [.1D4C.0020.0005] # MATHEMATICAL BOLD SMALL J
1D457 ; [.1D4C.0020.0005] # MATHEMATICAL ITALIC SMALL J
1D48B ; [.1D4C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL J
1D4BF ; [.1D4C.0020.0005] # MATHEMATICAL SCRIPT SMALL J
1D4F3 ; [.1D4C.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL J
1D527 ; [.1D4C.0020.0005] # MATHEMATICAL FRAKTUR SMALL J
1D55B ; [.1D4C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL J
1D58F ; [.1D4C.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL J
1D5C3 ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF SMALL J
1D5F7 ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL J
1D62B ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL J
1D65F ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
1D693 ; [.1D4C.0020.0005] # MATHEMATICAL MONOSPACE SMALL J
24D9 ; [.1D4C.0020.0006] # CIRCLED LATIN SMALL LETTER J
004A ; [.1D4C.0020.0008] # LATIN CAPITAL LETTER J
FF2A ; [.1D4C.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER J
1F119 ; [*0317.0020.0004][.1D4C.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER J
1D409 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD CAPITAL J
1D43D ; [.1D4C.0020.000B] # MATHEMATICAL ITALIC CAPITAL J
1D471 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL J
1D4A5 ; [.1D4C.0020.000B] # MATHEMATICAL SCRIPT CAPITAL J
1D4D9 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL J
1D50D ; [.1D4C.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL J
1D541 ; [.1D4C.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL J
1D575 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL J
1D5A9 ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL J
1D5DD ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL J
1D611 ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
1D645 ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
1D679 ; [.1D4C.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL J
24BF ; [.1D4C.0020.000C] # CIRCLED LATIN CAPITAL LETTER J
1F159 ; [.1D4C.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER J
02B2 ; [.1D4C.0020.0014] # MODIFIER LETTER SMALL J
2C7C ; [.1D4C.0020.0015] # LATIN SUBSCRIPT SMALL LETTER J
1D36 ; [.1D4C.0020.001D] # MODIFIER LETTER CAPITAL J
1F139 ; [.1D4C.0020.001D] # SQUARED LATIN CAPITAL LETTER J
1F179 ; [.1D4C.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER J
0135 ; [.1D4C.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX
0134 ; [.1D4C.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
01F0 ; [.1D4C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER J WITH CARON
0237 ; [.1D50.0020.0002] # LATIN SMALL LETTER DOTLESS J
1D6A5 ; [.1D50.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS J
1D0A ; [.1D54.0020.0002] # LATIN LETTER SMALL CAPITAL J
0249 ; [.1D55.0020.0002] # LATIN SMALL LETTER J WITH STROKE
0248 ; [.1D55.0020.0008] # LATIN CAPITAL LETTER J WITH STROKE
029D ; [.1D59.0020.0002] # LATIN SMALL LETTER J WITH CROSSED-TAIL
A7B2 ; [.1D59.0020.0008] # LATIN CAPITAL LETTER J WITH CROSSED-TAIL
1DA8 ; [.1D59.0020.0014] # MODIFIER LETTER SMALL J WITH CROSSED-TAIL
025F ; [.1D5D.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE
1DA1 ; [.1D5D.0020.0014] # MODIFIER LETTER SMALL DOTLESS J WITH STROKE
0284 ; [.1D61.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
006B ; [.1D65.0020.0002] # LATIN SMALL LETTER K
FF4B ; [.1D65.0020.0003] # FULLWIDTH LATIN SMALL LETTER K
1DDC ; [.1D65.0020.0004] # COMBINING LATIN SMALL LETTER K
24A6 ; [*0317.0020.0004][.1D65.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER K
1D424 ; [.1D65.0020.0005] # MATHEMATICAL BOLD SMALL K
1D458 ; [.1D65.0020.0005] # MATHEMATICAL ITALIC SMALL K
1D48C ; [.1D65.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL K
1D4C0 ; [.1D65.0020.0005] # MATHEMATICAL SCRIPT SMALL K
1D4F4 ; [.1D65.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL K
1D528 ; [.1D65.0020.0005] # MATHEMATICAL FRAKTUR SMALL K
1D55C ; [.1D65.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL K
1D590 ; [.1D65.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL K
1D5C4 ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF SMALL K
1D5F8 ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL K
1D62C ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL K
1D660 ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
1D694 ; [.1D65.0020.0005] # MATHEMATICAL MONOSPACE SMALL K
24DA ; [.1D65.0020.0006] # CIRCLED LATIN SMALL LETTER K
004B ; [.1D65.0020.0008] # LATIN CAPITAL LETTER K
212A ; [.1D65.0020.0008] # KELVIN SIGN
FF2B ; [.1D65.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER K
1F11A ; [*0317.0020.0004][.1D65.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER K
1D40A ; [.1D65.0020.000B] # MATHEMATICAL BOLD CAPITAL K
1D43E ; [.1D65.0020.000B] # MATHEMATICAL ITALIC CAPITAL K
1D472 ; [.1D65.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL K
1D4A6 ; [.1D65.0020.000B] # MATHEMATICAL SCRIPT CAPITAL K
1D4DA ; [.1D65.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL K
1D50E ; [.1D65.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL K
1D542 ; [.1D65.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL K
1D576 ; [.1D65.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL K
1D5AA ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL K
1D5DE ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL K
1D612 ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
1D646 ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
1D67A ; [.1D65.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL K
24C0 ; [.1D65.0020.000C] # CIRCLED LATIN CAPITAL LETTER K
1F15A ; [.1D65.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER K
1D4F ; [.1D65.0020.0014] # MODIFIER LETTER SMALL K
2096 ; [.1D65.0020.0015] # LATIN SUBSCRIPT SMALL LETTER K
1D37 ; [.1D65.0020.001D] # MODIFIER LETTER CAPITAL K
1F13A ; [.1D65.0020.001D] # SQUARED LATIN CAPITAL LETTER K
1F17A ; [.1D65.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER K
1E31 ; [.1D65.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER K WITH ACUTE
1E30 ; [.1D65.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER K WITH ACUTE
01E9 ; [.1D65.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER K WITH CARON
01E8 ; [.1D65.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER K WITH CARON
0137 ; [.1D65.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER K WITH CEDILLA
0136 ; [.1D65.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER K WITH CEDILLA
A7A3 ; [.1D65.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER K WITH OBLIQUE STROKE
A7A2 ; [.1D65.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
1E33 ; [.1D65.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER K WITH DOT BELOW
1E32 ; [.1D65.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER K WITH DOT BELOW
1E35 ; [.1D65.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER K WITH LINE BELOW
1E34 ; [.1D65.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER K WITH LINE BELOW
3384 ; [.1D65.0020.001C][.1C47.0020.001D] # SQUARE KA
3385 ; [.1D65.0020.001D][.1C60.0020.001D] # SQUARE KB
3389 ; [.1D65.0020.001C][.1C7A.0020.001C][.1C47.0020.001C][.1D77.0020.001C] # SQUARE KCAL
338F ; [.1D65.0020.001C][.1CF4.0020.001C] # SQUARE KG
3391 ; [.1D65.0020.001C][.1D18.0020.001D][.1F21.0020.001C] # SQUARE KHZ
33CD ; [.1D65.0020.001D][.1D65.0020.001D] # SQUARE KK
3398 ; [.1D65.0020.001C][.1D77.0020.001C] # SQUARE KL
339E ; [.1D65.0020.001C][.1DAA.0020.001C] # SQUARE KM
33CE ; [.1D65.0020.001D][.1DAA.0020.001D] # SQUARE KM CAPITAL
33A2 ; [.1D65.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE KM SQUARED
33A6 ; [.1D65.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE KM CUBED
33AA ; [.1D65.0020.001C][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE KPA
33CF ; [.1D65.0020.001C][.1E95.0020.001C] # SQUARE KT
33B8 ; [.1D65.0020.001C][.1EE3.0020.001D] # SQUARE KV
33BE ; [.1D65.0020.001C][.1EF5.0020.001D] # SQUARE KW
33C0 ; [.1D65.0020.001C][.1FE1.0020.001D] # SQUARE K OHM
1D0B ; [.1D69.0020.0002] # LATIN LETTER SMALL CAPITAL K
1D84 ; [.1D6A.0020.0002] # LATIN SMALL LETTER K WITH PALATAL HOOK
0199 ; [.1D6B.0020.0002] # LATIN SMALL LETTER K WITH HOOK
0198 ; [.1D6B.0020.0008] # LATIN CAPITAL LETTER K WITH HOOK
2C6A ; [.1D6F.0020.0002] # LATIN SMALL LETTER K WITH DESCENDER
2C69 ; [.1D6F.0020.0008] # LATIN CAPITAL LETTER K WITH DESCENDER
A741 ; [.1D70.0020.0002] # LATIN SMALL LETTER K WITH STROKE
A740 ; [.1D70.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE
A743 ; [.1D71.0020.0002] # LATIN SMALL LETTER K WITH DIAGONAL STROKE
A742 ; [.1D71.0020.0008] # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
A745 ; [.1D72.0020.0002] # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
A744 ; [.1D72.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
029E ; [.1D73.0020.0002] # LATIN SMALL LETTER TURNED K
A7B0 ; [.1D73.0020.0008] # LATIN CAPITAL LETTER TURNED K
006C ; [.1D77.0020.0002] # LATIN SMALL LETTER L
FF4C ; [.1D77.0020.0003] # FULLWIDTH LATIN SMALL LETTER L
1DDD ; [.1D77.0020.0004] # COMBINING LATIN SMALL LETTER L
217C ; [.1D77.0020.0004] # SMALL ROMAN NUMERAL FIFTY
24A7 ; [*0317.0020.0004][.1D77.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER L
2113 ; [.1D77.0020.0005] # SCRIPT SMALL L
1D425 ; [.1D77.0020.0005] # MATHEMATICAL BOLD SMALL L
1D459 ; [.1D77.0020.0005] # MATHEMATICAL ITALIC SMALL L
1D48D ; [.1D77.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL L
1D4C1 ; [.1D77.0020.0005] # MATHEMATICAL SCRIPT SMALL L
1D4F5 ; [.1D77.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL L
1D529 ; [.1D77.0020.0005] # MATHEMATICAL FRAKTUR SMALL L
1D55D ; [.1D77.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL L
1D591 ; [.1D77.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL L
1D5C5 ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF SMALL L
1D5F9 ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL L
1D62D ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL L
1D661 ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
1D695 ; [.1D77.0020.0005] # MATHEMATICAL MONOSPACE SMALL L
24DB ; [.1D77.0020.0006] # CIRCLED LATIN SMALL LETTER L
004C ; [.1D77.0020.0008] # LATIN CAPITAL LETTER L
FF2C ; [.1D77.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER L
216C ; [.1D77.0020.000A] # ROMAN NUMERAL FIFTY
1F11B ; [*0317.0020.0004][.1D77.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER L
2112 ; [.1D77.0020.000B] # SCRIPT CAPITAL L
1D40B ; [.1D77.0020.000B] # MATHEMATICAL BOLD CAPITAL L
1D43F ; [.1D77.0020.000B] # MATHEMATICAL ITALIC CAPITAL L
1D473 ; [.1D77.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL L
1D4DB ; [.1D77.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL L
1D50F ; [.1D77.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL L
1D543 ; [.1D77.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL L
1D577 ; [.1D77.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL L
1D5AB ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL L
1D5DF ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL L
1D613 ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
1D647 ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
1D67B ; [.1D77.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL L
24C1 ; [.1D77.0020.000C] # CIRCLED LATIN CAPITAL LETTER L
1F15B ; [.1D77.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER L
02E1 ; [.1D77.0020.0014] # MODIFIER LETTER SMALL L
2097 ; [.1D77.0020.0015] # LATIN SUBSCRIPT SMALL LETTER L
1D38 ; [.1D77.0020.001D] # MODIFIER LETTER CAPITAL L
1F13B ; [.1D77.0020.001D] # SQUARED LATIN CAPITAL LETTER L
1F17B ; [.1D77.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER L
013A ; [.1D77.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER L WITH ACUTE
0139 ; [.1D77.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER L WITH ACUTE
013E ; [.1D77.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER L WITH CARON
013D ; [.1D77.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER L WITH CARON
013C ; [.1D77.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER L WITH CEDILLA
013B ; [.1D77.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER L WITH CEDILLA
0142 ; [.1D77.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER L WITH STROKE
0141 ; [.1D77.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER L WITH STROKE
1E37 ; [.1D77.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER L WITH DOT BELOW
1E36 ; [.1D77.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW
1E39 ; [.1D77.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
1E38 ; [.1D77.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
1E3D ; [.1D77.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
1E3C ; [.1D77.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
1E3B ; [.1D77.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER L WITH LINE BELOW
1E3A ; [.1D77.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER L WITH LINE BELOW
0140 ; [.1D77.0020.0002][.0000.0110.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT
006C 00B7 ; [.1D77.0020.0002][.0000.0110.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT
006C 0387 ; [.1D77.0020.0002][.0000.0110.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT
013F ; [.1D77.0020.0008][.0000.0110.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT
004C 00B7 ; [.1D77.0020.0008][.0000.0110.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT
004C 0387 ; [.1D77.0020.0008][.0000.0110.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT
01C9 ; [.1D77.0020.0004][.1D4C.0020.0004] # LATIN SMALL LETTER LJ
01C8 ; [.1D77.0020.000A][.1D4C.0020.0004] # LATIN CAPITAL LETTER L WITH SMALL LETTER J
01C7 ; [.1D77.0020.000A][.1D4C.0020.000A] # LATIN CAPITAL LETTER LJ
1EFB ; [.1D77.0020.0004][.1D77.0020.0004] # LATIN SMALL LETTER MIDDLE-WELSH LL
1EFA ; [.1D77.0020.000A][.1D77.0020.000A] # LATIN CAPITAL LETTER MIDDLE-WELSH LL
33D0 ; [.1D77.0020.001C][.1DAA.0020.001C] # SQUARE LM
33D1 ; [.1D77.0020.001C][.1DB9.0020.001C] # SQUARE LN
33D2 ; [.1D77.0020.001C][.1DDD.0020.001C][.1CF4.0020.001C] # SQUARE LOG
1F1A9 ; [.1D77.0020.001D][.1DDD.0020.001C][.1E71.0020.001C][.1E71.0020.001C][.1D77.0020.001C][.1CAA.0020.001C][.1E71.0020.001C][.1E71.0020.001C] # SQUARED LOSSLESS
02AA ; [.1D77.0020.0004][.1E71.0020.0004] # LATIN SMALL LETTER LS DIGRAPH
32CF ; [.1D77.0020.001D][.1E95.0020.001D][.1C8F.0020.001D] # LIMITED LIABILITY SIGN
33D3 ; [.1D77.0020.001C][.1EFF.0020.001C] # SQUARE LX
02AB ; [.1D77.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER LZ DIGRAPH
029F ; [.1D7B.0020.0002] # LATIN LETTER SMALL CAPITAL L
1DDE ; [.1D7B.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL L
1DAB ; [.1D7B.0020.0014] # MODIFIER LETTER SMALL CAPITAL L
A747 ; [.1D7F.0020.0002] # LATIN SMALL LETTER BROKEN L
A746 ; [.1D7F.0020.0008] # LATIN CAPITAL LETTER BROKEN L
1D0C ; [.1D80.0020.0002] # LATIN LETTER SMALL CAPITAL L WITH STROKE
A749 ; [.1D81.0020.0002] # LATIN SMALL LETTER L WITH HIGH STROKE
A748 ; [.1D81.0020.0008] # LATIN CAPITAL LETTER L WITH HIGH STROKE
019A ; [.1D82.0020.0002] # LATIN SMALL LETTER L WITH BAR
023D ; [.1D82.0020.0008] # LATIN CAPITAL LETTER L WITH BAR
2C61 ; [.1D86.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE BAR
2C60 ; [.1D86.0020.0008] # LATIN CAPITAL LETTER L WITH DOUBLE BAR
026B ; [.1D87.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE TILDE
2C62 ; [.1D87.0020.0008] # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
AB5E ; [.1D87.0020.0014] # MODIFIER LETTER SMALL L WITH MIDDLE TILDE
AB38 ; [.1D8B.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
1DEC ; [.1D8B.0020.0004] # COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
AB39 ; [.1D8C.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE RING
026C ; [.1D8D.0020.0002] # LATIN SMALL LETTER L WITH BELT
A7AD ; [.1D8D.0020.0008] # LATIN CAPITAL LETTER L WITH BELT
AB37 ; [.1D91.0020.0002] # LATIN SMALL LETTER L WITH INVERTED LAZY S
AB5D ; [.1D91.0020.0014] # MODIFIER LETTER SMALL L WITH INVERTED LAZY S
1D85 ; [.1D92.0020.0002] # LATIN SMALL LETTER L WITH PALATAL HOOK
1DAA ; [.1D92.0020.0014] # MODIFIER LETTER SMALL L WITH PALATAL HOOK
026D ; [.1D93.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK
1DA9 ; [.1D93.0020.0014] # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
A78E ; [.1D97.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
0234 ; [.1D98.0020.0002] # LATIN SMALL LETTER L WITH CURL
A772 ; [.1D9C.0020.0002] # LATIN SMALL LETTER LUM
026E ; [.1D9D.0020.0002] # LATIN SMALL LETTER LEZH
A781 ; [.1DA1.0020.0002] # LATIN SMALL LETTER TURNED L
A780 ; [.1DA1.0020.0008] # LATIN CAPITAL LETTER TURNED L
019B ; [.1DA2.0020.0002] # LATIN SMALL LETTER LAMBDA WITH STROKE
028E ; [.1DA6.0020.0002] # LATIN SMALL LETTER TURNED Y
006D ; [.1DAA.0020.0002] # LATIN SMALL LETTER M
FF4D ; [.1DAA.0020.0003] # FULLWIDTH LATIN SMALL LETTER M
036B ; [.1DAA.0020.0004] # COMBINING LATIN SMALL LETTER M
217F ; [.1DAA.0020.0004] # SMALL ROMAN NUMERAL ONE THOUSAND
24A8 ; [*0317.0020.0004][.1DAA.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER M
1D426 ; [.1DAA.0020.0005] # MATHEMATICAL BOLD SMALL M
1D45A ; [.1DAA.0020.0005] # MATHEMATICAL ITALIC SMALL M
1D48E ; [.1DAA.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL M
1D4C2 ; [.1DAA.0020.0005] # MATHEMATICAL SCRIPT SMALL M
1D4F6 ; [.1DAA.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL M
1D52A ; [.1DAA.0020.0005] # MATHEMATICAL FRAKTUR SMALL M
1D55E ; [.1DAA.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL M
1D592 ; [.1DAA.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL M
1D5C6 ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF SMALL M
1D5FA ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL M
1D62E ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL M
1D662 ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
1D696 ; [.1DAA.0020.0005] # MATHEMATICAL MONOSPACE SMALL M
24DC ; [.1DAA.0020.0006] # CIRCLED LATIN SMALL LETTER M
004D ; [.1DAA.0020.0008] # LATIN CAPITAL LETTER M
FF2D ; [.1DAA.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER M
216F ; [.1DAA.0020.000A] # ROMAN NUMERAL ONE THOUSAND
1F11C ; [*0317.0020.0004][.1DAA.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER M
2133 ; [.1DAA.0020.000B] # SCRIPT CAPITAL M
1D40C ; [.1DAA.0020.000B] # MATHEMATICAL BOLD CAPITAL M
1D440 ; [.1DAA.0020.000B] # MATHEMATICAL ITALIC CAPITAL M
1D474 ; [.1DAA.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL M
1D4DC ; [.1DAA.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL M
1D510 ; [.1DAA.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL M
1D544 ; [.1DAA.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL M
1D578 ; [.1DAA.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL M
1D5AC ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL M
1D5E0 ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL M
1D614 ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
1D648 ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
1D67C ; [.1DAA.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL M
24C2 ; [.1DAA.0020.000C] # CIRCLED LATIN CAPITAL LETTER M
1F15C ; [.1DAA.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER M
1D50 ; [.1DAA.0020.0014] # MODIFIER LETTER SMALL M
2098 ; [.1DAA.0020.0015] # LATIN SUBSCRIPT SMALL LETTER M
1D39 ; [.1DAA.0020.001D] # MODIFIER LETTER CAPITAL M
1F13C ; [.1DAA.0020.001D] # SQUARED LATIN CAPITAL LETTER M
1F17C ; [.1DAA.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER M
1E3F ; [.1DAA.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER M WITH ACUTE
1E3E ; [.1DAA.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER M WITH ACUTE
1E41 ; [.1DAA.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER M WITH DOT ABOVE
1E40 ; [.1DAA.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER M WITH DOT ABOVE
1E43 ; [.1DAA.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER M WITH DOT BELOW
1E42 ; [.1DAA.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER M WITH DOT BELOW
33A1 ; [.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE M SQUARED
33A5 ; [.1DAA.0020.001C][.1C40.0020.001C] # SQUARE M CUBED
3383 ; [.1DAA.0020.001C][.1C47.0020.001D] # SQUARE MA
33D4 ; [.1DAA.0020.001C][.1C60.0020.001C] # SQUARE MB SMALL
3386 ; [.1DAA.0020.001D][.1C60.0020.001D] # SQUARE MB
1F16A ; [.1DAA.0020.0014][.1C7A.0020.0014] # RAISED MC SIGN
1F16B ; [.1DAA.0020.0014][.1C8F.0020.0014] # RAISED MD SIGN
338E ; [.1DAA.0020.001C][.1CF4.0020.001C] # SQUARE MG
3392 ; [.1DAA.0020.001D][.1D18.0020.001D][.1F21.0020.001C] # SQUARE MHZ
33D5 ; [.1DAA.0020.001C][.1D32.0020.001C][.1D77.0020.001C] # SQUARE MIL
3396 ; [.1DAA.0020.001C][.1D77.0020.001C] # SQUARE ML
339C ; [.1DAA.0020.001C][.1DAA.0020.001C] # SQUARE MM
339F ; [.1DAA.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE MM SQUARED
33A3 ; [.1DAA.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE MM CUBED
33D6 ; [.1DAA.0020.001C][.1DDD.0020.001C][.1D77.0020.001C] # SQUARE MOL
33AB ; [.1DAA.0020.001D][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE MPA
33A7 ; [.1DAA.0020.001C][*0625.0020.001C][.1E71.0020.001C] # SQUARE M OVER S
33B3 ; [.1DAA.0020.001C][.1E71.0020.001C] # SQUARE MS
33A8 ; [.1DAA.0020.001C][*0625.0020.001C][.1E71.0020.001C][.1C3F.0020.001C] # SQUARE M OVER S SQUARED
33B7 ; [.1DAA.0020.001C][.1EE3.0020.001D] # SQUARE MV
33B9 ; [.1DAA.0020.001D][.1EE3.0020.001D] # SQUARE MV MEGA
1F14B ; [.1DAA.0020.001D][.1EE3.0020.001D] # SQUARED MV
33BD ; [.1DAA.0020.001C][.1EF5.0020.001D] # SQUARE MW
33BF ; [.1DAA.0020.001D][.1EF5.0020.001D] # SQUARE MW MEGA
33C1 ; [.1DAA.0020.001D][.1FE1.0020.001D] # SQUARE M OHM
1D0D ; [.1DAE.0020.0002] # LATIN LETTER SMALL CAPITAL M
1DDF ; [.1DAE.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL M
1D6F ; [.1DAF.0020.0002] # LATIN SMALL LETTER M WITH MIDDLE TILDE
1D86 ; [.1DB0.0020.0002] # LATIN SMALL LETTER M WITH PALATAL HOOK
0271 ; [.1DB1.0020.0002] # LATIN SMALL LETTER M WITH HOOK
2C6E ; [.1DB1.0020.0008] # LATIN CAPITAL LETTER M WITH HOOK
1DAC ; [.1DB1.0020.0014] # MODIFIER LETTER SMALL M WITH HOOK
AB3A ; [.1DB5.0020.0002] # LATIN SMALL LETTER M WITH CROSSED-TAIL
A7FD ; [.1DB6.0020.0002] # LATIN EPIGRAPHIC LETTER INVERTED M
A7FF ; [.1DB7.0020.0002] # LATIN EPIGRAPHIC LETTER ARCHAIC M
A773 ; [.1DB8.0020.0002] # LATIN SMALL LETTER MUM
006E ; [.1DB9.0020.0002] # LATIN SMALL LETTER N
FF4E ; [.1DB9.0020.0003] # FULLWIDTH LATIN SMALL LETTER N
1DE0 ; [.1DB9.0020.0004] # COMBINING LATIN SMALL LETTER N
24A9 ; [*0317.0020.0004][.1DB9.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER N
1D427 ; [.1DB9.0020.0005] # MATHEMATICAL BOLD SMALL N
1D45B ; [.1DB9.0020.0005] # MATHEMATICAL ITALIC SMALL N
1D48F ; [.1DB9.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL N
1D4C3 ; [.1DB9.0020.0005] # MATHEMATICAL SCRIPT SMALL N
1D4F7 ; [.1DB9.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL N
1D52B ; [.1DB9.0020.0005] # MATHEMATICAL FRAKTUR SMALL N
1D55F ; [.1DB9.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL N
1D593 ; [.1DB9.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL N
1D5C7 ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF SMALL N
1D5FB ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL N
1D62F ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL N
1D663 ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
1D697 ; [.1DB9.0020.0005] # MATHEMATICAL MONOSPACE SMALL N
24DD ; [.1DB9.0020.0006] # CIRCLED LATIN SMALL LETTER N
004E ; [.1DB9.0020.0008] # LATIN CAPITAL LETTER N
FF2E ; [.1DB9.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER N
1F11D ; [*0317.0020.0004][.1DB9.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER N
2115 ; [.1DB9.0020.000B] # DOUBLE-STRUCK CAPITAL N
1D40D ; [.1DB9.0020.000B] # MATHEMATICAL BOLD CAPITAL N
1D441 ; [.1DB9.0020.000B] # MATHEMATICAL ITALIC CAPITAL N
1D475 ; [.1DB9.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL N
1D4A9 ; [.1DB9.0020.000B] # MATHEMATICAL SCRIPT CAPITAL N
1D4DD ; [.1DB9.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL N
1D511 ; [.1DB9.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL N
1D579 ; [.1DB9.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL N
1D5AD ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL N
1D5E1 ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL N
1D615 ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
1D649 ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
1D67D ; [.1DB9.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL N
24C3 ; [.1DB9.0020.000C] # CIRCLED LATIN CAPITAL LETTER N
1F15D ; [.1DB9.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER N
207F ; [.1DB9.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER N
2099 ; [.1DB9.0020.0015] # LATIN SUBSCRIPT SMALL LETTER N
1D3A ; [.1DB9.0020.001D] # MODIFIER LETTER CAPITAL N
1F13D ; [.1DB9.0020.001D] # SQUARED LATIN CAPITAL LETTER N
1F17D ; [.1DB9.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER N
0144 ; [.1DB9.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER N WITH ACUTE
0143 ; [.1DB9.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER N WITH ACUTE
01F9 ; [.1DB9.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER N WITH GRAVE
01F8 ; [.1DB9.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER N WITH GRAVE
0148 ; [.1DB9.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER N WITH CARON
0147 ; [.1DB9.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER N WITH CARON
00F1 ; [.1DB9.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER N WITH TILDE
00D1 ; [.1DB9.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER N WITH TILDE
1E45 ; [.1DB9.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER N WITH DOT ABOVE
1E44 ; [.1DB9.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER N WITH DOT ABOVE
0146 ; [.1DB9.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER N WITH CEDILLA
0145 ; [.1DB9.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER N WITH CEDILLA
A7A5 ; [.1DB9.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER N WITH OBLIQUE STROKE
A7A4 ; [.1DB9.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
1E47 ; [.1DB9.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER N WITH DOT BELOW
1E46 ; [.1DB9.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER N WITH DOT BELOW
1E4B ; [.1DB9.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
1E4A ; [.1DB9.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
1E49 ; [.1DB9.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER N WITH LINE BELOW
1E48 ; [.1DB9.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER N WITH LINE BELOW
3381 ; [.1DB9.0020.001C][.1C47.0020.001D] # SQUARE NA
1F195 ; [.1DB9.0020.001D][.1CAA.0020.001D][.1EF5.0020.001D] # SQUARED NEW
338B ; [.1DB9.0020.001C][.1CE5.0020.001D] # SQUARE NF
1F196 ; [.1DB9.0020.001D][.1CF4.0020.001D] # SQUARED NG
01CC ; [.1DB9.0020.0004][.1D4C.0020.0004] # LATIN SMALL LETTER NJ
01CB ; [.1DB9.0020.000A][.1D4C.0020.0004] # LATIN CAPITAL LETTER N WITH SMALL LETTER J
01CA ; [.1DB9.0020.000A][.1D4C.0020.000A] # LATIN CAPITAL LETTER NJ
339A ; [.1DB9.0020.001C][.1DAA.0020.001C] # SQUARE NM
2116 ; [.1DB9.0020.000A][.1DDD.0020.0004] # NUMERO SIGN
33B1 ; [.1DB9.0020.001C][.1E71.0020.001C] # SQUARE NS
33B5 ; [.1DB9.0020.001C][.1EE3.0020.001D] # SQUARE NV
33BB ; [.1DB9.0020.001C][.1EF5.0020.001D] # SQUARE NW
0274 ; [.1DBD.0020.0002] # LATIN LETTER SMALL CAPITAL N
1DE1 ; [.1DBD.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL N
1DB0 ; [.1DBD.0020.0014] # MODIFIER LETTER SMALL CAPITAL N
1D3B ; [.1DC1.0020.0002] # MODIFIER LETTER CAPITAL REVERSED N
1D0E ; [.1DC2.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED N
1D70 ; [.1DC3.0020.0002] # LATIN SMALL LETTER N WITH MIDDLE TILDE
0272 ; [.1DC4.0020.0002] # LATIN SMALL LETTER N WITH LEFT HOOK
019D ; [.1DC4.0020.0008] # LATIN CAPITAL LETTER N WITH LEFT HOOK
1DAE ; [.1DC4.0020.0014] # MODIFIER LETTER SMALL N WITH LEFT HOOK
019E ; [.1DC8.0020.0002] # LATIN SMALL LETTER N WITH LONG RIGHT LEG
0220 ; [.1DC8.0020.0008] # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
A791 ; [.1DCC.0020.0002] # LATIN SMALL LETTER N WITH DESCENDER
A790 ; [.1DCC.0020.0008] # LATIN CAPITAL LETTER N WITH DESCENDER
1D87 ; [.1DCD.0020.0002] # LATIN SMALL LETTER N WITH PALATAL HOOK
0273 ; [.1DCE.0020.0002] # LATIN SMALL LETTER N WITH RETROFLEX HOOK
1DAF ; [.1DCE.0020.0014] # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
0235 ; [.1DD2.0020.0002] # LATIN SMALL LETTER N WITH CURL
AB3B ; [.1DD6.0020.0002] # LATIN SMALL LETTER N WITH CROSSED-TAIL
A774 ; [.1DD7.0020.0002] # LATIN SMALL LETTER NUM
014B ; [.1DD8.0020.0002] # LATIN SMALL LETTER ENG
014A ; [.1DD8.0020.0008] # LATIN CAPITAL LETTER ENG
1D51 ; [.1DD8.0020.0014] # MODIFIER LETTER SMALL ENG
AB3C ; [.1DDC.0020.0002] # LATIN SMALL LETTER ENG WITH CROSSED-TAIL
006F ; [.1DDD.0020.0002] # LATIN SMALL LETTER O
FF4F ; [.1DDD.0020.0003] # FULLWIDTH LATIN SMALL LETTER O
0366 ; [.1DDD.0020.0004] # COMBINING LATIN SMALL LETTER O
24AA ; [*0317.0020.0004][.1DDD.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER O
2134 ; [.1DDD.0020.0005] # SCRIPT SMALL O
1D428 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD SMALL O
1D45C ; [.1DDD.0020.0005] # MATHEMATICAL ITALIC SMALL O
1D490 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL O
1D4F8 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL O
1D52C ; [.1DDD.0020.0005] # MATHEMATICAL FRAKTUR SMALL O
1D560 ; [.1DDD.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL O
1D594 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL O
1D5C8 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF SMALL O
1D5FC ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL O
1D630 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL O
1D664 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
1D698 ; [.1DDD.0020.0005] # MATHEMATICAL MONOSPACE SMALL O
24DE ; [.1DDD.0020.0006] # CIRCLED LATIN SMALL LETTER O
004F ; [.1DDD.0020.0008] # LATIN CAPITAL LETTER O
FF2F ; [.1DDD.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER O
1F11E ; [*0317.0020.0004][.1DDD.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER O
1D40E ; [.1DDD.0020.000B] # MATHEMATICAL BOLD CAPITAL O
1D442 ; [.1DDD.0020.000B] # MATHEMATICAL ITALIC CAPITAL O
1D476 ; [.1DDD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL O
1D4AA ; [.1DDD.0020.000B] # MATHEMATICAL SCRIPT CAPITAL O
1D4DE ; [.1DDD.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL O
1D512 ; [.1DDD.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL O
1D546 ; [.1DDD.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL O
1D57A ; [.1DDD.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL O
1D5AE ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL O
1D5E2 ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL O
1D616 ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
1D64A ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
1D67E ; [.1DDD.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL O
24C4 ; [.1DDD.0020.000C] # CIRCLED LATIN CAPITAL LETTER O
1F15E ; [.1DDD.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER O
00BA ; [.1DDD.0020.0014] # MASCULINE ORDINAL INDICATOR
1D52 ; [.1DDD.0020.0014] # MODIFIER LETTER SMALL O
2092 ; [.1DDD.0020.0015] # LATIN SUBSCRIPT SMALL LETTER O
1D3C ; [.1DDD.0020.001D] # MODIFIER LETTER CAPITAL O
1F13E ; [.1DDD.0020.001D] # SQUARED LATIN CAPITAL LETTER O
1F17E ; [.1DDD.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER O
00F3 ; [.1DDD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH ACUTE
00D3 ; [.1DDD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH ACUTE
00F2 ; [.1DDD.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH GRAVE
00D2 ; [.1DDD.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH GRAVE
014F ; [.1DDD.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER O WITH BREVE
014E ; [.1DDD.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER O WITH BREVE
00F4 ; [.1DDD.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
00D4 ; [.1DDD.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
1ED1 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED0 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
1ED3 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED2 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
1ED7 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
1ED6 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
1ED5 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
1ED4 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
01D2 ; [.1DDD.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER O WITH CARON
01D1 ; [.1DDD.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER O WITH CARON
00F6 ; [.1DDD.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH DIAERESIS
1DF3 ; [.1DDD.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER O WITH DIAERESIS
A79D ; [.1DDD.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK OE
00D6 ; [.1DDD.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS
A79C ; [.1DDD.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK OE
022B ; [.1DDD.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
022A ; [.1DDD.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
0151 ; [.1DDD.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
0150 ; [.1DDD.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
00F5 ; [.1DDD.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH TILDE
00D5 ; [.1DDD.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH TILDE
1E4D ; [.1DDD.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE
1E4C ; [.1DDD.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
1E4F ; [.1DDD.0020.0002][.0000.002D.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
1E4E ; [.1DDD.0020.0008][.0000.002D.0002][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
022D ; [.1DDD.0020.0002][.0000.002D.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON
022C ; [.1DDD.0020.0008][.0000.002D.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
022F ; [.1DDD.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER O WITH DOT ABOVE
022E ; [.1DDD.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE
0231 ; [.1DDD.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
0230 ; [.1DDD.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
00F8 ; [.1DDD.0020.0002][.0000.002F.0002] # LATIN SMALL LETTER O WITH STROKE
00D8 ; [.1DDD.0020.0008][.0000.002F.0002] # LATIN CAPITAL LETTER O WITH STROKE
01FF ; [.1DDD.0020.0002][.0000.002F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
01FE ; [.1DDD.0020.0008][.0000.002F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
01EB ; [.1DDD.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER O WITH OGONEK
01EA ; [.1DDD.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER O WITH OGONEK
01ED ; [.1DDD.0020.0002][.0000.0031.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH OGONEK AND MACRON
01EC ; [.1DDD.0020.0008][.0000.0031.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
014D ; [.1DDD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON
014C ; [.1DDD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON
1E53 ; [.1DDD.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH MACRON AND ACUTE
1E52 ; [.1DDD.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
1E51 ; [.1DDD.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH MACRON AND GRAVE
1E50 ; [.1DDD.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
1DED ; [.1DDD.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE
1ECF ; [.1DDD.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HOOK ABOVE
1ECE ; [.1DDD.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HOOK ABOVE
020D ; [.1DDD.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER O WITH DOUBLE GRAVE
020C ; [.1DDD.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
020F ; [.1DDD.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER O WITH INVERTED BREVE
020E ; [.1DDD.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER O WITH INVERTED BREVE
01A1 ; [.1DDD.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN
01A0 ; [.1DDD.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN
1EDB ; [.1DDD.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH HORN AND ACUTE
1EDA ; [.1DDD.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
1EDD ; [.1DDD.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE
1EDC ; [.1DDD.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
1EE1 ; [.1DDD.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE
1EE0 ; [.1DDD.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE
1EDF ; [.1DDD.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
1EDE ; [.1DDD.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
1EE3 ; [.1DDD.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
1EE2 ; [.1DDD.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
1ECD ; [.1DDD.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH DOT BELOW
1ECC ; [.1DDD.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH DOT BELOW
1ED9 ; [.1DDD.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
1ED8 ; [.1DDD.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
0153 ; [.1DDD.0020.0004][.0000.0110.0004][.1CAA.0020.0004] # LATIN SMALL LIGATURE OE
0152 ; [.1DDD.0020.000A][.0000.0110.0004][.1CAA.0020.000A] # LATIN CAPITAL LIGATURE OE
A7F9 ; [.1DDD.0020.0014][.0000.0110.0014][.1CAA.0020.0014] # MODIFIER LETTER SMALL LIGATURE OE
1F197 ; [.1DDD.0020.001D][.1D65.0020.001D] # SQUARED OK
A74F ; [.1DDD.0020.0004][.1DDD.0020.0004] # LATIN SMALL LETTER OO
A74E ; [.1DDD.0020.000A][.1DDD.0020.000A] # LATIN CAPITAL LETTER OO
3375 ; [.1DDD.0020.001C][.1EE3.0020.001D] # SQUARE OV
1D0F ; [.1DE1.0020.0002] # LATIN LETTER SMALL CAPITAL O
1D11 ; [.1DE2.0020.0002] # LATIN SMALL LETTER SIDEWAYS O
AB3D ; [.1DE3.0020.0002] # LATIN SMALL LETTER BLACKLETTER O
0276 ; [.1DE4.0020.0002] # LATIN LETTER SMALL CAPITAL OE
1D14 ; [.1DE8.0020.0002] # LATIN SMALL LETTER TURNED OE
AB41 ; [.1DE9.0020.0002] # LATIN SMALL LETTER TURNED OE WITH STROKE
AB42 ; [.1DEA.0020.0002] # LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE
AB40 ; [.1DEB.0020.0002] # LATIN SMALL LETTER INVERTED OE
AB43 ; [.1DEC.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O
AB44 ; [.1DED.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE
1D13 ; [.1DEE.0020.0002] # LATIN SMALL LETTER SIDEWAYS O WITH STROKE
AB3E ; [.1DEF.0020.0002] # LATIN SMALL LETTER BLACKLETTER O WITH STROKE
0254 ; [.1DF0.0020.0002] # LATIN SMALL LETTER OPEN O
0186 ; [.1DF0.0020.0008] # LATIN CAPITAL LETTER OPEN O
1D53 ; [.1DF0.0020.0014] # MODIFIER LETTER SMALL OPEN O
1D10 ; [.1DF4.0020.0002] # LATIN LETTER SMALL CAPITAL OPEN O
1D12 ; [.1DF5.0020.0002] # LATIN SMALL LETTER SIDEWAYS OPEN O
AB3F ; [.1DF6.0020.0002] # LATIN SMALL LETTER OPEN O WITH STROKE
1D97 ; [.1DF7.0020.0002] # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
AB62 ; [.1DF8.0020.0002] # LATIN SMALL LETTER OPEN OE
A74D ; [.1DF9.0020.0002] # LATIN SMALL LETTER O WITH LOOP
A74C ; [.1DF9.0020.0008] # LATIN CAPITAL LETTER O WITH LOOP
1D16 ; [.1DFA.0020.0002] # LATIN SMALL LETTER TOP HALF O
1D54 ; [.1DFA.0020.0014] # MODIFIER LETTER SMALL TOP HALF O
1D17 ; [.1DFB.0020.0002] # LATIN SMALL LETTER BOTTOM HALF O
1D55 ; [.1DFB.0020.0014] # MODIFIER LETTER SMALL BOTTOM HALF O
2C7A ; [.1DFC.0020.0002] # LATIN SMALL LETTER O WITH LOW RING INSIDE
0275 ; [.1DFD.0020.0002] # LATIN SMALL LETTER BARRED O
019F ; [.1DFD.0020.0008] # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
1DB1 ; [.1DFD.0020.0014] # MODIFIER LETTER SMALL BARRED O
A74B ; [.1E01.0020.0002] # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
A74A ; [.1E01.0020.0008] # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
0277 ; [.1E02.0020.0002] # LATIN SMALL LETTER CLOSED OMEGA
A7B7 ; [.1E06.0020.0002] # LATIN SMALL LETTER OMEGA
A7B6 ; [.1E06.0020.0008] # LATIN CAPITAL LETTER OMEGA
0223 ; [.1E07.0020.0002] # LATIN SMALL LETTER OU
0222 ; [.1E07.0020.0008] # LATIN CAPITAL LETTER OU
1D3D ; [.1E07.0020.001D] # MODIFIER LETTER CAPITAL OU
1D15 ; [.1E0B.0020.0002] # LATIN LETTER SMALL CAPITAL OU
0070 ; [.1E0C.0020.0002] # LATIN SMALL LETTER P
FF50 ; [.1E0C.0020.0003] # FULLWIDTH LATIN SMALL LETTER P
1DEE ; [.1E0C.0020.0004] # COMBINING LATIN SMALL LETTER P
24AB ; [*0317.0020.0004][.1E0C.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER P
1D429 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD SMALL P
1D45D ; [.1E0C.0020.0005] # MATHEMATICAL ITALIC SMALL P
1D491 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL P
1D4C5 ; [.1E0C.0020.0005] # MATHEMATICAL SCRIPT SMALL P
1D4F9 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL P
1D52D ; [.1E0C.0020.0005] # MATHEMATICAL FRAKTUR SMALL P
1D561 ; [.1E0C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL P
1D595 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL P
1D5C9 ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF SMALL P
1D5FD ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL P
1D631 ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL P
1D665 ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
1D699 ; [.1E0C.0020.0005] # MATHEMATICAL MONOSPACE SMALL P
24DF ; [.1E0C.0020.0006] # CIRCLED LATIN SMALL LETTER P
0050 ; [.1E0C.0020.0008] # LATIN CAPITAL LETTER P
FF30 ; [.1E0C.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER P
1F11F ; [*0317.0020.0004][.1E0C.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER P
2119 ; [.1E0C.0020.000B] # DOUBLE-STRUCK CAPITAL P
1D40F ; [.1E0C.0020.000B] # MATHEMATICAL BOLD CAPITAL P
1D443 ; [.1E0C.0020.000B] # MATHEMATICAL ITALIC CAPITAL P
1D477 ; [.1E0C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL P
1D4AB ; [.1E0C.0020.000B] # MATHEMATICAL SCRIPT CAPITAL P
1D4DF ; [.1E0C.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL P
1D513 ; [.1E0C.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL P
1D57B ; [.1E0C.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL P
1D5AF ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL P
1D5E3 ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL P
1D617 ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
1D64B ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
1D67F ; [.1E0C.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL P
24C5 ; [.1E0C.0020.000C] # CIRCLED LATIN CAPITAL LETTER P
1F15F ; [.1E0C.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER P
1D56 ; [.1E0C.0020.0014] # MODIFIER LETTER SMALL P
209A ; [.1E0C.0020.0015] # LATIN SUBSCRIPT SMALL LETTER P
1D3E ; [.1E0C.0020.001D] # MODIFIER LETTER CAPITAL P
1F13F ; [.1E0C.0020.001D] # SQUARED LATIN CAPITAL LETTER P
1F17F ; [.1E0C.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER P
1F18A ; [.1E0C.0020.001D] # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P
1E55 ; [.1E0C.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER P WITH ACUTE
1E54 ; [.1E0C.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER P WITH ACUTE
1E57 ; [.1E0C.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER P WITH DOT ABOVE
1E56 ; [.1E0C.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER P WITH DOT ABOVE
3380 ; [.1E0C.0020.001C][.1C47.0020.001D] # SQUARE PA AMPS
33A9 ; [.1E0C.0020.001D][.1C47.0020.001C] # SQUARE PA
1F18C ; [.1E0C.0020.001D][.1C47.0020.001D] # NEGATIVE SQUARED PA
3376 ; [.1E0C.0020.001C][.1C7A.0020.001C] # SQUARE PC
338A ; [.1E0C.0020.001C][.1CE5.0020.001D] # SQUARE PF
33D7 ; [.1E0C.0020.001D][.1D18.0020.001D] # SQUARE PH
33D8 ; [.1E0C.0020.001C][*0277.0020.001C][.1DAA.0020.001C][*0277.0020.001C] # SQUARE PM
33D9 ; [.1E0C.0020.001D][.1E0C.0020.001D][.1DAA.0020.001D] # SQUARE PPM
1F14E ; [.1E0C.0020.001D][.1E0C.0020.001D][.1EE3.0020.001D] # SQUARED PPV
33DA ; [.1E0C.0020.001D][.1E33.0020.001D] # SQUARE PR
33B0 ; [.1E0C.0020.001C][.1E71.0020.001C] # SQUARE PS
3250 ; [.1E0C.0020.001D][.1E95.0020.001D][.1CAA.0020.001D] # PARTNERSHIP SIGN
33B4 ; [.1E0C.0020.001C][.1EE3.0020.001D] # SQUARE PV
33BA ; [.1E0C.0020.001C][.1EF5.0020.001D] # SQUARE PW
1D18 ; [.1E10.0020.0002] # LATIN LETTER SMALL CAPITAL P
1D7D ; [.1E11.0020.0002] # LATIN SMALL LETTER P WITH STROKE
2C63 ; [.1E11.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE
A751 ; [.1E12.0020.0002] # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
A750 ; [.1E12.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
1D71 ; [.1E13.0020.0002] # LATIN SMALL LETTER P WITH MIDDLE TILDE
1D88 ; [.1E14.0020.0002] # LATIN SMALL LETTER P WITH PALATAL HOOK
01A5 ; [.1E15.0020.0002] # LATIN SMALL LETTER P WITH HOOK
01A4 ; [.1E15.0020.0008] # LATIN CAPITAL LETTER P WITH HOOK
A753 ; [.1E19.0020.0002] # LATIN SMALL LETTER P WITH FLOURISH
A752 ; [.1E19.0020.0008] # LATIN CAPITAL LETTER P WITH FLOURISH
A755 ; [.1E1A.0020.0002] # LATIN SMALL LETTER P WITH SQUIRREL TAIL
A754 ; [.1E1A.0020.0008] # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
A7FC ; [.1E1B.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED P
0278 ; [.1E1C.0020.0002] # LATIN SMALL LETTER PHI
1DB2 ; [.1E1C.0020.0014] # MODIFIER LETTER SMALL PHI
2C77 ; [.1E20.0020.0002] # LATIN SMALL LETTER TAILLESS PHI
0071 ; [.1E21.0020.0002] # LATIN SMALL LETTER Q
FF51 ; [.1E21.0020.0003] # FULLWIDTH LATIN SMALL LETTER Q
24AC ; [*0317.0020.0004][.1E21.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Q
1D42A ; [.1E21.0020.0005] # MATHEMATICAL BOLD SMALL Q
1D45E ; [.1E21.0020.0005] # MATHEMATICAL ITALIC SMALL Q
1D492 ; [.1E21.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Q
1D4C6 ; [.1E21.0020.0005] # MATHEMATICAL SCRIPT SMALL Q
1D4FA ; [.1E21.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Q
1D52E ; [.1E21.0020.0005] # MATHEMATICAL FRAKTUR SMALL Q
1D562 ; [.1E21.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Q
1D596 ; [.1E21.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Q
1D5CA ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Q
1D5FE ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Q
1D632 ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Q
1D666 ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
1D69A ; [.1E21.0020.0005] # MATHEMATICAL MONOSPACE SMALL Q
24E0 ; [.1E21.0020.0006] # CIRCLED LATIN SMALL LETTER Q
0051 ; [.1E21.0020.0008] # LATIN CAPITAL LETTER Q
FF31 ; [.1E21.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Q
1F120 ; [*0317.0020.0004][.1E21.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Q
211A ; [.1E21.0020.000B] # DOUBLE-STRUCK CAPITAL Q
1D410 ; [.1E21.0020.000B] # MATHEMATICAL BOLD CAPITAL Q
1D444 ; [.1E21.0020.000B] # MATHEMATICAL ITALIC CAPITAL Q
1D478 ; [.1E21.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Q
1D4AC ; [.1E21.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Q
1D4E0 ; [.1E21.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Q
1D514 ; [.1E21.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Q
1D57C ; [.1E21.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Q
1D5B0 ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Q
1D5E4 ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
1D618 ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
1D64C ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
1D680 ; [.1E21.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Q
24C6 ; [.1E21.0020.000C] # CIRCLED LATIN CAPITAL LETTER Q
1F160 ; [.1E21.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Q
1F140 ; [.1E21.0020.001D] # SQUARED LATIN CAPITAL LETTER Q
1F180 ; [.1E21.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Q
0239 ; [.1E21.0020.0004][.1E0C.0020.0004] # LATIN SMALL LETTER QP DIGRAPH
A757 ; [.1E25.0020.0002] # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
A756 ; [.1E25.0020.0008] # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
A759 ; [.1E26.0020.0002] # LATIN SMALL LETTER Q WITH DIAGONAL STROKE
A758 ; [.1E26.0020.0008] # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
02A0 ; [.1E27.0020.0002] # LATIN SMALL LETTER Q WITH HOOK
024B ; [.1E2B.0020.0002] # LATIN SMALL LETTER Q WITH HOOK TAIL
024A ; [.1E2B.0020.0008] # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
0138 ; [.1E2F.0020.0002] # LATIN SMALL LETTER KRA
0072 ; [.1E33.0020.0002] # LATIN SMALL LETTER R
FF52 ; [.1E33.0020.0003] # FULLWIDTH LATIN SMALL LETTER R
036C ; [.1E33.0020.0004] # COMBINING LATIN SMALL LETTER R
1DCA ; [.1E33.0020.0004] # COMBINING LATIN SMALL LETTER R BELOW
24AD ; [*0317.0020.0004][.1E33.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER R
1D42B ; [.1E33.0020.0005] # MATHEMATICAL BOLD SMALL R
1D45F ; [.1E33.0020.0005] # MATHEMATICAL ITALIC SMALL R
1D493 ; [.1E33.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL R
1D4C7 ; [.1E33.0020.0005] # MATHEMATICAL SCRIPT SMALL R
1D4FB ; [.1E33.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL R
1D52F ; [.1E33.0020.0005] # MATHEMATICAL FRAKTUR SMALL R
1D563 ; [.1E33.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL R
1D597 ; [.1E33.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL R
1D5CB ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF SMALL R
1D5FF ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL R
1D633 ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL R
1D667 ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
1D69B ; [.1E33.0020.0005] # MATHEMATICAL MONOSPACE SMALL R
24E1 ; [.1E33.0020.0006] # CIRCLED LATIN SMALL LETTER R
0052 ; [.1E33.0020.0008] # LATIN CAPITAL LETTER R
FF32 ; [.1E33.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER R
1F121 ; [*0317.0020.0004][.1E33.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER R
211B ; [.1E33.0020.000B] # SCRIPT CAPITAL R
211C ; [.1E33.0020.000B] # BLACK-LETTER CAPITAL R
211D ; [.1E33.0020.000B] # DOUBLE-STRUCK CAPITAL R
1D411 ; [.1E33.0020.000B] # MATHEMATICAL BOLD CAPITAL R
1D445 ; [.1E33.0020.000B] # MATHEMATICAL ITALIC CAPITAL R
1D479 ; [.1E33.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL R
1D4E1 ; [.1E33.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL R
1D57D ; [.1E33.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL R
1D5B1 ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL R
1D5E5 ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL R
1D619 ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
1D64D ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
1D681 ; [.1E33.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL R
24C7 ; [.1E33.0020.000C] # CIRCLED LATIN CAPITAL LETTER R
1F12C ; [.1E33.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER R
1F161 ; [.1E33.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER R
02B3 ; [.1E33.0020.0014] # MODIFIER LETTER SMALL R
1D63 ; [.1E33.0020.0015] # LATIN SUBSCRIPT SMALL LETTER R
1D3F ; [.1E33.0020.001D] # MODIFIER LETTER CAPITAL R
1F141 ; [.1E33.0020.001D] # SQUARED LATIN CAPITAL LETTER R
1F181 ; [.1E33.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER R
0155 ; [.1E33.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER R WITH ACUTE
0154 ; [.1E33.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER R WITH ACUTE
0159 ; [.1E33.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER R WITH CARON
0158 ; [.1E33.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER R WITH CARON
1E59 ; [.1E33.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER R WITH DOT ABOVE
1E58 ; [.1E33.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER R WITH DOT ABOVE
0157 ; [.1E33.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER R WITH CEDILLA
0156 ; [.1E33.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER R WITH CEDILLA
A7A7 ; [.1E33.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER R WITH OBLIQUE STROKE
A7A6 ; [.1E33.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
0211 ; [.1E33.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER R WITH DOUBLE GRAVE
0210 ; [.1E33.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
0213 ; [.1E33.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER R WITH INVERTED BREVE
0212 ; [.1E33.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER R WITH INVERTED BREVE
1E5B ; [.1E33.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER R WITH DOT BELOW
1E5A ; [.1E33.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW
1E5D ; [.1E33.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
1E5C ; [.1E33.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
1E5F ; [.1E33.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER R WITH LINE BELOW
1E5E ; [.1E33.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER R WITH LINE BELOW
A783 ; [.1E33.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR R
A782 ; [.1E33.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR R
33AD ; [.1E33.0020.001C][.1C47.0020.001C][.1C8F.0020.001C] # SQUARE RAD
33AE ; [.1E33.0020.001C][.1C47.0020.001C][.1C8F.0020.001C][*0625.0020.001C][.1E71.0020.001C] # SQUARE RAD OVER S
33AF ; [.1E33.0020.001C][.1C47.0020.001C][.1C8F.0020.001C][*0625.0020.001C][.1E71.0020.001C][.1C3F.0020.001C] # SQUARE RAD OVER S SQUARED
20A8 ; [.1E33.0020.000A][.1E71.0020.0004] # RUPEE SIGN
AB45 ; [.1E37.0020.0002] # LATIN SMALL LETTER STIRRUP R
0280 ; [.1E38.0020.0002] # LATIN LETTER SMALL CAPITAL R
1DE2 ; [.1E38.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL R
01A6 ; [.1E38.0020.0008] # LATIN LETTER YR
AB46 ; [.1E3C.0020.0002] # LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG
A75B ; [.1E3D.0020.0002] # LATIN SMALL LETTER R ROTUNDA
1DE3 ; [.1E3D.0020.0004] # COMBINING LATIN SMALL LETTER R ROTUNDA
A75A ; [.1E3D.0020.0008] # LATIN CAPITAL LETTER R ROTUNDA
1D19 ; [.1E3E.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED R
024D ; [.1E3F.0020.0002] # LATIN SMALL LETTER R WITH STROKE
024C ; [.1E3F.0020.0008] # LATIN CAPITAL LETTER R WITH STROKE
1D72 ; [.1E43.0020.0002] # LATIN SMALL LETTER R WITH MIDDLE TILDE
0279 ; [.1E44.0020.0002] # LATIN SMALL LETTER TURNED R
02B4 ; [.1E44.0020.0014] # MODIFIER LETTER SMALL TURNED R
1D1A ; [.1E48.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED R
027A ; [.1E49.0020.0002] # LATIN SMALL LETTER TURNED R WITH LONG LEG
1D89 ; [.1E4D.0020.0002] # LATIN SMALL LETTER R WITH PALATAL HOOK
027B ; [.1E4E.0020.0002] # LATIN SMALL LETTER TURNED R WITH HOOK
02B5 ; [.1E4E.0020.0014] # MODIFIER LETTER SMALL TURNED R WITH HOOK
2C79 ; [.1E52.0020.0002] # LATIN SMALL LETTER TURNED R WITH TAIL
027C ; [.1E53.0020.0002] # LATIN SMALL LETTER R WITH LONG LEG
027D ; [.1E57.0020.0002] # LATIN SMALL LETTER R WITH TAIL
2C64 ; [.1E57.0020.0008] # LATIN CAPITAL LETTER R WITH TAIL
AB49 ; [.1E5B.0020.0002] # LATIN SMALL LETTER R WITH CROSSED-TAIL
027E ; [.1E5C.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK
1D73 ; [.1E60.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
027F ; [.1E61.0020.0002] # LATIN SMALL LETTER REVERSED R WITH FISHHOOK
AB47 ; [.1E65.0020.0002] # LATIN SMALL LETTER R WITHOUT HANDLE
AB48 ; [.1E66.0020.0002] # LATIN SMALL LETTER DOUBLE R
AB4A ; [.1E67.0020.0002] # LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL
AB4B ; [.1E68.0020.0002] # LATIN SMALL LETTER SCRIPT R
AB4C ; [.1E69.0020.0002] # LATIN SMALL LETTER SCRIPT R WITH RING
0281 ; [.1E6A.0020.0002] # LATIN LETTER SMALL CAPITAL INVERTED R
02B6 ; [.1E6A.0020.0014] # MODIFIER LETTER SMALL CAPITAL INVERTED R
A775 ; [.1E6E.0020.0002] # LATIN SMALL LETTER RUM
A776 ; [.1E6F.0020.0002] # LATIN LETTER SMALL CAPITAL RUM
A75D ; [.1E70.0020.0002] # LATIN SMALL LETTER RUM ROTUNDA
A75C ; [.1E70.0020.0008] # LATIN CAPITAL LETTER RUM ROTUNDA
0073 ; [.1E71.0020.0002] # LATIN SMALL LETTER S
FF53 ; [.1E71.0020.0003] # FULLWIDTH LATIN SMALL LETTER S
1DE4 ; [.1E71.0020.0004] # COMBINING LATIN SMALL LETTER S
24AE ; [*0317.0020.0004][.1E71.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER S
1D42C ; [.1E71.0020.0005] # MATHEMATICAL BOLD SMALL S
1D460 ; [.1E71.0020.0005] # MATHEMATICAL ITALIC SMALL S
1D494 ; [.1E71.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL S
1D4C8 ; [.1E71.0020.0005] # MATHEMATICAL SCRIPT SMALL S
1D4FC ; [.1E71.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL S
1D530 ; [.1E71.0020.0005] # MATHEMATICAL FRAKTUR SMALL S
1D564 ; [.1E71.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL S
1D598 ; [.1E71.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL S
1D5CC ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF SMALL S
1D600 ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL S
1D634 ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL S
1D668 ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
1D69C ; [.1E71.0020.0005] # MATHEMATICAL MONOSPACE SMALL S
24E2 ; [.1E71.0020.0006] # CIRCLED LATIN SMALL LETTER S
0053 ; [.1E71.0020.0008] # LATIN CAPITAL LETTER S
FF33 ; [.1E71.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER S
1F122 ; [*0317.0020.0004][.1E71.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER S
1F12A ; [*0379.0020.0004][.1E71.0020.000A][*037A.0020.0004] # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
1D412 ; [.1E71.0020.000B] # MATHEMATICAL BOLD CAPITAL S
1D446 ; [.1E71.0020.000B] # MATHEMATICAL ITALIC CAPITAL S
1D47A ; [.1E71.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL S
1D4AE ; [.1E71.0020.000B] # MATHEMATICAL SCRIPT CAPITAL S
1D4E2 ; [.1E71.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL S
1D516 ; [.1E71.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL S
1D54A ; [.1E71.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL S
1D57E ; [.1E71.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL S
1D5B2 ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL S
1D5E6 ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL S
1D61A ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
1D64E ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
1D682 ; [.1E71.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL S
24C8 ; [.1E71.0020.000C] # CIRCLED LATIN CAPITAL LETTER S
1F162 ; [.1E71.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER S
02E2 ; [.1E71.0020.0014] # MODIFIER LETTER SMALL S
209B ; [.1E71.0020.0015] # LATIN SUBSCRIPT SMALL LETTER S
1F142 ; [.1E71.0020.001D] # SQUARED LATIN CAPITAL LETTER S
1F182 ; [.1E71.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER S
015B ; [.1E71.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER S WITH ACUTE
015A ; [.1E71.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER S WITH ACUTE
1E65 ; [.1E71.0020.0002][.0000.0024.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
1E64 ; [.1E71.0020.0008][.0000.0024.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
015D ; [.1E71.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX
015C ; [.1E71.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
0161 ; [.1E71.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER S WITH CARON
0160 ; [.1E71.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER S WITH CARON
1E67 ; [.1E71.0020.0002][.0000.0028.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
1E66 ; [.1E71.0020.0008][.0000.0028.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
1E61 ; [.1E71.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT ABOVE
1E60 ; [.1E71.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT ABOVE
015F ; [.1E71.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER S WITH CEDILLA
015E ; [.1E71.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER S WITH CEDILLA
A7A9 ; [.1E71.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER S WITH OBLIQUE STROKE
A7A8 ; [.1E71.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
1E63 ; [.1E71.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER S WITH DOT BELOW
1E62 ; [.1E71.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW
1E69 ; [.1E71.0020.0002][.0000.0042.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
1E68 ; [.1E71.0020.0008][.0000.0042.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
0219 ; [.1E71.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER S WITH COMMA BELOW
0218 ; [.1E71.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER S WITH COMMA BELOW
017F ; [.1E71.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER LONG S
1DE5 ; [.1E71.0020.0004][.0000.0111.0004] # COMBINING LATIN SMALL LETTER LONG S
A785 ; [.1E71.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR S
A784 ; [.1E71.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR S
1E9B ; [.1E71.0020.0004][.0000.0111.0004][.0000.002E.0002] # LATIN SMALL LETTER LONG S WITH DOT ABOVE
1F18D ; [.1E71.0020.001D][.1C47.0020.001D] # NEGATIVE SQUARED SA
1F14C ; [.1E71.0020.001D][.1C8F.0020.001D] # SQUARED SD
1F1AA ; [.1E71.0020.001D][.1D18.0020.001D][.1EE3.0020.001D] # SQUARED SHV
2120 ; [.1E71.0020.0014][.1DAA.0020.0014] # SERVICE MARK
1F198 ; [.1E71.0020.001D][.1DDD.0020.001D][.1E71.0020.001D] # SQUARED SOS
33DB ; [.1E71.0020.001C][.1E33.0020.001C] # SQUARE SR
1F14D ; [.1E71.0020.001D][.1E71.0020.001D] # SQUARED SS
00DF ; [.1E71.0020.0004][.0000.0110.0004][.1E71.0020.0004] # LATIN SMALL LETTER SHARP S
1E9E ; [.1E71.0020.000A][.0000.0110.0004][.1E71.0020.000A] # LATIN CAPITAL LETTER SHARP S
FB06 ; [.1E71.0020.0004][.1E95.0020.0004] # LATIN SMALL LIGATURE ST
FB05 ; [.1E71.0020.0004][.0000.0111.0004][.1E95.0020.0004] # LATIN SMALL LIGATURE LONG S T
33DC ; [.1E71.0020.001D][.1EE3.0020.001C] # SQUARE SV
A731 ; [.1E75.0020.0002] # LATIN LETTER SMALL CAPITAL S
1D74 ; [.1E76.0020.0002] # LATIN SMALL LETTER S WITH MIDDLE TILDE
1D8A ; [.1E77.0020.0002] # LATIN SMALL LETTER S WITH PALATAL HOOK
0282 ; [.1E78.0020.0002] # LATIN SMALL LETTER S WITH HOOK
1DB3 ; [.1E78.0020.0014] # MODIFIER LETTER SMALL S WITH HOOK
023F ; [.1E7C.0020.0002] # LATIN SMALL LETTER S WITH SWASH TAIL
2C7E ; [.1E7C.0020.0008] # LATIN CAPITAL LETTER S WITH SWASH TAIL
1E9C ; [.1E80.0020.0002] # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE
1E9D ; [.1E81.0020.0002] # LATIN SMALL LETTER LONG S WITH HIGH STROKE
0283 ; [.1E82.0020.0002] # LATIN SMALL LETTER ESH
1DEF ; [.1E82.0020.0004] # COMBINING LATIN SMALL LETTER ESH
01A9 ; [.1E82.0020.0008] # LATIN CAPITAL LETTER ESH
1DB4 ; [.1E82.0020.0014] # MODIFIER LETTER SMALL ESH
AB4D ; [.1E86.0020.0002] # LATIN SMALL LETTER BASELINE ESH
1D8B ; [.1E87.0020.0002] # LATIN SMALL LETTER ESH WITH PALATAL HOOK
01AA ; [.1E88.0020.0002] # LATIN LETTER REVERSED ESH LOOP
0285 ; [.1E8C.0020.0002] # LATIN SMALL LETTER SQUAT REVERSED ESH
1D98 ; [.1E90.0020.0002] # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
0286 ; [.1E91.0020.0002] # LATIN SMALL LETTER ESH WITH CURL
0074 ; [.1E95.0020.0002] # LATIN SMALL LETTER T
FF54 ; [.1E95.0020.0003] # FULLWIDTH LATIN SMALL LETTER T
036D ; [.1E95.0020.0004] # COMBINING LATIN SMALL LETTER T
24AF ; [*0317.0020.0004][.1E95.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER T
1D42D ; [.1E95.0020.0005] # MATHEMATICAL BOLD SMALL T
1D461 ; [.1E95.0020.0005] # MATHEMATICAL ITALIC SMALL T
1D495 ; [.1E95.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL T
1D4C9 ; [.1E95.0020.0005] # MATHEMATICAL SCRIPT SMALL T
1D4FD ; [.1E95.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL T
1D531 ; [.1E95.0020.0005] # MATHEMATICAL FRAKTUR SMALL T
1D565 ; [.1E95.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL T
1D599 ; [.1E95.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL T
1D5CD ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF SMALL T
1D601 ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL T
1D635 ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL T
1D669 ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
1D69D ; [.1E95.0020.0005] # MATHEMATICAL MONOSPACE SMALL T
24E3 ; [.1E95.0020.0006] # CIRCLED LATIN SMALL LETTER T
0054 ; [.1E95.0020.0008] # LATIN CAPITAL LETTER T
FF34 ; [.1E95.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER T
1F123 ; [*0317.0020.0004][.1E95.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER T
1D413 ; [.1E95.0020.000B] # MATHEMATICAL BOLD CAPITAL T
1D447 ; [.1E95.0020.000B] # MATHEMATICAL ITALIC CAPITAL T
1D47B ; [.1E95.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL T
1D4AF ; [.1E95.0020.000B] # MATHEMATICAL SCRIPT CAPITAL T
1D4E3 ; [.1E95.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL T
1D517 ; [.1E95.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL T
1D54B ; [.1E95.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL T
1D57F ; [.1E95.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL T
1D5B3 ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL T
1D5E7 ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL T
1D61B ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
1D64F ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
1D683 ; [.1E95.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL T
24C9 ; [.1E95.0020.000C] # CIRCLED LATIN CAPITAL LETTER T
1F163 ; [.1E95.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER T
1D57 ; [.1E95.0020.0014] # MODIFIER LETTER SMALL T
209C ; [.1E95.0020.0015] # LATIN SUBSCRIPT SMALL LETTER T
1D40 ; [.1E95.0020.001D] # MODIFIER LETTER CAPITAL T
1F143 ; [.1E95.0020.001D] # SQUARED LATIN CAPITAL LETTER T
1F183 ; [.1E95.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER T
0165 ; [.1E95.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER T WITH CARON
0164 ; [.1E95.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER T WITH CARON
1E97 ; [.1E95.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER T WITH DIAERESIS
1E6B ; [.1E95.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER T WITH DOT ABOVE
1E6A ; [.1E95.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER T WITH DOT ABOVE
0163 ; [.1E95.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER T WITH CEDILLA
0162 ; [.1E95.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER T WITH CEDILLA
1E6D ; [.1E95.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER T WITH DOT BELOW
1E6C ; [.1E95.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER T WITH DOT BELOW
021B ; [.1E95.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER T WITH COMMA BELOW
021A ; [.1E95.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER T WITH COMMA BELOW
1E71 ; [.1E95.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
1E70 ; [.1E95.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
1E6F ; [.1E95.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER T WITH LINE BELOW
1E6E ; [.1E95.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER T WITH LINE BELOW
A787 ; [.1E95.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR T
A786 ; [.1E95.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR T
02A8 ; [.1E95.0020.0004][.1C89.0020.0004] # LATIN SMALL LETTER TC DIGRAPH WITH CURL
2121 ; [.1E95.0020.000A][.1CAA.0020.000A][.1D77.0020.000A] # TELEPHONE SIGN
1D7A ; [.1E95.0020.0004][.0000.0110.0004][.1D18.0020.0004] # LATIN SMALL LETTER TH WITH STRIKETHROUGH
3394 ; [.1E95.0020.001D][.1D18.0020.001D][.1F21.0020.001C] # SQUARE THZ
2122 ; [.1E95.0020.0014][.1DAA.0020.0014] # TRADE MARK SIGN
01BE ; [.1E95.0020.0004][.1E71.0020.0004] # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
02A6 ; [.1E95.0020.0004][.1E71.0020.0004] # LATIN SMALL LETTER TS DIGRAPH
02A7 ; [.1E95.0020.0004][.1E82.0020.0004] # LATIN SMALL LETTER TESH DIGRAPH
A729 ; [.1E95.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER TZ
A728 ; [.1E95.0020.000A][.1F21.0020.0004] # LATIN CAPITAL LETTER TZ
1D1B ; [.1E99.0020.0002] # LATIN LETTER SMALL CAPITAL T
0167 ; [.1E9A.0020.0002] # LATIN SMALL LETTER T WITH STROKE
0166 ; [.1E9A.0020.0008] # LATIN CAPITAL LETTER T WITH STROKE
2C66 ; [.1E9E.0020.0002] # LATIN SMALL LETTER T WITH DIAGONAL STROKE
023E ; [.1E9E.0020.0008] # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
1D75 ; [.1E9F.0020.0002] # LATIN SMALL LETTER T WITH MIDDLE TILDE
01AB ; [.1EA0.0020.0002] # LATIN SMALL LETTER T WITH PALATAL HOOK
1DB5 ; [.1EA0.0020.0014] # MODIFIER LETTER SMALL T WITH PALATAL HOOK
01AD ; [.1EA4.0020.0002] # LATIN SMALL LETTER T WITH HOOK
01AC ; [.1EA4.0020.0008] # LATIN CAPITAL LETTER T WITH HOOK
0288 ; [.1EA8.0020.0002] # LATIN SMALL LETTER T WITH RETROFLEX HOOK
01AE ; [.1EA8.0020.0008] # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
0236 ; [.1EAC.0020.0002] # LATIN SMALL LETTER T WITH CURL
A777 ; [.1EB0.0020.0002] # LATIN SMALL LETTER TUM
0287 ; [.1EB1.0020.0002] # LATIN SMALL LETTER TURNED T
A7B1 ; [.1EB1.0020.0008] # LATIN CAPITAL LETTER TURNED T
0075 ; [.1EB5.0020.0002] # LATIN SMALL LETTER U
FF55 ; [.1EB5.0020.0003] # FULLWIDTH LATIN SMALL LETTER U
0367 ; [.1EB5.0020.0004] # COMBINING LATIN SMALL LETTER U
24B0 ; [*0317.0020.0004][.1EB5.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER U
1D42E ; [.1EB5.0020.0005] # MATHEMATICAL BOLD SMALL U
1D462 ; [.1EB5.0020.0005] # MATHEMATICAL ITALIC SMALL U
1D496 ; [.1EB5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL U
1D4CA ; [.1EB5.0020.0005] # MATHEMATICAL SCRIPT SMALL U
1D4FE ; [.1EB5.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL U
1D532 ; [.1EB5.0020.0005] # MATHEMATICAL FRAKTUR SMALL U
1D566 ; [.1EB5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL U
1D59A ; [.1EB5.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL U
1D5CE ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF SMALL U
1D602 ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL U
1D636 ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL U
1D66A ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
1D69E ; [.1EB5.0020.0005] # MATHEMATICAL MONOSPACE SMALL U
24E4 ; [.1EB5.0020.0006] # CIRCLED LATIN SMALL LETTER U
0055 ; [.1EB5.0020.0008] # LATIN CAPITAL LETTER U
FF35 ; [.1EB5.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER U
1F124 ; [*0317.0020.0004][.1EB5.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER U
1D414 ; [.1EB5.0020.000B] # MATHEMATICAL BOLD CAPITAL U
1D448 ; [.1EB5.0020.000B] # MATHEMATICAL ITALIC CAPITAL U
1D47C ; [.1EB5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL U
1D4B0 ; [.1EB5.0020.000B] # MATHEMATICAL SCRIPT CAPITAL U
1D4E4 ; [.1EB5.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL U
1D518 ; [.1EB5.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL U
1D54C ; [.1EB5.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL U
1D580 ; [.1EB5.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL U
1D5B4 ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL U
1D5E8 ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL U
1D61C ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
1D650 ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
1D684 ; [.1EB5.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL U
24CA ; [.1EB5.0020.000C] # CIRCLED LATIN CAPITAL LETTER U
1F164 ; [.1EB5.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER U
1D58 ; [.1EB5.0020.0014] # MODIFIER LETTER SMALL U
1D64 ; [.1EB5.0020.0015] # LATIN SUBSCRIPT SMALL LETTER U
1D41 ; [.1EB5.0020.001D] # MODIFIER LETTER CAPITAL U
1F144 ; [.1EB5.0020.001D] # SQUARED LATIN CAPITAL LETTER U
1F184 ; [.1EB5.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER U
00FA ; [.1EB5.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH ACUTE
00DA ; [.1EB5.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH ACUTE
00F9 ; [.1EB5.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH GRAVE
00D9 ; [.1EB5.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH GRAVE
016D ; [.1EB5.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER U WITH BREVE
016C ; [.1EB5.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER U WITH BREVE
00FB ; [.1EB5.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX
00DB ; [.1EB5.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
01D4 ; [.1EB5.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH CARON
01D3 ; [.1EB5.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH CARON
016F ; [.1EB5.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH RING ABOVE
016E ; [.1EB5.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH RING ABOVE
00FC ; [.1EB5.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH DIAERESIS
1DF4 ; [.1EB5.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER U WITH DIAERESIS
A79F ; [.1EB5.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK UE
00DC ; [.1EB5.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS
A79E ; [.1EB5.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK UE
01D8 ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
01D7 ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
01DC ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
01DB ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
01DA ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
01D9 ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
01D6 ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
01D5 ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
0171 ; [.1EB5.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
0170 ; [.1EB5.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
0169 ; [.1EB5.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH TILDE
0168 ; [.1EB5.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH TILDE
1E79 ; [.1EB5.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH TILDE AND ACUTE
1E78 ; [.1EB5.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
0173 ; [.1EB5.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER U WITH OGONEK
0172 ; [.1EB5.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER U WITH OGONEK
016B ; [.1EB5.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON
016A ; [.1EB5.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON
1E7B ; [.1EB5.0020.0002][.0000.0032.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
1E7A ; [.1EB5.0020.0008][.0000.0032.0002][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
1DF0 ; [.1EB5.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE
1EE7 ; [.1EB5.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HOOK ABOVE
1EE6 ; [.1EB5.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HOOK ABOVE
0215 ; [.1EB5.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER U WITH DOUBLE GRAVE
0214 ; [.1EB5.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
0217 ; [.1EB5.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER U WITH INVERTED BREVE
0216 ; [.1EB5.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER U WITH INVERTED BREVE
01B0 ; [.1EB5.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN
01AF ; [.1EB5.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN
1EE9 ; [.1EB5.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH HORN AND ACUTE
1EE8 ; [.1EB5.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
1EEB ; [.1EB5.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE
1EEA ; [.1EB5.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
1EEF ; [.1EB5.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH HORN AND TILDE
1EEE ; [.1EB5.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH HORN AND TILDE
1EED ; [.1EB5.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
1EEC ; [.1EB5.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
1EF1 ; [.1EB5.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
1EF0 ; [.1EB5.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
1EE5 ; [.1EB5.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH DOT BELOW
1EE4 ; [.1EB5.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH DOT BELOW
1E73 ; [.1EB5.0020.0002][.0000.0043.0002] # LATIN SMALL LETTER U WITH DIAERESIS BELOW
1E72 ; [.1EB5.0020.0008][.0000.0043.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
1E77 ; [.1EB5.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
1E76 ; [.1EB5.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
1E75 ; [.1EB5.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER U WITH TILDE BELOW
1E74 ; [.1EB5.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER U WITH TILDE BELOW
1F1AB ; [.1EB5.0020.001D][.1D18.0020.001D][.1C8F.0020.001D] # SQUARED UHD
1F199 ; [.1EB5.0020.001D][.1E0C.0020.001D][*0260.0020.001C] # SQUARED UP WITH EXCLAMATION MARK
1D1C ; [.1EB9.0020.0002] # LATIN LETTER SMALL CAPITAL U
1DB8 ; [.1EB9.0020.0014] # MODIFIER LETTER SMALL CAPITAL U
AB4E ; [.1EBA.0020.0002] # LATIN SMALL LETTER U WITH SHORT RIGHT LEG
1D1D ; [.1EBB.0020.0002] # LATIN SMALL LETTER SIDEWAYS U
1D59 ; [.1EBB.0020.0014] # MODIFIER LETTER SMALL SIDEWAYS U
1D1E ; [.1EBC.0020.0002] # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
1D6B ; [.1EBD.0020.0002] # LATIN SMALL LETTER UE
AB50 ; [.1EBE.0020.0002] # LATIN SMALL LETTER UI
AB51 ; [.1EBF.0020.0002] # LATIN SMALL LETTER TURNED UI
0289 ; [.1EC0.0020.0002] # LATIN SMALL LETTER U BAR
0244 ; [.1EC0.0020.0008] # LATIN CAPITAL LETTER U BAR
1DB6 ; [.1EC0.0020.0014] # MODIFIER LETTER SMALL U BAR
AB4F ; [.1EC4.0020.0002] # LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG
1D7E ; [.1EC5.0020.0002] # LATIN SMALL CAPITAL LETTER U WITH STROKE
1D99 ; [.1EC6.0020.0002] # LATIN SMALL LETTER U WITH RETROFLEX HOOK
AB52 ; [.1EC7.0020.0002] # LATIN SMALL LETTER U WITH LEFT HOOK
AB5F ; [.1EC7.0020.0014] # MODIFIER LETTER SMALL U WITH LEFT HOOK
0265 ; [.1EC8.0020.0002] # LATIN SMALL LETTER TURNED H
A78D ; [.1EC8.0020.0008] # LATIN CAPITAL LETTER TURNED H
1DA3 ; [.1EC8.0020.0014] # MODIFIER LETTER SMALL TURNED H
02AE ; [.1ECC.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK
02AF ; [.1ED0.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
026F ; [.1ED4.0020.0002] # LATIN SMALL LETTER TURNED M
019C ; [.1ED4.0020.0008] # LATIN CAPITAL LETTER TURNED M
1D5A ; [.1ED4.0020.0014] # MODIFIER LETTER SMALL TURNED M
A7FA ; [.1ED8.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED M
1D1F ; [.1ED9.0020.0002] # LATIN SMALL LETTER SIDEWAYS TURNED M
0270 ; [.1EDA.0020.0002] # LATIN SMALL LETTER TURNED M WITH LONG LEG
1DAD ; [.1EDA.0020.0014] # MODIFIER LETTER SMALL TURNED M WITH LONG LEG
028A ; [.1EDE.0020.0002] # LATIN SMALL LETTER UPSILON
01B1 ; [.1EDE.0020.0008] # LATIN CAPITAL LETTER UPSILON
1DB7 ; [.1EDE.0020.0014] # MODIFIER LETTER SMALL UPSILON
1D7F ; [.1EE2.0020.0002] # LATIN SMALL LETTER UPSILON WITH STROKE
0076 ; [.1EE3.0020.0002] # LATIN SMALL LETTER V
FF56 ; [.1EE3.0020.0003] # FULLWIDTH LATIN SMALL LETTER V
036E ; [.1EE3.0020.0004] # COMBINING LATIN SMALL LETTER V
2174 ; [.1EE3.0020.0004] # SMALL ROMAN NUMERAL FIVE
24B1 ; [*0317.0020.0004][.1EE3.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER V
1D42F ; [.1EE3.0020.0005] # MATHEMATICAL BOLD SMALL V
1D463 ; [.1EE3.0020.0005] # MATHEMATICAL ITALIC SMALL V
1D497 ; [.1EE3.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL V
1D4CB ; [.1EE3.0020.0005] # MATHEMATICAL SCRIPT SMALL V
1D4FF ; [.1EE3.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL V
1D533 ; [.1EE3.0020.0005] # MATHEMATICAL FRAKTUR SMALL V
1D567 ; [.1EE3.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL V
1D59B ; [.1EE3.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL V
1D5CF ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF SMALL V
1D603 ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL V
1D637 ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL V
1D66B ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
1D69F ; [.1EE3.0020.0005] # MATHEMATICAL MONOSPACE SMALL V
24E5 ; [.1EE3.0020.0006] # CIRCLED LATIN SMALL LETTER V
0056 ; [.1EE3.0020.0008] # LATIN CAPITAL LETTER V
FF36 ; [.1EE3.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER V
2164 ; [.1EE3.0020.000A] # ROMAN NUMERAL FIVE
1F125 ; [*0317.0020.0004][.1EE3.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER V
1D415 ; [.1EE3.0020.000B] # MATHEMATICAL BOLD CAPITAL V
1D449 ; [.1EE3.0020.000B] # MATHEMATICAL ITALIC CAPITAL V
1D47D ; [.1EE3.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL V
1D4B1 ; [.1EE3.0020.000B] # MATHEMATICAL SCRIPT CAPITAL V
1D4E5 ; [.1EE3.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL V
1D519 ; [.1EE3.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL V
1D54D ; [.1EE3.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL V
1D581 ; [.1EE3.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL V
1D5B5 ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL V
1D5E9 ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL V
1D61D ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
1D651 ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
1D685 ; [.1EE3.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL V
24CB ; [.1EE3.0020.000C] # CIRCLED LATIN CAPITAL LETTER V
1F165 ; [.1EE3.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER V
1D5B ; [.1EE3.0020.0014] # MODIFIER LETTER SMALL V
1D65 ; [.1EE3.0020.0015] # LATIN SUBSCRIPT SMALL LETTER V
2C7D ; [.1EE3.0020.001D] # MODIFIER LETTER CAPITAL V
1F145 ; [.1EE3.0020.001D] # SQUARED LATIN CAPITAL LETTER V
1F185 ; [.1EE3.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER V
1E7D ; [.1EE3.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER V WITH TILDE
1E7C ; [.1EE3.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER V WITH TILDE
1E7F ; [.1EE3.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER V WITH DOT BELOW
1E7E ; [.1EE3.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER V WITH DOT BELOW
2175 ; [.1EE3.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL SIX
2165 ; [.1EE3.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL SIX
2176 ; [.1EE3.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL SEVEN
2166 ; [.1EE3.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL SEVEN
2177 ; [.1EE3.0020.0004][.1D32.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL EIGHT
2167 ; [.1EE3.0020.000A][.1D32.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL EIGHT
33DE ; [.1EE3.0020.001D][*0625.0020.001C][.1DAA.0020.001C] # SQUARE V OVER M
1F1AC ; [.1EE3.0020.001D][.1DDD.0020.001D][.1C8F.0020.001D] # SQUARED VOD
1F19A ; [.1EE3.0020.001D][.1E71.0020.001D] # SQUARED VS
A761 ; [.1EE3.0020.0004][.1F0B.0020.0004] # LATIN SMALL LETTER VY
A760 ; [.1EE3.0020.000A][.1F0B.0020.000A] # LATIN CAPITAL LETTER VY
1D20 ; [.1EE7.0020.0002] # LATIN LETTER SMALL CAPITAL V
A75F ; [.1EE8.0020.0002] # LATIN SMALL LETTER V WITH DIAGONAL STROKE
A75E ; [.1EE8.0020.0008] # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
1D8C ; [.1EE9.0020.0002] # LATIN SMALL LETTER V WITH PALATAL HOOK
028B ; [.1EEA.0020.0002] # LATIN SMALL LETTER V WITH HOOK
01B2 ; [.1EEA.0020.0008] # LATIN CAPITAL LETTER V WITH HOOK
1DB9 ; [.1EEA.0020.0014] # MODIFIER LETTER SMALL V WITH HOOK
2C71 ; [.1EEE.0020.0002] # LATIN SMALL LETTER V WITH RIGHT HOOK
2C74 ; [.1EEF.0020.0002] # LATIN SMALL LETTER V WITH CURL
1EFD ; [.1EF0.0020.0002] # LATIN SMALL LETTER MIDDLE-WELSH V
1EFC ; [.1EF0.0020.0008] # LATIN CAPITAL LETTER MIDDLE-WELSH V
028C ; [.1EF1.0020.0002] # LATIN SMALL LETTER TURNED V
0245 ; [.1EF1.0020.0008] # LATIN CAPITAL LETTER TURNED V
1DBA ; [.1EF1.0020.0014] # MODIFIER LETTER SMALL TURNED V
0077 ; [.1EF5.0020.0002] # LATIN SMALL LETTER W
FF57 ; [.1EF5.0020.0003] # FULLWIDTH LATIN SMALL LETTER W
1DF1 ; [.1EF5.0020.0004] # COMBINING LATIN SMALL LETTER W
24B2 ; [*0317.0020.0004][.1EF5.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER W
1D430 ; [.1EF5.0020.0005] # MATHEMATICAL BOLD SMALL W
1D464 ; [.1EF5.0020.0005] # MATHEMATICAL ITALIC SMALL W
1D498 ; [.1EF5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL W
1D4CC ; [.1EF5.0020.0005] # MATHEMATICAL SCRIPT SMALL W
1D500 ; [.1EF5.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL W
1D534 ; [.1EF5.0020.0005] # MATHEMATICAL FRAKTUR SMALL W
1D568 ; [.1EF5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL W
1D59C ; [.1EF5.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL W
1D5D0 ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF SMALL W
1D604 ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL W
1D638 ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL W
1D66C ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
1D6A0 ; [.1EF5.0020.0005] # MATHEMATICAL MONOSPACE SMALL W
24E6 ; [.1EF5.0020.0006] # CIRCLED LATIN SMALL LETTER W
0057 ; [.1EF5.0020.0008] # LATIN CAPITAL LETTER W
FF37 ; [.1EF5.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER W
1F126 ; [*0317.0020.0004][.1EF5.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER W
1D416 ; [.1EF5.0020.000B] # MATHEMATICAL BOLD CAPITAL W
1D44A ; [.1EF5.0020.000B] # MATHEMATICAL ITALIC CAPITAL W
1D47E ; [.1EF5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL W
1D4B2 ; [.1EF5.0020.000B] # MATHEMATICAL SCRIPT CAPITAL W
1D4E6 ; [.1EF5.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL W
1D51A ; [.1EF5.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL W
1D54E ; [.1EF5.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL W
1D582 ; [.1EF5.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL W
1D5B6 ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL W
1D5EA ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL W
1D61E ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
1D652 ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
1D686 ; [.1EF5.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL W
24CC ; [.1EF5.0020.000C] # CIRCLED LATIN CAPITAL LETTER W
1F166 ; [.1EF5.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER W
02B7 ; [.1EF5.0020.0014] # MODIFIER LETTER SMALL W
1D42 ; [.1EF5.0020.001D] # MODIFIER LETTER CAPITAL W
1F146 ; [.1EF5.0020.001D] # SQUARED LATIN CAPITAL LETTER W
1F186 ; [.1EF5.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER W
1E83 ; [.1EF5.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER W WITH ACUTE
1E82 ; [.1EF5.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER W WITH ACUTE
1E81 ; [.1EF5.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER W WITH GRAVE
1E80 ; [.1EF5.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER W WITH GRAVE
0175 ; [.1EF5.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER W WITH CIRCUMFLEX
0174 ; [.1EF5.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
1E98 ; [.1EF5.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER W WITH RING ABOVE
1E85 ; [.1EF5.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER W WITH DIAERESIS
1E84 ; [.1EF5.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER W WITH DIAERESIS
1E87 ; [.1EF5.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER W WITH DOT ABOVE
1E86 ; [.1EF5.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER W WITH DOT ABOVE
1E89 ; [.1EF5.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER W WITH DOT BELOW
1E88 ; [.1EF5.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER W WITH DOT BELOW
33DD ; [.1EF5.0020.001D][.1C60.0020.001C] # SQUARE WB
1F14F ; [.1EF5.0020.001D][.1C7A.0020.001D] # SQUARED WC
1F18F ; [.1EF5.0020.001D][.1C7A.0020.001D] # NEGATIVE SQUARED WC
1F12E ; [.1EF5.0020.000C][.1F21.0020.000C] # CIRCLED WZ
1D21 ; [.1EF9.0020.0002] # LATIN LETTER SMALL CAPITAL W
2C73 ; [.1EFA.0020.0002] # LATIN SMALL LETTER W WITH HOOK
2C72 ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER W WITH HOOK
028D ; [.1EFB.0020.0002] # LATIN SMALL LETTER TURNED W
0078 ; [.1EFF.0020.0002] # LATIN SMALL LETTER X
FF58 ; [.1EFF.0020.0003] # FULLWIDTH LATIN SMALL LETTER X
036F ; [.1EFF.0020.0004] # COMBINING LATIN SMALL LETTER X
2179 ; [.1EFF.0020.0004] # SMALL ROMAN NUMERAL TEN
24B3 ; [*0317.0020.0004][.1EFF.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER X
1D431 ; [.1EFF.0020.0005] # MATHEMATICAL BOLD SMALL X
1D465 ; [.1EFF.0020.0005] # MATHEMATICAL ITALIC SMALL X
1D499 ; [.1EFF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL X
1D4CD ; [.1EFF.0020.0005] # MATHEMATICAL SCRIPT SMALL X
1D501 ; [.1EFF.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL X
1D535 ; [.1EFF.0020.0005] # MATHEMATICAL FRAKTUR SMALL X
1D569 ; [.1EFF.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL X
1D59D ; [.1EFF.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL X
1D5D1 ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF SMALL X
1D605 ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL X
1D639 ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL X
1D66D ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
1D6A1 ; [.1EFF.0020.0005] # MATHEMATICAL MONOSPACE SMALL X
24E7 ; [.1EFF.0020.0006] # CIRCLED LATIN SMALL LETTER X
0058 ; [.1EFF.0020.0008] # LATIN CAPITAL LETTER X
FF38 ; [.1EFF.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER X
2169 ; [.1EFF.0020.000A] # ROMAN NUMERAL TEN
1F127 ; [*0317.0020.0004][.1EFF.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER X
1D417 ; [.1EFF.0020.000B] # MATHEMATICAL BOLD CAPITAL X
1D44B ; [.1EFF.0020.000B] # MATHEMATICAL ITALIC CAPITAL X
1D47F ; [.1EFF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL X
1D4B3 ; [.1EFF.0020.000B] # MATHEMATICAL SCRIPT CAPITAL X
1D4E7 ; [.1EFF.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL X
1D51B ; [.1EFF.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL X
1D54F ; [.1EFF.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL X
1D583 ; [.1EFF.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL X
1D5B7 ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL X
1D5EB ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL X
1D61F ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
1D653 ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
1D687 ; [.1EFF.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL X
24CD ; [.1EFF.0020.000C] # CIRCLED LATIN CAPITAL LETTER X
1F167 ; [.1EFF.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER X
02E3 ; [.1EFF.0020.0014] # MODIFIER LETTER SMALL X
2093 ; [.1EFF.0020.0015] # LATIN SUBSCRIPT SMALL LETTER X
1F147 ; [.1EFF.0020.001D] # SQUARED LATIN CAPITAL LETTER X
1F187 ; [.1EFF.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER X
1E8D ; [.1EFF.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER X WITH DIAERESIS
1E8C ; [.1EFF.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER X WITH DIAERESIS
1E8B ; [.1EFF.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER X WITH DOT ABOVE
1E8A ; [.1EFF.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER X WITH DOT ABOVE
217A ; [.1EFF.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL ELEVEN
216A ; [.1EFF.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL ELEVEN
217B ; [.1EFF.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL TWELVE
216B ; [.1EFF.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL TWELVE
1D8D ; [.1F03.0020.0002] # LATIN SMALL LETTER X WITH PALATAL HOOK
AB56 ; [.1F04.0020.0002] # LATIN SMALL LETTER X WITH LOW RIGHT RING
AB57 ; [.1F05.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG
AB58 ; [.1F06.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING
AB59 ; [.1F07.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF
AB53 ; [.1F08.0020.0002] # LATIN SMALL LETTER CHI
A7B3 ; [.1F08.0020.0008] # LATIN CAPITAL LETTER CHI
AB54 ; [.1F09.0020.0002] # LATIN SMALL LETTER CHI WITH LOW RIGHT RING
AB55 ; [.1F0A.0020.0002] # LATIN SMALL LETTER CHI WITH LOW LEFT SERIF
0079 ; [.1F0B.0020.0002] # LATIN SMALL LETTER Y
FF59 ; [.1F0B.0020.0003] # FULLWIDTH LATIN SMALL LETTER Y
24B4 ; [*0317.0020.0004][.1F0B.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Y
1D432 ; [.1F0B.0020.0005] # MATHEMATICAL BOLD SMALL Y
1D466 ; [.1F0B.0020.0005] # MATHEMATICAL ITALIC SMALL Y
1D49A ; [.1F0B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Y
1D4CE ; [.1F0B.0020.0005] # MATHEMATICAL SCRIPT SMALL Y
1D502 ; [.1F0B.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Y
1D536 ; [.1F0B.0020.0005] # MATHEMATICAL FRAKTUR SMALL Y
1D56A ; [.1F0B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Y
1D59E ; [.1F0B.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Y
1D5D2 ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Y
1D606 ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Y
1D63A ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Y
1D66E ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
1D6A2 ; [.1F0B.0020.0005] # MATHEMATICAL MONOSPACE SMALL Y
24E8 ; [.1F0B.0020.0006] # CIRCLED LATIN SMALL LETTER Y
0059 ; [.1F0B.0020.0008] # LATIN CAPITAL LETTER Y
FF39 ; [.1F0B.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Y
1F128 ; [*0317.0020.0004][.1F0B.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Y
1D418 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD CAPITAL Y
1D44C ; [.1F0B.0020.000B] # MATHEMATICAL ITALIC CAPITAL Y
1D480 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Y
1D4B4 ; [.1F0B.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Y
1D4E8 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Y
1D51C ; [.1F0B.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Y
1D550 ; [.1F0B.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
1D584 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Y
1D5B8 ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Y
1D5EC ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
1D620 ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
1D654 ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
1D688 ; [.1F0B.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Y
24CE ; [.1F0B.0020.000C] # CIRCLED LATIN CAPITAL LETTER Y
1F168 ; [.1F0B.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Y
02B8 ; [.1F0B.0020.0014] # MODIFIER LETTER SMALL Y
1F148 ; [.1F0B.0020.001D] # SQUARED LATIN CAPITAL LETTER Y
1F188 ; [.1F0B.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Y
00FD ; [.1F0B.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Y WITH ACUTE
00DD ; [.1F0B.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Y WITH ACUTE
1EF3 ; [.1F0B.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER Y WITH GRAVE
1EF2 ; [.1F0B.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER Y WITH GRAVE
0177 ; [.1F0B.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX
0176 ; [.1F0B.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
1E99 ; [.1F0B.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH RING ABOVE
00FF ; [.1F0B.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER Y WITH DIAERESIS
0178 ; [.1F0B.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER Y WITH DIAERESIS
1EF9 ; [.1F0B.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER Y WITH TILDE
1EF8 ; [.1F0B.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER Y WITH TILDE
1E8F ; [.1F0B.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Y WITH DOT ABOVE
1E8E ; [.1F0B.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Y WITH DOT ABOVE
0233 ; [.1F0B.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER Y WITH MACRON
0232 ; [.1F0B.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER Y WITH MACRON
1EF7 ; [.1F0B.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER Y WITH HOOK ABOVE
1EF6 ; [.1F0B.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
1EF5 ; [.1F0B.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Y WITH DOT BELOW
1EF4 ; [.1F0B.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Y WITH DOT BELOW
028F ; [.1F0F.0020.0002] # LATIN LETTER SMALL CAPITAL Y
024F ; [.1F13.0020.0002] # LATIN SMALL LETTER Y WITH STROKE
024E ; [.1F13.0020.0008] # LATIN CAPITAL LETTER Y WITH STROKE
01B4 ; [.1F17.0020.0002] # LATIN SMALL LETTER Y WITH HOOK
01B3 ; [.1F17.0020.0008] # LATIN CAPITAL LETTER Y WITH HOOK
1EFF ; [.1F1B.0020.0002] # LATIN SMALL LETTER Y WITH LOOP
1EFE ; [.1F1B.0020.0008] # LATIN CAPITAL LETTER Y WITH LOOP
AB5A ; [.1F1C.0020.0002] # LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
021D ; [.1F1D.0020.0002] # LATIN SMALL LETTER YOGH
021C ; [.1F1D.0020.0008] # LATIN CAPITAL LETTER YOGH
007A ; [.1F21.0020.0002] # LATIN SMALL LETTER Z
FF5A ; [.1F21.0020.0003] # FULLWIDTH LATIN SMALL LETTER Z
1DE6 ; [.1F21.0020.0004] # COMBINING LATIN SMALL LETTER Z
24B5 ; [*0317.0020.0004][.1F21.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Z
1D433 ; [.1F21.0020.0005] # MATHEMATICAL BOLD SMALL Z
1D467 ; [.1F21.0020.0005] # MATHEMATICAL ITALIC SMALL Z
1D49B ; [.1F21.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Z
1D4CF ; [.1F21.0020.0005] # MATHEMATICAL SCRIPT SMALL Z
1D503 ; [.1F21.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Z
1D537 ; [.1F21.0020.0005] # MATHEMATICAL FRAKTUR SMALL Z
1D56B ; [.1F21.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Z
1D59F ; [.1F21.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Z
1D5D3 ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Z
1D607 ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Z
1D63B ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Z
1D66F ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
1D6A3 ; [.1F21.0020.0005] # MATHEMATICAL MONOSPACE SMALL Z
24E9 ; [.1F21.0020.0006] # CIRCLED LATIN SMALL LETTER Z
005A ; [.1F21.0020.0008] # LATIN CAPITAL LETTER Z
FF3A ; [.1F21.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Z
1F129 ; [*0317.0020.0004][.1F21.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Z
2124 ; [.1F21.0020.000B] # DOUBLE-STRUCK CAPITAL Z
2128 ; [.1F21.0020.000B] # BLACK-LETTER CAPITAL Z
1D419 ; [.1F21.0020.000B] # MATHEMATICAL BOLD CAPITAL Z
1D44D ; [.1F21.0020.000B] # MATHEMATICAL ITALIC CAPITAL Z
1D481 ; [.1F21.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Z
1D4B5 ; [.1F21.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Z
1D4E9 ; [.1F21.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Z
1D585 ; [.1F21.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Z
1D5B9 ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Z
1D5ED ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
1D621 ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
1D655 ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
1D689 ; [.1F21.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Z
24CF ; [.1F21.0020.000C] # CIRCLED LATIN CAPITAL LETTER Z
1F169 ; [.1F21.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1DBB ; [.1F21.0020.0014] # MODIFIER LETTER SMALL Z
1F149 ; [.1F21.0020.001D] # SQUARED LATIN CAPITAL LETTER Z
1F189 ; [.1F21.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Z
017A ; [.1F21.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Z WITH ACUTE
0179 ; [.1F21.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Z WITH ACUTE
1E91 ; [.1F21.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Z WITH CIRCUMFLEX
1E90 ; [.1F21.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
017E ; [.1F21.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER Z WITH CARON
017D ; [.1F21.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER Z WITH CARON
017C ; [.1F21.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE
017B ; [.1F21.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Z WITH DOT ABOVE
1E93 ; [.1F21.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Z WITH DOT BELOW
1E92 ; [.1F21.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Z WITH DOT BELOW
1E95 ; [.1F21.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER Z WITH LINE BELOW
1E94 ; [.1F21.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER Z WITH LINE BELOW
018D ; [.1F21.0020.0004][.1EF5.0020.0004] # LATIN SMALL LETTER TURNED DELTA
1D22 ; [.1F25.0020.0002] # LATIN LETTER SMALL CAPITAL Z
01B6 ; [.1F26.0020.0002] # LATIN SMALL LETTER Z WITH STROKE
01B5 ; [.1F26.0020.0008] # LATIN CAPITAL LETTER Z WITH STROKE
1D76 ; [.1F2A.0020.0002] # LATIN SMALL LETTER Z WITH MIDDLE TILDE
1D8E ; [.1F2B.0020.0002] # LATIN SMALL LETTER Z WITH PALATAL HOOK
0225 ; [.1F2C.0020.0002] # LATIN SMALL LETTER Z WITH HOOK
0224 ; [.1F2C.0020.0008] # LATIN CAPITAL LETTER Z WITH HOOK
0290 ; [.1F30.0020.0002] # LATIN SMALL LETTER Z WITH RETROFLEX HOOK
1DBC ; [.1F30.0020.0014] # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
0291 ; [.1F34.0020.0002] # LATIN SMALL LETTER Z WITH CURL
1DBD ; [.1F34.0020.0014] # MODIFIER LETTER SMALL Z WITH CURL
0240 ; [.1F38.0020.0002] # LATIN SMALL LETTER Z WITH SWASH TAIL
2C7F ; [.1F38.0020.0008] # LATIN CAPITAL LETTER Z WITH SWASH TAIL
2C6C ; [.1F3C.0020.0002] # LATIN SMALL LETTER Z WITH DESCENDER
2C6B ; [.1F3C.0020.0008] # LATIN CAPITAL LETTER Z WITH DESCENDER
A763 ; [.1F3D.0020.0002] # LATIN SMALL LETTER VISIGOTHIC Z
A762 ; [.1F3D.0020.0008] # LATIN CAPITAL LETTER VISIGOTHIC Z
0292 ; [.1F3E.0020.0002] # LATIN SMALL LETTER EZH
01B7 ; [.1F3E.0020.0008] # LATIN CAPITAL LETTER EZH
1DBE ; [.1F3E.0020.0014] # MODIFIER LETTER SMALL EZH
01EF ; [.1F3E.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON
01EE ; [.1F3E.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON
1D23 ; [.1F42.0020.0002] # LATIN LETTER SMALL CAPITAL EZH
01B9 ; [.1F43.0020.0002] # LATIN SMALL LETTER EZH REVERSED
01B8 ; [.1F43.0020.0008] # LATIN CAPITAL LETTER EZH REVERSED
1D9A ; [.1F47.0020.0002] # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
01BA ; [.1F48.0020.0002] # LATIN SMALL LETTER EZH WITH TAIL
0293 ; [.1F4C.0020.0002] # LATIN SMALL LETTER EZH WITH CURL
00FE ; [.1F50.0020.0002] # LATIN SMALL LETTER THORN
00DE ; [.1F50.0020.0008] # LATIN CAPITAL LETTER THORN
A765 ; [.1F54.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE
A764 ; [.1F54.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE
A767 ; [.1F55.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
A766 ; [.1F55.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
01BF ; [.1F56.0020.0002] # LATIN LETTER WYNN
01F7 ; [.1F56.0020.0008] # LATIN CAPITAL LETTER WYNN
A769 ; [.1F5A.0020.0002] # LATIN SMALL LETTER VEND
A768 ; [.1F5A.0020.0008] # LATIN CAPITAL LETTER VEND
AB60 ; [.1F5B.0020.0002] # LATIN SMALL LETTER SAKHA YAT
AB61 ; [.1F5C.0020.0002] # LATIN SMALL LETTER IOTIFIED E
AB63 ; [.1F5D.0020.0002] # LATIN SMALL LETTER UO
A76B ; [.1F5E.0020.0002] # LATIN SMALL LETTER ET
A76A ; [.1F5E.0020.0008] # LATIN CAPITAL LETTER ET
A76D ; [.1F5F.0020.0002] # LATIN SMALL LETTER IS
A76C ; [.1F5F.0020.0008] # LATIN CAPITAL LETTER IS
A76F ; [.1F60.0020.0002] # LATIN SMALL LETTER CON
1DD2 ; [.1F60.0020.0004] # COMBINING US ABOVE
A76E ; [.1F60.0020.0008] # LATIN CAPITAL LETTER CON
A770 ; [.1F60.0020.0014] # MODIFIER LETTER US
A778 ; [.1F61.0020.0002] # LATIN SMALL LETTER UM
01BB ; [.1F62.0020.0002] # LATIN LETTER TWO WITH STROKE
A72B ; [.1F66.0020.0002] # LATIN SMALL LETTER TRESILLO
A72A ; [.1F66.0020.0008] # LATIN CAPITAL LETTER TRESILLO
A72D ; [.1F67.0020.0002] # LATIN SMALL LETTER CUATRILLO
A72C ; [.1F67.0020.0008] # LATIN CAPITAL LETTER CUATRILLO
A72F ; [.1F68.0020.0002] # LATIN SMALL LETTER CUATRILLO WITH COMMA
A72E ; [.1F68.0020.0008] # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
01A8 ; [.1F69.0020.0002] # LATIN SMALL LETTER TONE TWO
01A7 ; [.1F69.0020.0008] # LATIN CAPITAL LETTER TONE TWO
01BD ; [.1F6D.0020.0002] # LATIN SMALL LETTER TONE FIVE
01BC ; [.1F6D.0020.0008] # LATIN CAPITAL LETTER TONE FIVE
0185 ; [.1F71.0020.0002] # LATIN SMALL LETTER TONE SIX
0184 ; [.1F71.0020.0008] # LATIN CAPITAL LETTER TONE SIX
0294 ; [.1F75.0020.0002] # LATIN LETTER GLOTTAL STOP
0242 ; [.1F79.0020.0002] # LATIN SMALL LETTER GLOTTAL STOP
0241 ; [.1F79.0020.0008] # LATIN CAPITAL LETTER GLOTTAL STOP
02C0 ; [.1F7D.0020.0002] # MODIFIER LETTER GLOTTAL STOP
02BC ; [.1F7E.0020.0002] # MODIFIER LETTER APOSTROPHE
0149 ; [.1F7E.0020.0004][.1DB9.0020.0004] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
02EE ; [.1F7F.0020.0002] # MODIFIER LETTER DOUBLE APOSTROPHE
02BE ; [.1F80.0020.0002] # MODIFIER LETTER RIGHT HALF RING
A723 ; [.1F81.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL ALEF
A722 ; [.1F81.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
A78C ; [.1F82.0020.0002] # LATIN SMALL LETTER SALTILLO
A78B ; [.1F82.0020.0008] # LATIN CAPITAL LETTER SALTILLO
A78F ; [.1F83.0020.0002] # LATIN LETTER SINOLOGICAL DOT
0295 ; [.1F84.0020.0002] # LATIN LETTER PHARYNGEAL VOICED FRICATIVE
02E4 ; [.1F84.0020.0014] # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
02BF ; [.1F88.0020.0002] # MODIFIER LETTER LEFT HALF RING
02C1 ; [.1F89.0020.0002] # MODIFIER LETTER REVERSED GLOTTAL STOP
1D24 ; [.1F8A.0020.0002] # LATIN LETTER VOICED LARYNGEAL SPIRANT
1D25 ; [.1F8B.0020.0002] # LATIN LETTER AIN
1D5C ; [.1F8B.0020.0014] # MODIFIER LETTER SMALL AIN
A725 ; [.1F8C.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL AIN
A724 ; [.1F8C.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
02A1 ; [.1F8D.0020.0002] # LATIN LETTER GLOTTAL STOP WITH STROKE
02A2 ; [.1F91.0020.0002] # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
0296 ; [.1F95.0020.0002] # LATIN LETTER INVERTED GLOTTAL STOP
01C0 ; [.1F99.0020.0002] # LATIN LETTER DENTAL CLICK
01C1 ; [.1F9D.0020.0002] # LATIN LETTER LATERAL CLICK
01C2 ; [.1FA1.0020.0002] # LATIN LETTER ALVEOLAR CLICK
01C3 ; [.1FA5.0020.0002] # LATIN LETTER RETROFLEX CLICK
0297 ; [.1FA9.0020.0002] # LATIN LETTER STRETCHED C
0298 ; [.1FAD.0020.0002] # LATIN LETTER BILABIAL CLICK
02AC ; [.1FB1.0020.0002] # LATIN LETTER BILABIAL PERCUSSIVE
02AD ; [.1FB5.0020.0002] # LATIN LETTER BIDENTAL PERCUSSIVE
03B1 ; [.1FB9.0020.0002] # GREEK SMALL LETTER ALPHA
1D6C2 ; [.1FB9.0020.0005] # MATHEMATICAL BOLD SMALL ALPHA
1D6FC ; [.1FB9.0020.0005] # MATHEMATICAL ITALIC SMALL ALPHA
1D736 ; [.1FB9.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ALPHA
1D770 ; [.1FB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
1D7AA ; [.1FB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
0391 ; [.1FB9.0020.0008] # GREEK CAPITAL LETTER ALPHA
1D6A8 ; [.1FB9.0020.000B] # MATHEMATICAL BOLD CAPITAL ALPHA
1D6E2 ; [.1FB9.0020.000B] # MATHEMATICAL ITALIC CAPITAL ALPHA
1D71C ; [.1FB9.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
1D756 ; [.1FB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
1D790 ; [.1FB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
1F00 ; [.1FB9.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ALPHA WITH PSILI
1F08 ; [.1FB9.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI
1F04 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
1F0C ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
1F84 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
1F8C ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
1F02 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
1F0A ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
1F82 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
1F8A ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
1F06 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
1F0E ; [.1FB9.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
1F86 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
1F8E ; [.1FB9.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
1F80 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
1F88 ; [.1FB9.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
1F01 ; [.1FB9.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ALPHA WITH DASIA
1F09 ; [.1FB9.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA
1F05 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
1F0D ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
1F85 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
1F8D ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
1F03 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
1F0B ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
1F83 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
1F8B ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
1F07 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
1F0F ; [.1FB9.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
1F87 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
1F8F ; [.1FB9.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
1F81 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
1F89 ; [.1FB9.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
03AC ; [.1FB9.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH TONOS
1F71 ; [.1FB9.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH OXIA
0386 ; [.1FB9.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH TONOS
1FBB ; [.1FB9.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH OXIA
1FB4 ; [.1FB9.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
1F70 ; [.1FB9.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH VARIA
1FBA ; [.1FB9.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH VARIA
1FB2 ; [.1FB9.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
1FB0 ; [.1FB9.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER ALPHA WITH VRACHY
1FB8 ; [.1FB9.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER ALPHA WITH VRACHY
1FB6 ; [.1FB9.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
1FB7 ; [.1FB9.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
1FB1 ; [.1FB9.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER ALPHA WITH MACRON
1FB9 ; [.1FB9.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER ALPHA WITH MACRON
1FB3 ; [.1FB9.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
1FBC ; [.1FB9.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
03B2 ; [.1FBA.0020.0002] # GREEK SMALL LETTER BETA
03D0 ; [.1FBA.0020.0004] # GREEK BETA SYMBOL
1D6C3 ; [.1FBA.0020.0005] # MATHEMATICAL BOLD SMALL BETA
1D6FD ; [.1FBA.0020.0005] # MATHEMATICAL ITALIC SMALL BETA
1D737 ; [.1FBA.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL BETA
1D771 ; [.1FBA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL BETA
1D7AB ; [.1FBA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
0392 ; [.1FBA.0020.0008] # GREEK CAPITAL LETTER BETA
1D6A9 ; [.1FBA.0020.000B] # MATHEMATICAL BOLD CAPITAL BETA
1D6E3 ; [.1FBA.0020.000B] # MATHEMATICAL ITALIC CAPITAL BETA
1D71D ; [.1FBA.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL BETA
1D757 ; [.1FBA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
1D791 ; [.1FBA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
1D5D ; [.1FBA.0020.0014] # MODIFIER LETTER SMALL BETA
1D66 ; [.1FBA.0020.0015] # GREEK SUBSCRIPT SMALL LETTER BETA
03B3 ; [.1FBB.0020.0002] # GREEK SMALL LETTER GAMMA
213D ; [.1FBB.0020.0005] # DOUBLE-STRUCK SMALL GAMMA
1D6C4 ; [.1FBB.0020.0005] # MATHEMATICAL BOLD SMALL GAMMA
1D6FE ; [.1FBB.0020.0005] # MATHEMATICAL ITALIC SMALL GAMMA
1D738 ; [.1FBB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL GAMMA
1D772 ; [.1FBB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
1D7AC ; [.1FBB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
0393 ; [.1FBB.0020.0008] # GREEK CAPITAL LETTER GAMMA
213E ; [.1FBB.0020.000B] # DOUBLE-STRUCK CAPITAL GAMMA
1D6AA ; [.1FBB.0020.000B] # MATHEMATICAL BOLD CAPITAL GAMMA
1D6E4 ; [.1FBB.0020.000B] # MATHEMATICAL ITALIC CAPITAL GAMMA
1D71E ; [.1FBB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
1D758 ; [.1FBB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
1D792 ; [.1FBB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
1D5E ; [.1FBB.0020.0014] # MODIFIER LETTER SMALL GREEK GAMMA
1D67 ; [.1FBB.0020.0015] # GREEK SUBSCRIPT SMALL LETTER GAMMA
1D26 ; [.1FBC.0020.0002] # GREEK LETTER SMALL CAPITAL GAMMA
03B4 ; [.1FBD.0020.0002] # GREEK SMALL LETTER DELTA
1D6C5 ; [.1FBD.0020.0005] # MATHEMATICAL BOLD SMALL DELTA
1D6FF ; [.1FBD.0020.0005] # MATHEMATICAL ITALIC SMALL DELTA
1D739 ; [.1FBD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL DELTA
1D773 ; [.1FBD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
1D7AD ; [.1FBD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
0394 ; [.1FBD.0020.0008] # GREEK CAPITAL LETTER DELTA
1D6AB ; [.1FBD.0020.000B] # MATHEMATICAL BOLD CAPITAL DELTA
1D6E5 ; [.1FBD.0020.000B] # MATHEMATICAL ITALIC CAPITAL DELTA
1D71F ; [.1FBD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL DELTA
1D759 ; [.1FBD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
1D793 ; [.1FBD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
1D5F ; [.1FBD.0020.0014] # MODIFIER LETTER SMALL DELTA
03B5 ; [.1FBE.0020.0002] # GREEK SMALL LETTER EPSILON
03F5 ; [.1FBE.0020.0004] # GREEK LUNATE EPSILON SYMBOL
1D6C6 ; [.1FBE.0020.0005] # MATHEMATICAL BOLD SMALL EPSILON
1D6DC ; [.1FBE.0020.0005] # MATHEMATICAL BOLD EPSILON SYMBOL
1D700 ; [.1FBE.0020.0005] # MATHEMATICAL ITALIC SMALL EPSILON
1D716 ; [.1FBE.0020.0005] # MATHEMATICAL ITALIC EPSILON SYMBOL
1D73A ; [.1FBE.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL EPSILON
1D750 ; [.1FBE.0020.0005] # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
1D774 ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
1D78A ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
1D7AE ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
1D7C4 ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
0395 ; [.1FBE.0020.0008] # GREEK CAPITAL LETTER EPSILON
1D6AC ; [.1FBE.0020.000B] # MATHEMATICAL BOLD CAPITAL EPSILON
1D6E6 ; [.1FBE.0020.000B] # MATHEMATICAL ITALIC CAPITAL EPSILON
1D720 ; [.1FBE.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
1D75A ; [.1FBE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
1D794 ; [.1FBE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
1F10 ; [.1FBE.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER EPSILON WITH PSILI
1F18 ; [.1FBE.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI
1F14 ; [.1FBE.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
1F1C ; [.1FBE.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
1F12 ; [.1FBE.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
1F1A ; [.1FBE.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
1F11 ; [.1FBE.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER EPSILON WITH DASIA
1F19 ; [.1FBE.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA
1F15 ; [.1FBE.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
1F1D ; [.1FBE.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
1F13 ; [.1FBE.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
1F1B ; [.1FBE.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
03AD ; [.1FBE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH TONOS
1F73 ; [.1FBE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH OXIA
0388 ; [.1FBE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH TONOS
1FC9 ; [.1FBE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH OXIA
1F72 ; [.1FBE.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH VARIA
1FC8 ; [.1FBE.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH VARIA
03DD ; [.1FBF.0020.0002] # GREEK SMALL LETTER DIGAMMA
1D7CB ; [.1FBF.0020.0005] # MATHEMATICAL BOLD SMALL DIGAMMA
03DC ; [.1FBF.0020.0008] # GREEK LETTER DIGAMMA
1D7CA ; [.1FBF.0020.000B] # MATHEMATICAL BOLD CAPITAL DIGAMMA
0377 ; [.1FC0.0020.0002] # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
0376 ; [.1FC0.0020.0008] # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
03DB ; [.1FC1.0020.0002] # GREEK SMALL LETTER STIGMA
03DA ; [.1FC1.0020.0008] # GREEK LETTER STIGMA
03B6 ; [.1FC2.0020.0002] # GREEK SMALL LETTER ZETA
1D6C7 ; [.1FC2.0020.0005] # MATHEMATICAL BOLD SMALL ZETA
1D701 ; [.1FC2.0020.0005] # MATHEMATICAL ITALIC SMALL ZETA
1D73B ; [.1FC2.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ZETA
1D775 ; [.1FC2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
1D7AF ; [.1FC2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
0396 ; [.1FC2.0020.0008] # GREEK CAPITAL LETTER ZETA
1D6AD ; [.1FC2.0020.000B] # MATHEMATICAL BOLD CAPITAL ZETA
1D6E7 ; [.1FC2.0020.000B] # MATHEMATICAL ITALIC CAPITAL ZETA
1D721 ; [.1FC2.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ZETA
1D75B ; [.1FC2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
1D795 ; [.1FC2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
0371 ; [.1FC3.0020.0002] # GREEK SMALL LETTER HETA
0370 ; [.1FC3.0020.0008] # GREEK CAPITAL LETTER HETA
03B7 ; [.1FC4.0020.0002] # GREEK SMALL LETTER ETA
1D6C8 ; [.1FC4.0020.0005] # MATHEMATICAL BOLD SMALL ETA
1D702 ; [.1FC4.0020.0005] # MATHEMATICAL ITALIC SMALL ETA
1D73C ; [.1FC4.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ETA
1D776 ; [.1FC4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ETA
1D7B0 ; [.1FC4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
0397 ; [.1FC4.0020.0008] # GREEK CAPITAL LETTER ETA
1D6AE ; [.1FC4.0020.000B] # MATHEMATICAL BOLD CAPITAL ETA
1D6E8 ; [.1FC4.0020.000B] # MATHEMATICAL ITALIC CAPITAL ETA
1D722 ; [.1FC4.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ETA
1D75C ; [.1FC4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
1D796 ; [.1FC4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
1F20 ; [.1FC4.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ETA WITH PSILI
1F28 ; [.1FC4.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ETA WITH PSILI
1F24 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
1F2C ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
1F94 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
1F9C ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
1F22 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
1F2A ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
1F92 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
1F9A ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
1F26 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
1F2E ; [.1FC4.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
1F96 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
1F9E ; [.1FC4.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
1F90 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
1F98 ; [.1FC4.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
1F21 ; [.1FC4.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ETA WITH DASIA
1F29 ; [.1FC4.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ETA WITH DASIA
1F25 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
1F2D ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
1F95 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
1F9D ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
1F23 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
1F2B ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
1F93 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
1F9B ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
1F27 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
1F2F ; [.1FC4.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
1F97 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
1F9F ; [.1FC4.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
1F91 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
1F99 ; [.1FC4.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
03AE ; [.1FC4.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH TONOS
1F75 ; [.1FC4.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH OXIA
0389 ; [.1FC4.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH TONOS
1FCB ; [.1FC4.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH OXIA
1FC4 ; [.1FC4.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
1F74 ; [.1FC4.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH VARIA
1FCA ; [.1FC4.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH VARIA
1FC2 ; [.1FC4.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
1FC6 ; [.1FC4.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI
1FC7 ; [.1FC4.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
1FC3 ; [.1FC4.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
1FCC ; [.1FC4.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
03B8 ; [.1FC5.0020.0002] # GREEK SMALL LETTER THETA
03D1 ; [.1FC5.0020.0004] # GREEK THETA SYMBOL
1D6C9 ; [.1FC5.0020.0005] # MATHEMATICAL BOLD SMALL THETA
1D6DD ; [.1FC5.0020.0005] # MATHEMATICAL BOLD THETA SYMBOL
1D703 ; [.1FC5.0020.0005] # MATHEMATICAL ITALIC SMALL THETA
1D717 ; [.1FC5.0020.0005] # MATHEMATICAL ITALIC THETA SYMBOL
1D73D ; [.1FC5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL THETA
1D751 ; [.1FC5.0020.0005] # MATHEMATICAL BOLD ITALIC THETA SYMBOL
1D777 ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL THETA
1D78B ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
1D7B1 ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
1D7C5 ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
0398 ; [.1FC5.0020.0008] # GREEK CAPITAL LETTER THETA
03F4 ; [.1FC5.0020.000A] # GREEK CAPITAL THETA SYMBOL
1D6AF ; [.1FC5.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA
1D6B9 ; [.1FC5.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA SYMBOL
1D6E9 ; [.1FC5.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA
1D6F3 ; [.1FC5.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
1D723 ; [.1FC5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA
1D72D ; [.1FC5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
1D75D ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
1D767 ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
1D797 ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
1D7A1 ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
1DBF ; [.1FC5.0020.0014] # MODIFIER LETTER SMALL THETA
03B9 ; [.1FC6.0020.0002] # GREEK SMALL LETTER IOTA
1FBE ; [.1FC6.0020.0002] # GREEK PROSGEGRAMMENI
037A ; [.1FC6.0020.0004] # GREEK YPOGEGRAMMENI
1D6CA ; [.1FC6.0020.0005] # MATHEMATICAL BOLD SMALL IOTA
1D704 ; [.1FC6.0020.0005] # MATHEMATICAL ITALIC SMALL IOTA
1D73E ; [.1FC6.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL IOTA
1D778 ; [.1FC6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
1D7B2 ; [.1FC6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
0399 ; [.1FC6.0020.0008] # GREEK CAPITAL LETTER IOTA
1D6B0 ; [.1FC6.0020.000B] # MATHEMATICAL BOLD CAPITAL IOTA
1D6EA ; [.1FC6.0020.000B] # MATHEMATICAL ITALIC CAPITAL IOTA
1D724 ; [.1FC6.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL IOTA
1D75E ; [.1FC6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
1D798 ; [.1FC6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
1F30 ; [.1FC6.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER IOTA WITH PSILI
1F38 ; [.1FC6.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI
1F34 ; [.1FC6.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
1F3C ; [.1FC6.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
1F32 ; [.1FC6.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
1F3A ; [.1FC6.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
1F36 ; [.1FC6.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
1F3E ; [.1FC6.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
1F31 ; [.1FC6.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER IOTA WITH DASIA
1F39 ; [.1FC6.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA
1F35 ; [.1FC6.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
1F3D ; [.1FC6.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
1F33 ; [.1FC6.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
1F3B ; [.1FC6.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
1F37 ; [.1FC6.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
1F3F ; [.1FC6.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
03AF ; [.1FC6.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH TONOS
1F77 ; [.1FC6.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH OXIA
038A ; [.1FC6.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH TONOS
1FDB ; [.1FC6.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH OXIA
1F76 ; [.1FC6.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH VARIA
1FDA ; [.1FC6.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH VARIA
1FD0 ; [.1FC6.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER IOTA WITH VRACHY
1FD8 ; [.1FC6.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER IOTA WITH VRACHY
1FD6 ; [.1FC6.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PERISPOMENI
03CA ; [.1FC6.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA
03AA ; [.1FC6.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
0390 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
1FD3 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
1FD2 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
1FD7 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
1FD1 ; [.1FC6.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER IOTA WITH MACRON
1FD9 ; [.1FC6.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER IOTA WITH MACRON
03F3 ; [.1FC7.0020.0002] # GREEK LETTER YOT
037F ; [.1FC7.0020.0008] # GREEK CAPITAL LETTER YOT
03BA ; [.1FC8.0020.0002] # GREEK SMALL LETTER KAPPA
03F0 ; [.1FC8.0020.0004] # GREEK KAPPA SYMBOL
1D6CB ; [.1FC8.0020.0005] # MATHEMATICAL BOLD SMALL KAPPA
1D6DE ; [.1FC8.0020.0005] # MATHEMATICAL BOLD KAPPA SYMBOL
1D705 ; [.1FC8.0020.0005] # MATHEMATICAL ITALIC SMALL KAPPA
1D718 ; [.1FC8.0020.0005] # MATHEMATICAL ITALIC KAPPA SYMBOL
1D73F ; [.1FC8.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL KAPPA
1D752 ; [.1FC8.0020.0005] # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
1D779 ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
1D78C ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
1D7B3 ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
1D7C6 ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
039A ; [.1FC8.0020.0008] # GREEK CAPITAL LETTER KAPPA
1D6B1 ; [.1FC8.0020.000B] # MATHEMATICAL BOLD CAPITAL KAPPA
1D6EB ; [.1FC8.0020.000B] # MATHEMATICAL ITALIC CAPITAL KAPPA
1D725 ; [.1FC8.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
1D75F ; [.1FC8.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
1D799 ; [.1FC8.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
03D7 ; [.1FC8.0020.0004][.1FB9.0020.0004][.1FC6.0020.0004] # GREEK KAI SYMBOL
03CF ; [.1FC8.0020.000A][.1FB9.0020.0004][.1FC6.0020.0004] # GREEK CAPITAL KAI SYMBOL
03BB ; [.1FC9.0020.0002] # GREEK SMALL LETTER LAMDA
1D6CC ; [.1FC9.0020.0005] # MATHEMATICAL BOLD SMALL LAMDA
1D706 ; [.1FC9.0020.0005] # MATHEMATICAL ITALIC SMALL LAMDA
1D740 ; [.1FC9.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL LAMDA
1D77A ; [.1FC9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
1D7B4 ; [.1FC9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
039B ; [.1FC9.0020.0008] # GREEK CAPITAL LETTER LAMDA
1D6B2 ; [.1FC9.0020.000B] # MATHEMATICAL BOLD CAPITAL LAMDA
1D6EC ; [.1FC9.0020.000B] # MATHEMATICAL ITALIC CAPITAL LAMDA
1D726 ; [.1FC9.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
1D760 ; [.1FC9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
1D79A ; [.1FC9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
1D27 ; [.1FCA.0020.0002] # GREEK LETTER SMALL CAPITAL LAMDA
03BC ; [.1FCB.0020.0002] # GREEK SMALL LETTER MU
00B5 ; [.1FCB.0020.0004] # MICRO SIGN
1D6CD ; [.1FCB.0020.0005] # MATHEMATICAL BOLD SMALL MU
1D707 ; [.1FCB.0020.0005] # MATHEMATICAL ITALIC SMALL MU
1D741 ; [.1FCB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL MU
1D77B ; [.1FCB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL MU
1D7B5 ; [.1FCB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
039C ; [.1FCB.0020.0008] # GREEK CAPITAL LETTER MU
1D6B3 ; [.1FCB.0020.000B] # MATHEMATICAL BOLD CAPITAL MU
1D6ED ; [.1FCB.0020.000B] # MATHEMATICAL ITALIC CAPITAL MU
1D727 ; [.1FCB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL MU
1D761 ; [.1FCB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
1D79B ; [.1FCB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
3382 ; [.1FCB.0020.001C][.1C47.0020.001D] # SQUARE MU A
338C ; [.1FCB.0020.001C][.1CE5.0020.001D] # SQUARE MU F
338D ; [.1FCB.0020.001C][.1CF4.0020.001C] # SQUARE MU G
3395 ; [.1FCB.0020.001C][.1D77.0020.001C] # SQUARE MU L
339B ; [.1FCB.0020.001C][.1DAA.0020.001C] # SQUARE MU M
33B2 ; [.1FCB.0020.001C][.1E71.0020.001C] # SQUARE MU S
33B6 ; [.1FCB.0020.001C][.1EE3.0020.001D] # SQUARE MU V
33BC ; [.1FCB.0020.001C][.1EF5.0020.001D] # SQUARE MU W
03BD ; [.1FCC.0020.0002] # GREEK SMALL LETTER NU
1D6CE ; [.1FCC.0020.0005] # MATHEMATICAL BOLD SMALL NU
1D708 ; [.1FCC.0020.0005] # MATHEMATICAL ITALIC SMALL NU
1D742 ; [.1FCC.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL NU
1D77C ; [.1FCC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL NU
1D7B6 ; [.1FCC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
039D ; [.1FCC.0020.0008] # GREEK CAPITAL LETTER NU
1D6B4 ; [.1FCC.0020.000B] # MATHEMATICAL BOLD CAPITAL NU
1D6EE ; [.1FCC.0020.000B] # MATHEMATICAL ITALIC CAPITAL NU
1D728 ; [.1FCC.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL NU
1D762 ; [.1FCC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
1D79C ; [.1FCC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
03BE ; [.1FCD.0020.0002] # GREEK SMALL LETTER XI
1D6CF ; [.1FCD.0020.0005] # MATHEMATICAL BOLD SMALL XI
1D709 ; [.1FCD.0020.0005] # MATHEMATICAL ITALIC SMALL XI
1D743 ; [.1FCD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL XI
1D77D ; [.1FCD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL XI
1D7B7 ; [.1FCD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
039E ; [.1FCD.0020.0008] # GREEK CAPITAL LETTER XI
1D6B5 ; [.1FCD.0020.000B] # MATHEMATICAL BOLD CAPITAL XI
1D6EF ; [.1FCD.0020.000B] # MATHEMATICAL ITALIC CAPITAL XI
1D729 ; [.1FCD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL XI
1D763 ; [.1FCD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
1D79D ; [.1FCD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
03BF ; [.1FCE.0020.0002] # GREEK SMALL LETTER OMICRON
1D6D0 ; [.1FCE.0020.0005] # MATHEMATICAL BOLD SMALL OMICRON
1D70A ; [.1FCE.0020.0005] # MATHEMATICAL ITALIC SMALL OMICRON
1D744 ; [.1FCE.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMICRON
1D77E ; [.1FCE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
1D7B8 ; [.1FCE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
039F ; [.1FCE.0020.0008] # GREEK CAPITAL LETTER OMICRON
1D6B6 ; [.1FCE.0020.000B] # MATHEMATICAL BOLD CAPITAL OMICRON
1D6F0 ; [.1FCE.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMICRON
1D72A ; [.1FCE.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
1D764 ; [.1FCE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
1D79E ; [.1FCE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
1F40 ; [.1FCE.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMICRON WITH PSILI
1F48 ; [.1FCE.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI
1F44 ; [.1FCE.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
1F4C ; [.1FCE.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
1F42 ; [.1FCE.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
1F4A ; [.1FCE.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
1F41 ; [.1FCE.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMICRON WITH DASIA
1F49 ; [.1FCE.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA
1F45 ; [.1FCE.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
1F4D ; [.1FCE.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
1F43 ; [.1FCE.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
1F4B ; [.1FCE.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
03CC ; [.1FCE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH TONOS
1F79 ; [.1FCE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH OXIA
038C ; [.1FCE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH TONOS
1FF9 ; [.1FCE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH OXIA
1F78 ; [.1FCE.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH VARIA
1FF8 ; [.1FCE.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH VARIA
03C0 ; [.1FCF.0020.0002] # GREEK SMALL LETTER PI
03D6 ; [.1FCF.0020.0004] # GREEK PI SYMBOL
213C ; [.1FCF.0020.0005] # DOUBLE-STRUCK SMALL PI
1D6D1 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD SMALL PI
1D6E1 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD PI SYMBOL
1D70B ; [.1FCF.0020.0005] # MATHEMATICAL ITALIC SMALL PI
1D71B ; [.1FCF.0020.0005] # MATHEMATICAL ITALIC PI SYMBOL
1D745 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PI
1D755 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD ITALIC PI SYMBOL
1D77F ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PI
1D78F ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
1D7B9 ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
1D7C9 ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
03A0 ; [.1FCF.0020.0008] # GREEK CAPITAL LETTER PI
213F ; [.1FCF.0020.000B] # DOUBLE-STRUCK CAPITAL PI
1D6B7 ; [.1FCF.0020.000B] # MATHEMATICAL BOLD CAPITAL PI
1D6F1 ; [.1FCF.0020.000B] # MATHEMATICAL ITALIC CAPITAL PI
1D72B ; [.1FCF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PI
1D765 ; [.1FCF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
1D79F ; [.1FCF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
1D28 ; [.1FD0.0020.0002] # GREEK LETTER SMALL CAPITAL PI
03FB ; [.1FD1.0020.0002] # GREEK SMALL LETTER SAN
03FA ; [.1FD1.0020.0008] # GREEK CAPITAL LETTER SAN
03DF ; [.1FD2.0020.0002] # GREEK SMALL LETTER KOPPA
03DE ; [.1FD2.0020.0008] # GREEK LETTER KOPPA
03D9 ; [.1FD3.0020.0002] # GREEK SMALL LETTER ARCHAIC KOPPA
03D8 ; [.1FD3.0020.0008] # GREEK LETTER ARCHAIC KOPPA
03C1 ; [.1FD4.0020.0002] # GREEK SMALL LETTER RHO
03F1 ; [.1FD4.0020.0004] # GREEK RHO SYMBOL
1D6D2 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD SMALL RHO
1D6E0 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD RHO SYMBOL
1D70C ; [.1FD4.0020.0005] # MATHEMATICAL ITALIC SMALL RHO
1D71A ; [.1FD4.0020.0005] # MATHEMATICAL ITALIC RHO SYMBOL
1D746 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL RHO
1D754 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD ITALIC RHO SYMBOL
1D780 ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL RHO
1D78E ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
1D7BA ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
1D7C8 ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
03A1 ; [.1FD4.0020.0008] # GREEK CAPITAL LETTER RHO
1D6B8 ; [.1FD4.0020.000B] # MATHEMATICAL BOLD CAPITAL RHO
1D6F2 ; [.1FD4.0020.000B] # MATHEMATICAL ITALIC CAPITAL RHO
1D72C ; [.1FD4.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL RHO
1D766 ; [.1FD4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
1D7A0 ; [.1FD4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
1D68 ; [.1FD4.0020.0015] # GREEK SUBSCRIPT SMALL LETTER RHO
1FE4 ; [.1FD4.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER RHO WITH PSILI
1FE5 ; [.1FD4.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER RHO WITH DASIA
1FEC ; [.1FD4.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER RHO WITH DASIA
1D29 ; [.1FD5.0020.0002] # GREEK LETTER SMALL CAPITAL RHO
03FC ; [.1FD6.0020.0002] # GREEK RHO WITH STROKE SYMBOL
03C3 ; [.1FD7.0020.0002] # GREEK SMALL LETTER SIGMA
03F2 ; [.1FD7.0020.0004] # GREEK LUNATE SIGMA SYMBOL
1D6D3 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD SMALL FINAL SIGMA
1D6D4 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD SMALL SIGMA
1D70D ; [.1FD7.0020.0005] # MATHEMATICAL ITALIC SMALL FINAL SIGMA
1D70E ; [.1FD7.0020.0005] # MATHEMATICAL ITALIC SMALL SIGMA
1D747 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
1D748 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL SIGMA
1D781 ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
1D782 ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
1D7BB ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
1D7BC ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
03A3 ; [.1FD7.0020.0008] # GREEK CAPITAL LETTER SIGMA
03F9 ; [.1FD7.0020.000A] # GREEK CAPITAL LUNATE SIGMA SYMBOL
1D6BA ; [.1FD7.0020.000B] # MATHEMATICAL BOLD CAPITAL SIGMA
1D6F4 ; [.1FD7.0020.000B] # MATHEMATICAL ITALIC CAPITAL SIGMA
1D72E ; [.1FD7.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
1D768 ; [.1FD7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
1D7A2 ; [.1FD7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
03C2 ; [.1FD7.0020.0019] # GREEK SMALL LETTER FINAL SIGMA
037C ; [.1FD8.0020.0002] # GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
03FE ; [.1FD8.0020.0008] # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
037B ; [.1FD9.0020.0002] # GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
03FD ; [.1FD9.0020.0008] # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
037D ; [.1FDA.0020.0002] # GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
03FF ; [.1FDA.0020.0008] # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
03C4 ; [.1FDB.0020.0002] # GREEK SMALL LETTER TAU
1D6D5 ; [.1FDB.0020.0005] # MATHEMATICAL BOLD SMALL TAU
1D70F ; [.1FDB.0020.0005] # MATHEMATICAL ITALIC SMALL TAU
1D749 ; [.1FDB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL TAU
1D783 ; [.1FDB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL TAU
1D7BD ; [.1FDB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
03A4 ; [.1FDB.0020.0008] # GREEK CAPITAL LETTER TAU
1D6BB ; [.1FDB.0020.000B] # MATHEMATICAL BOLD CAPITAL TAU
1D6F5 ; [.1FDB.0020.000B] # MATHEMATICAL ITALIC CAPITAL TAU
1D72F ; [.1FDB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL TAU
1D769 ; [.1FDB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
1D7A3 ; [.1FDB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
03C5 ; [.1FDC.0020.0002] # GREEK SMALL LETTER UPSILON
1D6D6 ; [.1FDC.0020.0005] # MATHEMATICAL BOLD SMALL UPSILON
1D710 ; [.1FDC.0020.0005] # MATHEMATICAL ITALIC SMALL UPSILON
1D74A ; [.1FDC.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL UPSILON
1D784 ; [.1FDC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
1D7BE ; [.1FDC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
03A5 ; [.1FDC.0020.0008] # GREEK CAPITAL LETTER UPSILON
03D2 ; [.1FDC.0020.000A] # GREEK UPSILON WITH HOOK SYMBOL
1D6BC ; [.1FDC.0020.000B] # MATHEMATICAL BOLD CAPITAL UPSILON
1D6F6 ; [.1FDC.0020.000B] # MATHEMATICAL ITALIC CAPITAL UPSILON
1D730 ; [.1FDC.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
1D76A ; [.1FDC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
1D7A4 ; [.1FDC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
1F50 ; [.1FDC.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER UPSILON WITH PSILI
1F54 ; [.1FDC.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
1F52 ; [.1FDC.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
1F56 ; [.1FDC.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
1F51 ; [.1FDC.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER UPSILON WITH DASIA
1F59 ; [.1FDC.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA
1F55 ; [.1FDC.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
1F5D ; [.1FDC.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
1F53 ; [.1FDC.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
1F5B ; [.1FDC.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
1F57 ; [.1FDC.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
1F5F ; [.1FDC.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
03CD ; [.1FDC.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH TONOS
1F7B ; [.1FDC.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH OXIA
038E ; [.1FDC.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH TONOS
1FEB ; [.1FDC.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH OXIA
03D3 ; [.1FDC.0020.000A][.0000.0024.0002] # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
1F7A ; [.1FDC.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH VARIA
1FEA ; [.1FDC.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH VARIA
1FE0 ; [.1FDC.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER UPSILON WITH VRACHY
1FE8 ; [.1FDC.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER UPSILON WITH VRACHY
1FE6 ; [.1FDC.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
03CB ; [.1FDC.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
03AB ; [.1FDC.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
03D4 ; [.1FDC.0020.000A][.0000.002B.0002] # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
03B0 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
1FE3 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
1FE2 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
1FE7 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
1FE1 ; [.1FDC.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER UPSILON WITH MACRON
1FE9 ; [.1FDC.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER UPSILON WITH MACRON
03C6 ; [.1FDD.0020.0002] # GREEK SMALL LETTER PHI
03D5 ; [.1FDD.0020.0004] # GREEK PHI SYMBOL
1D6D7 ; [.1FDD.0020.0005] # MATHEMATICAL BOLD SMALL PHI
1D6DF ; [.1FDD.0020.0005] # MATHEMATICAL BOLD PHI SYMBOL
1D711 ; [.1FDD.0020.0005] # MATHEMATICAL ITALIC SMALL PHI
1D719 ; [.1FDD.0020.0005] # MATHEMATICAL ITALIC PHI SYMBOL
1D74B ; [.1FDD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PHI
1D753 ; [.1FDD.0020.0005] # MATHEMATICAL BOLD ITALIC PHI SYMBOL
1D785 ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PHI
1D78D ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
1D7BF ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
1D7C7 ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
03A6 ; [.1FDD.0020.0008] # GREEK CAPITAL LETTER PHI
1D6BD ; [.1FDD.0020.000B] # MATHEMATICAL BOLD CAPITAL PHI
1D6F7 ; [.1FDD.0020.000B] # MATHEMATICAL ITALIC CAPITAL PHI
1D731 ; [.1FDD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PHI
1D76B ; [.1FDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
1D7A5 ; [.1FDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
1D60 ; [.1FDD.0020.0014] # MODIFIER LETTER SMALL GREEK PHI
1D69 ; [.1FDD.0020.0015] # GREEK SUBSCRIPT SMALL LETTER PHI
03C7 ; [.1FDE.0020.0002] # GREEK SMALL LETTER CHI
1D6D8 ; [.1FDE.0020.0005] # MATHEMATICAL BOLD SMALL CHI
1D712 ; [.1FDE.0020.0005] # MATHEMATICAL ITALIC SMALL CHI
1D74C ; [.1FDE.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL CHI
1D786 ; [.1FDE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL CHI
1D7C0 ; [.1FDE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
03A7 ; [.1FDE.0020.0008] # GREEK CAPITAL LETTER CHI
1D6BE ; [.1FDE.0020.000B] # MATHEMATICAL BOLD CAPITAL CHI
1D6F8 ; [.1FDE.0020.000B] # MATHEMATICAL ITALIC CAPITAL CHI
1D732 ; [.1FDE.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL CHI
1D76C ; [.1FDE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
1D7A6 ; [.1FDE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
1D61 ; [.1FDE.0020.0014] # MODIFIER LETTER SMALL CHI
1D6A ; [.1FDE.0020.0015] # GREEK SUBSCRIPT SMALL LETTER CHI
03C8 ; [.1FDF.0020.0002] # GREEK SMALL LETTER PSI
1D6D9 ; [.1FDF.0020.0005] # MATHEMATICAL BOLD SMALL PSI
1D713 ; [.1FDF.0020.0005] # MATHEMATICAL ITALIC SMALL PSI
1D74D ; [.1FDF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PSI
1D787 ; [.1FDF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PSI
1D7C1 ; [.1FDF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
03A8 ; [.1FDF.0020.0008] # GREEK CAPITAL LETTER PSI
1D6BF ; [.1FDF.0020.000B] # MATHEMATICAL BOLD CAPITAL PSI
1D6F9 ; [.1FDF.0020.000B] # MATHEMATICAL ITALIC CAPITAL PSI
1D733 ; [.1FDF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PSI
1D76D ; [.1FDF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
1D7A7 ; [.1FDF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
1D2A ; [.1FE0.0020.0002] # GREEK LETTER SMALL CAPITAL PSI
03C9 ; [.1FE1.0020.0002] # GREEK SMALL LETTER OMEGA
1D6DA ; [.1FE1.0020.0005] # MATHEMATICAL BOLD SMALL OMEGA
1D714 ; [.1FE1.0020.0005] # MATHEMATICAL ITALIC SMALL OMEGA
1D74E ; [.1FE1.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMEGA
1D788 ; [.1FE1.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
1D7C2 ; [.1FE1.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
03A9 ; [.1FE1.0020.0008] # GREEK CAPITAL LETTER OMEGA
2126 ; [.1FE1.0020.0008] # OHM SIGN
1D6C0 ; [.1FE1.0020.000B] # MATHEMATICAL BOLD CAPITAL OMEGA
1D6FA ; [.1FE1.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMEGA
1D734 ; [.1FE1.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
1D76E ; [.1FE1.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
1D7A8 ; [.1FE1.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
1F60 ; [.1FE1.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMEGA WITH PSILI
1F68 ; [.1FE1.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI
1F64 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
1F6C ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
1FA4 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
1FAC ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
1F62 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
1F6A ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
1FA2 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
1FAA ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
1F66 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
1F6E ; [.1FE1.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
1FA6 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
1FAE ; [.1FE1.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
1FA0 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
1FA8 ; [.1FE1.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
1F61 ; [.1FE1.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMEGA WITH DASIA
1F69 ; [.1FE1.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA
1F65 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
1F6D ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
1FA5 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
1FAD ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
1F63 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
1F6B ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
1FA3 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
1FAB ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
1F67 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
1F6F ; [.1FE1.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
1FA7 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
1FAF ; [.1FE1.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
1FA1 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
1FA9 ; [.1FE1.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
03CE ; [.1FE1.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH TONOS
1F7D ; [.1FE1.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH OXIA
038F ; [.1FE1.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH TONOS
1FFB ; [.1FE1.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH OXIA
1FF4 ; [.1FE1.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
1F7C ; [.1FE1.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH VARIA
1FFA ; [.1FE1.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH VARIA
1FF2 ; [.1FE1.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
1FF6 ; [.1FE1.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
1FF7 ; [.1FE1.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
1FF3 ; [.1FE1.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
1FFC ; [.1FE1.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
AB65 ; [.1FE2.0020.0002] # GREEK LETTER SMALL CAPITAL OMEGA
03E1 ; [.1FE3.0020.0002] # GREEK SMALL LETTER SAMPI
03E0 ; [.1FE3.0020.0008] # GREEK LETTER SAMPI
0373 ; [.1FE4.0020.0002] # GREEK SMALL LETTER ARCHAIC SAMPI
0372 ; [.1FE4.0020.0008] # GREEK CAPITAL LETTER ARCHAIC SAMPI
03F8 ; [.1FE5.0020.0002] # GREEK SMALL LETTER SHO
03F7 ; [.1FE5.0020.0008] # GREEK CAPITAL LETTER SHO
2C81 ; [.1FE6.0020.0002] # COPTIC SMALL LETTER ALFA
2C80 ; [.1FE6.0020.0008] # COPTIC CAPITAL LETTER ALFA
2C83 ; [.1FE7.0020.0002] # COPTIC SMALL LETTER VIDA
2C82 ; [.1FE7.0020.0008] # COPTIC CAPITAL LETTER VIDA
2C85 ; [.1FE8.0020.0002] # COPTIC SMALL LETTER GAMMA
2C84 ; [.1FE8.0020.0008] # COPTIC CAPITAL LETTER GAMMA
2C87 ; [.1FE9.0020.0002] # COPTIC SMALL LETTER DALDA
2C86 ; [.1FE9.0020.0008] # COPTIC CAPITAL LETTER DALDA
2C89 ; [.1FEA.0020.0002] # COPTIC SMALL LETTER EIE
2C88 ; [.1FEA.0020.0008] # COPTIC CAPITAL LETTER EIE
2CB7 ; [.1FEB.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
2CB6 ; [.1FEB.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
2C8B ; [.1FEC.0020.0002] # COPTIC SMALL LETTER SOU
2C8A ; [.1FEC.0020.0008] # COPTIC CAPITAL LETTER SOU
2C8D ; [.1FED.0020.0002] # COPTIC SMALL LETTER ZATA
2C8C ; [.1FED.0020.0008] # COPTIC CAPITAL LETTER ZATA
2C8F ; [.1FEE.0020.0002] # COPTIC SMALL LETTER HATE
2C8E ; [.1FEE.0020.0008] # COPTIC CAPITAL LETTER HATE
2C91 ; [.1FEF.0020.0002] # COPTIC SMALL LETTER THETHE
2C90 ; [.1FEF.0020.0008] # COPTIC CAPITAL LETTER THETHE
2C93 ; [.1FF0.0020.0002] # COPTIC SMALL LETTER IAUDA
2C92 ; [.1FF0.0020.0008] # COPTIC CAPITAL LETTER IAUDA
2C95 ; [.1FF1.0020.0002] # COPTIC SMALL LETTER KAPA
2C94 ; [.1FF1.0020.0008] # COPTIC CAPITAL LETTER KAPA
2CE4 ; [.1FF1.0020.0004][.1FE6.0020.0004][.1FF0.0020.0004] # COPTIC SYMBOL KAI
2CB9 ; [.1FF2.0020.0002] # COPTIC SMALL LETTER DIALECT-P KAPA
2CB8 ; [.1FF2.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P KAPA
2C97 ; [.1FF3.0020.0002] # COPTIC SMALL LETTER LAULA
2C96 ; [.1FF3.0020.0008] # COPTIC CAPITAL LETTER LAULA
2C99 ; [.1FF4.0020.0002] # COPTIC SMALL LETTER MI
2C98 ; [.1FF4.0020.0008] # COPTIC CAPITAL LETTER MI
2C9B ; [.1FF5.0020.0002] # COPTIC SMALL LETTER NI
2C9A ; [.1FF5.0020.0008] # COPTIC CAPITAL LETTER NI
2CBB ; [.1FF6.0020.0002] # COPTIC SMALL LETTER DIALECT-P NI
2CBA ; [.1FF6.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P NI
2CBD ; [.1FF7.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC NI
2CBC ; [.1FF7.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
2C9D ; [.1FF8.0020.0002] # COPTIC SMALL LETTER KSI
2C9C ; [.1FF8.0020.0008] # COPTIC CAPITAL LETTER KSI
2C9F ; [.1FF9.0020.0002] # COPTIC SMALL LETTER O
2C9E ; [.1FF9.0020.0008] # COPTIC CAPITAL LETTER O
2CA1 ; [.1FFA.0020.0002] # COPTIC SMALL LETTER PI
2CA0 ; [.1FFA.0020.0008] # COPTIC CAPITAL LETTER PI
2CA3 ; [.1FFB.0020.0002] # COPTIC SMALL LETTER RO
2CA2 ; [.1FFB.0020.0008] # COPTIC CAPITAL LETTER RO
2CA5 ; [.1FFC.0020.0002] # COPTIC SMALL LETTER SIMA
2CA4 ; [.1FFC.0020.0008] # COPTIC CAPITAL LETTER SIMA
2CA7 ; [.1FFD.0020.0002] # COPTIC SMALL LETTER TAU
2CA6 ; [.1FFD.0020.0008] # COPTIC CAPITAL LETTER TAU
2CA9 ; [.1FFE.0020.0002] # COPTIC SMALL LETTER UA
2CA8 ; [.1FFE.0020.0008] # COPTIC CAPITAL LETTER UA
2CAB ; [.1FFF.0020.0002] # COPTIC SMALL LETTER FI
2CAA ; [.1FFF.0020.0008] # COPTIC CAPITAL LETTER FI
2CAD ; [.2000.0020.0002] # COPTIC SMALL LETTER KHI
2CAC ; [.2000.0020.0008] # COPTIC CAPITAL LETTER KHI
2CAF ; [.2001.0020.0002] # COPTIC SMALL LETTER PSI
2CAE ; [.2001.0020.0008] # COPTIC CAPITAL LETTER PSI
2CB1 ; [.2002.0020.0002] # COPTIC SMALL LETTER OOU
2CB0 ; [.2002.0020.0008] # COPTIC CAPITAL LETTER OOU
2CBF ; [.2003.0020.0002] # COPTIC SMALL LETTER OLD COPTIC OOU
2CBE ; [.2003.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC OOU
2CC1 ; [.2004.0020.0002] # COPTIC SMALL LETTER SAMPI
2CC0 ; [.2004.0020.0008] # COPTIC CAPITAL LETTER SAMPI
03E3 ; [.2005.0020.0002] # COPTIC SMALL LETTER SHEI
03E2 ; [.2005.0020.0008] # COPTIC CAPITAL LETTER SHEI
2CEC ; [.2006.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
2CEB ; [.2006.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
2CC3 ; [.2007.0020.0002] # COPTIC SMALL LETTER CROSSED SHEI
2CC2 ; [.2007.0020.0008] # COPTIC CAPITAL LETTER CROSSED SHEI
2CC5 ; [.2008.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHEI
2CC4 ; [.2008.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHEI
2CC7 ; [.2009.0020.0002] # COPTIC SMALL LETTER OLD COPTIC ESH
2CC6 ; [.2009.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC ESH
03E5 ; [.200A.0020.0002] # COPTIC SMALL LETTER FEI
03E4 ; [.200A.0020.0008] # COPTIC CAPITAL LETTER FEI
03E7 ; [.200B.0020.0002] # COPTIC SMALL LETTER KHEI
03E6 ; [.200B.0020.0008] # COPTIC CAPITAL LETTER KHEI
2CF3 ; [.200C.0020.0002] # COPTIC SMALL LETTER BOHAIRIC KHEI
2CF2 ; [.200C.0020.0008] # COPTIC CAPITAL LETTER BOHAIRIC KHEI
2CC9 ; [.200D.0020.0002] # COPTIC SMALL LETTER AKHMIMIC KHEI
2CC8 ; [.200D.0020.0008] # COPTIC CAPITAL LETTER AKHMIMIC KHEI
03E9 ; [.200E.0020.0002] # COPTIC SMALL LETTER HORI
03E8 ; [.200E.0020.0008] # COPTIC CAPITAL LETTER HORI
2CCB ; [.200F.0020.0002] # COPTIC SMALL LETTER DIALECT-P HORI
2CCA ; [.200F.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P HORI
2CCD ; [.2010.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HORI
2CCC ; [.2010.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HORI
2CCF ; [.2011.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HA
2CCE ; [.2011.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HA
2CD1 ; [.2012.0020.0002] # COPTIC SMALL LETTER L-SHAPED HA
2CD0 ; [.2012.0020.0008] # COPTIC CAPITAL LETTER L-SHAPED HA
2CD3 ; [.2013.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HEI
2CD2 ; [.2013.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HEI
2CD5 ; [.2014.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HAT
2CD4 ; [.2014.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HAT
03EB ; [.2015.0020.0002] # COPTIC SMALL LETTER GANGIA
03EA ; [.2015.0020.0008] # COPTIC CAPITAL LETTER GANGIA
2CEE ; [.2016.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
2CED ; [.2016.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
2CD7 ; [.2017.0020.0002] # COPTIC SMALL LETTER OLD COPTIC GANGIA
2CD6 ; [.2017.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
03ED ; [.2018.0020.0002] # COPTIC SMALL LETTER SHIMA
03EC ; [.2018.0020.0008] # COPTIC CAPITAL LETTER SHIMA
2CD9 ; [.2019.0020.0002] # COPTIC SMALL LETTER OLD COPTIC DJA
2CD8 ; [.2019.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC DJA
2CDB ; [.201A.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHIMA
2CDA ; [.201A.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
2CDD ; [.201B.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN SHIMA
2CDC ; [.201B.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
03EF ; [.201C.0020.0002] # COPTIC SMALL LETTER DEI
03EE ; [.201C.0020.0008] # COPTIC CAPITAL LETTER DEI
2CB3 ; [.201D.0020.0002] # COPTIC SMALL LETTER DIALECT-P ALEF
2CB2 ; [.201D.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P ALEF
2CB5 ; [.201E.0020.0002] # COPTIC SMALL LETTER OLD COPTIC AIN
2CB4 ; [.201E.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC AIN
2CDF ; [.201F.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NGI
2CDE ; [.201F.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NGI
2CE1 ; [.2020.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NYI
2CE0 ; [.2020.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NYI
2CE3 ; [.2021.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN WAU
2CE2 ; [.2021.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN WAU
0430 ; [.2022.0020.0002] # CYRILLIC SMALL LETTER A
2DF6 ; [.2022.0020.0004] # COMBINING CYRILLIC LETTER A
0410 ; [.2022.0020.0008] # CYRILLIC CAPITAL LETTER A
04D1 ; [.2022.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER A WITH BREVE
04D0 ; [.2022.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER A WITH BREVE
04D3 ; [.2022.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER A WITH DIAERESIS
04D2 ; [.2022.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
04D9 ; [.2026.0020.0002] # CYRILLIC SMALL LETTER SCHWA
04D8 ; [.2026.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA
04DB ; [.2026.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
04DA ; [.2026.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
04D5 ; [.202A.0020.0002] # CYRILLIC SMALL LIGATURE A IE
04D4 ; [.202A.0020.0008] # CYRILLIC CAPITAL LIGATURE A IE
0431 ; [.202E.0020.0002] # CYRILLIC SMALL LETTER BE
2DE0 ; [.202E.0020.0004] # COMBINING CYRILLIC LETTER BE
0411 ; [.202E.0020.0008] # CYRILLIC CAPITAL LETTER BE
0432 ; [.2032.0020.0002] # CYRILLIC SMALL LETTER VE
1C80 ; [.2032.0020.0004] # CYRILLIC SMALL LETTER ROUNDED VE
2DE1 ; [.2032.0020.0004] # COMBINING CYRILLIC LETTER VE
0412 ; [.2032.0020.0008] # CYRILLIC CAPITAL LETTER VE
0433 ; [.2036.0020.0002] # CYRILLIC SMALL LETTER GHE
2DE2 ; [.2036.0020.0004] # COMBINING CYRILLIC LETTER GHE
0413 ; [.2036.0020.0008] # CYRILLIC CAPITAL LETTER GHE
0453 ; [.2036.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER GJE
0403 ; [.2036.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER GJE
0491 ; [.2036.0020.0004][.0000.0111.0004] # CYRILLIC SMALL LETTER GHE WITH UPTURN
0490 ; [.2036.0020.000A][.0000.0111.0004] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
0493 ; [.203A.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE
0492 ; [.203A.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE
04FB ; [.203E.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
04FA ; [.203E.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
0495 ; [.2042.0020.0002] # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
0494 ; [.2042.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
04F7 ; [.2046.0020.0002] # CYRILLIC SMALL LETTER GHE WITH DESCENDER
04F6 ; [.2046.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
0434 ; [.204A.0020.0002] # CYRILLIC SMALL LETTER DE
1C81 ; [.204A.0020.0004] # CYRILLIC SMALL LETTER LONG-LEGGED DE
2DE3 ; [.204A.0020.0004] # COMBINING CYRILLIC LETTER DE
0414 ; [.204A.0020.0008] # CYRILLIC CAPITAL LETTER DE
0501 ; [.204E.0020.0002] # CYRILLIC SMALL LETTER KOMI DE
0500 ; [.204E.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DE
A681 ; [.204F.0020.0002] # CYRILLIC SMALL LETTER DWE
A680 ; [.204F.0020.0008] # CYRILLIC CAPITAL LETTER DWE
0452 ; [.2050.0020.0002] # CYRILLIC SMALL LETTER DJE
0402 ; [.2050.0020.0008] # CYRILLIC CAPITAL LETTER DJE
A663 ; [.2054.0020.0002] # CYRILLIC SMALL LETTER SOFT DE
A662 ; [.2054.0020.0008] # CYRILLIC CAPITAL LETTER SOFT DE
0503 ; [.2055.0020.0002] # CYRILLIC SMALL LETTER KOMI DJE
0502 ; [.2055.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DJE
0499 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER ZE WITH DESCENDER
0498 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
0435 ; [.205A.0020.0002] # CYRILLIC SMALL LETTER IE
2DF7 ; [.205A.0020.0004] # COMBINING CYRILLIC LETTER IE
0415 ; [.205A.0020.0008] # CYRILLIC CAPITAL LETTER IE
0450 ; [.205A.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER IE WITH GRAVE
0400 ; [.205A.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER IE WITH GRAVE
04D7 ; [.205A.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER IE WITH BREVE
04D6 ; [.205A.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER IE WITH BREVE
0451 ; [.205A.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER IO
0401 ; [.205A.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER IO
0454 ; [.205E.0020.0002] # CYRILLIC SMALL LETTER UKRAINIAN IE
A674 ; [.205E.0020.0004] # COMBINING CYRILLIC LETTER UKRAINIAN IE
0404 ; [.205E.0020.0008] # CYRILLIC CAPITAL LETTER UKRAINIAN IE
0436 ; [.2062.0020.0002] # CYRILLIC SMALL LETTER ZHE
2DE4 ; [.2062.0020.0004] # COMBINING CYRILLIC LETTER ZHE
0416 ; [.2062.0020.0008] # CYRILLIC CAPITAL LETTER ZHE
04C2 ; [.2062.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER ZHE WITH BREVE
04C1 ; [.2062.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
04DD ; [.2062.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
04DC ; [.2062.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
052B ; [.2066.0020.0002] # CYRILLIC SMALL LETTER DZZHE
052A ; [.2066.0020.0008] # CYRILLIC CAPITAL LETTER DZZHE
A685 ; [.2067.0020.0002] # CYRILLIC SMALL LETTER ZHWE
A684 ; [.2067.0020.0008] # CYRILLIC CAPITAL LETTER ZHWE
0497 ; [.2068.0020.0002] # CYRILLIC SMALL LETTER ZHE WITH DESCENDER
0496 ; [.2068.0020.0008] # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
0437 ; [.206C.0020.0002] # CYRILLIC SMALL LETTER ZE
2DE5 ; [.206C.0020.0004] # COMBINING CYRILLIC LETTER ZE
0417 ; [.206C.0020.0008] # CYRILLIC CAPITAL LETTER ZE
04DF ; [.206C.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
04DE ; [.206C.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
A641 ; [.2070.0020.0002] # CYRILLIC SMALL LETTER ZEMLYA
A640 ; [.2070.0020.0008] # CYRILLIC CAPITAL LETTER ZEMLYA
0505 ; [.2071.0020.0002] # CYRILLIC SMALL LETTER KOMI ZJE
0504 ; [.2071.0020.0008] # CYRILLIC CAPITAL LETTER KOMI ZJE
0511 ; [.2072.0020.0002] # CYRILLIC SMALL LETTER REVERSED ZE
0510 ; [.2072.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED ZE
A643 ; [.2073.0020.0002] # CYRILLIC SMALL LETTER DZELO
A642 ; [.2073.0020.0008] # CYRILLIC CAPITAL LETTER DZELO
0455 ; [.2074.0020.0002] # CYRILLIC SMALL LETTER DZE
0405 ; [.2074.0020.0008] # CYRILLIC CAPITAL LETTER DZE
A645 ; [.2078.0020.0002] # CYRILLIC SMALL LETTER REVERSED DZE
A644 ; [.2078.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED DZE
04E1 ; [.2079.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN DZE
04E0 ; [.2079.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
A689 ; [.207D.0020.0002] # CYRILLIC SMALL LETTER DZZE
A688 ; [.207D.0020.0008] # CYRILLIC CAPITAL LETTER DZZE
0507 ; [.207E.0020.0002] # CYRILLIC SMALL LETTER KOMI DZJE
0506 ; [.207E.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DZJE
A683 ; [.207F.0020.0002] # CYRILLIC SMALL LETTER DZWE
A682 ; [.207F.0020.0008] # CYRILLIC CAPITAL LETTER DZWE
0438 ; [.2080.0020.0002] # CYRILLIC SMALL LETTER I
A675 ; [.2080.0020.0004] # COMBINING CYRILLIC LETTER I
0418 ; [.2080.0020.0008] # CYRILLIC CAPITAL LETTER I
045D ; [.2080.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER I WITH GRAVE
040D ; [.2080.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER I WITH GRAVE
04E5 ; [.2080.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER I WITH DIAERESIS
04E4 ; [.2080.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
04E3 ; [.2080.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER I WITH MACRON
04E2 ; [.2080.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER I WITH MACRON
048B ; [.2084.0020.0002] # CYRILLIC SMALL LETTER SHORT I WITH TAIL
048A ; [.2084.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
0456 ; [.2088.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0406 ; [.2088.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
0457 ; [.2088.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YI
A676 ; [.2088.0020.0004][.0000.002B.0004] # COMBINING CYRILLIC LETTER YI
0407 ; [.2088.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YI
A647 ; [.208C.0020.0002] # CYRILLIC SMALL LETTER IOTA
A646 ; [.208C.0020.0008] # CYRILLIC CAPITAL LETTER IOTA
0439 ; [.208D.0020.0002] # CYRILLIC SMALL LETTER SHORT I
0438 0306 ; [.208D.0020.0002] # CYRILLIC SMALL LETTER SHORT I
0419 ; [.208D.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I
0418 0306 ; [.208D.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I
0458 ; [.2091.0020.0002] # CYRILLIC SMALL LETTER JE
0408 ; [.2091.0020.0008] # CYRILLIC CAPITAL LETTER JE
A649 ; [.2095.0020.0002] # CYRILLIC SMALL LETTER DJERV
2DF8 ; [.2095.0020.0004] # COMBINING CYRILLIC LETTER DJERV
A648 ; [.2095.0020.0008] # CYRILLIC CAPITAL LETTER DJERV
043A ; [.2096.0020.0002] # CYRILLIC SMALL LETTER KA
2DE6 ; [.2096.0020.0004] # COMBINING CYRILLIC LETTER KA
041A ; [.2096.0020.0008] # CYRILLIC CAPITAL LETTER KA
045C ; [.2096.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER KJE
040C ; [.2096.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER KJE
049B ; [.209A.0020.0002] # CYRILLIC SMALL LETTER KA WITH DESCENDER
049A ; [.209A.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
04C4 ; [.209E.0020.0002] # CYRILLIC SMALL LETTER KA WITH HOOK
04C3 ; [.209E.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH HOOK
04A1 ; [.20A2.0020.0002] # CYRILLIC SMALL LETTER BASHKIR KA
04A0 ; [.20A2.0020.0008] # CYRILLIC CAPITAL LETTER BASHKIR KA
049F ; [.20A6.0020.0002] # CYRILLIC SMALL LETTER KA WITH STROKE
049E ; [.20A6.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH STROKE
049D ; [.20AA.0020.0002] # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
049C ; [.20AA.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
051F ; [.20AE.0020.0002] # CYRILLIC SMALL LETTER ALEUT KA
051E ; [.20AE.0020.0008] # CYRILLIC CAPITAL LETTER ALEUT KA
051B ; [.20AF.0020.0002] # CYRILLIC SMALL LETTER QA
051A ; [.20AF.0020.0008] # CYRILLIC CAPITAL LETTER QA
043B ; [.20B0.0020.0002] # CYRILLIC SMALL LETTER EL
2DE7 ; [.20B0.0020.0004] # COMBINING CYRILLIC LETTER EL
041B ; [.20B0.0020.0008] # CYRILLIC CAPITAL LETTER EL
1D2B ; [.20B4.0020.0002] # CYRILLIC LETTER SMALL CAPITAL EL
04C6 ; [.20B5.0020.0002] # CYRILLIC SMALL LETTER EL WITH TAIL
04C5 ; [.20B5.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH TAIL
052F ; [.20B9.0020.0002] # CYRILLIC SMALL LETTER EL WITH DESCENDER
052E ; [.20B9.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH DESCENDER
0513 ; [.20BA.0020.0002] # CYRILLIC SMALL LETTER EL WITH HOOK
0512 ; [.20BA.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH HOOK
0521 ; [.20BB.0020.0002] # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
0520 ; [.20BB.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
0459 ; [.20BC.0020.0002] # CYRILLIC SMALL LETTER LJE
0409 ; [.20BC.0020.0008] # CYRILLIC CAPITAL LETTER LJE
A665 ; [.20C0.0020.0002] # CYRILLIC SMALL LETTER SOFT EL
A664 ; [.20C0.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EL
0509 ; [.20C1.0020.0002] # CYRILLIC SMALL LETTER KOMI LJE
0508 ; [.20C1.0020.0008] # CYRILLIC CAPITAL LETTER KOMI LJE
0515 ; [.20C2.0020.0002] # CYRILLIC SMALL LETTER LHA
0514 ; [.20C2.0020.0008] # CYRILLIC CAPITAL LETTER LHA
043C ; [.20C3.0020.0002] # CYRILLIC SMALL LETTER EM
2DE8 ; [.20C3.0020.0004] # COMBINING CYRILLIC LETTER EM
041C ; [.20C3.0020.0008] # CYRILLIC CAPITAL LETTER EM
04CE ; [.20C7.0020.0002] # CYRILLIC SMALL LETTER EM WITH TAIL
04CD ; [.20C7.0020.0008] # CYRILLIC CAPITAL LETTER EM WITH TAIL
A667 ; [.20CB.0020.0002] # CYRILLIC SMALL LETTER SOFT EM
A666 ; [.20CB.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EM
043D ; [.20CC.0020.0002] # CYRILLIC SMALL LETTER EN
2DE9 ; [.20CC.0020.0004] # COMBINING CYRILLIC LETTER EN
041D ; [.20CC.0020.0008] # CYRILLIC CAPITAL LETTER EN
1D78 ; [.20CC.0020.0014] # MODIFIER LETTER CYRILLIC EN
0529 ; [.20D0.0020.0002] # CYRILLIC SMALL LETTER EN WITH LEFT HOOK
0528 ; [.20D0.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
04CA ; [.20D1.0020.0002] # CYRILLIC SMALL LETTER EN WITH TAIL
04C9 ; [.20D1.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH TAIL
04A3 ; [.20D5.0020.0002] # CYRILLIC SMALL LETTER EN WITH DESCENDER
04A2 ; [.20D5.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
04C8 ; [.20D9.0020.0002] # CYRILLIC SMALL LETTER EN WITH HOOK
04C7 ; [.20D9.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH HOOK
0523 ; [.20DD.0020.0002] # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
0522 ; [.20DD.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
04A5 ; [.20DE.0020.0002] # CYRILLIC SMALL LIGATURE EN GHE
04A4 ; [.20DE.0020.0008] # CYRILLIC CAPITAL LIGATURE EN GHE
045A ; [.20E2.0020.0002] # CYRILLIC SMALL LETTER NJE
040A ; [.20E2.0020.0008] # CYRILLIC CAPITAL LETTER NJE
050B ; [.20E6.0020.0002] # CYRILLIC SMALL LETTER KOMI NJE
050A ; [.20E6.0020.0008] # CYRILLIC CAPITAL LETTER KOMI NJE
043E ; [.20E7.0020.0002] # CYRILLIC SMALL LETTER O
1C82 ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER NARROW O
2DEA ; [.20E7.0020.0004] # COMBINING CYRILLIC LETTER O
A669 ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER MONOCULAR O
A66B ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER BINOCULAR O
A66D ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
A66E ; [.20E7.0020.0004] # CYRILLIC LETTER MULTIOCULAR O
A699 ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER DOUBLE O
A69B ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER CROSSED O
041E ; [.20E7.0020.0008] # CYRILLIC CAPITAL LETTER O
A668 ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER MONOCULAR O
A66A ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER BINOCULAR O
A66C ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
A698 ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE O
A69A ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER CROSSED O
04E7 ; [.20E7.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER O WITH DIAERESIS
04E6 ; [.20E7.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
04E9 ; [.20EB.0020.0002] # CYRILLIC SMALL LETTER BARRED O
04E8 ; [.20EB.0020.0008] # CYRILLIC CAPITAL LETTER BARRED O
04EB ; [.20EB.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
04EA ; [.20EB.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
043F ; [.20EF.0020.0002] # CYRILLIC SMALL LETTER PE
2DEB ; [.20EF.0020.0004] # COMBINING CYRILLIC LETTER PE
041F ; [.20EF.0020.0008] # CYRILLIC CAPITAL LETTER PE
0525 ; [.20F3.0020.0002] # CYRILLIC SMALL LETTER PE WITH DESCENDER
0524 ; [.20F3.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
04A7 ; [.20F4.0020.0002] # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
04A6 ; [.20F4.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
0481 ; [.20F8.0020.0002] # CYRILLIC SMALL LETTER KOPPA
0480 ; [.20F8.0020.0008] # CYRILLIC CAPITAL LETTER KOPPA
0440 ; [.20FC.0020.0002] # CYRILLIC SMALL LETTER ER
2DEC ; [.20FC.0020.0004] # COMBINING CYRILLIC LETTER ER
0420 ; [.20FC.0020.0008] # CYRILLIC CAPITAL LETTER ER
048F ; [.2100.0020.0002] # CYRILLIC SMALL LETTER ER WITH TICK
048E ; [.2100.0020.0008] # CYRILLIC CAPITAL LETTER ER WITH TICK
0517 ; [.2104.0020.0002] # CYRILLIC SMALL LETTER RHA
0516 ; [.2104.0020.0008] # CYRILLIC CAPITAL LETTER RHA
0441 ; [.2105.0020.0002] # CYRILLIC SMALL LETTER ES
1C83 ; [.2105.0020.0004] # CYRILLIC SMALL LETTER WIDE ES
2DED ; [.2105.0020.0004] # COMBINING CYRILLIC LETTER ES
0421 ; [.2105.0020.0008] # CYRILLIC CAPITAL LETTER ES
2DF5 ; [.2105.0020.0004][.210E.0020.0004] # COMBINING CYRILLIC LETTER ES-TE
050D ; [.2109.0020.0002] # CYRILLIC SMALL LETTER KOMI SJE
050C ; [.2109.0020.0008] # CYRILLIC CAPITAL LETTER KOMI SJE
04AB ; [.210A.0020.0002] # CYRILLIC SMALL LETTER ES WITH DESCENDER
04AA ; [.210A.0020.0008] # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
0442 ; [.210E.0020.0002] # CYRILLIC SMALL LETTER TE
1C84 ; [.210E.0020.0004] # CYRILLIC SMALL LETTER TALL TE
1C85 ; [.210E.0020.0004] # CYRILLIC SMALL LETTER THREE-LEGGED TE
2DEE ; [.210E.0020.0004] # COMBINING CYRILLIC LETTER TE
0422 ; [.210E.0020.0008] # CYRILLIC CAPITAL LETTER TE
A68D ; [.2112.0020.0002] # CYRILLIC SMALL LETTER TWE
A68C ; [.2112.0020.0008] # CYRILLIC CAPITAL LETTER TWE
050F ; [.2113.0020.0002] # CYRILLIC SMALL LETTER KOMI TJE
050E ; [.2113.0020.0008] # CYRILLIC CAPITAL LETTER KOMI TJE
04AD ; [.2114.0020.0002] # CYRILLIC SMALL LETTER TE WITH DESCENDER
04AC ; [.2114.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
A68B ; [.2118.0020.0002] # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
A68A ; [.2118.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
045B ; [.2119.0020.0002] # CYRILLIC SMALL LETTER TSHE
040B ; [.2119.0020.0008] # CYRILLIC CAPITAL LETTER TSHE
0443 ; [.211D.0020.0002] # CYRILLIC SMALL LETTER U
A677 ; [.211D.0020.0004] # COMBINING CYRILLIC LETTER U
0423 ; [.211D.0020.0008] # CYRILLIC CAPITAL LETTER U
045E ; [.211D.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT U
040E ; [.211D.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT U
04F1 ; [.211D.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER U WITH DIAERESIS
04F0 ; [.211D.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
04F3 ; [.211D.0020.0002][.0000.002C.0002] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
04F2 ; [.211D.0020.0008][.0000.002C.0002] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
04EF ; [.211D.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER U WITH MACRON
04EE ; [.211D.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER U WITH MACRON
04AF ; [.2121.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U
04AE ; [.2121.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U
04B1 ; [.2125.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
04B0 ; [.2125.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
A64B ; [.2129.0020.0002] # CYRILLIC SMALL LETTER MONOGRAPH UK
1C88 ; [.2129.0020.0004] # CYRILLIC SMALL LETTER UNBLENDED UK
2DF9 ; [.2129.0020.0004] # COMBINING CYRILLIC LETTER MONOGRAPH UK
A64A ; [.2129.0020.0008] # CYRILLIC CAPITAL LETTER MONOGRAPH UK
0479 ; [.212A.0020.0002] # CYRILLIC SMALL LETTER UK
0478 ; [.212A.0020.0008] # CYRILLIC CAPITAL LETTER UK
0444 ; [.212E.0020.0002] # CYRILLIC SMALL LETTER EF
A69E ; [.212E.0020.0004] # COMBINING CYRILLIC LETTER EF
0424 ; [.212E.0020.0008] # CYRILLIC CAPITAL LETTER EF
0445 ; [.2132.0020.0002] # CYRILLIC SMALL LETTER HA
2DEF ; [.2132.0020.0004] # COMBINING CYRILLIC LETTER HA
0425 ; [.2132.0020.0008] # CYRILLIC CAPITAL LETTER HA
04FD ; [.2136.0020.0002] # CYRILLIC SMALL LETTER HA WITH HOOK
04FC ; [.2136.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH HOOK
04FF ; [.213A.0020.0002] # CYRILLIC SMALL LETTER HA WITH STROKE
04FE ; [.213A.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH STROKE
04B3 ; [.213E.0020.0002] # CYRILLIC SMALL LETTER HA WITH DESCENDER
04B2 ; [.213E.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
04BB ; [.2142.0020.0002] # CYRILLIC SMALL LETTER SHHA
04BA ; [.2142.0020.0008] # CYRILLIC CAPITAL LETTER SHHA
0527 ; [.2146.0020.0002] # CYRILLIC SMALL LETTER SHHA WITH DESCENDER
0526 ; [.2146.0020.0008] # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
A695 ; [.2147.0020.0002] # CYRILLIC SMALL LETTER HWE
A694 ; [.2147.0020.0008] # CYRILLIC CAPITAL LETTER HWE
0461 ; [.2148.0020.0002] # CYRILLIC SMALL LETTER OMEGA
A67B ; [.2148.0020.0004] # COMBINING CYRILLIC LETTER OMEGA
0460 ; [.2148.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA
047F ; [.214C.0020.0002] # CYRILLIC SMALL LETTER OT
047E ; [.214C.0020.0008] # CYRILLIC CAPITAL LETTER OT
A64D ; [.2150.0020.0002] # CYRILLIC SMALL LETTER BROAD OMEGA
A64C ; [.2150.0020.0008] # CYRILLIC CAPITAL LETTER BROAD OMEGA
047D ; [.2151.0020.0002] # CYRILLIC SMALL LETTER OMEGA WITH TITLO
047C ; [.2151.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
047B ; [.2155.0020.0002] # CYRILLIC SMALL LETTER ROUND OMEGA
047A ; [.2155.0020.0008] # CYRILLIC CAPITAL LETTER ROUND OMEGA
0446 ; [.2159.0020.0002] # CYRILLIC SMALL LETTER TSE
2DF0 ; [.2159.0020.0004] # COMBINING CYRILLIC LETTER TSE
0426 ; [.2159.0020.0008] # CYRILLIC CAPITAL LETTER TSE
A661 ; [.215D.0020.0002] # CYRILLIC SMALL LETTER REVERSED TSE
A660 ; [.215D.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED TSE
A68F ; [.215E.0020.0002] # CYRILLIC SMALL LETTER TSWE
A68E ; [.215E.0020.0008] # CYRILLIC CAPITAL LETTER TSWE
04B5 ; [.215F.0020.0002] # CYRILLIC SMALL LIGATURE TE TSE
04B4 ; [.215F.0020.0008] # CYRILLIC CAPITAL LIGATURE TE TSE
A691 ; [.2163.0020.0002] # CYRILLIC SMALL LETTER TSSE
A690 ; [.2163.0020.0008] # CYRILLIC CAPITAL LETTER TSSE
0447 ; [.2164.0020.0002] # CYRILLIC SMALL LETTER CHE
2DF1 ; [.2164.0020.0004] # COMBINING CYRILLIC LETTER CHE
0427 ; [.2164.0020.0008] # CYRILLIC CAPITAL LETTER CHE
04F5 ; [.2164.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
04F4 ; [.2164.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
052D ; [.2168.0020.0002] # CYRILLIC SMALL LETTER DCHE
052C ; [.2168.0020.0008] # CYRILLIC CAPITAL LETTER DCHE
A693 ; [.2169.0020.0002] # CYRILLIC SMALL LETTER TCHE
A692 ; [.2169.0020.0008] # CYRILLIC CAPITAL LETTER TCHE
04B7 ; [.216A.0020.0002] # CYRILLIC SMALL LETTER CHE WITH DESCENDER
04B6 ; [.216A.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
04CC ; [.216E.0020.0002] # CYRILLIC SMALL LETTER KHAKASSIAN CHE
04CB ; [.216E.0020.0008] # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
04B9 ; [.2172.0020.0002] # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
04B8 ; [.2172.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
A687 ; [.2176.0020.0002] # CYRILLIC SMALL LETTER CCHE
A686 ; [.2176.0020.0008] # CYRILLIC CAPITAL LETTER CCHE
04BD ; [.2177.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE
04BC ; [.2177.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
04BF ; [.217B.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
04BE ; [.217B.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
045F ; [.217F.0020.0002] # CYRILLIC SMALL LETTER DZHE
040F ; [.217F.0020.0008] # CYRILLIC CAPITAL LETTER DZHE
0448 ; [.2183.0020.0002] # CYRILLIC SMALL LETTER SHA
2DF2 ; [.2183.0020.0004] # COMBINING CYRILLIC LETTER SHA
0428 ; [.2183.0020.0008] # CYRILLIC CAPITAL LETTER SHA
A697 ; [.2187.0020.0002] # CYRILLIC SMALL LETTER SHWE
A696 ; [.2187.0020.0008] # CYRILLIC CAPITAL LETTER SHWE
0449 ; [.2188.0020.0002] # CYRILLIC SMALL LETTER SHCHA
2DF3 ; [.2188.0020.0004] # COMBINING CYRILLIC LETTER SHCHA
0429 ; [.2188.0020.0008] # CYRILLIC CAPITAL LETTER SHCHA
A64F ; [.218C.0020.0002] # CYRILLIC SMALL LETTER NEUTRAL YER
A64E ; [.218C.0020.0008] # CYRILLIC CAPITAL LETTER NEUTRAL YER
2E2F ; [.218D.0020.0002] # VERTICAL TILDE
A67F ; [.218E.0020.0002] # CYRILLIC PAYEROK
044A ; [.218F.0020.0002] # CYRILLIC SMALL LETTER HARD SIGN
1C86 ; [.218F.0020.0004] # CYRILLIC SMALL LETTER TALL HARD SIGN
A678 ; [.218F.0020.0004] # COMBINING CYRILLIC LETTER HARD SIGN
042A ; [.218F.0020.0008] # CYRILLIC CAPITAL LETTER HARD SIGN
A69C ; [.218F.0020.0014] # MODIFIER LETTER CYRILLIC HARD SIGN
A651 ; [.2193.0020.0002] # CYRILLIC SMALL LETTER YERU WITH BACK YER
A650 ; [.2193.0020.0008] # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
044B ; [.2194.0020.0002] # CYRILLIC SMALL LETTER YERU
A679 ; [.2194.0020.0004] # COMBINING CYRILLIC LETTER YERU
042B ; [.2194.0020.0008] # CYRILLIC CAPITAL LETTER YERU
04F9 ; [.2194.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
04F8 ; [.2194.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
044C ; [.2198.0020.0002] # CYRILLIC SMALL LETTER SOFT SIGN
A67A ; [.2198.0020.0004] # COMBINING CYRILLIC LETTER SOFT SIGN
042C ; [.2198.0020.0008] # CYRILLIC CAPITAL LETTER SOFT SIGN
A69D ; [.2198.0020.0014] # MODIFIER LETTER CYRILLIC SOFT SIGN
048D ; [.219C.0020.0002] # CYRILLIC SMALL LETTER SEMISOFT SIGN
048C ; [.219C.0020.0008] # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
0463 ; [.21A0.0020.0002] # CYRILLIC SMALL LETTER YAT
1C87 ; [.21A0.0020.0004] # CYRILLIC SMALL LETTER TALL YAT
2DFA ; [.21A0.0020.0004] # COMBINING CYRILLIC LETTER YAT
0462 ; [.21A0.0020.0008] # CYRILLIC CAPITAL LETTER YAT
A653 ; [.21A4.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED YAT
A652 ; [.21A4.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED YAT
044D ; [.21A5.0020.0002] # CYRILLIC SMALL LETTER E
042D ; [.21A5.0020.0008] # CYRILLIC CAPITAL LETTER E
04ED ; [.21A5.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER E WITH DIAERESIS
04EC ; [.21A5.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
044E ; [.21A9.0020.0002] # CYRILLIC SMALL LETTER YU
2DFB ; [.21A9.0020.0004] # COMBINING CYRILLIC LETTER YU
042E ; [.21A9.0020.0008] # CYRILLIC CAPITAL LETTER YU
A655 ; [.21AD.0020.0002] # CYRILLIC SMALL LETTER REVERSED YU
A654 ; [.21AD.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED YU
A657 ; [.21AE.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED A
2DFC ; [.21AE.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED A
A656 ; [.21AE.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED A
044F ; [.21AF.0020.0002] # CYRILLIC SMALL LETTER YA
042F ; [.21AF.0020.0008] # CYRILLIC CAPITAL LETTER YA
0519 ; [.21B3.0020.0002] # CYRILLIC SMALL LETTER YAE
0518 ; [.21B3.0020.0008] # CYRILLIC CAPITAL LETTER YAE
0465 ; [.21B4.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED E
A69F ; [.21B4.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED E
0464 ; [.21B4.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED E
0467 ; [.21B8.0020.0002] # CYRILLIC SMALL LETTER LITTLE YUS
2DFD ; [.21B8.0020.0004] # COMBINING CYRILLIC LETTER LITTLE YUS
0466 ; [.21B8.0020.0008] # CYRILLIC CAPITAL LETTER LITTLE YUS
A659 ; [.21BC.0020.0002] # CYRILLIC SMALL LETTER CLOSED LITTLE YUS
A658 ; [.21BC.0020.0008] # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
046B ; [.21BD.0020.0002] # CYRILLIC SMALL LETTER BIG YUS
2DFE ; [.21BD.0020.0004] # COMBINING CYRILLIC LETTER BIG YUS
046A ; [.21BD.0020.0008] # CYRILLIC CAPITAL LETTER BIG YUS
A65B ; [.21C1.0020.0002] # CYRILLIC SMALL LETTER BLENDED YUS
A65A ; [.21C1.0020.0008] # CYRILLIC CAPITAL LETTER BLENDED YUS
0469 ; [.21C2.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
0468 ; [.21C2.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
A65D ; [.21C6.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
A65C ; [.21C6.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
046D ; [.21C7.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED BIG YUS
2DFF ; [.21C7.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
046C ; [.21C7.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
046F ; [.21CB.0020.0002] # CYRILLIC SMALL LETTER KSI
046E ; [.21CB.0020.0008] # CYRILLIC CAPITAL LETTER KSI
0471 ; [.21CF.0020.0002] # CYRILLIC SMALL LETTER PSI
0470 ; [.21CF.0020.0008] # CYRILLIC CAPITAL LETTER PSI
0473 ; [.21D3.0020.0002] # CYRILLIC SMALL LETTER FITA
2DF4 ; [.21D3.0020.0004] # COMBINING CYRILLIC LETTER FITA
0472 ; [.21D3.0020.0008] # CYRILLIC CAPITAL LETTER FITA
0475 ; [.21D7.0020.0002] # CYRILLIC SMALL LETTER IZHITSA
0474 ; [.21D7.0020.0008] # CYRILLIC CAPITAL LETTER IZHITSA
0477 ; [.21D7.0020.0002][.0000.003C.0002] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
0476 ; [.21D7.0020.0008][.0000.003C.0002] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
A65F ; [.21DB.0020.0002] # CYRILLIC SMALL LETTER YN
A65E ; [.21DB.0020.0008] # CYRILLIC CAPITAL LETTER YN
04A9 ; [.21DC.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN HA
04A8 ; [.21DC.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN HA
051D ; [.21E0.0020.0002] # CYRILLIC SMALL LETTER WE
051C ; [.21E0.0020.0008] # CYRILLIC CAPITAL LETTER WE
04CF ; [.21E1.0020.0002] # CYRILLIC SMALL LETTER PALOCHKA
04C0 ; [.21E1.0020.0008] # CYRILLIC LETTER PALOCHKA
2C30 ; [.21E5.0020.0002] # GLAGOLITIC SMALL LETTER AZU
1E000 ; [.21E5.0020.0004] # COMBINING GLAGOLITIC LETTER AZU
2C00 ; [.21E5.0020.0008] # GLAGOLITIC CAPITAL LETTER AZU
2C31 ; [.21E6.0020.0002] # GLAGOLITIC SMALL LETTER BUKY
1E001 ; [.21E6.0020.0004] # COMBINING GLAGOLITIC LETTER BUKY
2C01 ; [.21E6.0020.0008] # GLAGOLITIC CAPITAL LETTER BUKY
2C32 ; [.21E7.0020.0002] # GLAGOLITIC SMALL LETTER VEDE
1E002 ; [.21E7.0020.0004] # COMBINING GLAGOLITIC LETTER VEDE
2C02 ; [.21E7.0020.0008] # GLAGOLITIC CAPITAL LETTER VEDE
2C33 ; [.21E8.0020.0002] # GLAGOLITIC SMALL LETTER GLAGOLI
1E003 ; [.21E8.0020.0004] # COMBINING GLAGOLITIC LETTER GLAGOLI
2C03 ; [.21E8.0020.0008] # GLAGOLITIC CAPITAL LETTER GLAGOLI
2C34 ; [.21E9.0020.0002] # GLAGOLITIC SMALL LETTER DOBRO
1E004 ; [.21E9.0020.0004] # COMBINING GLAGOLITIC LETTER DOBRO
2C04 ; [.21E9.0020.0008] # GLAGOLITIC CAPITAL LETTER DOBRO
2C35 ; [.21EA.0020.0002] # GLAGOLITIC SMALL LETTER YESTU
1E005 ; [.21EA.0020.0004] # COMBINING GLAGOLITIC LETTER YESTU
2C05 ; [.21EA.0020.0008] # GLAGOLITIC CAPITAL LETTER YESTU
2C36 ; [.21EB.0020.0002] # GLAGOLITIC SMALL LETTER ZHIVETE
1E006 ; [.21EB.0020.0004] # COMBINING GLAGOLITIC LETTER ZHIVETE
2C06 ; [.21EB.0020.0008] # GLAGOLITIC CAPITAL LETTER ZHIVETE
2C37 ; [.21EC.0020.0002] # GLAGOLITIC SMALL LETTER DZELO
2C07 ; [.21EC.0020.0008] # GLAGOLITIC CAPITAL LETTER DZELO
2C38 ; [.21ED.0020.0002] # GLAGOLITIC SMALL LETTER ZEMLJA
1E008 ; [.21ED.0020.0004] # COMBINING GLAGOLITIC LETTER ZEMLJA
2C08 ; [.21ED.0020.0008] # GLAGOLITIC CAPITAL LETTER ZEMLJA
2C39 ; [.21EE.0020.0002] # GLAGOLITIC SMALL LETTER IZHE
1E009 ; [.21EE.0020.0004] # COMBINING GLAGOLITIC LETTER IZHE
2C09 ; [.21EE.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHE
2C3A ; [.21EF.0020.0002] # GLAGOLITIC SMALL LETTER INITIAL IZHE
1E00A ; [.21EF.0020.0004] # COMBINING GLAGOLITIC LETTER INITIAL IZHE
2C0A ; [.21EF.0020.0008] # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
2C3B ; [.21F0.0020.0002] # GLAGOLITIC SMALL LETTER I
1E00B ; [.21F0.0020.0004] # COMBINING GLAGOLITIC LETTER I
2C0B ; [.21F0.0020.0008] # GLAGOLITIC CAPITAL LETTER I
2C3C ; [.21F1.0020.0002] # GLAGOLITIC SMALL LETTER DJERVI
1E00C ; [.21F1.0020.0004] # COMBINING GLAGOLITIC LETTER DJERVI
2C0C ; [.21F1.0020.0008] # GLAGOLITIC CAPITAL LETTER DJERVI
2C3D ; [.21F2.0020.0002] # GLAGOLITIC SMALL LETTER KAKO
1E00D ; [.21F2.0020.0004] # COMBINING GLAGOLITIC LETTER KAKO
2C0D ; [.21F2.0020.0008] # GLAGOLITIC CAPITAL LETTER KAKO
2C3E ; [.21F3.0020.0002] # GLAGOLITIC SMALL LETTER LJUDIJE
1E00E ; [.21F3.0020.0004] # COMBINING GLAGOLITIC LETTER LJUDIJE
2C0E ; [.21F3.0020.0008] # GLAGOLITIC CAPITAL LETTER LJUDIJE
2C3F ; [.21F4.0020.0002] # GLAGOLITIC SMALL LETTER MYSLITE
1E00F ; [.21F4.0020.0004] # COMBINING GLAGOLITIC LETTER MYSLITE
2C0F ; [.21F4.0020.0008] # GLAGOLITIC CAPITAL LETTER MYSLITE
2C40 ; [.21F5.0020.0002] # GLAGOLITIC SMALL LETTER NASHI
1E010 ; [.21F5.0020.0004] # COMBINING GLAGOLITIC LETTER NASHI
2C10 ; [.21F5.0020.0008] # GLAGOLITIC CAPITAL LETTER NASHI
2C41 ; [.21F6.0020.0002] # GLAGOLITIC SMALL LETTER ONU
1E011 ; [.21F6.0020.0004] # COMBINING GLAGOLITIC LETTER ONU
2C11 ; [.21F6.0020.0008] # GLAGOLITIC CAPITAL LETTER ONU
2C42 ; [.21F7.0020.0002] # GLAGOLITIC SMALL LETTER POKOJI
1E012 ; [.21F7.0020.0004] # COMBINING GLAGOLITIC LETTER POKOJI
2C12 ; [.21F7.0020.0008] # GLAGOLITIC CAPITAL LETTER POKOJI
2C43 ; [.21F8.0020.0002] # GLAGOLITIC SMALL LETTER RITSI
1E013 ; [.21F8.0020.0004] # COMBINING GLAGOLITIC LETTER RITSI
2C13 ; [.21F8.0020.0008] # GLAGOLITIC CAPITAL LETTER RITSI
2C44 ; [.21F9.0020.0002] # GLAGOLITIC SMALL LETTER SLOVO
1E014 ; [.21F9.0020.0004] # COMBINING GLAGOLITIC LETTER SLOVO
2C14 ; [.21F9.0020.0008] # GLAGOLITIC CAPITAL LETTER SLOVO
2C45 ; [.21FA.0020.0002] # GLAGOLITIC SMALL LETTER TVRIDO
1E015 ; [.21FA.0020.0004] # COMBINING GLAGOLITIC LETTER TVRIDO
2C15 ; [.21FA.0020.0008] # GLAGOLITIC CAPITAL LETTER TVRIDO
2C46 ; [.21FB.0020.0002] # GLAGOLITIC SMALL LETTER UKU
1E016 ; [.21FB.0020.0004] # COMBINING GLAGOLITIC LETTER UKU
2C16 ; [.21FB.0020.0008] # GLAGOLITIC CAPITAL LETTER UKU
2C47 ; [.21FC.0020.0002] # GLAGOLITIC SMALL LETTER FRITU
1E017 ; [.21FC.0020.0004] # COMBINING GLAGOLITIC LETTER FRITU
2C17 ; [.21FC.0020.0008] # GLAGOLITIC CAPITAL LETTER FRITU
2C48 ; [.21FD.0020.0002] # GLAGOLITIC SMALL LETTER HERU
1E018 ; [.21FD.0020.0004] # COMBINING GLAGOLITIC LETTER HERU
2C18 ; [.21FD.0020.0008] # GLAGOLITIC CAPITAL LETTER HERU
2C49 ; [.21FE.0020.0002] # GLAGOLITIC SMALL LETTER OTU
2C19 ; [.21FE.0020.0008] # GLAGOLITIC CAPITAL LETTER OTU
2C4A ; [.21FF.0020.0002] # GLAGOLITIC SMALL LETTER PE
2C1A ; [.21FF.0020.0008] # GLAGOLITIC CAPITAL LETTER PE
2C4B ; [.2200.0020.0002] # GLAGOLITIC SMALL LETTER SHTA
1E01B ; [.2200.0020.0004] # COMBINING GLAGOLITIC LETTER SHTA
2C1B ; [.2200.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTA
2C4C ; [.2201.0020.0002] # GLAGOLITIC SMALL LETTER TSI
1E01C ; [.2201.0020.0004] # COMBINING GLAGOLITIC LETTER TSI
2C1C ; [.2201.0020.0008] # GLAGOLITIC CAPITAL LETTER TSI
2C4D ; [.2202.0020.0002] # GLAGOLITIC SMALL LETTER CHRIVI
1E01D ; [.2202.0020.0004] # COMBINING GLAGOLITIC LETTER CHRIVI
2C1D ; [.2202.0020.0008] # GLAGOLITIC CAPITAL LETTER CHRIVI
2C4E ; [.2203.0020.0002] # GLAGOLITIC SMALL LETTER SHA
1E01E ; [.2203.0020.0004] # COMBINING GLAGOLITIC LETTER SHA
2C1E ; [.2203.0020.0008] # GLAGOLITIC CAPITAL LETTER SHA
2C4F ; [.2204.0020.0002] # GLAGOLITIC SMALL LETTER YERU
1E01F ; [.2204.0020.0004] # COMBINING GLAGOLITIC LETTER YERU
2C1F ; [.2204.0020.0008] # GLAGOLITIC CAPITAL LETTER YERU
2C50 ; [.2205.0020.0002] # GLAGOLITIC SMALL LETTER YERI
1E020 ; [.2205.0020.0004] # COMBINING GLAGOLITIC LETTER YERI
2C20 ; [.2205.0020.0008] # GLAGOLITIC CAPITAL LETTER YERI
2C51 ; [.2206.0020.0002] # GLAGOLITIC SMALL LETTER YATI
1E021 ; [.2206.0020.0004] # COMBINING GLAGOLITIC LETTER YATI
2C21 ; [.2206.0020.0008] # GLAGOLITIC CAPITAL LETTER YATI
2C52 ; [.2207.0020.0002] # GLAGOLITIC SMALL LETTER SPIDERY HA
2C22 ; [.2207.0020.0008] # GLAGOLITIC CAPITAL LETTER SPIDERY HA
2C53 ; [.2208.0020.0002] # GLAGOLITIC SMALL LETTER YU
1E023 ; [.2208.0020.0004] # COMBINING GLAGOLITIC LETTER YU
2C23 ; [.2208.0020.0008] # GLAGOLITIC CAPITAL LETTER YU
2C54 ; [.2209.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS
1E024 ; [.2209.0020.0004] # COMBINING GLAGOLITIC LETTER SMALL YUS
2C24 ; [.2209.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS
2C55 ; [.220A.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
2C25 ; [.220A.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
2C56 ; [.220B.0020.0002] # GLAGOLITIC SMALL LETTER YO
1E026 ; [.220B.0020.0004] # COMBINING GLAGOLITIC LETTER YO
2C26 ; [.220B.0020.0008] # GLAGOLITIC CAPITAL LETTER YO
2C57 ; [.220C.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
1E027 ; [.220C.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS
2C27 ; [.220C.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
2C58 ; [.220D.0020.0002] # GLAGOLITIC SMALL LETTER BIG YUS
1E028 ; [.220D.0020.0004] # COMBINING GLAGOLITIC LETTER BIG YUS
2C28 ; [.220D.0020.0008] # GLAGOLITIC CAPITAL LETTER BIG YUS
2C59 ; [.220E.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED BIG YUS
1E029 ; [.220E.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED BIG YUS
2C29 ; [.220E.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
2C5A ; [.220F.0020.0002] # GLAGOLITIC SMALL LETTER FITA
1E02A ; [.220F.0020.0004] # COMBINING GLAGOLITIC LETTER FITA
2C2A ; [.220F.0020.0008] # GLAGOLITIC CAPITAL LETTER FITA
2C5B ; [.2210.0020.0002] # GLAGOLITIC SMALL LETTER IZHITSA
2C2B ; [.2210.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHITSA
2C5C ; [.2211.0020.0002] # GLAGOLITIC SMALL LETTER SHTAPIC
2C2C ; [.2211.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTAPIC
2C5D ; [.2212.0020.0002] # GLAGOLITIC SMALL LETTER TROKUTASTI A
2C2D ; [.2212.0020.0008] # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
2C5E ; [.2213.0020.0002] # GLAGOLITIC SMALL LETTER LATINATE MYSLITE
2C2E ; [.2213.0020.0008] # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
10350 ; [.2214.0020.0002] # OLD PERMIC LETTER AN
10376 ; [.2214.0020.0004] # COMBINING OLD PERMIC LETTER AN
10351 ; [.2215.0020.0002] # OLD PERMIC LETTER BUR
10352 ; [.2216.0020.0002] # OLD PERMIC LETTER GAI
10353 ; [.2217.0020.0002] # OLD PERMIC LETTER DOI
10377 ; [.2217.0020.0004] # COMBINING OLD PERMIC LETTER DOI
10354 ; [.2218.0020.0002] # OLD PERMIC LETTER E
10355 ; [.2219.0020.0002] # OLD PERMIC LETTER ZHOI
10356 ; [.221A.0020.0002] # OLD PERMIC LETTER DZHOI
10357 ; [.221B.0020.0002] # OLD PERMIC LETTER ZATA
10378 ; [.221B.0020.0004] # COMBINING OLD PERMIC LETTER ZATA
10358 ; [.221C.0020.0002] # OLD PERMIC LETTER DZITA
10359 ; [.221D.0020.0002] # OLD PERMIC LETTER I
1035A ; [.221E.0020.0002] # OLD PERMIC LETTER KOKE
1035B ; [.221F.0020.0002] # OLD PERMIC LETTER LEI
1035C ; [.2220.0020.0002] # OLD PERMIC LETTER MENOE
1035D ; [.2221.0020.0002] # OLD PERMIC LETTER NENOE
10379 ; [.2221.0020.0004] # COMBINING OLD PERMIC LETTER NENOE
1035E ; [.2222.0020.0002] # OLD PERMIC LETTER VOOI
1035F ; [.2223.0020.0002] # OLD PERMIC LETTER PEEI
10360 ; [.2224.0020.0002] # OLD PERMIC LETTER REI
10361 ; [.2225.0020.0002] # OLD PERMIC LETTER SII
1037A ; [.2225.0020.0004] # COMBINING OLD PERMIC LETTER SII
10362 ; [.2226.0020.0002] # OLD PERMIC LETTER TAI
10363 ; [.2227.0020.0002] # OLD PERMIC LETTER U
10364 ; [.2228.0020.0002] # OLD PERMIC LETTER CHERY
10365 ; [.2229.0020.0002] # OLD PERMIC LETTER SHOOI
10366 ; [.222A.0020.0002] # OLD PERMIC LETTER SHCHOOI
10367 ; [.222B.0020.0002] # OLD PERMIC LETTER YRY
10368 ; [.222C.0020.0002] # OLD PERMIC LETTER YERU
10369 ; [.222D.0020.0002] # OLD PERMIC LETTER O
1036A ; [.222E.0020.0002] # OLD PERMIC LETTER OO
1036B ; [.222F.0020.0002] # OLD PERMIC LETTER EF
1036C ; [.2230.0020.0002] # OLD PERMIC LETTER HA
1036D ; [.2231.0020.0002] # OLD PERMIC LETTER TSIU
1036E ; [.2232.0020.0002] # OLD PERMIC LETTER VER
1036F ; [.2233.0020.0002] # OLD PERMIC LETTER YER
10370 ; [.2234.0020.0002] # OLD PERMIC LETTER YERI
10371 ; [.2235.0020.0002] # OLD PERMIC LETTER YAT
10372 ; [.2236.0020.0002] # OLD PERMIC LETTER IE
10373 ; [.2237.0020.0002] # OLD PERMIC LETTER YU
10374 ; [.2238.0020.0002] # OLD PERMIC LETTER YA
10375 ; [.2239.0020.0002] # OLD PERMIC LETTER IA
10D0 ; [.223A.0020.0002] # GEORGIAN LETTER AN
2D00 ; [.223B.0020.0002] # GEORGIAN SMALL LETTER AN
10A0 ; [.223B.0020.0008] # GEORGIAN CAPITAL LETTER AN
10D1 ; [.223C.0020.0002] # GEORGIAN LETTER BAN
2D01 ; [.223D.0020.0002] # GEORGIAN SMALL LETTER BAN
10A1 ; [.223D.0020.0008] # GEORGIAN CAPITAL LETTER BAN
10D2 ; [.223E.0020.0002] # GEORGIAN LETTER GAN
2D02 ; [.223F.0020.0002] # GEORGIAN SMALL LETTER GAN
10A2 ; [.223F.0020.0008] # GEORGIAN CAPITAL LETTER GAN
10D3 ; [.2240.0020.0002] # GEORGIAN LETTER DON
2D03 ; [.2241.0020.0002] # GEORGIAN SMALL LETTER DON
10A3 ; [.2241.0020.0008] # GEORGIAN CAPITAL LETTER DON
10D4 ; [.2242.0020.0002] # GEORGIAN LETTER EN
2D04 ; [.2243.0020.0002] # GEORGIAN SMALL LETTER EN
10A4 ; [.2243.0020.0008] # GEORGIAN CAPITAL LETTER EN
10D5 ; [.2244.0020.0002] # GEORGIAN LETTER VIN
2D05 ; [.2245.0020.0002] # GEORGIAN SMALL LETTER VIN
10A5 ; [.2245.0020.0008] # GEORGIAN CAPITAL LETTER VIN
10D6 ; [.2246.0020.0002] # GEORGIAN LETTER ZEN
2D06 ; [.2247.0020.0002] # GEORGIAN SMALL LETTER ZEN
10A6 ; [.2247.0020.0008] # GEORGIAN CAPITAL LETTER ZEN
10F1 ; [.2248.0020.0002] # GEORGIAN LETTER HE
2D21 ; [.2249.0020.0002] # GEORGIAN SMALL LETTER HE
10C1 ; [.2249.0020.0008] # GEORGIAN CAPITAL LETTER HE
10D7 ; [.224A.0020.0002] # GEORGIAN LETTER TAN
2D07 ; [.224B.0020.0002] # GEORGIAN SMALL LETTER TAN
10A7 ; [.224B.0020.0008] # GEORGIAN CAPITAL LETTER TAN
10D8 ; [.224C.0020.0002] # GEORGIAN LETTER IN
2D08 ; [.224D.0020.0002] # GEORGIAN SMALL LETTER IN
10A8 ; [.224D.0020.0008] # GEORGIAN CAPITAL LETTER IN
10D9 ; [.224E.0020.0002] # GEORGIAN LETTER KAN
2D09 ; [.224F.0020.0002] # GEORGIAN SMALL LETTER KAN
10A9 ; [.224F.0020.0008] # GEORGIAN CAPITAL LETTER KAN
10DA ; [.2250.0020.0002] # GEORGIAN LETTER LAS
2D0A ; [.2251.0020.0002] # GEORGIAN SMALL LETTER LAS
10AA ; [.2251.0020.0008] # GEORGIAN CAPITAL LETTER LAS
10DB ; [.2252.0020.0002] # GEORGIAN LETTER MAN
2D0B ; [.2253.0020.0002] # GEORGIAN SMALL LETTER MAN
10AB ; [.2253.0020.0008] # GEORGIAN CAPITAL LETTER MAN
10DC ; [.2254.0020.0002] # GEORGIAN LETTER NAR
10FC ; [.2254.0020.0014] # MODIFIER LETTER GEORGIAN NAR
2D0C ; [.2255.0020.0002] # GEORGIAN SMALL LETTER NAR
10AC ; [.2255.0020.0008] # GEORGIAN CAPITAL LETTER NAR
10F2 ; [.2256.0020.0002] # GEORGIAN LETTER HIE
2D22 ; [.2257.0020.0002] # GEORGIAN SMALL LETTER HIE
10C2 ; [.2257.0020.0008] # GEORGIAN CAPITAL LETTER HIE
10DD ; [.2258.0020.0002] # GEORGIAN LETTER ON
2D0D ; [.2259.0020.0002] # GEORGIAN SMALL LETTER ON
10AD ; [.2259.0020.0008] # GEORGIAN CAPITAL LETTER ON
10DE ; [.225A.0020.0002] # GEORGIAN LETTER PAR
2D0E ; [.225B.0020.0002] # GEORGIAN SMALL LETTER PAR
10AE ; [.225B.0020.0008] # GEORGIAN CAPITAL LETTER PAR
10DF ; [.225C.0020.0002] # GEORGIAN LETTER ZHAR
2D0F ; [.225D.0020.0002] # GEORGIAN SMALL LETTER ZHAR
10AF ; [.225D.0020.0008] # GEORGIAN CAPITAL LETTER ZHAR
10E0 ; [.225E.0020.0002] # GEORGIAN LETTER RAE
2D10 ; [.225F.0020.0002] # GEORGIAN SMALL LETTER RAE
10B0 ; [.225F.0020.0008] # GEORGIAN CAPITAL LETTER RAE
10E1 ; [.2260.0020.0002] # GEORGIAN LETTER SAN
2D11 ; [.2261.0020.0002] # GEORGIAN SMALL LETTER SAN
10B1 ; [.2261.0020.0008] # GEORGIAN CAPITAL LETTER SAN
10E2 ; [.2262.0020.0002] # GEORGIAN LETTER TAR
2D12 ; [.2263.0020.0002] # GEORGIAN SMALL LETTER TAR
10B2 ; [.2263.0020.0008] # GEORGIAN CAPITAL LETTER TAR
10F3 ; [.2264.0020.0002] # GEORGIAN LETTER WE
2D23 ; [.2265.0020.0002] # GEORGIAN SMALL LETTER WE
10C3 ; [.2265.0020.0008] # GEORGIAN CAPITAL LETTER WE
10E3 ; [.2266.0020.0002] # GEORGIAN LETTER UN
2D13 ; [.2267.0020.0002] # GEORGIAN SMALL LETTER UN
10B3 ; [.2267.0020.0008] # GEORGIAN CAPITAL LETTER UN
10E4 ; [.2268.0020.0002] # GEORGIAN LETTER PHAR
2D14 ; [.2269.0020.0002] # GEORGIAN SMALL LETTER PHAR
10B4 ; [.2269.0020.0008] # GEORGIAN CAPITAL LETTER PHAR
10E5 ; [.226A.0020.0002] # GEORGIAN LETTER KHAR
2D15 ; [.226B.0020.0002] # GEORGIAN SMALL LETTER KHAR
10B5 ; [.226B.0020.0008] # GEORGIAN CAPITAL LETTER KHAR
10E6 ; [.226C.0020.0002] # GEORGIAN LETTER GHAN
2D16 ; [.226D.0020.0002] # GEORGIAN SMALL LETTER GHAN
10B6 ; [.226D.0020.0008] # GEORGIAN CAPITAL LETTER GHAN
10E7 ; [.226E.0020.0002] # GEORGIAN LETTER QAR
2D17 ; [.226F.0020.0002] # GEORGIAN SMALL LETTER QAR
10B7 ; [.226F.0020.0008] # GEORGIAN CAPITAL LETTER QAR
10E8 ; [.2270.0020.0002] # GEORGIAN LETTER SHIN
2D18 ; [.2271.0020.0002] # GEORGIAN SMALL LETTER SHIN
10B8 ; [.2271.0020.0008] # GEORGIAN CAPITAL LETTER SHIN
10E9 ; [.2272.0020.0002] # GEORGIAN LETTER CHIN
2D19 ; [.2273.0020.0002] # GEORGIAN SMALL LETTER CHIN
10B9 ; [.2273.0020.0008] # GEORGIAN CAPITAL LETTER CHIN
10EA ; [.2274.0020.0002] # GEORGIAN LETTER CAN
2D1A ; [.2275.0020.0002] # GEORGIAN SMALL LETTER CAN
10BA ; [.2275.0020.0008] # GEORGIAN CAPITAL LETTER CAN
10EB ; [.2276.0020.0002] # GEORGIAN LETTER JIL
2D1B ; [.2277.0020.0002] # GEORGIAN SMALL LETTER JIL
10BB ; [.2277.0020.0008] # GEORGIAN CAPITAL LETTER JIL
10EC ; [.2278.0020.0002] # GEORGIAN LETTER CIL
2D1C ; [.2279.0020.0002] # GEORGIAN SMALL LETTER CIL
10BC ; [.2279.0020.0008] # GEORGIAN CAPITAL LETTER CIL
10ED ; [.227A.0020.0002] # GEORGIAN LETTER CHAR
2D1D ; [.227B.0020.0002] # GEORGIAN SMALL LETTER CHAR
10BD ; [.227B.0020.0008] # GEORGIAN CAPITAL LETTER CHAR
10EE ; [.227C.0020.0002] # GEORGIAN LETTER XAN
2D1E ; [.227D.0020.0002] # GEORGIAN SMALL LETTER XAN
10BE ; [.227D.0020.0008] # GEORGIAN CAPITAL LETTER XAN
10F4 ; [.227E.0020.0002] # GEORGIAN LETTER HAR
2D24 ; [.227F.0020.0002] # GEORGIAN SMALL LETTER HAR
10C4 ; [.227F.0020.0008] # GEORGIAN CAPITAL LETTER HAR
10EF ; [.2280.0020.0002] # GEORGIAN LETTER JHAN
2D1F ; [.2281.0020.0002] # GEORGIAN SMALL LETTER JHAN
10BF ; [.2281.0020.0008] # GEORGIAN CAPITAL LETTER JHAN
10F0 ; [.2282.0020.0002] # GEORGIAN LETTER HAE
2D20 ; [.2283.0020.0002] # GEORGIAN SMALL LETTER HAE
10C0 ; [.2283.0020.0008] # GEORGIAN CAPITAL LETTER HAE
10F5 ; [.2284.0020.0002] # GEORGIAN LETTER HOE
2D25 ; [.2285.0020.0002] # GEORGIAN SMALL LETTER HOE
10C5 ; [.2285.0020.0008] # GEORGIAN CAPITAL LETTER HOE
10F6 ; [.2286.0020.0002] # GEORGIAN LETTER FI
10F7 ; [.2287.0020.0002] # GEORGIAN LETTER YN
2D27 ; [.2288.0020.0002] # GEORGIAN SMALL LETTER YN
10C7 ; [.2288.0020.0008] # GEORGIAN CAPITAL LETTER YN
10F8 ; [.2289.0020.0002] # GEORGIAN LETTER ELIFI
10F9 ; [.228A.0020.0002] # GEORGIAN LETTER TURNED GAN
10FA ; [.228B.0020.0002] # GEORGIAN LETTER AIN
10FD ; [.228C.0020.0002] # GEORGIAN LETTER AEN
2D2D ; [.228D.0020.0002] # GEORGIAN SMALL LETTER AEN
10CD ; [.228D.0020.0008] # GEORGIAN CAPITAL LETTER AEN
10FE ; [.228E.0020.0002] # GEORGIAN LETTER HARD SIGN
10FF ; [.228F.0020.0002] # GEORGIAN LETTER LABIAL SIGN
0561 ; [.2290.0020.0002] # ARMENIAN SMALL LETTER AYB
0531 ; [.2290.0020.0008] # ARMENIAN CAPITAL LETTER AYB
0562 ; [.2291.0020.0002] # ARMENIAN SMALL LETTER BEN
0532 ; [.2291.0020.0008] # ARMENIAN CAPITAL LETTER BEN
0563 ; [.2292.0020.0002] # ARMENIAN SMALL LETTER GIM
0533 ; [.2292.0020.0008] # ARMENIAN CAPITAL LETTER GIM
0564 ; [.2293.0020.0002] # ARMENIAN SMALL LETTER DA
0534 ; [.2293.0020.0008] # ARMENIAN CAPITAL LETTER DA
0565 ; [.2294.0020.0002] # ARMENIAN SMALL LETTER ECH
0535 ; [.2294.0020.0008] # ARMENIAN CAPITAL LETTER ECH
0587 ; [.2294.0020.0004][.22B1.0020.0004] # ARMENIAN SMALL LIGATURE ECH YIWN
0566 ; [.2295.0020.0002] # ARMENIAN SMALL LETTER ZA
0536 ; [.2295.0020.0008] # ARMENIAN CAPITAL LETTER ZA
0567 ; [.2296.0020.0002] # ARMENIAN SMALL LETTER EH
0537 ; [.2296.0020.0008] # ARMENIAN CAPITAL LETTER EH
0568 ; [.2297.0020.0002] # ARMENIAN SMALL LETTER ET
0538 ; [.2297.0020.0008] # ARMENIAN CAPITAL LETTER ET
0569 ; [.2298.0020.0002] # ARMENIAN SMALL LETTER TO
0539 ; [.2298.0020.0008] # ARMENIAN CAPITAL LETTER TO
056A ; [.2299.0020.0002] # ARMENIAN SMALL LETTER ZHE
053A ; [.2299.0020.0008] # ARMENIAN CAPITAL LETTER ZHE
056B ; [.229A.0020.0002] # ARMENIAN SMALL LETTER INI
053B ; [.229A.0020.0008] # ARMENIAN CAPITAL LETTER INI
056C ; [.229B.0020.0002] # ARMENIAN SMALL LETTER LIWN
053C ; [.229B.0020.0008] # ARMENIAN CAPITAL LETTER LIWN
056D ; [.229C.0020.0002] # ARMENIAN SMALL LETTER XEH
053D ; [.229C.0020.0008] # ARMENIAN CAPITAL LETTER XEH
056E ; [.229D.0020.0002] # ARMENIAN SMALL LETTER CA
053E ; [.229D.0020.0008] # ARMENIAN CAPITAL LETTER CA
056F ; [.229E.0020.0002] # ARMENIAN SMALL LETTER KEN
053F ; [.229E.0020.0008] # ARMENIAN CAPITAL LETTER KEN
0570 ; [.229F.0020.0002] # ARMENIAN SMALL LETTER HO
0540 ; [.229F.0020.0008] # ARMENIAN CAPITAL LETTER HO
0571 ; [.22A0.0020.0002] # ARMENIAN SMALL LETTER JA
0541 ; [.22A0.0020.0008] # ARMENIAN CAPITAL LETTER JA
0572 ; [.22A1.0020.0002] # ARMENIAN SMALL LETTER GHAD
0542 ; [.22A1.0020.0008] # ARMENIAN CAPITAL LETTER GHAD
0573 ; [.22A2.0020.0002] # ARMENIAN SMALL LETTER CHEH
0543 ; [.22A2.0020.0008] # ARMENIAN CAPITAL LETTER CHEH
0574 ; [.22A3.0020.0002] # ARMENIAN SMALL LETTER MEN
0544 ; [.22A3.0020.0008] # ARMENIAN CAPITAL LETTER MEN
FB14 ; [.22A3.0020.0004][.2294.0020.0004] # ARMENIAN SMALL LIGATURE MEN ECH
FB15 ; [.22A3.0020.0004][.229A.0020.0004] # ARMENIAN SMALL LIGATURE MEN INI
FB17 ; [.22A3.0020.0004][.229C.0020.0004] # ARMENIAN SMALL LIGATURE MEN XEH
FB13 ; [.22A3.0020.0004][.22A5.0020.0004] # ARMENIAN SMALL LIGATURE MEN NOW
0575 ; [.22A4.0020.0002] # ARMENIAN SMALL LETTER YI
0545 ; [.22A4.0020.0008] # ARMENIAN CAPITAL LETTER YI
0576 ; [.22A5.0020.0002] # ARMENIAN SMALL LETTER NOW
0546 ; [.22A5.0020.0008] # ARMENIAN CAPITAL LETTER NOW
0577 ; [.22A6.0020.0002] # ARMENIAN SMALL LETTER SHA
0547 ; [.22A6.0020.0008] # ARMENIAN CAPITAL LETTER SHA
0578 ; [.22A7.0020.0002] # ARMENIAN SMALL LETTER VO
0548 ; [.22A7.0020.0008] # ARMENIAN CAPITAL LETTER VO
0579 ; [.22A8.0020.0002] # ARMENIAN SMALL LETTER CHA
0549 ; [.22A8.0020.0008] # ARMENIAN CAPITAL LETTER CHA
057A ; [.22A9.0020.0002] # ARMENIAN SMALL LETTER PEH
054A ; [.22A9.0020.0008] # ARMENIAN CAPITAL LETTER PEH
057B ; [.22AA.0020.0002] # ARMENIAN SMALL LETTER JHEH
054B ; [.22AA.0020.0008] # ARMENIAN CAPITAL LETTER JHEH
057C ; [.22AB.0020.0002] # ARMENIAN SMALL LETTER RA
054C ; [.22AB.0020.0008] # ARMENIAN CAPITAL LETTER RA
057D ; [.22AC.0020.0002] # ARMENIAN SMALL LETTER SEH
054D ; [.22AC.0020.0008] # ARMENIAN CAPITAL LETTER SEH
057E ; [.22AD.0020.0002] # ARMENIAN SMALL LETTER VEW
054E ; [.22AD.0020.0008] # ARMENIAN CAPITAL LETTER VEW
FB16 ; [.22AD.0020.0004][.22A5.0020.0004] # ARMENIAN SMALL LIGATURE VEW NOW
057F ; [.22AE.0020.0002] # ARMENIAN SMALL LETTER TIWN
054F ; [.22AE.0020.0008] # ARMENIAN CAPITAL LETTER TIWN
0580 ; [.22AF.0020.0002] # ARMENIAN SMALL LETTER REH
0550 ; [.22AF.0020.0008] # ARMENIAN CAPITAL LETTER REH
0581 ; [.22B0.0020.0002] # ARMENIAN SMALL LETTER CO
0551 ; [.22B0.0020.0008] # ARMENIAN CAPITAL LETTER CO
0582 ; [.22B1.0020.0002] # ARMENIAN SMALL LETTER YIWN
0552 ; [.22B1.0020.0008] # ARMENIAN CAPITAL LETTER YIWN
0583 ; [.22B2.0020.0002] # ARMENIAN SMALL LETTER PIWR
0553 ; [.22B2.0020.0008] # ARMENIAN CAPITAL LETTER PIWR
0584 ; [.22B3.0020.0002] # ARMENIAN SMALL LETTER KEH
0554 ; [.22B3.0020.0008] # ARMENIAN CAPITAL LETTER KEH
0585 ; [.22B4.0020.0002] # ARMENIAN SMALL LETTER OH
0555 ; [.22B4.0020.0008] # ARMENIAN CAPITAL LETTER OH
0586 ; [.22B5.0020.0002] # ARMENIAN SMALL LETTER FEH
0556 ; [.22B5.0020.0008] # ARMENIAN CAPITAL LETTER FEH
0559 ; [.22B6.0020.0002] # ARMENIAN MODIFIER LETTER LEFT HALF RING
05D0 ; [.22B7.0020.0002] # HEBREW LETTER ALEF
2135 ; [.22B7.0020.0004] # ALEF SYMBOL
FB21 ; [.22B7.0020.0005] # HEBREW LETTER WIDE ALEF
FB2E ; [.22B7.0020.0002][.0000.0059.0002] # HEBREW LETTER ALEF WITH PATAH
FB2F ; [.22B7.0020.0002][.0000.005A.0002] # HEBREW LETTER ALEF WITH QAMATS
FB30 ; [.22B7.0020.0002][.0000.005F.0002] # HEBREW LETTER ALEF WITH MAPIQ
FB4F ; [.22B7.0020.0004][.22C2.0020.0004] # HEBREW LIGATURE ALEF LAMED
05D1 ; [.22B8.0020.0002] # HEBREW LETTER BET
2136 ; [.22B8.0020.0004] # BET SYMBOL
FB31 ; [.22B8.0020.0002][.0000.005F.0002] # HEBREW LETTER BET WITH DAGESH
FB4C ; [.22B8.0020.0002][.0000.0060.0002] # HEBREW LETTER BET WITH RAFE
05D2 ; [.22B9.0020.0002] # HEBREW LETTER GIMEL
2137 ; [.22B9.0020.0004] # GIMEL SYMBOL
FB32 ; [.22B9.0020.0002][.0000.005F.0002] # HEBREW LETTER GIMEL WITH DAGESH
05D3 ; [.22BA.0020.0002] # HEBREW LETTER DALET
2138 ; [.22BA.0020.0004] # DALET SYMBOL
FB22 ; [.22BA.0020.0005] # HEBREW LETTER WIDE DALET
FB33 ; [.22BA.0020.0002][.0000.005F.0002] # HEBREW LETTER DALET WITH DAGESH
05D4 ; [.22BB.0020.0002] # HEBREW LETTER HE
FB23 ; [.22BB.0020.0005] # HEBREW LETTER WIDE HE
FB34 ; [.22BB.0020.0002][.0000.005F.0002] # HEBREW LETTER HE WITH MAPIQ
05D5 ; [.22BC.0020.0002] # HEBREW LETTER VAV
FB4B ; [.22BC.0020.0002][.0000.005B.0002] # HEBREW LETTER VAV WITH HOLAM
FB35 ; [.22BC.0020.0002][.0000.005F.0002] # HEBREW LETTER VAV WITH DAGESH
05F0 ; [.22BC.0020.0004][.22BC.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE VAV
05F1 ; [.22BC.0020.0004][.22C0.0020.0004] # HEBREW LIGATURE YIDDISH VAV YOD
05D6 ; [.22BD.0020.0002] # HEBREW LETTER ZAYIN
FB36 ; [.22BD.0020.0002][.0000.005F.0002] # HEBREW LETTER ZAYIN WITH DAGESH
05D7 ; [.22BE.0020.0002] # HEBREW LETTER HET
05D8 ; [.22BF.0020.0002] # HEBREW LETTER TET
FB38 ; [.22BF.0020.0002][.0000.005F.0002] # HEBREW LETTER TET WITH DAGESH
05D9 ; [.22C0.0020.0002] # HEBREW LETTER YOD
FB1D ; [.22C0.0020.0002][.0000.0056.0002] # HEBREW LETTER YOD WITH HIRIQ
FB39 ; [.22C0.0020.0002][.0000.005F.0002] # HEBREW LETTER YOD WITH DAGESH
05F2 ; [.22C0.0020.0004][.22C0.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE YOD
FB1F ; [.22C0.0020.0004][.22C0.0020.0004][.0000.0059.0002] # HEBREW LIGATURE YIDDISH YOD YOD PATAH
05DB ; [.22C1.0020.0002] # HEBREW LETTER KAF
FB24 ; [.22C1.0020.0005] # HEBREW LETTER WIDE KAF
05DA ; [.22C1.0020.0019] # HEBREW LETTER FINAL KAF
FB3B ; [.22C1.0020.0002][.0000.005F.0002] # HEBREW LETTER KAF WITH DAGESH
FB3A ; [.22C1.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL KAF WITH DAGESH
FB4D ; [.22C1.0020.0002][.0000.0060.0002] # HEBREW LETTER KAF WITH RAFE
05DC ; [.22C2.0020.0002] # HEBREW LETTER LAMED
FB25 ; [.22C2.0020.0005] # HEBREW LETTER WIDE LAMED
FB3C ; [.22C2.0020.0002][.0000.005F.0002] # HEBREW LETTER LAMED WITH DAGESH
05DE ; [.22C3.0020.0002] # HEBREW LETTER MEM
FB26 ; [.22C3.0020.0005] # HEBREW LETTER WIDE FINAL MEM
05DD ; [.22C3.0020.0019] # HEBREW LETTER FINAL MEM
FB3E ; [.22C3.0020.0002][.0000.005F.0002] # HEBREW LETTER MEM WITH DAGESH
05E0 ; [.22C4.0020.0002] # HEBREW LETTER NUN
05DF ; [.22C4.0020.0019] # HEBREW LETTER FINAL NUN
FB40 ; [.22C4.0020.0002][.0000.005F.0002] # HEBREW LETTER NUN WITH DAGESH
05E1 ; [.22C5.0020.0002] # HEBREW LETTER SAMEKH
FB41 ; [.22C5.0020.0002][.0000.005F.0002] # HEBREW LETTER SAMEKH WITH DAGESH
05E2 ; [.22C6.0020.0002] # HEBREW LETTER AYIN
FB20 ; [.22C6.0020.0005] # HEBREW LETTER ALTERNATIVE AYIN
05E4 ; [.22C7.0020.0002] # HEBREW LETTER PE
05E3 ; [.22C7.0020.0019] # HEBREW LETTER FINAL PE
FB44 ; [.22C7.0020.0002][.0000.005F.0002] # HEBREW LETTER PE WITH DAGESH
FB43 ; [.22C7.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL PE WITH DAGESH
FB4E ; [.22C7.0020.0002][.0000.0060.0002] # HEBREW LETTER PE WITH RAFE
05E6 ; [.22C8.0020.0002] # HEBREW LETTER TSADI
05E5 ; [.22C8.0020.0019] # HEBREW LETTER FINAL TSADI
FB46 ; [.22C8.0020.0002][.0000.005F.0002] # HEBREW LETTER TSADI WITH DAGESH
05E7 ; [.22C9.0020.0002] # HEBREW LETTER QOF
FB47 ; [.22C9.0020.0002][.0000.005F.0002] # HEBREW LETTER QOF WITH DAGESH
05E8 ; [.22CA.0020.0002] # HEBREW LETTER RESH
FB27 ; [.22CA.0020.0005] # HEBREW LETTER WIDE RESH
FB48 ; [.22CA.0020.0002][.0000.005F.0002] # HEBREW LETTER RESH WITH DAGESH
05E9 ; [.22CB.0020.0002] # HEBREW LETTER SHIN
FB2B ; [.22CB.0020.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH SIN DOT
FB2A ; [.22CB.0020.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH SHIN DOT
FB49 ; [.22CB.0020.0002][.0000.005F.0002] # HEBREW LETTER SHIN WITH DAGESH
FB2D ; [.22CB.0020.0002][.0000.005F.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
FB2C ; [.22CB.0020.0002][.0000.005F.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
05EA ; [.22CC.0020.0002] # HEBREW LETTER TAV
FB28 ; [.22CC.0020.0005] # HEBREW LETTER WIDE TAV
FB4A ; [.22CC.0020.0002][.0000.005F.0002] # HEBREW LETTER TAV WITH DAGESH
10900 ; [.22CD.0020.0002] # PHOENICIAN LETTER ALF
10901 ; [.22CE.0020.0002] # PHOENICIAN LETTER BET
10902 ; [.22CF.0020.0002] # PHOENICIAN LETTER GAML
10903 ; [.22D0.0020.0002] # PHOENICIAN LETTER DELT
10904 ; [.22D1.0020.0002] # PHOENICIAN LETTER HE
10905 ; [.22D2.0020.0002] # PHOENICIAN LETTER WAU
10906 ; [.22D3.0020.0002] # PHOENICIAN LETTER ZAI
10907 ; [.22D4.0020.0002] # PHOENICIAN LETTER HET
10908 ; [.22D5.0020.0002] # PHOENICIAN LETTER TET
10909 ; [.22D6.0020.0002] # PHOENICIAN LETTER YOD
1090A ; [.22D7.0020.0002] # PHOENICIAN LETTER KAF
1090B ; [.22D8.0020.0002] # PHOENICIAN LETTER LAMD
1090C ; [.22D9.0020.0002] # PHOENICIAN LETTER MEM
1090D ; [.22DA.0020.0002] # PHOENICIAN LETTER NUN
1090E ; [.22DB.0020.0002] # PHOENICIAN LETTER SEMK
1090F ; [.22DC.0020.0002] # PHOENICIAN LETTER AIN
10910 ; [.22DD.0020.0002] # PHOENICIAN LETTER PE
10911 ; [.22DE.0020.0002] # PHOENICIAN LETTER SADE
10912 ; [.22DF.0020.0002] # PHOENICIAN LETTER QOF
10913 ; [.22E0.0020.0002] # PHOENICIAN LETTER ROSH
10914 ; [.22E1.0020.0002] # PHOENICIAN LETTER SHIN
10915 ; [.22E2.0020.0002] # PHOENICIAN LETTER TAU
0800 ; [.22E3.0020.0002] # SAMARITAN LETTER ALAF
0801 ; [.22E4.0020.0002] # SAMARITAN LETTER BIT
0802 ; [.22E5.0020.0002] # SAMARITAN LETTER GAMAN
0803 ; [.22E6.0020.0002] # SAMARITAN LETTER DALAT
0804 ; [.22E7.0020.0002] # SAMARITAN LETTER IY
0805 ; [.22E8.0020.0002] # SAMARITAN LETTER BAA
0806 ; [.22E9.0020.0002] # SAMARITAN LETTER ZEN
0807 ; [.22EA.0020.0002] # SAMARITAN LETTER IT
0808 ; [.22EB.0020.0002] # SAMARITAN LETTER TIT
0809 ; [.22EC.0020.0002] # SAMARITAN LETTER YUT
080A ; [.22ED.0020.0002] # SAMARITAN LETTER KAAF
080B ; [.22EE.0020.0002] # SAMARITAN LETTER LABAT
080C ; [.22EF.0020.0002] # SAMARITAN LETTER MIM
080D ; [.22F0.0020.0002] # SAMARITAN LETTER NUN
080E ; [.22F1.0020.0002] # SAMARITAN LETTER SINGAAT
080F ; [.22F2.0020.0002] # SAMARITAN LETTER IN
0810 ; [.22F3.0020.0002] # SAMARITAN LETTER FI
0811 ; [.22F4.0020.0002] # SAMARITAN LETTER TSAADIY
0812 ; [.22F5.0020.0002] # SAMARITAN LETTER QUF
0813 ; [.22F6.0020.0002] # SAMARITAN LETTER RISH
0814 ; [.22F7.0020.0002] # SAMARITAN LETTER SHAN
0815 ; [.22F8.0020.0002] # SAMARITAN LETTER TAAF
0816 ; [.22F9.0020.0002] # SAMARITAN MARK IN
0817 ; [.22FA.0020.0002] # SAMARITAN MARK IN-ALAF
081A ; [.22FB.0020.0002] # SAMARITAN MODIFIER LETTER EPENTHETIC YUT
081B ; [.22FC.0020.0002] # SAMARITAN MARK EPENTHETIC YUT
0621 ; [.22FD.0020.0002] # ARABIC LETTER HAMZA
0674 ; [.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA
FE80 ; [.22FD.0020.001A] # ARABIC LETTER HAMZA ISOLATED FORM
06FD ; [.22FD.0020.0004][.0000.0111.0004] # ARABIC SIGN SINDHI AMPERSAND
0622 ; [.22FE.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE
0627 0653 ; [.22FE.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE
FE82 ; [.22FE.0020.0019] # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
FE81 ; [.22FE.0020.001A] # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
0623 ; [.22FF.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
0627 0654 ; [.22FF.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
FE84 ; [.22FF.0020.0019] # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
FE83 ; [.22FF.0020.001A] # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
0672 ; [.2300.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
0671 ; [.2301.0020.0002] # ARABIC LETTER ALEF WASLA
FB51 ; [.2301.0020.0019] # ARABIC LETTER ALEF WASLA FINAL FORM
FB50 ; [.2301.0020.001A] # ARABIC LETTER ALEF WASLA ISOLATED FORM
0624 ; [.2302.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE
0648 0654 ; [.2302.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE
FE86 ; [.2302.0020.0019] # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
FE85 ; [.2302.0020.001A] # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
0625 ; [.2303.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW
0627 0655 ; [.2303.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW
FE88 ; [.2303.0020.0019] # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
FE87 ; [.2303.0020.001A] # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
0673 ; [.2304.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
0773 ; [.2305.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
0774 ; [.2306.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
0626 ; [.2307.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE
064A 0654 ; [.2307.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE
FE8B ; [.2307.0020.0017] # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
FE8C ; [.2307.0020.0018] # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
FE8A ; [.2307.0020.0019] # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
FE89 ; [.2307.0020.001A] # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
FBEB ; [.2307.0020.0019][.230B.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
FBEA ; [.2307.0020.001A][.230B.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
FC97 ; [.2307.0020.0017][.2325.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
FC00 ; [.2307.0020.001A][.2325.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
FC98 ; [.2307.0020.0017][.232C.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
FC01 ; [.2307.0020.001A][.232C.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
FC99 ; [.2307.0020.0017][.232D.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
FC64 ; [.2307.0020.0019][.2346.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
FC65 ; [.2307.0020.0019][.2347.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
FC9A ; [.2307.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
FCDF ; [.2307.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
FC66 ; [.2307.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
FC02 ; [.2307.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
FC67 ; [.2307.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
FC9B ; [.2307.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
FCE0 ; [.2307.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
FBED ; [.2307.0020.0019][.23B6.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
FBEC ; [.2307.0020.001A][.23B6.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
FBEF ; [.2307.0020.0019][.23B7.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
FBEE ; [.2307.0020.001A][.23B7.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
FBF3 ; [.2307.0020.0019][.23BA.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
FBF2 ; [.2307.0020.001A][.23BA.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
FBF1 ; [.2307.0020.0019][.23BB.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
FBF0 ; [.2307.0020.001A][.23BB.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
FBF5 ; [.2307.0020.0019][.23BC.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
FBF4 ; [.2307.0020.001A][.23BC.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
FBFB ; [.2307.0020.0017][.23C5.0020.0017] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
FBFA ; [.2307.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
FC68 ; [.2307.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
FBF9 ; [.2307.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
FC03 ; [.2307.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
FC69 ; [.2307.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
FC04 ; [.2307.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
FBF8 ; [.2307.0020.0017][.23CA.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
FBF7 ; [.2307.0020.0019][.23CA.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
FBF6 ; [.2307.0020.001A][.23CA.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
08A8 ; [.2308.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE
08A9 ; [.2309.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE
08AC ; [.230A.0020.0002] # ARABIC LETTER ROHINGYA YEH
0627 ; [.230B.0020.0002] # ARABIC LETTER ALEF
08AD ; [.230B.0020.0004] # ARABIC LETTER LOW ALEF
1EE00 ; [.230B.0020.0005] # ARABIC MATHEMATICAL ALEF
1EE80 ; [.230B.0020.0005] # ARABIC MATHEMATICAL LOOPED ALEF
FE8E ; [.230B.0020.0019] # ARABIC LETTER ALEF FINAL FORM
FE8D ; [.230B.0020.001A] # ARABIC LETTER ALEF ISOLATED FORM
FD3C ; [.230B.0020.0019][.0000.006D.0019] # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
FD3D ; [.230B.0020.001A][.0000.006D.001A] # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
0675 ; [.230B.0020.0004][.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA ALEF
FDF3 ; [.230B.0020.001A][.2387.0020.001A][.230D.0020.001A][.2346.0020.001A] # ARABIC LIGATURE AKBAR ISOLATED FORM
FDF2 ; [.230B.0020.001A][.239C.0020.001A][.239C.0020.001A][.23B1.0020.001A] # ARABIC LIGATURE ALLAH ISOLATED FORM
066E ; [.230C.0020.0002] # ARABIC LETTER DOTLESS BEH
1EE1C ; [.230C.0020.0005] # ARABIC MATHEMATICAL DOTLESS BEH
1EE7C ; [.230C.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
0628 ; [.230D.0020.0002] # ARABIC LETTER BEH
1EE01 ; [.230D.0020.0005] # ARABIC MATHEMATICAL BEH
1EE21 ; [.230D.0020.0005] # ARABIC MATHEMATICAL INITIAL BEH
1EE61 ; [.230D.0020.0005] # ARABIC MATHEMATICAL STRETCHED BEH
1EE81 ; [.230D.0020.0005] # ARABIC MATHEMATICAL LOOPED BEH
1EEA1 ; [.230D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK BEH
FE91 ; [.230D.0020.0017] # ARABIC LETTER BEH INITIAL FORM
FE92 ; [.230D.0020.0018] # ARABIC LETTER BEH MEDIAL FORM
FE90 ; [.230D.0020.0019] # ARABIC LETTER BEH FINAL FORM
FE8F ; [.230D.0020.001A] # ARABIC LETTER BEH ISOLATED FORM
FC9C ; [.230D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
FC05 ; [.230D.0020.001A][.2325.0020.001A] # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
FC9D ; [.230D.0020.0017][.232C.0020.0017] # ARABIC LIGATURE BEH WITH HAH INITIAL FORM
FC06 ; [.230D.0020.001A][.232C.0020.001A] # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
FDC2 ; [.230D.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
FC9E ; [.230D.0020.0017][.232D.0020.0017] # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
FC07 ; [.230D.0020.001A][.232D.0020.001A] # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
FD9E ; [.230D.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
FC6A ; [.230D.0020.0019][.2346.0020.0019] # ARABIC LIGATURE BEH WITH REH FINAL FORM
FC6B ; [.230D.0020.0019][.2347.0020.0019] # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
FC9F ; [.230D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
FCE1 ; [.230D.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
FC6C ; [.230D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE BEH WITH MEEM FINAL FORM
FC08 ; [.230D.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
FC6D ; [.230D.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE BEH WITH NOON FINAL FORM
FCA0 ; [.230D.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE BEH WITH HEH INITIAL FORM
FCE2 ; [.230D.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
FC6E ; [.230D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
FC09 ; [.230D.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
FC6F ; [.230D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE BEH WITH YEH FINAL FORM
FC0A ; [.230D.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
067B ; [.230E.0020.0002] # ARABIC LETTER BEEH
FB54 ; [.230E.0020.0017] # ARABIC LETTER BEEH INITIAL FORM
FB55 ; [.230E.0020.0018] # ARABIC LETTER BEEH MEDIAL FORM
FB53 ; [.230E.0020.0019] # ARABIC LETTER BEEH FINAL FORM
FB52 ; [.230E.0020.001A] # ARABIC LETTER BEEH ISOLATED FORM
067E ; [.230F.0020.0002] # ARABIC LETTER PEH
FB58 ; [.230F.0020.0017] # ARABIC LETTER PEH INITIAL FORM
FB59 ; [.230F.0020.0018] # ARABIC LETTER PEH MEDIAL FORM
FB57 ; [.230F.0020.0019] # ARABIC LETTER PEH FINAL FORM
FB56 ; [.230F.0020.001A] # ARABIC LETTER PEH ISOLATED FORM
0680 ; [.2310.0020.0002] # ARABIC LETTER BEHEH
FB5C ; [.2310.0020.0017] # ARABIC LETTER BEHEH INITIAL FORM
FB5D ; [.2310.0020.0018] # ARABIC LETTER BEHEH MEDIAL FORM
FB5B ; [.2310.0020.0019] # ARABIC LETTER BEHEH FINAL FORM
FB5A ; [.2310.0020.001A] # ARABIC LETTER BEHEH ISOLATED FORM
0750 ; [.2311.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
0751 ; [.2312.0020.0002] # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
0752 ; [.2313.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
0753 ; [.2314.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
0754 ; [.2315.0020.0002] # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
0755 ; [.2316.0020.0002] # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
08A0 ; [.2317.0020.0002] # ARABIC LETTER BEH WITH SMALL V BELOW
0756 ; [.2318.0020.0002] # ARABIC LETTER BEH WITH SMALL V
08A1 ; [.2319.0020.0002] # ARABIC LETTER BEH WITH HAMZA ABOVE
08B6 ; [.231A.0020.0002] # ARABIC LETTER BEH WITH SMALL MEEM ABOVE
08B7 ; [.231B.0020.0002] # ARABIC LETTER PEH WITH SMALL MEEM ABOVE
0629 ; [.231C.0020.0002] # ARABIC LETTER TEH MARBUTA
FE94 ; [.231C.0020.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM
FE93 ; [.231C.0020.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM
062A ; [.231D.0020.0002] # ARABIC LETTER TEH
1EE15 ; [.231D.0020.0005] # ARABIC MATHEMATICAL TEH
1EE35 ; [.231D.0020.0005] # ARABIC MATHEMATICAL INITIAL TEH
1EE75 ; [.231D.0020.0005] # ARABIC MATHEMATICAL STRETCHED TEH
1EE95 ; [.231D.0020.0005] # ARABIC MATHEMATICAL LOOPED TEH
1EEB5 ; [.231D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TEH
FE97 ; [.231D.0020.0017] # ARABIC LETTER TEH INITIAL FORM
FE98 ; [.231D.0020.0018] # ARABIC LETTER TEH MEDIAL FORM
FE96 ; [.231D.0020.0019] # ARABIC LETTER TEH FINAL FORM
FE95 ; [.231D.0020.001A] # ARABIC LETTER TEH ISOLATED FORM
FCA1 ; [.231D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
FC0B ; [.231D.0020.001A][.2325.0020.001A] # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
FD50 ; [.231D.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
FDA0 ; [.231D.0020.0019][.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
FD9F ; [.231D.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
FCA2 ; [.231D.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TEH WITH HAH INITIAL FORM
FC0C ; [.231D.0020.001A][.232C.0020.001A] # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
FD52 ; [.231D.0020.0017][.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
FD51 ; [.231D.0020.0019][.232C.0020.0019][.2325.0020.0019] # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
FD53 ; [.231D.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
FCA3 ; [.231D.0020.0017][.232D.0020.0017] # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
FC0D ; [.231D.0020.001A][.232D.0020.001A] # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
FD54 ; [.231D.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
FDA2 ; [.231D.0020.0019][.232D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
FDA1 ; [.231D.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
FC70 ; [.231D.0020.0019][.2346.0020.0019] # ARABIC LIGATURE TEH WITH REH FINAL FORM
FC71 ; [.231D.0020.0019][.2347.0020.0019] # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
FCA4 ; [.231D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
FCE3 ; [.231D.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
FC72 ; [.231D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE TEH WITH MEEM FINAL FORM
FC0E ; [.231D.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
FD55 ; [.231D.0020.0017][.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
FD56 ; [.231D.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
FD57 ; [.231D.0020.0017][.23A3.0020.0017][.232D.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
FDA4 ; [.231D.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
FDA3 ; [.231D.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
FC73 ; [.231D.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE TEH WITH NOON FINAL FORM
FCA5 ; [.231D.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE TEH WITH HEH INITIAL FORM
FCE4 ; [.231D.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
FC74 ; [.231D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
FC0F ; [.231D.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
FC75 ; [.231D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH YEH FINAL FORM
FC10 ; [.231D.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
062B ; [.231E.0020.0002] # ARABIC LETTER THEH
1EE16 ; [.231E.0020.0005] # ARABIC MATHEMATICAL THEH
1EE36 ; [.231E.0020.0005] # ARABIC MATHEMATICAL INITIAL THEH
1EE76 ; [.231E.0020.0005] # ARABIC MATHEMATICAL STRETCHED THEH
1EE96 ; [.231E.0020.0005] # ARABIC MATHEMATICAL LOOPED THEH
1EEB6 ; [.231E.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THEH
FE9B ; [.231E.0020.0017] # ARABIC LETTER THEH INITIAL FORM
FE9C ; [.231E.0020.0018] # ARABIC LETTER THEH MEDIAL FORM
FE9A ; [.231E.0020.0019] # ARABIC LETTER THEH FINAL FORM
FE99 ; [.231E.0020.001A] # ARABIC LETTER THEH ISOLATED FORM
FC11 ; [.231E.0020.001A][.2325.0020.001A] # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
FC76 ; [.231E.0020.0019][.2346.0020.0019] # ARABIC LIGATURE THEH WITH REH FINAL FORM
FC77 ; [.231E.0020.0019][.2347.0020.0019] # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
FCA6 ; [.231E.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
FCE5 ; [.231E.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
FC78 ; [.231E.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE THEH WITH MEEM FINAL FORM
FC12 ; [.231E.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
FC79 ; [.231E.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE THEH WITH NOON FINAL FORM
FCE6 ; [.231E.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
FC7A ; [.231E.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
FC13 ; [.231E.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
FC7B ; [.231E.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE THEH WITH YEH FINAL FORM
FC14 ; [.231E.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
0679 ; [.231F.0020.0002] # ARABIC LETTER TTEH
FB68 ; [.231F.0020.0017] # ARABIC LETTER TTEH INITIAL FORM
FB69 ; [.231F.0020.0018] # ARABIC LETTER TTEH MEDIAL FORM
FB67 ; [.231F.0020.0019] # ARABIC LETTER TTEH FINAL FORM
FB66 ; [.231F.0020.001A] # ARABIC LETTER TTEH ISOLATED FORM
067A ; [.2320.0020.0002] # ARABIC LETTER TTEHEH
FB60 ; [.2320.0020.0017] # ARABIC LETTER TTEHEH INITIAL FORM
FB61 ; [.2320.0020.0018] # ARABIC LETTER TTEHEH MEDIAL FORM
FB5F ; [.2320.0020.0019] # ARABIC LETTER TTEHEH FINAL FORM
FB5E ; [.2320.0020.001A] # ARABIC LETTER TTEHEH ISOLATED FORM
067C ; [.2321.0020.0002] # ARABIC LETTER TEH WITH RING
067D ; [.2322.0020.0002] # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
067F ; [.2323.0020.0002] # ARABIC LETTER TEHEH
FB64 ; [.2323.0020.0017] # ARABIC LETTER TEHEH INITIAL FORM
FB65 ; [.2323.0020.0018] # ARABIC LETTER TEHEH MEDIAL FORM
FB63 ; [.2323.0020.0019] # ARABIC LETTER TEHEH FINAL FORM
FB62 ; [.2323.0020.001A] # ARABIC LETTER TEHEH ISOLATED FORM
08B8 ; [.2324.0020.0002] # ARABIC LETTER TEH WITH SMALL TEH ABOVE
062C ; [.2325.0020.0002] # ARABIC LETTER JEEM
1EE02 ; [.2325.0020.0005] # ARABIC MATHEMATICAL JEEM
1EE22 ; [.2325.0020.0005] # ARABIC MATHEMATICAL INITIAL JEEM
1EE42 ; [.2325.0020.0005] # ARABIC MATHEMATICAL TAILED JEEM
1EE62 ; [.2325.0020.0005] # ARABIC MATHEMATICAL STRETCHED JEEM
1EE82 ; [.2325.0020.0005] # ARABIC MATHEMATICAL LOOPED JEEM
1EEA2 ; [.2325.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM
FE9F ; [.2325.0020.0017] # ARABIC LETTER JEEM INITIAL FORM
FEA0 ; [.2325.0020.0018] # ARABIC LETTER JEEM MEDIAL FORM
FE9E ; [.2325.0020.0019] # ARABIC LETTER JEEM FINAL FORM
FE9D ; [.2325.0020.001A] # ARABIC LETTER JEEM ISOLATED FORM
FCA7 ; [.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
FC15 ; [.2325.0020.001A][.232C.0020.001A] # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
FDA6 ; [.2325.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
FDBE ; [.2325.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
FDFB ; [.2325.0020.001A][.239C.0020.001A][*0209.0020.001A][.2325.0020.001A][.239C.0020.001A][.230B.0020.001A][.239C.0020.001A][.23B1.0020.001A] # ARABIC LIGATURE JALLAJALALOUHOU
FCA8 ; [.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
FC16 ; [.2325.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
FD59 ; [.2325.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
FD58 ; [.2325.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
FDA7 ; [.2325.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
FDA5 ; [.2325.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
FD1D ; [.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
FD01 ; [.2325.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
FD1E ; [.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE JEEM WITH YEH FINAL FORM
FD02 ; [.2325.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
0683 ; [.2326.0020.0002] # ARABIC LETTER NYEH
FB78 ; [.2326.0020.0017] # ARABIC LETTER NYEH INITIAL FORM
FB79 ; [.2326.0020.0018] # ARABIC LETTER NYEH MEDIAL FORM
FB77 ; [.2326.0020.0019] # ARABIC LETTER NYEH FINAL FORM
FB76 ; [.2326.0020.001A] # ARABIC LETTER NYEH ISOLATED FORM
0684 ; [.2327.0020.0002] # ARABIC LETTER DYEH
FB74 ; [.2327.0020.0017] # ARABIC LETTER DYEH INITIAL FORM
FB75 ; [.2327.0020.0018] # ARABIC LETTER DYEH MEDIAL FORM
FB73 ; [.2327.0020.0019] # ARABIC LETTER DYEH FINAL FORM
FB72 ; [.2327.0020.001A] # ARABIC LETTER DYEH ISOLATED FORM
0686 ; [.2328.0020.0002] # ARABIC LETTER TCHEH
FB7C ; [.2328.0020.0017] # ARABIC LETTER TCHEH INITIAL FORM
FB7D ; [.2328.0020.0018] # ARABIC LETTER TCHEH MEDIAL FORM
FB7B ; [.2328.0020.0019] # ARABIC LETTER TCHEH FINAL FORM
FB7A ; [.2328.0020.001A] # ARABIC LETTER TCHEH ISOLATED FORM
06BF ; [.2329.0020.0002] # ARABIC LETTER TCHEH WITH DOT ABOVE
0687 ; [.232A.0020.0002] # ARABIC LETTER TCHEHEH
FB80 ; [.232A.0020.0017] # ARABIC LETTER TCHEHEH INITIAL FORM
FB81 ; [.232A.0020.0018] # ARABIC LETTER TCHEHEH MEDIAL FORM
FB7F ; [.232A.0020.0019] # ARABIC LETTER TCHEHEH FINAL FORM
FB7E ; [.232A.0020.001A] # ARABIC LETTER TCHEHEH ISOLATED FORM
08A2 ; [.232B.0020.0002] # ARABIC LETTER JEEM WITH TWO DOTS ABOVE
062D ; [.232C.0020.0002] # ARABIC LETTER HAH
1EE07 ; [.232C.0020.0005] # ARABIC MATHEMATICAL HAH
1EE27 ; [.232C.0020.0005] # ARABIC MATHEMATICAL INITIAL HAH
1EE47 ; [.232C.0020.0005] # ARABIC MATHEMATICAL TAILED HAH
1EE67 ; [.232C.0020.0005] # ARABIC MATHEMATICAL STRETCHED HAH
1EE87 ; [.232C.0020.0005] # ARABIC MATHEMATICAL LOOPED HAH
1EEA7 ; [.232C.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK HAH
FEA3 ; [.232C.0020.0017] # ARABIC LETTER HAH INITIAL FORM
FEA4 ; [.232C.0020.0018] # ARABIC LETTER HAH MEDIAL FORM
FEA2 ; [.232C.0020.0019] # ARABIC LETTER HAH FINAL FORM
FEA1 ; [.232C.0020.001A] # ARABIC LETTER HAH ISOLATED FORM
FCA9 ; [.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
FC17 ; [.232C.0020.001A][.2325.0020.001A] # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
FDBF ; [.232C.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
FCAA ; [.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
FC18 ; [.232C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
FD5B ; [.232C.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
FD5A ; [.232C.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
FD1B ; [.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
FCFF ; [.232C.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
FD1C ; [.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE HAH WITH YEH FINAL FORM
FD00 ; [.232C.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
062E ; [.232D.0020.0002] # ARABIC LETTER KHAH
1EE17 ; [.232D.0020.0005] # ARABIC MATHEMATICAL KHAH
1EE37 ; [.232D.0020.0005] # ARABIC MATHEMATICAL INITIAL KHAH
1EE57 ; [.232D.0020.0005] # ARABIC MATHEMATICAL TAILED KHAH
1EE77 ; [.232D.0020.0005] # ARABIC MATHEMATICAL STRETCHED KHAH
1EE97 ; [.232D.0020.0005] # ARABIC MATHEMATICAL LOOPED KHAH
1EEB7 ; [.232D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH
FEA7 ; [.232D.0020.0017] # ARABIC LETTER KHAH INITIAL FORM
FEA8 ; [.232D.0020.0018] # ARABIC LETTER KHAH MEDIAL FORM
FEA6 ; [.232D.0020.0019] # ARABIC LETTER KHAH FINAL FORM
FEA5 ; [.232D.0020.001A] # ARABIC LETTER KHAH ISOLATED FORM
FCAB ; [.232D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
FC19 ; [.232D.0020.001A][.2325.0020.001A] # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
FC1A ; [.232D.0020.001A][.232C.0020.001A] # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
FCAC ; [.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
FC1B ; [.232D.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
FD1F ; [.232D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
FD03 ; [.232D.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
FD20 ; [.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE KHAH WITH YEH FINAL FORM
FD04 ; [.232D.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
0681 ; [.232E.0020.0002] # ARABIC LETTER HAH WITH HAMZA ABOVE
0682 ; [.232F.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
0685 ; [.2330.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS ABOVE
0757 ; [.2331.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS ABOVE
0758 ; [.2332.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
076E ; [.2333.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW
076F ; [.2334.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
0772 ; [.2335.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE
077C ; [.2336.0020.0002] # ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
062F ; [.2337.0020.0002] # ARABIC LETTER DAL
1EE03 ; [.2337.0020.0005] # ARABIC MATHEMATICAL DAL
1EE83 ; [.2337.0020.0005] # ARABIC MATHEMATICAL LOOPED DAL
1EEA3 ; [.2337.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
FEAA ; [.2337.0020.0019] # ARABIC LETTER DAL FINAL FORM
FEA9 ; [.2337.0020.001A] # ARABIC LETTER DAL ISOLATED FORM
0630 ; [.2338.0020.0002] # ARABIC LETTER THAL
1EE18 ; [.2338.0020.0005] # ARABIC MATHEMATICAL THAL
1EE98 ; [.2338.0020.0005] # ARABIC MATHEMATICAL LOOPED THAL
1EEB8 ; [.2338.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THAL
FEAC ; [.2338.0020.0019] # ARABIC LETTER THAL FINAL FORM
FEAB ; [.2338.0020.001A] # ARABIC LETTER THAL ISOLATED FORM
FC5B ; [.2338.0020.001A][.0000.0098.001A] # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
0688 ; [.2339.0020.0002] # ARABIC LETTER DDAL
FB89 ; [.2339.0020.0019] # ARABIC LETTER DDAL FINAL FORM
FB88 ; [.2339.0020.001A] # ARABIC LETTER DDAL ISOLATED FORM
0689 ; [.233A.0020.0002] # ARABIC LETTER DAL WITH RING
068A ; [.233B.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW
068B ; [.233C.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
068C ; [.233D.0020.0002] # ARABIC LETTER DAHAL
FB85 ; [.233D.0020.0019] # ARABIC LETTER DAHAL FINAL FORM
FB84 ; [.233D.0020.001A] # ARABIC LETTER DAHAL ISOLATED FORM
068D ; [.233E.0020.0002] # ARABIC LETTER DDAHAL
FB83 ; [.233E.0020.0019] # ARABIC LETTER DDAHAL FINAL FORM
FB82 ; [.233E.0020.001A] # ARABIC LETTER DDAHAL ISOLATED FORM
08AE ; [.233F.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS BELOW
068E ; [.2340.0020.0002] # ARABIC LETTER DUL
FB87 ; [.2340.0020.0019] # ARABIC LETTER DUL FINAL FORM
FB86 ; [.2340.0020.001A] # ARABIC LETTER DUL ISOLATED FORM
068F ; [.2341.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
0690 ; [.2342.0020.0002] # ARABIC LETTER DAL WITH FOUR DOTS ABOVE
06EE ; [.2343.0020.0002] # ARABIC LETTER DAL WITH INVERTED V
0759 ; [.2344.0020.0002] # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
075A ; [.2345.0020.0002] # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
0631 ; [.2346.0020.0002] # ARABIC LETTER REH
1EE13 ; [.2346.0020.0005] # ARABIC MATHEMATICAL REH
1EE93 ; [.2346.0020.0005] # ARABIC MATHEMATICAL LOOPED REH
1EEB3 ; [.2346.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK REH
FEAE ; [.2346.0020.0019] # ARABIC LETTER REH FINAL FORM
FEAD ; [.2346.0020.001A] # ARABIC LETTER REH ISOLATED FORM
FC5C ; [.2346.0020.001A][.0000.0098.001A] # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
FDF6 ; [.2346.0020.001A][.2359.0020.001A][.23B7.0020.001A][.239C.0020.001A] # ARABIC LIGATURE RASOUL ISOLATED FORM
FDFC ; [.2346.0020.001A][.23C7.0020.001A][.230B.0020.001A][.239C.0020.001A] # RIAL SIGN
0632 ; [.2347.0020.0002] # ARABIC LETTER ZAIN
1EE06 ; [.2347.0020.0005] # ARABIC MATHEMATICAL ZAIN
1EE86 ; [.2347.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAIN
1EEA6 ; [.2347.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN
FEB0 ; [.2347.0020.0019] # ARABIC LETTER ZAIN FINAL FORM
FEAF ; [.2347.0020.001A] # ARABIC LETTER ZAIN ISOLATED FORM
0691 ; [.2348.0020.0002] # ARABIC LETTER RREH
FB8D ; [.2348.0020.0019] # ARABIC LETTER RREH FINAL FORM
FB8C ; [.2348.0020.001A] # ARABIC LETTER RREH ISOLATED FORM
0692 ; [.2349.0020.0002] # ARABIC LETTER REH WITH SMALL V
0693 ; [.234A.0020.0002] # ARABIC LETTER REH WITH RING
0694 ; [.234B.0020.0002] # ARABIC LETTER REH WITH DOT BELOW
0695 ; [.234C.0020.0002] # ARABIC LETTER REH WITH SMALL V BELOW
0696 ; [.234D.0020.0002] # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
0697 ; [.234E.0020.0002] # ARABIC LETTER REH WITH TWO DOTS ABOVE
0698 ; [.234F.0020.0002] # ARABIC LETTER JEH
FB8B ; [.234F.0020.0019] # ARABIC LETTER JEH FINAL FORM
FB8A ; [.234F.0020.001A] # ARABIC LETTER JEH ISOLATED FORM
0699 ; [.2350.0020.0002] # ARABIC LETTER REH WITH FOUR DOTS ABOVE
06EF ; [.2351.0020.0002] # ARABIC LETTER REH WITH INVERTED V
075B ; [.2352.0020.0002] # ARABIC LETTER REH WITH STROKE
076B ; [.2353.0020.0002] # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
076C ; [.2354.0020.0002] # ARABIC LETTER REH WITH HAMZA ABOVE
0771 ; [.2355.0020.0002] # ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
08AA ; [.2356.0020.0002] # ARABIC LETTER REH WITH LOOP
08B2 ; [.2357.0020.0002] # ARABIC LETTER ZAIN WITH INVERTED V ABOVE
08B9 ; [.2358.0020.0002] # ARABIC LETTER REH WITH SMALL NOON ABOVE
0633 ; [.2359.0020.0002] # ARABIC LETTER SEEN
1EE0E ; [.2359.0020.0005] # ARABIC MATHEMATICAL SEEN
1EE2E ; [.2359.0020.0005] # ARABIC MATHEMATICAL INITIAL SEEN
1EE4E ; [.2359.0020.0005] # ARABIC MATHEMATICAL TAILED SEEN
1EE6E ; [.2359.0020.0005] # ARABIC MATHEMATICAL STRETCHED SEEN
1EE8E ; [.2359.0020.0005] # ARABIC MATHEMATICAL LOOPED SEEN
1EEAE ; [.2359.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN
FEB3 ; [.2359.0020.0017] # ARABIC LETTER SEEN INITIAL FORM
FEB4 ; [.2359.0020.0018] # ARABIC LETTER SEEN MEDIAL FORM
FEB2 ; [.2359.0020.0019] # ARABIC LETTER SEEN FINAL FORM
FEB1 ; [.2359.0020.001A] # ARABIC LETTER SEEN ISOLATED FORM
FCAD ; [.2359.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
FD34 ; [.2359.0020.0018][.2325.0020.0018] # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
FC1C ; [.2359.0020.001A][.2325.0020.001A] # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
FD5D ; [.2359.0020.0017][.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
FD5E ; [.2359.0020.0019][.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
FCAE ; [.2359.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
FD35 ; [.2359.0020.0018][.232C.0020.0018] # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
FC1D ; [.2359.0020.001A][.232C.0020.001A] # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
FD5C ; [.2359.0020.0017][.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
FCAF ; [.2359.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
FD36 ; [.2359.0020.0018][.232D.0020.0018] # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
FC1E ; [.2359.0020.001A][.232D.0020.001A] # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
FDA8 ; [.2359.0020.0019][.232D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
FDC6 ; [.2359.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
FD2A ; [.2359.0020.0019][.2346.0020.0019] # ARABIC LIGATURE SEEN WITH REH FINAL FORM
FD0E ; [.2359.0020.001A][.2346.0020.001A] # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
FCB0 ; [.2359.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
FCE7 ; [.2359.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
FC1F ; [.2359.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
FD61 ; [.2359.0020.0017][.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
FD60 ; [.2359.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
FD5F ; [.2359.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
FD63 ; [.2359.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
FD62 ; [.2359.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
FD31 ; [.2359.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
FCE8 ; [.2359.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
FD17 ; [.2359.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
FCFB ; [.2359.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
FD18 ; [.2359.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SEEN WITH YEH FINAL FORM
FCFC ; [.2359.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
0634 ; [.235A.0020.0002] # ARABIC LETTER SHEEN
1EE14 ; [.235A.0020.0005] # ARABIC MATHEMATICAL SHEEN
1EE34 ; [.235A.0020.0005] # ARABIC MATHEMATICAL INITIAL SHEEN
1EE54 ; [.235A.0020.0005] # ARABIC MATHEMATICAL TAILED SHEEN
1EE74 ; [.235A.0020.0005] # ARABIC MATHEMATICAL STRETCHED SHEEN
1EE94 ; [.235A.0020.0005] # ARABIC MATHEMATICAL LOOPED SHEEN
1EEB4 ; [.235A.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN
FEB7 ; [.235A.0020.0017] # ARABIC LETTER SHEEN INITIAL FORM
FEB8 ; [.235A.0020.0018] # ARABIC LETTER SHEEN MEDIAL FORM
FEB6 ; [.235A.0020.0019] # ARABIC LETTER SHEEN FINAL FORM
FEB5 ; [.235A.0020.001A] # ARABIC LETTER SHEEN ISOLATED FORM
FD2D ; [.235A.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
FD37 ; [.235A.0020.0018][.2325.0020.0018] # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
FD25 ; [.235A.0020.0019][.2325.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
FD09 ; [.235A.0020.001A][.2325.0020.001A] # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
FD69 ; [.235A.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
FD2E ; [.235A.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
FD38 ; [.235A.0020.0018][.232C.0020.0018] # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
FD26 ; [.235A.0020.0019][.232C.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
FD0A ; [.235A.0020.001A][.232C.0020.001A] # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
FD68 ; [.235A.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
FD67 ; [.235A.0020.0019][.232C.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
FDAA ; [.235A.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
FD2F ; [.235A.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
FD39 ; [.235A.0020.0018][.232D.0020.0018] # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
FD27 ; [.235A.0020.0019][.232D.0020.0019] # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
FD0B ; [.235A.0020.001A][.232D.0020.001A] # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
FD29 ; [.235A.0020.0019][.2346.0020.0019] # ARABIC LIGATURE SHEEN WITH REH FINAL FORM
FD0D ; [.235A.0020.001A][.2346.0020.001A] # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
FD30 ; [.235A.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
FCE9 ; [.235A.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
FD28 ; [.235A.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
FD0C ; [.235A.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
FD6B ; [.235A.0020.0017][.23A3.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
FD6A ; [.235A.0020.0019][.23A3.0020.0019][.232D.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
FD6D ; [.235A.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
FD6C ; [.235A.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
FD32 ; [.235A.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
FCEA ; [.235A.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
FD19 ; [.235A.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
FCFD ; [.235A.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
FD1A ; [.235A.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
FCFE ; [.235A.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
069A ; [.235B.0020.0002] # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
069B ; [.235C.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW
069C ; [.235D.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
06FA ; [.235E.0020.0002] # ARABIC LETTER SHEEN WITH DOT BELOW
075C ; [.235F.0020.0002] # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
076D ; [.2360.0020.0002] # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
0770 ; [.2361.0020.0002] # ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS
077D ; [.2362.0020.0002] # ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE
077E ; [.2363.0020.0002] # ARABIC LETTER SEEN WITH INVERTED V
0635 ; [.2364.0020.0002] # ARABIC LETTER SAD
1EE11 ; [.2364.0020.0005] # ARABIC MATHEMATICAL SAD
1EE31 ; [.2364.0020.0005] # ARABIC MATHEMATICAL INITIAL SAD
1EE51 ; [.2364.0020.0005] # ARABIC MATHEMATICAL TAILED SAD
1EE71 ; [.2364.0020.0005] # ARABIC MATHEMATICAL STRETCHED SAD
1EE91 ; [.2364.0020.0005] # ARABIC MATHEMATICAL LOOPED SAD
1EEB1 ; [.2364.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SAD
FEBB ; [.2364.0020.0017] # ARABIC LETTER SAD INITIAL FORM
FEBC ; [.2364.0020.0018] # ARABIC LETTER SAD MEDIAL FORM
FEBA ; [.2364.0020.0019] # ARABIC LETTER SAD FINAL FORM
FEB9 ; [.2364.0020.001A] # ARABIC LETTER SAD ISOLATED FORM
FCB1 ; [.2364.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SAD WITH HAH INITIAL FORM
FC20 ; [.2364.0020.001A][.232C.0020.001A] # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
FD65 ; [.2364.0020.0017][.232C.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
FD64 ; [.2364.0020.0019][.232C.0020.0019][.232C.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
FDA9 ; [.2364.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
FCB2 ; [.2364.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
FD2B ; [.2364.0020.0019][.2346.0020.0019] # ARABIC LIGATURE SAD WITH REH FINAL FORM
FD0F ; [.2364.0020.001A][.2346.0020.001A] # ARABIC LIGATURE SAD WITH REH ISOLATED FORM
FDF5 ; [.2364.0020.001A][.239C.0020.001A][.236E.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SALAM ISOLATED FORM
FDF9 ; [.2364.0020.001A][.239C.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SALLA ISOLATED FORM
FDFA ; [.2364.0020.001A][.239C.0020.001A][.23C5.0020.001A][*0209.0020.001A][.230B.0020.001A][.239C.0020.001A][.239C.0020.001A][.23B1.0020.001A][*0209.0020.001A][.236E.0020.001A][.239C.0020.001A][.23C6.0020.001A][.23B1.0020.001A][*0209.0020.001A][.23B7.0020.001A][.2359.0020.001A][.239C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
FDF0 ; [.2364.0020.001A][.239C.0020.001A][.23D4.0020.001A] # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
FCB3 ; [.2364.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
FC21 ; [.2364.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
FDC5 ; [.2364.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
FD66 ; [.2364.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
FD21 ; [.2364.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
FD05 ; [.2364.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
FD22 ; [.2364.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SAD WITH YEH FINAL FORM
FD06 ; [.2364.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
0636 ; [.2365.0020.0002] # ARABIC LETTER DAD
1EE19 ; [.2365.0020.0005] # ARABIC MATHEMATICAL DAD
1EE39 ; [.2365.0020.0005] # ARABIC MATHEMATICAL INITIAL DAD
1EE59 ; [.2365.0020.0005] # ARABIC MATHEMATICAL TAILED DAD
1EE79 ; [.2365.0020.0005] # ARABIC MATHEMATICAL STRETCHED DAD
1EE99 ; [.2365.0020.0005] # ARABIC MATHEMATICAL LOOPED DAD
1EEB9 ; [.2365.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAD
FEBF ; [.2365.0020.0017] # ARABIC LETTER DAD INITIAL FORM
FEC0 ; [.2365.0020.0018] # ARABIC LETTER DAD MEDIAL FORM
FEBE ; [.2365.0020.0019] # ARABIC LETTER DAD FINAL FORM
FEBD ; [.2365.0020.001A] # ARABIC LETTER DAD ISOLATED FORM
FCB4 ; [.2365.0020.0017][.2325.0020.0017] # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
FC22 ; [.2365.0020.001A][.2325.0020.001A] # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
FCB5 ; [.2365.0020.0017][.232C.0020.0017] # ARABIC LIGATURE DAD WITH HAH INITIAL FORM
FC23 ; [.2365.0020.001A][.232C.0020.001A] # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
FD6E ; [.2365.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
FDAB ; [.2365.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
FCB6 ; [.2365.0020.0017][.232D.0020.0017] # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
FC24 ; [.2365.0020.001A][.232D.0020.001A] # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
FD70 ; [.2365.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
FD6F ; [.2365.0020.0019][.232D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
FD2C ; [.2365.0020.0019][.2346.0020.0019] # ARABIC LIGATURE DAD WITH REH FINAL FORM
FD10 ; [.2365.0020.001A][.2346.0020.001A] # ARABIC LIGATURE DAD WITH REH ISOLATED FORM
FCB7 ; [.2365.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
FC25 ; [.2365.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
FD23 ; [.2365.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
FD07 ; [.2365.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
FD24 ; [.2365.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE DAD WITH YEH FINAL FORM
FD08 ; [.2365.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
069D ; [.2366.0020.0002] # ARABIC LETTER SAD WITH TWO DOTS BELOW
08AF ; [.2367.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS BELOW
069E ; [.2368.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS ABOVE
06FB ; [.2369.0020.0002] # ARABIC LETTER DAD WITH DOT BELOW
0637 ; [.236A.0020.0002] # ARABIC LETTER TAH
1EE08 ; [.236A.0020.0005] # ARABIC MATHEMATICAL TAH
1EE68 ; [.236A.0020.0005] # ARABIC MATHEMATICAL STRETCHED TAH
1EE88 ; [.236A.0020.0005] # ARABIC MATHEMATICAL LOOPED TAH
1EEA8 ; [.236A.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TAH
FEC3 ; [.236A.0020.0017] # ARABIC LETTER TAH INITIAL FORM
FEC4 ; [.236A.0020.0018] # ARABIC LETTER TAH MEDIAL FORM
FEC2 ; [.236A.0020.0019] # ARABIC LETTER TAH FINAL FORM
FEC1 ; [.236A.0020.001A] # ARABIC LETTER TAH ISOLATED FORM
FCB8 ; [.236A.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TAH WITH HAH INITIAL FORM
FC26 ; [.236A.0020.001A][.232C.0020.001A] # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
FD33 ; [.236A.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
FD3A ; [.236A.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
FC27 ; [.236A.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
FD72 ; [.236A.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
FD71 ; [.236A.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
FD73 ; [.236A.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
FD74 ; [.236A.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
FD11 ; [.236A.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
FCF5 ; [.236A.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
FD12 ; [.236A.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TAH WITH YEH FINAL FORM
FCF6 ; [.236A.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
0638 ; [.236B.0020.0002] # ARABIC LETTER ZAH
1EE1A ; [.236B.0020.0005] # ARABIC MATHEMATICAL ZAH
1EE7A ; [.236B.0020.0005] # ARABIC MATHEMATICAL STRETCHED ZAH
1EE9A ; [.236B.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAH
1EEBA ; [.236B.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH
FEC7 ; [.236B.0020.0017] # ARABIC LETTER ZAH INITIAL FORM
FEC8 ; [.236B.0020.0018] # ARABIC LETTER ZAH MEDIAL FORM
FEC6 ; [.236B.0020.0019] # ARABIC LETTER ZAH FINAL FORM
FEC5 ; [.236B.0020.001A] # ARABIC LETTER ZAH ISOLATED FORM
FCB9 ; [.236B.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
FD3B ; [.236B.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
FC28 ; [.236B.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
069F ; [.236C.0020.0002] # ARABIC LETTER TAH WITH THREE DOTS ABOVE
08A3 ; [.236D.0020.0002] # ARABIC LETTER TAH WITH TWO DOTS ABOVE
0639 ; [.236E.0020.0002] # ARABIC LETTER AIN
1EE0F ; [.236E.0020.0005] # ARABIC MATHEMATICAL AIN
1EE2F ; [.236E.0020.0005] # ARABIC MATHEMATICAL INITIAL AIN
1EE4F ; [.236E.0020.0005] # ARABIC MATHEMATICAL TAILED AIN
1EE6F ; [.236E.0020.0005] # ARABIC MATHEMATICAL STRETCHED AIN
1EE8F ; [.236E.0020.0005] # ARABIC MATHEMATICAL LOOPED AIN
1EEAF ; [.236E.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK AIN
FECB ; [.236E.0020.0017] # ARABIC LETTER AIN INITIAL FORM
FECC ; [.236E.0020.0018] # ARABIC LETTER AIN MEDIAL FORM
FECA ; [.236E.0020.0019] # ARABIC LETTER AIN FINAL FORM
FEC9 ; [.236E.0020.001A] # ARABIC LETTER AIN ISOLATED FORM
FCBA ; [.236E.0020.0017][.2325.0020.0017] # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
FC29 ; [.236E.0020.001A][.2325.0020.001A] # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
FDC4 ; [.236E.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
FD75 ; [.236E.0020.0019][.2325.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
FDF7 ; [.236E.0020.001A][.239C.0020.001A][.23C6.0020.001A][.23B1.0020.001A] # ARABIC LIGATURE ALAYHE ISOLATED FORM
FCBB ; [.236E.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
FC2A ; [.236E.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
FD77 ; [.236E.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
FD76 ; [.236E.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
FD78 ; [.236E.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
FDB6 ; [.236E.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
FD13 ; [.236E.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
FCF7 ; [.236E.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
FD14 ; [.236E.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE AIN WITH YEH FINAL FORM
FCF8 ; [.236E.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
063A ; [.236F.0020.0002] # ARABIC LETTER GHAIN
1EE1B ; [.236F.0020.0005] # ARABIC MATHEMATICAL GHAIN
1EE3B ; [.236F.0020.0005] # ARABIC MATHEMATICAL INITIAL GHAIN
1EE5B ; [.236F.0020.0005] # ARABIC MATHEMATICAL TAILED GHAIN
1EE7B ; [.236F.0020.0005] # ARABIC MATHEMATICAL STRETCHED GHAIN
1EE9B ; [.236F.0020.0005] # ARABIC MATHEMATICAL LOOPED GHAIN
1EEBB ; [.236F.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
FECF ; [.236F.0020.0017] # ARABIC LETTER GHAIN INITIAL FORM
FED0 ; [.236F.0020.0018] # ARABIC LETTER GHAIN MEDIAL FORM
FECE ; [.236F.0020.0019] # ARABIC LETTER GHAIN FINAL FORM
FECD ; [.236F.0020.001A] # ARABIC LETTER GHAIN ISOLATED FORM
FCBC ; [.236F.0020.0017][.2325.0020.0017] # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
FC2B ; [.236F.0020.001A][.2325.0020.001A] # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
FCBD ; [.236F.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
FC2C ; [.236F.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
FD79 ; [.236F.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
FD7B ; [.236F.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
FD7A ; [.236F.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
FD15 ; [.236F.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
FCF9 ; [.236F.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
FD16 ; [.236F.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
FCFA ; [.236F.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
06A0 ; [.2370.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS ABOVE
06FC ; [.2371.0020.0002] # ARABIC LETTER GHAIN WITH DOT BELOW
075D ; [.2372.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS ABOVE
075E ; [.2373.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
075F ; [.2374.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
08B3 ; [.2375.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS BELOW
0641 ; [.2376.0020.0002] # ARABIC LETTER FEH
1EE10 ; [.2376.0020.0005] # ARABIC MATHEMATICAL FEH
1EE30 ; [.2376.0020.0005] # ARABIC MATHEMATICAL INITIAL FEH
1EE70 ; [.2376.0020.0005] # ARABIC MATHEMATICAL STRETCHED FEH
1EE90 ; [.2376.0020.0005] # ARABIC MATHEMATICAL LOOPED FEH
1EEB0 ; [.2376.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK FEH
FED3 ; [.2376.0020.0017] # ARABIC LETTER FEH INITIAL FORM
FED4 ; [.2376.0020.0018] # ARABIC LETTER FEH MEDIAL FORM
FED2 ; [.2376.0020.0019] # ARABIC LETTER FEH FINAL FORM
FED1 ; [.2376.0020.001A] # ARABIC LETTER FEH ISOLATED FORM
FCBE ; [.2376.0020.0017][.2325.0020.0017] # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
FC2D ; [.2376.0020.001A][.2325.0020.001A] # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
FCBF ; [.2376.0020.0017][.232C.0020.0017] # ARABIC LIGATURE FEH WITH HAH INITIAL FORM
FC2E ; [.2376.0020.001A][.232C.0020.001A] # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
FCC0 ; [.2376.0020.0017][.232D.0020.0017] # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
FC2F ; [.2376.0020.001A][.232D.0020.001A] # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
FD7D ; [.2376.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
FD7C ; [.2376.0020.0019][.232D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
FCC1 ; [.2376.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
FC30 ; [.2376.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
FDC1 ; [.2376.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
FC7C ; [.2376.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
FC31 ; [.2376.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
FC7D ; [.2376.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE FEH WITH YEH FINAL FORM
FC32 ; [.2376.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
06A1 ; [.2377.0020.0002] # ARABIC LETTER DOTLESS FEH
1EE1E ; [.2377.0020.0005] # ARABIC MATHEMATICAL DOTLESS FEH
1EE7E ; [.2377.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
06A2 ; [.2378.0020.0002] # ARABIC LETTER FEH WITH DOT MOVED BELOW
08BB ; [.2379.0020.0002] # ARABIC LETTER AFRICAN FEH
06A3 ; [.237A.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW
06A4 ; [.237B.0020.0002] # ARABIC LETTER VEH
FB6C ; [.237B.0020.0017] # ARABIC LETTER VEH INITIAL FORM
FB6D ; [.237B.0020.0018] # ARABIC LETTER VEH MEDIAL FORM
FB6B ; [.237B.0020.0019] # ARABIC LETTER VEH FINAL FORM
FB6A ; [.237B.0020.001A] # ARABIC LETTER VEH ISOLATED FORM
08A4 ; [.237C.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE
06A5 ; [.237D.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS BELOW
06A6 ; [.237E.0020.0002] # ARABIC LETTER PEHEH
FB70 ; [.237E.0020.0017] # ARABIC LETTER PEHEH INITIAL FORM
FB71 ; [.237E.0020.0018] # ARABIC LETTER PEHEH MEDIAL FORM
FB6F ; [.237E.0020.0019] # ARABIC LETTER PEHEH FINAL FORM
FB6E ; [.237E.0020.001A] # ARABIC LETTER PEHEH ISOLATED FORM
0760 ; [.237F.0020.0002] # ARABIC LETTER FEH WITH TWO DOTS BELOW
0761 ; [.2380.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
066F ; [.2381.0020.0002] # ARABIC LETTER DOTLESS QAF
1EE1F ; [.2381.0020.0005] # ARABIC MATHEMATICAL DOTLESS QAF
1EE5F ; [.2381.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS QAF
0642 ; [.2382.0020.0002] # ARABIC LETTER QAF
1EE12 ; [.2382.0020.0005] # ARABIC MATHEMATICAL QAF
1EE32 ; [.2382.0020.0005] # ARABIC MATHEMATICAL INITIAL QAF
1EE52 ; [.2382.0020.0005] # ARABIC MATHEMATICAL TAILED QAF
1EE72 ; [.2382.0020.0005] # ARABIC MATHEMATICAL STRETCHED QAF
1EE92 ; [.2382.0020.0005] # ARABIC MATHEMATICAL LOOPED QAF
1EEB2 ; [.2382.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK QAF
FED7 ; [.2382.0020.0017] # ARABIC LETTER QAF INITIAL FORM
FED8 ; [.2382.0020.0018] # ARABIC LETTER QAF MEDIAL FORM
FED6 ; [.2382.0020.0019] # ARABIC LETTER QAF FINAL FORM
FED5 ; [.2382.0020.001A] # ARABIC LETTER QAF ISOLATED FORM
FCC2 ; [.2382.0020.0017][.232C.0020.0017] # ARABIC LIGATURE QAF WITH HAH INITIAL FORM
FC33 ; [.2382.0020.001A][.232C.0020.001A] # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
FDF1 ; [.2382.0020.001A][.239C.0020.001A][.23D4.0020.001A] # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
FCC3 ; [.2382.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
FC34 ; [.2382.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
FDB4 ; [.2382.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
FD7E ; [.2382.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
FD7F ; [.2382.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
FDB2 ; [.2382.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
FC7E ; [.2382.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
FC35 ; [.2382.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
FC7F ; [.2382.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE QAF WITH YEH FINAL FORM
FC36 ; [.2382.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
06A7 ; [.2383.0020.0002] # ARABIC LETTER QAF WITH DOT ABOVE
08BC ; [.2384.0020.0002] # ARABIC LETTER AFRICAN QAF
06A8 ; [.2385.0020.0002] # ARABIC LETTER QAF WITH THREE DOTS ABOVE
08A5 ; [.2386.0020.0002] # ARABIC LETTER QAF WITH DOT BELOW
0643 ; [.2387.0020.0002] # ARABIC LETTER KAF
1EE0A ; [.2387.0020.0005] # ARABIC MATHEMATICAL KAF
1EE2A ; [.2387.0020.0005] # ARABIC MATHEMATICAL INITIAL KAF
1EE6A ; [.2387.0020.0005] # ARABIC MATHEMATICAL STRETCHED KAF
FEDB ; [.2387.0020.0017] # ARABIC LETTER KAF INITIAL FORM
FEDC ; [.2387.0020.0018] # ARABIC LETTER KAF MEDIAL FORM
FEDA ; [.2387.0020.0019] # ARABIC LETTER KAF FINAL FORM
FED9 ; [.2387.0020.001A] # ARABIC LETTER KAF ISOLATED FORM
FC80 ; [.2387.0020.0019][.230B.0020.0019] # ARABIC LIGATURE KAF WITH ALEF FINAL FORM
FC37 ; [.2387.0020.001A][.230B.0020.001A] # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
FCC4 ; [.2387.0020.0017][.2325.0020.0017] # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
FC38 ; [.2387.0020.001A][.2325.0020.001A] # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
FCC5 ; [.2387.0020.0017][.232C.0020.0017] # ARABIC LIGATURE KAF WITH HAH INITIAL FORM
FC39 ; [.2387.0020.001A][.232C.0020.001A] # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
FCC6 ; [.2387.0020.0017][.232D.0020.0017] # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
FC3A ; [.2387.0020.001A][.232D.0020.001A] # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
FCC7 ; [.2387.0020.0017][.239C.0020.0017] # ARABIC LIGATURE KAF WITH LAM INITIAL FORM
FCEB ; [.2387.0020.0018][.239C.0020.0018] # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
FC81 ; [.2387.0020.0019][.239C.0020.0019] # ARABIC LIGATURE KAF WITH LAM FINAL FORM
FC3B ; [.2387.0020.001A][.239C.0020.001A] # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
FCC8 ; [.2387.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
FCEC ; [.2387.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
FC82 ; [.2387.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE KAF WITH MEEM FINAL FORM
FC3C ; [.2387.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
FDC3 ; [.2387.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
FDBB ; [.2387.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
FDB7 ; [.2387.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
FC83 ; [.2387.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
FC3D ; [.2387.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
FC84 ; [.2387.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE KAF WITH YEH FINAL FORM
FC3E ; [.2387.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
06A9 ; [.2388.0020.0002] # ARABIC LETTER KEHEH
FB90 ; [.2388.0020.0017] # ARABIC LETTER KEHEH INITIAL FORM
FB91 ; [.2388.0020.0018] # ARABIC LETTER KEHEH MEDIAL FORM
FB8F ; [.2388.0020.0019] # ARABIC LETTER KEHEH FINAL FORM
FB8E ; [.2388.0020.001A] # ARABIC LETTER KEHEH ISOLATED FORM
06AA ; [.2389.0020.0002] # ARABIC LETTER SWASH KAF
06AB ; [.238A.0020.0002] # ARABIC LETTER KAF WITH RING
06AC ; [.238B.0020.0002] # ARABIC LETTER KAF WITH DOT ABOVE
077F ; [.238C.0020.0002] # ARABIC LETTER KAF WITH TWO DOTS ABOVE
06AD ; [.238D.0020.0002] # ARABIC LETTER NG
FBD5 ; [.238D.0020.0017] # ARABIC LETTER NG INITIAL FORM
FBD6 ; [.238D.0020.0018] # ARABIC LETTER NG MEDIAL FORM
FBD4 ; [.238D.0020.0019] # ARABIC LETTER NG FINAL FORM
FBD3 ; [.238D.0020.001A] # ARABIC LETTER NG ISOLATED FORM
06AE ; [.238E.0020.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW
08B4 ; [.238F.0020.0002] # ARABIC LETTER KAF WITH DOT BELOW
06AF ; [.2390.0020.0002] # ARABIC LETTER GAF
FB94 ; [.2390.0020.0017] # ARABIC LETTER GAF INITIAL FORM
FB95 ; [.2390.0020.0018] # ARABIC LETTER GAF MEDIAL FORM
FB93 ; [.2390.0020.0019] # ARABIC LETTER GAF FINAL FORM
FB92 ; [.2390.0020.001A] # ARABIC LETTER GAF ISOLATED FORM
08B0 ; [.2391.0020.0002] # ARABIC LETTER GAF WITH INVERTED STROKE
06B0 ; [.2392.0020.0002] # ARABIC LETTER GAF WITH RING
06B1 ; [.2393.0020.0002] # ARABIC LETTER NGOEH
FB9C ; [.2393.0020.0017] # ARABIC LETTER NGOEH INITIAL FORM
FB9D ; [.2393.0020.0018] # ARABIC LETTER NGOEH MEDIAL FORM
FB9B ; [.2393.0020.0019] # ARABIC LETTER NGOEH FINAL FORM
FB9A ; [.2393.0020.001A] # ARABIC LETTER NGOEH ISOLATED FORM
06B2 ; [.2394.0020.0002] # ARABIC LETTER GAF WITH TWO DOTS BELOW
06B3 ; [.2395.0020.0002] # ARABIC LETTER GUEH
FB98 ; [.2395.0020.0017] # ARABIC LETTER GUEH INITIAL FORM
FB99 ; [.2395.0020.0018] # ARABIC LETTER GUEH MEDIAL FORM
FB97 ; [.2395.0020.0019] # ARABIC LETTER GUEH FINAL FORM
FB96 ; [.2395.0020.001A] # ARABIC LETTER GUEH ISOLATED FORM
06B4 ; [.2396.0020.0002] # ARABIC LETTER GAF WITH THREE DOTS ABOVE
0762 ; [.2397.0020.0002] # ARABIC LETTER KEHEH WITH DOT ABOVE
063B ; [.2398.0020.0002] # ARABIC LETTER KEHEH WITH TWO DOTS ABOVE
063C ; [.2399.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS BELOW
0763 ; [.239A.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
0764 ; [.239B.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
0644 ; [.239C.0020.0002] # ARABIC LETTER LAM
1EE0B ; [.239C.0020.0005] # ARABIC MATHEMATICAL LAM
1EE2B ; [.239C.0020.0005] # ARABIC MATHEMATICAL INITIAL LAM
1EE4B ; [.239C.0020.0005] # ARABIC MATHEMATICAL TAILED LAM
1EE8B ; [.239C.0020.0005] # ARABIC MATHEMATICAL LOOPED LAM
1EEAB ; [.239C.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK LAM
FEDF ; [.239C.0020.0017] # ARABIC LETTER LAM INITIAL FORM
FEE0 ; [.239C.0020.0018] # ARABIC LETTER LAM MEDIAL FORM
FEDE ; [.239C.0020.0019] # ARABIC LETTER LAM FINAL FORM
FEDD ; [.239C.0020.001A] # ARABIC LETTER LAM ISOLATED FORM
FEF6 ; [.239C.0020.0019][.22FE.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
FEF5 ; [.239C.0020.001A][.22FE.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
FEF8 ; [.239C.0020.0019][.22FF.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
FEF7 ; [.239C.0020.001A][.22FF.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
FEFA ; [.239C.0020.0019][.2303.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
FEF9 ; [.239C.0020.001A][.2303.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
FEFC ; [.239C.0020.0019][.230B.0020.0019] # ARABIC LIGATURE LAM WITH ALEF FINAL FORM
FEFB ; [.239C.0020.001A][.230B.0020.001A] # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
FCC9 ; [.239C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
FC3F ; [.239C.0020.001A][.2325.0020.001A] # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
FD83 ; [.239C.0020.0017][.2325.0020.0017][.2325.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
FD84 ; [.239C.0020.0019][.2325.0020.0019][.2325.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
FDBA ; [.239C.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
FDBC ; [.239C.0020.0019][.2325.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
FDAC ; [.239C.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
FCCA ; [.239C.0020.0017][.232C.0020.0017] # ARABIC LIGATURE LAM WITH HAH INITIAL FORM
FC40 ; [.239C.0020.001A][.232C.0020.001A] # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
FDB5 ; [.239C.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
FD80 ; [.239C.0020.0019][.232C.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
FD82 ; [.239C.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
FD81 ; [.239C.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
FCCB ; [.239C.0020.0017][.232D.0020.0017] # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
FC41 ; [.239C.0020.001A][.232D.0020.001A] # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
FD86 ; [.239C.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
FD85 ; [.239C.0020.0019][.232D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
FCCC ; [.239C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
FCED ; [.239C.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
FC85 ; [.239C.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH MEEM FINAL FORM
FC42 ; [.239C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
FD88 ; [.239C.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
FD87 ; [.239C.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
FDAD ; [.239C.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
FCCD ; [.239C.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE LAM WITH HEH INITIAL FORM
FC86 ; [.239C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
FC43 ; [.239C.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
FC87 ; [.239C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH YEH FINAL FORM
FC44 ; [.239C.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
06B5 ; [.239D.0020.0002] # ARABIC LETTER LAM WITH SMALL V
06B6 ; [.239E.0020.0002] # ARABIC LETTER LAM WITH DOT ABOVE
06B7 ; [.239F.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS ABOVE
06B8 ; [.23A0.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS BELOW
076A ; [.23A1.0020.0002] # ARABIC LETTER LAM WITH BAR
08A6 ; [.23A2.0020.0002] # ARABIC LETTER LAM WITH DOUBLE BAR
0645 ; [.23A3.0020.0002] # ARABIC LETTER MEEM
1EE0C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL MEEM
1EE2C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL INITIAL MEEM
1EE6C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL STRETCHED MEEM
1EE8C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL LOOPED MEEM
1EEAC ; [.23A3.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM
FEE3 ; [.23A3.0020.0017] # ARABIC LETTER MEEM INITIAL FORM
FEE4 ; [.23A3.0020.0018] # ARABIC LETTER MEEM MEDIAL FORM
FEE2 ; [.23A3.0020.0019] # ARABIC LETTER MEEM FINAL FORM
FEE1 ; [.23A3.0020.001A] # ARABIC LETTER MEEM ISOLATED FORM
06FE ; [.23A3.0020.0004][.0000.0111.0004] # ARABIC SIGN SINDHI POSTPOSITION MEN
FC88 ; [.23A3.0020.0019][.230B.0020.0019] # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
FCCE ; [.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
FC45 ; [.23A3.0020.001A][.2325.0020.001A] # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
FD8C ; [.23A3.0020.0017][.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
FD92 ; [.23A3.0020.0017][.2325.0020.0017][.232D.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
FD8D ; [.23A3.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
FDC0 ; [.23A3.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
FCCF ; [.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
FC46 ; [.23A3.0020.001A][.232C.0020.001A] # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
FD89 ; [.23A3.0020.0017][.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
FD8A ; [.23A3.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
FDF4 ; [.23A3.0020.001A][.232C.0020.001A][.23A3.0020.001A][.2337.0020.001A] # ARABIC LIGATURE MOHAMMAD ISOLATED FORM
FD8B ; [.23A3.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
FCD0 ; [.23A3.0020.0017][.232D.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
FC47 ; [.23A3.0020.001A][.232D.0020.001A] # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
FD8E ; [.23A3.0020.0017][.232D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
FD8F ; [.23A3.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
FDB9 ; [.23A3.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
FCD1 ; [.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
FC89 ; [.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
FC48 ; [.23A3.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
FDB1 ; [.23A3.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
FC49 ; [.23A3.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
FC4A ; [.23A3.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
0765 ; [.23A4.0020.0002] # ARABIC LETTER MEEM WITH DOT ABOVE
0766 ; [.23A5.0020.0002] # ARABIC LETTER MEEM WITH DOT BELOW
08A7 ; [.23A6.0020.0002] # ARABIC LETTER MEEM WITH THREE DOTS ABOVE
0646 ; [.23A7.0020.0002] # ARABIC LETTER NOON
1EE0D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL NOON
1EE2D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL INITIAL NOON
1EE4D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL TAILED NOON
1EE6D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL STRETCHED NOON
1EE8D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL LOOPED NOON
1EEAD ; [.23A7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK NOON
FEE7 ; [.23A7.0020.0017] # ARABIC LETTER NOON INITIAL FORM
FEE8 ; [.23A7.0020.0018] # ARABIC LETTER NOON MEDIAL FORM
FEE6 ; [.23A7.0020.0019] # ARABIC LETTER NOON FINAL FORM
FEE5 ; [.23A7.0020.001A] # ARABIC LETTER NOON ISOLATED FORM
FCD2 ; [.23A7.0020.0017][.2325.0020.0017] # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
FC4B ; [.23A7.0020.001A][.2325.0020.001A] # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
FDB8 ; [.23A7.0020.0017][.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
FDBD ; [.23A7.0020.0019][.2325.0020.0019][.232C.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
FD98 ; [.23A7.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
FD97 ; [.23A7.0020.0019][.2325.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
FD99 ; [.23A7.0020.0019][.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
FDC7 ; [.23A7.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
FCD3 ; [.23A7.0020.0017][.232C.0020.0017] # ARABIC LIGATURE NOON WITH HAH INITIAL FORM
FC4C ; [.23A7.0020.001A][.232C.0020.001A] # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
FD95 ; [.23A7.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
FD96 ; [.23A7.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
FDB3 ; [.23A7.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
FCD4 ; [.23A7.0020.0017][.232D.0020.0017] # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
FC4D ; [.23A7.0020.001A][.232D.0020.001A] # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
FC8A ; [.23A7.0020.0019][.2346.0020.0019] # ARABIC LIGATURE NOON WITH REH FINAL FORM
FC8B ; [.23A7.0020.0019][.2347.0020.0019] # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
FCD5 ; [.23A7.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
FCEE ; [.23A7.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
FC8C ; [.23A7.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE NOON WITH MEEM FINAL FORM
FC4E ; [.23A7.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
FD9B ; [.23A7.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
FD9A ; [.23A7.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
FC8D ; [.23A7.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE NOON WITH NOON FINAL FORM
FCD6 ; [.23A7.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE NOON WITH HEH INITIAL FORM
FCEF ; [.23A7.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
FC8E ; [.23A7.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
FC4F ; [.23A7.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
FC8F ; [.23A7.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH YEH FINAL FORM
FC50 ; [.23A7.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
06BA ; [.23A8.0020.0002] # ARABIC LETTER NOON GHUNNA
1EE1D ; [.23A8.0020.0005] # ARABIC MATHEMATICAL DOTLESS NOON
1EE5D ; [.23A8.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS NOON
FB9F ; [.23A8.0020.0019] # ARABIC LETTER NOON GHUNNA FINAL FORM
FB9E ; [.23A8.0020.001A] # ARABIC LETTER NOON GHUNNA ISOLATED FORM
08BD ; [.23A9.0020.0002] # ARABIC LETTER AFRICAN NOON
06BB ; [.23AA.0020.0002] # ARABIC LETTER RNOON
FBA2 ; [.23AA.0020.0017] # ARABIC LETTER RNOON INITIAL FORM
FBA3 ; [.23AA.0020.0018] # ARABIC LETTER RNOON MEDIAL FORM
FBA1 ; [.23AA.0020.0019] # ARABIC LETTER RNOON FINAL FORM
FBA0 ; [.23AA.0020.001A] # ARABIC LETTER RNOON ISOLATED FORM
06BC ; [.23AB.0020.0002] # ARABIC LETTER NOON WITH RING
06BD ; [.23AC.0020.0002] # ARABIC LETTER NOON WITH THREE DOTS ABOVE
06B9 ; [.23AD.0020.0002] # ARABIC LETTER NOON WITH DOT BELOW
0767 ; [.23AE.0020.0002] # ARABIC LETTER NOON WITH TWO DOTS BELOW
0768 ; [.23AF.0020.0002] # ARABIC LETTER NOON WITH SMALL TAH
0769 ; [.23B0.0020.0002] # ARABIC LETTER NOON WITH SMALL V
0647 ; [.23B1.0020.0002] # ARABIC LETTER HEH
1EE24 ; [.23B1.0020.0005] # ARABIC MATHEMATICAL INITIAL HEH
1EE64 ; [.23B1.0020.0005] # ARABIC MATHEMATICAL STRETCHED HEH
1EE84 ; [.23B1.0020.0005] # ARABIC MATHEMATICAL LOOPED HEH
FEEB ; [.23B1.0020.0017] # ARABIC LETTER HEH INITIAL FORM
FEEC ; [.23B1.0020.0018] # ARABIC LETTER HEH MEDIAL FORM
FEEA ; [.23B1.0020.0019] # ARABIC LETTER HEH FINAL FORM
FEE9 ; [.23B1.0020.001A] # ARABIC LETTER HEH ISOLATED FORM
FCD9 ; [.23B1.0020.0017][.0000.0098.0017] # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
FCD7 ; [.23B1.0020.0017][.2325.0020.0017] # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
FC51 ; [.23B1.0020.001A][.2325.0020.001A] # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
FCD8 ; [.23B1.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
FC52 ; [.23B1.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
FD93 ; [.23B1.0020.0017][.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
FD94 ; [.23B1.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
FC53 ; [.23B1.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
FC54 ; [.23B1.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
06BE ; [.23B2.0020.0002] # ARABIC LETTER HEH DOACHASHMEE
FBAC ; [.23B2.0020.0017] # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
FBAD ; [.23B2.0020.0018] # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
FBAB ; [.23B2.0020.0019] # ARABIC LETTER HEH DOACHASHMEE FINAL FORM
FBAA ; [.23B2.0020.001A] # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
06C1 ; [.23B3.0020.0002] # ARABIC LETTER HEH GOAL
FBA8 ; [.23B3.0020.0017] # ARABIC LETTER HEH GOAL INITIAL FORM
FBA9 ; [.23B3.0020.0018] # ARABIC LETTER HEH GOAL MEDIAL FORM
FBA7 ; [.23B3.0020.0019] # ARABIC LETTER HEH GOAL FINAL FORM
FBA6 ; [.23B3.0020.001A] # ARABIC LETTER HEH GOAL ISOLATED FORM
06C2 ; [.23B3.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
06C3 ; [.23B4.0020.0002] # ARABIC LETTER TEH MARBUTA GOAL
06FF ; [.23B5.0020.0002] # ARABIC LETTER HEH WITH INVERTED V
06D5 ; [.23B6.0020.0002] # ARABIC LETTER AE
06C0 ; [.23B6.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH WITH YEH ABOVE
FBA5 ; [.23B6.0020.0019][.0000.0083.0019] # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
FBA4 ; [.23B6.0020.001A][.0000.0083.001A] # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
0648 ; [.23B7.0020.0002] # ARABIC LETTER WAW
06E5 ; [.23B7.0020.0004] # ARABIC SMALL WAW
1EE05 ; [.23B7.0020.0005] # ARABIC MATHEMATICAL WAW
1EE85 ; [.23B7.0020.0005] # ARABIC MATHEMATICAL LOOPED WAW
1EEA5 ; [.23B7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK WAW
FEEE ; [.23B7.0020.0019] # ARABIC LETTER WAW FINAL FORM
FEED ; [.23B7.0020.001A] # ARABIC LETTER WAW ISOLATED FORM
0676 ; [.23B7.0020.0004][.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA WAW
FDF8 ; [.23B7.0020.001A][.2359.0020.001A][.239C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE WASALLAM ISOLATED FORM
06C4 ; [.23B8.0020.0002] # ARABIC LETTER WAW WITH RING
06C5 ; [.23B9.0020.0002] # ARABIC LETTER KIRGHIZ OE
FBE1 ; [.23B9.0020.0019] # ARABIC LETTER KIRGHIZ OE FINAL FORM
FBE0 ; [.23B9.0020.001A] # ARABIC LETTER KIRGHIZ OE ISOLATED FORM
06C6 ; [.23BA.0020.0002] # ARABIC LETTER OE
FBDA ; [.23BA.0020.0019] # ARABIC LETTER OE FINAL FORM
FBD9 ; [.23BA.0020.001A] # ARABIC LETTER OE ISOLATED FORM
06C7 ; [.23BB.0020.0002] # ARABIC LETTER U
FBD8 ; [.23BB.0020.0019] # ARABIC LETTER U FINAL FORM
FBD7 ; [.23BB.0020.001A] # ARABIC LETTER U ISOLATED FORM
0677 ; [.23BB.0020.0004][.22FD.0020.0004] # ARABIC LETTER U WITH HAMZA ABOVE
FBDD ; [.23BB.0020.001A][.22FD.0020.001A] # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
06C8 ; [.23BC.0020.0002] # ARABIC LETTER YU
FBDC ; [.23BC.0020.0019] # ARABIC LETTER YU FINAL FORM
FBDB ; [.23BC.0020.001A] # ARABIC LETTER YU ISOLATED FORM
06C9 ; [.23BD.0020.0002] # ARABIC LETTER KIRGHIZ YU
FBE3 ; [.23BD.0020.0019] # ARABIC LETTER KIRGHIZ YU FINAL FORM
FBE2 ; [.23BD.0020.001A] # ARABIC LETTER KIRGHIZ YU ISOLATED FORM
06CA ; [.23BE.0020.0002] # ARABIC LETTER WAW WITH TWO DOTS ABOVE
06CB ; [.23BF.0020.0002] # ARABIC LETTER VE
FBDF ; [.23BF.0020.0019] # ARABIC LETTER VE FINAL FORM
FBDE ; [.23BF.0020.001A] # ARABIC LETTER VE ISOLATED FORM
08B1 ; [.23C0.0020.0002] # ARABIC LETTER STRAIGHT WAW
06CF ; [.23C1.0020.0002] # ARABIC LETTER WAW WITH DOT ABOVE
0778 ; [.23C2.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
0779 ; [.23C3.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
08AB ; [.23C4.0020.0002] # ARABIC LETTER WAW WITH DOT WITHIN
0649 ; [.23C5.0020.0002] # ARABIC LETTER ALEF MAKSURA
FBE8 ; [.23C5.0020.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
FBE9 ; [.23C5.0020.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
FEF0 ; [.23C5.0020.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM
FEEF ; [.23C5.0020.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM
FC90 ; [.23C5.0020.0019][.0000.0098.0019] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
FC5D ; [.23C5.0020.001A][.0000.0098.001A] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
064A ; [.23C6.0020.0002] # ARABIC LETTER YEH
06E6 ; [.23C6.0020.0004] # ARABIC SMALL YEH
1EE09 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL YEH
1EE29 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL INITIAL YEH
1EE49 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL TAILED YEH
1EE69 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL STRETCHED YEH
1EE89 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL LOOPED YEH
1EEA9 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
FEF3 ; [.23C6.0020.0017] # ARABIC LETTER YEH INITIAL FORM
FEF4 ; [.23C6.0020.0018] # ARABIC LETTER YEH MEDIAL FORM
FEF2 ; [.23C6.0020.0019] # ARABIC LETTER YEH FINAL FORM
FEF1 ; [.23C6.0020.001A] # ARABIC LETTER YEH ISOLATED FORM
0678 ; [.23C6.0020.0004][.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA YEH
FCDA ; [.23C6.0020.0017][.2325.0020.0017] # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
FC55 ; [.23C6.0020.001A][.2325.0020.001A] # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
FDAF ; [.23C6.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
FCDB ; [.23C6.0020.0017][.232C.0020.0017] # ARABIC LIGATURE YEH WITH HAH INITIAL FORM
FC56 ; [.23C6.0020.001A][.232C.0020.001A] # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
FDAE ; [.23C6.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
FCDC ; [.23C6.0020.0017][.232D.0020.0017] # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
FC57 ; [.23C6.0020.001A][.232D.0020.001A] # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
FC91 ; [.23C6.0020.0019][.2346.0020.0019] # ARABIC LIGATURE YEH WITH REH FINAL FORM
FC92 ; [.23C6.0020.0019][.2347.0020.0019] # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
FCDD ; [.23C6.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
FCF0 ; [.23C6.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
FC93 ; [.23C6.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE YEH WITH MEEM FINAL FORM
FC58 ; [.23C6.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
FD9D ; [.23C6.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
FD9C ; [.23C6.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
FDB0 ; [.23C6.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
FC94 ; [.23C6.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE YEH WITH NOON FINAL FORM
FCDE ; [.23C6.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE YEH WITH HEH INITIAL FORM
FCF1 ; [.23C6.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
FC95 ; [.23C6.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
FC59 ; [.23C6.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
FC96 ; [.23C6.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH YEH FINAL FORM
FC5A ; [.23C6.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
06CC ; [.23C7.0020.0002] # ARABIC LETTER FARSI YEH
FBFE ; [.23C7.0020.0017] # ARABIC LETTER FARSI YEH INITIAL FORM
FBFF ; [.23C7.0020.0018] # ARABIC LETTER FARSI YEH MEDIAL FORM
FBFD ; [.23C7.0020.0019] # ARABIC LETTER FARSI YEH FINAL FORM
FBFC ; [.23C7.0020.001A] # ARABIC LETTER FARSI YEH ISOLATED FORM
06CD ; [.23C8.0020.0002] # ARABIC LETTER YEH WITH TAIL
06CE ; [.23C9.0020.0002] # ARABIC LETTER YEH WITH SMALL V
06D0 ; [.23CA.0020.0002] # ARABIC LETTER E
FBE6 ; [.23CA.0020.0017] # ARABIC LETTER E INITIAL FORM
FBE7 ; [.23CA.0020.0018] # ARABIC LETTER E MEDIAL FORM
FBE5 ; [.23CA.0020.0019] # ARABIC LETTER E FINAL FORM
FBE4 ; [.23CA.0020.001A] # ARABIC LETTER E ISOLATED FORM
06D1 ; [.23CB.0020.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW
063D ; [.23CC.0020.0002] # ARABIC LETTER FARSI YEH WITH INVERTED V
063E ; [.23CD.0020.0002] # ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE
063F ; [.23CE.0020.0002] # ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
0620 ; [.23CF.0020.0002] # ARABIC LETTER KASHMIRI YEH
0775 ; [.23D0.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
0776 ; [.23D1.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
0777 ; [.23D2.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
08BA ; [.23D3.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE
06D2 ; [.23D4.0020.0002] # ARABIC LETTER YEH BARREE
FBAF ; [.23D4.0020.0019] # ARABIC LETTER YEH BARREE FINAL FORM
FBAE ; [.23D4.0020.001A] # ARABIC LETTER YEH BARREE ISOLATED FORM
06D3 ; [.23D4.0020.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
FBB1 ; [.23D4.0020.0019][.0000.0083.0019] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB0 ; [.23D4.0020.001A][.0000.0083.001A] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
077A ; [.23D5.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
077B ; [.23D6.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
0710 ; [.23D7.0020.0002] # SYRIAC LETTER ALAPH
0712 ; [.23D8.0020.0002] # SYRIAC LETTER BETH
072D ; [.23D8.0020.0004][.0000.0112.0004] # SYRIAC LETTER PERSIAN BHETH
0713 ; [.23D9.0020.0002] # SYRIAC LETTER GAMAL
0714 ; [.23D9.0020.0004][.0000.0111.0004] # SYRIAC LETTER GAMAL GARSHUNI
072E ; [.23D9.0020.0004][.0000.0112.0004] # SYRIAC LETTER PERSIAN GHAMAL
0716 ; [.23DA.0020.0002] # SYRIAC LETTER DOTLESS DALATH RISH
0715 ; [.23DB.0020.0002] # SYRIAC LETTER DALATH
072F ; [.23DB.0020.0004][.0000.0112.0004] # SYRIAC LETTER PERSIAN DHALATH
0717 ; [.23DC.0020.0002] # SYRIAC LETTER HE
0718 ; [.23DD.0020.0002] # SYRIAC LETTER WAW
0719 ; [.23DE.0020.0002] # SYRIAC LETTER ZAIN
074D ; [.23DF.0020.0002] # SYRIAC LETTER SOGDIAN ZHAIN
071A ; [.23E0.0020.0002] # SYRIAC LETTER HETH
071B ; [.23E1.0020.0002] # SYRIAC LETTER TETH
071C ; [.23E1.0020.0004][.0000.0111.0004] # SYRIAC LETTER TETH GARSHUNI
071D ; [.23E2.0020.0002] # SYRIAC LETTER YUDH
071E ; [.23E3.0020.0002] # SYRIAC LETTER YUDH HE
071F ; [.23E4.0020.0002] # SYRIAC LETTER KAPH
074E ; [.23E5.0020.0002] # SYRIAC LETTER SOGDIAN KHAPH
0720 ; [.23E6.0020.0002] # SYRIAC LETTER LAMADH
0721 ; [.23E7.0020.0002] # SYRIAC LETTER MIM
0722 ; [.23E8.0020.0002] # SYRIAC LETTER NUN
0723 ; [.23E9.0020.0002] # SYRIAC LETTER SEMKATH
0724 ; [.23E9.0020.0019] # SYRIAC LETTER FINAL SEMKATH
0725 ; [.23EA.0020.0002] # SYRIAC LETTER E
0726 ; [.23EB.0020.0002] # SYRIAC LETTER PE
0727 ; [.23EB.0020.0004][.0000.0111.0004] # SYRIAC LETTER REVERSED PE
074F ; [.23EC.0020.0002] # SYRIAC LETTER SOGDIAN FE
0728 ; [.23ED.0020.0002] # SYRIAC LETTER SADHE
0729 ; [.23EE.0020.0002] # SYRIAC LETTER QAPH
072A ; [.23EF.0020.0002] # SYRIAC LETTER RISH
072B ; [.23F0.0020.0002] # SYRIAC LETTER SHIN
072C ; [.23F1.0020.0002] # SYRIAC LETTER TAW
0840 ; [.23F2.0020.0002] # MANDAIC LETTER HALQA
0841 ; [.23F3.0020.0002] # MANDAIC LETTER AB
0842 ; [.23F4.0020.0002] # MANDAIC LETTER AG
0843 ; [.23F5.0020.0002] # MANDAIC LETTER AD
0844 ; [.23F6.0020.0002] # MANDAIC LETTER AH
0845 ; [.23F7.0020.0002] # MANDAIC LETTER USHENNA
0846 ; [.23F8.0020.0002] # MANDAIC LETTER AZ
0847 ; [.23F9.0020.0002] # MANDAIC LETTER IT
0848 ; [.23FA.0020.0002] # MANDAIC LETTER ATT
0849 ; [.23FB.0020.0002] # MANDAIC LETTER AKSA
084A ; [.23FC.0020.0002] # MANDAIC LETTER AK
084B ; [.23FD.0020.0002] # MANDAIC LETTER AL
084C ; [.23FE.0020.0002] # MANDAIC LETTER AM
084D ; [.23FF.0020.0002] # MANDAIC LETTER AN
084E ; [.2400.0020.0002] # MANDAIC LETTER AS
084F ; [.2401.0020.0002] # MANDAIC LETTER IN
0850 ; [.2402.0020.0002] # MANDAIC LETTER AP
0851 ; [.2403.0020.0002] # MANDAIC LETTER ASZ
0852 ; [.2404.0020.0002] # MANDAIC LETTER AQ
0853 ; [.2405.0020.0002] # MANDAIC LETTER AR
0854 ; [.2406.0020.0002] # MANDAIC LETTER ASH
0855 ; [.2407.0020.0002] # MANDAIC LETTER AT
0856 ; [.2408.0020.0002] # MANDAIC LETTER DUSHENNA
0857 ; [.2409.0020.0002] # MANDAIC LETTER KAD
0858 ; [.240A.0020.0002] # MANDAIC LETTER AIN
0780 ; [.240B.0020.0002] # THAANA LETTER HAA
0799 ; [.240C.0020.0002] # THAANA LETTER HHAA
079A ; [.240D.0020.0002] # THAANA LETTER KHAA
0781 ; [.240E.0020.0002] # THAANA LETTER SHAVIYANI
0782 ; [.240F.0020.0002] # THAANA LETTER NOONU
0783 ; [.2410.0020.0002] # THAANA LETTER RAA
079C ; [.2411.0020.0002] # THAANA LETTER ZAA
0784 ; [.2412.0020.0002] # THAANA LETTER BAA
0785 ; [.2413.0020.0002] # THAANA LETTER LHAVIYANI
0786 ; [.2414.0020.0002] # THAANA LETTER KAAFU
0787 ; [.2415.0020.0002] # THAANA LETTER ALIFU
07A2 ; [.2416.0020.0002] # THAANA LETTER AINU
07A3 ; [.2417.0020.0002] # THAANA LETTER GHAINU
0788 ; [.2418.0020.0002] # THAANA LETTER VAAVU
07A5 ; [.2419.0020.0002] # THAANA LETTER WAAVU
0789 ; [.241A.0020.0002] # THAANA LETTER MEEMU
078A ; [.241B.0020.0002] # THAANA LETTER FAAFU
078B ; [.241C.0020.0002] # THAANA LETTER DHAALU
079B ; [.241D.0020.0002] # THAANA LETTER THAALU
078C ; [.241E.0020.0002] # THAANA LETTER THAA
0798 ; [.241F.0020.0002] # THAANA LETTER TTAA
07A0 ; [.2420.0020.0002] # THAANA LETTER TO
07A1 ; [.2421.0020.0002] # THAANA LETTER ZO
078D ; [.2422.0020.0002] # THAANA LETTER LAAMU
078E ; [.2423.0020.0002] # THAANA LETTER GAAFU
07A4 ; [.2424.0020.0002] # THAANA LETTER QAAFU
078F ; [.2425.0020.0002] # THAANA LETTER GNAVIYANI
0790 ; [.2426.0020.0002] # THAANA LETTER SEENU
079D ; [.2427.0020.0002] # THAANA LETTER SHEENU
079E ; [.2428.0020.0002] # THAANA LETTER SAADHU
079F ; [.2429.0020.0002] # THAANA LETTER DAADHU
0791 ; [.242A.0020.0002] # THAANA LETTER DAVIYANI
0792 ; [.242B.0020.0002] # THAANA LETTER ZAVIYANI
0793 ; [.242C.0020.0002] # THAANA LETTER TAVIYANI
0794 ; [.242D.0020.0002] # THAANA LETTER YAA
0795 ; [.242E.0020.0002] # THAANA LETTER PAVIYANI
0796 ; [.242F.0020.0002] # THAANA LETTER JAVIYANI
0797 ; [.2430.0020.0002] # THAANA LETTER CHAVIYANI
07B1 ; [.2431.0020.0002] # THAANA LETTER NAA
07A6 ; [.2432.0020.0002] # THAANA ABAFILI
07A7 ; [.2433.0020.0002] # THAANA AABAAFILI
07A8 ; [.2434.0020.0002] # THAANA IBIFILI
07A9 ; [.2435.0020.0002] # THAANA EEBEEFILI
07AA ; [.2436.0020.0002] # THAANA UBUFILI
07AB ; [.2437.0020.0002] # THAANA OOBOOFILI
07AC ; [.2438.0020.0002] # THAANA EBEFILI
07AD ; [.2439.0020.0002] # THAANA EYBEYFILI
07AE ; [.243A.0020.0002] # THAANA OBOFILI
07AF ; [.243B.0020.0002] # THAANA OABOAFILI
07B0 ; [.243C.0020.0002] # THAANA SUKUN
07CA ; [.243D.0020.0002] # NKO LETTER A
07CB ; [.243E.0020.0002] # NKO LETTER EE
07CC ; [.243F.0020.0002] # NKO LETTER I
07CD ; [.2440.0020.0002] # NKO LETTER E
07CE ; [.2441.0020.0002] # NKO LETTER U
07CF ; [.2442.0020.0002] # NKO LETTER OO
07D0 ; [.2443.0020.0002] # NKO LETTER O
07D1 ; [.2444.0020.0002] # NKO LETTER DAGBASINNA
07D2 ; [.2445.0020.0002] # NKO LETTER N
07D3 ; [.2446.0020.0002] # NKO LETTER BA
07D4 ; [.2447.0020.0002] # NKO LETTER PA
07D5 ; [.2448.0020.0002] # NKO LETTER TA
07D6 ; [.2449.0020.0002] # NKO LETTER JA
07E8 ; [.2449.0020.0004][.0000.0110.0004] # NKO LETTER JONA JA
07D7 ; [.244A.0020.0002] # NKO LETTER CHA
07E9 ; [.244A.0020.0004][.0000.0110.0004] # NKO LETTER JONA CHA
07D8 ; [.244B.0020.0002] # NKO LETTER DA
07D9 ; [.244C.0020.0002] # NKO LETTER RA
07EA ; [.244C.0020.0004][.0000.0110.0004] # NKO LETTER JONA RA
07DA ; [.244D.0020.0002] # NKO LETTER RRA
07DB ; [.244E.0020.0002] # NKO LETTER SA
07DC ; [.244F.0020.0002] # NKO LETTER GBA
07DD ; [.2450.0020.0002] # NKO LETTER FA
07DE ; [.2451.0020.0002] # NKO LETTER KA
07DF ; [.2452.0020.0002] # NKO LETTER LA
07E0 ; [.2453.0020.0002] # NKO LETTER NA WOLOSO
07E1 ; [.2454.0020.0002] # NKO LETTER MA
07E2 ; [.2455.0020.0002] # NKO LETTER NYA
07E3 ; [.2456.0020.0002] # NKO LETTER NA
07E4 ; [.2457.0020.0002] # NKO LETTER HA
07E5 ; [.2458.0020.0002] # NKO LETTER WA
07E6 ; [.2459.0020.0002] # NKO LETTER YA
07E7 ; [.245A.0020.0002] # NKO LETTER NYA WOLOSO
07F4 ; [.245B.0020.0002] # NKO HIGH TONE APOSTROPHE
07F5 ; [.245C.0020.0002] # NKO LOW TONE APOSTROPHE
2D30 ; [.245D.0020.0002] # TIFINAGH LETTER YA
2D31 ; [.245E.0020.0002] # TIFINAGH LETTER YAB
2D32 ; [.245F.0020.0002] # TIFINAGH LETTER YABH
2D33 ; [.2460.0020.0002] # TIFINAGH LETTER YAG
2D34 ; [.2461.0020.0002] # TIFINAGH LETTER YAGHH
2D35 ; [.2462.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAJ
2D36 ; [.2463.0020.0002] # TIFINAGH LETTER YAJ
2D37 ; [.2464.0020.0002] # TIFINAGH LETTER YAD
2D38 ; [.2465.0020.0002] # TIFINAGH LETTER YADH
2D39 ; [.2466.0020.0002] # TIFINAGH LETTER YADD
2D3A ; [.2467.0020.0002] # TIFINAGH LETTER YADDH
2D3B ; [.2468.0020.0002] # TIFINAGH LETTER YEY
2D66 ; [.2469.0020.0002] # TIFINAGH LETTER YE
2D3C ; [.246A.0020.0002] # TIFINAGH LETTER YAF
2D3D ; [.246B.0020.0002] # TIFINAGH LETTER YAK
2D3E ; [.246C.0020.0002] # TIFINAGH LETTER TUAREG YAK
2D3F ; [.246D.0020.0002] # TIFINAGH LETTER YAKHH
2D40 ; [.246E.0020.0002] # TIFINAGH LETTER YAH
2D41 ; [.246F.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAH
2D42 ; [.2470.0020.0002] # TIFINAGH LETTER TUAREG YAH
2D43 ; [.2471.0020.0002] # TIFINAGH LETTER YAHH
2D44 ; [.2472.0020.0002] # TIFINAGH LETTER YAA
2D45 ; [.2473.0020.0002] # TIFINAGH LETTER YAKH
2D46 ; [.2474.0020.0002] # TIFINAGH LETTER TUAREG YAKH
2D47 ; [.2475.0020.0002] # TIFINAGH LETTER YAQ
2D48 ; [.2476.0020.0002] # TIFINAGH LETTER TUAREG YAQ
2D49 ; [.2477.0020.0002] # TIFINAGH LETTER YI
2D4A ; [.2478.0020.0002] # TIFINAGH LETTER YAZH
2D4B ; [.2479.0020.0002] # TIFINAGH LETTER AHAGGAR YAZH
2D4C ; [.247A.0020.0002] # TIFINAGH LETTER TUAREG YAZH
2D4D ; [.247B.0020.0002] # TIFINAGH LETTER YAL
2D4E ; [.247C.0020.0002] # TIFINAGH LETTER YAM
2D4F ; [.247D.0020.0002] # TIFINAGH LETTER YAN
2D50 ; [.247E.0020.0002] # TIFINAGH LETTER TUAREG YAGN
2D51 ; [.247F.0020.0002] # TIFINAGH LETTER TUAREG YANG
2D52 ; [.2480.0020.0002] # TIFINAGH LETTER YAP
2D53 ; [.2481.0020.0002] # TIFINAGH LETTER YU
2D67 ; [.2482.0020.0002] # TIFINAGH LETTER YO
2D54 ; [.2483.0020.0002] # TIFINAGH LETTER YAR
2D55 ; [.2484.0020.0002] # TIFINAGH LETTER YARR
2D56 ; [.2485.0020.0002] # TIFINAGH LETTER YAGH
2D57 ; [.2486.0020.0002] # TIFINAGH LETTER TUAREG YAGH
2D58 ; [.2487.0020.0002] # TIFINAGH LETTER AYER YAGH
2D59 ; [.2488.0020.0002] # TIFINAGH LETTER YAS
2D5A ; [.2489.0020.0002] # TIFINAGH LETTER YASS
2D5B ; [.248A.0020.0002] # TIFINAGH LETTER YASH
2D5C ; [.248B.0020.0002] # TIFINAGH LETTER YAT
2D5D ; [.248C.0020.0002] # TIFINAGH LETTER YATH
2D5E ; [.248D.0020.0002] # TIFINAGH LETTER YACH
2D5F ; [.248E.0020.0002] # TIFINAGH LETTER YATT
2D60 ; [.248F.0020.0002] # TIFINAGH LETTER YAV
2D61 ; [.2490.0020.0002] # TIFINAGH LETTER YAW
2D62 ; [.2491.0020.0002] # TIFINAGH LETTER YAY
2D63 ; [.2492.0020.0002] # TIFINAGH LETTER YAZ
2D64 ; [.2493.0020.0002] # TIFINAGH LETTER TAWELLEMET YAZ
2D65 ; [.2494.0020.0002] # TIFINAGH LETTER YAZZ
2D6F ; [.2495.0020.0002] # TIFINAGH MODIFIER LETTER LABIALIZATION MARK
1200 ; [.2496.0020.0002] # ETHIOPIC SYLLABLE HA
1201 ; [.2497.0020.0002] # ETHIOPIC SYLLABLE HU
1202 ; [.2498.0020.0002] # ETHIOPIC SYLLABLE HI
1203 ; [.2499.0020.0002] # ETHIOPIC SYLLABLE HAA
1204 ; [.249A.0020.0002] # ETHIOPIC SYLLABLE HEE
1205 ; [.249B.0020.0002] # ETHIOPIC SYLLABLE HE
1206 ; [.249C.0020.0002] # ETHIOPIC SYLLABLE HO
1207 ; [.249D.0020.0002] # ETHIOPIC SYLLABLE HOA
1208 ; [.249E.0020.0002] # ETHIOPIC SYLLABLE LA
1209 ; [.249F.0020.0002] # ETHIOPIC SYLLABLE LU
120A ; [.24A0.0020.0002] # ETHIOPIC SYLLABLE LI
120B ; [.24A1.0020.0002] # ETHIOPIC SYLLABLE LAA
120C ; [.24A2.0020.0002] # ETHIOPIC SYLLABLE LEE
120D ; [.24A3.0020.0002] # ETHIOPIC SYLLABLE LE
120E ; [.24A4.0020.0002] # ETHIOPIC SYLLABLE LO
120F ; [.24A5.0020.0002] # ETHIOPIC SYLLABLE LWA
2D80 ; [.24A6.0020.0002] # ETHIOPIC SYLLABLE LOA
1210 ; [.24A7.0020.0002] # ETHIOPIC SYLLABLE HHA
1211 ; [.24A8.0020.0002] # ETHIOPIC SYLLABLE HHU
1212 ; [.24A9.0020.0002] # ETHIOPIC SYLLABLE HHI
1213 ; [.24AA.0020.0002] # ETHIOPIC SYLLABLE HHAA
1214 ; [.24AB.0020.0002] # ETHIOPIC SYLLABLE HHEE
1215 ; [.24AC.0020.0002] # ETHIOPIC SYLLABLE HHE
1216 ; [.24AD.0020.0002] # ETHIOPIC SYLLABLE HHO
1217 ; [.24AE.0020.0002] # ETHIOPIC SYLLABLE HHWA
1218 ; [.24AF.0020.0002] # ETHIOPIC SYLLABLE MA
1219 ; [.24B0.0020.0002] # ETHIOPIC SYLLABLE MU
121A ; [.24B1.0020.0002] # ETHIOPIC SYLLABLE MI
121B ; [.24B2.0020.0002] # ETHIOPIC SYLLABLE MAA
121C ; [.24B3.0020.0002] # ETHIOPIC SYLLABLE MEE
121D ; [.24B4.0020.0002] # ETHIOPIC SYLLABLE ME
121E ; [.24B5.0020.0002] # ETHIOPIC SYLLABLE MO
121F ; [.24B6.0020.0002] # ETHIOPIC SYLLABLE MWA
1380 ; [.24B7.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT MWA
1381 ; [.24B8.0020.0002] # ETHIOPIC SYLLABLE MWI
1382 ; [.24B9.0020.0002] # ETHIOPIC SYLLABLE MWEE
1383 ; [.24BA.0020.0002] # ETHIOPIC SYLLABLE MWE
2D81 ; [.24BB.0020.0002] # ETHIOPIC SYLLABLE MOA
1220 ; [.24BC.0020.0002] # ETHIOPIC SYLLABLE SZA
1221 ; [.24BD.0020.0002] # ETHIOPIC SYLLABLE SZU
1222 ; [.24BE.0020.0002] # ETHIOPIC SYLLABLE SZI
1223 ; [.24BF.0020.0002] # ETHIOPIC SYLLABLE SZAA
1224 ; [.24C0.0020.0002] # ETHIOPIC SYLLABLE SZEE
1225 ; [.24C1.0020.0002] # ETHIOPIC SYLLABLE SZE
1226 ; [.24C2.0020.0002] # ETHIOPIC SYLLABLE SZO
1227 ; [.24C3.0020.0002] # ETHIOPIC SYLLABLE SZWA
1228 ; [.24C4.0020.0002] # ETHIOPIC SYLLABLE RA
1229 ; [.24C5.0020.0002] # ETHIOPIC SYLLABLE RU
122A ; [.24C6.0020.0002] # ETHIOPIC SYLLABLE RI
122B ; [.24C7.0020.0002] # ETHIOPIC SYLLABLE RAA
122C ; [.24C8.0020.0002] # ETHIOPIC SYLLABLE REE
122D ; [.24C9.0020.0002] # ETHIOPIC SYLLABLE RE
122E ; [.24CA.0020.0002] # ETHIOPIC SYLLABLE RO
122F ; [.24CB.0020.0002] # ETHIOPIC SYLLABLE RWA
2D82 ; [.24CC.0020.0002] # ETHIOPIC SYLLABLE ROA
1230 ; [.24CD.0020.0002] # ETHIOPIC SYLLABLE SA
1231 ; [.24CE.0020.0002] # ETHIOPIC SYLLABLE SU
1232 ; [.24CF.0020.0002] # ETHIOPIC SYLLABLE SI
1233 ; [.24D0.0020.0002] # ETHIOPIC SYLLABLE SAA
1234 ; [.24D1.0020.0002] # ETHIOPIC SYLLABLE SEE
1235 ; [.24D2.0020.0002] # ETHIOPIC SYLLABLE SE
1236 ; [.24D3.0020.0002] # ETHIOPIC SYLLABLE SO
1237 ; [.24D4.0020.0002] # ETHIOPIC SYLLABLE SWA
2D83 ; [.24D5.0020.0002] # ETHIOPIC SYLLABLE SOA
AB01 ; [.24D6.0020.0002] # ETHIOPIC SYLLABLE TTHU
AB02 ; [.24D7.0020.0002] # ETHIOPIC SYLLABLE TTHI
AB03 ; [.24D8.0020.0002] # ETHIOPIC SYLLABLE TTHAA
AB04 ; [.24D9.0020.0002] # ETHIOPIC SYLLABLE TTHEE
AB05 ; [.24DA.0020.0002] # ETHIOPIC SYLLABLE TTHE
AB06 ; [.24DB.0020.0002] # ETHIOPIC SYLLABLE TTHO
1238 ; [.24DC.0020.0002] # ETHIOPIC SYLLABLE SHA
1239 ; [.24DD.0020.0002] # ETHIOPIC SYLLABLE SHU
123A ; [.24DE.0020.0002] # ETHIOPIC SYLLABLE SHI
123B ; [.24DF.0020.0002] # ETHIOPIC SYLLABLE SHAA
123C ; [.24E0.0020.0002] # ETHIOPIC SYLLABLE SHEE
123D ; [.24E1.0020.0002] # ETHIOPIC SYLLABLE SHE
123E ; [.24E2.0020.0002] # ETHIOPIC SYLLABLE SHO
123F ; [.24E3.0020.0002] # ETHIOPIC SYLLABLE SHWA
2D84 ; [.24E4.0020.0002] # ETHIOPIC SYLLABLE SHOA
1240 ; [.24E5.0020.0002] # ETHIOPIC SYLLABLE QA
1241 ; [.24E6.0020.0002] # ETHIOPIC SYLLABLE QU
1242 ; [.24E7.0020.0002] # ETHIOPIC SYLLABLE QI
1243 ; [.24E8.0020.0002] # ETHIOPIC SYLLABLE QAA
1244 ; [.24E9.0020.0002] # ETHIOPIC SYLLABLE QEE
1245 ; [.24EA.0020.0002] # ETHIOPIC SYLLABLE QE
1246 ; [.24EB.0020.0002] # ETHIOPIC SYLLABLE QO
1247 ; [.24EC.0020.0002] # ETHIOPIC SYLLABLE QOA
1248 ; [.24ED.0020.0002] # ETHIOPIC SYLLABLE QWA
124A ; [.24EE.0020.0002] # ETHIOPIC SYLLABLE QWI
124B ; [.24EF.0020.0002] # ETHIOPIC SYLLABLE QWAA
124C ; [.24F0.0020.0002] # ETHIOPIC SYLLABLE QWEE
124D ; [.24F1.0020.0002] # ETHIOPIC SYLLABLE QWE
1250 ; [.24F2.0020.0002] # ETHIOPIC SYLLABLE QHA
1251 ; [.24F3.0020.0002] # ETHIOPIC SYLLABLE QHU
1252 ; [.24F4.0020.0002] # ETHIOPIC SYLLABLE QHI
1253 ; [.24F5.0020.0002] # ETHIOPIC SYLLABLE QHAA
1254 ; [.24F6.0020.0002] # ETHIOPIC SYLLABLE QHEE
1255 ; [.24F7.0020.0002] # ETHIOPIC SYLLABLE QHE
1256 ; [.24F8.0020.0002] # ETHIOPIC SYLLABLE QHO
1258 ; [.24F9.0020.0002] # ETHIOPIC SYLLABLE QHWA
125A ; [.24FA.0020.0002] # ETHIOPIC SYLLABLE QHWI
125B ; [.24FB.0020.0002] # ETHIOPIC SYLLABLE QHWAA
125C ; [.24FC.0020.0002] # ETHIOPIC SYLLABLE QHWEE
125D ; [.24FD.0020.0002] # ETHIOPIC SYLLABLE QHWE
1260 ; [.24FE.0020.0002] # ETHIOPIC SYLLABLE BA
1261 ; [.24FF.0020.0002] # ETHIOPIC SYLLABLE BU
1262 ; [.2500.0020.0002] # ETHIOPIC SYLLABLE BI
1263 ; [.2501.0020.0002] # ETHIOPIC SYLLABLE BAA
1264 ; [.2502.0020.0002] # ETHIOPIC SYLLABLE BEE
1265 ; [.2503.0020.0002] # ETHIOPIC SYLLABLE BE
1266 ; [.2504.0020.0002] # ETHIOPIC SYLLABLE BO
1267 ; [.2505.0020.0002] # ETHIOPIC SYLLABLE BWA
1384 ; [.2506.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT BWA
1385 ; [.2507.0020.0002] # ETHIOPIC SYLLABLE BWI
1386 ; [.2508.0020.0002] # ETHIOPIC SYLLABLE BWEE
1387 ; [.2509.0020.0002] # ETHIOPIC SYLLABLE BWE
2D85 ; [.250A.0020.0002] # ETHIOPIC SYLLABLE BOA
1268 ; [.250B.0020.0002] # ETHIOPIC SYLLABLE VA
1269 ; [.250C.0020.0002] # ETHIOPIC SYLLABLE VU
126A ; [.250D.0020.0002] # ETHIOPIC SYLLABLE VI
126B ; [.250E.0020.0002] # ETHIOPIC SYLLABLE VAA
126C ; [.250F.0020.0002] # ETHIOPIC SYLLABLE VEE
126D ; [.2510.0020.0002] # ETHIOPIC SYLLABLE VE
126E ; [.2511.0020.0002] # ETHIOPIC SYLLABLE VO
126F ; [.2512.0020.0002] # ETHIOPIC SYLLABLE VWA
1270 ; [.2513.0020.0002] # ETHIOPIC SYLLABLE TA
1271 ; [.2514.0020.0002] # ETHIOPIC SYLLABLE TU
1272 ; [.2515.0020.0002] # ETHIOPIC SYLLABLE TI
1273 ; [.2516.0020.0002] # ETHIOPIC SYLLABLE TAA
1274 ; [.2517.0020.0002] # ETHIOPIC SYLLABLE TEE
1275 ; [.2518.0020.0002] # ETHIOPIC SYLLABLE TE
1276 ; [.2519.0020.0002] # ETHIOPIC SYLLABLE TO
1277 ; [.251A.0020.0002] # ETHIOPIC SYLLABLE TWA
2D86 ; [.251B.0020.0002] # ETHIOPIC SYLLABLE TOA
1278 ; [.251C.0020.0002] # ETHIOPIC SYLLABLE CA
1279 ; [.251D.0020.0002] # ETHIOPIC SYLLABLE CU
127A ; [.251E.0020.0002] # ETHIOPIC SYLLABLE CI
127B ; [.251F.0020.0002] # ETHIOPIC SYLLABLE CAA
127C ; [.2520.0020.0002] # ETHIOPIC SYLLABLE CEE
127D ; [.2521.0020.0002] # ETHIOPIC SYLLABLE CE
127E ; [.2522.0020.0002] # ETHIOPIC SYLLABLE CO
127F ; [.2523.0020.0002] # ETHIOPIC SYLLABLE CWA
2D87 ; [.2524.0020.0002] # ETHIOPIC SYLLABLE COA
1280 ; [.2525.0020.0002] # ETHIOPIC SYLLABLE XA
1281 ; [.2526.0020.0002] # ETHIOPIC SYLLABLE XU
1282 ; [.2527.0020.0002] # ETHIOPIC SYLLABLE XI
1283 ; [.2528.0020.0002] # ETHIOPIC SYLLABLE XAA
1284 ; [.2529.0020.0002] # ETHIOPIC SYLLABLE XEE
1285 ; [.252A.0020.0002] # ETHIOPIC SYLLABLE XE
1286 ; [.252B.0020.0002] # ETHIOPIC SYLLABLE XO
1287 ; [.252C.0020.0002] # ETHIOPIC SYLLABLE XOA
1288 ; [.252D.0020.0002] # ETHIOPIC SYLLABLE XWA
128A ; [.252E.0020.0002] # ETHIOPIC SYLLABLE XWI
128B ; [.252F.0020.0002] # ETHIOPIC SYLLABLE XWAA
128C ; [.2530.0020.0002] # ETHIOPIC SYLLABLE XWEE
128D ; [.2531.0020.0002] # ETHIOPIC SYLLABLE XWE
1290 ; [.2532.0020.0002] # ETHIOPIC SYLLABLE NA
1291 ; [.2533.0020.0002] # ETHIOPIC SYLLABLE NU
1292 ; [.2534.0020.0002] # ETHIOPIC SYLLABLE NI
1293 ; [.2535.0020.0002] # ETHIOPIC SYLLABLE NAA
1294 ; [.2536.0020.0002] # ETHIOPIC SYLLABLE NEE
1295 ; [.2537.0020.0002] # ETHIOPIC SYLLABLE NE
1296 ; [.2538.0020.0002] # ETHIOPIC SYLLABLE NO
1297 ; [.2539.0020.0002] # ETHIOPIC SYLLABLE NWA
2D88 ; [.253A.0020.0002] # ETHIOPIC SYLLABLE NOA
1298 ; [.253B.0020.0002] # ETHIOPIC SYLLABLE NYA
1299 ; [.253C.0020.0002] # ETHIOPIC SYLLABLE NYU
129A ; [.253D.0020.0002] # ETHIOPIC SYLLABLE NYI
129B ; [.253E.0020.0002] # ETHIOPIC SYLLABLE NYAA
129C ; [.253F.0020.0002] # ETHIOPIC SYLLABLE NYEE
129D ; [.2540.0020.0002] # ETHIOPIC SYLLABLE NYE
129E ; [.2541.0020.0002] # ETHIOPIC SYLLABLE NYO
129F ; [.2542.0020.0002] # ETHIOPIC SYLLABLE NYWA
2D89 ; [.2543.0020.0002] # ETHIOPIC SYLLABLE NYOA
12A0 ; [.2544.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL A
12A1 ; [.2545.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL U
12A2 ; [.2546.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL I
12A3 ; [.2547.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL AA
12A4 ; [.2548.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL EE
12A5 ; [.2549.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL E
12A6 ; [.254A.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL O
12A7 ; [.254B.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL WA
2D8A ; [.254C.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL OA
12A8 ; [.254D.0020.0002] # ETHIOPIC SYLLABLE KA
12A9 ; [.254E.0020.0002] # ETHIOPIC SYLLABLE KU
12AA ; [.254F.0020.0002] # ETHIOPIC SYLLABLE KI
12AB ; [.2550.0020.0002] # ETHIOPIC SYLLABLE KAA
12AC ; [.2551.0020.0002] # ETHIOPIC SYLLABLE KEE
12AD ; [.2552.0020.0002] # ETHIOPIC SYLLABLE KE
12AE ; [.2553.0020.0002] # ETHIOPIC SYLLABLE KO
12AF ; [.2554.0020.0002] # ETHIOPIC SYLLABLE KOA
12B0 ; [.2555.0020.0002] # ETHIOPIC SYLLABLE KWA
12B2 ; [.2556.0020.0002] # ETHIOPIC SYLLABLE KWI
12B3 ; [.2557.0020.0002] # ETHIOPIC SYLLABLE KWAA
12B4 ; [.2558.0020.0002] # ETHIOPIC SYLLABLE KWEE
12B5 ; [.2559.0020.0002] # ETHIOPIC SYLLABLE KWE
12B8 ; [.255A.0020.0002] # ETHIOPIC SYLLABLE KXA
12B9 ; [.255B.0020.0002] # ETHIOPIC SYLLABLE KXU
12BA ; [.255C.0020.0002] # ETHIOPIC SYLLABLE KXI
12BB ; [.255D.0020.0002] # ETHIOPIC SYLLABLE KXAA
12BC ; [.255E.0020.0002] # ETHIOPIC SYLLABLE KXEE
12BD ; [.255F.0020.0002] # ETHIOPIC SYLLABLE KXE
12BE ; [.2560.0020.0002] # ETHIOPIC SYLLABLE KXO
12C0 ; [.2561.0020.0002] # ETHIOPIC SYLLABLE KXWA
12C2 ; [.2562.0020.0002] # ETHIOPIC SYLLABLE KXWI
12C3 ; [.2563.0020.0002] # ETHIOPIC SYLLABLE KXWAA
12C4 ; [.2564.0020.0002] # ETHIOPIC SYLLABLE KXWEE
12C5 ; [.2565.0020.0002] # ETHIOPIC SYLLABLE KXWE
12C8 ; [.2566.0020.0002] # ETHIOPIC SYLLABLE WA
12C9 ; [.2567.0020.0002] # ETHIOPIC SYLLABLE WU
12CA ; [.2568.0020.0002] # ETHIOPIC SYLLABLE WI
12CB ; [.2569.0020.0002] # ETHIOPIC SYLLABLE WAA
12CC ; [.256A.0020.0002] # ETHIOPIC SYLLABLE WEE
12CD ; [.256B.0020.0002] # ETHIOPIC SYLLABLE WE
12CE ; [.256C.0020.0002] # ETHIOPIC SYLLABLE WO
12CF ; [.256D.0020.0002] # ETHIOPIC SYLLABLE WOA
12D0 ; [.256E.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL A
12D1 ; [.256F.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL U
12D2 ; [.2570.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL I
12D3 ; [.2571.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL AA
12D4 ; [.2572.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL EE
12D5 ; [.2573.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL E
12D6 ; [.2574.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL O
12D8 ; [.2575.0020.0002] # ETHIOPIC SYLLABLE ZA
12D9 ; [.2576.0020.0002] # ETHIOPIC SYLLABLE ZU
12DA ; [.2577.0020.0002] # ETHIOPIC SYLLABLE ZI
12DB ; [.2578.0020.0002] # ETHIOPIC SYLLABLE ZAA
12DC ; [.2579.0020.0002] # ETHIOPIC SYLLABLE ZEE
12DD ; [.257A.0020.0002] # ETHIOPIC SYLLABLE ZE
12DE ; [.257B.0020.0002] # ETHIOPIC SYLLABLE ZO
12DF ; [.257C.0020.0002] # ETHIOPIC SYLLABLE ZWA
2D8B ; [.257D.0020.0002] # ETHIOPIC SYLLABLE ZOA
AB11 ; [.257E.0020.0002] # ETHIOPIC SYLLABLE DZU
AB12 ; [.257F.0020.0002] # ETHIOPIC SYLLABLE DZI
AB13 ; [.2580.0020.0002] # ETHIOPIC SYLLABLE DZAA
AB14 ; [.2581.0020.0002] # ETHIOPIC SYLLABLE DZEE
AB15 ; [.2582.0020.0002] # ETHIOPIC SYLLABLE DZE
AB16 ; [.2583.0020.0002] # ETHIOPIC SYLLABLE DZO
12E0 ; [.2584.0020.0002] # ETHIOPIC SYLLABLE ZHA
12E1 ; [.2585.0020.0002] # ETHIOPIC SYLLABLE ZHU
12E2 ; [.2586.0020.0002] # ETHIOPIC SYLLABLE ZHI
12E3 ; [.2587.0020.0002] # ETHIOPIC SYLLABLE ZHAA
12E4 ; [.2588.0020.0002] # ETHIOPIC SYLLABLE ZHEE
12E5 ; [.2589.0020.0002] # ETHIOPIC SYLLABLE ZHE
12E6 ; [.258A.0020.0002] # ETHIOPIC SYLLABLE ZHO
12E7 ; [.258B.0020.0002] # ETHIOPIC SYLLABLE ZHWA
12E8 ; [.258C.0020.0002] # ETHIOPIC SYLLABLE YA
12E9 ; [.258D.0020.0002] # ETHIOPIC SYLLABLE YU
12EA ; [.258E.0020.0002] # ETHIOPIC SYLLABLE YI
12EB ; [.258F.0020.0002] # ETHIOPIC SYLLABLE YAA
12EC ; [.2590.0020.0002] # ETHIOPIC SYLLABLE YEE
12ED ; [.2591.0020.0002] # ETHIOPIC SYLLABLE YE
12EE ; [.2592.0020.0002] # ETHIOPIC SYLLABLE YO
12EF ; [.2593.0020.0002] # ETHIOPIC SYLLABLE YOA
12F0 ; [.2594.0020.0002] # ETHIOPIC SYLLABLE DA
12F1 ; [.2595.0020.0002] # ETHIOPIC SYLLABLE DU
12F2 ; [.2596.0020.0002] # ETHIOPIC SYLLABLE DI
12F3 ; [.2597.0020.0002] # ETHIOPIC SYLLABLE DAA
12F4 ; [.2598.0020.0002] # ETHIOPIC SYLLABLE DEE
12F5 ; [.2599.0020.0002] # ETHIOPIC SYLLABLE DE
12F6 ; [.259A.0020.0002] # ETHIOPIC SYLLABLE DO
12F7 ; [.259B.0020.0002] # ETHIOPIC SYLLABLE DWA
2D8C ; [.259C.0020.0002] # ETHIOPIC SYLLABLE DOA
AB09 ; [.259D.0020.0002] # ETHIOPIC SYLLABLE DDHU
AB0A ; [.259E.0020.0002] # ETHIOPIC SYLLABLE DDHI
AB0B ; [.259F.0020.0002] # ETHIOPIC SYLLABLE DDHAA
AB0C ; [.25A0.0020.0002] # ETHIOPIC SYLLABLE DDHEE
AB0D ; [.25A1.0020.0002] # ETHIOPIC SYLLABLE DDHE
AB0E ; [.25A2.0020.0002] # ETHIOPIC SYLLABLE DDHO
12F8 ; [.25A3.0020.0002] # ETHIOPIC SYLLABLE DDA
12F9 ; [.25A4.0020.0002] # ETHIOPIC SYLLABLE DDU
12FA ; [.25A5.0020.0002] # ETHIOPIC SYLLABLE DDI
12FB ; [.25A6.0020.0002] # ETHIOPIC SYLLABLE DDAA
12FC ; [.25A7.0020.0002] # ETHIOPIC SYLLABLE DDEE
12FD ; [.25A8.0020.0002] # ETHIOPIC SYLLABLE DDE
12FE ; [.25A9.0020.0002] # ETHIOPIC SYLLABLE DDO
12FF ; [.25AA.0020.0002] # ETHIOPIC SYLLABLE DDWA
2D8D ; [.25AB.0020.0002] # ETHIOPIC SYLLABLE DDOA
1300 ; [.25AC.0020.0002] # ETHIOPIC SYLLABLE JA
1301 ; [.25AD.0020.0002] # ETHIOPIC SYLLABLE JU
1302 ; [.25AE.0020.0002] # ETHIOPIC SYLLABLE JI
1303 ; [.25AF.0020.0002] # ETHIOPIC SYLLABLE JAA
1304 ; [.25B0.0020.0002] # ETHIOPIC SYLLABLE JEE
1305 ; [.25B1.0020.0002] # ETHIOPIC SYLLABLE JE
1306 ; [.25B2.0020.0002] # ETHIOPIC SYLLABLE JO
1307 ; [.25B3.0020.0002] # ETHIOPIC SYLLABLE JWA
2D8E ; [.25B4.0020.0002] # ETHIOPIC SYLLABLE JOA
1308 ; [.25B5.0020.0002] # ETHIOPIC SYLLABLE GA
1309 ; [.25B6.0020.0002] # ETHIOPIC SYLLABLE GU
130A ; [.25B7.0020.0002] # ETHIOPIC SYLLABLE GI
130B ; [.25B8.0020.0002] # ETHIOPIC SYLLABLE GAA
130C ; [.25B9.0020.0002] # ETHIOPIC SYLLABLE GEE
130D ; [.25BA.0020.0002] # ETHIOPIC SYLLABLE GE
130E ; [.25BB.0020.0002] # ETHIOPIC SYLLABLE GO
130F ; [.25BC.0020.0002] # ETHIOPIC SYLLABLE GOA
1310 ; [.25BD.0020.0002] # ETHIOPIC SYLLABLE GWA
1312 ; [.25BE.0020.0002] # ETHIOPIC SYLLABLE GWI
1313 ; [.25BF.0020.0002] # ETHIOPIC SYLLABLE GWAA
1314 ; [.25C0.0020.0002] # ETHIOPIC SYLLABLE GWEE
1315 ; [.25C1.0020.0002] # ETHIOPIC SYLLABLE GWE
1318 ; [.25C2.0020.0002] # ETHIOPIC SYLLABLE GGA
1319 ; [.25C3.0020.0002] # ETHIOPIC SYLLABLE GGU
131A ; [.25C4.0020.0002] # ETHIOPIC SYLLABLE GGI
131B ; [.25C5.0020.0002] # ETHIOPIC SYLLABLE GGAA
131C ; [.25C6.0020.0002] # ETHIOPIC SYLLABLE GGEE
131D ; [.25C7.0020.0002] # ETHIOPIC SYLLABLE GGE
131E ; [.25C8.0020.0002] # ETHIOPIC SYLLABLE GGO
131F ; [.25C9.0020.0002] # ETHIOPIC SYLLABLE GGWAA
2D93 ; [.25CA.0020.0002] # ETHIOPIC SYLLABLE GGWA
2D94 ; [.25CB.0020.0002] # ETHIOPIC SYLLABLE GGWI
2D95 ; [.25CC.0020.0002] # ETHIOPIC SYLLABLE GGWEE
2D96 ; [.25CD.0020.0002] # ETHIOPIC SYLLABLE GGWE
1320 ; [.25CE.0020.0002] # ETHIOPIC SYLLABLE THA
1321 ; [.25CF.0020.0002] # ETHIOPIC SYLLABLE THU
1322 ; [.25D0.0020.0002] # ETHIOPIC SYLLABLE THI
1323 ; [.25D1.0020.0002] # ETHIOPIC SYLLABLE THAA
1324 ; [.25D2.0020.0002] # ETHIOPIC SYLLABLE THEE
1325 ; [.25D3.0020.0002] # ETHIOPIC SYLLABLE THE
1326 ; [.25D4.0020.0002] # ETHIOPIC SYLLABLE THO
1327 ; [.25D5.0020.0002] # ETHIOPIC SYLLABLE THWA
2D8F ; [.25D6.0020.0002] # ETHIOPIC SYLLABLE THOA
1328 ; [.25D7.0020.0002] # ETHIOPIC SYLLABLE CHA
1329 ; [.25D8.0020.0002] # ETHIOPIC SYLLABLE CHU
132A ; [.25D9.0020.0002] # ETHIOPIC SYLLABLE CHI
132B ; [.25DA.0020.0002] # ETHIOPIC SYLLABLE CHAA
132C ; [.25DB.0020.0002] # ETHIOPIC SYLLABLE CHEE
132D ; [.25DC.0020.0002] # ETHIOPIC SYLLABLE CHE
132E ; [.25DD.0020.0002] # ETHIOPIC SYLLABLE CHO
132F ; [.25DE.0020.0002] # ETHIOPIC SYLLABLE CHWA
2D90 ; [.25DF.0020.0002] # ETHIOPIC SYLLABLE CHOA
AB20 ; [.25E0.0020.0002] # ETHIOPIC SYLLABLE CCHHA
AB21 ; [.25E1.0020.0002] # ETHIOPIC SYLLABLE CCHHU
AB22 ; [.25E2.0020.0002] # ETHIOPIC SYLLABLE CCHHI
AB23 ; [.25E3.0020.0002] # ETHIOPIC SYLLABLE CCHHAA
AB24 ; [.25E4.0020.0002] # ETHIOPIC SYLLABLE CCHHEE
AB25 ; [.25E5.0020.0002] # ETHIOPIC SYLLABLE CCHHE
AB26 ; [.25E6.0020.0002] # ETHIOPIC SYLLABLE CCHHO
1330 ; [.25E7.0020.0002] # ETHIOPIC SYLLABLE PHA
1331 ; [.25E8.0020.0002] # ETHIOPIC SYLLABLE PHU
1332 ; [.25E9.0020.0002] # ETHIOPIC SYLLABLE PHI
1333 ; [.25EA.0020.0002] # ETHIOPIC SYLLABLE PHAA
1334 ; [.25EB.0020.0002] # ETHIOPIC SYLLABLE PHEE
1335 ; [.25EC.0020.0002] # ETHIOPIC SYLLABLE PHE
1336 ; [.25ED.0020.0002] # ETHIOPIC SYLLABLE PHO
1337 ; [.25EE.0020.0002] # ETHIOPIC SYLLABLE PHWA
2D91 ; [.25EF.0020.0002] # ETHIOPIC SYLLABLE PHOA
1338 ; [.25F0.0020.0002] # ETHIOPIC SYLLABLE TSA
1339 ; [.25F1.0020.0002] # ETHIOPIC SYLLABLE TSU
133A ; [.25F2.0020.0002] # ETHIOPIC SYLLABLE TSI
133B ; [.25F3.0020.0002] # ETHIOPIC SYLLABLE TSAA
133C ; [.25F4.0020.0002] # ETHIOPIC SYLLABLE TSEE
133D ; [.25F5.0020.0002] # ETHIOPIC SYLLABLE TSE
133E ; [.25F6.0020.0002] # ETHIOPIC SYLLABLE TSO
133F ; [.25F7.0020.0002] # ETHIOPIC SYLLABLE TSWA
AB28 ; [.25F8.0020.0002] # ETHIOPIC SYLLABLE BBA
AB29 ; [.25F9.0020.0002] # ETHIOPIC SYLLABLE BBU
AB2A ; [.25FA.0020.0002] # ETHIOPIC SYLLABLE BBI
AB2B ; [.25FB.0020.0002] # ETHIOPIC SYLLABLE BBAA
AB2C ; [.25FC.0020.0002] # ETHIOPIC SYLLABLE BBEE
AB2D ; [.25FD.0020.0002] # ETHIOPIC SYLLABLE BBE
AB2E ; [.25FE.0020.0002] # ETHIOPIC SYLLABLE BBO
1340 ; [.25FF.0020.0002] # ETHIOPIC SYLLABLE TZA
1341 ; [.2600.0020.0002] # ETHIOPIC SYLLABLE TZU
1342 ; [.2601.0020.0002] # ETHIOPIC SYLLABLE TZI
1343 ; [.2602.0020.0002] # ETHIOPIC SYLLABLE TZAA
1344 ; [.2603.0020.0002] # ETHIOPIC SYLLABLE TZEE
1345 ; [.2604.0020.0002] # ETHIOPIC SYLLABLE TZE
1346 ; [.2605.0020.0002] # ETHIOPIC SYLLABLE TZO
1347 ; [.2606.0020.0002] # ETHIOPIC SYLLABLE TZOA
1348 ; [.2607.0020.0002] # ETHIOPIC SYLLABLE FA
1349 ; [.2608.0020.0002] # ETHIOPIC SYLLABLE FU
134A ; [.2609.0020.0002] # ETHIOPIC SYLLABLE FI
134B ; [.260A.0020.0002] # ETHIOPIC SYLLABLE FAA
134C ; [.260B.0020.0002] # ETHIOPIC SYLLABLE FEE
134D ; [.260C.0020.0002] # ETHIOPIC SYLLABLE FE
134E ; [.260D.0020.0002] # ETHIOPIC SYLLABLE FO
134F ; [.260E.0020.0002] # ETHIOPIC SYLLABLE FWA
1388 ; [.260F.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT FWA
1389 ; [.2610.0020.0002] # ETHIOPIC SYLLABLE FWI
138A ; [.2611.0020.0002] # ETHIOPIC SYLLABLE FWEE
138B ; [.2612.0020.0002] # ETHIOPIC SYLLABLE FWE
1350 ; [.2613.0020.0002] # ETHIOPIC SYLLABLE PA
1351 ; [.2614.0020.0002] # ETHIOPIC SYLLABLE PU
1352 ; [.2615.0020.0002] # ETHIOPIC SYLLABLE PI
1353 ; [.2616.0020.0002] # ETHIOPIC SYLLABLE PAA
1354 ; [.2617.0020.0002] # ETHIOPIC SYLLABLE PEE
1355 ; [.2618.0020.0002] # ETHIOPIC SYLLABLE PE
1356 ; [.2619.0020.0002] # ETHIOPIC SYLLABLE PO
1357 ; [.261A.0020.0002] # ETHIOPIC SYLLABLE PWA
138C ; [.261B.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT PWA
138D ; [.261C.0020.0002] # ETHIOPIC SYLLABLE PWI
138E ; [.261D.0020.0002] # ETHIOPIC SYLLABLE PWEE
138F ; [.261E.0020.0002] # ETHIOPIC SYLLABLE PWE
2D92 ; [.261F.0020.0002] # ETHIOPIC SYLLABLE POA
1358 ; [.2620.0020.0002] # ETHIOPIC SYLLABLE RYA
1359 ; [.2621.0020.0002] # ETHIOPIC SYLLABLE MYA
135A ; [.2622.0020.0002] # ETHIOPIC SYLLABLE FYA
2DA0 ; [.2623.0020.0002] # ETHIOPIC SYLLABLE SSA
2DA1 ; [.2624.0020.0002] # ETHIOPIC SYLLABLE SSU
2DA2 ; [.2625.0020.0002] # ETHIOPIC SYLLABLE SSI
2DA3 ; [.2626.0020.0002] # ETHIOPIC SYLLABLE SSAA
2DA4 ; [.2627.0020.0002] # ETHIOPIC SYLLABLE SSEE
2DA5 ; [.2628.0020.0002] # ETHIOPIC SYLLABLE SSE
2DA6 ; [.2629.0020.0002] # ETHIOPIC SYLLABLE SSO
2DA8 ; [.262A.0020.0002] # ETHIOPIC SYLLABLE CCA
2DA9 ; [.262B.0020.0002] # ETHIOPIC SYLLABLE CCU
2DAA ; [.262C.0020.0002] # ETHIOPIC SYLLABLE CCI
2DAB ; [.262D.0020.0002] # ETHIOPIC SYLLABLE CCAA
2DAC ; [.262E.0020.0002] # ETHIOPIC SYLLABLE CCEE
2DAD ; [.262F.0020.0002] # ETHIOPIC SYLLABLE CCE
2DAE ; [.2630.0020.0002] # ETHIOPIC SYLLABLE CCO
2DB0 ; [.2631.0020.0002] # ETHIOPIC SYLLABLE ZZA
2DB1 ; [.2632.0020.0002] # ETHIOPIC SYLLABLE ZZU
2DB2 ; [.2633.0020.0002] # ETHIOPIC SYLLABLE ZZI
2DB3 ; [.2634.0020.0002] # ETHIOPIC SYLLABLE ZZAA
2DB4 ; [.2635.0020.0002] # ETHIOPIC SYLLABLE ZZEE
2DB5 ; [.2636.0020.0002] # ETHIOPIC SYLLABLE ZZE
2DB6 ; [.2637.0020.0002] # ETHIOPIC SYLLABLE ZZO
2DB8 ; [.2638.0020.0002] # ETHIOPIC SYLLABLE CCHA
2DB9 ; [.2639.0020.0002] # ETHIOPIC SYLLABLE CCHU
2DBA ; [.263A.0020.0002] # ETHIOPIC SYLLABLE CCHI
2DBB ; [.263B.0020.0002] # ETHIOPIC SYLLABLE CCHAA
2DBC ; [.263C.0020.0002] # ETHIOPIC SYLLABLE CCHEE
2DBD ; [.263D.0020.0002] # ETHIOPIC SYLLABLE CCHE
2DBE ; [.263E.0020.0002] # ETHIOPIC SYLLABLE CCHO
2DC0 ; [.263F.0020.0002] # ETHIOPIC SYLLABLE QYA
2DC1 ; [.2640.0020.0002] # ETHIOPIC SYLLABLE QYU
2DC2 ; [.2641.0020.0002] # ETHIOPIC SYLLABLE QYI
2DC3 ; [.2642.0020.0002] # ETHIOPIC SYLLABLE QYAA
2DC4 ; [.2643.0020.0002] # ETHIOPIC SYLLABLE QYEE
2DC5 ; [.2644.0020.0002] # ETHIOPIC SYLLABLE QYE
2DC6 ; [.2645.0020.0002] # ETHIOPIC SYLLABLE QYO
2DC8 ; [.2646.0020.0002] # ETHIOPIC SYLLABLE KYA
2DC9 ; [.2647.0020.0002] # ETHIOPIC SYLLABLE KYU
2DCA ; [.2648.0020.0002] # ETHIOPIC SYLLABLE KYI
2DCB ; [.2649.0020.0002] # ETHIOPIC SYLLABLE KYAA
2DCC ; [.264A.0020.0002] # ETHIOPIC SYLLABLE KYEE
2DCD ; [.264B.0020.0002] # ETHIOPIC SYLLABLE KYE
2DCE ; [.264C.0020.0002] # ETHIOPIC SYLLABLE KYO
2DD0 ; [.264D.0020.0002] # ETHIOPIC SYLLABLE XYA
2DD1 ; [.264E.0020.0002] # ETHIOPIC SYLLABLE XYU
2DD2 ; [.264F.0020.0002] # ETHIOPIC SYLLABLE XYI
2DD3 ; [.2650.0020.0002] # ETHIOPIC SYLLABLE XYAA
2DD4 ; [.2651.0020.0002] # ETHIOPIC SYLLABLE XYEE
2DD5 ; [.2652.0020.0002] # ETHIOPIC SYLLABLE XYE
2DD6 ; [.2653.0020.0002] # ETHIOPIC SYLLABLE XYO
2DD8 ; [.2654.0020.0002] # ETHIOPIC SYLLABLE GYA
2DD9 ; [.2655.0020.0002] # ETHIOPIC SYLLABLE GYU
2DDA ; [.2656.0020.0002] # ETHIOPIC SYLLABLE GYI
2DDB ; [.2657.0020.0002] # ETHIOPIC SYLLABLE GYAA
2DDC ; [.2658.0020.0002] # ETHIOPIC SYLLABLE GYEE
2DDD ; [.2659.0020.0002] # ETHIOPIC SYLLABLE GYE
2DDE ; [.265A.0020.0002] # ETHIOPIC SYLLABLE GYO
0950 ; [.265B.0020.0002] # DEVANAGARI OM
A8FD ; [.265C.0020.0002] # DEVANAGARI JAIN OM
0972 ; [.265D.0020.0002] # DEVANAGARI LETTER CANDRA A
0904 ; [.265E.0020.0002] # DEVANAGARI LETTER SHORT A
0905 ; [.265F.0020.0002] # DEVANAGARI LETTER A
0906 ; [.2660.0020.0002] # DEVANAGARI LETTER AA
0973 ; [.2661.0020.0002] # DEVANAGARI LETTER OE
0974 ; [.2662.0020.0002] # DEVANAGARI LETTER OOE
0975 ; [.2663.0020.0002] # DEVANAGARI LETTER AW
0976 ; [.2664.0020.0002] # DEVANAGARI LETTER UE
0977 ; [.2665.0020.0002] # DEVANAGARI LETTER UUE
0907 ; [.2666.0020.0002] # DEVANAGARI LETTER I
0908 ; [.2667.0020.0002] # DEVANAGARI LETTER II
0909 ; [.2668.0020.0002] # DEVANAGARI LETTER U
090A ; [.2669.0020.0002] # DEVANAGARI LETTER UU
090B ; [.266A.0020.0002] # DEVANAGARI LETTER VOCALIC R
0960 ; [.266B.0020.0002] # DEVANAGARI LETTER VOCALIC RR
090C ; [.266C.0020.0002] # DEVANAGARI LETTER VOCALIC L
0961 ; [.266D.0020.0002] # DEVANAGARI LETTER VOCALIC LL
090D ; [.266E.0020.0002] # DEVANAGARI LETTER CANDRA E
090E ; [.266F.0020.0002] # DEVANAGARI LETTER SHORT E
090F ; [.2670.0020.0002] # DEVANAGARI LETTER E
0910 ; [.2671.0020.0002] # DEVANAGARI LETTER AI
0911 ; [.2672.0020.0002] # DEVANAGARI LETTER CANDRA O
0912 ; [.2673.0020.0002] # DEVANAGARI LETTER SHORT O
0913 ; [.2674.0020.0002] # DEVANAGARI LETTER O
0914 ; [.2675.0020.0002] # DEVANAGARI LETTER AU
0915 ; [.2676.0020.0002] # DEVANAGARI LETTER KA
0958 ; [.2676.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER QA
0916 ; [.2677.0020.0002] # DEVANAGARI LETTER KHA
0959 ; [.2677.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER KHHA
0917 ; [.2678.0020.0002] # DEVANAGARI LETTER GA
095A ; [.2678.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER GHHA
097B ; [.2679.0020.0002] # DEVANAGARI LETTER GGA
0918 ; [.267A.0020.0002] # DEVANAGARI LETTER GHA
0919 ; [.267B.0020.0002] # DEVANAGARI LETTER NGA
091A ; [.267C.0020.0002] # DEVANAGARI LETTER CA
091B ; [.267D.0020.0002] # DEVANAGARI LETTER CHA
091C ; [.267E.0020.0002] # DEVANAGARI LETTER JA
095B ; [.267E.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER ZA
0979 ; [.267F.0020.0002] # DEVANAGARI LETTER ZHA
097C ; [.2680.0020.0002] # DEVANAGARI LETTER JJA
091D ; [.2681.0020.0002] # DEVANAGARI LETTER JHA
091E ; [.2682.0020.0002] # DEVANAGARI LETTER NYA
091F ; [.2683.0020.0002] # DEVANAGARI LETTER TTA
0920 ; [.2684.0020.0002] # DEVANAGARI LETTER TTHA
0978 ; [.2685.0020.0002] # DEVANAGARI LETTER MARWARI DDA
0921 ; [.2686.0020.0002] # DEVANAGARI LETTER DDA
095C ; [.2686.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER DDDHA
097E ; [.2687.0020.0002] # DEVANAGARI LETTER DDDA
0922 ; [.2688.0020.0002] # DEVANAGARI LETTER DDHA
095D ; [.2688.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RHA
0923 ; [.2689.0020.0002] # DEVANAGARI LETTER NNA
0924 ; [.268A.0020.0002] # DEVANAGARI LETTER TA
0925 ; [.268B.0020.0002] # DEVANAGARI LETTER THA
0926 ; [.268C.0020.0002] # DEVANAGARI LETTER DA
0927 ; [.268D.0020.0002] # DEVANAGARI LETTER DHA
0928 ; [.268E.0020.0002] # DEVANAGARI LETTER NA
0929 ; [.268E.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER NNNA
092A ; [.268F.0020.0002] # DEVANAGARI LETTER PA
092B ; [.2690.0020.0002] # DEVANAGARI LETTER PHA
095E ; [.2690.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER FA
092C ; [.2691.0020.0002] # DEVANAGARI LETTER BA
097F ; [.2692.0020.0002] # DEVANAGARI LETTER BBA
092D ; [.2693.0020.0002] # DEVANAGARI LETTER BHA
092E ; [.2694.0020.0002] # DEVANAGARI LETTER MA
092F ; [.2695.0020.0002] # DEVANAGARI LETTER YA
095F ; [.2695.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER YYA
097A ; [.2696.0020.0002] # DEVANAGARI LETTER HEAVY YA
0930 ; [.2697.0020.0002] # DEVANAGARI LETTER RA
0931 ; [.2697.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RRA
0932 ; [.2698.0020.0002] # DEVANAGARI LETTER LA
0933 ; [.2699.0020.0002] # DEVANAGARI LETTER LLA
0934 ; [.2699.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER LLLA
0935 ; [.269A.0020.0002] # DEVANAGARI LETTER VA
0936 ; [.269B.0020.0002] # DEVANAGARI LETTER SHA
0937 ; [.269C.0020.0002] # DEVANAGARI LETTER SSA
0938 ; [.269D.0020.0002] # DEVANAGARI LETTER SA
0939 ; [.269E.0020.0002] # DEVANAGARI LETTER HA
093D ; [.269F.0020.0002] # DEVANAGARI SIGN AVAGRAHA
097D ; [.26A0.0020.0002] # DEVANAGARI LETTER GLOTTAL STOP
1CE9 ; [.26A1.0020.0002] # VEDIC SIGN ANUSVARA ANTARGOMUKHA
1CEA ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA BAHIRGOMUKHA
1CEB ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA
1CEC ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
1CEE ; [.26A1.0020.0004] # VEDIC SIGN HEXIFORM LONG ANUSVARA
1CEF ; [.26A1.0020.0004] # VEDIC SIGN LONG ANUSVARA
1CF0 ; [.26A1.0020.0004] # VEDIC SIGN RTHANG LONG ANUSVARA
1CF1 ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA UBHAYATO MUKHA
1CF5 ; [.26A2.0020.0002] # VEDIC SIGN JIHVAMULIYA
1CF6 ; [.26A3.0020.0002] # VEDIC SIGN UPADHMANIYA
A8F2 ; [.26A4.0020.0002] # DEVANAGARI SIGN SPACING CANDRABINDU
A8F3 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU VIRAMA
A8F4 ; [.26A4.0020.0004] # DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA
A8F5 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU TWO
A8F6 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU THREE
A8F7 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU AVAGRAHA
A8FB ; [.26A5.0020.0002] # DEVANAGARI HEADSTROKE
093E ; [.26A6.0020.0002] # DEVANAGARI VOWEL SIGN AA
093A ; [.26A7.0020.0002] # DEVANAGARI VOWEL SIGN OE
093B ; [.26A8.0020.0002] # DEVANAGARI VOWEL SIGN OOE
094F ; [.26A9.0020.0002] # DEVANAGARI VOWEL SIGN AW
0956 ; [.26AA.0020.0002] # DEVANAGARI VOWEL SIGN UE
0957 ; [.26AB.0020.0002] # DEVANAGARI VOWEL SIGN UUE
093F ; [.26AC.0020.0002] # DEVANAGARI VOWEL SIGN I
0940 ; [.26AD.0020.0002] # DEVANAGARI VOWEL SIGN II
0941 ; [.26AE.0020.0002] # DEVANAGARI VOWEL SIGN U
0942 ; [.26AF.0020.0002] # DEVANAGARI VOWEL SIGN UU
0943 ; [.26B0.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC R
0944 ; [.26B1.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC RR
0962 ; [.26B2.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC L
0963 ; [.26B3.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC LL
0945 ; [.26B4.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA E
0955 ; [.26B5.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA LONG E
0946 ; [.26B6.0020.0002] # DEVANAGARI VOWEL SIGN SHORT E
0947 ; [.26B7.0020.0002] # DEVANAGARI VOWEL SIGN E
094E ; [.26B8.0020.0002] # DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
0948 ; [.26B9.0020.0002] # DEVANAGARI VOWEL SIGN AI
0949 ; [.26BA.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA O
094A ; [.26BB.0020.0002] # DEVANAGARI VOWEL SIGN SHORT O
094B ; [.26BC.0020.0002] # DEVANAGARI VOWEL SIGN O
094C ; [.26BD.0020.0002] # DEVANAGARI VOWEL SIGN AU
094D ; [.26BE.0020.0002] # DEVANAGARI SIGN VIRAMA
0980 ; [.26BF.0020.0002] # BENGALI ANJI
0985 ; [.26C0.0020.0002] # BENGALI LETTER A
0986 ; [.26C1.0020.0002] # BENGALI LETTER AA
0987 ; [.26C2.0020.0002] # BENGALI LETTER I
0988 ; [.26C3.0020.0002] # BENGALI LETTER II
0989 ; [.26C4.0020.0002] # BENGALI LETTER U
098A ; [.26C5.0020.0002] # BENGALI LETTER UU
098B ; [.26C6.0020.0002] # BENGALI LETTER VOCALIC R
09E0 ; [.26C7.0020.0002] # BENGALI LETTER VOCALIC RR
098C ; [.26C8.0020.0002] # BENGALI LETTER VOCALIC L
09E1 ; [.26C9.0020.0002] # BENGALI LETTER VOCALIC LL
098F ; [.26CA.0020.0002] # BENGALI LETTER E
0990 ; [.26CB.0020.0002] # BENGALI LETTER AI
0993 ; [.26CC.0020.0002] # BENGALI LETTER O
0994 ; [.26CD.0020.0002] # BENGALI LETTER AU
0995 ; [.26CE.0020.0002] # BENGALI LETTER KA
0996 ; [.26CF.0020.0002] # BENGALI LETTER KHA
0997 ; [.26D0.0020.0002] # BENGALI LETTER GA
0998 ; [.26D1.0020.0002] # BENGALI LETTER GHA
0999 ; [.26D2.0020.0002] # BENGALI LETTER NGA
099A ; [.26D3.0020.0002] # BENGALI LETTER CA
099B ; [.26D4.0020.0002] # BENGALI LETTER CHA
099C ; [.26D5.0020.0002] # BENGALI LETTER JA
099D ; [.26D6.0020.0002] # BENGALI LETTER JHA
099E ; [.26D7.0020.0002] # BENGALI LETTER NYA
099F ; [.26D8.0020.0002] # BENGALI LETTER TTA
09A0 ; [.26D9.0020.0002] # BENGALI LETTER TTHA
09A1 ; [.26DA.0020.0002] # BENGALI LETTER DDA
09DC ; [.26DA.0020.0002][.0000.00C2.0002] # BENGALI LETTER RRA
09A2 ; [.26DB.0020.0002] # BENGALI LETTER DDHA
09DD ; [.26DB.0020.0002][.0000.00C2.0002] # BENGALI LETTER RHA
09A3 ; [.26DC.0020.0002] # BENGALI LETTER NNA
09A4 ; [.26DD.0020.0002] # BENGALI LETTER TA
09CE ; [.26DD.0020.0004][.26FE.0020.0004] # BENGALI LETTER KHANDA TA
09A5 ; [.26DE.0020.0002] # BENGALI LETTER THA
09A6 ; [.26DF.0020.0002] # BENGALI LETTER DA
09A7 ; [.26E0.0020.0002] # BENGALI LETTER DHA
09A8 ; [.26E1.0020.0002] # BENGALI LETTER NA
09AA ; [.26E2.0020.0002] # BENGALI LETTER PA
09AB ; [.26E3.0020.0002] # BENGALI LETTER PHA
09AC ; [.26E4.0020.0002] # BENGALI LETTER BA
09AD ; [.26E5.0020.0002] # BENGALI LETTER BHA
09AE ; [.26E6.0020.0002] # BENGALI LETTER MA
09AF ; [.26E7.0020.0002] # BENGALI LETTER YA
09DF ; [.26E7.0020.0002][.0000.00C2.0002] # BENGALI LETTER YYA
09B0 ; [.26E8.0020.0002] # BENGALI LETTER RA
09F0 ; [.26E9.0020.0002] # BENGALI LETTER RA WITH MIDDLE DIAGONAL
09B2 ; [.26EA.0020.0002] # BENGALI LETTER LA
09F1 ; [.26EB.0020.0002] # BENGALI LETTER RA WITH LOWER DIAGONAL
09B6 ; [.26EC.0020.0002] # BENGALI LETTER SHA
09B7 ; [.26ED.0020.0002] # BENGALI LETTER SSA
09B8 ; [.26EE.0020.0002] # BENGALI LETTER SA
09B9 ; [.26EF.0020.0002] # BENGALI LETTER HA
09BD ; [.26F0.0020.0002] # BENGALI SIGN AVAGRAHA
09BE ; [.26F1.0020.0002] # BENGALI VOWEL SIGN AA
09BF ; [.26F2.0020.0002] # BENGALI VOWEL SIGN I
09C0 ; [.26F3.0020.0002] # BENGALI VOWEL SIGN II
09C1 ; [.26F4.0020.0002] # BENGALI VOWEL SIGN U
09C2 ; [.26F5.0020.0002] # BENGALI VOWEL SIGN UU
09C3 ; [.26F6.0020.0002] # BENGALI VOWEL SIGN VOCALIC R
09C4 ; [.26F7.0020.0002] # BENGALI VOWEL SIGN VOCALIC RR
09E2 ; [.26F8.0020.0002] # BENGALI VOWEL SIGN VOCALIC L
09E3 ; [.26F9.0020.0002] # BENGALI VOWEL SIGN VOCALIC LL
09C7 ; [.26FA.0020.0002] # BENGALI VOWEL SIGN E
09C8 ; [.26FB.0020.0002] # BENGALI VOWEL SIGN AI
09CB ; [.26FC.0020.0002] # BENGALI VOWEL SIGN O
09C7 09BE ; [.26FC.0020.0002] # BENGALI VOWEL SIGN O
09CC ; [.26FD.0020.0002] # BENGALI VOWEL SIGN AU
09C7 09D7 ; [.26FD.0020.0002] # BENGALI VOWEL SIGN AU
09CD ; [.26FE.0020.0002] # BENGALI SIGN VIRAMA
09D7 ; [.26FF.0020.0002] # BENGALI AU LENGTH MARK
0A74 ; [.2700.0020.0002] # GURMUKHI EK ONKAR
0A73 ; [.2701.0020.0002] # GURMUKHI URA
0A09 ; [.2702.0020.0002] # GURMUKHI LETTER U
0A0A ; [.2703.0020.0002] # GURMUKHI LETTER UU
0A13 ; [.2704.0020.0002] # GURMUKHI LETTER OO
0A05 ; [.2705.0020.0002] # GURMUKHI LETTER A
0A06 ; [.2706.0020.0002] # GURMUKHI LETTER AA
0A10 ; [.2707.0020.0002] # GURMUKHI LETTER AI
0A14 ; [.2708.0020.0002] # GURMUKHI LETTER AU
0A72 ; [.2709.0020.0002] # GURMUKHI IRI
0A07 ; [.270A.0020.0002] # GURMUKHI LETTER I
0A08 ; [.270B.0020.0002] # GURMUKHI LETTER II
0A0F ; [.270C.0020.0002] # GURMUKHI LETTER EE
0A38 ; [.270D.0020.0002] # GURMUKHI LETTER SA
0A36 ; [.270D.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER SHA
0A39 ; [.270E.0020.0002] # GURMUKHI LETTER HA
0A51 ; [.270F.0020.0002] # GURMUKHI SIGN UDAAT
0A15 ; [.2710.0020.0002] # GURMUKHI LETTER KA
0A16 ; [.2711.0020.0002] # GURMUKHI LETTER KHA
0A59 ; [.2711.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER KHHA
0A17 ; [.2712.0020.0002] # GURMUKHI LETTER GA
0A5A ; [.2712.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER GHHA
0A18 ; [.2713.0020.0002] # GURMUKHI LETTER GHA
0A19 ; [.2714.0020.0002] # GURMUKHI LETTER NGA
0A1A ; [.2715.0020.0002] # GURMUKHI LETTER CA
0A1B ; [.2716.0020.0002] # GURMUKHI LETTER CHA
0A1C ; [.2717.0020.0002] # GURMUKHI LETTER JA
0A5B ; [.2717.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER ZA
0A1D ; [.2718.0020.0002] # GURMUKHI LETTER JHA
0A1E ; [.2719.0020.0002] # GURMUKHI LETTER NYA
0A1F ; [.271A.0020.0002] # GURMUKHI LETTER TTA
0A20 ; [.271B.0020.0002] # GURMUKHI LETTER TTHA
0A21 ; [.271C.0020.0002] # GURMUKHI LETTER DDA
0A22 ; [.271D.0020.0002] # GURMUKHI LETTER DDHA
0A23 ; [.271E.0020.0002] # GURMUKHI LETTER NNA
0A24 ; [.271F.0020.0002] # GURMUKHI LETTER TA
0A25 ; [.2720.0020.0002] # GURMUKHI LETTER THA
0A26 ; [.2721.0020.0002] # GURMUKHI LETTER DA
0A27 ; [.2722.0020.0002] # GURMUKHI LETTER DHA
0A28 ; [.2723.0020.0002] # GURMUKHI LETTER NA
0A2A ; [.2724.0020.0002] # GURMUKHI LETTER PA
0A2B ; [.2725.0020.0002] # GURMUKHI LETTER PHA
0A5E ; [.2725.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER FA
0A2C ; [.2726.0020.0002] # GURMUKHI LETTER BA
0A2D ; [.2727.0020.0002] # GURMUKHI LETTER BHA
0A2E ; [.2728.0020.0002] # GURMUKHI LETTER MA
0A2F ; [.2729.0020.0002] # GURMUKHI LETTER YA
0A75 ; [.272A.0020.0002] # GURMUKHI SIGN YAKASH
0A30 ; [.272B.0020.0002] # GURMUKHI LETTER RA
0A32 ; [.272C.0020.0002] # GURMUKHI LETTER LA
0A33 ; [.272C.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER LLA
0A35 ; [.272D.0020.0002] # GURMUKHI LETTER VA
0A5C ; [.272E.0020.0002] # GURMUKHI LETTER RRA
0A3E ; [.272F.0020.0002] # GURMUKHI VOWEL SIGN AA
0A3F ; [.2730.0020.0002] # GURMUKHI VOWEL SIGN I
0A40 ; [.2731.0020.0002] # GURMUKHI VOWEL SIGN II
0A41 ; [.2732.0020.0002] # GURMUKHI VOWEL SIGN U
0A42 ; [.2733.0020.0002] # GURMUKHI VOWEL SIGN UU
0A47 ; [.2734.0020.0002] # GURMUKHI VOWEL SIGN EE
0A48 ; [.2735.0020.0002] # GURMUKHI VOWEL SIGN AI
0A4B ; [.2736.0020.0002] # GURMUKHI VOWEL SIGN OO
0A4C ; [.2737.0020.0002] # GURMUKHI VOWEL SIGN AU
0A4D ; [.2738.0020.0002] # GURMUKHI SIGN VIRAMA
0AD0 ; [.2739.0020.0002] # GUJARATI OM
0A85 ; [.273A.0020.0002] # GUJARATI LETTER A
0A86 ; [.273B.0020.0002] # GUJARATI LETTER AA
0A87 ; [.273C.0020.0002] # GUJARATI LETTER I
0A88 ; [.273D.0020.0002] # GUJARATI LETTER II
0A89 ; [.273E.0020.0002] # GUJARATI LETTER U
0A8A ; [.273F.0020.0002] # GUJARATI LETTER UU
0A8B ; [.2740.0020.0002] # GUJARATI LETTER VOCALIC R
0AE0 ; [.2741.0020.0002] # GUJARATI LETTER VOCALIC RR
0A8C ; [.2742.0020.0002] # GUJARATI LETTER VOCALIC L
0AE1 ; [.2743.0020.0002] # GUJARATI LETTER VOCALIC LL
0A8D ; [.2744.0020.0002] # GUJARATI VOWEL CANDRA E
0A8F ; [.2745.0020.0002] # GUJARATI LETTER E
0A90 ; [.2746.0020.0002] # GUJARATI LETTER AI
0A91 ; [.2747.0020.0002] # GUJARATI VOWEL CANDRA O
0A93 ; [.2748.0020.0002] # GUJARATI LETTER O
0A94 ; [.2749.0020.0002] # GUJARATI LETTER AU
0A95 ; [.274A.0020.0002] # GUJARATI LETTER KA
0A96 ; [.274B.0020.0002] # GUJARATI LETTER KHA
0A97 ; [.274C.0020.0002] # GUJARATI LETTER GA
0A98 ; [.274D.0020.0002] # GUJARATI LETTER GHA
0A99 ; [.274E.0020.0002] # GUJARATI LETTER NGA
0A9A ; [.274F.0020.0002] # GUJARATI LETTER CA
0A9B ; [.2750.0020.0002] # GUJARATI LETTER CHA
0A9C ; [.2751.0020.0002] # GUJARATI LETTER JA
0AF9 ; [.2752.0020.0002] # GUJARATI LETTER ZHA
0A9D ; [.2753.0020.0002] # GUJARATI LETTER JHA
0A9E ; [.2754.0020.0002] # GUJARATI LETTER NYA
0A9F ; [.2755.0020.0002] # GUJARATI LETTER TTA
0AA0 ; [.2756.0020.0002] # GUJARATI LETTER TTHA
0AA1 ; [.2757.0020.0002] # GUJARATI LETTER DDA
0AA2 ; [.2758.0020.0002] # GUJARATI LETTER DDHA
0AA3 ; [.2759.0020.0002] # GUJARATI LETTER NNA
0AA4 ; [.275A.0020.0002] # GUJARATI LETTER TA
0AA5 ; [.275B.0020.0002] # GUJARATI LETTER THA
0AA6 ; [.275C.0020.0002] # GUJARATI LETTER DA
0AA7 ; [.275D.0020.0002] # GUJARATI LETTER DHA
0AA8 ; [.275E.0020.0002] # GUJARATI LETTER NA
0AAA ; [.275F.0020.0002] # GUJARATI LETTER PA
0AAB ; [.2760.0020.0002] # GUJARATI LETTER PHA
0AAC ; [.2761.0020.0002] # GUJARATI LETTER BA
0AAD ; [.2762.0020.0002] # GUJARATI LETTER BHA
0AAE ; [.2763.0020.0002] # GUJARATI LETTER MA
0AAF ; [.2764.0020.0002] # GUJARATI LETTER YA
0AB0 ; [.2765.0020.0002] # GUJARATI LETTER RA
0AB2 ; [.2766.0020.0002] # GUJARATI LETTER LA
0AB5 ; [.2767.0020.0002] # GUJARATI LETTER VA
0AB6 ; [.2768.0020.0002] # GUJARATI LETTER SHA
0AB7 ; [.2769.0020.0002] # GUJARATI LETTER SSA
0AB8 ; [.276A.0020.0002] # GUJARATI LETTER SA
0AB9 ; [.276B.0020.0002] # GUJARATI LETTER HA
0AB3 ; [.276C.0020.0002] # GUJARATI LETTER LLA
0ABD ; [.276D.0020.0002] # GUJARATI SIGN AVAGRAHA
0ABE ; [.276E.0020.0002] # GUJARATI VOWEL SIGN AA
0ABF ; [.276F.0020.0002] # GUJARATI VOWEL SIGN I
0AC0 ; [.2770.0020.0002] # GUJARATI VOWEL SIGN II
0AC1 ; [.2771.0020.0002] # GUJARATI VOWEL SIGN U
0AC2 ; [.2772.0020.0002] # GUJARATI VOWEL SIGN UU
0AC3 ; [.2773.0020.0002] # GUJARATI VOWEL SIGN VOCALIC R
0AC4 ; [.2774.0020.0002] # GUJARATI VOWEL SIGN VOCALIC RR
0AE2 ; [.2775.0020.0002] # GUJARATI VOWEL SIGN VOCALIC L
0AE3 ; [.2776.0020.0002] # GUJARATI VOWEL SIGN VOCALIC LL
0AC5 ; [.2777.0020.0002] # GUJARATI VOWEL SIGN CANDRA E
0AC7 ; [.2778.0020.0002] # GUJARATI VOWEL SIGN E
0AC8 ; [.2779.0020.0002] # GUJARATI VOWEL SIGN AI
0AC9 ; [.277A.0020.0002] # GUJARATI VOWEL SIGN CANDRA O
0ACB ; [.277B.0020.0002] # GUJARATI VOWEL SIGN O
0ACC ; [.277C.0020.0002] # GUJARATI VOWEL SIGN AU
0ACD ; [.277D.0020.0002] # GUJARATI SIGN VIRAMA
0B05 ; [.277E.0020.0002] # ORIYA LETTER A
0B06 ; [.277F.0020.0002] # ORIYA LETTER AA
0B07 ; [.2780.0020.0002] # ORIYA LETTER I
0B08 ; [.2781.0020.0002] # ORIYA LETTER II
0B09 ; [.2782.0020.0002] # ORIYA LETTER U
0B0A ; [.2783.0020.0002] # ORIYA LETTER UU
0B0B ; [.2784.0020.0002] # ORIYA LETTER VOCALIC R
0B60 ; [.2785.0020.0002] # ORIYA LETTER VOCALIC RR
0B0C ; [.2786.0020.0002] # ORIYA LETTER VOCALIC L
0B61 ; [.2787.0020.0002] # ORIYA LETTER VOCALIC LL
0B0F ; [.2788.0020.0002] # ORIYA LETTER E
0B10 ; [.2789.0020.0002] # ORIYA LETTER AI
0B13 ; [.278A.0020.0002] # ORIYA LETTER O
0B14 ; [.278B.0020.0002] # ORIYA LETTER AU
0B15 ; [.278C.0020.0002] # ORIYA LETTER KA
0B16 ; [.278D.0020.0002] # ORIYA LETTER KHA
0B17 ; [.278E.0020.0002] # ORIYA LETTER GA
0B18 ; [.278F.0020.0002] # ORIYA LETTER GHA
0B19 ; [.2790.0020.0002] # ORIYA LETTER NGA
0B1A ; [.2791.0020.0002] # ORIYA LETTER CA
0B1B ; [.2792.0020.0002] # ORIYA LETTER CHA
0B1C ; [.2793.0020.0002] # ORIYA LETTER JA
0B1D ; [.2794.0020.0002] # ORIYA LETTER JHA
0B1E ; [.2795.0020.0002] # ORIYA LETTER NYA
0B1F ; [.2796.0020.0002] # ORIYA LETTER TTA
0B20 ; [.2797.0020.0002] # ORIYA LETTER TTHA
0B21 ; [.2798.0020.0002] # ORIYA LETTER DDA
0B5C ; [.2798.0020.0002][.0000.00C2.0002] # ORIYA LETTER RRA
0B22 ; [.2799.0020.0002] # ORIYA LETTER DDHA
0B5D ; [.2799.0020.0002][.0000.00C2.0002] # ORIYA LETTER RHA
0B23 ; [.279A.0020.0002] # ORIYA LETTER NNA
0B24 ; [.279B.0020.0002] # ORIYA LETTER TA
0B25 ; [.279C.0020.0002] # ORIYA LETTER THA
0B26 ; [.279D.0020.0002] # ORIYA LETTER DA
0B27 ; [.279E.0020.0002] # ORIYA LETTER DHA
0B28 ; [.279F.0020.0002] # ORIYA LETTER NA
0B2A ; [.27A0.0020.0002] # ORIYA LETTER PA
0B2B ; [.27A1.0020.0002] # ORIYA LETTER PHA
0B2C ; [.27A2.0020.0002] # ORIYA LETTER BA
0B2D ; [.27A3.0020.0002] # ORIYA LETTER BHA
0B2E ; [.27A4.0020.0002] # ORIYA LETTER MA
0B2F ; [.27A5.0020.0002] # ORIYA LETTER YA
0B5F ; [.27A6.0020.0002] # ORIYA LETTER YYA
0B30 ; [.27A7.0020.0002] # ORIYA LETTER RA
0B32 ; [.27A8.0020.0002] # ORIYA LETTER LA
0B33 ; [.27A9.0020.0002] # ORIYA LETTER LLA
0B35 ; [.27AA.0020.0002] # ORIYA LETTER VA
0B71 ; [.27AB.0020.0002] # ORIYA LETTER WA
0B36 ; [.27AC.0020.0002] # ORIYA LETTER SHA
0B37 ; [.27AD.0020.0002] # ORIYA LETTER SSA
0B38 ; [.27AE.0020.0002] # ORIYA LETTER SA
0B39 ; [.27AF.0020.0002] # ORIYA LETTER HA
0B3D ; [.27B0.0020.0002] # ORIYA SIGN AVAGRAHA
0B3E ; [.27B1.0020.0002] # ORIYA VOWEL SIGN AA
0B3F ; [.27B2.0020.0002] # ORIYA VOWEL SIGN I
0B40 ; [.27B3.0020.0002] # ORIYA VOWEL SIGN II
0B41 ; [.27B4.0020.0002] # ORIYA VOWEL SIGN U
0B42 ; [.27B5.0020.0002] # ORIYA VOWEL SIGN UU
0B43 ; [.27B6.0020.0002] # ORIYA VOWEL SIGN VOCALIC R
0B44 ; [.27B7.0020.0002] # ORIYA VOWEL SIGN VOCALIC RR
0B62 ; [.27B8.0020.0002] # ORIYA VOWEL SIGN VOCALIC L
0B63 ; [.27B9.0020.0002] # ORIYA VOWEL SIGN VOCALIC LL
0B47 ; [.27BA.0020.0002] # ORIYA VOWEL SIGN E
0B48 ; [.27BB.0020.0002] # ORIYA VOWEL SIGN AI
0B47 0B56 ; [.27BB.0020.0002] # ORIYA VOWEL SIGN AI
0B4B ; [.27BC.0020.0002] # ORIYA VOWEL SIGN O
0B47 0B3E ; [.27BC.0020.0002] # ORIYA VOWEL SIGN O
0B4C ; [.27BD.0020.0002] # ORIYA VOWEL SIGN AU
0B47 0B57 ; [.27BD.0020.0002] # ORIYA VOWEL SIGN AU
0B4D ; [.27BE.0020.0002] # ORIYA SIGN VIRAMA
0B56 ; [.27BF.0020.0002] # ORIYA AI LENGTH MARK
0B57 ; [.27C0.0020.0002] # ORIYA AU LENGTH MARK
0BD0 ; [.27C1.0020.0002] # TAMIL OM
0B85 ; [.27C2.0020.0002] # TAMIL LETTER A
0B86 ; [.27C3.0020.0002] # TAMIL LETTER AA
0B87 ; [.27C4.0020.0002] # TAMIL LETTER I
0B88 ; [.27C5.0020.0002] # TAMIL LETTER II
0B89 ; [.27C6.0020.0002] # TAMIL LETTER U
0B8A ; [.27C7.0020.0002] # TAMIL LETTER UU
0B8E ; [.27C8.0020.0002] # TAMIL LETTER E
0B8F ; [.27C9.0020.0002] # TAMIL LETTER EE
0B90 ; [.27CA.0020.0002] # TAMIL LETTER AI
0B92 ; [.27CB.0020.0002] # TAMIL LETTER O
0B93 ; [.27CC.0020.0002] # TAMIL LETTER OO
0B94 ; [.27CD.0020.0002] # TAMIL LETTER AU
0B92 0BD7 ; [.27CD.0020.0002] # TAMIL LETTER AU
0B83 ; [.27CE.0020.0002] # TAMIL SIGN VISARGA
0B95 ; [.27CF.0020.0002] # TAMIL LETTER KA
0B99 ; [.27D0.0020.0002] # TAMIL LETTER NGA
0B9A ; [.27D1.0020.0002] # TAMIL LETTER CA
0B9E ; [.27D2.0020.0002] # TAMIL LETTER NYA
0B9F ; [.27D3.0020.0002] # TAMIL LETTER TTA
0BA3 ; [.27D4.0020.0002] # TAMIL LETTER NNA
0BA4 ; [.27D5.0020.0002] # TAMIL LETTER TA
0BA8 ; [.27D6.0020.0002] # TAMIL LETTER NA
0BAA ; [.27D7.0020.0002] # TAMIL LETTER PA
0BAE ; [.27D8.0020.0002] # TAMIL LETTER MA
0BAF ; [.27D9.0020.0002] # TAMIL LETTER YA
0BB0 ; [.27DA.0020.0002] # TAMIL LETTER RA
0BB2 ; [.27DB.0020.0002] # TAMIL LETTER LA
0BB5 ; [.27DC.0020.0002] # TAMIL LETTER VA
0BB4 ; [.27DD.0020.0002] # TAMIL LETTER LLLA
0BB3 ; [.27DE.0020.0002] # TAMIL LETTER LLA
0BB1 ; [.27DF.0020.0002] # TAMIL LETTER RRA
0BA9 ; [.27E0.0020.0002] # TAMIL LETTER NNNA
0B9C ; [.27E1.0020.0002] # TAMIL LETTER JA
0BB6 ; [.27E2.0020.0002] # TAMIL LETTER SHA
0BB7 ; [.27E3.0020.0002] # TAMIL LETTER SSA
0BB8 ; [.27E4.0020.0002] # TAMIL LETTER SA
0BB9 ; [.27E5.0020.0002] # TAMIL LETTER HA
0BBE ; [.27E6.0020.0002] # TAMIL VOWEL SIGN AA
0BBF ; [.27E7.0020.0002] # TAMIL VOWEL SIGN I
0BC0 ; [.27E8.0020.0002] # TAMIL VOWEL SIGN II
0BC1 ; [.27E9.0020.0002] # TAMIL VOWEL SIGN U
0BC2 ; [.27EA.0020.0002] # TAMIL VOWEL SIGN UU
0BC6 ; [.27EB.0020.0002] # TAMIL VOWEL SIGN E
0BC7 ; [.27EC.0020.0002] # TAMIL VOWEL SIGN EE
0BC8 ; [.27ED.0020.0002] # TAMIL VOWEL SIGN AI
0BCA ; [.27EE.0020.0002] # TAMIL VOWEL SIGN O
0BC6 0BBE ; [.27EE.0020.0002] # TAMIL VOWEL SIGN O
0BCB ; [.27EF.0020.0002] # TAMIL VOWEL SIGN OO
0BC7 0BBE ; [.27EF.0020.0002] # TAMIL VOWEL SIGN OO
0BCC ; [.27F0.0020.0002] # TAMIL VOWEL SIGN AU
0BC6 0BD7 ; [.27F0.0020.0002] # TAMIL VOWEL SIGN AU
0BCD ; [.27F1.0020.0002] # TAMIL SIGN VIRAMA
0BD7 ; [.27F2.0020.0002] # TAMIL AU LENGTH MARK
0C05 ; [.27F3.0020.0002] # TELUGU LETTER A
0C06 ; [.27F4.0020.0002] # TELUGU LETTER AA
0C07 ; [.27F5.0020.0002] # TELUGU LETTER I
0C08 ; [.27F6.0020.0002] # TELUGU LETTER II
0C09 ; [.27F7.0020.0002] # TELUGU LETTER U
0C0A ; [.27F8.0020.0002] # TELUGU LETTER UU
0C0B ; [.27F9.0020.0002] # TELUGU LETTER VOCALIC R
0C60 ; [.27FA.0020.0002] # TELUGU LETTER VOCALIC RR
0C0C ; [.27FB.0020.0002] # TELUGU LETTER VOCALIC L
0C61 ; [.27FC.0020.0002] # TELUGU LETTER VOCALIC LL
0C0E ; [.27FD.0020.0002] # TELUGU LETTER E
0C0F ; [.27FE.0020.0002] # TELUGU LETTER EE
0C10 ; [.27FF.0020.0002] # TELUGU LETTER AI
0C12 ; [.2800.0020.0002] # TELUGU LETTER O
0C13 ; [.2801.0020.0002] # TELUGU LETTER OO
0C14 ; [.2802.0020.0002] # TELUGU LETTER AU
0C15 ; [.2803.0020.0002] # TELUGU LETTER KA
0C16 ; [.2804.0020.0002] # TELUGU LETTER KHA
0C17 ; [.2805.0020.0002] # TELUGU LETTER GA
0C18 ; [.2806.0020.0002] # TELUGU LETTER GHA
0C19 ; [.2807.0020.0002] # TELUGU LETTER NGA
0C1A ; [.2808.0020.0002] # TELUGU LETTER CA
0C58 ; [.2809.0020.0002] # TELUGU LETTER TSA
0C1B ; [.280A.0020.0002] # TELUGU LETTER CHA
0C1C ; [.280B.0020.0002] # TELUGU LETTER JA
0C59 ; [.280C.0020.0002] # TELUGU LETTER DZA
0C1D ; [.280D.0020.0002] # TELUGU LETTER JHA
0C1E ; [.280E.0020.0002] # TELUGU LETTER NYA
0C1F ; [.280F.0020.0002] # TELUGU LETTER TTA
0C20 ; [.2810.0020.0002] # TELUGU LETTER TTHA
0C21 ; [.2811.0020.0002] # TELUGU LETTER DDA
0C22 ; [.2812.0020.0002] # TELUGU LETTER DDHA
0C23 ; [.2813.0020.0002] # TELUGU LETTER NNA
0C24 ; [.2814.0020.0002] # TELUGU LETTER TA
0C25 ; [.2815.0020.0002] # TELUGU LETTER THA
0C26 ; [.2816.0020.0002] # TELUGU LETTER DA
0C27 ; [.2817.0020.0002] # TELUGU LETTER DHA
0C28 ; [.2818.0020.0002] # TELUGU LETTER NA
0C2A ; [.2819.0020.0002] # TELUGU LETTER PA
0C2B ; [.281A.0020.0002] # TELUGU LETTER PHA
0C2C ; [.281B.0020.0002] # TELUGU LETTER BA
0C2D ; [.281C.0020.0002] # TELUGU LETTER BHA
0C2E ; [.281D.0020.0002] # TELUGU LETTER MA
0C2F ; [.281E.0020.0002] # TELUGU LETTER YA
0C30 ; [.281F.0020.0002] # TELUGU LETTER RA
0C31 ; [.2820.0020.0002] # TELUGU LETTER RRA
0C32 ; [.2821.0020.0002] # TELUGU LETTER LA
0C35 ; [.2822.0020.0002] # TELUGU LETTER VA
0C36 ; [.2823.0020.0002] # TELUGU LETTER SHA
0C37 ; [.2824.0020.0002] # TELUGU LETTER SSA
0C38 ; [.2825.0020.0002] # TELUGU LETTER SA
0C39 ; [.2826.0020.0002] # TELUGU LETTER HA
0C33 ; [.2827.0020.0002] # TELUGU LETTER LLA
0C34 ; [.2828.0020.0002] # TELUGU LETTER LLLA
0C5A ; [.2829.0020.0002] # TELUGU LETTER RRRA
0C3D ; [.282A.0020.0002] # TELUGU SIGN AVAGRAHA
0C3E ; [.282B.0020.0002] # TELUGU VOWEL SIGN AA
0C3F ; [.282C.0020.0002] # TELUGU VOWEL SIGN I
0C40 ; [.282D.0020.0002] # TELUGU VOWEL SIGN II
0C41 ; [.282E.0020.0002] # TELUGU VOWEL SIGN U
0C42 ; [.282F.0020.0002] # TELUGU VOWEL SIGN UU
0C43 ; [.2830.0020.0002] # TELUGU VOWEL SIGN VOCALIC R
0C44 ; [.2831.0020.0002] # TELUGU VOWEL SIGN VOCALIC RR
0C62 ; [.2832.0020.0002] # TELUGU VOWEL SIGN VOCALIC L
0C63 ; [.2833.0020.0002] # TELUGU VOWEL SIGN VOCALIC LL
0C46 ; [.2834.0020.0002] # TELUGU VOWEL SIGN E
0C47 ; [.2835.0020.0002] # TELUGU VOWEL SIGN EE
0C48 ; [.2836.0020.0002] # TELUGU VOWEL SIGN AI
0C46 0C56 ; [.2836.0020.0002] # TELUGU VOWEL SIGN AI
0C4A ; [.2837.0020.0002] # TELUGU VOWEL SIGN O
0C4B ; [.2838.0020.0002] # TELUGU VOWEL SIGN OO
0C4C ; [.2839.0020.0002] # TELUGU VOWEL SIGN AU
0C4D ; [.283A.0020.0002] # TELUGU SIGN VIRAMA
0C55 ; [.283B.0020.0002] # TELUGU LENGTH MARK
0C56 ; [.283C.0020.0002] # TELUGU AI LENGTH MARK
0C85 ; [.283D.0020.0002] # KANNADA LETTER A
0C86 ; [.283E.0020.0002] # KANNADA LETTER AA
0C87 ; [.283F.0020.0002] # KANNADA LETTER I
0C88 ; [.2840.0020.0002] # KANNADA LETTER II
0C89 ; [.2841.0020.0002] # KANNADA LETTER U
0C8A ; [.2842.0020.0002] # KANNADA LETTER UU
0C8B ; [.2843.0020.0002] # KANNADA LETTER VOCALIC R
0CE0 ; [.2844.0020.0002] # KANNADA LETTER VOCALIC RR
0C8C ; [.2845.0020.0002] # KANNADA LETTER VOCALIC L
0CE1 ; [.2846.0020.0002] # KANNADA LETTER VOCALIC LL
0C8E ; [.2847.0020.0002] # KANNADA LETTER E
0C8F ; [.2848.0020.0002] # KANNADA LETTER EE
0C90 ; [.2849.0020.0002] # KANNADA LETTER AI
0C92 ; [.284A.0020.0002] # KANNADA LETTER O
0C93 ; [.284B.0020.0002] # KANNADA LETTER OO
0C94 ; [.284C.0020.0002] # KANNADA LETTER AU
0C95 ; [.284D.0020.0002] # KANNADA LETTER KA
0C96 ; [.284E.0020.0002] # KANNADA LETTER KHA
0C97 ; [.284F.0020.0002] # KANNADA LETTER GA
0C98 ; [.2850.0020.0002] # KANNADA LETTER GHA
0C99 ; [.2851.0020.0002] # KANNADA LETTER NGA
0C9A ; [.2852.0020.0002] # KANNADA LETTER CA
0C9B ; [.2853.0020.0002] # KANNADA LETTER CHA
0C9C ; [.2854.0020.0002] # KANNADA LETTER JA
0C9D ; [.2855.0020.0002] # KANNADA LETTER JHA
0C9E ; [.2856.0020.0002] # KANNADA LETTER NYA
0C9F ; [.2857.0020.0002] # KANNADA LETTER TTA
0CA0 ; [.2858.0020.0002] # KANNADA LETTER TTHA
0CA1 ; [.2859.0020.0002] # KANNADA LETTER DDA
0CA2 ; [.285A.0020.0002] # KANNADA LETTER DDHA
0CA3 ; [.285B.0020.0002] # KANNADA LETTER NNA
0CA4 ; [.285C.0020.0002] # KANNADA LETTER TA
0CA5 ; [.285D.0020.0002] # KANNADA LETTER THA
0CA6 ; [.285E.0020.0002] # KANNADA LETTER DA
0CA7 ; [.285F.0020.0002] # KANNADA LETTER DHA
0CA8 ; [.2860.0020.0002] # KANNADA LETTER NA
0CAA ; [.2861.0020.0002] # KANNADA LETTER PA
0CAB ; [.2862.0020.0002] # KANNADA LETTER PHA
0CAC ; [.2863.0020.0002] # KANNADA LETTER BA
0CAD ; [.2864.0020.0002] # KANNADA LETTER BHA
0CAE ; [.2865.0020.0002] # KANNADA LETTER MA
0CAF ; [.2866.0020.0002] # KANNADA LETTER YA
0CB0 ; [.2867.0020.0002] # KANNADA LETTER RA
0CB1 ; [.2868.0020.0002] # KANNADA LETTER RRA
0CB2 ; [.2869.0020.0002] # KANNADA LETTER LA
0CB5 ; [.286A.0020.0002] # KANNADA LETTER VA
0CB6 ; [.286B.0020.0002] # KANNADA LETTER SHA
0CB7 ; [.286C.0020.0002] # KANNADA LETTER SSA
0CB8 ; [.286D.0020.0002] # KANNADA LETTER SA
0CB9 ; [.286E.0020.0002] # KANNADA LETTER HA
0CB3 ; [.286F.0020.0002] # KANNADA LETTER LLA
0CDE ; [.2870.0020.0002] # KANNADA LETTER FA
0CBD ; [.2871.0020.0002] # KANNADA SIGN AVAGRAHA
0CF1 ; [.2872.0020.0002] # KANNADA SIGN JIHVAMULIYA
0CF2 ; [.2873.0020.0002] # KANNADA SIGN UPADHMANIYA
0C80 ; [.2874.0020.0002] # KANNADA SIGN SPACING CANDRABINDU
0CBE ; [.2875.0020.0002] # KANNADA VOWEL SIGN AA
0CBF ; [.2876.0020.0002] # KANNADA VOWEL SIGN I
0CC0 ; [.2877.0020.0002] # KANNADA VOWEL SIGN II
0CBF 0CD5 ; [.2877.0020.0002] # KANNADA VOWEL SIGN II
0CC1 ; [.2878.0020.0002] # KANNADA VOWEL SIGN U
0CC2 ; [.2879.0020.0002] # KANNADA VOWEL SIGN UU
0CC3 ; [.287A.0020.0002] # KANNADA VOWEL SIGN VOCALIC R
0CC4 ; [.287B.0020.0002] # KANNADA VOWEL SIGN VOCALIC RR
0CE2 ; [.287C.0020.0002] # KANNADA VOWEL SIGN VOCALIC L
0CE3 ; [.287D.0020.0002] # KANNADA VOWEL SIGN VOCALIC LL
0CC6 ; [.287E.0020.0002] # KANNADA VOWEL SIGN E
0CC7 ; [.287F.0020.0002] # KANNADA VOWEL SIGN EE
0CC6 0CD5 ; [.287F.0020.0002] # KANNADA VOWEL SIGN EE
0CC8 ; [.2880.0020.0002] # KANNADA VOWEL SIGN AI
0CC6 0CD6 ; [.2880.0020.0002] # KANNADA VOWEL SIGN AI
0CCA ; [.2881.0020.0002] # KANNADA VOWEL SIGN O
0CC6 0CC2 ; [.2881.0020.0002] # KANNADA VOWEL SIGN O
0CCB ; [.2882.0020.0002] # KANNADA VOWEL SIGN OO
0CC6 0CC2 0CD5 ; [.2882.0020.0002] # KANNADA VOWEL SIGN OO
0CCA 0CD5 ; [.2882.0020.0002] # KANNADA VOWEL SIGN OO
0CCC ; [.2883.0020.0002] # KANNADA VOWEL SIGN AU
0CCD ; [.2884.0020.0002] # KANNADA SIGN VIRAMA
0CD5 ; [.2885.0020.0002] # KANNADA LENGTH MARK
0CD6 ; [.2886.0020.0002] # KANNADA AI LENGTH MARK
0D05 ; [.2887.0020.0002] # MALAYALAM LETTER A
0D06 ; [.2888.0020.0002] # MALAYALAM LETTER AA
0D07 ; [.2889.0020.0002] # MALAYALAM LETTER I
0D08 ; [.288A.0020.0002] # MALAYALAM LETTER II
0D5F ; [.288B.0020.0002] # MALAYALAM LETTER ARCHAIC II
0D09 ; [.288C.0020.0002] # MALAYALAM LETTER U
0D0A ; [.288D.0020.0002] # MALAYALAM LETTER UU
0D0B ; [.288E.0020.0002] # MALAYALAM LETTER VOCALIC R
0D60 ; [.288F.0020.0002] # MALAYALAM LETTER VOCALIC RR
0D0C ; [.2890.0020.0002] # MALAYALAM LETTER VOCALIC L
0D61 ; [.2891.0020.0002] # MALAYALAM LETTER VOCALIC LL
0D0E ; [.2892.0020.0002] # MALAYALAM LETTER E
0D0F ; [.2893.0020.0002] # MALAYALAM LETTER EE
0D10 ; [.2894.0020.0002] # MALAYALAM LETTER AI
0D12 ; [.2895.0020.0002] # MALAYALAM LETTER O
0D13 ; [.2896.0020.0002] # MALAYALAM LETTER OO
0D14 ; [.2897.0020.0002] # MALAYALAM LETTER AU
0D15 ; [.2898.0020.0002] # MALAYALAM LETTER KA
0D7F ; [.2898.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU K
0D16 ; [.2899.0020.0002] # MALAYALAM LETTER KHA
0D17 ; [.289A.0020.0002] # MALAYALAM LETTER GA
0D18 ; [.289B.0020.0002] # MALAYALAM LETTER GHA
0D19 ; [.289C.0020.0002] # MALAYALAM LETTER NGA
0D1A ; [.289D.0020.0002] # MALAYALAM LETTER CA
0D1B ; [.289E.0020.0002] # MALAYALAM LETTER CHA
0D1C ; [.289F.0020.0002] # MALAYALAM LETTER JA
0D1D ; [.28A0.0020.0002] # MALAYALAM LETTER JHA
0D1E ; [.28A1.0020.0002] # MALAYALAM LETTER NYA
0D1F ; [.28A2.0020.0002] # MALAYALAM LETTER TTA
0D20 ; [.28A3.0020.0002] # MALAYALAM LETTER TTHA
0D21 ; [.28A4.0020.0002] # MALAYALAM LETTER DDA
0D22 ; [.28A5.0020.0002] # MALAYALAM LETTER DDHA
0D23 ; [.28A6.0020.0002] # MALAYALAM LETTER NNA
0D7A ; [.28A6.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU NN
0D24 ; [.28A7.0020.0002] # MALAYALAM LETTER TA
0D25 ; [.28A8.0020.0002] # MALAYALAM LETTER THA
0D26 ; [.28A9.0020.0002] # MALAYALAM LETTER DA
0D27 ; [.28AA.0020.0002] # MALAYALAM LETTER DHA
0D28 ; [.28AB.0020.0002] # MALAYALAM LETTER NA
0D7B ; [.28AB.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU N
0D29 ; [.28AC.0020.0002] # MALAYALAM LETTER NNNA
0D2A ; [.28AD.0020.0002] # MALAYALAM LETTER PA
0D2B ; [.28AE.0020.0002] # MALAYALAM LETTER PHA
0D2C ; [.28AF.0020.0002] # MALAYALAM LETTER BA
0D2D ; [.28B0.0020.0002] # MALAYALAM LETTER BHA
0D2E ; [.28B1.0020.0002] # MALAYALAM LETTER MA
0D54 ; [.28B1.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU M
0D2F ; [.28B2.0020.0002] # MALAYALAM LETTER YA
0D55 ; [.28B2.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU Y
0D30 ; [.28B3.0020.0002] # MALAYALAM LETTER RA
0D4E ; [.28B3.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER DOT REPH
0D7C ; [.28B3.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU RR
0D32 ; [.28B4.0020.0002] # MALAYALAM LETTER LA
0D7D ; [.28B4.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU L
0D35 ; [.28B5.0020.0002] # MALAYALAM LETTER VA
0D36 ; [.28B6.0020.0002] # MALAYALAM LETTER SHA
0D37 ; [.28B7.0020.0002] # MALAYALAM LETTER SSA
0D38 ; [.28B8.0020.0002] # MALAYALAM LETTER SA
0D39 ; [.28B9.0020.0002] # MALAYALAM LETTER HA
0D33 ; [.28BA.0020.0002] # MALAYALAM LETTER LLA
0D7E ; [.28BA.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU LL
0D34 ; [.28BB.0020.0002] # MALAYALAM LETTER LLLA
0D56 ; [.28BB.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU LLL
0D31 ; [.28BC.0020.0002] # MALAYALAM LETTER RRA
0D3A ; [.28BD.0020.0002] # MALAYALAM LETTER TTTA
0D3D ; [.28BE.0020.0002] # MALAYALAM SIGN AVAGRAHA
0D3E ; [.28BF.0020.0002] # MALAYALAM VOWEL SIGN AA
0D3F ; [.28C0.0020.0002] # MALAYALAM VOWEL SIGN I
0D40 ; [.28C1.0020.0002] # MALAYALAM VOWEL SIGN II
0D41 ; [.28C2.0020.0002] # MALAYALAM VOWEL SIGN U
0D42 ; [.28C3.0020.0002] # MALAYALAM VOWEL SIGN UU
0D43 ; [.28C4.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC R
0D44 ; [.28C5.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC RR
0D62 ; [.28C6.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC L
0D63 ; [.28C7.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC LL
0D46 ; [.28C8.0020.0002] # MALAYALAM VOWEL SIGN E
0D47 ; [.28C9.0020.0002] # MALAYALAM VOWEL SIGN EE
0D48 ; [.28CA.0020.0002] # MALAYALAM VOWEL SIGN AI
0D4A ; [.28CB.0020.0002] # MALAYALAM VOWEL SIGN O
0D46 0D3E ; [.28CB.0020.0002] # MALAYALAM VOWEL SIGN O
0D4B ; [.28CC.0020.0002] # MALAYALAM VOWEL SIGN OO
0D47 0D3E ; [.28CC.0020.0002] # MALAYALAM VOWEL SIGN OO
0D4C ; [.28CD.0020.0002] # MALAYALAM VOWEL SIGN AU
0D46 0D57 ; [.28CD.0020.0002] # MALAYALAM VOWEL SIGN AU
0D57 ; [.28CE.0020.0002] # MALAYALAM AU LENGTH MARK
0D4D ; [.28CF.0020.0002] # MALAYALAM SIGN VIRAMA
0D85 ; [.28D0.0020.0002] # SINHALA LETTER AYANNA
0D86 ; [.28D1.0020.0002] # SINHALA LETTER AAYANNA
0D87 ; [.28D2.0020.0002] # SINHALA LETTER AEYANNA
0D88 ; [.28D3.0020.0002] # SINHALA LETTER AEEYANNA
0D89 ; [.28D4.0020.0002] # SINHALA LETTER IYANNA
0D8A ; [.28D5.0020.0002] # SINHALA LETTER IIYANNA
0D8B ; [.28D6.0020.0002] # SINHALA LETTER UYANNA
0D8C ; [.28D7.0020.0002] # SINHALA LETTER UUYANNA
0D8D ; [.28D8.0020.0002] # SINHALA LETTER IRUYANNA
0D8E ; [.28D9.0020.0002] # SINHALA LETTER IRUUYANNA
0D8F ; [.28DA.0020.0002] # SINHALA LETTER ILUYANNA
0D90 ; [.28DB.0020.0002] # SINHALA LETTER ILUUYANNA
0D91 ; [.28DC.0020.0002] # SINHALA LETTER EYANNA
0D92 ; [.28DD.0020.0002] # SINHALA LETTER EEYANNA
0D93 ; [.28DE.0020.0002] # SINHALA LETTER AIYANNA
0D94 ; [.28DF.0020.0002] # SINHALA LETTER OYANNA
0D95 ; [.28E0.0020.0002] # SINHALA LETTER OOYANNA
0D96 ; [.28E1.0020.0002] # SINHALA LETTER AUYANNA
0D9A ; [.28E2.0020.0002] # SINHALA LETTER ALPAPRAANA KAYANNA
0D9B ; [.28E3.0020.0002] # SINHALA LETTER MAHAAPRAANA KAYANNA
0D9C ; [.28E4.0020.0002] # SINHALA LETTER ALPAPRAANA GAYANNA
0D9D ; [.28E5.0020.0002] # SINHALA LETTER MAHAAPRAANA GAYANNA
0D9E ; [.28E6.0020.0002] # SINHALA LETTER KANTAJA NAASIKYAYA
0D9F ; [.28E7.0020.0002] # SINHALA LETTER SANYAKA GAYANNA
0DA0 ; [.28E8.0020.0002] # SINHALA LETTER ALPAPRAANA CAYANNA
0DA1 ; [.28E9.0020.0002] # SINHALA LETTER MAHAAPRAANA CAYANNA
0DA2 ; [.28EA.0020.0002] # SINHALA LETTER ALPAPRAANA JAYANNA
0DA3 ; [.28EB.0020.0002] # SINHALA LETTER MAHAAPRAANA JAYANNA
0DA4 ; [.28EC.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA
0DA5 ; [.28ED.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
0DA6 ; [.28EE.0020.0002] # SINHALA LETTER SANYAKA JAYANNA
0DA7 ; [.28EF.0020.0002] # SINHALA LETTER ALPAPRAANA TTAYANNA
0DA8 ; [.28F0.0020.0002] # SINHALA LETTER MAHAAPRAANA TTAYANNA
0DA9 ; [.28F1.0020.0002] # SINHALA LETTER ALPAPRAANA DDAYANNA
0DAA ; [.28F2.0020.0002] # SINHALA LETTER MAHAAPRAANA DDAYANNA
0DAB ; [.28F3.0020.0002] # SINHALA LETTER MUURDHAJA NAYANNA
0DAC ; [.28F4.0020.0002] # SINHALA LETTER SANYAKA DDAYANNA
0DAD ; [.28F5.0020.0002] # SINHALA LETTER ALPAPRAANA TAYANNA
0DAE ; [.28F6.0020.0002] # SINHALA LETTER MAHAAPRAANA TAYANNA
0DAF ; [.28F7.0020.0002] # SINHALA LETTER ALPAPRAANA DAYANNA
0DB0 ; [.28F8.0020.0002] # SINHALA LETTER MAHAAPRAANA DAYANNA
0DB1 ; [.28F9.0020.0002] # SINHALA LETTER DANTAJA NAYANNA
0DB3 ; [.28FA.0020.0002] # SINHALA LETTER SANYAKA DAYANNA
0DB4 ; [.28FB.0020.0002] # SINHALA LETTER ALPAPRAANA PAYANNA
0DB5 ; [.28FC.0020.0002] # SINHALA LETTER MAHAAPRAANA PAYANNA
0DB6 ; [.28FD.0020.0002] # SINHALA LETTER ALPAPRAANA BAYANNA
0DB7 ; [.28FE.0020.0002] # SINHALA LETTER MAHAAPRAANA BAYANNA
0DB8 ; [.28FF.0020.0002] # SINHALA LETTER MAYANNA
0DB9 ; [.2900.0020.0002] # SINHALA LETTER AMBA BAYANNA
0DBA ; [.2901.0020.0002] # SINHALA LETTER YAYANNA
0DBB ; [.2902.0020.0002] # SINHALA LETTER RAYANNA
0DBD ; [.2903.0020.0002] # SINHALA LETTER DANTAJA LAYANNA
0DC0 ; [.2904.0020.0002] # SINHALA LETTER VAYANNA
0DC1 ; [.2905.0020.0002] # SINHALA LETTER TAALUJA SAYANNA
0DC2 ; [.2906.0020.0002] # SINHALA LETTER MUURDHAJA SAYANNA
0DC3 ; [.2907.0020.0002] # SINHALA LETTER DANTAJA SAYANNA
0DC4 ; [.2908.0020.0002] # SINHALA LETTER HAYANNA
0DC5 ; [.2909.0020.0002] # SINHALA LETTER MUURDHAJA LAYANNA
0DC6 ; [.290A.0020.0002] # SINHALA LETTER FAYANNA
0DCF ; [.290B.0020.0002] # SINHALA VOWEL SIGN AELA-PILLA
0DD0 ; [.290C.0020.0002] # SINHALA VOWEL SIGN KETTI AEDA-PILLA
0DD1 ; [.290D.0020.0002] # SINHALA VOWEL SIGN DIGA AEDA-PILLA
0DD2 ; [.290E.0020.0002] # SINHALA VOWEL SIGN KETTI IS-PILLA
0DD3 ; [.290F.0020.0002] # SINHALA VOWEL SIGN DIGA IS-PILLA
0DD4 ; [.2910.0020.0002] # SINHALA VOWEL SIGN KETTI PAA-PILLA
0DD6 ; [.2911.0020.0002] # SINHALA VOWEL SIGN DIGA PAA-PILLA
0DD8 ; [.2912.0020.0002] # SINHALA VOWEL SIGN GAETTA-PILLA
0DF2 ; [.2913.0020.0002] # SINHALA VOWEL SIGN DIGA GAETTA-PILLA
0DDF ; [.2914.0020.0002] # SINHALA VOWEL SIGN GAYANUKITTA
0DF3 ; [.2915.0020.0002] # SINHALA VOWEL SIGN DIGA GAYANUKITTA
0DD9 ; [.2916.0020.0002] # SINHALA VOWEL SIGN KOMBUVA
0DDA ; [.2917.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA
0DD9 0DCA ; [.2917.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA
0DDB ; [.2918.0020.0002] # SINHALA VOWEL SIGN KOMBU DEKA
0DDC ; [.2919.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
0DD9 0DCF ; [.2919.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
0DDD ; [.291A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
0DD9 0DCF 0DCA ; [.291A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
0DDC 0DCA ; [.291A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
0DDE ; [.291B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
0DD9 0DDF ; [.291B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
0DCA ; [.291C.0020.0002] # SINHALA SIGN AL-LAKUNA
AAF2 ; [.291D.0020.0002] # MEETEI MAYEK ANJI
ABC0 ; [.291E.0020.0002] # MEETEI MAYEK LETTER KOK
ABC1 ; [.291F.0020.0002] # MEETEI MAYEK LETTER SAM
ABC2 ; [.2920.0020.0002] # MEETEI MAYEK LETTER LAI
ABC3 ; [.2921.0020.0002] # MEETEI MAYEK LETTER MIT
ABC4 ; [.2922.0020.0002] # MEETEI MAYEK LETTER PA
ABC5 ; [.2923.0020.0002] # MEETEI MAYEK LETTER NA
ABC6 ; [.2924.0020.0002] # MEETEI MAYEK LETTER CHIL
ABC7 ; [.2925.0020.0002] # MEETEI MAYEK LETTER TIL
ABC8 ; [.2926.0020.0002] # MEETEI MAYEK LETTER KHOU
ABC9 ; [.2927.0020.0002] # MEETEI MAYEK LETTER NGOU
ABCA ; [.2928.0020.0002] # MEETEI MAYEK LETTER THOU
ABCB ; [.2929.0020.0002] # MEETEI MAYEK LETTER WAI
ABCC ; [.292A.0020.0002] # MEETEI MAYEK LETTER YANG
ABCD ; [.292B.0020.0002] # MEETEI MAYEK LETTER HUK
ABCE ; [.292C.0020.0002] # MEETEI MAYEK LETTER UN
ABCF ; [.292D.0020.0002] # MEETEI MAYEK LETTER I
ABD0 ; [.292E.0020.0002] # MEETEI MAYEK LETTER PHAM
ABD1 ; [.292F.0020.0002] # MEETEI MAYEK LETTER ATIYA
ABD2 ; [.2930.0020.0002] # MEETEI MAYEK LETTER GOK
ABD3 ; [.2931.0020.0002] # MEETEI MAYEK LETTER JHAM
ABD4 ; [.2932.0020.0002] # MEETEI MAYEK LETTER RAI
ABD5 ; [.2933.0020.0002] # MEETEI MAYEK LETTER BA
ABD6 ; [.2934.0020.0002] # MEETEI MAYEK LETTER JIL
ABD7 ; [.2935.0020.0002] # MEETEI MAYEK LETTER DIL
ABD8 ; [.2936.0020.0002] # MEETEI MAYEK LETTER GHOU
ABD9 ; [.2937.0020.0002] # MEETEI MAYEK LETTER DHOU
ABDA ; [.2938.0020.0002] # MEETEI MAYEK LETTER BHAM
AAE0 ; [.2939.0020.0002] # MEETEI MAYEK LETTER E
AAE1 ; [.293A.0020.0002] # MEETEI MAYEK LETTER O
AAE2 ; [.293B.0020.0002] # MEETEI MAYEK LETTER CHA
AAE3 ; [.293C.0020.0002] # MEETEI MAYEK LETTER NYA
AAE4 ; [.293D.0020.0002] # MEETEI MAYEK LETTER TTA
AAE5 ; [.293E.0020.0002] # MEETEI MAYEK LETTER TTHA
AAE6 ; [.293F.0020.0002] # MEETEI MAYEK LETTER DDA
AAE7 ; [.2940.0020.0002] # MEETEI MAYEK LETTER DDHA
AAE8 ; [.2941.0020.0002] # MEETEI MAYEK LETTER NNA
AAE9 ; [.2942.0020.0002] # MEETEI MAYEK LETTER SHA
AAEA ; [.2943.0020.0002] # MEETEI MAYEK LETTER SSA
ABE3 ; [.2944.0020.0002] # MEETEI MAYEK VOWEL SIGN ONAP
ABE4 ; [.2945.0020.0002] # MEETEI MAYEK VOWEL SIGN INAP
ABE5 ; [.2946.0020.0002] # MEETEI MAYEK VOWEL SIGN ANAP
ABE6 ; [.2947.0020.0002] # MEETEI MAYEK VOWEL SIGN YENAP
ABE7 ; [.2948.0020.0002] # MEETEI MAYEK VOWEL SIGN SOUNAP
ABE8 ; [.2949.0020.0002] # MEETEI MAYEK VOWEL SIGN UNAP
ABE9 ; [.294A.0020.0002] # MEETEI MAYEK VOWEL SIGN CHEINAP
ABEA ; [.294B.0020.0002] # MEETEI MAYEK VOWEL SIGN NUNG
AAEB ; [.294C.0020.0002] # MEETEI MAYEK VOWEL SIGN II
AAEC ; [.294D.0020.0002] # MEETEI MAYEK VOWEL SIGN UU
AAED ; [.294E.0020.0002] # MEETEI MAYEK VOWEL SIGN AAI
AAEE ; [.294F.0020.0002] # MEETEI MAYEK VOWEL SIGN AU
AAEF ; [.2950.0020.0002] # MEETEI MAYEK VOWEL SIGN AAU
AAF5 ; [.2951.0020.0002] # MEETEI MAYEK VOWEL SIGN VISARGA
ABDB ; [.2952.0020.0002] # MEETEI MAYEK LETTER KOK LONSUM
ABDC ; [.2953.0020.0002] # MEETEI MAYEK LETTER LAI LONSUM
ABDD ; [.2954.0020.0002] # MEETEI MAYEK LETTER MIT LONSUM
ABDE ; [.2955.0020.0002] # MEETEI MAYEK LETTER PA LONSUM
ABDF ; [.2956.0020.0002] # MEETEI MAYEK LETTER NA LONSUM
ABE0 ; [.2957.0020.0002] # MEETEI MAYEK LETTER TIL LONSUM
ABE1 ; [.2958.0020.0002] # MEETEI MAYEK LETTER NGOU LONSUM
ABE2 ; [.2959.0020.0002] # MEETEI MAYEK LETTER I LONSUM
ABED ; [.295A.0020.0002] # MEETEI MAYEK APUN IYEK
AAF6 ; [.295B.0020.0002] # MEETEI MAYEK VIRAMA
A800 ; [.295C.0020.0002] # SYLOTI NAGRI LETTER A
A801 ; [.295D.0020.0002] # SYLOTI NAGRI LETTER I
A802 ; [.295E.0020.0002] # SYLOTI NAGRI SIGN DVISVARA
A803 ; [.295F.0020.0002] # SYLOTI NAGRI LETTER U
A804 ; [.2960.0020.0002] # SYLOTI NAGRI LETTER E
A805 ; [.2961.0020.0002] # SYLOTI NAGRI LETTER O
A806 ; [.2962.0020.0002] # SYLOTI NAGRI SIGN HASANTA
A807 ; [.2963.0020.0002] # SYLOTI NAGRI LETTER KO
A808 ; [.2964.0020.0002] # SYLOTI NAGRI LETTER KHO
A809 ; [.2965.0020.0002] # SYLOTI NAGRI LETTER GO
A80A ; [.2966.0020.0002] # SYLOTI NAGRI LETTER GHO
A80C ; [.2967.0020.0002] # SYLOTI NAGRI LETTER CO
A80D ; [.2968.0020.0002] # SYLOTI NAGRI LETTER CHO
A80E ; [.2969.0020.0002] # SYLOTI NAGRI LETTER JO
A80F ; [.296A.0020.0002] # SYLOTI NAGRI LETTER JHO
A810 ; [.296B.0020.0002] # SYLOTI NAGRI LETTER TTO
A811 ; [.296C.0020.0002] # SYLOTI NAGRI LETTER TTHO
A812 ; [.296D.0020.0002] # SYLOTI NAGRI LETTER DDO
A813 ; [.296E.0020.0002] # SYLOTI NAGRI LETTER DDHO
A814 ; [.296F.0020.0002] # SYLOTI NAGRI LETTER TO
A815 ; [.2970.0020.0002] # SYLOTI NAGRI LETTER THO
A816 ; [.2971.0020.0002] # SYLOTI NAGRI LETTER DO
A817 ; [.2972.0020.0002] # SYLOTI NAGRI LETTER DHO
A818 ; [.2973.0020.0002] # SYLOTI NAGRI LETTER NO
A819 ; [.2974.0020.0002] # SYLOTI NAGRI LETTER PO
A81A ; [.2975.0020.0002] # SYLOTI NAGRI LETTER PHO
A81B ; [.2976.0020.0002] # SYLOTI NAGRI LETTER BO
A81C ; [.2977.0020.0002] # SYLOTI NAGRI LETTER BHO
A81D ; [.2978.0020.0002] # SYLOTI NAGRI LETTER MO
A81E ; [.2979.0020.0002] # SYLOTI NAGRI LETTER RO
A81F ; [.297A.0020.0002] # SYLOTI NAGRI LETTER LO
A820 ; [.297B.0020.0002] # SYLOTI NAGRI LETTER RRO
A821 ; [.297C.0020.0002] # SYLOTI NAGRI LETTER SO
A822 ; [.297D.0020.0002] # SYLOTI NAGRI LETTER HO
A823 ; [.297E.0020.0002] # SYLOTI NAGRI VOWEL SIGN A
A824 ; [.297F.0020.0002] # SYLOTI NAGRI VOWEL SIGN I
A825 ; [.2980.0020.0002] # SYLOTI NAGRI VOWEL SIGN U
A826 ; [.2981.0020.0002] # SYLOTI NAGRI VOWEL SIGN E
A827 ; [.2982.0020.0002] # SYLOTI NAGRI VOWEL SIGN OO
A882 ; [.2983.0020.0002] # SAURASHTRA LETTER A
A883 ; [.2984.0020.0002] # SAURASHTRA LETTER AA
A884 ; [.2985.0020.0002] # SAURASHTRA LETTER I
A885 ; [.2986.0020.0002] # SAURASHTRA LETTER II
A886 ; [.2987.0020.0002] # SAURASHTRA LETTER U
A887 ; [.2988.0020.0002] # SAURASHTRA LETTER UU
A888 ; [.2989.0020.0002] # SAURASHTRA LETTER VOCALIC R
A889 ; [.298A.0020.0002] # SAURASHTRA LETTER VOCALIC RR
A88A ; [.298B.0020.0002] # SAURASHTRA LETTER VOCALIC L
A88B ; [.298C.0020.0002] # SAURASHTRA LETTER VOCALIC LL
A88C ; [.298D.0020.0002] # SAURASHTRA LETTER E
A88D ; [.298E.0020.0002] # SAURASHTRA LETTER EE
A88E ; [.298F.0020.0002] # SAURASHTRA LETTER AI
A88F ; [.2990.0020.0002] # SAURASHTRA LETTER O
A890 ; [.2991.0020.0002] # SAURASHTRA LETTER OO
A891 ; [.2992.0020.0002] # SAURASHTRA LETTER AU
A892 ; [.2993.0020.0002] # SAURASHTRA LETTER KA
A893 ; [.2994.0020.0002] # SAURASHTRA LETTER KHA
A894 ; [.2995.0020.0002] # SAURASHTRA LETTER GA
A895 ; [.2996.0020.0002] # SAURASHTRA LETTER GHA
A896 ; [.2997.0020.0002] # SAURASHTRA LETTER NGA
A897 ; [.2998.0020.0002] # SAURASHTRA LETTER CA
A898 ; [.2999.0020.0002] # SAURASHTRA LETTER CHA
A899 ; [.299A.0020.0002] # SAURASHTRA LETTER JA
A89A ; [.299B.0020.0002] # SAURASHTRA LETTER JHA
A89B ; [.299C.0020.0002] # SAURASHTRA LETTER NYA
A89C ; [.299D.0020.0002] # SAURASHTRA LETTER TTA
A89D ; [.299E.0020.0002] # SAURASHTRA LETTER TTHA
A89E ; [.299F.0020.0002] # SAURASHTRA LETTER DDA
A89F ; [.29A0.0020.0002] # SAURASHTRA LETTER DDHA
A8A0 ; [.29A1.0020.0002] # SAURASHTRA LETTER NNA
A8A1 ; [.29A2.0020.0002] # SAURASHTRA LETTER TA
A8A2 ; [.29A3.0020.0002] # SAURASHTRA LETTER THA
A8A3 ; [.29A4.0020.0002] # SAURASHTRA LETTER DA
A8A4 ; [.29A5.0020.0002] # SAURASHTRA LETTER DHA
A8A5 ; [.29A6.0020.0002] # SAURASHTRA LETTER NA
A8A6 ; [.29A7.0020.0002] # SAURASHTRA LETTER PA
A8A7 ; [.29A8.0020.0002] # SAURASHTRA LETTER PHA
A8A8 ; [.29A9.0020.0002] # SAURASHTRA LETTER BA
A8A9 ; [.29AA.0020.0002] # SAURASHTRA LETTER BHA
A8AA ; [.29AB.0020.0002] # SAURASHTRA LETTER MA
A8AB ; [.29AC.0020.0002] # SAURASHTRA LETTER YA
A8AC ; [.29AD.0020.0002] # SAURASHTRA LETTER RA
A8AD ; [.29AE.0020.0002] # SAURASHTRA LETTER LA
A8AE ; [.29AF.0020.0002] # SAURASHTRA LETTER VA
A8AF ; [.29B0.0020.0002] # SAURASHTRA LETTER SHA
A8B0 ; [.29B1.0020.0002] # SAURASHTRA LETTER SSA
A8B1 ; [.29B2.0020.0002] # SAURASHTRA LETTER SA
A8B2 ; [.29B3.0020.0002] # SAURASHTRA LETTER HA
A8B3 ; [.29B4.0020.0002] # SAURASHTRA LETTER LLA
A8B4 ; [.29B5.0020.0002] # SAURASHTRA CONSONANT SIGN HAARU
A8B5 ; [.29B6.0020.0002] # SAURASHTRA VOWEL SIGN AA
A8B6 ; [.29B7.0020.0002] # SAURASHTRA VOWEL SIGN I
A8B7 ; [.29B8.0020.0002] # SAURASHTRA VOWEL SIGN II
A8B8 ; [.29B9.0020.0002] # SAURASHTRA VOWEL SIGN U
A8B9 ; [.29BA.0020.0002] # SAURASHTRA VOWEL SIGN UU
A8BA ; [.29BB.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC R
A8BB ; [.29BC.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC RR
A8BC ; [.29BD.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC L
A8BD ; [.29BE.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC LL
A8BE ; [.29BF.0020.0002] # SAURASHTRA VOWEL SIGN E
A8BF ; [.29C0.0020.0002] # SAURASHTRA VOWEL SIGN EE
A8C0 ; [.29C1.0020.0002] # SAURASHTRA VOWEL SIGN AI
A8C1 ; [.29C2.0020.0002] # SAURASHTRA VOWEL SIGN O
A8C2 ; [.29C3.0020.0002] # SAURASHTRA VOWEL SIGN OO
A8C3 ; [.29C4.0020.0002] # SAURASHTRA VOWEL SIGN AU
A8C4 ; [.29C5.0020.0002] # SAURASHTRA SIGN VIRAMA
11083 ; [.29C6.0020.0002] # KAITHI LETTER A
11084 ; [.29C7.0020.0002] # KAITHI LETTER AA
11085 ; [.29C8.0020.0002] # KAITHI LETTER I
11086 ; [.29C9.0020.0002] # KAITHI LETTER II
11087 ; [.29CA.0020.0002] # KAITHI LETTER U
11088 ; [.29CB.0020.0002] # KAITHI LETTER UU
11089 ; [.29CC.0020.0002] # KAITHI LETTER E
1108A ; [.29CD.0020.0002] # KAITHI LETTER AI
1108B ; [.29CE.0020.0002] # KAITHI LETTER O
1108C ; [.29CF.0020.0002] # KAITHI LETTER AU
1108D ; [.29D0.0020.0002] # KAITHI LETTER KA
1108E ; [.29D1.0020.0002] # KAITHI LETTER KHA
1108F ; [.29D2.0020.0002] # KAITHI LETTER GA
11090 ; [.29D3.0020.0002] # KAITHI LETTER GHA
11091 ; [.29D4.0020.0002] # KAITHI LETTER NGA
11092 ; [.29D5.0020.0002] # KAITHI LETTER CA
11093 ; [.29D6.0020.0002] # KAITHI LETTER CHA
11094 ; [.29D7.0020.0002] # KAITHI LETTER JA
11095 ; [.29D8.0020.0002] # KAITHI LETTER JHA
11096 ; [.29D9.0020.0002] # KAITHI LETTER NYA
11097 ; [.29DA.0020.0002] # KAITHI LETTER TTA
11098 ; [.29DB.0020.0002] # KAITHI LETTER TTHA
11099 ; [.29DC.0020.0002] # KAITHI LETTER DDA
1109A ; [.29DC.0020.0002][.0000.00C2.0002] # KAITHI LETTER DDDHA
1109B ; [.29DD.0020.0002] # KAITHI LETTER DDHA
1109C ; [.29DD.0020.0002][.0000.00C2.0002] # KAITHI LETTER RHA
1109D ; [.29DE.0020.0002] # KAITHI LETTER NNA
1109E ; [.29DF.0020.0002] # KAITHI LETTER TA
1109F ; [.29E0.0020.0002] # KAITHI LETTER THA
110A0 ; [.29E1.0020.0002] # KAITHI LETTER DA
110A1 ; [.29E2.0020.0002] # KAITHI LETTER DHA
110A2 ; [.29E3.0020.0002] # KAITHI LETTER NA
110A3 ; [.29E4.0020.0002] # KAITHI LETTER PA
110A4 ; [.29E5.0020.0002] # KAITHI LETTER PHA
110A5 ; [.29E6.0020.0002] # KAITHI LETTER BA
110AB ; [.29E6.0020.0002][.0000.00C2.0002] # KAITHI LETTER VA
110A6 ; [.29E7.0020.0002] # KAITHI LETTER BHA
110A7 ; [.29E8.0020.0002] # KAITHI LETTER MA
110A8 ; [.29E9.0020.0002] # KAITHI LETTER YA
110A9 ; [.29EA.0020.0002] # KAITHI LETTER RA
110AA ; [.29EB.0020.0002] # KAITHI LETTER LA
110AC ; [.29EC.0020.0002] # KAITHI LETTER SHA
110AD ; [.29ED.0020.0002] # KAITHI LETTER SSA
110AE ; [.29EE.0020.0002] # KAITHI LETTER SA
110AF ; [.29EF.0020.0002] # KAITHI LETTER HA
110B0 ; [.29F0.0020.0002] # KAITHI VOWEL SIGN AA
110B1 ; [.29F1.0020.0002] # KAITHI VOWEL SIGN I
110B2 ; [.29F2.0020.0002] # KAITHI VOWEL SIGN II
110B3 ; [.29F3.0020.0002] # KAITHI VOWEL SIGN U
110B4 ; [.29F4.0020.0002] # KAITHI VOWEL SIGN UU
110B5 ; [.29F5.0020.0002] # KAITHI VOWEL SIGN E
110B6 ; [.29F6.0020.0002] # KAITHI VOWEL SIGN AI
110B7 ; [.29F7.0020.0002] # KAITHI VOWEL SIGN O
110B8 ; [.29F8.0020.0002] # KAITHI VOWEL SIGN AU
110B9 ; [.29F9.0020.0002] # KAITHI SIGN VIRAMA
11150 ; [.29FA.0020.0002] # MAHAJANI LETTER A
11151 ; [.29FB.0020.0002] # MAHAJANI LETTER I
11152 ; [.29FC.0020.0002] # MAHAJANI LETTER U
11153 ; [.29FD.0020.0002] # MAHAJANI LETTER E
11154 ; [.29FE.0020.0002] # MAHAJANI LETTER O
11155 ; [.29FF.0020.0002] # MAHAJANI LETTER KA
11156 ; [.2A00.0020.0002] # MAHAJANI LETTER KHA
11157 ; [.2A01.0020.0002] # MAHAJANI LETTER GA
11158 ; [.2A02.0020.0002] # MAHAJANI LETTER GHA
11159 ; [.2A03.0020.0002] # MAHAJANI LETTER CA
1115A ; [.2A04.0020.0002] # MAHAJANI LETTER CHA
1115B ; [.2A05.0020.0002] # MAHAJANI LETTER JA
1115C ; [.2A06.0020.0002] # MAHAJANI LETTER JHA
1115D ; [.2A07.0020.0002] # MAHAJANI LETTER NYA
1115E ; [.2A08.0020.0002] # MAHAJANI LETTER TTA
1115F ; [.2A09.0020.0002] # MAHAJANI LETTER TTHA
11160 ; [.2A0A.0020.0002] # MAHAJANI LETTER DDA
11161 ; [.2A0B.0020.0002] # MAHAJANI LETTER DDHA
11162 ; [.2A0C.0020.0002] # MAHAJANI LETTER NNA
11163 ; [.2A0D.0020.0002] # MAHAJANI LETTER TA
11164 ; [.2A0E.0020.0002] # MAHAJANI LETTER THA
11165 ; [.2A0F.0020.0002] # MAHAJANI LETTER DA
11166 ; [.2A10.0020.0002] # MAHAJANI LETTER DHA
11167 ; [.2A11.0020.0002] # MAHAJANI LETTER NA
11168 ; [.2A12.0020.0002] # MAHAJANI LETTER PA
11169 ; [.2A13.0020.0002] # MAHAJANI LETTER PHA
1116A ; [.2A14.0020.0002] # MAHAJANI LETTER BA
1116B ; [.2A15.0020.0002] # MAHAJANI LETTER BHA
1116C ; [.2A16.0020.0002] # MAHAJANI LETTER MA
1116D ; [.2A17.0020.0002] # MAHAJANI LETTER RA
1116E ; [.2A18.0020.0002] # MAHAJANI LETTER LA
1116F ; [.2A19.0020.0002] # MAHAJANI LETTER VA
11176 ; [.2A1A.0020.0002] # MAHAJANI LIGATURE SHRI
11170 ; [.2A1B.0020.0002] # MAHAJANI LETTER SA
11171 ; [.2A1C.0020.0002] # MAHAJANI LETTER HA
11172 ; [.2A1D.0020.0002] # MAHAJANI LETTER RRA
111C4 ; [.2A1E.0020.0002] # SHARADA OM
111DA ; [.2A1F.0020.0002] # SHARADA EKAM
11183 ; [.2A20.0020.0002] # SHARADA LETTER A
11184 ; [.2A21.0020.0002] # SHARADA LETTER AA
11185 ; [.2A22.0020.0002] # SHARADA LETTER I
11186 ; [.2A23.0020.0002] # SHARADA LETTER II
11187 ; [.2A24.0020.0002] # SHARADA LETTER U
11188 ; [.2A25.0020.0002] # SHARADA LETTER UU
11189 ; [.2A26.0020.0002] # SHARADA LETTER VOCALIC R
1118A ; [.2A27.0020.0002] # SHARADA LETTER VOCALIC RR
1118B ; [.2A28.0020.0002] # SHARADA LETTER VOCALIC L
1118C ; [.2A29.0020.0002] # SHARADA LETTER VOCALIC LL
1118D ; [.2A2A.0020.0002] # SHARADA LETTER E
1118E ; [.2A2B.0020.0002] # SHARADA LETTER AI
1118F ; [.2A2C.0020.0002] # SHARADA LETTER O
11190 ; [.2A2D.0020.0002] # SHARADA LETTER AU
11191 ; [.2A2E.0020.0002] # SHARADA LETTER KA
11192 ; [.2A2F.0020.0002] # SHARADA LETTER KHA
11193 ; [.2A30.0020.0002] # SHARADA LETTER GA
11194 ; [.2A31.0020.0002] # SHARADA LETTER GHA
11195 ; [.2A32.0020.0002] # SHARADA LETTER NGA
11196 ; [.2A33.0020.0002] # SHARADA LETTER CA
11197 ; [.2A34.0020.0002] # SHARADA LETTER CHA
11198 ; [.2A35.0020.0002] # SHARADA LETTER JA
11199 ; [.2A36.0020.0002] # SHARADA LETTER JHA
1119A ; [.2A37.0020.0002] # SHARADA LETTER NYA
1119B ; [.2A38.0020.0002] # SHARADA LETTER TTA
1119C ; [.2A39.0020.0002] # SHARADA LETTER TTHA
1119D ; [.2A3A.0020.0002] # SHARADA LETTER DDA
1119E ; [.2A3B.0020.0002] # SHARADA LETTER DDHA
1119F ; [.2A3C.0020.0002] # SHARADA LETTER NNA
111A0 ; [.2A3D.0020.0002] # SHARADA LETTER TA
111A1 ; [.2A3E.0020.0002] # SHARADA LETTER THA
111A2 ; [.2A3F.0020.0002] # SHARADA LETTER DA
111A3 ; [.2A40.0020.0002] # SHARADA LETTER DHA
111A4 ; [.2A41.0020.0002] # SHARADA LETTER NA
111A5 ; [.2A42.0020.0002] # SHARADA LETTER PA
111A6 ; [.2A43.0020.0002] # SHARADA LETTER PHA
111A7 ; [.2A44.0020.0002] # SHARADA LETTER BA
111A8 ; [.2A45.0020.0002] # SHARADA LETTER BHA
111A9 ; [.2A46.0020.0002] # SHARADA LETTER MA
111AA ; [.2A47.0020.0002] # SHARADA LETTER YA
111AB ; [.2A48.0020.0002] # SHARADA LETTER RA
111AC ; [.2A49.0020.0002] # SHARADA LETTER LA
111AD ; [.2A4A.0020.0002] # SHARADA LETTER LLA
111AE ; [.2A4B.0020.0002] # SHARADA LETTER VA
111AF ; [.2A4C.0020.0002] # SHARADA LETTER SHA
111B0 ; [.2A4D.0020.0002] # SHARADA LETTER SSA
111B1 ; [.2A4E.0020.0002] # SHARADA LETTER SA
111B2 ; [.2A4F.0020.0002] # SHARADA LETTER HA
111C1 ; [.2A50.0020.0002] # SHARADA SIGN AVAGRAHA
111C2 ; [.2A51.0020.0002] # SHARADA SIGN JIHVAMULIYA
111C3 ; [.2A52.0020.0002] # SHARADA SIGN UPADHMANIYA
111DC ; [.2A53.0020.0002] # SHARADA HEADSTROKE
111B3 ; [.2A54.0020.0002] # SHARADA VOWEL SIGN AA
111B4 ; [.2A55.0020.0002] # SHARADA VOWEL SIGN I
111B5 ; [.2A56.0020.0002] # SHARADA VOWEL SIGN II
111B6 ; [.2A57.0020.0002] # SHARADA VOWEL SIGN U
111B7 ; [.2A58.0020.0002] # SHARADA VOWEL SIGN UU
111B8 ; [.2A59.0020.0002] # SHARADA VOWEL SIGN VOCALIC R
111B9 ; [.2A5A.0020.0002] # SHARADA VOWEL SIGN VOCALIC RR
111BA ; [.2A5B.0020.0002] # SHARADA VOWEL SIGN VOCALIC L
111BB ; [.2A5C.0020.0002] # SHARADA VOWEL SIGN VOCALIC LL
111BC ; [.2A5D.0020.0002] # SHARADA VOWEL SIGN E
111BD ; [.2A5E.0020.0002] # SHARADA VOWEL SIGN AI
111BE ; [.2A5F.0020.0002] # SHARADA VOWEL SIGN O
111BF ; [.2A60.0020.0002] # SHARADA VOWEL SIGN AU
111C0 ; [.2A61.0020.0002] # SHARADA SIGN VIRAMA
11200 ; [.2A62.0020.0002] # KHOJKI LETTER A
11201 ; [.2A63.0020.0002] # KHOJKI LETTER AA
11202 ; [.2A64.0020.0002] # KHOJKI LETTER I
11203 ; [.2A65.0020.0002] # KHOJKI LETTER U
11204 ; [.2A66.0020.0002] # KHOJKI LETTER E
11205 ; [.2A67.0020.0002] # KHOJKI LETTER AI
11206 ; [.2A68.0020.0002] # KHOJKI LETTER O
11207 ; [.2A69.0020.0002] # KHOJKI LETTER AU
11208 ; [.2A6A.0020.0002] # KHOJKI LETTER KA
11209 ; [.2A6B.0020.0002] # KHOJKI LETTER KHA
1120A ; [.2A6C.0020.0002] # KHOJKI LETTER GA
1120B ; [.2A6D.0020.0002] # KHOJKI LETTER GGA
1120C ; [.2A6E.0020.0002] # KHOJKI LETTER GHA
1120D ; [.2A6F.0020.0002] # KHOJKI LETTER NGA
1120E ; [.2A70.0020.0002] # KHOJKI LETTER CA
1120F ; [.2A71.0020.0002] # KHOJKI LETTER CHA
11210 ; [.2A72.0020.0002] # KHOJKI LETTER JA
11211 ; [.2A73.0020.0002] # KHOJKI LETTER JJA
11213 ; [.2A74.0020.0002] # KHOJKI LETTER NYA
11214 ; [.2A75.0020.0002] # KHOJKI LETTER TTA
11215 ; [.2A76.0020.0002] # KHOJKI LETTER TTHA
11216 ; [.2A77.0020.0002] # KHOJKI LETTER DDA
11217 ; [.2A78.0020.0002] # KHOJKI LETTER DDHA
11218 ; [.2A79.0020.0002] # KHOJKI LETTER NNA
11219 ; [.2A7A.0020.0002] # KHOJKI LETTER TA
1121A ; [.2A7B.0020.0002] # KHOJKI LETTER THA
1121B ; [.2A7C.0020.0002] # KHOJKI LETTER DA
1121C ; [.2A7D.0020.0002] # KHOJKI LETTER DDDA
1121D ; [.2A7E.0020.0002] # KHOJKI LETTER DHA
1121E ; [.2A7F.0020.0002] # KHOJKI LETTER NA
1121F ; [.2A80.0020.0002] # KHOJKI LETTER PA
11220 ; [.2A81.0020.0002] # KHOJKI LETTER PHA
11221 ; [.2A82.0020.0002] # KHOJKI LETTER BA
11222 ; [.2A83.0020.0002] # KHOJKI LETTER BBA
11223 ; [.2A84.0020.0002] # KHOJKI LETTER BHA
11224 ; [.2A85.0020.0002] # KHOJKI LETTER MA
11225 ; [.2A86.0020.0002] # KHOJKI LETTER YA
11226 ; [.2A87.0020.0002] # KHOJKI LETTER RA
11227 ; [.2A88.0020.0002] # KHOJKI LETTER LA
11228 ; [.2A89.0020.0002] # KHOJKI LETTER VA
11229 ; [.2A8A.0020.0002] # KHOJKI LETTER SA
1122A ; [.2A8B.0020.0002] # KHOJKI LETTER HA
1122B ; [.2A8C.0020.0002] # KHOJKI LETTER LLA
1122C ; [.2A8D.0020.0002] # KHOJKI VOWEL SIGN AA
1122D ; [.2A8E.0020.0002] # KHOJKI VOWEL SIGN I
1122E ; [.2A8F.0020.0002] # KHOJKI VOWEL SIGN II
1122F ; [.2A90.0020.0002] # KHOJKI VOWEL SIGN U
11230 ; [.2A91.0020.0002] # KHOJKI VOWEL SIGN E
11231 ; [.2A92.0020.0002] # KHOJKI VOWEL SIGN AI
11232 ; [.2A93.0020.0002] # KHOJKI VOWEL SIGN O
11233 ; [.2A94.0020.0002] # KHOJKI VOWEL SIGN AU
11235 ; [.2A95.0020.0002] # KHOJKI SIGN VIRAMA
112B0 ; [.2A96.0020.0002] # KHUDAWADI LETTER A
112B1 ; [.2A97.0020.0002] # KHUDAWADI LETTER AA
112B2 ; [.2A98.0020.0002] # KHUDAWADI LETTER I
112B3 ; [.2A99.0020.0002] # KHUDAWADI LETTER II
112B4 ; [.2A9A.0020.0002] # KHUDAWADI LETTER U
112B5 ; [.2A9B.0020.0002] # KHUDAWADI LETTER UU
112B6 ; [.2A9C.0020.0002] # KHUDAWADI LETTER E
112B7 ; [.2A9D.0020.0002] # KHUDAWADI LETTER AI
112B8 ; [.2A9E.0020.0002] # KHUDAWADI LETTER O
112B9 ; [.2A9F.0020.0002] # KHUDAWADI LETTER AU
112BA ; [.2AA0.0020.0002] # KHUDAWADI LETTER KA
112BB ; [.2AA1.0020.0002] # KHUDAWADI LETTER KHA
112BC ; [.2AA2.0020.0002] # KHUDAWADI LETTER GA
112BD ; [.2AA3.0020.0002] # KHUDAWADI LETTER GGA
112BE ; [.2AA4.0020.0002] # KHUDAWADI LETTER GHA
112BF ; [.2AA5.0020.0002] # KHUDAWADI LETTER NGA
112C0 ; [.2AA6.0020.0002] # KHUDAWADI LETTER CA
112C1 ; [.2AA7.0020.0002] # KHUDAWADI LETTER CHA
112C2 ; [.2AA8.0020.0002] # KHUDAWADI LETTER JA
112C3 ; [.2AA9.0020.0002] # KHUDAWADI LETTER JJA
112C4 ; [.2AAA.0020.0002] # KHUDAWADI LETTER JHA
112C5 ; [.2AAB.0020.0002] # KHUDAWADI LETTER NYA
112C6 ; [.2AAC.0020.0002] # KHUDAWADI LETTER TTA
112C7 ; [.2AAD.0020.0002] # KHUDAWADI LETTER TTHA
112C8 ; [.2AAE.0020.0002] # KHUDAWADI LETTER DDA
112C9 ; [.2AAF.0020.0002] # KHUDAWADI LETTER DDDA
112CA ; [.2AB0.0020.0002] # KHUDAWADI LETTER RRA
112CB ; [.2AB1.0020.0002] # KHUDAWADI LETTER DDHA
112CC ; [.2AB2.0020.0002] # KHUDAWADI LETTER NNA
112CD ; [.2AB3.0020.0002] # KHUDAWADI LETTER TA
112CE ; [.2AB4.0020.0002] # KHUDAWADI LETTER THA
112CF ; [.2AB5.0020.0002] # KHUDAWADI LETTER DA
112D0 ; [.2AB6.0020.0002] # KHUDAWADI LETTER DHA
112D1 ; [.2AB7.0020.0002] # KHUDAWADI LETTER NA
112D2 ; [.2AB8.0020.0002] # KHUDAWADI LETTER PA
112D3 ; [.2AB9.0020.0002] # KHUDAWADI LETTER PHA
112D4 ; [.2ABA.0020.0002] # KHUDAWADI LETTER BA
112D5 ; [.2ABB.0020.0002] # KHUDAWADI LETTER BBA
112D6 ; [.2ABC.0020.0002] # KHUDAWADI LETTER BHA
112D7 ; [.2ABD.0020.0002] # KHUDAWADI LETTER MA
112D8 ; [.2ABE.0020.0002] # KHUDAWADI LETTER YA
112D9 ; [.2ABF.0020.0002] # KHUDAWADI LETTER RA
112DA ; [.2AC0.0020.0002] # KHUDAWADI LETTER LA
112DB ; [.2AC1.0020.0002] # KHUDAWADI LETTER VA
112DC ; [.2AC2.0020.0002] # KHUDAWADI LETTER SHA
112DD ; [.2AC3.0020.0002] # KHUDAWADI LETTER SA
112DE ; [.2AC4.0020.0002] # KHUDAWADI LETTER HA
112E0 ; [.2AC5.0020.0002] # KHUDAWADI VOWEL SIGN AA
112E1 ; [.2AC6.0020.0002] # KHUDAWADI VOWEL SIGN I
112E2 ; [.2AC7.0020.0002] # KHUDAWADI VOWEL SIGN II
112E3 ; [.2AC8.0020.0002] # KHUDAWADI VOWEL SIGN U
112E4 ; [.2AC9.0020.0002] # KHUDAWADI VOWEL SIGN UU
112E5 ; [.2ACA.0020.0002] # KHUDAWADI VOWEL SIGN E
112E6 ; [.2ACB.0020.0002] # KHUDAWADI VOWEL SIGN AI
112E7 ; [.2ACC.0020.0002] # KHUDAWADI VOWEL SIGN O
112E8 ; [.2ACD.0020.0002] # KHUDAWADI VOWEL SIGN AU
112EA ; [.2ACE.0020.0002] # KHUDAWADI SIGN VIRAMA
11280 ; [.2ACF.0020.0002] # MULTANI LETTER A
11281 ; [.2AD0.0020.0002] # MULTANI LETTER I
11282 ; [.2AD1.0020.0002] # MULTANI LETTER U
11283 ; [.2AD2.0020.0002] # MULTANI LETTER E
112A5 ; [.2AD3.0020.0002] # MULTANI LETTER SA
112A6 ; [.2AD4.0020.0002] # MULTANI LETTER HA
11284 ; [.2AD5.0020.0002] # MULTANI LETTER KA
11285 ; [.2AD6.0020.0002] # MULTANI LETTER KHA
11286 ; [.2AD7.0020.0002] # MULTANI LETTER GA
11288 ; [.2AD8.0020.0002] # MULTANI LETTER GHA
1128A ; [.2AD9.0020.0002] # MULTANI LETTER CA
1128B ; [.2ADA.0020.0002] # MULTANI LETTER CHA
1128C ; [.2ADB.0020.0002] # MULTANI LETTER JA
1128D ; [.2ADC.0020.0002] # MULTANI LETTER JJA
1128F ; [.2ADD.0020.0002] # MULTANI LETTER NYA
11290 ; [.2ADE.0020.0002] # MULTANI LETTER TTA
11291 ; [.2ADF.0020.0002] # MULTANI LETTER TTHA
11292 ; [.2AE0.0020.0002] # MULTANI LETTER DDA
11293 ; [.2AE1.0020.0002] # MULTANI LETTER DDDA
11294 ; [.2AE2.0020.0002] # MULTANI LETTER DDHA
11295 ; [.2AE3.0020.0002] # MULTANI LETTER NNA
11296 ; [.2AE4.0020.0002] # MULTANI LETTER TA
11297 ; [.2AE5.0020.0002] # MULTANI LETTER THA
11298 ; [.2AE6.0020.0002] # MULTANI LETTER DA
11299 ; [.2AE7.0020.0002] # MULTANI LETTER DHA
1129A ; [.2AE8.0020.0002] # MULTANI LETTER NA
1129B ; [.2AE9.0020.0002] # MULTANI LETTER PA
1129C ; [.2AEA.0020.0002] # MULTANI LETTER PHA
1129D ; [.2AEB.0020.0002] # MULTANI LETTER BA
1129F ; [.2AEC.0020.0002] # MULTANI LETTER BHA
112A0 ; [.2AED.0020.0002] # MULTANI LETTER MA
112A1 ; [.2AEE.0020.0002] # MULTANI LETTER YA
112A2 ; [.2AEF.0020.0002] # MULTANI LETTER RA
112A3 ; [.2AF0.0020.0002] # MULTANI LETTER LA
112A4 ; [.2AF1.0020.0002] # MULTANI LETTER VA
112A7 ; [.2AF2.0020.0002] # MULTANI LETTER RRA
112A8 ; [.2AF3.0020.0002] # MULTANI LETTER RHA
11350 ; [.2AF4.0020.0002] # GRANTHA OM
11305 ; [.2AF5.0020.0002] # GRANTHA LETTER A
11306 ; [.2AF6.0020.0002] # GRANTHA LETTER AA
11307 ; [.2AF7.0020.0002] # GRANTHA LETTER I
11308 ; [.2AF8.0020.0002] # GRANTHA LETTER II
11309 ; [.2AF9.0020.0002] # GRANTHA LETTER U
1130A ; [.2AFA.0020.0002] # GRANTHA LETTER UU
1130B ; [.2AFB.0020.0002] # GRANTHA LETTER VOCALIC R
11360 ; [.2AFC.0020.0002] # GRANTHA LETTER VOCALIC RR
1130C ; [.2AFD.0020.0002] # GRANTHA LETTER VOCALIC L
11361 ; [.2AFE.0020.0002] # GRANTHA LETTER VOCALIC LL
1130F ; [.2AFF.0020.0002] # GRANTHA LETTER EE
11310 ; [.2B00.0020.0002] # GRANTHA LETTER AI
11313 ; [.2B01.0020.0002] # GRANTHA LETTER OO
11314 ; [.2B02.0020.0002] # GRANTHA LETTER AU
11315 ; [.2B03.0020.0002] # GRANTHA LETTER KA
11316 ; [.2B04.0020.0002] # GRANTHA LETTER KHA
11317 ; [.2B05.0020.0002] # GRANTHA LETTER GA
11318 ; [.2B06.0020.0002] # GRANTHA LETTER GHA
11319 ; [.2B07.0020.0002] # GRANTHA LETTER NGA
1131A ; [.2B08.0020.0002] # GRANTHA LETTER CA
1131B ; [.2B09.0020.0002] # GRANTHA LETTER CHA
1131C ; [.2B0A.0020.0002] # GRANTHA LETTER JA
1131D ; [.2B0B.0020.0002] # GRANTHA LETTER JHA
1131E ; [.2B0C.0020.0002] # GRANTHA LETTER NYA
1131F ; [.2B0D.0020.0002] # GRANTHA LETTER TTA
11320 ; [.2B0E.0020.0002] # GRANTHA LETTER TTHA
11321 ; [.2B0F.0020.0002] # GRANTHA LETTER DDA
11322 ; [.2B10.0020.0002] # GRANTHA LETTER DDHA
11323 ; [.2B11.0020.0002] # GRANTHA LETTER NNA
11324 ; [.2B12.0020.0002] # GRANTHA LETTER TA
11325 ; [.2B13.0020.0002] # GRANTHA LETTER THA
11326 ; [.2B14.0020.0002] # GRANTHA LETTER DA
11327 ; [.2B15.0020.0002] # GRANTHA LETTER DHA
11328 ; [.2B16.0020.0002] # GRANTHA LETTER NA
1132A ; [.2B17.0020.0002] # GRANTHA LETTER PA
1132B ; [.2B18.0020.0002] # GRANTHA LETTER PHA
1132C ; [.2B19.0020.0002] # GRANTHA LETTER BA
1132D ; [.2B1A.0020.0002] # GRANTHA LETTER BHA
1132E ; [.2B1B.0020.0002] # GRANTHA LETTER MA
1132F ; [.2B1C.0020.0002] # GRANTHA LETTER YA
11330 ; [.2B1D.0020.0002] # GRANTHA LETTER RA
11332 ; [.2B1E.0020.0002] # GRANTHA LETTER LA
11333 ; [.2B1F.0020.0002] # GRANTHA LETTER LLA
11335 ; [.2B20.0020.0002] # GRANTHA LETTER VA
11336 ; [.2B21.0020.0002] # GRANTHA LETTER SHA
11337 ; [.2B22.0020.0002] # GRANTHA LETTER SSA
11338 ; [.2B23.0020.0002] # GRANTHA LETTER SA
11339 ; [.2B24.0020.0002] # GRANTHA LETTER HA
1133D ; [.2B25.0020.0002] # GRANTHA SIGN AVAGRAHA
1135E ; [.2B26.0020.0002] # GRANTHA LETTER VEDIC ANUSVARA
1135F ; [.2B27.0020.0002] # GRANTHA LETTER VEDIC DOUBLE ANUSVARA
1133E ; [.2B28.0020.0002] # GRANTHA VOWEL SIGN AA
1133F ; [.2B29.0020.0002] # GRANTHA VOWEL SIGN I
11340 ; [.2B2A.0020.0002] # GRANTHA VOWEL SIGN II
11341 ; [.2B2B.0020.0002] # GRANTHA VOWEL SIGN U
11342 ; [.2B2C.0020.0002] # GRANTHA VOWEL SIGN UU
11343 ; [.2B2D.0020.0002] # GRANTHA VOWEL SIGN VOCALIC R
11344 ; [.2B2E.0020.0002] # GRANTHA VOWEL SIGN VOCALIC RR
11362 ; [.2B2F.0020.0002] # GRANTHA VOWEL SIGN VOCALIC L
11363 ; [.2B30.0020.0002] # GRANTHA VOWEL SIGN VOCALIC LL
11347 ; [.2B31.0020.0002] # GRANTHA VOWEL SIGN EE
11348 ; [.2B32.0020.0002] # GRANTHA VOWEL SIGN AI
1134B ; [.2B33.0020.0002] # GRANTHA VOWEL SIGN OO
11347 1133E ; [.2B33.0020.0002] # GRANTHA VOWEL SIGN OO
1134C ; [.2B34.0020.0002] # GRANTHA VOWEL SIGN AU
11347 11357 ; [.2B34.0020.0002] # GRANTHA VOWEL SIGN AU
1134D ; [.2B35.0020.0002] # GRANTHA SIGN VIRAMA
11357 ; [.2B36.0020.0002] # GRANTHA AU LENGTH MARK
1135D ; [.2B37.0020.0002] # GRANTHA SIGN PLUTA
11449 ; [.2B38.0020.0002] # NEWA OM
1144A ; [.2B39.0020.0002] # NEWA SIDDHI
11400 ; [.2B3A.0020.0002] # NEWA LETTER A
11401 ; [.2B3B.0020.0002] # NEWA LETTER AA
11402 ; [.2B3C.0020.0002] # NEWA LETTER I
11403 ; [.2B3D.0020.0002] # NEWA LETTER II
11404 ; [.2B3E.0020.0002] # NEWA LETTER U
11405 ; [.2B3F.0020.0002] # NEWA LETTER UU
11406 ; [.2B40.0020.0002] # NEWA LETTER VOCALIC R
11407 ; [.2B41.0020.0002] # NEWA LETTER VOCALIC RR
11408 ; [.2B42.0020.0002] # NEWA LETTER VOCALIC L
11409 ; [.2B43.0020.0002] # NEWA LETTER VOCALIC LL
1140A ; [.2B44.0020.0002] # NEWA LETTER E
1140B ; [.2B45.0020.0002] # NEWA LETTER AI
1140C ; [.2B46.0020.0002] # NEWA LETTER O
1140D ; [.2B47.0020.0002] # NEWA LETTER AU
1140E ; [.2B48.0020.0002] # NEWA LETTER KA
1140F ; [.2B49.0020.0002] # NEWA LETTER KHA
11410 ; [.2B4A.0020.0002] # NEWA LETTER GA
11411 ; [.2B4B.0020.0002] # NEWA LETTER GHA
11412 ; [.2B4C.0020.0002] # NEWA LETTER NGA
11413 ; [.2B4D.0020.0002] # NEWA LETTER NGHA
11414 ; [.2B4E.0020.0002] # NEWA LETTER CA
11415 ; [.2B4F.0020.0002] # NEWA LETTER CHA
11416 ; [.2B50.0020.0002] # NEWA LETTER JA
11417 ; [.2B51.0020.0002] # NEWA LETTER JHA
11418 ; [.2B52.0020.0002] # NEWA LETTER NYA
11419 ; [.2B53.0020.0002] # NEWA LETTER NYHA
1141A ; [.2B54.0020.0002] # NEWA LETTER TTA
1141B ; [.2B55.0020.0002] # NEWA LETTER TTHA
1141C ; [.2B56.0020.0002] # NEWA LETTER DDA
1141D ; [.2B57.0020.0002] # NEWA LETTER DDHA
1141E ; [.2B58.0020.0002] # NEWA LETTER NNA
1141F ; [.2B59.0020.0002] # NEWA LETTER TA
11420 ; [.2B5A.0020.0002] # NEWA LETTER THA
11421 ; [.2B5B.0020.0002] # NEWA LETTER DA
11422 ; [.2B5C.0020.0002] # NEWA LETTER DHA
11423 ; [.2B5D.0020.0002] # NEWA LETTER NA
11424 ; [.2B5E.0020.0002] # NEWA LETTER NHA
11425 ; [.2B5F.0020.0002] # NEWA LETTER PA
11426 ; [.2B60.0020.0002] # NEWA LETTER PHA
11427 ; [.2B61.0020.0002] # NEWA LETTER BA
11428 ; [.2B62.0020.0002] # NEWA LETTER BHA
11429 ; [.2B63.0020.0002] # NEWA LETTER MA
1142A ; [.2B64.0020.0002] # NEWA LETTER MHA
1142B ; [.2B65.0020.0002] # NEWA LETTER YA
1142C ; [.2B66.0020.0002] # NEWA LETTER RA
1142D ; [.2B67.0020.0002] # NEWA LETTER RHA
1142E ; [.2B68.0020.0002] # NEWA LETTER LA
1142F ; [.2B69.0020.0002] # NEWA LETTER LHA
11430 ; [.2B6A.0020.0002] # NEWA LETTER WA
11431 ; [.2B6B.0020.0002] # NEWA LETTER SHA
11432 ; [.2B6C.0020.0002] # NEWA LETTER SSA
11433 ; [.2B6D.0020.0002] # NEWA LETTER SA
11434 ; [.2B6E.0020.0002] # NEWA LETTER HA
11447 ; [.2B6F.0020.0002] # NEWA SIGN AVAGRAHA
11448 ; [.2B70.0020.0002] # NEWA SIGN FINAL ANUSVARA
11435 ; [.2B71.0020.0002] # NEWA VOWEL SIGN AA
11436 ; [.2B72.0020.0002] # NEWA VOWEL SIGN I
11437 ; [.2B73.0020.0002] # NEWA VOWEL SIGN II
11438 ; [.2B74.0020.0002] # NEWA VOWEL SIGN U
11439 ; [.2B75.0020.0002] # NEWA VOWEL SIGN UU
1143A ; [.2B76.0020.0002] # NEWA VOWEL SIGN VOCALIC R
1143B ; [.2B77.0020.0002] # NEWA VOWEL SIGN VOCALIC RR
1143C ; [.2B78.0020.0002] # NEWA VOWEL SIGN VOCALIC L
1143D ; [.2B79.0020.0002] # NEWA VOWEL SIGN VOCALIC LL
1143E ; [.2B7A.0020.0002] # NEWA VOWEL SIGN E
1143F ; [.2B7B.0020.0002] # NEWA VOWEL SIGN AI
11440 ; [.2B7C.0020.0002] # NEWA VOWEL SIGN O
11441 ; [.2B7D.0020.0002] # NEWA VOWEL SIGN AU
11442 ; [.2B7E.0020.0002] # NEWA SIGN VIRAMA
114C7 ; [.2B7F.0020.0002] # TIRHUTA OM
11480 ; [.2B80.0020.0002] # TIRHUTA ANJI
11481 ; [.2B81.0020.0002] # TIRHUTA LETTER A
11482 ; [.2B82.0020.0002] # TIRHUTA LETTER AA
11483 ; [.2B83.0020.0002] # TIRHUTA LETTER I
11484 ; [.2B84.0020.0002] # TIRHUTA LETTER II
11485 ; [.2B85.0020.0002] # TIRHUTA LETTER U
11486 ; [.2B86.0020.0002] # TIRHUTA LETTER UU
11487 ; [.2B87.0020.0002] # TIRHUTA LETTER VOCALIC R
11488 ; [.2B88.0020.0002] # TIRHUTA LETTER VOCALIC RR
11489 ; [.2B89.0020.0002] # TIRHUTA LETTER VOCALIC L
1148A ; [.2B8A.0020.0002] # TIRHUTA LETTER VOCALIC LL
1148B ; [.2B8B.0020.0002] # TIRHUTA LETTER E
1148C ; [.2B8C.0020.0002] # TIRHUTA LETTER AI
1148D ; [.2B8D.0020.0002] # TIRHUTA LETTER O
1148E ; [.2B8E.0020.0002] # TIRHUTA LETTER AU
1148F ; [.2B8F.0020.0002] # TIRHUTA LETTER KA
11490 ; [.2B90.0020.0002] # TIRHUTA LETTER KHA
11491 ; [.2B91.0020.0002] # TIRHUTA LETTER GA
11492 ; [.2B92.0020.0002] # TIRHUTA LETTER GHA
11493 ; [.2B93.0020.0002] # TIRHUTA LETTER NGA
11494 ; [.2B94.0020.0002] # TIRHUTA LETTER CA
11495 ; [.2B95.0020.0002] # TIRHUTA LETTER CHA
11496 ; [.2B96.0020.0002] # TIRHUTA LETTER JA
11497 ; [.2B97.0020.0002] # TIRHUTA LETTER JHA
11498 ; [.2B98.0020.0002] # TIRHUTA LETTER NYA
11499 ; [.2B99.0020.0002] # TIRHUTA LETTER TTA
1149A ; [.2B9A.0020.0002] # TIRHUTA LETTER TTHA
1149B ; [.2B9B.0020.0002] # TIRHUTA LETTER DDA
1149C ; [.2B9C.0020.0002] # TIRHUTA LETTER DDHA
1149D ; [.2B9D.0020.0002] # TIRHUTA LETTER NNA
1149E ; [.2B9E.0020.0002] # TIRHUTA LETTER TA
1149F ; [.2B9F.0020.0002] # TIRHUTA LETTER THA
114A0 ; [.2BA0.0020.0002] # TIRHUTA LETTER DA
114A1 ; [.2BA1.0020.0002] # TIRHUTA LETTER DHA
114A2 ; [.2BA2.0020.0002] # TIRHUTA LETTER NA
114A3 ; [.2BA3.0020.0002] # TIRHUTA LETTER PA
114A4 ; [.2BA4.0020.0002] # TIRHUTA LETTER PHA
114A5 ; [.2BA5.0020.0002] # TIRHUTA LETTER BA
114A6 ; [.2BA6.0020.0002] # TIRHUTA LETTER BHA
114A7 ; [.2BA7.0020.0002] # TIRHUTA LETTER MA
114A8 ; [.2BA8.0020.0002] # TIRHUTA LETTER YA
114A9 ; [.2BA9.0020.0002] # TIRHUTA LETTER RA
114AA ; [.2BAA.0020.0002] # TIRHUTA LETTER LA
114AB ; [.2BAB.0020.0002] # TIRHUTA LETTER VA
114AC ; [.2BAC.0020.0002] # TIRHUTA LETTER SHA
114AD ; [.2BAD.0020.0002] # TIRHUTA LETTER SSA
114AE ; [.2BAE.0020.0002] # TIRHUTA LETTER SA
114AF ; [.2BAF.0020.0002] # TIRHUTA LETTER HA
114C4 ; [.2BB0.0020.0002] # TIRHUTA SIGN AVAGRAHA
114C5 ; [.2BB1.0020.0002] # TIRHUTA GVANG
114B0 ; [.2BB2.0020.0002] # TIRHUTA VOWEL SIGN AA
114B1 ; [.2BB3.0020.0002] # TIRHUTA VOWEL SIGN I
114B2 ; [.2BB4.0020.0002] # TIRHUTA VOWEL SIGN II
114B3 ; [.2BB5.0020.0002] # TIRHUTA VOWEL SIGN U
114B4 ; [.2BB6.0020.0002] # TIRHUTA VOWEL SIGN UU
114B5 ; [.2BB7.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC R
114B6 ; [.2BB8.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC RR
114B7 ; [.2BB9.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC L
114B8 ; [.2BBA.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC LL
114B9 ; [.2BBB.0020.0002] # TIRHUTA VOWEL SIGN E
114BA ; [.2BBC.0020.0002] # TIRHUTA VOWEL SIGN SHORT E
114BB ; [.2BBD.0020.0002] # TIRHUTA VOWEL SIGN AI
114B9 114BA ; [.2BBD.0020.0002] # TIRHUTA VOWEL SIGN AI
114BC ; [.2BBE.0020.0002] # TIRHUTA VOWEL SIGN O
114B9 114B0 ; [.2BBE.0020.0002] # TIRHUTA VOWEL SIGN O
114BD ; [.2BBF.0020.0002] # TIRHUTA VOWEL SIGN SHORT O
114BE ; [.2BC0.0020.0002] # TIRHUTA VOWEL SIGN AU
114B9 114BD ; [.2BC0.0020.0002] # TIRHUTA VOWEL SIGN AU
114C2 ; [.2BC1.0020.0002] # TIRHUTA SIGN VIRAMA
11580 ; [.2BC2.0020.0002] # SIDDHAM LETTER A
11581 ; [.2BC3.0020.0002] # SIDDHAM LETTER AA
11582 ; [.2BC4.0020.0002] # SIDDHAM LETTER I
115D8 ; [.2BC4.0020.0004][.0000.0110.0004] # SIDDHAM LETTER THREE-CIRCLE ALTERNATE I
115D9 ; [.2BC4.0020.0004][.0000.0111.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE I
11583 ; [.2BC5.0020.0002] # SIDDHAM LETTER II
115DA ; [.2BC5.0020.0004][.0000.0110.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE II
11584 ; [.2BC6.0020.0002] # SIDDHAM LETTER U
115DB ; [.2BC6.0020.0004][.0000.0110.0004] # SIDDHAM LETTER ALTERNATE U
11585 ; [.2BC7.0020.0002] # SIDDHAM LETTER UU
11586 ; [.2BC8.0020.0002] # SIDDHAM LETTER VOCALIC R
11587 ; [.2BC9.0020.0002] # SIDDHAM LETTER VOCALIC RR
11588 ; [.2BCA.0020.0002] # SIDDHAM LETTER VOCALIC L
11589 ; [.2BCB.0020.0002] # SIDDHAM LETTER VOCALIC LL
1158A ; [.2BCC.0020.0002] # SIDDHAM LETTER E
1158B ; [.2BCD.0020.0002] # SIDDHAM LETTER AI
1158C ; [.2BCE.0020.0002] # SIDDHAM LETTER O
1158D ; [.2BCF.0020.0002] # SIDDHAM LETTER AU
1158E ; [.2BD0.0020.0002] # SIDDHAM LETTER KA
1158F ; [.2BD1.0020.0002] # SIDDHAM LETTER KHA
11590 ; [.2BD2.0020.0002] # SIDDHAM LETTER GA
11591 ; [.2BD3.0020.0002] # SIDDHAM LETTER GHA
11592 ; [.2BD4.0020.0002] # SIDDHAM LETTER NGA
11593 ; [.2BD5.0020.0002] # SIDDHAM LETTER CA
11594 ; [.2BD6.0020.0002] # SIDDHAM LETTER CHA
11595 ; [.2BD7.0020.0002] # SIDDHAM LETTER JA
11596 ; [.2BD8.0020.0002] # SIDDHAM LETTER JHA
11597 ; [.2BD9.0020.0002] # SIDDHAM LETTER NYA
11598 ; [.2BDA.0020.0002] # SIDDHAM LETTER TTA
11599 ; [.2BDB.0020.0002] # SIDDHAM LETTER TTHA
1159A ; [.2BDC.0020.0002] # SIDDHAM LETTER DDA
1159B ; [.2BDD.0020.0002] # SIDDHAM LETTER DDHA
1159C ; [.2BDE.0020.0002] # SIDDHAM LETTER NNA
1159D ; [.2BDF.0020.0002] # SIDDHAM LETTER TA
1159E ; [.2BE0.0020.0002] # SIDDHAM LETTER THA
1159F ; [.2BE1.0020.0002] # SIDDHAM LETTER DA
115A0 ; [.2BE2.0020.0002] # SIDDHAM LETTER DHA
115A1 ; [.2BE3.0020.0002] # SIDDHAM LETTER NA
115A2 ; [.2BE4.0020.0002] # SIDDHAM LETTER PA
115A3 ; [.2BE5.0020.0002] # SIDDHAM LETTER PHA
115A4 ; [.2BE6.0020.0002] # SIDDHAM LETTER BA
115A5 ; [.2BE7.0020.0002] # SIDDHAM LETTER BHA
115A6 ; [.2BE8.0020.0002] # SIDDHAM LETTER MA
115A7 ; [.2BE9.0020.0002] # SIDDHAM LETTER YA
115A8 ; [.2BEA.0020.0002] # SIDDHAM LETTER RA
115A9 ; [.2BEB.0020.0002] # SIDDHAM LETTER LA
115AA ; [.2BEC.0020.0002] # SIDDHAM LETTER VA
115AB ; [.2BED.0020.0002] # SIDDHAM LETTER SHA
115AC ; [.2BEE.0020.0002] # SIDDHAM LETTER SSA
115AD ; [.2BEF.0020.0002] # SIDDHAM LETTER SA
115AE ; [.2BF0.0020.0002] # SIDDHAM LETTER HA
115AF ; [.2BF1.0020.0002] # SIDDHAM VOWEL SIGN AA
115B0 ; [.2BF2.0020.0002] # SIDDHAM VOWEL SIGN I
115B1 ; [.2BF3.0020.0002] # SIDDHAM VOWEL SIGN II
115B2 ; [.2BF4.0020.0002] # SIDDHAM VOWEL SIGN U
115DC ; [.2BF4.0020.0004][.0000.0110.0004] # SIDDHAM VOWEL SIGN ALTERNATE U
115B3 ; [.2BF5.0020.0002] # SIDDHAM VOWEL SIGN UU
115DD ; [.2BF5.0020.0004][.0000.0110.0004] # SIDDHAM VOWEL SIGN ALTERNATE UU
115B4 ; [.2BF6.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC R
115B5 ; [.2BF7.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC RR
115B8 ; [.2BF8.0020.0002] # SIDDHAM VOWEL SIGN E
115B9 ; [.2BF9.0020.0002] # SIDDHAM VOWEL SIGN AI
115BA ; [.2BFA.0020.0002] # SIDDHAM VOWEL SIGN O
115B8 115AF ; [.2BFA.0020.0002] # SIDDHAM VOWEL SIGN O
115BB ; [.2BFB.0020.0002] # SIDDHAM VOWEL SIGN AU
115B9 115AF ; [.2BFB.0020.0002] # SIDDHAM VOWEL SIGN AU
115BF ; [.2BFC.0020.0002] # SIDDHAM SIGN VIRAMA
11600 ; [.2BFD.0020.0002] # MODI LETTER A
11601 ; [.2BFE.0020.0002] # MODI LETTER AA
11602 ; [.2BFF.0020.0002] # MODI LETTER I
11603 ; [.2C00.0020.0002] # MODI LETTER II
11604 ; [.2C01.0020.0002] # MODI LETTER U
11605 ; [.2C02.0020.0002] # MODI LETTER UU
11606 ; [.2C03.0020.0002] # MODI LETTER VOCALIC R
11607 ; [.2C04.0020.0002] # MODI LETTER VOCALIC RR
11608 ; [.2C05.0020.0002] # MODI LETTER VOCALIC L
11609 ; [.2C06.0020.0002] # MODI LETTER VOCALIC LL
1160A ; [.2C07.0020.0002] # MODI LETTER E
1160B ; [.2C08.0020.0002] # MODI LETTER AI
1160C ; [.2C09.0020.0002] # MODI LETTER O
1160D ; [.2C0A.0020.0002] # MODI LETTER AU
1160E ; [.2C0B.0020.0002] # MODI LETTER KA
1160F ; [.2C0C.0020.0002] # MODI LETTER KHA
11610 ; [.2C0D.0020.0002] # MODI LETTER GA
11611 ; [.2C0E.0020.0002] # MODI LETTER GHA
11612 ; [.2C0F.0020.0002] # MODI LETTER NGA
11613 ; [.2C10.0020.0002] # MODI LETTER CA
11614 ; [.2C11.0020.0002] # MODI LETTER CHA
11615 ; [.2C12.0020.0002] # MODI LETTER JA
11616 ; [.2C13.0020.0002] # MODI LETTER JHA
11617 ; [.2C14.0020.0002] # MODI LETTER NYA
11618 ; [.2C15.0020.0002] # MODI LETTER TTA
11619 ; [.2C16.0020.0002] # MODI LETTER TTHA
1161A ; [.2C17.0020.0002] # MODI LETTER DDA
1161B ; [.2C18.0020.0002] # MODI LETTER DDHA
1161C ; [.2C19.0020.0002] # MODI LETTER NNA
1161D ; [.2C1A.0020.0002] # MODI LETTER TA
1161E ; [.2C1B.0020.0002] # MODI LETTER THA
1161F ; [.2C1C.0020.0002] # MODI LETTER DA
11620 ; [.2C1D.0020.0002] # MODI LETTER DHA
11621 ; [.2C1E.0020.0002] # MODI LETTER NA
11622 ; [.2C1F.0020.0002] # MODI LETTER PA
11623 ; [.2C20.0020.0002] # MODI LETTER PHA
11624 ; [.2C21.0020.0002] # MODI LETTER BA
11625 ; [.2C22.0020.0002] # MODI LETTER BHA
11626 ; [.2C23.0020.0002] # MODI LETTER MA
11627 ; [.2C24.0020.0002] # MODI LETTER YA
11628 ; [.2C25.0020.0002] # MODI LETTER RA
11629 ; [.2C26.0020.0002] # MODI LETTER LA
1162A ; [.2C27.0020.0002] # MODI LETTER VA
1162B ; [.2C28.0020.0002] # MODI LETTER SHA
1162C ; [.2C29.0020.0002] # MODI LETTER SSA
1162D ; [.2C2A.0020.0002] # MODI LETTER SA
1162E ; [.2C2B.0020.0002] # MODI LETTER HA
1162F ; [.2C2C.0020.0002] # MODI LETTER LLA
11630 ; [.2C2D.0020.0002] # MODI VOWEL SIGN AA
11631 ; [.2C2E.0020.0002] # MODI VOWEL SIGN I
11632 ; [.2C2F.0020.0002] # MODI VOWEL SIGN II
11633 ; [.2C30.0020.0002] # MODI VOWEL SIGN U
11634 ; [.2C31.0020.0002] # MODI VOWEL SIGN UU
11635 ; [.2C32.0020.0002] # MODI VOWEL SIGN VOCALIC R
11636 ; [.2C33.0020.0002] # MODI VOWEL SIGN VOCALIC RR
11637 ; [.2C34.0020.0002] # MODI VOWEL SIGN VOCALIC L
11638 ; [.2C35.0020.0002] # MODI VOWEL SIGN VOCALIC LL
11639 ; [.2C36.0020.0002] # MODI VOWEL SIGN E
1163A ; [.2C37.0020.0002] # MODI VOWEL SIGN AI
1163B ; [.2C38.0020.0002] # MODI VOWEL SIGN O
1163C ; [.2C39.0020.0002] # MODI VOWEL SIGN AU
1163F ; [.2C3A.0020.0002] # MODI SIGN VIRAMA
11644 ; [.2C3B.0020.0002] # MODI SIGN HUVA
11680 ; [.2C3C.0020.0002] # TAKRI LETTER A
11681 ; [.2C3D.0020.0002] # TAKRI LETTER AA
11682 ; [.2C3E.0020.0002] # TAKRI LETTER I
11683 ; [.2C3F.0020.0002] # TAKRI LETTER II
11684 ; [.2C40.0020.0002] # TAKRI LETTER U
11685 ; [.2C41.0020.0002] # TAKRI LETTER UU
11686 ; [.2C42.0020.0002] # TAKRI LETTER E
11687 ; [.2C43.0020.0002] # TAKRI LETTER AI
11688 ; [.2C44.0020.0002] # TAKRI LETTER O
11689 ; [.2C45.0020.0002] # TAKRI LETTER AU
116A8 ; [.2C46.0020.0002] # TAKRI LETTER SA
116A7 ; [.2C47.0020.0002] # TAKRI LETTER SHA
116A9 ; [.2C48.0020.0002] # TAKRI LETTER HA
1168A ; [.2C49.0020.0002] # TAKRI LETTER KA
1168B ; [.2C4A.0020.0002] # TAKRI LETTER KHA
1168C ; [.2C4B.0020.0002] # TAKRI LETTER GA
1168D ; [.2C4C.0020.0002] # TAKRI LETTER GHA
1168E ; [.2C4D.0020.0002] # TAKRI LETTER NGA
1168F ; [.2C4E.0020.0002] # TAKRI LETTER CA
11690 ; [.2C4F.0020.0002] # TAKRI LETTER CHA
11691 ; [.2C50.0020.0002] # TAKRI LETTER JA
11692 ; [.2C51.0020.0002] # TAKRI LETTER JHA
11693 ; [.2C52.0020.0002] # TAKRI LETTER NYA
11694 ; [.2C53.0020.0002] # TAKRI LETTER TTA
11695 ; [.2C54.0020.0002] # TAKRI LETTER TTHA
11696 ; [.2C55.0020.0002] # TAKRI LETTER DDA
11697 ; [.2C56.0020.0002] # TAKRI LETTER DDHA
11698 ; [.2C57.0020.0002] # TAKRI LETTER NNA
11699 ; [.2C58.0020.0002] # TAKRI LETTER TA
1169A ; [.2C59.0020.0002] # TAKRI LETTER THA
1169B ; [.2C5A.0020.0002] # TAKRI LETTER DA
1169C ; [.2C5B.0020.0002] # TAKRI LETTER DHA
1169D ; [.2C5C.0020.0002] # TAKRI LETTER NA
1169E ; [.2C5D.0020.0002] # TAKRI LETTER PA
1169F ; [.2C5E.0020.0002] # TAKRI LETTER PHA
116A0 ; [.2C5F.0020.0002] # TAKRI LETTER BA
116A1 ; [.2C60.0020.0002] # TAKRI LETTER BHA
116A2 ; [.2C61.0020.0002] # TAKRI LETTER MA
116A3 ; [.2C62.0020.0002] # TAKRI LETTER YA
116A4 ; [.2C63.0020.0002] # TAKRI LETTER RA
116A5 ; [.2C64.0020.0002] # TAKRI LETTER LA
116A6 ; [.2C65.0020.0002] # TAKRI LETTER VA
116AA ; [.2C66.0020.0002] # TAKRI LETTER RRA
116AD ; [.2C67.0020.0002] # TAKRI VOWEL SIGN AA
116AE ; [.2C68.0020.0002] # TAKRI VOWEL SIGN I
116AF ; [.2C69.0020.0002] # TAKRI VOWEL SIGN II
116B0 ; [.2C6A.0020.0002] # TAKRI VOWEL SIGN U
116B1 ; [.2C6B.0020.0002] # TAKRI VOWEL SIGN UU
116B2 ; [.2C6C.0020.0002] # TAKRI VOWEL SIGN E
116B3 ; [.2C6D.0020.0002] # TAKRI VOWEL SIGN AI
116B4 ; [.2C6E.0020.0002] # TAKRI VOWEL SIGN O
116B5 ; [.2C6F.0020.0002] # TAKRI VOWEL SIGN AU
116B6 ; [.2C70.0020.0002] # TAKRI SIGN VIRAMA
11700 ; [.2C71.0020.0002] # AHOM LETTER KA
11701 ; [.2C72.0020.0002] # AHOM LETTER KHA
11702 ; [.2C73.0020.0002] # AHOM LETTER NGA
11703 ; [.2C74.0020.0002] # AHOM LETTER NA
11704 ; [.2C75.0020.0002] # AHOM LETTER TA
11705 ; [.2C75.0020.0004][.0000.0110.0004] # AHOM LETTER ALTERNATE TA
11706 ; [.2C76.0020.0002] # AHOM LETTER PA
11707 ; [.2C77.0020.0002] # AHOM LETTER PHA
11708 ; [.2C78.0020.0002] # AHOM LETTER BA
11709 ; [.2C79.0020.0002] # AHOM LETTER MA
1170A ; [.2C7A.0020.0002] # AHOM LETTER JA
1170B ; [.2C7B.0020.0002] # AHOM LETTER CHA
1170C ; [.2C7C.0020.0002] # AHOM LETTER THA
1170D ; [.2C7D.0020.0002] # AHOM LETTER RA
1170E ; [.2C7E.0020.0002] # AHOM LETTER LA
1170F ; [.2C7F.0020.0002] # AHOM LETTER SA
11710 ; [.2C80.0020.0002] # AHOM LETTER NYA
11711 ; [.2C81.0020.0002] # AHOM LETTER HA
11712 ; [.2C82.0020.0002] # AHOM LETTER A
11713 ; [.2C83.0020.0002] # AHOM LETTER DA
11714 ; [.2C84.0020.0002] # AHOM LETTER DHA
11715 ; [.2C85.0020.0002] # AHOM LETTER GA
11716 ; [.2C85.0020.0004][.0000.0110.0004] # AHOM LETTER ALTERNATE GA
11717 ; [.2C86.0020.0002] # AHOM LETTER GHA
11718 ; [.2C87.0020.0002] # AHOM LETTER BHA
11719 ; [.2C88.0020.0002] # AHOM LETTER JHA
11720 ; [.2C89.0020.0002] # AHOM VOWEL SIGN A
11721 ; [.2C8A.0020.0002] # AHOM VOWEL SIGN AA
11722 ; [.2C8B.0020.0002] # AHOM VOWEL SIGN I
11723 ; [.2C8C.0020.0002] # AHOM VOWEL SIGN II
11724 ; [.2C8D.0020.0002] # AHOM VOWEL SIGN U
11725 ; [.2C8E.0020.0002] # AHOM VOWEL SIGN UU
11726 ; [.2C8F.0020.0002] # AHOM VOWEL SIGN E
11727 ; [.2C90.0020.0002] # AHOM VOWEL SIGN AW
11728 ; [.2C91.0020.0002] # AHOM VOWEL SIGN O
11729 ; [.2C92.0020.0002] # AHOM VOWEL SIGN AI
1172A ; [.2C93.0020.0002] # AHOM VOWEL SIGN AM
1172B ; [.2C94.0020.0002] # AHOM SIGN KILLER
1171D ; [.2C95.0020.0002] # AHOM CONSONANT SIGN MEDIAL LA
1171E ; [.2C96.0020.0002] # AHOM CONSONANT SIGN MEDIAL RA
1171F ; [.2C97.0020.0002] # AHOM CONSONANT SIGN MEDIAL LIGATING RA
1B83 ; [.2C98.0020.0002] # SUNDANESE LETTER A
1BBA ; [.2C98.0020.0004] # SUNDANESE AVAGRAHA
1B84 ; [.2C99.0020.0002] # SUNDANESE LETTER I
1B85 ; [.2C9A.0020.0002] # SUNDANESE LETTER U
1B86 ; [.2C9B.0020.0002] # SUNDANESE LETTER AE
1B87 ; [.2C9C.0020.0002] # SUNDANESE LETTER O
1B88 ; [.2C9D.0020.0002] # SUNDANESE LETTER E
1B89 ; [.2C9E.0020.0002] # SUNDANESE LETTER EU
1B8A ; [.2C9F.0020.0002] # SUNDANESE LETTER KA
1BBE ; [.2C9F.0020.0019] # SUNDANESE LETTER FINAL K
1BAE ; [.2CA0.0020.0002] # SUNDANESE LETTER KHA
1B8B ; [.2CA1.0020.0002] # SUNDANESE LETTER QA
1B8C ; [.2CA2.0020.0002] # SUNDANESE LETTER GA
1B8D ; [.2CA3.0020.0002] # SUNDANESE LETTER NGA
1B8E ; [.2CA4.0020.0002] # SUNDANESE LETTER CA
1B8F ; [.2CA5.0020.0002] # SUNDANESE LETTER JA
1B90 ; [.2CA6.0020.0002] # SUNDANESE LETTER ZA
1B91 ; [.2CA7.0020.0002] # SUNDANESE LETTER NYA
1B92 ; [.2CA8.0020.0002] # SUNDANESE LETTER TA
1B93 ; [.2CA9.0020.0002] # SUNDANESE LETTER DA
1B94 ; [.2CAA.0020.0002] # SUNDANESE LETTER NA
1B95 ; [.2CAB.0020.0002] # SUNDANESE LETTER PA
1B96 ; [.2CAC.0020.0002] # SUNDANESE LETTER FA
1B97 ; [.2CAD.0020.0002] # SUNDANESE LETTER VA
1B98 ; [.2CAE.0020.0002] # SUNDANESE LETTER BA
1BBD ; [.2CAF.0020.0002] # SUNDANESE LETTER BHA
1B99 ; [.2CB0.0020.0002] # SUNDANESE LETTER MA
1BBF ; [.2CB0.0020.0019] # SUNDANESE LETTER FINAL M
1BAC ; [.2CB1.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN MA
1B9A ; [.2CB2.0020.0002] # SUNDANESE LETTER YA
1BA1 ; [.2CB3.0020.0002] # SUNDANESE CONSONANT SIGN PAMINGKAL
1B9B ; [.2CB4.0020.0002] # SUNDANESE LETTER RA
1BA2 ; [.2CB5.0020.0002] # SUNDANESE CONSONANT SIGN PANYAKRA
1BBB ; [.2CB6.0020.0002] # SUNDANESE LETTER REU
1B9C ; [.2CB7.0020.0002] # SUNDANESE LETTER LA
1BA3 ; [.2CB8.0020.0002] # SUNDANESE CONSONANT SIGN PANYIKU
1BBC ; [.2CB9.0020.0002] # SUNDANESE LETTER LEU
1B9D ; [.2CBA.0020.0002] # SUNDANESE LETTER WA
1BAD ; [.2CBB.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN WA
1B9E ; [.2CBC.0020.0002] # SUNDANESE LETTER SA
1B9F ; [.2CBD.0020.0002] # SUNDANESE LETTER XA
1BAF ; [.2CBE.0020.0002] # SUNDANESE LETTER SYA
1BA0 ; [.2CBF.0020.0002] # SUNDANESE LETTER HA
1BA4 ; [.2CC0.0020.0002] # SUNDANESE VOWEL SIGN PANGHULU
1BA5 ; [.2CC1.0020.0002] # SUNDANESE VOWEL SIGN PANYUKU
1BA6 ; [.2CC2.0020.0002] # SUNDANESE VOWEL SIGN PANAELAENG
1BA7 ; [.2CC3.0020.0002] # SUNDANESE VOWEL SIGN PANOLONG
1BA8 ; [.2CC4.0020.0002] # SUNDANESE VOWEL SIGN PAMEPET
1BA9 ; [.2CC5.0020.0002] # SUNDANESE VOWEL SIGN PANEULEUNG
1BAA ; [.2CC6.0020.0002] # SUNDANESE SIGN PAMAAEH
1BAB ; [.2CC7.0020.0002] # SUNDANESE SIGN VIRAMA
11005 ; [.2CC8.0020.0002] # BRAHMI LETTER A
11006 ; [.2CC9.0020.0002] # BRAHMI LETTER AA
11007 ; [.2CCA.0020.0002] # BRAHMI LETTER I
11008 ; [.2CCB.0020.0002] # BRAHMI LETTER II
11009 ; [.2CCC.0020.0002] # BRAHMI LETTER U
1100A ; [.2CCD.0020.0002] # BRAHMI LETTER UU
1100B ; [.2CCE.0020.0002] # BRAHMI LETTER VOCALIC R
1100C ; [.2CCF.0020.0002] # BRAHMI LETTER VOCALIC RR
1100D ; [.2CD0.0020.0002] # BRAHMI LETTER VOCALIC L
1100E ; [.2CD1.0020.0002] # BRAHMI LETTER VOCALIC LL
1100F ; [.2CD2.0020.0002] # BRAHMI LETTER E
11010 ; [.2CD3.0020.0002] # BRAHMI LETTER AI
11011 ; [.2CD4.0020.0002] # BRAHMI LETTER O
11012 ; [.2CD5.0020.0002] # BRAHMI LETTER AU
11013 ; [.2CD6.0020.0002] # BRAHMI LETTER KA
11014 ; [.2CD7.0020.0002] # BRAHMI LETTER KHA
11015 ; [.2CD8.0020.0002] # BRAHMI LETTER GA
11016 ; [.2CD9.0020.0002] # BRAHMI LETTER GHA
11017 ; [.2CDA.0020.0002] # BRAHMI LETTER NGA
11018 ; [.2CDB.0020.0002] # BRAHMI LETTER CA
11019 ; [.2CDC.0020.0002] # BRAHMI LETTER CHA
1101A ; [.2CDD.0020.0002] # BRAHMI LETTER JA
1101B ; [.2CDE.0020.0002] # BRAHMI LETTER JHA
1101C ; [.2CDF.0020.0002] # BRAHMI LETTER NYA
1101D ; [.2CE0.0020.0002] # BRAHMI LETTER TTA
1101E ; [.2CE1.0020.0002] # BRAHMI LETTER TTHA
1101F ; [.2CE2.0020.0002] # BRAHMI LETTER DDA
11020 ; [.2CE3.0020.0002] # BRAHMI LETTER DDHA
11021 ; [.2CE4.0020.0002] # BRAHMI LETTER NNA
11022 ; [.2CE5.0020.0002] # BRAHMI LETTER TA
11023 ; [.2CE6.0020.0002] # BRAHMI LETTER THA
11024 ; [.2CE7.0020.0002] # BRAHMI LETTER DA
11025 ; [.2CE8.0020.0002] # BRAHMI LETTER DHA
11026 ; [.2CE9.0020.0002] # BRAHMI LETTER NA
11027 ; [.2CEA.0020.0002] # BRAHMI LETTER PA
11028 ; [.2CEB.0020.0002] # BRAHMI LETTER PHA
11029 ; [.2CEC.0020.0002] # BRAHMI LETTER BA
1102A ; [.2CED.0020.0002] # BRAHMI LETTER BHA
1102B ; [.2CEE.0020.0002] # BRAHMI LETTER MA
1102C ; [.2CEF.0020.0002] # BRAHMI LETTER YA
1102D ; [.2CF0.0020.0002] # BRAHMI LETTER RA
1102E ; [.2CF1.0020.0002] # BRAHMI LETTER LA
1102F ; [.2CF2.0020.0002] # BRAHMI LETTER VA
11030 ; [.2CF3.0020.0002] # BRAHMI LETTER SHA
11031 ; [.2CF4.0020.0002] # BRAHMI LETTER SSA
11032 ; [.2CF5.0020.0002] # BRAHMI LETTER SA
11033 ; [.2CF6.0020.0002] # BRAHMI LETTER HA
11003 ; [.2CF7.0020.0002] # BRAHMI SIGN JIHVAMULIYA
11004 ; [.2CF8.0020.0002] # BRAHMI SIGN UPADHMANIYA
11034 ; [.2CF9.0020.0002] # BRAHMI LETTER LLA
11035 ; [.2CFA.0020.0002] # BRAHMI LETTER OLD TAMIL LLLA
11036 ; [.2CFB.0020.0002] # BRAHMI LETTER OLD TAMIL RRA
11037 ; [.2CFC.0020.0002] # BRAHMI LETTER OLD TAMIL NNNA
11038 ; [.2CFD.0020.0002] # BRAHMI VOWEL SIGN AA
11039 ; [.2CFE.0020.0002] # BRAHMI VOWEL SIGN BHATTIPROLU AA
1103A ; [.2CFF.0020.0002] # BRAHMI VOWEL SIGN I
1103B ; [.2D00.0020.0002] # BRAHMI VOWEL SIGN II
1103C ; [.2D01.0020.0002] # BRAHMI VOWEL SIGN U
1103D ; [.2D02.0020.0002] # BRAHMI VOWEL SIGN UU
1103E ; [.2D03.0020.0002] # BRAHMI VOWEL SIGN VOCALIC R
1103F ; [.2D04.0020.0002] # BRAHMI VOWEL SIGN VOCALIC RR
11040 ; [.2D05.0020.0002] # BRAHMI VOWEL SIGN VOCALIC L
11041 ; [.2D06.0020.0002] # BRAHMI VOWEL SIGN VOCALIC LL
11042 ; [.2D07.0020.0002] # BRAHMI VOWEL SIGN E
11043 ; [.2D08.0020.0002] # BRAHMI VOWEL SIGN AI
11044 ; [.2D09.0020.0002] # BRAHMI VOWEL SIGN O
11045 ; [.2D0A.0020.0002] # BRAHMI VOWEL SIGN AU
11046 ; [.2D0B.0020.0002] # BRAHMI VIRAMA
1107F ; [.2D0C.0020.0002] # BRAHMI NUMBER JOINER
10A00 ; [.2D0D.0020.0002] # KHAROSHTHI LETTER A
10A01 ; [.2D0E.0020.0002] # KHAROSHTHI VOWEL SIGN I
10A02 ; [.2D0F.0020.0002] # KHAROSHTHI VOWEL SIGN U
10A03 ; [.2D10.0020.0002] # KHAROSHTHI VOWEL SIGN VOCALIC R
10A05 ; [.2D11.0020.0002] # KHAROSHTHI VOWEL SIGN E
10A06 ; [.2D12.0020.0002] # KHAROSHTHI VOWEL SIGN O
10A0C ; [.2D13.0020.0002] # KHAROSHTHI VOWEL LENGTH MARK
10A10 ; [.2D14.0020.0002] # KHAROSHTHI LETTER KA
10A11 ; [.2D15.0020.0002] # KHAROSHTHI LETTER KHA
10A12 ; [.2D16.0020.0002] # KHAROSHTHI LETTER GA
10A13 ; [.2D17.0020.0002] # KHAROSHTHI LETTER GHA
10A15 ; [.2D18.0020.0002] # KHAROSHTHI LETTER CA
10A16 ; [.2D19.0020.0002] # KHAROSHTHI LETTER CHA
10A17 ; [.2D1A.0020.0002] # KHAROSHTHI LETTER JA
10A19 ; [.2D1B.0020.0002] # KHAROSHTHI LETTER NYA
10A1A ; [.2D1C.0020.0002] # KHAROSHTHI LETTER TTA
10A1B ; [.2D1D.0020.0002] # KHAROSHTHI LETTER TTHA
10A1C ; [.2D1E.0020.0002] # KHAROSHTHI LETTER DDA
10A1D ; [.2D1F.0020.0002] # KHAROSHTHI LETTER DDHA
10A1E ; [.2D20.0020.0002] # KHAROSHTHI LETTER NNA
10A1F ; [.2D21.0020.0002] # KHAROSHTHI LETTER TA
10A20 ; [.2D22.0020.0002] # KHAROSHTHI LETTER THA
10A21 ; [.2D23.0020.0002] # KHAROSHTHI LETTER DA
10A22 ; [.2D24.0020.0002] # KHAROSHTHI LETTER DHA
10A23 ; [.2D25.0020.0002] # KHAROSHTHI LETTER NA
10A24 ; [.2D26.0020.0002] # KHAROSHTHI LETTER PA
10A25 ; [.2D27.0020.0002] # KHAROSHTHI LETTER PHA
10A26 ; [.2D28.0020.0002] # KHAROSHTHI LETTER BA
10A27 ; [.2D29.0020.0002] # KHAROSHTHI LETTER BHA
10A28 ; [.2D2A.0020.0002] # KHAROSHTHI LETTER MA
10A29 ; [.2D2B.0020.0002] # KHAROSHTHI LETTER YA
10A2A ; [.2D2C.0020.0002] # KHAROSHTHI LETTER RA
10A2B ; [.2D2D.0020.0002] # KHAROSHTHI LETTER LA
10A2C ; [.2D2E.0020.0002] # KHAROSHTHI LETTER VA
10A2D ; [.2D2F.0020.0002] # KHAROSHTHI LETTER SHA
10A2E ; [.2D30.0020.0002] # KHAROSHTHI LETTER SSA
10A2F ; [.2D31.0020.0002] # KHAROSHTHI LETTER SA
10A30 ; [.2D32.0020.0002] # KHAROSHTHI LETTER ZA
10A31 ; [.2D33.0020.0002] # KHAROSHTHI LETTER HA
10A32 ; [.2D34.0020.0002] # KHAROSHTHI LETTER KKA
10A33 ; [.2D35.0020.0002] # KHAROSHTHI LETTER TTTHA
10A3F ; [.2D36.0020.0002] # KHAROSHTHI VIRAMA
11C00 ; [.2D37.0020.0002] # BHAIKSUKI LETTER A
11C01 ; [.2D38.0020.0002] # BHAIKSUKI LETTER AA
11C02 ; [.2D39.0020.0002] # BHAIKSUKI LETTER I
11C03 ; [.2D3A.0020.0002] # BHAIKSUKI LETTER II
11C04 ; [.2D3B.0020.0002] # BHAIKSUKI LETTER U
11C05 ; [.2D3C.0020.0002] # BHAIKSUKI LETTER UU
11C06 ; [.2D3D.0020.0002] # BHAIKSUKI LETTER VOCALIC R
11C07 ; [.2D3E.0020.0002] # BHAIKSUKI LETTER VOCALIC RR
11C08 ; [.2D3F.0020.0002] # BHAIKSUKI LETTER VOCALIC L
11C0A ; [.2D40.0020.0002] # BHAIKSUKI LETTER E
11C0B ; [.2D41.0020.0002] # BHAIKSUKI LETTER AI
11C0C ; [.2D42.0020.0002] # BHAIKSUKI LETTER O
11C0D ; [.2D43.0020.0002] # BHAIKSUKI LETTER AU
11C0E ; [.2D44.0020.0002] # BHAIKSUKI LETTER KA
11C0F ; [.2D45.0020.0002] # BHAIKSUKI LETTER KHA
11C10 ; [.2D46.0020.0002] # BHAIKSUKI LETTER GA
11C11 ; [.2D47.0020.0002] # BHAIKSUKI LETTER GHA
11C12 ; [.2D48.0020.0002] # BHAIKSUKI LETTER NGA
11C13 ; [.2D49.0020.0002] # BHAIKSUKI LETTER CA
11C14 ; [.2D4A.0020.0002] # BHAIKSUKI LETTER CHA
11C15 ; [.2D4B.0020.0002] # BHAIKSUKI LETTER JA
11C16 ; [.2D4C.0020.0002] # BHAIKSUKI LETTER JHA
11C17 ; [.2D4D.0020.0002] # BHAIKSUKI LETTER NYA
11C18 ; [.2D4E.0020.0002] # BHAIKSUKI LETTER TTA
11C19 ; [.2D4F.0020.0002] # BHAIKSUKI LETTER TTHA
11C1A ; [.2D50.0020.0002] # BHAIKSUKI LETTER DDA
11C1B ; [.2D51.0020.0002] # BHAIKSUKI LETTER DDHA
11C1C ; [.2D52.0020.0002] # BHAIKSUKI LETTER NNA
11C1D ; [.2D53.0020.0002] # BHAIKSUKI LETTER TA
11C1E ; [.2D54.0020.0002] # BHAIKSUKI LETTER THA
11C1F ; [.2D55.0020.0002] # BHAIKSUKI LETTER DA
11C20 ; [.2D56.0020.0002] # BHAIKSUKI LETTER DHA
11C21 ; [.2D57.0020.0002] # BHAIKSUKI LETTER NA
11C22 ; [.2D58.0020.0002] # BHAIKSUKI LETTER PA
11C23 ; [.2D59.0020.0002] # BHAIKSUKI LETTER PHA
11C24 ; [.2D5A.0020.0002] # BHAIKSUKI LETTER BA
11C25 ; [.2D5B.0020.0002] # BHAIKSUKI LETTER BHA
11C26 ; [.2D5C.0020.0002] # BHAIKSUKI LETTER MA
11C27 ; [.2D5D.0020.0002] # BHAIKSUKI LETTER YA
11C28 ; [.2D5E.0020.0002] # BHAIKSUKI LETTER RA
11C29 ; [.2D5F.0020.0002] # BHAIKSUKI LETTER LA
11C2A ; [.2D60.0020.0002] # BHAIKSUKI LETTER VA
11C2B ; [.2D61.0020.0002] # BHAIKSUKI LETTER SHA
11C2C ; [.2D62.0020.0002] # BHAIKSUKI LETTER SSA
11C2D ; [.2D63.0020.0002] # BHAIKSUKI LETTER SA
11C2E ; [.2D64.0020.0002] # BHAIKSUKI LETTER HA
11C40 ; [.2D65.0020.0002] # BHAIKSUKI SIGN AVAGRAHA
11C2F ; [.2D66.0020.0002] # BHAIKSUKI VOWEL SIGN AA
11C30 ; [.2D67.0020.0002] # BHAIKSUKI VOWEL SIGN I
11C31 ; [.2D68.0020.0002] # BHAIKSUKI VOWEL SIGN II
11C32 ; [.2D69.0020.0002] # BHAIKSUKI VOWEL SIGN U
11C33 ; [.2D6A.0020.0002] # BHAIKSUKI VOWEL SIGN UU
11C34 ; [.2D6B.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC R
11C35 ; [.2D6C.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC RR
11C36 ; [.2D6D.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC L
11C38 ; [.2D6E.0020.0002] # BHAIKSUKI VOWEL SIGN E
11C39 ; [.2D6F.0020.0002] # BHAIKSUKI VOWEL SIGN AI
11C3A ; [.2D70.0020.0002] # BHAIKSUKI VOWEL SIGN O
11C3B ; [.2D71.0020.0002] # BHAIKSUKI VOWEL SIGN AU
11C3F ; [.2D72.0020.0002] # BHAIKSUKI SIGN VIRAMA
0E01 ; [.2D73.0020.0002] # THAI CHARACTER KO KAI
0E40 0E01 ; [.2D73.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KO KAI>
0E41 0E01 ; [.2D73.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KO KAI>
0E42 0E01 ; [.2D73.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KO KAI>
0E43 0E01 ; [.2D73.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KO KAI>
0E44 0E01 ; [.2D73.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KO KAI>
0E02 ; [.2D74.0020.0002] # THAI CHARACTER KHO KHAI
0E40 0E02 ; [.2D74.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHAI>
0E41 0E02 ; [.2D74.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHAI>
0E42 0E02 ; [.2D74.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHAI>
0E43 0E02 ; [.2D74.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHAI>
0E44 0E02 ; [.2D74.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHAI>
0E03 ; [.2D75.0020.0002] # THAI CHARACTER KHO KHUAT
0E40 0E03 ; [.2D75.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHUAT>
0E41 0E03 ; [.2D75.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHUAT>
0E42 0E03 ; [.2D75.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHUAT>
0E43 0E03 ; [.2D75.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHUAT>
0E44 0E03 ; [.2D75.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHUAT>
0E04 ; [.2D76.0020.0002] # THAI CHARACTER KHO KHWAI
0E40 0E04 ; [.2D76.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHWAI>
0E41 0E04 ; [.2D76.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHWAI>
0E42 0E04 ; [.2D76.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHWAI>
0E43 0E04 ; [.2D76.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHWAI>
0E44 0E04 ; [.2D76.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHWAI>
0E05 ; [.2D77.0020.0002] # THAI CHARACTER KHO KHON
0E40 0E05 ; [.2D77.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHON>
0E41 0E05 ; [.2D77.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHON>
0E42 0E05 ; [.2D77.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHON>
0E43 0E05 ; [.2D77.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHON>
0E44 0E05 ; [.2D77.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHON>
0E06 ; [.2D78.0020.0002] # THAI CHARACTER KHO RAKHANG
0E40 0E06 ; [.2D78.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO RAKHANG>
0E41 0E06 ; [.2D78.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO RAKHANG>
0E42 0E06 ; [.2D78.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO RAKHANG>
0E43 0E06 ; [.2D78.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO RAKHANG>
0E44 0E06 ; [.2D78.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO RAKHANG>
0E07 ; [.2D79.0020.0002] # THAI CHARACTER NGO NGU
0E40 0E07 ; [.2D79.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NGO NGU>
0E41 0E07 ; [.2D79.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NGO NGU>
0E42 0E07 ; [.2D79.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NGO NGU>
0E43 0E07 ; [.2D79.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NGO NGU>
0E44 0E07 ; [.2D79.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NGO NGU>
0E08 ; [.2D7A.0020.0002] # THAI CHARACTER CHO CHAN
0E40 0E08 ; [.2D7A.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHAN>
0E41 0E08 ; [.2D7A.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHAN>
0E42 0E08 ; [.2D7A.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHAN>
0E43 0E08 ; [.2D7A.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHAN>
0E44 0E08 ; [.2D7A.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHAN>
0E09 ; [.2D7B.0020.0002] # THAI CHARACTER CHO CHING
0E40 0E09 ; [.2D7B.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHING>
0E41 0E09 ; [.2D7B.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHING>
0E42 0E09 ; [.2D7B.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHING>
0E43 0E09 ; [.2D7B.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHING>
0E44 0E09 ; [.2D7B.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHING>
0E0A ; [.2D7C.0020.0002] # THAI CHARACTER CHO CHANG
0E40 0E0A ; [.2D7C.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHANG>
0E41 0E0A ; [.2D7C.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHANG>
0E42 0E0A ; [.2D7C.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHANG>
0E43 0E0A ; [.2D7C.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHANG>
0E44 0E0A ; [.2D7C.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHANG>
0E0B ; [.2D7D.0020.0002] # THAI CHARACTER SO SO
0E40 0E0B ; [.2D7D.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SO>
0E41 0E0B ; [.2D7D.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SO>
0E42 0E0B ; [.2D7D.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SO>
0E43 0E0B ; [.2D7D.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SO>
0E44 0E0B ; [.2D7D.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SO>
0E0C ; [.2D7E.0020.0002] # THAI CHARACTER CHO CHOE
0E40 0E0C ; [.2D7E.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHOE>
0E41 0E0C ; [.2D7E.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHOE>
0E42 0E0C ; [.2D7E.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHOE>
0E43 0E0C ; [.2D7E.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHOE>
0E44 0E0C ; [.2D7E.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHOE>
0E0D ; [.2D7F.0020.0002] # THAI CHARACTER YO YING
0E40 0E0D ; [.2D7F.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER YO YING>
0E41 0E0D ; [.2D7F.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER YO YING>
0E42 0E0D ; [.2D7F.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER YO YING>
0E43 0E0D ; [.2D7F.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER YO YING>
0E44 0E0D ; [.2D7F.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER YO YING>
0E0E ; [.2D80.0020.0002] # THAI CHARACTER DO CHADA
0E40 0E0E ; [.2D80.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER DO CHADA>
0E41 0E0E ; [.2D80.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER DO CHADA>
0E42 0E0E ; [.2D80.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER DO CHADA>
0E43 0E0E ; [.2D80.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER DO CHADA>
0E44 0E0E ; [.2D80.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER DO CHADA>
0E0F ; [.2D81.0020.0002] # THAI CHARACTER TO PATAK
0E40 0E0F ; [.2D81.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER TO PATAK>
0E41 0E0F ; [.2D81.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER TO PATAK>
0E42 0E0F ; [.2D81.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER TO PATAK>
0E43 0E0F ; [.2D81.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER TO PATAK>
0E44 0E0F ; [.2D81.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER TO PATAK>
0E10 ; [.2D82.0020.0002] # THAI CHARACTER THO THAN
0E40 0E10 ; [.2D82.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THAN>
0E41 0E10 ; [.2D82.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THAN>
0E42 0E10 ; [.2D82.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THAN>
0E43 0E10 ; [.2D82.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THAN>
0E44 0E10 ; [.2D82.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THAN>
0E11 ; [.2D83.0020.0002] # THAI CHARACTER THO NANGMONTHO
0E40 0E11 ; [.2D83.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO NANGMONTHO>
0E41 0E11 ; [.2D83.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO NANGMONTHO>
0E42 0E11 ; [.2D83.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO NANGMONTHO>
0E43 0E11 ; [.2D83.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO NANGMONTHO>
0E44 0E11 ; [.2D83.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO NANGMONTHO>
0E12 ; [.2D84.0020.0002] # THAI CHARACTER THO PHUTHAO
0E40 0E12 ; [.2D84.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO PHUTHAO>
0E41 0E12 ; [.2D84.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO PHUTHAO>
0E42 0E12 ; [.2D84.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO PHUTHAO>
0E43 0E12 ; [.2D84.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO PHUTHAO>
0E44 0E12 ; [.2D84.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO PHUTHAO>
0E13 ; [.2D85.0020.0002] # THAI CHARACTER NO NEN
0E40 0E13 ; [.2D85.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NO NEN>
0E41 0E13 ; [.2D85.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NO NEN>
0E42 0E13 ; [.2D85.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NO NEN>
0E43 0E13 ; [.2D85.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NO NEN>
0E44 0E13 ; [.2D85.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NO NEN>
0E14 ; [.2D86.0020.0002] # THAI CHARACTER DO DEK
0E40 0E14 ; [.2D86.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER DO DEK>
0E41 0E14 ; [.2D86.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER DO DEK>
0E42 0E14 ; [.2D86.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER DO DEK>
0E43 0E14 ; [.2D86.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER DO DEK>
0E44 0E14 ; [.2D86.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER DO DEK>
0E15 ; [.2D87.0020.0002] # THAI CHARACTER TO TAO
0E40 0E15 ; [.2D87.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER TO TAO>
0E41 0E15 ; [.2D87.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER TO TAO>
0E42 0E15 ; [.2D87.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER TO TAO>
0E43 0E15 ; [.2D87.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER TO TAO>
0E44 0E15 ; [.2D87.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER TO TAO>
0E16 ; [.2D88.0020.0002] # THAI CHARACTER THO THUNG
0E40 0E16 ; [.2D88.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THUNG>
0E41 0E16 ; [.2D88.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THUNG>
0E42 0E16 ; [.2D88.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THUNG>
0E43 0E16 ; [.2D88.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THUNG>
0E44 0E16 ; [.2D88.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THUNG>
0E17 ; [.2D89.0020.0002] # THAI CHARACTER THO THAHAN
0E40 0E17 ; [.2D89.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THAHAN>
0E41 0E17 ; [.2D89.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THAHAN>
0E42 0E17 ; [.2D89.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THAHAN>
0E43 0E17 ; [.2D89.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THAHAN>
0E44 0E17 ; [.2D89.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THAHAN>
0E18 ; [.2D8A.0020.0002] # THAI CHARACTER THO THONG
0E40 0E18 ; [.2D8A.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THONG>
0E41 0E18 ; [.2D8A.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THONG>
0E42 0E18 ; [.2D8A.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THONG>
0E43 0E18 ; [.2D8A.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THONG>
0E44 0E18 ; [.2D8A.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THONG>
0E19 ; [.2D8B.0020.0002] # THAI CHARACTER NO NU
0E40 0E19 ; [.2D8B.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NO NU>
0E41 0E19 ; [.2D8B.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NO NU>
0E42 0E19 ; [.2D8B.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NO NU>
0E43 0E19 ; [.2D8B.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NO NU>
0E44 0E19 ; [.2D8B.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NO NU>
0E1A ; [.2D8C.0020.0002] # THAI CHARACTER BO BAIMAI
0E40 0E1A ; [.2D8C.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER BO BAIMAI>
0E41 0E1A ; [.2D8C.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER BO BAIMAI>
0E42 0E1A ; [.2D8C.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER BO BAIMAI>
0E43 0E1A ; [.2D8C.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER BO BAIMAI>
0E44 0E1A ; [.2D8C.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER BO BAIMAI>
0E1B ; [.2D8D.0020.0002] # THAI CHARACTER PO PLA
0E40 0E1B ; [.2D8D.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PO PLA>
0E41 0E1B ; [.2D8D.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PO PLA>
0E42 0E1B ; [.2D8D.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PO PLA>
0E43 0E1B ; [.2D8D.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PO PLA>
0E44 0E1B ; [.2D8D.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PO PLA>
0E1C ; [.2D8E.0020.0002] # THAI CHARACTER PHO PHUNG
0E40 0E1C ; [.2D8E.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO PHUNG>
0E41 0E1C ; [.2D8E.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO PHUNG>
0E42 0E1C ; [.2D8E.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO PHUNG>
0E43 0E1C ; [.2D8E.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO PHUNG>
0E44 0E1C ; [.2D8E.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO PHUNG>
0E1D ; [.2D8F.0020.0002] # THAI CHARACTER FO FA
0E40 0E1D ; [.2D8F.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER FO FA>
0E41 0E1D ; [.2D8F.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER FO FA>
0E42 0E1D ; [.2D8F.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER FO FA>
0E43 0E1D ; [.2D8F.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER FO FA>
0E44 0E1D ; [.2D8F.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER FO FA>
0E1E ; [.2D90.0020.0002] # THAI CHARACTER PHO PHAN
0E40 0E1E ; [.2D90.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO PHAN>
0E41 0E1E ; [.2D90.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO PHAN>
0E42 0E1E ; [.2D90.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO PHAN>
0E43 0E1E ; [.2D90.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO PHAN>
0E44 0E1E ; [.2D90.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO PHAN>
0E1F ; [.2D91.0020.0002] # THAI CHARACTER FO FAN
0E40 0E1F ; [.2D91.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER FO FAN>
0E41 0E1F ; [.2D91.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER FO FAN>
0E42 0E1F ; [.2D91.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER FO FAN>
0E43 0E1F ; [.2D91.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER FO FAN>
0E44 0E1F ; [.2D91.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER FO FAN>
0E20 ; [.2D92.0020.0002] # THAI CHARACTER PHO SAMPHAO
0E40 0E20 ; [.2D92.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO SAMPHAO>
0E41 0E20 ; [.2D92.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO SAMPHAO>
0E42 0E20 ; [.2D92.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO SAMPHAO>
0E43 0E20 ; [.2D92.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO SAMPHAO>
0E44 0E20 ; [.2D92.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO SAMPHAO>
0E21 ; [.2D93.0020.0002] # THAI CHARACTER MO MA
0E40 0E21 ; [.2D93.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER MO MA>
0E41 0E21 ; [.2D93.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER MO MA>
0E42 0E21 ; [.2D93.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER MO MA>
0E43 0E21 ; [.2D93.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER MO MA>
0E44 0E21 ; [.2D93.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER MO MA>
0E22 ; [.2D94.0020.0002] # THAI CHARACTER YO YAK
0E40 0E22 ; [.2D94.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER YO YAK>
0E41 0E22 ; [.2D94.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER YO YAK>
0E42 0E22 ; [.2D94.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER YO YAK>
0E43 0E22 ; [.2D94.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER YO YAK>
0E44 0E22 ; [.2D94.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER YO YAK>
0E23 ; [.2D95.0020.0002] # THAI CHARACTER RO RUA
0E40 0E23 ; [.2D95.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER RO RUA>
0E41 0E23 ; [.2D95.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER RO RUA>
0E42 0E23 ; [.2D95.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER RO RUA>
0E43 0E23 ; [.2D95.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER RO RUA>
0E44 0E23 ; [.2D95.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER RO RUA>
0E24 ; [.2D96.0020.0002] # THAI CHARACTER RU
0E40 0E24 ; [.2D96.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER RU>
0E41 0E24 ; [.2D96.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER RU>
0E42 0E24 ; [.2D96.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER RU>
0E43 0E24 ; [.2D96.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER RU>
0E44 0E24 ; [.2D96.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER RU>
0E25 ; [.2D97.0020.0002] # THAI CHARACTER LO LING
0E40 0E25 ; [.2D97.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LO LING>
0E41 0E25 ; [.2D97.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LO LING>
0E42 0E25 ; [.2D97.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LO LING>
0E43 0E25 ; [.2D97.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LO LING>
0E44 0E25 ; [.2D97.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LO LING>
0E26 ; [.2D98.0020.0002] # THAI CHARACTER LU
0E40 0E26 ; [.2D98.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LU>
0E41 0E26 ; [.2D98.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LU>
0E42 0E26 ; [.2D98.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LU>
0E43 0E26 ; [.2D98.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LU>
0E44 0E26 ; [.2D98.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LU>
0E27 ; [.2D99.0020.0002] # THAI CHARACTER WO WAEN
0E40 0E27 ; [.2D99.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER WO WAEN>
0E41 0E27 ; [.2D99.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER WO WAEN>
0E42 0E27 ; [.2D99.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER WO WAEN>
0E43 0E27 ; [.2D99.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER WO WAEN>
0E44 0E27 ; [.2D99.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER WO WAEN>
0E28 ; [.2D9A.0020.0002] # THAI CHARACTER SO SALA
0E40 0E28 ; [.2D9A.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SALA>
0E41 0E28 ; [.2D9A.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SALA>
0E42 0E28 ; [.2D9A.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SALA>
0E43 0E28 ; [.2D9A.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SALA>
0E44 0E28 ; [.2D9A.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SALA>
0E29 ; [.2D9B.0020.0002] # THAI CHARACTER SO RUSI
0E40 0E29 ; [.2D9B.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO RUSI>
0E41 0E29 ; [.2D9B.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO RUSI>
0E42 0E29 ; [.2D9B.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO RUSI>
0E43 0E29 ; [.2D9B.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO RUSI>
0E44 0E29 ; [.2D9B.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO RUSI>
0E2A ; [.2D9C.0020.0002] # THAI CHARACTER SO SUA
0E40 0E2A ; [.2D9C.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SUA>
0E41 0E2A ; [.2D9C.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SUA>
0E42 0E2A ; [.2D9C.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SUA>
0E43 0E2A ; [.2D9C.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SUA>
0E44 0E2A ; [.2D9C.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SUA>
0E2B ; [.2D9D.0020.0002] # THAI CHARACTER HO HIP
0E40 0E2B ; [.2D9D.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER HO HIP>
0E41 0E2B ; [.2D9D.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER HO HIP>
0E42 0E2B ; [.2D9D.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER HO HIP>
0E43 0E2B ; [.2D9D.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER HO HIP>
0E44 0E2B ; [.2D9D.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER HO HIP>
0E2C ; [.2D9E.0020.0002] # THAI CHARACTER LO CHULA
0E40 0E2C ; [.2D9E.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LO CHULA>
0E41 0E2C ; [.2D9E.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LO CHULA>
0E42 0E2C ; [.2D9E.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LO CHULA>
0E43 0E2C ; [.2D9E.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LO CHULA>
0E44 0E2C ; [.2D9E.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LO CHULA>
0E2D ; [.2D9F.0020.0002] # THAI CHARACTER O ANG
0E40 0E2D ; [.2D9F.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER O ANG>
0E41 0E2D ; [.2D9F.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER O ANG>
0E42 0E2D ; [.2D9F.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER O ANG>
0E43 0E2D ; [.2D9F.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER O ANG>
0E44 0E2D ; [.2D9F.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER O ANG>
0E2E ; [.2DA0.0020.0002] # THAI CHARACTER HO NOKHUK
0E40 0E2E ; [.2DA0.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER HO NOKHUK>
0E41 0E2E ; [.2DA0.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER HO NOKHUK>
0E42 0E2E ; [.2DA0.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER HO NOKHUK>
0E43 0E2E ; [.2DA0.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER HO NOKHUK>
0E44 0E2E ; [.2DA0.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER HO NOKHUK>
0E2F ; [.2DA1.0020.0002] # THAI CHARACTER PAIYANNOI
0E30 ; [.2DA2.0020.0002] # THAI CHARACTER SARA A
0E31 ; [.2DA3.0020.0002] # THAI CHARACTER MAI HAN-AKAT
0E32 ; [.2DA4.0020.0002] # THAI CHARACTER SARA AA
0E33 ; [.2DA5.0020.0002] # THAI CHARACTER SARA AM
0E4D 0E32 ; [.2DA5.0020.0002] # THAI CHARACTER SARA AM
0E34 ; [.2DA6.0020.0002] # THAI CHARACTER SARA I
0E35 ; [.2DA7.0020.0002] # THAI CHARACTER SARA II
0E36 ; [.2DA8.0020.0002] # THAI CHARACTER SARA UE
0E37 ; [.2DA9.0020.0002] # THAI CHARACTER SARA UEE
0E38 ; [.2DAA.0020.0002] # THAI CHARACTER SARA U
0E39 ; [.2DAB.0020.0002] # THAI CHARACTER SARA UU
0E3A ; [.2DAC.0020.0002] # THAI CHARACTER PHINTHU
0E40 ; [.2DAD.0020.0002] # THAI CHARACTER SARA E
0E41 ; [.2DAE.0020.0002] # THAI CHARACTER SARA AE
0E42 ; [.2DAF.0020.0002] # THAI CHARACTER SARA O
0E43 ; [.2DB0.0020.0002] # THAI CHARACTER SARA AI MAIMUAN
0E44 ; [.2DB1.0020.0002] # THAI CHARACTER SARA AI MAIMALAI
0E45 ; [.2DB2.0020.0002] # THAI CHARACTER LAKKHANGYAO
0EDE ; [.2DB3.0020.0002] # LAO LETTER KHMU GO
0EC0 0EDE ; [.2DB3.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHMU GO>
0EC1 0EDE ; [.2DB3.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHMU GO>
0EC2 0EDE ; [.2DB3.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHMU GO>
0EC3 0EDE ; [.2DB3.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHMU GO>
0EC4 0EDE ; [.2DB3.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHMU GO>
0E81 ; [.2DB4.0020.0002] # LAO LETTER KO
0EC0 0E81 ; [.2DB4.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KO>
0EC1 0E81 ; [.2DB4.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KO>
0EC2 0E81 ; [.2DB4.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KO>
0EC3 0E81 ; [.2DB4.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KO>
0EC4 0E81 ; [.2DB4.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KO>
0E82 ; [.2DB5.0020.0002] # LAO LETTER KHO SUNG
0EC0 0E82 ; [.2DB5.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHO SUNG>
0EC1 0E82 ; [.2DB5.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHO SUNG>
0EC2 0E82 ; [.2DB5.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHO SUNG>
0EC3 0E82 ; [.2DB5.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHO SUNG>
0EC4 0E82 ; [.2DB5.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHO SUNG>
0E84 ; [.2DB6.0020.0002] # LAO LETTER KHO TAM
0EC0 0E84 ; [.2DB6.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHO TAM>
0EC1 0E84 ; [.2DB6.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHO TAM>
0EC2 0E84 ; [.2DB6.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHO TAM>
0EC3 0E84 ; [.2DB6.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHO TAM>
0EC4 0E84 ; [.2DB6.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHO TAM>
0E87 ; [.2DB7.0020.0002] # LAO LETTER NGO
0EC0 0E87 ; [.2DB7.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NGO>
0EC1 0E87 ; [.2DB7.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NGO>
0EC2 0E87 ; [.2DB7.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NGO>
0EC3 0E87 ; [.2DB7.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NGO>
0EC4 0E87 ; [.2DB7.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NGO>
0E88 ; [.2DB8.0020.0002] # LAO LETTER CO
0EC0 0E88 ; [.2DB8.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER CO>
0EC1 0E88 ; [.2DB8.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER CO>
0EC2 0E88 ; [.2DB8.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER CO>
0EC3 0E88 ; [.2DB8.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER CO>
0EC4 0E88 ; [.2DB8.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER CO>
0EAA ; [.2DB9.0020.0002] # LAO LETTER SO SUNG
0EC0 0EAA ; [.2DB9.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SO SUNG>
0EC1 0EAA ; [.2DB9.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SO SUNG>
0EC2 0EAA ; [.2DB9.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SO SUNG>
0EC3 0EAA ; [.2DB9.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SO SUNG>
0EC4 0EAA ; [.2DB9.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SO SUNG>
0E8A ; [.2DBA.0020.0002] # LAO LETTER SO TAM
0EC0 0E8A ; [.2DBA.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SO TAM>
0EC1 0E8A ; [.2DBA.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SO TAM>
0EC2 0E8A ; [.2DBA.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SO TAM>
0EC3 0E8A ; [.2DBA.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SO TAM>
0EC4 0E8A ; [.2DBA.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SO TAM>
0EDF ; [.2DBB.0020.0002] # LAO LETTER KHMU NYO
0EC0 0EDF ; [.2DBB.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHMU NYO>
0EC1 0EDF ; [.2DBB.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHMU NYO>
0EC2 0EDF ; [.2DBB.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHMU NYO>
0EC3 0EDF ; [.2DBB.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHMU NYO>
0EC4 0EDF ; [.2DBB.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHMU NYO>
0E8D ; [.2DBC.0020.0002] # LAO LETTER NYO
0EC0 0E8D ; [.2DBC.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NYO>
0EC1 0E8D ; [.2DBC.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NYO>
0EC2 0E8D ; [.2DBC.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NYO>
0EC3 0E8D ; [.2DBC.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NYO>
0EC4 0E8D ; [.2DBC.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NYO>
0E94 ; [.2DBD.0020.0002] # LAO LETTER DO
0EC0 0E94 ; [.2DBD.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER DO>
0EC1 0E94 ; [.2DBD.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER DO>
0EC2 0E94 ; [.2DBD.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER DO>
0EC3 0E94 ; [.2DBD.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER DO>
0EC4 0E94 ; [.2DBD.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER DO>
0E95 ; [.2DBE.0020.0002] # LAO LETTER TO
0EC0 0E95 ; [.2DBE.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER TO>
0EC1 0E95 ; [.2DBE.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER TO>
0EC2 0E95 ; [.2DBE.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER TO>
0EC3 0E95 ; [.2DBE.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER TO>
0EC4 0E95 ; [.2DBE.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER TO>
0E96 ; [.2DBF.0020.0002] # LAO LETTER THO SUNG
0EC0 0E96 ; [.2DBF.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER THO SUNG>
0EC1 0E96 ; [.2DBF.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER THO SUNG>
0EC2 0E96 ; [.2DBF.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER THO SUNG>
0EC3 0E96 ; [.2DBF.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER THO SUNG>
0EC4 0E96 ; [.2DBF.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER THO SUNG>
0E97 ; [.2DC0.0020.0002] # LAO LETTER THO TAM
0EC0 0E97 ; [.2DC0.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER THO TAM>
0EC1 0E97 ; [.2DC0.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER THO TAM>
0EC2 0E97 ; [.2DC0.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER THO TAM>
0EC3 0E97 ; [.2DC0.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER THO TAM>
0EC4 0E97 ; [.2DC0.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER THO TAM>
0E99 ; [.2DC1.0020.0002] # LAO LETTER NO
0EC0 0E99 ; [.2DC1.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NO>
0EC1 0E99 ; [.2DC1.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NO>
0EC2 0E99 ; [.2DC1.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NO>
0EC3 0E99 ; [.2DC1.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NO>
0EC4 0E99 ; [.2DC1.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NO>
0E9A ; [.2DC2.0020.0002] # LAO LETTER BO
0EC0 0E9A ; [.2DC2.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER BO>
0EC1 0E9A ; [.2DC2.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER BO>
0EC2 0E9A ; [.2DC2.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER BO>
0EC3 0E9A ; [.2DC2.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER BO>
0EC4 0E9A ; [.2DC2.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER BO>
0E9B ; [.2DC3.0020.0002] # LAO LETTER PO
0EC0 0E9B ; [.2DC3.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PO>
0EC1 0E9B ; [.2DC3.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PO>
0EC2 0E9B ; [.2DC3.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PO>
0EC3 0E9B ; [.2DC3.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PO>
0EC4 0E9B ; [.2DC3.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PO>
0E9C ; [.2DC4.0020.0002] # LAO LETTER PHO SUNG
0EC0 0E9C ; [.2DC4.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PHO SUNG>
0EC1 0E9C ; [.2DC4.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PHO SUNG>
0EC2 0E9C ; [.2DC4.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PHO SUNG>
0EC3 0E9C ; [.2DC4.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PHO SUNG>
0EC4 0E9C ; [.2DC4.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PHO SUNG>
0E9D ; [.2DC5.0020.0002] # LAO LETTER FO TAM
0EC0 0E9D ; [.2DC5.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER FO TAM>
0EC1 0E9D ; [.2DC5.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER FO TAM>
0EC2 0E9D ; [.2DC5.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER FO TAM>
0EC3 0E9D ; [.2DC5.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER FO TAM>
0EC4 0E9D ; [.2DC5.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER FO TAM>
0E9E ; [.2DC6.0020.0002] # LAO LETTER PHO TAM
0EC0 0E9E ; [.2DC6.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PHO TAM>
0EC1 0E9E ; [.2DC6.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PHO TAM>
0EC2 0E9E ; [.2DC6.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PHO TAM>
0EC3 0E9E ; [.2DC6.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PHO TAM>
0EC4 0E9E ; [.2DC6.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PHO TAM>
0E9F ; [.2DC7.0020.0002] # LAO LETTER FO SUNG
0EC0 0E9F ; [.2DC7.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER FO SUNG>
0EC1 0E9F ; [.2DC7.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER FO SUNG>
0EC2 0E9F ; [.2DC7.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER FO SUNG>
0EC3 0E9F ; [.2DC7.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER FO SUNG>
0EC4 0E9F ; [.2DC7.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER FO SUNG>
0EA1 ; [.2DC8.0020.0002] # LAO LETTER MO
0EC0 0EA1 ; [.2DC8.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER MO>
0EC1 0EA1 ; [.2DC8.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER MO>
0EC2 0EA1 ; [.2DC8.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER MO>
0EC3 0EA1 ; [.2DC8.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER MO>
0EC4 0EA1 ; [.2DC8.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER MO>
0EA2 ; [.2DC9.0020.0002] # LAO LETTER YO
0EC0 0EA2 ; [.2DC9.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER YO>
0EC1 0EA2 ; [.2DC9.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER YO>
0EC2 0EA2 ; [.2DC9.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER YO>
0EC3 0EA2 ; [.2DC9.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER YO>
0EC4 0EA2 ; [.2DC9.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER YO>
0EA3 ; [.2DCA.0020.0002] # LAO LETTER LO LING
0EC0 0EA3 ; [.2DCA.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER LO LING>
0EC1 0EA3 ; [.2DCA.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER LO LING>
0EC2 0EA3 ; [.2DCA.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER LO LING>
0EC3 0EA3 ; [.2DCA.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER LO LING>
0EC4 0EA3 ; [.2DCA.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER LO LING>
0EA5 ; [.2DCB.0020.0002] # LAO LETTER LO LOOT
0EC0 0EA5 ; [.2DCB.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER LO LOOT>
0EC1 0EA5 ; [.2DCB.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER LO LOOT>
0EC2 0EA5 ; [.2DCB.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER LO LOOT>
0EC3 0EA5 ; [.2DCB.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER LO LOOT>
0EC4 0EA5 ; [.2DCB.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER LO LOOT>
0EA7 ; [.2DCC.0020.0002] # LAO LETTER WO
0EC0 0EA7 ; [.2DCC.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER WO>
0EC1 0EA7 ; [.2DCC.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER WO>
0EC2 0EA7 ; [.2DCC.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER WO>
0EC3 0EA7 ; [.2DCC.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER WO>
0EC4 0EA7 ; [.2DCC.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER WO>
0EAB ; [.2DCD.0020.0002] # LAO LETTER HO SUNG
0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004] # LAO HO NO
0EC0 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO HO NO>
0EC1 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO HO NO>
0EC2 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO HO NO>
0EC3 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO HO NO>
0EC4 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO HO NO>
0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004] # LAO HO MO
0EC0 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO HO MO>
0EC1 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO HO MO>
0EC2 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO HO MO>
0EC3 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO HO MO>
0EC4 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO HO MO>
0EC0 0EAB ; [.2DCD.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER HO SUNG>
0EC1 0EAB ; [.2DCD.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER HO SUNG>
0EC2 0EAB ; [.2DCD.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER HO SUNG>
0EC3 0EAB ; [.2DCD.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER HO SUNG>
0EC4 0EAB ; [.2DCD.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER HO SUNG>
0EAD ; [.2DCE.0020.0002] # LAO LETTER O
0EC0 0EAD ; [.2DCE.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER O>
0EC1 0EAD ; [.2DCE.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER O>
0EC2 0EAD ; [.2DCE.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER O>
0EC3 0EAD ; [.2DCE.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER O>
0EC4 0EAD ; [.2DCE.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER O>
0EAE ; [.2DCF.0020.0002] # LAO LETTER HO TAM
0EC0 0EAE ; [.2DCF.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER HO TAM>
0EC1 0EAE ; [.2DCF.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER HO TAM>
0EC2 0EAE ; [.2DCF.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER HO TAM>
0EC3 0EAE ; [.2DCF.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER HO TAM>
0EC4 0EAE ; [.2DCF.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER HO TAM>
0EAF ; [.2DD0.0020.0002] # LAO ELLIPSIS
0EB0 ; [.2DD1.0020.0002] # LAO VOWEL SIGN A
0EB1 ; [.2DD2.0020.0002] # LAO VOWEL SIGN MAI KAN
0EB2 ; [.2DD3.0020.0002] # LAO VOWEL SIGN AA
0EB3 ; [.2DD4.0020.0002] # LAO VOWEL SIGN AM
0ECD 0EB2 ; [.2DD4.0020.0002] # LAO VOWEL SIGN AM
0EB4 ; [.2DD5.0020.0002] # LAO VOWEL SIGN I
0EB5 ; [.2DD6.0020.0002] # LAO VOWEL SIGN II
0EB6 ; [.2DD7.0020.0002] # LAO VOWEL SIGN Y
0EB7 ; [.2DD8.0020.0002] # LAO VOWEL SIGN YY
0EB8 ; [.2DD9.0020.0002] # LAO VOWEL SIGN U
0EB9 ; [.2DDA.0020.0002] # LAO VOWEL SIGN UU
0EBB ; [.2DDB.0020.0002] # LAO VOWEL SIGN MAI KON
0EBC ; [.2DDC.0020.0002] # LAO SEMIVOWEL SIGN LO
0EBD ; [.2DDD.0020.0002] # LAO SEMIVOWEL SIGN NYO
0EC0 ; [.2DDE.0020.0002] # LAO VOWEL SIGN E
0EC1 ; [.2DDF.0020.0002] # LAO VOWEL SIGN EI
0EC2 ; [.2DE0.0020.0002] # LAO VOWEL SIGN O
0EC3 ; [.2DE1.0020.0002] # LAO VOWEL SIGN AY
0EC4 ; [.2DE2.0020.0002] # LAO VOWEL SIGN AI
AA80 ; [.2DE3.0020.0002] # TAI VIET LETTER LOW KO
AAB5 AA80 ; [.2DE3.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KO>
AAB6 AA80 ; [.2DE3.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KO>
AAB9 AA80 ; [.2DE3.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KO>
AABB AA80 ; [.2DE3.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KO>
AABC AA80 ; [.2DE3.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KO>
AA81 ; [.2DE4.0020.0002] # TAI VIET LETTER HIGH KO
AAB5 AA81 ; [.2DE4.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KO>
AAB6 AA81 ; [.2DE4.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KO>
AAB9 AA81 ; [.2DE4.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KO>
AABB AA81 ; [.2DE4.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KO>
AABC AA81 ; [.2DE4.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KO>
AA82 ; [.2DE5.0020.0002] # TAI VIET LETTER LOW KHO
AAB5 AA82 ; [.2DE5.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KHO>
AAB6 AA82 ; [.2DE5.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KHO>
AAB9 AA82 ; [.2DE5.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KHO>
AABB AA82 ; [.2DE5.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KHO>
AABC AA82 ; [.2DE5.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KHO>
AA83 ; [.2DE6.0020.0002] # TAI VIET LETTER HIGH KHO
AAB5 AA83 ; [.2DE6.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KHO>
AAB6 AA83 ; [.2DE6.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KHO>
AAB9 AA83 ; [.2DE6.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KHO>
AABB AA83 ; [.2DE6.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KHO>
AABC AA83 ; [.2DE6.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KHO>
AA84 ; [.2DE7.0020.0002] # TAI VIET LETTER LOW KHHO
AAB5 AA84 ; [.2DE7.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KHHO>
AAB6 AA84 ; [.2DE7.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KHHO>
AAB9 AA84 ; [.2DE7.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KHHO>
AABB AA84 ; [.2DE7.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KHHO>
AABC AA84 ; [.2DE7.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KHHO>
AA85 ; [.2DE8.0020.0002] # TAI VIET LETTER HIGH KHHO
AAB5 AA85 ; [.2DE8.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KHHO>
AAB6 AA85 ; [.2DE8.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KHHO>
AAB9 AA85 ; [.2DE8.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KHHO>
AABB AA85 ; [.2DE8.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KHHO>
AABC AA85 ; [.2DE8.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KHHO>
AA86 ; [.2DE9.0020.0002] # TAI VIET LETTER LOW GO
AAB5 AA86 ; [.2DE9.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW GO>
AAB6 AA86 ; [.2DE9.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW GO>
AAB9 AA86 ; [.2DE9.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW GO>
AABB AA86 ; [.2DE9.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW GO>
AABC AA86 ; [.2DE9.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW GO>
AA87 ; [.2DEA.0020.0002] # TAI VIET LETTER HIGH GO
AAB5 AA87 ; [.2DEA.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH GO>
AAB6 AA87 ; [.2DEA.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH GO>
AAB9 AA87 ; [.2DEA.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH GO>
AABB AA87 ; [.2DEA.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH GO>
AABC AA87 ; [.2DEA.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH GO>
AA88 ; [.2DEB.0020.0002] # TAI VIET LETTER LOW NGO
AAB5 AA88 ; [.2DEB.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NGO>
AAB6 AA88 ; [.2DEB.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NGO>
AAB9 AA88 ; [.2DEB.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NGO>
AABB AA88 ; [.2DEB.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NGO>
AABC AA88 ; [.2DEB.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NGO>
AA89 ; [.2DEC.0020.0002] # TAI VIET LETTER HIGH NGO
AAB5 AA89 ; [.2DEC.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NGO>
AAB6 AA89 ; [.2DEC.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NGO>
AAB9 AA89 ; [.2DEC.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NGO>
AABB AA89 ; [.2DEC.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NGO>
AABC AA89 ; [.2DEC.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NGO>
AA8A ; [.2DED.0020.0002] # TAI VIET LETTER LOW CO
AAB5 AA8A ; [.2DED.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW CO>
AAB6 AA8A ; [.2DED.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW CO>
AAB9 AA8A ; [.2DED.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW CO>
AABB AA8A ; [.2DED.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW CO>
AABC AA8A ; [.2DED.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW CO>
AA8B ; [.2DEE.0020.0002] # TAI VIET LETTER HIGH CO
AAB5 AA8B ; [.2DEE.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH CO>
AAB6 AA8B ; [.2DEE.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH CO>
AAB9 AA8B ; [.2DEE.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH CO>
AABB AA8B ; [.2DEE.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH CO>
AABC AA8B ; [.2DEE.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH CO>
AA8C ; [.2DEF.0020.0002] # TAI VIET LETTER LOW CHO
AAB5 AA8C ; [.2DEF.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW CHO>
AAB6 AA8C ; [.2DEF.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW CHO>
AAB9 AA8C ; [.2DEF.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW CHO>
AABB AA8C ; [.2DEF.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW CHO>
AABC AA8C ; [.2DEF.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW CHO>
AA8D ; [.2DF0.0020.0002] # TAI VIET LETTER HIGH CHO
AAB5 AA8D ; [.2DF0.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH CHO>
AAB6 AA8D ; [.2DF0.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH CHO>
AAB9 AA8D ; [.2DF0.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH CHO>
AABB AA8D ; [.2DF0.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH CHO>
AABC AA8D ; [.2DF0.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH CHO>
AA8E ; [.2DF1.0020.0002] # TAI VIET LETTER LOW SO
AAB5 AA8E ; [.2DF1.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW SO>
AAB6 AA8E ; [.2DF1.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW SO>
AAB9 AA8E ; [.2DF1.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW SO>
AABB AA8E ; [.2DF1.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW SO>
AABC AA8E ; [.2DF1.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW SO>
AA8F ; [.2DF2.0020.0002] # TAI VIET LETTER HIGH SO
AAB5 AA8F ; [.2DF2.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH SO>
AAB6 AA8F ; [.2DF2.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH SO>
AAB9 AA8F ; [.2DF2.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH SO>
AABB AA8F ; [.2DF2.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH SO>
AABC AA8F ; [.2DF2.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH SO>
AA90 ; [.2DF3.0020.0002] # TAI VIET LETTER LOW NYO
AAB5 AA90 ; [.2DF3.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NYO>
AAB6 AA90 ; [.2DF3.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NYO>
AAB9 AA90 ; [.2DF3.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NYO>
AABB AA90 ; [.2DF3.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NYO>
AABC AA90 ; [.2DF3.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NYO>
AA91 ; [.2DF4.0020.0002] # TAI VIET LETTER HIGH NYO
AAB5 AA91 ; [.2DF4.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NYO>
AAB6 AA91 ; [.2DF4.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NYO>
AAB9 AA91 ; [.2DF4.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NYO>
AABB AA91 ; [.2DF4.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NYO>
AABC AA91 ; [.2DF4.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NYO>
AA92 ; [.2DF5.0020.0002] # TAI VIET LETTER LOW DO
AAB5 AA92 ; [.2DF5.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW DO>
AAB6 AA92 ; [.2DF5.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW DO>
AAB9 AA92 ; [.2DF5.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW DO>
AABB AA92 ; [.2DF5.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW DO>
AABC AA92 ; [.2DF5.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW DO>
AA93 ; [.2DF6.0020.0002] # TAI VIET LETTER HIGH DO
AAB5 AA93 ; [.2DF6.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH DO>
AAB6 AA93 ; [.2DF6.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH DO>
AAB9 AA93 ; [.2DF6.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH DO>
AABB AA93 ; [.2DF6.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH DO>
AABC AA93 ; [.2DF6.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH DO>
AA94 ; [.2DF7.0020.0002] # TAI VIET LETTER LOW TO
AAB5 AA94 ; [.2DF7.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW TO>
AAB6 AA94 ; [.2DF7.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW TO>
AAB9 AA94 ; [.2DF7.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW TO>
AABB AA94 ; [.2DF7.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW TO>
AABC AA94 ; [.2DF7.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW TO>
AA95 ; [.2DF8.0020.0002] # TAI VIET LETTER HIGH TO
AAB5 AA95 ; [.2DF8.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH TO>
AAB6 AA95 ; [.2DF8.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH TO>
AAB9 AA95 ; [.2DF8.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH TO>
AABB AA95 ; [.2DF8.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH TO>
AABC AA95 ; [.2DF8.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH TO>
AA96 ; [.2DF9.0020.0002] # TAI VIET LETTER LOW THO
AAB5 AA96 ; [.2DF9.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW THO>
AAB6 AA96 ; [.2DF9.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW THO>
AAB9 AA96 ; [.2DF9.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW THO>
AABB AA96 ; [.2DF9.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW THO>
AABC AA96 ; [.2DF9.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW THO>
AA97 ; [.2DFA.0020.0002] # TAI VIET LETTER HIGH THO
AAB5 AA97 ; [.2DFA.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH THO>
AAB6 AA97 ; [.2DFA.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH THO>
AAB9 AA97 ; [.2DFA.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH THO>
AABB AA97 ; [.2DFA.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH THO>
AABC AA97 ; [.2DFA.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH THO>
AA98 ; [.2DFB.0020.0002] # TAI VIET LETTER LOW NO
AAB5 AA98 ; [.2DFB.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NO>
AAB6 AA98 ; [.2DFB.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NO>
AAB9 AA98 ; [.2DFB.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NO>
AABB AA98 ; [.2DFB.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NO>
AABC AA98 ; [.2DFB.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NO>
AA99 ; [.2DFC.0020.0002] # TAI VIET LETTER HIGH NO
AAB5 AA99 ; [.2DFC.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NO>
AAB6 AA99 ; [.2DFC.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NO>
AAB9 AA99 ; [.2DFC.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NO>
AABB AA99 ; [.2DFC.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NO>
AABC AA99 ; [.2DFC.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NO>
AA9A ; [.2DFD.0020.0002] # TAI VIET LETTER LOW BO
AAB5 AA9A ; [.2DFD.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW BO>
AAB6 AA9A ; [.2DFD.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW BO>
AAB9 AA9A ; [.2DFD.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW BO>
AABB AA9A ; [.2DFD.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW BO>
AABC AA9A ; [.2DFD.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW BO>
AA9B ; [.2DFE.0020.0002] # TAI VIET LETTER HIGH BO
AAB5 AA9B ; [.2DFE.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH BO>
AAB6 AA9B ; [.2DFE.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH BO>
AAB9 AA9B ; [.2DFE.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH BO>
AABB AA9B ; [.2DFE.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH BO>
AABC AA9B ; [.2DFE.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH BO>
AA9C ; [.2DFF.0020.0002] # TAI VIET LETTER LOW PO
AAB5 AA9C ; [.2DFF.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW PO>
AAB6 AA9C ; [.2DFF.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW PO>
AAB9 AA9C ; [.2DFF.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW PO>
AABB AA9C ; [.2DFF.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW PO>
AABC AA9C ; [.2DFF.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW PO>
AA9D ; [.2E00.0020.0002] # TAI VIET LETTER HIGH PO
AAB5 AA9D ; [.2E00.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH PO>
AAB6 AA9D ; [.2E00.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH PO>
AAB9 AA9D ; [.2E00.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH PO>
AABB AA9D ; [.2E00.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH PO>
AABC AA9D ; [.2E00.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH PO>
AA9E ; [.2E01.0020.0002] # TAI VIET LETTER LOW PHO
AAB5 AA9E ; [.2E01.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW PHO>
AAB6 AA9E ; [.2E01.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW PHO>
AAB9 AA9E ; [.2E01.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW PHO>
AABB AA9E ; [.2E01.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW PHO>
AABC AA9E ; [.2E01.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW PHO>
AA9F ; [.2E02.0020.0002] # TAI VIET LETTER HIGH PHO
AAB5 AA9F ; [.2E02.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH PHO>
AAB6 AA9F ; [.2E02.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH PHO>
AAB9 AA9F ; [.2E02.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH PHO>
AABB AA9F ; [.2E02.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH PHO>
AABC AA9F ; [.2E02.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH PHO>
AAA0 ; [.2E03.0020.0002] # TAI VIET LETTER LOW FO
AAB5 AAA0 ; [.2E03.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW FO>
AAB6 AAA0 ; [.2E03.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW FO>
AAB9 AAA0 ; [.2E03.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW FO>
AABB AAA0 ; [.2E03.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW FO>
AABC AAA0 ; [.2E03.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW FO>
AAA1 ; [.2E04.0020.0002] # TAI VIET LETTER HIGH FO
AAB5 AAA1 ; [.2E04.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH FO>
AAB6 AAA1 ; [.2E04.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH FO>
AAB9 AAA1 ; [.2E04.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH FO>
AABB AAA1 ; [.2E04.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH FO>
AABC AAA1 ; [.2E04.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH FO>
AAA2 ; [.2E05.0020.0002] # TAI VIET LETTER LOW MO
AAB5 AAA2 ; [.2E05.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW MO>
AAB6 AAA2 ; [.2E05.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW MO>
AAB9 AAA2 ; [.2E05.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW MO>
AABB AAA2 ; [.2E05.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW MO>
AABC AAA2 ; [.2E05.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW MO>
AAA3 ; [.2E06.0020.0002] # TAI VIET LETTER HIGH MO
AAB5 AAA3 ; [.2E06.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH MO>
AAB6 AAA3 ; [.2E06.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH MO>
AAB9 AAA3 ; [.2E06.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH MO>
AABB AAA3 ; [.2E06.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH MO>
AABC AAA3 ; [.2E06.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH MO>
AAA4 ; [.2E07.0020.0002] # TAI VIET LETTER LOW YO
AAB5 AAA4 ; [.2E07.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW YO>
AAB6 AAA4 ; [.2E07.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW YO>
AAB9 AAA4 ; [.2E07.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW YO>
AABB AAA4 ; [.2E07.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW YO>
AABC AAA4 ; [.2E07.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW YO>
AAA5 ; [.2E08.0020.0002] # TAI VIET LETTER HIGH YO
AAB5 AAA5 ; [.2E08.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH YO>
AAB6 AAA5 ; [.2E08.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH YO>
AAB9 AAA5 ; [.2E08.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH YO>
AABB AAA5 ; [.2E08.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH YO>
AABC AAA5 ; [.2E08.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH YO>
AAA6 ; [.2E09.0020.0002] # TAI VIET LETTER LOW RO
AAB5 AAA6 ; [.2E09.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW RO>
AAB6 AAA6 ; [.2E09.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW RO>
AAB9 AAA6 ; [.2E09.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW RO>
AABB AAA6 ; [.2E09.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW RO>
AABC AAA6 ; [.2E09.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW RO>
AAA7 ; [.2E0A.0020.0002] # TAI VIET LETTER HIGH RO
AAB5 AAA7 ; [.2E0A.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH RO>
AAB6 AAA7 ; [.2E0A.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH RO>
AAB9 AAA7 ; [.2E0A.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH RO>
AABB AAA7 ; [.2E0A.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH RO>
AABC AAA7 ; [.2E0A.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH RO>
AAA8 ; [.2E0B.0020.0002] # TAI VIET LETTER LOW LO
AAB5 AAA8 ; [.2E0B.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW LO>
AAB6 AAA8 ; [.2E0B.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW LO>
AAB9 AAA8 ; [.2E0B.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW LO>
AABB AAA8 ; [.2E0B.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW LO>
AABC AAA8 ; [.2E0B.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW LO>
AAA9 ; [.2E0C.0020.0002] # TAI VIET LETTER HIGH LO
AAB5 AAA9 ; [.2E0C.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH LO>
AAB6 AAA9 ; [.2E0C.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH LO>
AAB9 AAA9 ; [.2E0C.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH LO>
AABB AAA9 ; [.2E0C.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH LO>
AABC AAA9 ; [.2E0C.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH LO>
AAAA ; [.2E0D.0020.0002] # TAI VIET LETTER LOW VO
AAB5 AAAA ; [.2E0D.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW VO>
AAB6 AAAA ; [.2E0D.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW VO>
AAB9 AAAA ; [.2E0D.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW VO>
AABB AAAA ; [.2E0D.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW VO>
AABC AAAA ; [.2E0D.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW VO>
AAAB ; [.2E0E.0020.0002] # TAI VIET LETTER HIGH VO
AAB5 AAAB ; [.2E0E.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH VO>
AAB6 AAAB ; [.2E0E.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH VO>
AAB9 AAAB ; [.2E0E.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH VO>
AABB AAAB ; [.2E0E.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH VO>
AABC AAAB ; [.2E0E.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH VO>
AAAC ; [.2E0F.0020.0002] # TAI VIET LETTER LOW HO
AAB5 AAAC ; [.2E0F.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW HO>
AAB6 AAAC ; [.2E0F.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW HO>
AAB9 AAAC ; [.2E0F.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW HO>
AABB AAAC ; [.2E0F.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW HO>
AABC AAAC ; [.2E0F.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW HO>
AAAD ; [.2E10.0020.0002] # TAI VIET LETTER HIGH HO
AAB5 AAAD ; [.2E10.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH HO>
AAB6 AAAD ; [.2E10.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH HO>
AAB9 AAAD ; [.2E10.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH HO>
AABB AAAD ; [.2E10.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH HO>
AABC AAAD ; [.2E10.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH HO>
AAAE ; [.2E11.0020.0002] # TAI VIET LETTER LOW O
AAB5 AAAE ; [.2E11.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW O>
AAB6 AAAE ; [.2E11.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW O>
AAB9 AAAE ; [.2E11.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW O>
AABB AAAE ; [.2E11.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW O>
AABC AAAE ; [.2E11.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW O>
AAAF ; [.2E12.0020.0002] # TAI VIET LETTER HIGH O
AAB5 AAAF ; [.2E12.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH O>
AAB6 AAAF ; [.2E12.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH O>
AAB9 AAAF ; [.2E12.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH O>
AABB AAAF ; [.2E12.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH O>
AABC AAAF ; [.2E12.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH O>
AAB0 ; [.2E13.0020.0002] # TAI VIET MAI KANG
AAB1 ; [.2E14.0020.0002] # TAI VIET VOWEL AA
AAB2 ; [.2E15.0020.0002] # TAI VIET VOWEL I
AAB3 ; [.2E16.0020.0002] # TAI VIET VOWEL UE
AAB4 ; [.2E17.0020.0002] # TAI VIET VOWEL U
AAB5 ; [.2E18.0020.0002] # TAI VIET VOWEL E
AAB6 ; [.2E19.0020.0002] # TAI VIET VOWEL O
AAB7 ; [.2E1A.0020.0002] # TAI VIET MAI KHIT
AAB8 ; [.2E1B.0020.0002] # TAI VIET VOWEL IA
AAB9 ; [.2E1C.0020.0002] # TAI VIET VOWEL UEA
AABA ; [.2E1D.0020.0002] # TAI VIET VOWEL UA
AABB ; [.2E1E.0020.0002] # TAI VIET VOWEL AUE
AABC ; [.2E1F.0020.0002] # TAI VIET VOWEL AY
AABD ; [.2E20.0020.0002] # TAI VIET VOWEL AN
AABE ; [.2E21.0020.0002] # TAI VIET VOWEL AM
AAC0 ; [.2E22.0020.0002] # TAI VIET TONE MAI NUENG
AAC2 ; [.2E23.0020.0002] # TAI VIET TONE MAI SONG
AADB ; [.2E24.0020.0002] # TAI VIET SYMBOL KON
AADC ; [.2E25.0020.0002] # TAI VIET SYMBOL NUENG
0F40 ; [.2E26.0020.0002] # TIBETAN LETTER KA
0F69 ; [.2E26.0020.0002][.2E67.0020.0002] # TIBETAN LETTER KSSA
0F90 ; [.2E27.0020.0002] # TIBETAN SUBJOINED LETTER KA
0FB9 ; [.2E27.0020.0002][.2E67.0020.0002] # TIBETAN SUBJOINED LETTER KSSA
0F6B ; [.2E28.0020.0002] # TIBETAN LETTER KKA
0F41 ; [.2E29.0020.0002] # TIBETAN LETTER KHA
0F91 ; [.2E2A.0020.0002] # TIBETAN SUBJOINED LETTER KHA
0F42 ; [.2E2B.0020.0002] # TIBETAN LETTER GA
0F43 ; [.2E2B.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER GHA
0F92 ; [.2E2C.0020.0002] # TIBETAN SUBJOINED LETTER GA
0F93 ; [.2E2C.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER GHA
0F44 ; [.2E2D.0020.0002] # TIBETAN LETTER NGA
0F94 ; [.2E2E.0020.0002] # TIBETAN SUBJOINED LETTER NGA
0F45 ; [.2E2F.0020.0002] # TIBETAN LETTER CA
0F95 ; [.2E30.0020.0002] # TIBETAN SUBJOINED LETTER CA
0F46 ; [.2E31.0020.0002] # TIBETAN LETTER CHA
0F96 ; [.2E32.0020.0002] # TIBETAN SUBJOINED LETTER CHA
0F47 ; [.2E33.0020.0002] # TIBETAN LETTER JA
0F97 ; [.2E34.0020.0002] # TIBETAN SUBJOINED LETTER JA
0F49 ; [.2E35.0020.0002] # TIBETAN LETTER NYA
0F99 ; [.2E36.0020.0002] # TIBETAN SUBJOINED LETTER NYA
0F4A ; [.2E37.0020.0002] # TIBETAN LETTER TTA
0F9A ; [.2E38.0020.0002] # TIBETAN SUBJOINED LETTER TTA
0F4B ; [.2E39.0020.0002] # TIBETAN LETTER TTHA
0F9B ; [.2E3A.0020.0002] # TIBETAN SUBJOINED LETTER TTHA
0F4C ; [.2E3B.0020.0002] # TIBETAN LETTER DDA
0F4D ; [.2E3B.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER DDHA
0F9C ; [.2E3C.0020.0002] # TIBETAN SUBJOINED LETTER DDA
0F9D ; [.2E3C.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER DDHA
0F4E ; [.2E3D.0020.0002] # TIBETAN LETTER NNA
0F9E ; [.2E3E.0020.0002] # TIBETAN SUBJOINED LETTER NNA
0F4F ; [.2E3F.0020.0002] # TIBETAN LETTER TA
0F9F ; [.2E40.0020.0002] # TIBETAN SUBJOINED LETTER TA
0F50 ; [.2E41.0020.0002] # TIBETAN LETTER THA
0FA0 ; [.2E42.0020.0002] # TIBETAN SUBJOINED LETTER THA
0F51 ; [.2E43.0020.0002] # TIBETAN LETTER DA
0F52 ; [.2E43.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER DHA
0FA1 ; [.2E44.0020.0002] # TIBETAN SUBJOINED LETTER DA
0FA2 ; [.2E44.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER DHA
0F53 ; [.2E45.0020.0002] # TIBETAN LETTER NA
0FA3 ; [.2E46.0020.0002] # TIBETAN SUBJOINED LETTER NA
0F54 ; [.2E47.0020.0002] # TIBETAN LETTER PA
0FA4 ; [.2E48.0020.0002] # TIBETAN SUBJOINED LETTER PA
0F55 ; [.2E49.0020.0002] # TIBETAN LETTER PHA
0FA5 ; [.2E4A.0020.0002] # TIBETAN SUBJOINED LETTER PHA
0F56 ; [.2E4B.0020.0002] # TIBETAN LETTER BA
0F57 ; [.2E4B.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER BHA
0FA6 ; [.2E4C.0020.0002] # TIBETAN SUBJOINED LETTER BA
0FA7 ; [.2E4C.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER BHA
0F58 ; [.2E4D.0020.0002] # TIBETAN LETTER MA
0FA8 ; [.2E4E.0020.0002] # TIBETAN SUBJOINED LETTER MA
0F59 ; [.2E4F.0020.0002] # TIBETAN LETTER TSA
0FA9 ; [.2E50.0020.0002] # TIBETAN SUBJOINED LETTER TSA
0F5A ; [.2E51.0020.0002] # TIBETAN LETTER TSHA
0FAA ; [.2E52.0020.0002] # TIBETAN SUBJOINED LETTER TSHA
0F5B ; [.2E53.0020.0002] # TIBETAN LETTER DZA
0F5C ; [.2E53.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER DZHA
0FAB ; [.2E54.0020.0002] # TIBETAN SUBJOINED LETTER DZA
0FAC ; [.2E54.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER DZHA
0F5D ; [.2E55.0020.0002] # TIBETAN LETTER WA
0FAD ; [.2E56.0020.0002] # TIBETAN SUBJOINED LETTER WA
0FBA ; [.2E56.0020.0004][.0000.0111.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM WA
0F5E ; [.2E57.0020.0002] # TIBETAN LETTER ZHA
0FAE ; [.2E58.0020.0002] # TIBETAN SUBJOINED LETTER ZHA
0F5F ; [.2E59.0020.0002] # TIBETAN LETTER ZA
0FAF ; [.2E5A.0020.0002] # TIBETAN SUBJOINED LETTER ZA
0F60 ; [.2E5B.0020.0002] # TIBETAN LETTER -A
0FB0 ; [.2E5C.0020.0002] # TIBETAN SUBJOINED LETTER -A
0F61 ; [.2E5D.0020.0002] # TIBETAN LETTER YA
0FB1 ; [.2E5E.0020.0002] # TIBETAN SUBJOINED LETTER YA
0FBB ; [.2E5E.0020.0004][.0000.0111.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM YA
0F62 ; [.2E5F.0020.0002] # TIBETAN LETTER RA
0F6A ; [.2E5F.0020.0004][.0000.0111.0004] # TIBETAN LETTER FIXED-FORM RA
0FB2 ; [.2E60.0020.0002] # TIBETAN SUBJOINED LETTER RA
0FBC ; [.2E60.0020.0004][.0000.0111.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM RA
0F6C ; [.2E61.0020.0002] # TIBETAN LETTER RRA
0F63 ; [.2E62.0020.0002] # TIBETAN LETTER LA
0FB3 ; [.2E63.0020.0002] # TIBETAN SUBJOINED LETTER LA
0F64 ; [.2E64.0020.0002] # TIBETAN LETTER SHA
0FB4 ; [.2E65.0020.0002] # TIBETAN SUBJOINED LETTER SHA
0F65 ; [.2E66.0020.0002] # TIBETAN LETTER SSA
0FB5 ; [.2E67.0020.0002] # TIBETAN SUBJOINED LETTER SSA
0F66 ; [.2E68.0020.0002] # TIBETAN LETTER SA
0FB6 ; [.2E69.0020.0002] # TIBETAN SUBJOINED LETTER SA
0F67 ; [.2E6A.0020.0002] # TIBETAN LETTER HA
0FB7 ; [.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER HA
0F68 ; [.2E6C.0020.0002] # TIBETAN LETTER A
0F00 ; [.2E6C.0020.0004][.2E83.0020.0004][.0000.00C4.0004] # TIBETAN SYLLABLE OM
0FB8 ; [.2E6D.0020.0002] # TIBETAN SUBJOINED LETTER A
0F88 ; [.2E6E.0020.0002] # TIBETAN SIGN LCE TSA CAN
0F8D ; [.2E6F.0020.0002] # TIBETAN SUBJOINED SIGN LCE TSA CAN
0F89 ; [.2E70.0020.0002] # TIBETAN SIGN MCHU CAN
0F8E ; [.2E71.0020.0002] # TIBETAN SUBJOINED SIGN MCHU CAN
0F8C ; [.2E72.0020.0002] # TIBETAN SIGN INVERTED MCHU CAN
0F8F ; [.2E73.0020.0002] # TIBETAN SUBJOINED SIGN INVERTED MCHU CAN
0F8A ; [.2E74.0020.0002] # TIBETAN SIGN GRU CAN RGYINGS
0F8B ; [.2E75.0020.0002] # TIBETAN SIGN GRU MED RGYINGS
0F71 ; [.2E76.0020.0002] # TIBETAN VOWEL SIGN AA
0F72 ; [.2E77.0020.0002] # TIBETAN VOWEL SIGN I
0F73 ; [.2E78.0020.0002] # TIBETAN VOWEL SIGN II
0F71 0F72 ; [.2E78.0020.0002] # TIBETAN VOWEL SIGN II
0F80 ; [.2E79.0020.0002] # TIBETAN VOWEL SIGN REVERSED I
0F81 ; [.2E7A.0020.0002] # TIBETAN VOWEL SIGN REVERSED II
0F71 0F80 ; [.2E7A.0020.0002] # TIBETAN VOWEL SIGN REVERSED II
0F74 ; [.2E7B.0020.0002] # TIBETAN VOWEL SIGN U
0F75 ; [.2E7C.0020.0002] # TIBETAN VOWEL SIGN UU
0F71 0F74 ; [.2E7C.0020.0002] # TIBETAN VOWEL SIGN UU
0F76 ; [.2E7D.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R
0FB2 0F80 ; [.2E7D.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R
0F77 ; [.2E7E.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR
0FB2 0F71 0F80 ; [.2E7E.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR
0FB2 0F81 ; [.2E7E.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR
0F78 ; [.2E7F.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L
0FB3 0F80 ; [.2E7F.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L
0F79 ; [.2E80.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL
0FB3 0F71 0F80 ; [.2E80.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL
0FB3 0F81 ; [.2E80.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL
0F7A ; [.2E81.0020.0002] # TIBETAN VOWEL SIGN E
0F7B ; [.2E82.0020.0002] # TIBETAN VOWEL SIGN EE
0F7C ; [.2E83.0020.0002] # TIBETAN VOWEL SIGN O
0F7D ; [.2E84.0020.0002] # TIBETAN VOWEL SIGN OO
0F84 ; [.2E85.0020.0002] # TIBETAN MARK HALANTA
11C72 ; [.2E86.0020.0002] # MARCHEN LETTER KA
11C92 ; [.2E87.0020.0002] # MARCHEN SUBJOINED LETTER KA
11C73 ; [.2E88.0020.0002] # MARCHEN LETTER KHA
11C93 ; [.2E89.0020.0002] # MARCHEN SUBJOINED LETTER KHA
11C74 ; [.2E8A.0020.0002] # MARCHEN LETTER GA
11C94 ; [.2E8B.0020.0002] # MARCHEN SUBJOINED LETTER GA
11C75 ; [.2E8C.0020.0002] # MARCHEN LETTER NGA
11C95 ; [.2E8D.0020.0002] # MARCHEN SUBJOINED LETTER NGA
11C76 ; [.2E8E.0020.0002] # MARCHEN LETTER CA
11C96 ; [.2E8F.0020.0002] # MARCHEN SUBJOINED LETTER CA
11C77 ; [.2E90.0020.0002] # MARCHEN LETTER CHA
11C97 ; [.2E91.0020.0002] # MARCHEN SUBJOINED LETTER CHA
11C78 ; [.2E92.0020.0002] # MARCHEN LETTER JA
11C98 ; [.2E93.0020.0002] # MARCHEN SUBJOINED LETTER JA
11C79 ; [.2E94.0020.0002] # MARCHEN LETTER NYA
11C99 ; [.2E95.0020.0002] # MARCHEN SUBJOINED LETTER NYA
11C7A ; [.2E96.0020.0002] # MARCHEN LETTER TA
11C9A ; [.2E97.0020.0002] # MARCHEN SUBJOINED LETTER TA
11C7B ; [.2E98.0020.0002] # MARCHEN LETTER THA
11C9B ; [.2E99.0020.0002] # MARCHEN SUBJOINED LETTER THA
11C7C ; [.2E9A.0020.0002] # MARCHEN LETTER DA
11C9C ; [.2E9B.0020.0002] # MARCHEN SUBJOINED LETTER DA
11C7D ; [.2E9C.0020.0002] # MARCHEN LETTER NA
11C9D ; [.2E9D.0020.0002] # MARCHEN SUBJOINED LETTER NA
11C7E ; [.2E9E.0020.0002] # MARCHEN LETTER PA
11C9E ; [.2E9F.0020.0002] # MARCHEN SUBJOINED LETTER PA
11C7F ; [.2EA0.0020.0002] # MARCHEN LETTER PHA
11C9F ; [.2EA1.0020.0002] # MARCHEN SUBJOINED LETTER PHA
11C80 ; [.2EA2.0020.0002] # MARCHEN LETTER BA
11CA0 ; [.2EA3.0020.0002] # MARCHEN SUBJOINED LETTER BA
11C81 ; [.2EA4.0020.0002] # MARCHEN LETTER MA
11CA1 ; [.2EA5.0020.0002] # MARCHEN SUBJOINED LETTER MA
11C82 ; [.2EA6.0020.0002] # MARCHEN LETTER TSA
11CA2 ; [.2EA7.0020.0002] # MARCHEN SUBJOINED LETTER TSA
11C83 ; [.2EA8.0020.0002] # MARCHEN LETTER TSHA
11CA3 ; [.2EA9.0020.0002] # MARCHEN SUBJOINED LETTER TSHA
11C84 ; [.2EAA.0020.0002] # MARCHEN LETTER DZA
11CA4 ; [.2EAB.0020.0002] # MARCHEN SUBJOINED LETTER DZA
11C85 ; [.2EAC.0020.0002] # MARCHEN LETTER WA
11CA5 ; [.2EAD.0020.0002] # MARCHEN SUBJOINED LETTER WA
11C86 ; [.2EAE.0020.0002] # MARCHEN LETTER ZHA
11CA6 ; [.2EAF.0020.0002] # MARCHEN SUBJOINED LETTER ZHA
11C87 ; [.2EB0.0020.0002] # MARCHEN LETTER ZA
11CA7 ; [.2EB1.0020.0002] # MARCHEN SUBJOINED LETTER ZA
11C88 ; [.2EB2.0020.0002] # MARCHEN LETTER -A
11C89 ; [.2EB3.0020.0002] # MARCHEN LETTER YA
11CA9 ; [.2EB4.0020.0002] # MARCHEN SUBJOINED LETTER YA
11C8A ; [.2EB5.0020.0002] # MARCHEN LETTER RA
11CAA ; [.2EB6.0020.0002] # MARCHEN SUBJOINED LETTER RA
11C8B ; [.2EB7.0020.0002] # MARCHEN LETTER LA
11CAB ; [.2EB8.0020.0002] # MARCHEN SUBJOINED LETTER LA
11C8C ; [.2EB9.0020.0002] # MARCHEN LETTER SHA
11CAC ; [.2EBA.0020.0002] # MARCHEN SUBJOINED LETTER SHA
11C8D ; [.2EBB.0020.0002] # MARCHEN LETTER SA
11CAD ; [.2EBC.0020.0002] # MARCHEN SUBJOINED LETTER SA
11C8E ; [.2EBD.0020.0002] # MARCHEN LETTER HA
11CAE ; [.2EBE.0020.0002] # MARCHEN SUBJOINED LETTER HA
11C8F ; [.2EBF.0020.0002] # MARCHEN LETTER A
11CAF ; [.2EC0.0020.0002] # MARCHEN SUBJOINED LETTER A
11CB0 ; [.2EC1.0020.0002] # MARCHEN VOWEL SIGN AA
11CB1 ; [.2EC2.0020.0002] # MARCHEN VOWEL SIGN I
11CB2 ; [.2EC3.0020.0002] # MARCHEN VOWEL SIGN U
11CB3 ; [.2EC4.0020.0002] # MARCHEN VOWEL SIGN E
11CB4 ; [.2EC5.0020.0002] # MARCHEN VOWEL SIGN O
1C00 ; [.2EC6.0020.0002] # LEPCHA LETTER KA
1C01 ; [.2EC7.0020.0002] # LEPCHA LETTER KLA
1C02 ; [.2EC8.0020.0002] # LEPCHA LETTER KHA
1C03 ; [.2EC9.0020.0002] # LEPCHA LETTER GA
1C04 ; [.2ECA.0020.0002] # LEPCHA LETTER GLA
1C05 ; [.2ECB.0020.0002] # LEPCHA LETTER NGA
1C06 ; [.2ECC.0020.0002] # LEPCHA LETTER CA
1C07 ; [.2ECD.0020.0002] # LEPCHA LETTER CHA
1C08 ; [.2ECE.0020.0002] # LEPCHA LETTER JA
1C09 ; [.2ECF.0020.0002] # LEPCHA LETTER NYA
1C4D ; [.2ED0.0020.0002] # LEPCHA LETTER TTA
1C4E ; [.2ED1.0020.0002] # LEPCHA LETTER TTHA
1C4F ; [.2ED2.0020.0002] # LEPCHA LETTER DDA
1C0A ; [.2ED3.0020.0002] # LEPCHA LETTER TA
1C0B ; [.2ED4.0020.0002] # LEPCHA LETTER THA
1C0C ; [.2ED5.0020.0002] # LEPCHA LETTER DA
1C0D ; [.2ED6.0020.0002] # LEPCHA LETTER NA
1C0E ; [.2ED7.0020.0002] # LEPCHA LETTER PA
1C0F ; [.2ED8.0020.0002] # LEPCHA LETTER PLA
1C10 ; [.2ED9.0020.0002] # LEPCHA LETTER PHA
1C11 ; [.2EDA.0020.0002] # LEPCHA LETTER FA
1C12 ; [.2EDB.0020.0002] # LEPCHA LETTER FLA
1C13 ; [.2EDC.0020.0002] # LEPCHA LETTER BA
1C14 ; [.2EDD.0020.0002] # LEPCHA LETTER BLA
1C15 ; [.2EDE.0020.0002] # LEPCHA LETTER MA
1C16 ; [.2EDF.0020.0002] # LEPCHA LETTER MLA
1C17 ; [.2EE0.0020.0002] # LEPCHA LETTER TSA
1C18 ; [.2EE1.0020.0002] # LEPCHA LETTER TSHA
1C19 ; [.2EE2.0020.0002] # LEPCHA LETTER DZA
1C1A ; [.2EE3.0020.0002] # LEPCHA LETTER YA
1C24 ; [.2EE4.0020.0002] # LEPCHA SUBJOINED LETTER YA
1C1B ; [.2EE5.0020.0002] # LEPCHA LETTER RA
1C25 ; [.2EE6.0020.0002] # LEPCHA SUBJOINED LETTER RA
1C1C ; [.2EE7.0020.0002] # LEPCHA LETTER LA
1C1D ; [.2EE8.0020.0002] # LEPCHA LETTER HA
1C1E ; [.2EE9.0020.0002] # LEPCHA LETTER HLA
1C1F ; [.2EEA.0020.0002] # LEPCHA LETTER VA
1C20 ; [.2EEB.0020.0002] # LEPCHA LETTER SA
1C21 ; [.2EEC.0020.0002] # LEPCHA LETTER SHA
1C22 ; [.2EED.0020.0002] # LEPCHA LETTER WA
1C23 ; [.2EEE.0020.0002] # LEPCHA LETTER A
1C36 ; [.2EEF.0020.0002] # LEPCHA SIGN RAN
1C26 ; [.2EF0.0020.0002] # LEPCHA VOWEL SIGN AA
1C27 ; [.2EF1.0020.0002] # LEPCHA VOWEL SIGN I
1C28 ; [.2EF2.0020.0002] # LEPCHA VOWEL SIGN O
1C29 ; [.2EF3.0020.0002] # LEPCHA VOWEL SIGN OO
1C2A ; [.2EF4.0020.0002] # LEPCHA VOWEL SIGN U
1C2B ; [.2EF5.0020.0002] # LEPCHA VOWEL SIGN UU
1C2C ; [.2EF6.0020.0002] # LEPCHA VOWEL SIGN E
1C2D ; [.2EF7.0020.0002] # LEPCHA CONSONANT SIGN K
1C2E ; [.2EF8.0020.0002] # LEPCHA CONSONANT SIGN M
1C2F ; [.2EF9.0020.0002] # LEPCHA CONSONANT SIGN L
1C30 ; [.2EFA.0020.0002] # LEPCHA CONSONANT SIGN N
1C31 ; [.2EFB.0020.0002] # LEPCHA CONSONANT SIGN P
1C32 ; [.2EFC.0020.0002] # LEPCHA CONSONANT SIGN R
1C33 ; [.2EFD.0020.0002] # LEPCHA CONSONANT SIGN T
1C34 ; [.2EFE.0020.0002] # LEPCHA CONSONANT SIGN NYIN-DO
1C35 ; [.2EFF.0020.0002] # LEPCHA CONSONANT SIGN KANG
A840 ; [.2F00.0020.0002] # PHAGS-PA LETTER KA
A841 ; [.2F01.0020.0002] # PHAGS-PA LETTER KHA
A842 ; [.2F02.0020.0002] # PHAGS-PA LETTER GA
A843 ; [.2F03.0020.0002] # PHAGS-PA LETTER NGA
A844 ; [.2F04.0020.0002] # PHAGS-PA LETTER CA
A845 ; [.2F05.0020.0002] # PHAGS-PA LETTER CHA
A846 ; [.2F06.0020.0002] # PHAGS-PA LETTER JA
A847 ; [.2F07.0020.0002] # PHAGS-PA LETTER NYA
A869 ; [.2F08.0020.0002] # PHAGS-PA LETTER TTA
A86A ; [.2F09.0020.0002] # PHAGS-PA LETTER TTHA
A86B ; [.2F0A.0020.0002] # PHAGS-PA LETTER DDA
A86C ; [.2F0B.0020.0002] # PHAGS-PA LETTER NNA
A848 ; [.2F0C.0020.0002] # PHAGS-PA LETTER TA
A849 ; [.2F0D.0020.0002] # PHAGS-PA LETTER THA
A84A ; [.2F0E.0020.0002] # PHAGS-PA LETTER DA
A84B ; [.2F0F.0020.0002] # PHAGS-PA LETTER NA
A84C ; [.2F10.0020.0002] # PHAGS-PA LETTER PA
A84D ; [.2F11.0020.0002] # PHAGS-PA LETTER PHA
A84E ; [.2F12.0020.0002] # PHAGS-PA LETTER BA
A84F ; [.2F13.0020.0002] # PHAGS-PA LETTER MA
A850 ; [.2F14.0020.0002] # PHAGS-PA LETTER TSA
A851 ; [.2F15.0020.0002] # PHAGS-PA LETTER TSHA
A852 ; [.2F16.0020.0002] # PHAGS-PA LETTER DZA
A853 ; [.2F17.0020.0002] # PHAGS-PA LETTER WA
A867 ; [.2F18.0020.0002] # PHAGS-PA SUBJOINED LETTER WA
A854 ; [.2F19.0020.0002] # PHAGS-PA LETTER ZHA
A855 ; [.2F1A.0020.0002] # PHAGS-PA LETTER ZA
A856 ; [.2F1B.0020.0002] # PHAGS-PA LETTER SMALL A
A857 ; [.2F1C.0020.0002] # PHAGS-PA LETTER YA
A868 ; [.2F1D.0020.0002] # PHAGS-PA SUBJOINED LETTER YA
A86D ; [.2F1E.0020.0002] # PHAGS-PA LETTER ALTERNATE YA
A858 ; [.2F1F.0020.0002] # PHAGS-PA LETTER RA
A871 ; [.2F20.0020.0002] # PHAGS-PA SUBJOINED LETTER RA
A872 ; [.2F21.0020.0002] # PHAGS-PA SUPERFIXED LETTER RA
A859 ; [.2F22.0020.0002] # PHAGS-PA LETTER LA
A85A ; [.2F23.0020.0002] # PHAGS-PA LETTER SHA
A86E ; [.2F24.0020.0002] # PHAGS-PA LETTER VOICELESS SHA
A85B ; [.2F25.0020.0002] # PHAGS-PA LETTER SA
A85C ; [.2F26.0020.0002] # PHAGS-PA LETTER HA
A86F ; [.2F27.0020.0002] # PHAGS-PA LETTER VOICED HA
A870 ; [.2F28.0020.0002] # PHAGS-PA LETTER ASPIRATED FA
A85D ; [.2F29.0020.0002] # PHAGS-PA LETTER A
A862 ; [.2F2A.0020.0002] # PHAGS-PA LETTER QA
A863 ; [.2F2B.0020.0002] # PHAGS-PA LETTER XA
A864 ; [.2F2C.0020.0002] # PHAGS-PA LETTER FA
A865 ; [.2F2D.0020.0002] # PHAGS-PA LETTER GGA
A85E ; [.2F2E.0020.0002] # PHAGS-PA LETTER I
A85F ; [.2F2F.0020.0002] # PHAGS-PA LETTER U
A860 ; [.2F30.0020.0002] # PHAGS-PA LETTER E
A861 ; [.2F31.0020.0002] # PHAGS-PA LETTER O
A866 ; [.2F32.0020.0002] # PHAGS-PA LETTER EE
A873 ; [.2F33.0020.0002] # PHAGS-PA LETTER CANDRABINDU
1900 ; [.2F34.0020.0002] # LIMBU VOWEL-CARRIER LETTER
1901 ; [.2F35.0020.0002] # LIMBU LETTER KA
1902 ; [.2F36.0020.0002] # LIMBU LETTER KHA
1903 ; [.2F37.0020.0002] # LIMBU LETTER GA
1904 ; [.2F38.0020.0002] # LIMBU LETTER GHA
1905 ; [.2F39.0020.0002] # LIMBU LETTER NGA
1906 ; [.2F3A.0020.0002] # LIMBU LETTER CA
1907 ; [.2F3B.0020.0002] # LIMBU LETTER CHA
1908 ; [.2F3C.0020.0002] # LIMBU LETTER JA
191D ; [.2F3C.0020.0004][.2F5A.0020.0004] # LIMBU LETTER GYAN
1909 ; [.2F3D.0020.0002] # LIMBU LETTER JHA
190A ; [.2F3E.0020.0002] # LIMBU LETTER YAN
190B ; [.2F3F.0020.0002] # LIMBU LETTER TA
191E ; [.2F3F.0020.0004][.2F5B.0020.0004] # LIMBU LETTER TRA
190C ; [.2F40.0020.0002] # LIMBU LETTER THA
190D ; [.2F41.0020.0002] # LIMBU LETTER DA
190E ; [.2F42.0020.0002] # LIMBU LETTER DHA
190F ; [.2F43.0020.0002] # LIMBU LETTER NA
1910 ; [.2F44.0020.0002] # LIMBU LETTER PA
1911 ; [.2F45.0020.0002] # LIMBU LETTER PHA
1912 ; [.2F46.0020.0002] # LIMBU LETTER BA
1913 ; [.2F47.0020.0002] # LIMBU LETTER BHA
1914 ; [.2F48.0020.0002] # LIMBU LETTER MA
1915 ; [.2F49.0020.0002] # LIMBU LETTER YA
1916 ; [.2F4A.0020.0002] # LIMBU LETTER RA
1917 ; [.2F4B.0020.0002] # LIMBU LETTER LA
1918 ; [.2F4C.0020.0002] # LIMBU LETTER WA
1919 ; [.2F4D.0020.0002] # LIMBU LETTER SHA
191A ; [.2F4E.0020.0002] # LIMBU LETTER SSA
191B ; [.2F4F.0020.0002] # LIMBU LETTER SA
191C ; [.2F50.0020.0002] # LIMBU LETTER HA
1920 ; [.2F51.0020.0002] # LIMBU VOWEL SIGN A
1921 ; [.2F52.0020.0002] # LIMBU VOWEL SIGN I
1922 ; [.2F53.0020.0002] # LIMBU VOWEL SIGN U
1923 ; [.2F54.0020.0002] # LIMBU VOWEL SIGN EE
1924 ; [.2F55.0020.0002] # LIMBU VOWEL SIGN AI
1925 ; [.2F56.0020.0002] # LIMBU VOWEL SIGN OO
1926 ; [.2F57.0020.0002] # LIMBU VOWEL SIGN AU
1927 ; [.2F58.0020.0002] # LIMBU VOWEL SIGN E
1928 ; [.2F59.0020.0002] # LIMBU VOWEL SIGN O
1929 ; [.2F5A.0020.0002] # LIMBU SUBJOINED LETTER YA
192A ; [.2F5B.0020.0002] # LIMBU SUBJOINED LETTER RA
192B ; [.2F5C.0020.0002] # LIMBU SUBJOINED LETTER WA
1930 ; [.2F5D.0020.0002] # LIMBU SMALL LETTER KA
1931 ; [.2F5E.0020.0002] # LIMBU SMALL LETTER NGA
1932 ; [.2F5F.0020.0002] # LIMBU SMALL LETTER ANUSVARA
1933 ; [.2F60.0020.0002] # LIMBU SMALL LETTER TA
1934 ; [.2F61.0020.0002] # LIMBU SMALL LETTER NA
1935 ; [.2F62.0020.0002] # LIMBU SMALL LETTER PA
1936 ; [.2F63.0020.0002] # LIMBU SMALL LETTER MA
1937 ; [.2F64.0020.0002] # LIMBU SMALL LETTER RA
1938 ; [.2F65.0020.0002] # LIMBU SMALL LETTER LA
1700 ; [.2F66.0020.0002] # TAGALOG LETTER A
1701 ; [.2F67.0020.0002] # TAGALOG LETTER I
1702 ; [.2F68.0020.0002] # TAGALOG LETTER U
1703 ; [.2F69.0020.0002] # TAGALOG LETTER KA
1704 ; [.2F6A.0020.0002] # TAGALOG LETTER GA
1705 ; [.2F6B.0020.0002] # TAGALOG LETTER NGA
1706 ; [.2F6C.0020.0002] # TAGALOG LETTER TA
1707 ; [.2F6D.0020.0002] # TAGALOG LETTER DA
1708 ; [.2F6E.0020.0002] # TAGALOG LETTER NA
1709 ; [.2F6F.0020.0002] # TAGALOG LETTER PA
170A ; [.2F70.0020.0002] # TAGALOG LETTER BA
170B ; [.2F71.0020.0002] # TAGALOG LETTER MA
170C ; [.2F72.0020.0002] # TAGALOG LETTER YA
170E ; [.2F73.0020.0002] # TAGALOG LETTER LA
170F ; [.2F74.0020.0002] # TAGALOG LETTER WA
1710 ; [.2F75.0020.0002] # TAGALOG LETTER SA
1711 ; [.2F76.0020.0002] # TAGALOG LETTER HA
1712 ; [.2F77.0020.0002] # TAGALOG VOWEL SIGN I
1713 ; [.2F78.0020.0002] # TAGALOG VOWEL SIGN U
1714 ; [.2F79.0020.0002] # TAGALOG SIGN VIRAMA
1720 ; [.2F7A.0020.0002] # HANUNOO LETTER A
1721 ; [.2F7B.0020.0002] # HANUNOO LETTER I
1722 ; [.2F7C.0020.0002] # HANUNOO LETTER U
1723 ; [.2F7D.0020.0002] # HANUNOO LETTER KA
1724 ; [.2F7E.0020.0002] # HANUNOO LETTER GA
1725 ; [.2F7F.0020.0002] # HANUNOO LETTER NGA
1726 ; [.2F80.0020.0002] # HANUNOO LETTER TA
1727 ; [.2F81.0020.0002] # HANUNOO LETTER DA
1728 ; [.2F82.0020.0002] # HANUNOO LETTER NA
1729 ; [.2F83.0020.0002] # HANUNOO LETTER PA
172A ; [.2F84.0020.0002] # HANUNOO LETTER BA
172B ; [.2F85.0020.0002] # HANUNOO LETTER MA
172C ; [.2F86.0020.0002] # HANUNOO LETTER YA
172D ; [.2F87.0020.0002] # HANUNOO LETTER RA
172E ; [.2F88.0020.0002] # HANUNOO LETTER LA
172F ; [.2F89.0020.0002] # HANUNOO LETTER WA
1730 ; [.2F8A.0020.0002] # HANUNOO LETTER SA
1731 ; [.2F8B.0020.0002] # HANUNOO LETTER HA
1732 ; [.2F8C.0020.0002] # HANUNOO VOWEL SIGN I
1733 ; [.2F8D.0020.0002] # HANUNOO VOWEL SIGN U
1734 ; [.2F8E.0020.0002] # HANUNOO SIGN PAMUDPOD
1740 ; [.2F8F.0020.0002] # BUHID LETTER A
1741 ; [.2F90.0020.0002] # BUHID LETTER I
1742 ; [.2F91.0020.0002] # BUHID LETTER U
1743 ; [.2F92.0020.0002] # BUHID LETTER KA
1744 ; [.2F93.0020.0002] # BUHID LETTER GA
1745 ; [.2F94.0020.0002] # BUHID LETTER NGA
1746 ; [.2F95.0020.0002] # BUHID LETTER TA
1747 ; [.2F96.0020.0002] # BUHID LETTER DA
1748 ; [.2F97.0020.0002] # BUHID LETTER NA
1749 ; [.2F98.0020.0002] # BUHID LETTER PA
174A ; [.2F99.0020.0002] # BUHID LETTER BA
174B ; [.2F9A.0020.0002] # BUHID LETTER MA
174C ; [.2F9B.0020.0002] # BUHID LETTER YA
174D ; [.2F9C.0020.0002] # BUHID LETTER RA
174E ; [.2F9D.0020.0002] # BUHID LETTER LA
174F ; [.2F9E.0020.0002] # BUHID LETTER WA
1750 ; [.2F9F.0020.0002] # BUHID LETTER SA
1751 ; [.2FA0.0020.0002] # BUHID LETTER HA
1752 ; [.2FA1.0020.0002] # BUHID VOWEL SIGN I
1753 ; [.2FA2.0020.0002] # BUHID VOWEL SIGN U
1760 ; [.2FA3.0020.0002] # TAGBANWA LETTER A
1761 ; [.2FA4.0020.0002] # TAGBANWA LETTER I
1762 ; [.2FA5.0020.0002] # TAGBANWA LETTER U
1763 ; [.2FA6.0020.0002] # TAGBANWA LETTER KA
1764 ; [.2FA7.0020.0002] # TAGBANWA LETTER GA
1765 ; [.2FA8.0020.0002] # TAGBANWA LETTER NGA
1766 ; [.2FA9.0020.0002] # TAGBANWA LETTER TA
1767 ; [.2FAA.0020.0002] # TAGBANWA LETTER DA
1768 ; [.2FAB.0020.0002] # TAGBANWA LETTER NA
1769 ; [.2FAC.0020.0002] # TAGBANWA LETTER PA
176A ; [.2FAD.0020.0002] # TAGBANWA LETTER BA
176B ; [.2FAE.0020.0002] # TAGBANWA LETTER MA
176C ; [.2FAF.0020.0002] # TAGBANWA LETTER YA
176E ; [.2FB0.0020.0002] # TAGBANWA LETTER LA
176F ; [.2FB1.0020.0002] # TAGBANWA LETTER WA
1770 ; [.2FB2.0020.0002] # TAGBANWA LETTER SA
1772 ; [.2FB3.0020.0002] # TAGBANWA VOWEL SIGN I
1773 ; [.2FB4.0020.0002] # TAGBANWA VOWEL SIGN U
1A00 ; [.2FB5.0020.0002] # BUGINESE LETTER KA
1A01 ; [.2FB6.0020.0002] # BUGINESE LETTER GA
1A02 ; [.2FB7.0020.0002] # BUGINESE LETTER NGA
1A03 ; [.2FB8.0020.0002] # BUGINESE LETTER NGKA
1A04 ; [.2FB9.0020.0002] # BUGINESE LETTER PA
1A05 ; [.2FBA.0020.0002] # BUGINESE LETTER BA
1A06 ; [.2FBB.0020.0002] # BUGINESE LETTER MA
1A07 ; [.2FBC.0020.0002] # BUGINESE LETTER MPA
1A08 ; [.2FBD.0020.0002] # BUGINESE LETTER TA
1A09 ; [.2FBE.0020.0002] # BUGINESE LETTER DA
1A0A ; [.2FBF.0020.0002] # BUGINESE LETTER NA
1A0B ; [.2FC0.0020.0002] # BUGINESE LETTER NRA
1A0C ; [.2FC1.0020.0002] # BUGINESE LETTER CA
1A0D ; [.2FC2.0020.0002] # BUGINESE LETTER JA
1A0E ; [.2FC3.0020.0002] # BUGINESE LETTER NYA
1A0F ; [.2FC4.0020.0002] # BUGINESE LETTER NYCA
1A10 ; [.2FC5.0020.0002] # BUGINESE LETTER YA
1A11 ; [.2FC6.0020.0002] # BUGINESE LETTER RA
1A12 ; [.2FC7.0020.0002] # BUGINESE LETTER LA
1A13 ; [.2FC8.0020.0002] # BUGINESE LETTER VA
1A14 ; [.2FC9.0020.0002] # BUGINESE LETTER SA
1A15 ; [.2FCA.0020.0002] # BUGINESE LETTER A
1A16 ; [.2FCB.0020.0002] # BUGINESE LETTER HA
1A17 ; [.2FCC.0020.0002] # BUGINESE VOWEL SIGN I
1A18 ; [.2FCD.0020.0002] # BUGINESE VOWEL SIGN U
1A19 ; [.2FCE.0020.0002] # BUGINESE VOWEL SIGN E
1A1A ; [.2FCF.0020.0002] # BUGINESE VOWEL SIGN O
1A1B ; [.2FD0.0020.0002] # BUGINESE VOWEL SIGN AE
1BC0 ; [.2FD1.0020.0002] # BATAK LETTER A
1BC1 ; [.2FD1.0020.0004] # BATAK LETTER SIMALUNGUN A
1BC2 ; [.2FD2.0020.0002] # BATAK LETTER HA
1BC3 ; [.2FD2.0020.0004] # BATAK LETTER SIMALUNGUN HA
1BC4 ; [.2FD2.0020.0004] # BATAK LETTER MANDAILING HA
1BC5 ; [.2FD3.0020.0002] # BATAK LETTER BA
1BC6 ; [.2FD3.0020.0004] # BATAK LETTER KARO BA
1BC7 ; [.2FD4.0020.0002] # BATAK LETTER PA
1BC8 ; [.2FD4.0020.0004] # BATAK LETTER SIMALUNGUN PA
1BC9 ; [.2FD5.0020.0002] # BATAK LETTER NA
1BCA ; [.2FD5.0020.0004] # BATAK LETTER MANDAILING NA
1BCB ; [.2FD6.0020.0002] # BATAK LETTER WA
1BCC ; [.2FD6.0020.0004] # BATAK LETTER SIMALUNGUN WA
1BCD ; [.2FD6.0020.0004] # BATAK LETTER PAKPAK WA
1BCE ; [.2FD7.0020.0002] # BATAK LETTER GA
1BCF ; [.2FD7.0020.0004] # BATAK LETTER SIMALUNGUN GA
1BD0 ; [.2FD8.0020.0002] # BATAK LETTER JA
1BD1 ; [.2FD9.0020.0002] # BATAK LETTER DA
1BD2 ; [.2FDA.0020.0002] # BATAK LETTER RA
1BD3 ; [.2FDA.0020.0004] # BATAK LETTER SIMALUNGUN RA
1BD4 ; [.2FDB.0020.0002] # BATAK LETTER MA
1BD5 ; [.2FDB.0020.0004] # BATAK LETTER SIMALUNGUN MA
1BD6 ; [.2FDC.0020.0002] # BATAK LETTER SOUTHERN TA
1BD7 ; [.2FDC.0020.0004] # BATAK LETTER NORTHERN TA
1BD8 ; [.2FDD.0020.0002] # BATAK LETTER SA
1BD9 ; [.2FDD.0020.0004] # BATAK LETTER SIMALUNGUN SA
1BDA ; [.2FDD.0020.0004] # BATAK LETTER MANDAILING SA
1BDB ; [.2FDE.0020.0002] # BATAK LETTER YA
1BDC ; [.2FDE.0020.0004] # BATAK LETTER SIMALUNGUN YA
1BDD ; [.2FDF.0020.0002] # BATAK LETTER NGA
1BDE ; [.2FE0.0020.0002] # BATAK LETTER LA
1BDF ; [.2FE0.0020.0004] # BATAK LETTER SIMALUNGUN LA
1BE0 ; [.2FE1.0020.0002] # BATAK LETTER NYA
1BE1 ; [.2FE2.0020.0002] # BATAK LETTER CA
1BE2 ; [.2FE3.0020.0002] # BATAK LETTER NDA
1BE3 ; [.2FE4.0020.0002] # BATAK LETTER MBA
1BE4 ; [.2FE5.0020.0002] # BATAK LETTER I
1BE5 ; [.2FE6.0020.0002] # BATAK LETTER U
1BE7 ; [.2FE7.0020.0002] # BATAK VOWEL SIGN E
1BE8 ; [.2FE7.0020.0004] # BATAK VOWEL SIGN PAKPAK E
1BE9 ; [.2FE8.0020.0002] # BATAK VOWEL SIGN EE
1BEA ; [.2FE9.0020.0002] # BATAK VOWEL SIGN I
1BEB ; [.2FE9.0020.0004] # BATAK VOWEL SIGN KARO I
1BEC ; [.2FEA.0020.0002] # BATAK VOWEL SIGN O
1BED ; [.2FEA.0020.0004] # BATAK VOWEL SIGN KARO O
1BEE ; [.2FEB.0020.0002] # BATAK VOWEL SIGN U
1BEF ; [.2FEB.0020.0004] # BATAK VOWEL SIGN U FOR SIMALUNGUN SA
1BF0 ; [.2FEC.0020.0002] # BATAK CONSONANT SIGN NG
1BF1 ; [.2FED.0020.0002] # BATAK CONSONANT SIGN H
1BF2 ; [.2FEE.0020.0002] # BATAK PANGOLAT
1BF3 ; [.2FEF.0020.0002] # BATAK PANONGONAN
A930 ; [.2FF0.0020.0002] # REJANG LETTER KA
A931 ; [.2FF1.0020.0002] # REJANG LETTER GA
A932 ; [.2FF2.0020.0002] # REJANG LETTER NGA
A933 ; [.2FF3.0020.0002] # REJANG LETTER TA
A934 ; [.2FF4.0020.0002] # REJANG LETTER DA
A935 ; [.2FF5.0020.0002] # REJANG LETTER NA
A936 ; [.2FF6.0020.0002] # REJANG LETTER PA
A937 ; [.2FF7.0020.0002] # REJANG LETTER BA
A938 ; [.2FF8.0020.0002] # REJANG LETTER MA
A939 ; [.2FF9.0020.0002] # REJANG LETTER CA
A93A ; [.2FFA.0020.0002] # REJANG LETTER JA
A93B ; [.2FFB.0020.0002] # REJANG LETTER NYA
A93C ; [.2FFC.0020.0002] # REJANG LETTER SA
A93D ; [.2FFD.0020.0002] # REJANG LETTER RA
A93E ; [.2FFE.0020.0002] # REJANG LETTER LA
A93F ; [.2FFF.0020.0002] # REJANG LETTER YA
A940 ; [.3000.0020.0002] # REJANG LETTER WA
A941 ; [.3001.0020.0002] # REJANG LETTER HA
A942 ; [.3002.0020.0002] # REJANG LETTER MBA
A943 ; [.3003.0020.0002] # REJANG LETTER NGGA
A944 ; [.3004.0020.0002] # REJANG LETTER NDA
A945 ; [.3005.0020.0002] # REJANG LETTER NYJA
A946 ; [.3006.0020.0002] # REJANG LETTER A
A947 ; [.3007.0020.0002] # REJANG VOWEL SIGN I
A948 ; [.3008.0020.0002] # REJANG VOWEL SIGN U
A949 ; [.3009.0020.0002] # REJANG VOWEL SIGN E
A94A ; [.300A.0020.0002] # REJANG VOWEL SIGN AI
A94B ; [.300B.0020.0002] # REJANG VOWEL SIGN O
A94C ; [.300C.0020.0002] # REJANG VOWEL SIGN AU
A94D ; [.300D.0020.0002] # REJANG VOWEL SIGN EU
A94E ; [.300E.0020.0002] # REJANG VOWEL SIGN EA
A94F ; [.300F.0020.0002] # REJANG CONSONANT SIGN NG
A950 ; [.3010.0020.0002] # REJANG CONSONANT SIGN N
A951 ; [.3011.0020.0002] # REJANG CONSONANT SIGN R
A952 ; [.3012.0020.0002] # REJANG CONSONANT SIGN H
A953 ; [.3013.0020.0002] # REJANG VIRAMA
A90A ; [.3014.0020.0002] # KAYAH LI LETTER KA
A90B ; [.3015.0020.0002] # KAYAH LI LETTER KHA
A90C ; [.3016.0020.0002] # KAYAH LI LETTER GA
A90D ; [.3017.0020.0002] # KAYAH LI LETTER NGA
A90E ; [.3018.0020.0002] # KAYAH LI LETTER SA
A90F ; [.3019.0020.0002] # KAYAH LI LETTER SHA
A910 ; [.301A.0020.0002] # KAYAH LI LETTER ZA
A911 ; [.301B.0020.0002] # KAYAH LI LETTER NYA
A912 ; [.301C.0020.0002] # KAYAH LI LETTER TA
A913 ; [.301D.0020.0002] # KAYAH LI LETTER HTA
A914 ; [.301E.0020.0002] # KAYAH LI LETTER NA
A915 ; [.301F.0020.0002] # KAYAH LI LETTER PA
A916 ; [.3020.0020.0002] # KAYAH LI LETTER PHA
A917 ; [.3021.0020.0002] # KAYAH LI LETTER MA
A918 ; [.3022.0020.0002] # KAYAH LI LETTER DA
A919 ; [.3023.0020.0002] # KAYAH LI LETTER BA
A91A ; [.3024.0020.0002] # KAYAH LI LETTER RA
A91B ; [.3025.0020.0002] # KAYAH LI LETTER YA
A91C ; [.3026.0020.0002] # KAYAH LI LETTER LA
A91D ; [.3027.0020.0002] # KAYAH LI LETTER WA
A91E ; [.3028.0020.0002] # KAYAH LI LETTER THA
A91F ; [.3029.0020.0002] # KAYAH LI LETTER HA
A920 ; [.302A.0020.0002] # KAYAH LI LETTER VA
A921 ; [.302B.0020.0002] # KAYAH LI LETTER CA
A922 ; [.302C.0020.0002] # KAYAH LI LETTER A
A923 ; [.302D.0020.0002] # KAYAH LI LETTER OE
A924 ; [.302E.0020.0002] # KAYAH LI LETTER I
A925 ; [.302F.0020.0002] # KAYAH LI LETTER OO
A926 ; [.3030.0020.0002] # KAYAH LI VOWEL UE
A927 ; [.3031.0020.0002] # KAYAH LI VOWEL E
A928 ; [.3032.0020.0002] # KAYAH LI VOWEL U
A929 ; [.3033.0020.0002] # KAYAH LI VOWEL EE
A92A ; [.3034.0020.0002] # KAYAH LI VOWEL O
1000 ; [.3035.0020.0002] # MYANMAR LETTER KA
1075 ; [.3036.0020.0002] # MYANMAR LETTER SHAN KA
1001 ; [.3037.0020.0002] # MYANMAR LETTER KHA
1076 ; [.3038.0020.0002] # MYANMAR LETTER SHAN KHA
1002 ; [.3039.0020.0002] # MYANMAR LETTER GA
1077 ; [.303A.0020.0002] # MYANMAR LETTER SHAN GA
AA60 ; [.303B.0020.0002] # MYANMAR LETTER KHAMTI GA
A9E9 ; [.303C.0020.0002] # MYANMAR LETTER TAI LAING GA
1003 ; [.303D.0020.0002] # MYANMAR LETTER GHA
A9E0 ; [.303E.0020.0002] # MYANMAR LETTER SHAN GHA
A9EA ; [.303F.0020.0002] # MYANMAR LETTER TAI LAING GHA
1004 ; [.3040.0020.0002] # MYANMAR LETTER NGA
105A ; [.3041.0020.0002] # MYANMAR LETTER MON NGA
1005 ; [.3042.0020.0002] # MYANMAR LETTER CA
1078 ; [.3043.0020.0002] # MYANMAR LETTER SHAN CA
AA61 ; [.3044.0020.0002] # MYANMAR LETTER KHAMTI CA
1006 ; [.3045.0020.0002] # MYANMAR LETTER CHA
A9E1 ; [.3046.0020.0002] # MYANMAR LETTER SHAN CHA
AA62 ; [.3047.0020.0002] # MYANMAR LETTER KHAMTI CHA
AA7E ; [.3048.0020.0002] # MYANMAR LETTER SHWE PALAUNG CHA
1007 ; [.3049.0020.0002] # MYANMAR LETTER JA
AA63 ; [.304A.0020.0002] # MYANMAR LETTER KHAMTI JA
A9EB ; [.304B.0020.0002] # MYANMAR LETTER TAI LAING JA
1079 ; [.304C.0020.0002] # MYANMAR LETTER SHAN ZA
AA72 ; [.304D.0020.0002] # MYANMAR LETTER KHAMTI ZA
1008 ; [.304E.0020.0002] # MYANMAR LETTER JHA
105B ; [.304F.0020.0002] # MYANMAR LETTER MON JHA
A9E2 ; [.3050.0020.0002] # MYANMAR LETTER SHAN JHA
AA64 ; [.3051.0020.0002] # MYANMAR LETTER KHAMTI JHA
A9EC ; [.3052.0020.0002] # MYANMAR LETTER TAI LAING JHA
1061 ; [.3053.0020.0002] # MYANMAR LETTER SGAW KAREN SHA
AA7F ; [.3054.0020.0002] # MYANMAR LETTER SHWE PALAUNG SHA
1009 ; [.3055.0020.0002] # MYANMAR LETTER NYA
107A ; [.3056.0020.0002] # MYANMAR LETTER SHAN NYA
AA65 ; [.3057.0020.0002] # MYANMAR LETTER KHAMTI NYA
A9E7 ; [.3058.0020.0002] # MYANMAR LETTER TAI LAING NYA
100A ; [.3059.0020.0002] # MYANMAR LETTER NNYA
100B ; [.305A.0020.0002] # MYANMAR LETTER TTA
AA66 ; [.305B.0020.0002] # MYANMAR LETTER KHAMTI TTA
100C ; [.305C.0020.0002] # MYANMAR LETTER TTHA
AA67 ; [.305D.0020.0002] # MYANMAR LETTER KHAMTI TTHA
100D ; [.305E.0020.0002] # MYANMAR LETTER DDA
AA68 ; [.305F.0020.0002] # MYANMAR LETTER KHAMTI DDA
A9ED ; [.3060.0020.0002] # MYANMAR LETTER TAI LAING DDA
100E ; [.3061.0020.0002] # MYANMAR LETTER DDHA
AA69 ; [.3062.0020.0002] # MYANMAR LETTER KHAMTI DDHA
A9EE ; [.3063.0020.0002] # MYANMAR LETTER TAI LAING DDHA
100F ; [.3064.0020.0002] # MYANMAR LETTER NNA
106E ; [.3065.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN NNA
A9E3 ; [.3066.0020.0002] # MYANMAR LETTER SHAN NNA
A9EF ; [.3067.0020.0002] # MYANMAR LETTER TAI LAING NNA
1010 ; [.3068.0020.0002] # MYANMAR LETTER TA
1011 ; [.3069.0020.0002] # MYANMAR LETTER THA
1012 ; [.306A.0020.0002] # MYANMAR LETTER DA
107B ; [.306B.0020.0002] # MYANMAR LETTER SHAN DA
A9FB ; [.306C.0020.0002] # MYANMAR LETTER TAI LAING DA
1013 ; [.306D.0020.0002] # MYANMAR LETTER DHA
AA6A ; [.306E.0020.0002] # MYANMAR LETTER KHAMTI DHA
A9FC ; [.306F.0020.0002] # MYANMAR LETTER TAI LAING DHA
1014 ; [.3070.0020.0002] # MYANMAR LETTER NA
107C ; [.3071.0020.0002] # MYANMAR LETTER SHAN NA
AA6B ; [.3072.0020.0002] # MYANMAR LETTER KHAMTI NA
105E ; [.3073.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL NA
1015 ; [.3074.0020.0002] # MYANMAR LETTER PA
1016 ; [.3075.0020.0002] # MYANMAR LETTER PHA
107D ; [.3076.0020.0002] # MYANMAR LETTER SHAN PHA
107E ; [.3077.0020.0002] # MYANMAR LETTER SHAN FA
AA6F ; [.3078.0020.0002] # MYANMAR LETTER KHAMTI FA
108E ; [.3079.0020.0002] # MYANMAR LETTER RUMAI PALAUNG FA
A9E8 ; [.307A.0020.0002] # MYANMAR LETTER TAI LAING FA
1017 ; [.307B.0020.0002] # MYANMAR LETTER BA
107F ; [.307C.0020.0002] # MYANMAR LETTER SHAN BA
A9FD ; [.307D.0020.0002] # MYANMAR LETTER TAI LAING BA
1018 ; [.307E.0020.0002] # MYANMAR LETTER BHA
A9E4 ; [.307F.0020.0002] # MYANMAR LETTER SHAN BHA
A9FE ; [.3080.0020.0002] # MYANMAR LETTER TAI LAING BHA
1019 ; [.3081.0020.0002] # MYANMAR LETTER MA
105F ; [.3082.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL MA
101A ; [.3083.0020.0002] # MYANMAR LETTER YA
103B ; [.3084.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL YA
101B ; [.3085.0020.0002] # MYANMAR LETTER RA
AA73 ; [.3086.0020.0002] # MYANMAR LETTER KHAMTI RA
AA7A ; [.3087.0020.0002] # MYANMAR LETTER AITON RA
103C ; [.3088.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL RA
101C ; [.3089.0020.0002] # MYANMAR LETTER LA
1060 ; [.308A.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL LA
101D ; [.308B.0020.0002] # MYANMAR LETTER WA
103D ; [.308C.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL WA
1082 ; [.308D.0020.0002] # MYANMAR CONSONANT SIGN SHAN MEDIAL WA
1080 ; [.308E.0020.0002] # MYANMAR LETTER SHAN THA
1050 ; [.308F.0020.0002] # MYANMAR LETTER SHA
1051 ; [.3090.0020.0002] # MYANMAR LETTER SSA
1065 ; [.3091.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN THA
101E ; [.3092.0020.0002] # MYANMAR LETTER SA
103F ; [.3092.0020.0004][.30CB.0020.0004][.3092.0020.0004] # MYANMAR LETTER GREAT SA
AA6C ; [.3093.0020.0002] # MYANMAR LETTER KHAMTI SA
101F ; [.3094.0020.0002] # MYANMAR LETTER HA
1081 ; [.3095.0020.0002] # MYANMAR LETTER SHAN HA
AA6D ; [.3096.0020.0002] # MYANMAR LETTER KHAMTI HA
103E ; [.3097.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL HA
AA6E ; [.3098.0020.0002] # MYANMAR LETTER KHAMTI HHA
AA71 ; [.3099.0020.0002] # MYANMAR LETTER KHAMTI XA
1020 ; [.309A.0020.0002] # MYANMAR LETTER LLA
A9FA ; [.309B.0020.0002] # MYANMAR LETTER TAI LAING LLA
105C ; [.309C.0020.0002] # MYANMAR LETTER MON BBA
105D ; [.309D.0020.0002] # MYANMAR LETTER MON BBE
106F ; [.309E.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN YWA
1070 ; [.309F.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN GHWA
1066 ; [.30A0.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN PWA
1021 ; [.30A1.0020.0002] # MYANMAR LETTER A
1022 ; [.30A2.0020.0002] # MYANMAR LETTER SHAN A
1023 ; [.30A3.0020.0002] # MYANMAR LETTER I
1024 ; [.30A4.0020.0002] # MYANMAR LETTER II
1025 ; [.30A5.0020.0002] # MYANMAR LETTER U
1026 ; [.30A6.0020.0002] # MYANMAR LETTER UU
1025 102E ; [.30A6.0020.0002] # MYANMAR LETTER UU
1052 ; [.30A7.0020.0002] # MYANMAR LETTER VOCALIC R
1053 ; [.30A8.0020.0002] # MYANMAR LETTER VOCALIC RR
1054 ; [.30A9.0020.0002] # MYANMAR LETTER VOCALIC L
1055 ; [.30AA.0020.0002] # MYANMAR LETTER VOCALIC LL
1027 ; [.30AB.0020.0002] # MYANMAR LETTER E
1028 ; [.30AC.0020.0002] # MYANMAR LETTER MON E
1029 ; [.30AD.0020.0002] # MYANMAR LETTER O
102A ; [.30AE.0020.0002] # MYANMAR LETTER AU
102C ; [.30AF.0020.0002] # MYANMAR VOWEL SIGN AA
102B ; [.30AF.0020.0004] # MYANMAR VOWEL SIGN TALL AA
1083 ; [.30B0.0020.0002] # MYANMAR VOWEL SIGN SHAN AA
1072 ; [.30B1.0020.0002] # MYANMAR VOWEL SIGN KAYAH OE
109C ; [.30B2.0020.0002] # MYANMAR VOWEL SIGN AITON A
102D ; [.30B3.0020.0002] # MYANMAR VOWEL SIGN I
1071 ; [.30B4.0020.0002] # MYANMAR VOWEL SIGN GEBA KAREN I
102E ; [.30B5.0020.0002] # MYANMAR VOWEL SIGN II
1033 ; [.30B6.0020.0002] # MYANMAR VOWEL SIGN MON II
102F ; [.30B7.0020.0002] # MYANMAR VOWEL SIGN U
1073 ; [.30B8.0020.0002] # MYANMAR VOWEL SIGN KAYAH U
1074 ; [.30B9.0020.0002] # MYANMAR VOWEL SIGN KAYAH EE
1030 ; [.30BA.0020.0002] # MYANMAR VOWEL SIGN UU
1056 ; [.30BB.0020.0002] # MYANMAR VOWEL SIGN VOCALIC R
1057 ; [.30BC.0020.0002] # MYANMAR VOWEL SIGN VOCALIC RR
1058 ; [.30BD.0020.0002] # MYANMAR VOWEL SIGN VOCALIC L
1059 ; [.30BE.0020.0002] # MYANMAR VOWEL SIGN VOCALIC LL
1031 ; [.30BF.0020.0002] # MYANMAR VOWEL SIGN E
1084 ; [.30C0.0020.0002] # MYANMAR VOWEL SIGN SHAN E
1035 ; [.30C1.0020.0002] # MYANMAR VOWEL SIGN E ABOVE
1085 ; [.30C2.0020.0002] # MYANMAR VOWEL SIGN SHAN E ABOVE
1032 ; [.30C3.0020.0002] # MYANMAR VOWEL SIGN AI
109D ; [.30C4.0020.0002] # MYANMAR VOWEL SIGN AITON AI
1034 ; [.30C5.0020.0002] # MYANMAR VOWEL SIGN MON O
1062 ; [.30C6.0020.0002] # MYANMAR VOWEL SIGN SGAW KAREN EU
1067 ; [.30C7.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN EU
1068 ; [.30C8.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN UE
A9E5 ; [.30C9.0020.0002] # MYANMAR SIGN SHAN SAW
1086 ; [.30CA.0020.0002] # MYANMAR VOWEL SIGN SHAN FINAL Y
1039 ; [.30CB.0020.0002] # MYANMAR SIGN VIRAMA
103A ; [.30CC.0020.0002] # MYANMAR SIGN ASAT
1063 ; [.30CD.0020.0002] # MYANMAR TONE MARK SGAW KAREN HATHI
1064 ; [.30CE.0020.0002] # MYANMAR TONE MARK SGAW KAREN KE PHO
1069 ; [.30CF.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-1
106A ; [.30D0.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-2
106B ; [.30D1.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-3
106C ; [.30D2.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-4
106D ; [.30D3.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-5
1087 ; [.30D4.0020.0002] # MYANMAR SIGN SHAN TONE-2
108B ; [.30D5.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-2
1088 ; [.30D6.0020.0002] # MYANMAR SIGN SHAN TONE-3
108C ; [.30D7.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-3
108D ; [.30D8.0020.0002] # MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
1089 ; [.30D9.0020.0002] # MYANMAR SIGN SHAN TONE-5
108A ; [.30DA.0020.0002] # MYANMAR SIGN SHAN TONE-6
108F ; [.30DB.0020.0002] # MYANMAR SIGN RUMAI PALAUNG TONE-5
109A ; [.30DC.0020.0002] # MYANMAR SIGN KHAMTI TONE-1
109B ; [.30DD.0020.0002] # MYANMAR SIGN KHAMTI TONE-3
AA7B ; [.30DE.0020.0002] # MYANMAR SIGN PAO KAREN TONE
AA7C ; [.30DF.0020.0002] # MYANMAR SIGN TAI LAING TONE-2
AA7D ; [.30E0.0020.0002] # MYANMAR SIGN TAI LAING TONE-5
AA74 ; [.30E1.0020.0002] # MYANMAR LOGOGRAM KHAMTI OAY
AA75 ; [.30E2.0020.0002] # MYANMAR LOGOGRAM KHAMTI QN
AA76 ; [.30E3.0020.0002] # MYANMAR LOGOGRAM KHAMTI HM
11103 ; [.30E4.0020.0002] # CHAKMA LETTER AA
11104 ; [.30E5.0020.0002] # CHAKMA LETTER I
11105 ; [.30E6.0020.0002] # CHAKMA LETTER U
11106 ; [.30E7.0020.0002] # CHAKMA LETTER E
11107 ; [.30E8.0020.0002] # CHAKMA LETTER KAA
11108 ; [.30E9.0020.0002] # CHAKMA LETTER KHAA
11109 ; [.30EA.0020.0002] # CHAKMA LETTER GAA
1110A ; [.30EB.0020.0002] # CHAKMA LETTER GHAA
1110B ; [.30EC.0020.0002] # CHAKMA LETTER NGAA
1110C ; [.30ED.0020.0002] # CHAKMA LETTER CAA
1110D ; [.30EE.0020.0002] # CHAKMA LETTER CHAA
1110E ; [.30EF.0020.0002] # CHAKMA LETTER JAA
1110F ; [.30F0.0020.0002] # CHAKMA LETTER JHAA
11110 ; [.30F1.0020.0002] # CHAKMA LETTER NYAA
11111 ; [.30F2.0020.0002] # CHAKMA LETTER TTAA
11112 ; [.30F3.0020.0002] # CHAKMA LETTER TTHAA
11113 ; [.30F4.0020.0002] # CHAKMA LETTER DDAA
11114 ; [.30F5.0020.0002] # CHAKMA LETTER DDHAA
11115 ; [.30F6.0020.0002] # CHAKMA LETTER NNAA
11116 ; [.30F7.0020.0002] # CHAKMA LETTER TAA
11117 ; [.30F8.0020.0002] # CHAKMA LETTER THAA
11118 ; [.30F9.0020.0002] # CHAKMA LETTER DAA
11119 ; [.30FA.0020.0002] # CHAKMA LETTER DHAA
1111A ; [.30FB.0020.0002] # CHAKMA LETTER NAA
1111B ; [.30FC.0020.0002] # CHAKMA LETTER PAA
1111C ; [.30FD.0020.0002] # CHAKMA LETTER PHAA
1111D ; [.30FE.0020.0002] # CHAKMA LETTER BAA
1111E ; [.30FF.0020.0002] # CHAKMA LETTER BHAA
1111F ; [.3100.0020.0002] # CHAKMA LETTER MAA
11120 ; [.3101.0020.0002] # CHAKMA LETTER YYAA
11121 ; [.3102.0020.0002] # CHAKMA LETTER YAA
11122 ; [.3103.0020.0002] # CHAKMA LETTER RAA
11123 ; [.3104.0020.0002] # CHAKMA LETTER LAA
11124 ; [.3105.0020.0002] # CHAKMA LETTER WAA
11125 ; [.3106.0020.0002] # CHAKMA LETTER SAA
11126 ; [.3107.0020.0002] # CHAKMA LETTER HAA
11127 ; [.3108.0020.0002] # CHAKMA VOWEL SIGN A
11128 ; [.3109.0020.0002] # CHAKMA VOWEL SIGN I
11129 ; [.310A.0020.0002] # CHAKMA VOWEL SIGN II
1112A ; [.310B.0020.0002] # CHAKMA VOWEL SIGN U
1112B ; [.310C.0020.0002] # CHAKMA VOWEL SIGN UU
1112C ; [.310D.0020.0002] # CHAKMA VOWEL SIGN E
1112D ; [.310E.0020.0002] # CHAKMA VOWEL SIGN AI
1112E ; [.310F.0020.0002] # CHAKMA VOWEL SIGN O
11131 11127 ; [.310F.0020.0002] # CHAKMA VOWEL SIGN O
1112F ; [.3110.0020.0002] # CHAKMA VOWEL SIGN AU
11132 11127 ; [.3110.0020.0002] # CHAKMA VOWEL SIGN AU
11130 ; [.3111.0020.0002] # CHAKMA VOWEL SIGN OI
11131 ; [.3112.0020.0002] # CHAKMA O MARK
11132 ; [.3113.0020.0002] # CHAKMA AU MARK
11133 ; [.3114.0020.0002] # CHAKMA VIRAMA
11134 ; [.3115.0020.0002] # CHAKMA MAAYYAA
1780 ; [.3116.0020.0002] # KHMER LETTER KA
1781 ; [.3117.0020.0002] # KHMER LETTER KHA
1782 ; [.3118.0020.0002] # KHMER LETTER KO
1783 ; [.3119.0020.0002] # KHMER LETTER KHO
1784 ; [.311A.0020.0002] # KHMER LETTER NGO
1785 ; [.311B.0020.0002] # KHMER LETTER CA
1786 ; [.311C.0020.0002] # KHMER LETTER CHA
1787 ; [.311D.0020.0002] # KHMER LETTER CO
1788 ; [.311E.0020.0002] # KHMER LETTER CHO
1789 ; [.311F.0020.0002] # KHMER LETTER NYO
178A ; [.3120.0020.0002] # KHMER LETTER DA
178B ; [.3121.0020.0002] # KHMER LETTER TTHA
178C ; [.3122.0020.0002] # KHMER LETTER DO
178D ; [.3123.0020.0002] # KHMER LETTER TTHO
178E ; [.3124.0020.0002] # KHMER LETTER NNO
178F ; [.3125.0020.0002] # KHMER LETTER TA
1790 ; [.3126.0020.0002] # KHMER LETTER THA
1791 ; [.3127.0020.0002] # KHMER LETTER TO
1792 ; [.3128.0020.0002] # KHMER LETTER THO
1793 ; [.3129.0020.0002] # KHMER LETTER NO
1794 ; [.312A.0020.0002] # KHMER LETTER BA
1795 ; [.312B.0020.0002] # KHMER LETTER PHA
1796 ; [.312C.0020.0002] # KHMER LETTER PO
1797 ; [.312D.0020.0002] # KHMER LETTER PHO
1798 ; [.312E.0020.0002] # KHMER LETTER MO
1799 ; [.312F.0020.0002] # KHMER LETTER YO
179A ; [.3130.0020.0002] # KHMER LETTER RO
179B ; [.3131.0020.0002] # KHMER LETTER LO
179C ; [.3132.0020.0002] # KHMER LETTER VO
179D ; [.3133.0020.0002] # KHMER LETTER SHA
179E ; [.3134.0020.0002] # KHMER LETTER SSO
179F ; [.3135.0020.0002] # KHMER LETTER SA
17A0 ; [.3136.0020.0002] # KHMER LETTER HA
17A1 ; [.3137.0020.0002] # KHMER LETTER LA
17A2 ; [.3138.0020.0002] # KHMER LETTER QA
17DC ; [.3139.0020.0002] # KHMER SIGN AVAKRAHASANYA
17A3 ; [.313A.0020.0002] # KHMER INDEPENDENT VOWEL QAQ
17A4 ; [.313B.0020.0002] # KHMER INDEPENDENT VOWEL QAA
17A5 ; [.313C.0020.0002] # KHMER INDEPENDENT VOWEL QI
17A6 ; [.313D.0020.0002] # KHMER INDEPENDENT VOWEL QII
17A7 ; [.313E.0020.0002] # KHMER INDEPENDENT VOWEL QU
17A8 ; [.313F.0020.0002] # KHMER INDEPENDENT VOWEL QUK
17A9 ; [.3140.0020.0002] # KHMER INDEPENDENT VOWEL QUU
17AA ; [.3141.0020.0002] # KHMER INDEPENDENT VOWEL QUUV
17AB ; [.3142.0020.0002] # KHMER INDEPENDENT VOWEL RY
17AC ; [.3143.0020.0002] # KHMER INDEPENDENT VOWEL RYY
17AD ; [.3144.0020.0002] # KHMER INDEPENDENT VOWEL LY
17AE ; [.3145.0020.0002] # KHMER INDEPENDENT VOWEL LYY
17AF ; [.3146.0020.0002] # KHMER INDEPENDENT VOWEL QE
17B0 ; [.3147.0020.0002] # KHMER INDEPENDENT VOWEL QAI
17B1 ; [.3148.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE ONE
17B2 ; [.3149.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE TWO
17B3 ; [.314A.0020.0002] # KHMER INDEPENDENT VOWEL QAU
17B6 ; [.314B.0020.0002] # KHMER VOWEL SIGN AA
17B7 ; [.314C.0020.0002] # KHMER VOWEL SIGN I
17B8 ; [.314D.0020.0002] # KHMER VOWEL SIGN II
17B9 ; [.314E.0020.0002] # KHMER VOWEL SIGN Y
17BA ; [.314F.0020.0002] # KHMER VOWEL SIGN YY
17BB ; [.3150.0020.0002] # KHMER VOWEL SIGN U
17BC ; [.3151.0020.0002] # KHMER VOWEL SIGN UU
17BD ; [.3152.0020.0002] # KHMER VOWEL SIGN UA
17BE ; [.3153.0020.0002] # KHMER VOWEL SIGN OE
17BF ; [.3154.0020.0002] # KHMER VOWEL SIGN YA
17C0 ; [.3155.0020.0002] # KHMER VOWEL SIGN IE
17C1 ; [.3156.0020.0002] # KHMER VOWEL SIGN E
17C2 ; [.3157.0020.0002] # KHMER VOWEL SIGN AE
17C3 ; [.3158.0020.0002] # KHMER VOWEL SIGN AI
17C4 ; [.3159.0020.0002] # KHMER VOWEL SIGN OO
17C5 ; [.315A.0020.0002] # KHMER VOWEL SIGN AU
17D2 ; [.315B.0020.0002] # KHMER SIGN COENG
1950 ; [.315C.0020.0002] # TAI LE LETTER KA
1951 ; [.315D.0020.0002] # TAI LE LETTER XA
1952 ; [.315E.0020.0002] # TAI LE LETTER NGA
1953 ; [.315F.0020.0002] # TAI LE LETTER TSA
1954 ; [.3160.0020.0002] # TAI LE LETTER SA
1955 ; [.3161.0020.0002] # TAI LE LETTER YA
1956 ; [.3162.0020.0002] # TAI LE LETTER TA
1957 ; [.3163.0020.0002] # TAI LE LETTER THA
1958 ; [.3164.0020.0002] # TAI LE LETTER LA
1959 ; [.3165.0020.0002] # TAI LE LETTER PA
195A ; [.3166.0020.0002] # TAI LE LETTER PHA
195B ; [.3167.0020.0002] # TAI LE LETTER MA
195C ; [.3168.0020.0002] # TAI LE LETTER FA
195D ; [.3169.0020.0002] # TAI LE LETTER VA
195E ; [.316A.0020.0002] # TAI LE LETTER HA
195F ; [.316B.0020.0002] # TAI LE LETTER QA
1960 ; [.316C.0020.0002] # TAI LE LETTER KHA
1961 ; [.316D.0020.0002] # TAI LE LETTER TSHA
1962 ; [.316E.0020.0002] # TAI LE LETTER NA
1963 ; [.316F.0020.0002] # TAI LE LETTER A
1964 ; [.3170.0020.0002] # TAI LE LETTER I
1965 ; [.3171.0020.0002] # TAI LE LETTER EE
1966 ; [.3172.0020.0002] # TAI LE LETTER EH
1967 ; [.3173.0020.0002] # TAI LE LETTER U
1968 ; [.3174.0020.0002] # TAI LE LETTER OO
1969 ; [.3175.0020.0002] # TAI LE LETTER O
196A ; [.3176.0020.0002] # TAI LE LETTER UE
196B ; [.3177.0020.0002] # TAI LE LETTER E
196C ; [.3178.0020.0002] # TAI LE LETTER AUE
196D ; [.3179.0020.0002] # TAI LE LETTER AI
1970 ; [.317A.0020.0002] # TAI LE LETTER TONE-2
1971 ; [.317B.0020.0002] # TAI LE LETTER TONE-3
1972 ; [.317C.0020.0002] # TAI LE LETTER TONE-4
1973 ; [.317D.0020.0002] # TAI LE LETTER TONE-5
1974 ; [.317E.0020.0002] # TAI LE LETTER TONE-6
1980 ; [.317F.0020.0002] # NEW TAI LUE LETTER HIGH QA
19B5 1980 ; [.317F.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH QA>
19B6 1980 ; [.317F.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH QA>
19B7 1980 ; [.317F.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH QA>
19BA 1980 ; [.317F.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH QA>
1981 ; [.3180.0020.0002] # NEW TAI LUE LETTER LOW QA
19B5 1981 ; [.3180.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW QA>
19B6 1981 ; [.3180.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW QA>
19B7 1981 ; [.3180.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW QA>
19BA 1981 ; [.3180.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW QA>
1982 ; [.3181.0020.0002] # NEW TAI LUE LETTER HIGH KA
19B5 1982 ; [.3181.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH KA>
19B6 1982 ; [.3181.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH KA>
19B7 1982 ; [.3181.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH KA>
19BA 1982 ; [.3181.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH KA>
1983 ; [.3182.0020.0002] # NEW TAI LUE LETTER HIGH XA
19B5 1983 ; [.3182.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH XA>
19B6 1983 ; [.3182.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH XA>
19B7 1983 ; [.3182.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH XA>
19BA 1983 ; [.3182.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH XA>
1984 ; [.3183.0020.0002] # NEW TAI LUE LETTER HIGH NGA
19B5 1984 ; [.3183.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH NGA>
19B6 1984 ; [.3183.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH NGA>
19B7 1984 ; [.3183.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH NGA>
19BA 1984 ; [.3183.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH NGA>
1985 ; [.3184.0020.0002] # NEW TAI LUE LETTER LOW KA
19B5 1985 ; [.3184.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW KA>
19B6 1985 ; [.3184.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW KA>
19B7 1985 ; [.3184.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW KA>
19BA 1985 ; [.3184.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW KA>
1986 ; [.3185.0020.0002] # NEW TAI LUE LETTER LOW XA
19B5 1986 ; [.3185.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW XA>
19B6 1986 ; [.3185.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW XA>
19B7 1986 ; [.3185.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW XA>
19BA 1986 ; [.3185.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW XA>
1987 ; [.3186.0020.0002] # NEW TAI LUE LETTER LOW NGA
19B5 1987 ; [.3186.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW NGA>
19B6 1987 ; [.3186.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW NGA>
19B7 1987 ; [.3186.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW NGA>
19BA 1987 ; [.3186.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW NGA>
1988 ; [.3187.0020.0002] # NEW TAI LUE LETTER HIGH TSA
19B5 1988 ; [.3187.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH TSA>
19B6 1988 ; [.3187.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH TSA>
19B7 1988 ; [.3187.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH TSA>
19BA 1988 ; [.3187.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH TSA>
1989 ; [.3188.0020.0002] # NEW TAI LUE LETTER HIGH SA
19B5 1989 ; [.3188.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH SA>
19B6 1989 ; [.3188.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH SA>
19B7 1989 ; [.3188.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH SA>
19BA 1989 ; [.3188.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH SA>
198A ; [.3189.0020.0002] # NEW TAI LUE LETTER HIGH YA
19B5 198A ; [.3189.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH YA>
19B6 198A ; [.3189.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH YA>
19B7 198A ; [.3189.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH YA>
19BA 198A ; [.3189.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH YA>
198B ; [.318A.0020.0002] # NEW TAI LUE LETTER LOW TSA
19B5 198B ; [.318A.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW TSA>
19B6 198B ; [.318A.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW TSA>
19B7 198B ; [.318A.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW TSA>
19BA 198B ; [.318A.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW TSA>
198C ; [.318B.0020.0002] # NEW TAI LUE LETTER LOW SA
19B5 198C ; [.318B.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW SA>
19B6 198C ; [.318B.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW SA>
19B7 198C ; [.318B.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW SA>
19BA 198C ; [.318B.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW SA>
198D ; [.318C.0020.0002] # NEW TAI LUE LETTER LOW YA
19B5 198D ; [.318C.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW YA>
19B6 198D ; [.318C.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW YA>
19B7 198D ; [.318C.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW YA>
19BA 198D ; [.318C.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW YA>
198E ; [.318D.0020.0002] # NEW TAI LUE LETTER HIGH TA
19B5 198E ; [.318D.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH TA>
19B6 198E ; [.318D.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH TA>
19B7 198E ; [.318D.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH TA>
19BA 198E ; [.318D.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH TA>
198F ; [.318E.0020.0002] # NEW TAI LUE LETTER HIGH THA
19B5 198F ; [.318E.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH THA>
19B6 198F ; [.318E.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH THA>
19B7 198F ; [.318E.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH THA>
19BA 198F ; [.318E.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH THA>
1990 ; [.318F.0020.0002] # NEW TAI LUE LETTER HIGH NA
19B5 1990 ; [.318F.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH NA>
19B6 1990 ; [.318F.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH NA>
19B7 1990 ; [.318F.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH NA>
19BA 1990 ; [.318F.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH NA>
1991 ; [.3190.0020.0002] # NEW TAI LUE LETTER LOW TA
19B5 1991 ; [.3190.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW TA>
19B6 1991 ; [.3190.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW TA>
19B7 1991 ; [.3190.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW TA>
19BA 1991 ; [.3190.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW TA>
1992 ; [.3191.0020.0002] # NEW TAI LUE LETTER LOW THA
19B5 1992 ; [.3191.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW THA>
19B6 1992 ; [.3191.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW THA>
19B7 1992 ; [.3191.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW THA>
19BA 1992 ; [.3191.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW THA>
1993 ; [.3192.0020.0002] # NEW TAI LUE LETTER LOW NA
19B5 1993 ; [.3192.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW NA>
19B6 1993 ; [.3192.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW NA>
19B7 1993 ; [.3192.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW NA>
19BA 1993 ; [.3192.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW NA>
1994 ; [.3193.0020.0002] # NEW TAI LUE LETTER HIGH PA
19B5 1994 ; [.3193.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH PA>
19B6 1994 ; [.3193.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH PA>
19B7 1994 ; [.3193.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH PA>
19BA 1994 ; [.3193.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH PA>
1995 ; [.3194.0020.0002] # NEW TAI LUE LETTER HIGH PHA
19B5 1995 ; [.3194.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH PHA>
19B6 1995 ; [.3194.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH PHA>
19B7 1995 ; [.3194.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH PHA>
19BA 1995 ; [.3194.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH PHA>
1996 ; [.3195.0020.0002] # NEW TAI LUE LETTER HIGH MA
19B5 1996 ; [.3195.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH MA>
19B6 1996 ; [.3195.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH MA>
19B7 1996 ; [.3195.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH MA>
19BA 1996 ; [.3195.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH MA>
1997 ; [.3196.0020.0002] # NEW TAI LUE LETTER LOW PA
19B5 1997 ; [.3196.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW PA>
19B6 1997 ; [.3196.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW PA>
19B7 1997 ; [.3196.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW PA>
19BA 1997 ; [.3196.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW PA>
1998 ; [.3197.0020.0002] # NEW TAI LUE LETTER LOW PHA
19B5 1998 ; [.3197.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW PHA>
19B6 1998 ; [.3197.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW PHA>
19B7 1998 ; [.3197.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW PHA>
19BA 1998 ; [.3197.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW PHA>
1999 ; [.3198.0020.0002] # NEW TAI LUE LETTER LOW MA
19B5 1999 ; [.3198.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW MA>
19B6 1999 ; [.3198.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW MA>
19B7 1999 ; [.3198.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW MA>
19BA 1999 ; [.3198.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW MA>
199A ; [.3199.0020.0002] # NEW TAI LUE LETTER HIGH FA
19B5 199A ; [.3199.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH FA>
19B6 199A ; [.3199.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH FA>
19B7 199A ; [.3199.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH FA>
19BA 199A ; [.3199.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH FA>
199B ; [.319A.0020.0002] # NEW TAI LUE LETTER HIGH VA
19B5 199B ; [.319A.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH VA>
19B6 199B ; [.319A.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH VA>
19B7 199B ; [.319A.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH VA>
19BA 199B ; [.319A.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH VA>
199C ; [.319B.0020.0002] # NEW TAI LUE LETTER HIGH LA
19B5 199C ; [.319B.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH LA>
19B6 199C ; [.319B.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH LA>
19DE ; [.319B.0020.0004][.31B1.0020.0004] # NEW TAI LUE SIGN LAE
19DF ; [.319B.0020.0004][.31B1.0020.0004][.31BC.0020.0004] # NEW TAI LUE SIGN LAEV
19B7 199C ; [.319B.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH LA>
19BA 199C ; [.319B.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH LA>
199D ; [.319C.0020.0002] # NEW TAI LUE LETTER LOW FA
19B5 199D ; [.319C.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW FA>
19B6 199D ; [.319C.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW FA>
19B7 199D ; [.319C.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW FA>
19BA 199D ; [.319C.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW FA>
199E ; [.319D.0020.0002] # NEW TAI LUE LETTER LOW VA
19B5 199E ; [.319D.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW VA>
19B6 199E ; [.319D.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW VA>
19B7 199E ; [.319D.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW VA>
19BA 199E ; [.319D.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW VA>
199F ; [.319E.0020.0002] # NEW TAI LUE LETTER LOW LA
19B5 199F ; [.319E.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW LA>
19B6 199F ; [.319E.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW LA>
19B7 199F ; [.319E.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW LA>
19BA 199F ; [.319E.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW LA>
19A0 ; [.319F.0020.0002] # NEW TAI LUE LETTER HIGH HA
19B5 19A0 ; [.319F.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH HA>
19B6 19A0 ; [.319F.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH HA>
19B7 19A0 ; [.319F.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH HA>
19BA 19A0 ; [.319F.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH HA>
19A1 ; [.31A0.0020.0002] # NEW TAI LUE LETTER HIGH DA
19B5 19A1 ; [.31A0.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH DA>
19B6 19A1 ; [.31A0.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH DA>
19B7 19A1 ; [.31A0.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH DA>
19BA 19A1 ; [.31A0.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH DA>
19A2 ; [.31A1.0020.0002] # NEW TAI LUE LETTER HIGH BA
19B5 19A2 ; [.31A1.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH BA>
19B6 19A2 ; [.31A1.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH BA>
19B7 19A2 ; [.31A1.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH BA>
19BA 19A2 ; [.31A1.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH BA>
19A3 ; [.31A2.0020.0002] # NEW TAI LUE LETTER LOW HA
19B5 19A3 ; [.31A2.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW HA>
19B6 19A3 ; [.31A2.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW HA>
19B7 19A3 ; [.31A2.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW HA>
19BA 19A3 ; [.31A2.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW HA>
19A4 ; [.31A3.0020.0002] # NEW TAI LUE LETTER LOW DA
19B5 19A4 ; [.31A3.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW DA>
19B6 19A4 ; [.31A3.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW DA>
19B7 19A4 ; [.31A3.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW DA>
19BA 19A4 ; [.31A3.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW DA>
19A5 ; [.31A4.0020.0002] # NEW TAI LUE LETTER LOW BA
19B5 19A5 ; [.31A4.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW BA>
19B6 19A5 ; [.31A4.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW BA>
19B7 19A5 ; [.31A4.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW BA>
19BA 19A5 ; [.31A4.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW BA>
19A6 ; [.31A5.0020.0002] # NEW TAI LUE LETTER HIGH KVA
19B5 19A6 ; [.31A5.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH KVA>
19B6 19A6 ; [.31A5.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH KVA>
19B7 19A6 ; [.31A5.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH KVA>
19BA 19A6 ; [.31A5.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH KVA>
19A7 ; [.31A6.0020.0002] # NEW TAI LUE LETTER HIGH XVA
19B5 19A7 ; [.31A6.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH XVA>
19B6 19A7 ; [.31A6.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH XVA>
19B7 19A7 ; [.31A6.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH XVA>
19BA 19A7 ; [.31A6.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH XVA>
19A8 ; [.31A7.0020.0002] # NEW TAI LUE LETTER LOW KVA
19B5 19A8 ; [.31A7.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW KVA>
19B6 19A8 ; [.31A7.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW KVA>
19B7 19A8 ; [.31A7.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW KVA>
19BA 19A8 ; [.31A7.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW KVA>
19A9 ; [.31A8.0020.0002] # NEW TAI LUE LETTER LOW XVA
19B5 19A9 ; [.31A8.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW XVA>
19B6 19A9 ; [.31A8.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW XVA>
19B7 19A9 ; [.31A8.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW XVA>
19BA 19A9 ; [.31A8.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW XVA>
19AA ; [.31A9.0020.0002] # NEW TAI LUE LETTER HIGH SUA
19B5 19AA ; [.31A9.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH SUA>
19B6 19AA ; [.31A9.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH SUA>
19B7 19AA ; [.31A9.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH SUA>
19BA 19AA ; [.31A9.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH SUA>
19AB ; [.31AA.0020.0002] # NEW TAI LUE LETTER LOW SUA
19B5 19AB ; [.31AA.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW SUA>
19B6 19AB ; [.31AA.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW SUA>
19B7 19AB ; [.31AA.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW SUA>
19BA 19AB ; [.31AA.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW SUA>
19B0 ; [.31AB.0020.0002] # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
19B1 ; [.31AC.0020.0002] # NEW TAI LUE VOWEL SIGN AA
19B2 ; [.31AD.0020.0002] # NEW TAI LUE VOWEL SIGN II
19B3 ; [.31AE.0020.0002] # NEW TAI LUE VOWEL SIGN U
19B4 ; [.31AF.0020.0002] # NEW TAI LUE VOWEL SIGN UU
19B5 ; [.31B0.0020.0002] # NEW TAI LUE VOWEL SIGN E
19B6 ; [.31B1.0020.0002] # NEW TAI LUE VOWEL SIGN AE
19B7 ; [.31B2.0020.0002] # NEW TAI LUE VOWEL SIGN O
19B8 ; [.31B3.0020.0002] # NEW TAI LUE VOWEL SIGN OA
19B9 ; [.31B4.0020.0002] # NEW TAI LUE VOWEL SIGN UE
19BA ; [.31B5.0020.0002] # NEW TAI LUE VOWEL SIGN AY
19BB ; [.31B6.0020.0002] # NEW TAI LUE VOWEL SIGN AAY
19BC ; [.31B7.0020.0002] # NEW TAI LUE VOWEL SIGN UY
19BD ; [.31B8.0020.0002] # NEW TAI LUE VOWEL SIGN OY
19BE ; [.31B9.0020.0002] # NEW TAI LUE VOWEL SIGN OAY
19BF ; [.31BA.0020.0002] # NEW TAI LUE VOWEL SIGN UEY
19C0 ; [.31BB.0020.0002] # NEW TAI LUE VOWEL SIGN IY
19C1 ; [.31BC.0020.0002] # NEW TAI LUE LETTER FINAL V
19C2 ; [.31BD.0020.0002] # NEW TAI LUE LETTER FINAL NG
19C3 ; [.31BE.0020.0002] # NEW TAI LUE LETTER FINAL N
19C4 ; [.31BF.0020.0002] # NEW TAI LUE LETTER FINAL M
19C5 ; [.31C0.0020.0002] # NEW TAI LUE LETTER FINAL K
19C6 ; [.31C1.0020.0002] # NEW TAI LUE LETTER FINAL D
19C7 ; [.31C2.0020.0002] # NEW TAI LUE LETTER FINAL B
19C8 ; [.31C3.0020.0002] # NEW TAI LUE TONE MARK-1
19C9 ; [.31C4.0020.0002] # NEW TAI LUE TONE MARK-2
1A20 ; [.31C5.0020.0002] # TAI THAM LETTER HIGH KA
1A21 ; [.31C6.0020.0002] # TAI THAM LETTER HIGH KHA
1A22 ; [.31C7.0020.0002] # TAI THAM LETTER HIGH KXA
1A23 ; [.31C8.0020.0002] # TAI THAM LETTER LOW KA
1A24 ; [.31C9.0020.0002] # TAI THAM LETTER LOW KXA
1A25 ; [.31CA.0020.0002] # TAI THAM LETTER LOW KHA
1A26 ; [.31CB.0020.0002] # TAI THAM LETTER NGA
1A58 ; [.31CB.0020.0004] # TAI THAM SIGN MAI KANG LAI
1A59 ; [.31CB.0020.0004] # TAI THAM CONSONANT SIGN FINAL NGA
1A27 ; [.31CC.0020.0002] # TAI THAM LETTER HIGH CA
1A28 ; [.31CD.0020.0002] # TAI THAM LETTER HIGH CHA
1A29 ; [.31CE.0020.0002] # TAI THAM LETTER LOW CA
1A2A ; [.31CF.0020.0002] # TAI THAM LETTER LOW SA
1A2B ; [.31D0.0020.0002] # TAI THAM LETTER LOW CHA
1A2C ; [.31D1.0020.0002] # TAI THAM LETTER NYA
1A2D ; [.31D2.0020.0002] # TAI THAM LETTER RATA
1A2E ; [.31D3.0020.0002] # TAI THAM LETTER HIGH RATHA
1A2F ; [.31D4.0020.0002] # TAI THAM LETTER DA
1A30 ; [.31D5.0020.0002] # TAI THAM LETTER LOW RATHA
1A31 ; [.31D6.0020.0002] # TAI THAM LETTER RANA
1A32 ; [.31D7.0020.0002] # TAI THAM LETTER HIGH TA
1A33 ; [.31D8.0020.0002] # TAI THAM LETTER HIGH THA
1A34 ; [.31D9.0020.0002] # TAI THAM LETTER LOW TA
1A35 ; [.31DA.0020.0002] # TAI THAM LETTER LOW THA
1A36 ; [.31DB.0020.0002] # TAI THAM LETTER NA
1A37 ; [.31DC.0020.0002] # TAI THAM LETTER BA
1A38 ; [.31DD.0020.0002] # TAI THAM LETTER HIGH PA
1A39 ; [.31DE.0020.0002] # TAI THAM LETTER HIGH PHA
1A3A ; [.31DF.0020.0002] # TAI THAM LETTER HIGH FA
1A3B ; [.31E0.0020.0002] # TAI THAM LETTER LOW PA
1A5A ; [.31E0.0020.0004] # TAI THAM CONSONANT SIGN LOW PA
1A5B ; [.31E0.0020.0004] # TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA
1A3C ; [.31E1.0020.0002] # TAI THAM LETTER LOW FA
1A3D ; [.31E2.0020.0002] # TAI THAM LETTER LOW PHA
1A3E ; [.31E3.0020.0002] # TAI THAM LETTER MA
1A3F ; [.31E4.0020.0002] # TAI THAM LETTER LOW YA
1A40 ; [.31E5.0020.0002] # TAI THAM LETTER HIGH YA
1A41 ; [.31E6.0020.0002] # TAI THAM LETTER RA
1A42 ; [.31E7.0020.0002] # TAI THAM LETTER RUE
1A43 ; [.31E8.0020.0002] # TAI THAM LETTER LA
1A44 ; [.31E9.0020.0002] # TAI THAM LETTER LUE
1A45 ; [.31EA.0020.0002] # TAI THAM LETTER WA
1A46 ; [.31EB.0020.0002] # TAI THAM LETTER HIGH SHA
1A54 ; [.31EB.0020.0004][.3211.0020.0004][.31EB.0020.0004] # TAI THAM LETTER GREAT SA
1A47 ; [.31EC.0020.0002] # TAI THAM LETTER HIGH SSA
1A48 ; [.31ED.0020.0002] # TAI THAM LETTER HIGH SA
1A49 ; [.31EE.0020.0002] # TAI THAM LETTER HIGH HA
1A4A ; [.31EF.0020.0002] # TAI THAM LETTER LLA
1A4B ; [.31F0.0020.0002] # TAI THAM LETTER A
1A4C ; [.31F1.0020.0002] # TAI THAM LETTER LOW HA
1A53 ; [.31F2.0020.0002] # TAI THAM LETTER LAE
1A6B ; [.31F3.0020.0002] # TAI THAM VOWEL SIGN O
1A55 ; [.31F4.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL RA
1A56 ; [.31F5.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL LA
1A57 ; [.31F6.0020.0002] # TAI THAM CONSONANT SIGN LA TANG LAI
1A5C ; [.31F7.0020.0002] # TAI THAM CONSONANT SIGN MA
1A5D ; [.31F8.0020.0002] # TAI THAM CONSONANT SIGN BA
1A5E ; [.31F9.0020.0002] # TAI THAM CONSONANT SIGN SA
1A4D ; [.31FA.0020.0002] # TAI THAM LETTER I
1A4E ; [.31FB.0020.0002] # TAI THAM LETTER II
1A4F ; [.31FC.0020.0002] # TAI THAM LETTER U
1A50 ; [.31FD.0020.0002] # TAI THAM LETTER UU
1A51 ; [.31FE.0020.0002] # TAI THAM LETTER EE
1A52 ; [.31FF.0020.0002] # TAI THAM LETTER OO
1A61 ; [.3200.0020.0002] # TAI THAM VOWEL SIGN A
1A6C ; [.3201.0020.0002] # TAI THAM VOWEL SIGN OA BELOW
1A62 ; [.3202.0020.0002] # TAI THAM VOWEL SIGN MAI SAT
1A63 ; [.3203.0020.0002] # TAI THAM VOWEL SIGN AA
1A64 ; [.3203.0020.0004] # TAI THAM VOWEL SIGN TALL AA
1A65 ; [.3204.0020.0002] # TAI THAM VOWEL SIGN I
1A66 ; [.3205.0020.0002] # TAI THAM VOWEL SIGN II
1A67 ; [.3206.0020.0002] # TAI THAM VOWEL SIGN UE
1A68 ; [.3207.0020.0002] # TAI THAM VOWEL SIGN UUE
1A69 ; [.3208.0020.0002] # TAI THAM VOWEL SIGN U
1A6A ; [.3209.0020.0002] # TAI THAM VOWEL SIGN UU
1A6E ; [.320A.0020.0002] # TAI THAM VOWEL SIGN E
1A6F ; [.320B.0020.0002] # TAI THAM VOWEL SIGN AE
1A73 ; [.320C.0020.0002] # TAI THAM VOWEL SIGN OA ABOVE
1A70 ; [.320D.0020.0002] # TAI THAM VOWEL SIGN OO
1A71 ; [.320E.0020.0002] # TAI THAM VOWEL SIGN AI
1A72 ; [.320F.0020.0002] # TAI THAM VOWEL SIGN THAM AI
1A6D ; [.3210.0020.0002] # TAI THAM VOWEL SIGN OY
1A60 ; [.3211.0020.0002] # TAI THAM SIGN SAKOT
AA00 ; [.3212.0020.0002] # CHAM LETTER A
AA01 ; [.3213.0020.0002] # CHAM LETTER I
AA02 ; [.3214.0020.0002] # CHAM LETTER U
AA03 ; [.3215.0020.0002] # CHAM LETTER E
AA04 ; [.3216.0020.0002] # CHAM LETTER AI
AA05 ; [.3217.0020.0002] # CHAM LETTER O
AA06 ; [.3218.0020.0002] # CHAM LETTER KA
AA07 ; [.3219.0020.0002] # CHAM LETTER KHA
AA08 ; [.321A.0020.0002] # CHAM LETTER GA
AA09 ; [.321B.0020.0002] # CHAM LETTER GHA
AA0A ; [.321C.0020.0002] # CHAM LETTER NGUE
AA0B ; [.321D.0020.0002] # CHAM LETTER NGA
AA0C ; [.321E.0020.0002] # CHAM LETTER CHA
AA0D ; [.321F.0020.0002] # CHAM LETTER CHHA
AA0E ; [.3220.0020.0002] # CHAM LETTER JA
AA0F ; [.3221.0020.0002] # CHAM LETTER JHA
AA10 ; [.3222.0020.0002] # CHAM LETTER NHUE
AA11 ; [.3223.0020.0002] # CHAM LETTER NHA
AA12 ; [.3224.0020.0002] # CHAM LETTER NHJA
AA13 ; [.3225.0020.0002] # CHAM LETTER TA
AA14 ; [.3226.0020.0002] # CHAM LETTER THA
AA15 ; [.3227.0020.0002] # CHAM LETTER DA
AA16 ; [.3228.0020.0002] # CHAM LETTER DHA
AA17 ; [.3229.0020.0002] # CHAM LETTER NUE
AA18 ; [.322A.0020.0002] # CHAM LETTER NA
AA19 ; [.322B.0020.0002] # CHAM LETTER DDA
AA1A ; [.322C.0020.0002] # CHAM LETTER PA
AA1B ; [.322D.0020.0002] # CHAM LETTER PPA
AA1C ; [.322E.0020.0002] # CHAM LETTER PHA
AA1D ; [.322F.0020.0002] # CHAM LETTER BA
AA1E ; [.3230.0020.0002] # CHAM LETTER BHA
AA1F ; [.3231.0020.0002] # CHAM LETTER MUE
AA20 ; [.3232.0020.0002] # CHAM LETTER MA
AA21 ; [.3233.0020.0002] # CHAM LETTER BBA
AA22 ; [.3234.0020.0002] # CHAM LETTER YA
AA23 ; [.3235.0020.0002] # CHAM LETTER RA
AA24 ; [.3236.0020.0002] # CHAM LETTER LA
AA25 ; [.3237.0020.0002] # CHAM LETTER VA
AA26 ; [.3238.0020.0002] # CHAM LETTER SSA
AA27 ; [.3239.0020.0002] # CHAM LETTER SA
AA28 ; [.323A.0020.0002] # CHAM LETTER HA
AA33 ; [.323B.0020.0002] # CHAM CONSONANT SIGN YA
AA34 ; [.323C.0020.0002] # CHAM CONSONANT SIGN RA
AA35 ; [.323D.0020.0002] # CHAM CONSONANT SIGN LA
AA36 ; [.323E.0020.0002] # CHAM CONSONANT SIGN WA
AA29 ; [.323F.0020.0002] # CHAM VOWEL SIGN AA
AA2A ; [.3240.0020.0002] # CHAM VOWEL SIGN I
AA2B ; [.3241.0020.0002] # CHAM VOWEL SIGN II
AA2C ; [.3242.0020.0002] # CHAM VOWEL SIGN EI
AA2D ; [.3243.0020.0002] # CHAM VOWEL SIGN U
AA2E ; [.3244.0020.0002] # CHAM VOWEL SIGN OE
AA2F ; [.3245.0020.0002] # CHAM VOWEL SIGN O
AA30 ; [.3246.0020.0002] # CHAM VOWEL SIGN AI
AA31 ; [.3247.0020.0002] # CHAM VOWEL SIGN AU
AA32 ; [.3248.0020.0002] # CHAM VOWEL SIGN UE
AA40 ; [.3249.0020.0002] # CHAM LETTER FINAL K
AA41 ; [.324A.0020.0002] # CHAM LETTER FINAL G
AA42 ; [.324B.0020.0002] # CHAM LETTER FINAL NG
AA43 ; [.324C.0020.0002] # CHAM CONSONANT SIGN FINAL NG
AA44 ; [.324D.0020.0002] # CHAM LETTER FINAL CH
AA45 ; [.324E.0020.0002] # CHAM LETTER FINAL T
AA46 ; [.324F.0020.0002] # CHAM LETTER FINAL N
AA47 ; [.3250.0020.0002] # CHAM LETTER FINAL P
AA48 ; [.3251.0020.0002] # CHAM LETTER FINAL Y
AA49 ; [.3252.0020.0002] # CHAM LETTER FINAL R
AA4A ; [.3253.0020.0002] # CHAM LETTER FINAL L
AA4B ; [.3254.0020.0002] # CHAM LETTER FINAL SS
AA4C ; [.3255.0020.0002] # CHAM CONSONANT SIGN FINAL M
AA4D ; [.3256.0020.0002] # CHAM CONSONANT SIGN FINAL H
1B05 ; [.3257.0020.0002] # BALINESE LETTER AKARA
1B06 ; [.3258.0020.0002] # BALINESE LETTER AKARA TEDUNG
1B05 1B35 ; [.3258.0020.0002] # BALINESE LETTER AKARA TEDUNG
1B07 ; [.3259.0020.0002] # BALINESE LETTER IKARA
1B08 ; [.325A.0020.0002] # BALINESE LETTER IKARA TEDUNG
1B07 1B35 ; [.325A.0020.0002] # BALINESE LETTER IKARA TEDUNG
1B09 ; [.325B.0020.0002] # BALINESE LETTER UKARA
1B0A ; [.325C.0020.0002] # BALINESE LETTER UKARA TEDUNG
1B09 1B35 ; [.325C.0020.0002] # BALINESE LETTER UKARA TEDUNG
1B0B ; [.325D.0020.0002] # BALINESE LETTER RA REPA
1B0C ; [.325E.0020.0002] # BALINESE LETTER RA REPA TEDUNG
1B0B 1B35 ; [.325E.0020.0002] # BALINESE LETTER RA REPA TEDUNG
1B0D ; [.325F.0020.0002] # BALINESE LETTER LA LENGA
1B0E ; [.3260.0020.0002] # BALINESE LETTER LA LENGA TEDUNG
1B0D 1B35 ; [.3260.0020.0002] # BALINESE LETTER LA LENGA TEDUNG
1B0F ; [.3261.0020.0002] # BALINESE LETTER EKARA
1B10 ; [.3262.0020.0002] # BALINESE LETTER AIKARA
1B11 ; [.3263.0020.0002] # BALINESE LETTER OKARA
1B12 ; [.3264.0020.0002] # BALINESE LETTER OKARA TEDUNG
1B11 1B35 ; [.3264.0020.0002] # BALINESE LETTER OKARA TEDUNG
1B13 ; [.3265.0020.0002] # BALINESE LETTER KA
1B45 ; [.3266.0020.0002] # BALINESE LETTER KAF SASAK
1B46 ; [.3267.0020.0002] # BALINESE LETTER KHOT SASAK
1B14 ; [.3268.0020.0002] # BALINESE LETTER KA MAHAPRANA
1B15 ; [.3269.0020.0002] # BALINESE LETTER GA
1B16 ; [.326A.0020.0002] # BALINESE LETTER GA GORA
1B17 ; [.326B.0020.0002] # BALINESE LETTER NGA
1B18 ; [.326C.0020.0002] # BALINESE LETTER CA
1B19 ; [.326D.0020.0002] # BALINESE LETTER CA LACA
1B1A ; [.326E.0020.0002] # BALINESE LETTER JA
1B1B ; [.326F.0020.0002] # BALINESE LETTER JA JERA
1B1C ; [.3270.0020.0002] # BALINESE LETTER NYA
1B1D ; [.3271.0020.0002] # BALINESE LETTER TA LATIK
1B1E ; [.3272.0020.0002] # BALINESE LETTER TA MURDA MAHAPRANA
1B1F ; [.3273.0020.0002] # BALINESE LETTER DA MURDA ALPAPRANA
1B20 ; [.3274.0020.0002] # BALINESE LETTER DA MURDA MAHAPRANA
1B21 ; [.3275.0020.0002] # BALINESE LETTER NA RAMBAT
1B22 ; [.3276.0020.0002] # BALINESE LETTER TA
1B47 ; [.3277.0020.0002] # BALINESE LETTER TZIR SASAK
1B23 ; [.3278.0020.0002] # BALINESE LETTER TA TAWA
1B24 ; [.3279.0020.0002] # BALINESE LETTER DA
1B25 ; [.327A.0020.0002] # BALINESE LETTER DA MADU
1B26 ; [.327B.0020.0002] # BALINESE LETTER NA
1B27 ; [.327C.0020.0002] # BALINESE LETTER PA
1B48 ; [.327D.0020.0002] # BALINESE LETTER EF SASAK
1B28 ; [.327E.0020.0002] # BALINESE LETTER PA KAPAL
1B29 ; [.327F.0020.0002] # BALINESE LETTER BA
1B2A ; [.3280.0020.0002] # BALINESE LETTER BA KEMBANG
1B2B ; [.3281.0020.0002] # BALINESE LETTER MA
1B2C ; [.3282.0020.0002] # BALINESE LETTER YA
1B2D ; [.3283.0020.0002] # BALINESE LETTER RA
1B2E ; [.3284.0020.0002] # BALINESE LETTER LA
1B2F ; [.3285.0020.0002] # BALINESE LETTER WA
1B49 ; [.3286.0020.0002] # BALINESE LETTER VE SASAK
1B30 ; [.3287.0020.0002] # BALINESE LETTER SA SAGA
1B31 ; [.3288.0020.0002] # BALINESE LETTER SA SAPA
1B32 ; [.3289.0020.0002] # BALINESE LETTER SA
1B4A ; [.328A.0020.0002] # BALINESE LETTER ZAL SASAK
1B4B ; [.328B.0020.0002] # BALINESE LETTER ASYURA SASAK
1B33 ; [.328C.0020.0002] # BALINESE LETTER HA
1B35 ; [.328D.0020.0002] # BALINESE VOWEL SIGN TEDUNG
1B36 ; [.328E.0020.0002] # BALINESE VOWEL SIGN ULU
1B37 ; [.328F.0020.0002] # BALINESE VOWEL SIGN ULU SARI
1B38 ; [.3290.0020.0002] # BALINESE VOWEL SIGN SUKU
1B39 ; [.3291.0020.0002] # BALINESE VOWEL SIGN SUKU ILUT
1B3A ; [.3292.0020.0002] # BALINESE VOWEL SIGN RA REPA
1B3B ; [.3293.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG
1B3A 1B35 ; [.3293.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG
1B3C ; [.3294.0020.0002] # BALINESE VOWEL SIGN LA LENGA
1B3D ; [.3295.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG
1B3C 1B35 ; [.3295.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG
1B3E ; [.3296.0020.0002] # BALINESE VOWEL SIGN TALING
1B3F ; [.3297.0020.0002] # BALINESE VOWEL SIGN TALING REPA
1B40 ; [.3298.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG
1B3E 1B35 ; [.3298.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG
1B41 ; [.3299.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG
1B3F 1B35 ; [.3299.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG
1B42 ; [.329A.0020.0002] # BALINESE VOWEL SIGN PEPET
1B43 ; [.329B.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG
1B42 1B35 ; [.329B.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG
1B44 ; [.329C.0020.0002] # BALINESE ADEG ADEG
A984 ; [.329D.0020.0002] # JAVANESE LETTER A
A985 ; [.329E.0020.0002] # JAVANESE LETTER I KAWI
A986 ; [.329F.0020.0002] # JAVANESE LETTER I
A987 ; [.32A0.0020.0002] # JAVANESE LETTER II
A988 ; [.32A1.0020.0002] # JAVANESE LETTER U
A989 ; [.32A2.0020.0002] # JAVANESE LETTER PA CEREK
A98A ; [.32A3.0020.0002] # JAVANESE LETTER NGA LELET
A98B ; [.32A4.0020.0002] # JAVANESE LETTER NGA LELET RASWADI
A98C ; [.32A5.0020.0002] # JAVANESE LETTER E
A98D ; [.32A6.0020.0002] # JAVANESE LETTER AI
A98E ; [.32A7.0020.0002] # JAVANESE LETTER O
A98F ; [.32A8.0020.0002] # JAVANESE LETTER KA
A990 ; [.32A9.0020.0002] # JAVANESE LETTER KA SASAK
A991 ; [.32AA.0020.0002] # JAVANESE LETTER KA MURDA
A992 ; [.32AB.0020.0002] # JAVANESE LETTER GA
A993 ; [.32AC.0020.0002] # JAVANESE LETTER GA MURDA
A994 ; [.32AD.0020.0002] # JAVANESE LETTER NGA
A995 ; [.32AE.0020.0002] # JAVANESE LETTER CA
A996 ; [.32AF.0020.0002] # JAVANESE LETTER CA MURDA
A997 ; [.32B0.0020.0002] # JAVANESE LETTER JA
A998 ; [.32B1.0020.0002] # JAVANESE LETTER NYA MURDA
A999 ; [.32B2.0020.0002] # JAVANESE LETTER JA MAHAPRANA
A99A ; [.32B3.0020.0002] # JAVANESE LETTER NYA
A99B ; [.32B4.0020.0002] # JAVANESE LETTER TTA
A99C ; [.32B5.0020.0002] # JAVANESE LETTER TTA MAHAPRANA
A99D ; [.32B6.0020.0002] # JAVANESE LETTER DDA
A99E ; [.32B7.0020.0002] # JAVANESE LETTER DDA MAHAPRANA
A99F ; [.32B8.0020.0002] # JAVANESE LETTER NA MURDA
A9A0 ; [.32B9.0020.0002] # JAVANESE LETTER TA
A9A1 ; [.32BA.0020.0002] # JAVANESE LETTER TA MURDA
A9A2 ; [.32BB.0020.0002] # JAVANESE LETTER DA
A9A3 ; [.32BC.0020.0002] # JAVANESE LETTER DA MAHAPRANA
A9A4 ; [.32BD.0020.0002] # JAVANESE LETTER NA
A9A5 ; [.32BE.0020.0002] # JAVANESE LETTER PA
A9A6 ; [.32BF.0020.0002] # JAVANESE LETTER PA MURDA
A9A7 ; [.32C0.0020.0002] # JAVANESE LETTER BA
A9A8 ; [.32C1.0020.0002] # JAVANESE LETTER BA MURDA
A9A9 ; [.32C2.0020.0002] # JAVANESE LETTER MA
A9AA ; [.32C3.0020.0002] # JAVANESE LETTER YA
A9BE ; [.32C4.0020.0002] # JAVANESE CONSONANT SIGN PENGKAL
A9AB ; [.32C5.0020.0002] # JAVANESE LETTER RA
A9AC ; [.32C5.0020.0004] # JAVANESE LETTER RA AGUNG
A9BF ; [.32C6.0020.0002] # JAVANESE CONSONANT SIGN CAKRA
A9AD ; [.32C7.0020.0002] # JAVANESE LETTER LA
A9AE ; [.32C8.0020.0002] # JAVANESE LETTER WA
A9AF ; [.32C9.0020.0002] # JAVANESE LETTER SA MURDA
A9B0 ; [.32CA.0020.0002] # JAVANESE LETTER SA MAHAPRANA
A9B1 ; [.32CB.0020.0002] # JAVANESE LETTER SA
A9B2 ; [.32CC.0020.0002] # JAVANESE LETTER HA
A9B4 ; [.32CD.0020.0002] # JAVANESE VOWEL SIGN TARUNG
A9BC ; [.32CE.0020.0002] # JAVANESE VOWEL SIGN PEPET
A9B6 ; [.32CF.0020.0002] # JAVANESE VOWEL SIGN WULU
A9B7 ; [.32D0.0020.0002] # JAVANESE VOWEL SIGN WULU MELIK
A9B8 ; [.32D1.0020.0002] # JAVANESE VOWEL SIGN SUKU
A9B9 ; [.32D2.0020.0002] # JAVANESE VOWEL SIGN SUKU MENDUT
A9BD ; [.32D3.0020.0002] # JAVANESE CONSONANT SIGN KERET
A9BA ; [.32D4.0020.0002] # JAVANESE VOWEL SIGN TALING
A9BB ; [.32D5.0020.0002] # JAVANESE VOWEL SIGN DIRGA MURE
A9B5 ; [.32D6.0020.0002] # JAVANESE VOWEL SIGN TOLONG
A9C0 ; [.32D7.0020.0002] # JAVANESE PANGKON
1880 ; [.32D8.0020.0002] # MONGOLIAN LETTER ALI GALI ANUSVARA ONE
1881 ; [.32D9.0020.0002] # MONGOLIAN LETTER ALI GALI VISARGA ONE
1882 ; [.32DA.0020.0002] # MONGOLIAN LETTER ALI GALI DAMARU
1883 ; [.32DB.0020.0002] # MONGOLIAN LETTER ALI GALI UBADAMA
1884 ; [.32DC.0020.0002] # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
1885 ; [.32DD.0020.0002] # MONGOLIAN LETTER ALI GALI BALUDA
1886 ; [.32DE.0020.0002] # MONGOLIAN LETTER ALI GALI THREE BALUDA
1843 ; [.32DF.0020.0002] # MONGOLIAN LETTER TODO LONG VOWEL SIGN
1820 ; [.32E0.0020.0002] # MONGOLIAN LETTER A
1887 ; [.32E1.0020.0002] # MONGOLIAN LETTER ALI GALI A
1821 ; [.32E2.0020.0002] # MONGOLIAN LETTER E
1844 ; [.32E3.0020.0002] # MONGOLIAN LETTER TODO E
185D ; [.32E4.0020.0002] # MONGOLIAN LETTER SIBE E
1822 ; [.32E5.0020.0002] # MONGOLIAN LETTER I
1845 ; [.32E6.0020.0002] # MONGOLIAN LETTER TODO I
185E ; [.32E7.0020.0002] # MONGOLIAN LETTER SIBE I
1873 ; [.32E8.0020.0002] # MONGOLIAN LETTER MANCHU I
1888 ; [.32E9.0020.0002] # MONGOLIAN LETTER ALI GALI I
185F ; [.32EA.0020.0002] # MONGOLIAN LETTER SIBE IY
1823 ; [.32EB.0020.0002] # MONGOLIAN LETTER O
1846 ; [.32EC.0020.0002] # MONGOLIAN LETTER TODO O
1824 ; [.32ED.0020.0002] # MONGOLIAN LETTER U
1847 ; [.32EE.0020.0002] # MONGOLIAN LETTER TODO U
1861 ; [.32EF.0020.0002] # MONGOLIAN LETTER SIBE U
1825 ; [.32F0.0020.0002] # MONGOLIAN LETTER OE
1848 ; [.32F1.0020.0002] # MONGOLIAN LETTER TODO OE
1826 ; [.32F2.0020.0002] # MONGOLIAN LETTER UE
1849 ; [.32F3.0020.0002] # MONGOLIAN LETTER TODO UE
1860 ; [.32F4.0020.0002] # MONGOLIAN LETTER SIBE UE
1827 ; [.32F5.0020.0002] # MONGOLIAN LETTER EE
1828 ; [.32F6.0020.0002] # MONGOLIAN LETTER NA
1829 ; [.32F7.0020.0002] # MONGOLIAN LETTER ANG
184A ; [.32F8.0020.0002] # MONGOLIAN LETTER TODO ANG
1862 ; [.32F9.0020.0002] # MONGOLIAN LETTER SIBE ANG
188A ; [.32FA.0020.0002] # MONGOLIAN LETTER ALI GALI NGA
189B ; [.32FB.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI NGA
182A ; [.32FC.0020.0002] # MONGOLIAN LETTER BA
184B ; [.32FD.0020.0002] # MONGOLIAN LETTER TODO BA
182B ; [.32FE.0020.0002] # MONGOLIAN LETTER PA
184C ; [.32FF.0020.0002] # MONGOLIAN LETTER TODO PA
1866 ; [.3300.0020.0002] # MONGOLIAN LETTER SIBE PA
182C ; [.3301.0020.0002] # MONGOLIAN LETTER QA
184D ; [.3302.0020.0002] # MONGOLIAN LETTER TODO QA
182D ; [.3303.0020.0002] # MONGOLIAN LETTER GA
184E ; [.3304.0020.0002] # MONGOLIAN LETTER TODO GA
1864 ; [.3305.0020.0002] # MONGOLIAN LETTER SIBE GA
189A ; [.3306.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI GHA
1865 ; [.3307.0020.0002] # MONGOLIAN LETTER SIBE HA
182E ; [.3308.0020.0002] # MONGOLIAN LETTER MA
184F ; [.3309.0020.0002] # MONGOLIAN LETTER TODO MA
182F ; [.330A.0020.0002] # MONGOLIAN LETTER LA
1830 ; [.330B.0020.0002] # MONGOLIAN LETTER SA
1831 ; [.330C.0020.0002] # MONGOLIAN LETTER SHA
1867 ; [.330D.0020.0002] # MONGOLIAN LETTER SIBE SHA
189C ; [.330E.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CA
189D ; [.330F.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI JHA
18A2 ; [.3310.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI SSA
18A4 ; [.3311.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZHA
18A5 ; [.3312.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZA
1832 ; [.3313.0020.0002] # MONGOLIAN LETTER TA
1850 ; [.3314.0020.0002] # MONGOLIAN LETTER TODO TA
1868 ; [.3315.0020.0002] # MONGOLIAN LETTER SIBE TA
1833 ; [.3316.0020.0002] # MONGOLIAN LETTER DA
1851 ; [.3317.0020.0002] # MONGOLIAN LETTER TODO DA
1869 ; [.3318.0020.0002] # MONGOLIAN LETTER SIBE DA
1834 ; [.3319.0020.0002] # MONGOLIAN LETTER CHA
1852 ; [.331A.0020.0002] # MONGOLIAN LETTER TODO CHA
1871 ; [.331B.0020.0002] # MONGOLIAN LETTER SIBE CHA
185C ; [.331C.0020.0002] # MONGOLIAN LETTER TODO DZA
188B ; [.331D.0020.0002] # MONGOLIAN LETTER ALI GALI CA
1835 ; [.331E.0020.0002] # MONGOLIAN LETTER JA
1853 ; [.331F.0020.0002] # MONGOLIAN LETTER TODO JA
186A ; [.3320.0020.0002] # MONGOLIAN LETTER SIBE JA
1877 ; [.3321.0020.0002] # MONGOLIAN LETTER MANCHU ZHA
1836 ; [.3322.0020.0002] # MONGOLIAN LETTER YA
1855 ; [.3323.0020.0002] # MONGOLIAN LETTER TODO YA
1872 ; [.3324.0020.0002] # MONGOLIAN LETTER SIBE ZHA
1837 ; [.3325.0020.0002] # MONGOLIAN LETTER RA
1875 ; [.3326.0020.0002] # MONGOLIAN LETTER MANCHU RA
1838 ; [.3327.0020.0002] # MONGOLIAN LETTER WA
1856 ; [.3328.0020.0002] # MONGOLIAN LETTER TODO WA
1839 ; [.3329.0020.0002] # MONGOLIAN LETTER FA
186B ; [.332A.0020.0002] # MONGOLIAN LETTER SIBE FA
1876 ; [.332B.0020.0002] # MONGOLIAN LETTER MANCHU FA
183A ; [.332C.0020.0002] # MONGOLIAN LETTER KA
1857 ; [.332D.0020.0002] # MONGOLIAN LETTER TODO KA
1863 ; [.332E.0020.0002] # MONGOLIAN LETTER SIBE KA
1874 ; [.332F.0020.0002] # MONGOLIAN LETTER MANCHU KA
1889 ; [.3330.0020.0002] # MONGOLIAN LETTER ALI GALI KA
183B ; [.3331.0020.0002] # MONGOLIAN LETTER KHA
183C ; [.3332.0020.0002] # MONGOLIAN LETTER TSA
1854 ; [.3333.0020.0002] # MONGOLIAN LETTER TODO TSA
186E ; [.3334.0020.0002] # MONGOLIAN LETTER SIBE TSA
183D ; [.3335.0020.0002] # MONGOLIAN LETTER ZA
186F ; [.3336.0020.0002] # MONGOLIAN LETTER SIBE ZA
1858 ; [.3337.0020.0002] # MONGOLIAN LETTER TODO GAA
186C ; [.3338.0020.0002] # MONGOLIAN LETTER SIBE GAA
183E ; [.3339.0020.0002] # MONGOLIAN LETTER HAA
1859 ; [.333A.0020.0002] # MONGOLIAN LETTER TODO HAA
186D ; [.333B.0020.0002] # MONGOLIAN LETTER SIBE HAA
183F ; [.333C.0020.0002] # MONGOLIAN LETTER ZRA
1840 ; [.333D.0020.0002] # MONGOLIAN LETTER LHA
1841 ; [.333E.0020.0002] # MONGOLIAN LETTER ZHI
1842 ; [.333F.0020.0002] # MONGOLIAN LETTER CHI
185A ; [.3340.0020.0002] # MONGOLIAN LETTER TODO JIA
185B ; [.3341.0020.0002] # MONGOLIAN LETTER TODO NIA
1870 ; [.3342.0020.0002] # MONGOLIAN LETTER SIBE RAA
188C ; [.3343.0020.0002] # MONGOLIAN LETTER ALI GALI TTA
189E ; [.3344.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TTA
188D ; [.3345.0020.0002] # MONGOLIAN LETTER ALI GALI TTHA
188E ; [.3346.0020.0002] # MONGOLIAN LETTER ALI GALI DDA
189F ; [.3347.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DDHA
188F ; [.3348.0020.0002] # MONGOLIAN LETTER ALI GALI NNA
1890 ; [.3349.0020.0002] # MONGOLIAN LETTER ALI GALI TA
1898 ; [.334A.0020.0002] # MONGOLIAN LETTER TODO ALI GALI TA
18A0 ; [.334B.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TA
1891 ; [.334C.0020.0002] # MONGOLIAN LETTER ALI GALI DA
18A1 ; [.334D.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DHA
1892 ; [.334E.0020.0002] # MONGOLIAN LETTER ALI GALI PA
1893 ; [.334F.0020.0002] # MONGOLIAN LETTER ALI GALI PHA
18A8 ; [.3350.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI BHA
1894 ; [.3351.0020.0002] # MONGOLIAN LETTER ALI GALI SSA
18A3 ; [.3352.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CYA
1895 ; [.3353.0020.0002] # MONGOLIAN LETTER ALI GALI ZHA
1899 ; [.3354.0020.0002] # MONGOLIAN LETTER TODO ALI GALI ZHA
1896 ; [.3355.0020.0002] # MONGOLIAN LETTER ALI GALI ZA
1897 ; [.3356.0020.0002] # MONGOLIAN LETTER ALI GALI AH
18A6 ; [.3357.0020.0002] # MONGOLIAN LETTER ALI GALI HALF U
18A7 ; [.3358.0020.0002] # MONGOLIAN LETTER ALI GALI HALF YA
18AA ; [.3359.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI LHA
18A9 ; [.335A.0020.0002] # MONGOLIAN LETTER ALI GALI DAGALGA
1C5A ; [.335B.0020.0002] # OL CHIKI LETTER LA
1C5B ; [.335C.0020.0002] # OL CHIKI LETTER AT
1C5C ; [.335D.0020.0002] # OL CHIKI LETTER AG
1C5D ; [.335E.0020.0002] # OL CHIKI LETTER ANG
1C5E ; [.335F.0020.0002] # OL CHIKI LETTER AL
1C5F ; [.3360.0020.0002] # OL CHIKI LETTER LAA
1C60 ; [.3361.0020.0002] # OL CHIKI LETTER AAK
1C61 ; [.3362.0020.0002] # OL CHIKI LETTER AAJ
1C62 ; [.3363.0020.0002] # OL CHIKI LETTER AAM
1C63 ; [.3364.0020.0002] # OL CHIKI LETTER AAW
1C64 ; [.3365.0020.0002] # OL CHIKI LETTER LI
1C65 ; [.3366.0020.0002] # OL CHIKI LETTER IS
1C66 ; [.3367.0020.0002] # OL CHIKI LETTER IH
1C67 ; [.3368.0020.0002] # OL CHIKI LETTER INY
1C68 ; [.3369.0020.0002] # OL CHIKI LETTER IR
1C69 ; [.336A.0020.0002] # OL CHIKI LETTER LU
1C6A ; [.336B.0020.0002] # OL CHIKI LETTER UC
1C6B ; [.336C.0020.0002] # OL CHIKI LETTER UD
1C6C ; [.336D.0020.0002] # OL CHIKI LETTER UNN
1C6D ; [.336E.0020.0002] # OL CHIKI LETTER UY
1C6E ; [.336F.0020.0002] # OL CHIKI LETTER LE
1C6F ; [.3370.0020.0002] # OL CHIKI LETTER EP
1C70 ; [.3371.0020.0002] # OL CHIKI LETTER EDD
1C71 ; [.3372.0020.0002] # OL CHIKI LETTER EN
1C72 ; [.3373.0020.0002] # OL CHIKI LETTER ERR
1C73 ; [.3374.0020.0002] # OL CHIKI LETTER LO
1C74 ; [.3375.0020.0002] # OL CHIKI LETTER OTT
1C75 ; [.3376.0020.0002] # OL CHIKI LETTER OB
1C76 ; [.3377.0020.0002] # OL CHIKI LETTER OV
1C77 ; [.3378.0020.0002] # OL CHIKI LETTER OH
1C78 ; [.3379.0020.0002] # OL CHIKI MU TTUDDAG
1C79 ; [.337A.0020.0002] # OL CHIKI GAAHLAA TTUDDAAG
1C7A ; [.337B.0020.0002] # OL CHIKI MU-GAAHLAA TTUDDAAG
1C7B ; [.337C.0020.0002] # OL CHIKI RELAA
1C7C ; [.337D.0020.0002] # OL CHIKI PHAARKAA
1C7D ; [.337E.0020.0002] # OL CHIKI AHAD
AB70 ; [.337F.0020.0002] # CHEROKEE SMALL LETTER A
13A0 ; [.337F.0020.0008] # CHEROKEE LETTER A
AB71 ; [.3380.0020.0002] # CHEROKEE SMALL LETTER E
13A1 ; [.3380.0020.0008] # CHEROKEE LETTER E
AB72 ; [.3381.0020.0002] # CHEROKEE SMALL LETTER I
13A2 ; [.3381.0020.0008] # CHEROKEE LETTER I
AB73 ; [.3382.0020.0002] # CHEROKEE SMALL LETTER O
13A3 ; [.3382.0020.0008] # CHEROKEE LETTER O
AB74 ; [.3383.0020.0002] # CHEROKEE SMALL LETTER U
13A4 ; [.3383.0020.0008] # CHEROKEE LETTER U
AB75 ; [.3384.0020.0002] # CHEROKEE SMALL LETTER V
13A5 ; [.3384.0020.0008] # CHEROKEE LETTER V
AB76 ; [.3385.0020.0002] # CHEROKEE SMALL LETTER GA
13A6 ; [.3385.0020.0008] # CHEROKEE LETTER GA
AB77 ; [.3386.0020.0002] # CHEROKEE SMALL LETTER KA
13A7 ; [.3386.0020.0008] # CHEROKEE LETTER KA
AB78 ; [.3387.0020.0002] # CHEROKEE SMALL LETTER GE
13A8 ; [.3387.0020.0008] # CHEROKEE LETTER GE
AB79 ; [.3388.0020.0002] # CHEROKEE SMALL LETTER GI
13A9 ; [.3388.0020.0008] # CHEROKEE LETTER GI
AB7A ; [.3389.0020.0002] # CHEROKEE SMALL LETTER GO
13AA ; [.3389.0020.0008] # CHEROKEE LETTER GO
AB7B ; [.338A.0020.0002] # CHEROKEE SMALL LETTER GU
13AB ; [.338A.0020.0008] # CHEROKEE LETTER GU
AB7C ; [.338B.0020.0002] # CHEROKEE SMALL LETTER GV
13AC ; [.338B.0020.0008] # CHEROKEE LETTER GV
AB7D ; [.338C.0020.0002] # CHEROKEE SMALL LETTER HA
13AD ; [.338C.0020.0008] # CHEROKEE LETTER HA
AB7E ; [.338D.0020.0002] # CHEROKEE SMALL LETTER HE
13AE ; [.338D.0020.0008] # CHEROKEE LETTER HE
AB7F ; [.338E.0020.0002] # CHEROKEE SMALL LETTER HI
13AF ; [.338E.0020.0008] # CHEROKEE LETTER HI
AB80 ; [.338F.0020.0002] # CHEROKEE SMALL LETTER HO
13B0 ; [.338F.0020.0008] # CHEROKEE LETTER HO
AB81 ; [.3390.0020.0002] # CHEROKEE SMALL LETTER HU
13B1 ; [.3390.0020.0008] # CHEROKEE LETTER HU
AB82 ; [.3391.0020.0002] # CHEROKEE SMALL LETTER HV
13B2 ; [.3391.0020.0008] # CHEROKEE LETTER HV
AB83 ; [.3392.0020.0002] # CHEROKEE SMALL LETTER LA
13B3 ; [.3392.0020.0008] # CHEROKEE LETTER LA
AB84 ; [.3393.0020.0002] # CHEROKEE SMALL LETTER LE
13B4 ; [.3393.0020.0008] # CHEROKEE LETTER LE
AB85 ; [.3394.0020.0002] # CHEROKEE SMALL LETTER LI
13B5 ; [.3394.0020.0008] # CHEROKEE LETTER LI
AB86 ; [.3395.0020.0002] # CHEROKEE SMALL LETTER LO
13B6 ; [.3395.0020.0008] # CHEROKEE LETTER LO
AB87 ; [.3396.0020.0002] # CHEROKEE SMALL LETTER LU
13B7 ; [.3396.0020.0008] # CHEROKEE LETTER LU
AB88 ; [.3397.0020.0002] # CHEROKEE SMALL LETTER LV
13B8 ; [.3397.0020.0008] # CHEROKEE LETTER LV
AB89 ; [.3398.0020.0002] # CHEROKEE SMALL LETTER MA
13B9 ; [.3398.0020.0008] # CHEROKEE LETTER MA
AB8A ; [.3399.0020.0002] # CHEROKEE SMALL LETTER ME
13BA ; [.3399.0020.0008] # CHEROKEE LETTER ME
AB8B ; [.339A.0020.0002] # CHEROKEE SMALL LETTER MI
13BB ; [.339A.0020.0008] # CHEROKEE LETTER MI
AB8C ; [.339B.0020.0002] # CHEROKEE SMALL LETTER MO
13BC ; [.339B.0020.0008] # CHEROKEE LETTER MO
AB8D ; [.339C.0020.0002] # CHEROKEE SMALL LETTER MU
13BD ; [.339C.0020.0008] # CHEROKEE LETTER MU
AB8E ; [.339D.0020.0002] # CHEROKEE SMALL LETTER NA
13BE ; [.339D.0020.0008] # CHEROKEE LETTER NA
AB8F ; [.339E.0020.0002] # CHEROKEE SMALL LETTER HNA
13BF ; [.339E.0020.0008] # CHEROKEE LETTER HNA
AB90 ; [.339F.0020.0002] # CHEROKEE SMALL LETTER NAH
13C0 ; [.339F.0020.0008] # CHEROKEE LETTER NAH
AB91 ; [.33A0.0020.0002] # CHEROKEE SMALL LETTER NE
13C1 ; [.33A0.0020.0008] # CHEROKEE LETTER NE
AB92 ; [.33A1.0020.0002] # CHEROKEE SMALL LETTER NI
13C2 ; [.33A1.0020.0008] # CHEROKEE LETTER NI
AB93 ; [.33A2.0020.0002] # CHEROKEE SMALL LETTER NO
13C3 ; [.33A2.0020.0008] # CHEROKEE LETTER NO
AB94 ; [.33A3.0020.0002] # CHEROKEE SMALL LETTER NU
13C4 ; [.33A3.0020.0008] # CHEROKEE LETTER NU
AB95 ; [.33A4.0020.0002] # CHEROKEE SMALL LETTER NV
13C5 ; [.33A4.0020.0008] # CHEROKEE LETTER NV
AB96 ; [.33A5.0020.0002] # CHEROKEE SMALL LETTER QUA
13C6 ; [.33A5.0020.0008] # CHEROKEE LETTER QUA
AB97 ; [.33A6.0020.0002] # CHEROKEE SMALL LETTER QUE
13C7 ; [.33A6.0020.0008] # CHEROKEE LETTER QUE
AB98 ; [.33A7.0020.0002] # CHEROKEE SMALL LETTER QUI
13C8 ; [.33A7.0020.0008] # CHEROKEE LETTER QUI
AB99 ; [.33A8.0020.0002] # CHEROKEE SMALL LETTER QUO
13C9 ; [.33A8.0020.0008] # CHEROKEE LETTER QUO
AB9A ; [.33A9.0020.0002] # CHEROKEE SMALL LETTER QUU
13CA ; [.33A9.0020.0008] # CHEROKEE LETTER QUU
AB9B ; [.33AA.0020.0002] # CHEROKEE SMALL LETTER QUV
13CB ; [.33AA.0020.0008] # CHEROKEE LETTER QUV
AB9C ; [.33AB.0020.0002] # CHEROKEE SMALL LETTER SA
13CC ; [.33AB.0020.0008] # CHEROKEE LETTER SA
AB9D ; [.33AC.0020.0002] # CHEROKEE SMALL LETTER S
13CD ; [.33AC.0020.0008] # CHEROKEE LETTER S
AB9E ; [.33AD.0020.0002] # CHEROKEE SMALL LETTER SE
13CE ; [.33AD.0020.0008] # CHEROKEE LETTER SE
AB9F ; [.33AE.0020.0002] # CHEROKEE SMALL LETTER SI
13CF ; [.33AE.0020.0008] # CHEROKEE LETTER SI
ABA0 ; [.33AF.0020.0002] # CHEROKEE SMALL LETTER SO
13D0 ; [.33AF.0020.0008] # CHEROKEE LETTER SO
ABA1 ; [.33B0.0020.0002] # CHEROKEE SMALL LETTER SU
13D1 ; [.33B0.0020.0008] # CHEROKEE LETTER SU
ABA2 ; [.33B1.0020.0002] # CHEROKEE SMALL LETTER SV
13D2 ; [.33B1.0020.0008] # CHEROKEE LETTER SV
ABA3 ; [.33B2.0020.0002] # CHEROKEE SMALL LETTER DA
13D3 ; [.33B2.0020.0008] # CHEROKEE LETTER DA
ABA4 ; [.33B3.0020.0002] # CHEROKEE SMALL LETTER TA
13D4 ; [.33B3.0020.0008] # CHEROKEE LETTER TA
ABA5 ; [.33B4.0020.0002] # CHEROKEE SMALL LETTER DE
13D5 ; [.33B4.0020.0008] # CHEROKEE LETTER DE
ABA6 ; [.33B5.0020.0002] # CHEROKEE SMALL LETTER TE
13D6 ; [.33B5.0020.0008] # CHEROKEE LETTER TE
ABA7 ; [.33B6.0020.0002] # CHEROKEE SMALL LETTER DI
13D7 ; [.33B6.0020.0008] # CHEROKEE LETTER DI
ABA8 ; [.33B7.0020.0002] # CHEROKEE SMALL LETTER TI
13D8 ; [.33B7.0020.0008] # CHEROKEE LETTER TI
ABA9 ; [.33B8.0020.0002] # CHEROKEE SMALL LETTER DO
13D9 ; [.33B8.0020.0008] # CHEROKEE LETTER DO
ABAA ; [.33B9.0020.0002] # CHEROKEE SMALL LETTER DU
13DA ; [.33B9.0020.0008] # CHEROKEE LETTER DU
ABAB ; [.33BA.0020.0002] # CHEROKEE SMALL LETTER DV
13DB ; [.33BA.0020.0008] # CHEROKEE LETTER DV
ABAC ; [.33BB.0020.0002] # CHEROKEE SMALL LETTER DLA
13DC ; [.33BB.0020.0008] # CHEROKEE LETTER DLA
ABAD ; [.33BC.0020.0002] # CHEROKEE SMALL LETTER TLA
13DD ; [.33BC.0020.0008] # CHEROKEE LETTER TLA
ABAE ; [.33BD.0020.0002] # CHEROKEE SMALL LETTER TLE
13DE ; [.33BD.0020.0008] # CHEROKEE LETTER TLE
ABAF ; [.33BE.0020.0002] # CHEROKEE SMALL LETTER TLI
13DF ; [.33BE.0020.0008] # CHEROKEE LETTER TLI
ABB0 ; [.33BF.0020.0002] # CHEROKEE SMALL LETTER TLO
13E0 ; [.33BF.0020.0008] # CHEROKEE LETTER TLO
ABB1 ; [.33C0.0020.0002] # CHEROKEE SMALL LETTER TLU
13E1 ; [.33C0.0020.0008] # CHEROKEE LETTER TLU
ABB2 ; [.33C1.0020.0002] # CHEROKEE SMALL LETTER TLV
13E2 ; [.33C1.0020.0008] # CHEROKEE LETTER TLV
ABB3 ; [.33C2.0020.0002] # CHEROKEE SMALL LETTER TSA
13E3 ; [.33C2.0020.0008] # CHEROKEE LETTER TSA
ABB4 ; [.33C3.0020.0002] # CHEROKEE SMALL LETTER TSE
13E4 ; [.33C3.0020.0008] # CHEROKEE LETTER TSE
ABB5 ; [.33C4.0020.0002] # CHEROKEE SMALL LETTER TSI
13E5 ; [.33C4.0020.0008] # CHEROKEE LETTER TSI
ABB6 ; [.33C5.0020.0002] # CHEROKEE SMALL LETTER TSO
13E6 ; [.33C5.0020.0008] # CHEROKEE LETTER TSO
ABB7 ; [.33C6.0020.0002] # CHEROKEE SMALL LETTER TSU
13E7 ; [.33C6.0020.0008] # CHEROKEE LETTER TSU
ABB8 ; [.33C7.0020.0002] # CHEROKEE SMALL LETTER TSV
13E8 ; [.33C7.0020.0008] # CHEROKEE LETTER TSV
ABB9 ; [.33C8.0020.0002] # CHEROKEE SMALL LETTER WA
13E9 ; [.33C8.0020.0008] # CHEROKEE LETTER WA
ABBA ; [.33C9.0020.0002] # CHEROKEE SMALL LETTER WE
13EA ; [.33C9.0020.0008] # CHEROKEE LETTER WE
ABBB ; [.33CA.0020.0002] # CHEROKEE SMALL LETTER WI
13EB ; [.33CA.0020.0008] # CHEROKEE LETTER WI
ABBC ; [.33CB.0020.0002] # CHEROKEE SMALL LETTER WO
13EC ; [.33CB.0020.0008] # CHEROKEE LETTER WO
ABBD ; [.33CC.0020.0002] # CHEROKEE SMALL LETTER WU
13ED ; [.33CC.0020.0008] # CHEROKEE LETTER WU
ABBE ; [.33CD.0020.0002] # CHEROKEE SMALL LETTER WV
13EE ; [.33CD.0020.0008] # CHEROKEE LETTER WV
ABBF ; [.33CE.0020.0002] # CHEROKEE SMALL LETTER YA
13EF ; [.33CE.0020.0008] # CHEROKEE LETTER YA
13F8 ; [.33CF.0020.0002] # CHEROKEE SMALL LETTER YE
13F0 ; [.33CF.0020.0008] # CHEROKEE LETTER YE
13F9 ; [.33D0.0020.0002] # CHEROKEE SMALL LETTER YI
13F1 ; [.33D0.0020.0008] # CHEROKEE LETTER YI
13FA ; [.33D1.0020.0002] # CHEROKEE SMALL LETTER YO
13F2 ; [.33D1.0020.0008] # CHEROKEE LETTER YO
13FB ; [.33D2.0020.0002] # CHEROKEE SMALL LETTER YU
13F3 ; [.33D2.0020.0008] # CHEROKEE LETTER YU
13FC ; [.33D3.0020.0002] # CHEROKEE SMALL LETTER YV
13F4 ; [.33D3.0020.0008] # CHEROKEE LETTER YV
13FD ; [.33D4.0020.0002] # CHEROKEE SMALL LETTER MV
13F5 ; [.33D4.0020.0008] # CHEROKEE LETTER MV
104D8 ; [.33D5.0020.0002] # OSAGE SMALL LETTER A
104B0 ; [.33D5.0020.0008] # OSAGE CAPITAL LETTER A
104D9 ; [.33D6.0020.0002] # OSAGE SMALL LETTER AI
104B1 ; [.33D6.0020.0008] # OSAGE CAPITAL LETTER AI
104DA ; [.33D7.0020.0002] # OSAGE SMALL LETTER AIN
104B2 ; [.33D7.0020.0008] # OSAGE CAPITAL LETTER AIN
104DB ; [.33D8.0020.0002] # OSAGE SMALL LETTER AH
104B3 ; [.33D8.0020.0008] # OSAGE CAPITAL LETTER AH
104DC ; [.33D9.0020.0002] # OSAGE SMALL LETTER BRA
104B4 ; [.33D9.0020.0008] # OSAGE CAPITAL LETTER BRA
104DD ; [.33DA.0020.0002] # OSAGE SMALL LETTER CHA
104B5 ; [.33DA.0020.0008] # OSAGE CAPITAL LETTER CHA
104DE ; [.33DB.0020.0002] # OSAGE SMALL LETTER EHCHA
104B6 ; [.33DB.0020.0008] # OSAGE CAPITAL LETTER EHCHA
104DF ; [.33DC.0020.0002] # OSAGE SMALL LETTER E
104B7 ; [.33DC.0020.0008] # OSAGE CAPITAL LETTER E
104E0 ; [.33DD.0020.0002] # OSAGE SMALL LETTER EIN
104B8 ; [.33DD.0020.0008] # OSAGE CAPITAL LETTER EIN
104E1 ; [.33DE.0020.0002] # OSAGE SMALL LETTER HA
104B9 ; [.33DE.0020.0008] # OSAGE CAPITAL LETTER HA
104E2 ; [.33DF.0020.0002] # OSAGE SMALL LETTER HYA
104BA ; [.33DF.0020.0008] # OSAGE CAPITAL LETTER HYA
104E3 ; [.33E0.0020.0002] # OSAGE SMALL LETTER I
104BB ; [.33E0.0020.0008] # OSAGE CAPITAL LETTER I
104E4 ; [.33E1.0020.0002] # OSAGE SMALL LETTER KA
104BC ; [.33E1.0020.0008] # OSAGE CAPITAL LETTER KA
104E5 ; [.33E2.0020.0002] # OSAGE SMALL LETTER EHKA
104BD ; [.33E2.0020.0008] # OSAGE CAPITAL LETTER EHKA
104E6 ; [.33E3.0020.0002] # OSAGE SMALL LETTER KYA
104BE ; [.33E3.0020.0008] # OSAGE CAPITAL LETTER KYA
104E7 ; [.33E4.0020.0002] # OSAGE SMALL LETTER LA
104BF ; [.33E4.0020.0008] # OSAGE CAPITAL LETTER LA
104E8 ; [.33E5.0020.0002] # OSAGE SMALL LETTER MA
104C0 ; [.33E5.0020.0008] # OSAGE CAPITAL LETTER MA
104E9 ; [.33E6.0020.0002] # OSAGE SMALL LETTER NA
104C1 ; [.33E6.0020.0008] # OSAGE CAPITAL LETTER NA
104EA ; [.33E7.0020.0002] # OSAGE SMALL LETTER O
104C2 ; [.33E7.0020.0008] # OSAGE CAPITAL LETTER O
104EB ; [.33E8.0020.0002] # OSAGE SMALL LETTER OIN
104C3 ; [.33E8.0020.0008] # OSAGE CAPITAL LETTER OIN
104EC ; [.33E9.0020.0002] # OSAGE SMALL LETTER PA
104C4 ; [.33E9.0020.0008] # OSAGE CAPITAL LETTER PA
104ED ; [.33EA.0020.0002] # OSAGE SMALL LETTER EHPA
104C5 ; [.33EA.0020.0008] # OSAGE CAPITAL LETTER EHPA
104EE ; [.33EB.0020.0002] # OSAGE SMALL LETTER SA
104C6 ; [.33EB.0020.0008] # OSAGE CAPITAL LETTER SA
104EF ; [.33EC.0020.0002] # OSAGE SMALL LETTER SHA
104C7 ; [.33EC.0020.0008] # OSAGE CAPITAL LETTER SHA
104F0 ; [.33ED.0020.0002] # OSAGE SMALL LETTER TA
104C8 ; [.33ED.0020.0008] # OSAGE CAPITAL LETTER TA
104F1 ; [.33EE.0020.0002] # OSAGE SMALL LETTER EHTA
104C9 ; [.33EE.0020.0008] # OSAGE CAPITAL LETTER EHTA
104F2 ; [.33EF.0020.0002] # OSAGE SMALL LETTER TSA
104CA ; [.33EF.0020.0008] # OSAGE CAPITAL LETTER TSA
104F3 ; [.33F0.0020.0002] # OSAGE SMALL LETTER EHTSA
104CB ; [.33F0.0020.0008] # OSAGE CAPITAL LETTER EHTSA
104F4 ; [.33F1.0020.0002] # OSAGE SMALL LETTER TSHA
104CC ; [.33F1.0020.0008] # OSAGE CAPITAL LETTER TSHA
104F5 ; [.33F2.0020.0002] # OSAGE SMALL LETTER DHA
104CD ; [.33F2.0020.0008] # OSAGE CAPITAL LETTER DHA
104F6 ; [.33F3.0020.0002] # OSAGE SMALL LETTER U
104CE ; [.33F3.0020.0008] # OSAGE CAPITAL LETTER U
104F7 ; [.33F4.0020.0002] # OSAGE SMALL LETTER WA
104CF ; [.33F4.0020.0008] # OSAGE CAPITAL LETTER WA
104F8 ; [.33F5.0020.0002] # OSAGE SMALL LETTER KHA
104D0 ; [.33F5.0020.0008] # OSAGE CAPITAL LETTER KHA
104F9 ; [.33F6.0020.0002] # OSAGE SMALL LETTER GHA
104D1 ; [.33F6.0020.0008] # OSAGE CAPITAL LETTER GHA
104FA ; [.33F7.0020.0002] # OSAGE SMALL LETTER ZA
104D2 ; [.33F7.0020.0008] # OSAGE CAPITAL LETTER ZA
104FB ; [.33F8.0020.0002] # OSAGE SMALL LETTER ZHA
104D3 ; [.33F8.0020.0008] # OSAGE CAPITAL LETTER ZHA
1401 ; [.33F9.0020.0002] # CANADIAN SYLLABICS E
1402 ; [.33FA.0020.0002] # CANADIAN SYLLABICS AAI
1403 ; [.33FB.0020.0002] # CANADIAN SYLLABICS I
1404 ; [.33FC.0020.0002] # CANADIAN SYLLABICS II
1405 ; [.33FD.0020.0002] # CANADIAN SYLLABICS O
1406 ; [.33FE.0020.0002] # CANADIAN SYLLABICS OO
1407 ; [.33FF.0020.0002] # CANADIAN SYLLABICS Y-CREE OO
1408 ; [.3400.0020.0002] # CANADIAN SYLLABICS CARRIER EE
1409 ; [.3401.0020.0002] # CANADIAN SYLLABICS CARRIER I
140A ; [.3402.0020.0002] # CANADIAN SYLLABICS A
140B ; [.3403.0020.0002] # CANADIAN SYLLABICS AA
140C ; [.3404.0020.0002] # CANADIAN SYLLABICS WE
140D ; [.3405.0020.0002] # CANADIAN SYLLABICS WEST-CREE WE
140E ; [.3406.0020.0002] # CANADIAN SYLLABICS WI
140F ; [.3407.0020.0002] # CANADIAN SYLLABICS WEST-CREE WI
1410 ; [.3408.0020.0002] # CANADIAN SYLLABICS WII
1411 ; [.3409.0020.0002] # CANADIAN SYLLABICS WEST-CREE WII
1412 ; [.340A.0020.0002] # CANADIAN SYLLABICS WO
1413 ; [.340B.0020.0002] # CANADIAN SYLLABICS WEST-CREE WO
1414 ; [.340C.0020.0002] # CANADIAN SYLLABICS WOO
1415 ; [.340D.0020.0002] # CANADIAN SYLLABICS WEST-CREE WOO
1416 ; [.340E.0020.0002] # CANADIAN SYLLABICS NASKAPI WOO
1417 ; [.340F.0020.0002] # CANADIAN SYLLABICS WA
1418 ; [.3410.0020.0002] # CANADIAN SYLLABICS WEST-CREE WA
1419 ; [.3411.0020.0002] # CANADIAN SYLLABICS WAA
141A ; [.3412.0020.0002] # CANADIAN SYLLABICS WEST-CREE WAA
141B ; [.3413.0020.0002] # CANADIAN SYLLABICS NASKAPI WAA
141C ; [.3414.0020.0002] # CANADIAN SYLLABICS AI
141D ; [.3415.0020.0002] # CANADIAN SYLLABICS Y-CREE W
141E ; [.3416.0020.0002] # CANADIAN SYLLABICS GLOTTAL STOP
141F ; [.3417.0020.0002] # CANADIAN SYLLABICS FINAL ACUTE
1420 ; [.3418.0020.0002] # CANADIAN SYLLABICS FINAL GRAVE
1421 ; [.3419.0020.0002] # CANADIAN SYLLABICS FINAL BOTTOM HALF RING
1422 ; [.341A.0020.0002] # CANADIAN SYLLABICS FINAL TOP HALF RING
1423 ; [.341B.0020.0002] # CANADIAN SYLLABICS FINAL RIGHT HALF RING
1424 ; [.341C.0020.0002] # CANADIAN SYLLABICS FINAL RING
1425 ; [.341D.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE ACUTE
1426 ; [.341E.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
1427 ; [.341F.0020.0002] # CANADIAN SYLLABICS FINAL MIDDLE DOT
1428 ; [.3420.0020.0002] # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
1429 ; [.3421.0020.0002] # CANADIAN SYLLABICS FINAL PLUS
142A ; [.3422.0020.0002] # CANADIAN SYLLABICS FINAL DOWN TACK
142B ; [.3423.0020.0002] # CANADIAN SYLLABICS EN
142C ; [.3424.0020.0002] # CANADIAN SYLLABICS IN
142D ; [.3425.0020.0002] # CANADIAN SYLLABICS ON
142E ; [.3426.0020.0002] # CANADIAN SYLLABICS AN
142F ; [.3427.0020.0002] # CANADIAN SYLLABICS PE
1430 ; [.3428.0020.0002] # CANADIAN SYLLABICS PAAI
1431 ; [.3429.0020.0002] # CANADIAN SYLLABICS PI
1432 ; [.342A.0020.0002] # CANADIAN SYLLABICS PII
1433 ; [.342B.0020.0002] # CANADIAN SYLLABICS PO
1434 ; [.342C.0020.0002] # CANADIAN SYLLABICS POO
1435 ; [.342D.0020.0002] # CANADIAN SYLLABICS Y-CREE POO
1436 ; [.342E.0020.0002] # CANADIAN SYLLABICS CARRIER HEE
1437 ; [.342F.0020.0002] # CANADIAN SYLLABICS CARRIER HI
1438 ; [.3430.0020.0002] # CANADIAN SYLLABICS PA
1439 ; [.3431.0020.0002] # CANADIAN SYLLABICS PAA
143A ; [.3432.0020.0002] # CANADIAN SYLLABICS PWE
143B ; [.3433.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWE
143C ; [.3434.0020.0002] # CANADIAN SYLLABICS PWI
143D ; [.3435.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWI
143E ; [.3436.0020.0002] # CANADIAN SYLLABICS PWII
143F ; [.3437.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWII
1440 ; [.3438.0020.0002] # CANADIAN SYLLABICS PWO
1441 ; [.3439.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWO
1442 ; [.343A.0020.0002] # CANADIAN SYLLABICS PWOO
1443 ; [.343B.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWOO
1444 ; [.343C.0020.0002] # CANADIAN SYLLABICS PWA
1445 ; [.343D.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWA
1446 ; [.343E.0020.0002] # CANADIAN SYLLABICS PWAA
1447 ; [.343F.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWAA
1448 ; [.3440.0020.0002] # CANADIAN SYLLABICS Y-CREE PWAA
1449 ; [.3441.0020.0002] # CANADIAN SYLLABICS P
144A ; [.3442.0020.0002] # CANADIAN SYLLABICS WEST-CREE P
144B ; [.3443.0020.0002] # CANADIAN SYLLABICS CARRIER H
144C ; [.3444.0020.0002] # CANADIAN SYLLABICS TE
144D ; [.3445.0020.0002] # CANADIAN SYLLABICS TAAI
144E ; [.3446.0020.0002] # CANADIAN SYLLABICS TI
144F ; [.3447.0020.0002] # CANADIAN SYLLABICS TII
1450 ; [.3448.0020.0002] # CANADIAN SYLLABICS TO
1451 ; [.3449.0020.0002] # CANADIAN SYLLABICS TOO
1452 ; [.344A.0020.0002] # CANADIAN SYLLABICS Y-CREE TOO
1453 ; [.344B.0020.0002] # CANADIAN SYLLABICS CARRIER DEE
1454 ; [.344C.0020.0002] # CANADIAN SYLLABICS CARRIER DI
1455 ; [.344D.0020.0002] # CANADIAN SYLLABICS TA
1456 ; [.344E.0020.0002] # CANADIAN SYLLABICS TAA
1457 ; [.344F.0020.0002] # CANADIAN SYLLABICS TWE
1458 ; [.3450.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWE
1459 ; [.3451.0020.0002] # CANADIAN SYLLABICS TWI
145A ; [.3452.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWI
145B ; [.3453.0020.0002] # CANADIAN SYLLABICS TWII
145C ; [.3454.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWII
145D ; [.3455.0020.0002] # CANADIAN SYLLABICS TWO
145E ; [.3456.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWO
145F ; [.3457.0020.0002] # CANADIAN SYLLABICS TWOO
1460 ; [.3458.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWOO
1461 ; [.3459.0020.0002] # CANADIAN SYLLABICS TWA
1462 ; [.345A.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWA
1463 ; [.345B.0020.0002] # CANADIAN SYLLABICS TWAA
1464 ; [.345C.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWAA
1465 ; [.345D.0020.0002] # CANADIAN SYLLABICS NASKAPI TWAA
1466 ; [.345E.0020.0002] # CANADIAN SYLLABICS T
1467 ; [.345F.0020.0002] # CANADIAN SYLLABICS TTE
1468 ; [.3460.0020.0002] # CANADIAN SYLLABICS TTI
1469 ; [.3461.0020.0002] # CANADIAN SYLLABICS TTO
146A ; [.3462.0020.0002] # CANADIAN SYLLABICS TTA
146B ; [.3463.0020.0002] # CANADIAN SYLLABICS KE
146C ; [.3464.0020.0002] # CANADIAN SYLLABICS KAAI
146D ; [.3465.0020.0002] # CANADIAN SYLLABICS KI
146E ; [.3466.0020.0002] # CANADIAN SYLLABICS KII
146F ; [.3467.0020.0002] # CANADIAN SYLLABICS KO
1470 ; [.3468.0020.0002] # CANADIAN SYLLABICS KOO
1471 ; [.3469.0020.0002] # CANADIAN SYLLABICS Y-CREE KOO
1472 ; [.346A.0020.0002] # CANADIAN SYLLABICS KA
1473 ; [.346B.0020.0002] # CANADIAN SYLLABICS KAA
1474 ; [.346C.0020.0002] # CANADIAN SYLLABICS KWE
1475 ; [.346D.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWE
1476 ; [.346E.0020.0002] # CANADIAN SYLLABICS KWI
1477 ; [.346F.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWI
1478 ; [.3470.0020.0002] # CANADIAN SYLLABICS KWII
1479 ; [.3471.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWII
147A ; [.3472.0020.0002] # CANADIAN SYLLABICS KWO
147B ; [.3473.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWO
147C ; [.3474.0020.0002] # CANADIAN SYLLABICS KWOO
147D ; [.3475.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWOO
147E ; [.3476.0020.0002] # CANADIAN SYLLABICS KWA
147F ; [.3477.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWA
1480 ; [.3478.0020.0002] # CANADIAN SYLLABICS KWAA
1481 ; [.3479.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWAA
1482 ; [.347A.0020.0002] # CANADIAN SYLLABICS NASKAPI KWAA
1483 ; [.347B.0020.0002] # CANADIAN SYLLABICS K
1484 ; [.347C.0020.0002] # CANADIAN SYLLABICS KW
1485 ; [.347D.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KEH
1486 ; [.347E.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KIH
1487 ; [.347F.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KOH
1488 ; [.3480.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KAH
1489 ; [.3481.0020.0002] # CANADIAN SYLLABICS CE
148A ; [.3482.0020.0002] # CANADIAN SYLLABICS CAAI
148B ; [.3483.0020.0002] # CANADIAN SYLLABICS CI
148C ; [.3484.0020.0002] # CANADIAN SYLLABICS CII
148D ; [.3485.0020.0002] # CANADIAN SYLLABICS CO
148E ; [.3486.0020.0002] # CANADIAN SYLLABICS COO
148F ; [.3487.0020.0002] # CANADIAN SYLLABICS Y-CREE COO
1490 ; [.3488.0020.0002] # CANADIAN SYLLABICS CA
1491 ; [.3489.0020.0002] # CANADIAN SYLLABICS CAA
1492 ; [.348A.0020.0002] # CANADIAN SYLLABICS CWE
1493 ; [.348B.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWE
1494 ; [.348C.0020.0002] # CANADIAN SYLLABICS CWI
1495 ; [.348D.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWI
1496 ; [.348E.0020.0002] # CANADIAN SYLLABICS CWII
1497 ; [.348F.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWII
1498 ; [.3490.0020.0002] # CANADIAN SYLLABICS CWO
1499 ; [.3491.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWO
149A ; [.3492.0020.0002] # CANADIAN SYLLABICS CWOO
149B ; [.3493.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWOO
149C ; [.3494.0020.0002] # CANADIAN SYLLABICS CWA
149D ; [.3495.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWA
149E ; [.3496.0020.0002] # CANADIAN SYLLABICS CWAA
149F ; [.3497.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWAA
14A0 ; [.3498.0020.0002] # CANADIAN SYLLABICS NASKAPI CWAA
14A1 ; [.3499.0020.0002] # CANADIAN SYLLABICS C
14A2 ; [.349A.0020.0002] # CANADIAN SYLLABICS SAYISI TH
14A3 ; [.349B.0020.0002] # CANADIAN SYLLABICS ME
14A4 ; [.349C.0020.0002] # CANADIAN SYLLABICS MAAI
14A5 ; [.349D.0020.0002] # CANADIAN SYLLABICS MI
14A6 ; [.349E.0020.0002] # CANADIAN SYLLABICS MII
14A7 ; [.349F.0020.0002] # CANADIAN SYLLABICS MO
14A8 ; [.34A0.0020.0002] # CANADIAN SYLLABICS MOO
14A9 ; [.34A1.0020.0002] # CANADIAN SYLLABICS Y-CREE MOO
14AA ; [.34A2.0020.0002] # CANADIAN SYLLABICS MA
14AB ; [.34A3.0020.0002] # CANADIAN SYLLABICS MAA
14AC ; [.34A4.0020.0002] # CANADIAN SYLLABICS MWE
14AD ; [.34A5.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWE
14AE ; [.34A6.0020.0002] # CANADIAN SYLLABICS MWI
14AF ; [.34A7.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWI
14B0 ; [.34A8.0020.0002] # CANADIAN SYLLABICS MWII
14B1 ; [.34A9.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWII
14B2 ; [.34AA.0020.0002] # CANADIAN SYLLABICS MWO
14B3 ; [.34AB.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWO
14B4 ; [.34AC.0020.0002] # CANADIAN SYLLABICS MWOO
14B5 ; [.34AD.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWOO
14B6 ; [.34AE.0020.0002] # CANADIAN SYLLABICS MWA
14B7 ; [.34AF.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWA
14B8 ; [.34B0.0020.0002] # CANADIAN SYLLABICS MWAA
14B9 ; [.34B1.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWAA
14BA ; [.34B2.0020.0002] # CANADIAN SYLLABICS NASKAPI MWAA
14BB ; [.34B3.0020.0002] # CANADIAN SYLLABICS M
14BC ; [.34B4.0020.0002] # CANADIAN SYLLABICS WEST-CREE M
14BD ; [.34B5.0020.0002] # CANADIAN SYLLABICS MH
14BE ; [.34B6.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN M
14BF ; [.34B7.0020.0002] # CANADIAN SYLLABICS SAYISI M
14C0 ; [.34B8.0020.0002] # CANADIAN SYLLABICS NE
14C1 ; [.34B9.0020.0002] # CANADIAN SYLLABICS NAAI
14C2 ; [.34BA.0020.0002] # CANADIAN SYLLABICS NI
14C3 ; [.34BB.0020.0002] # CANADIAN SYLLABICS NII
14C4 ; [.34BC.0020.0002] # CANADIAN SYLLABICS NO
14C5 ; [.34BD.0020.0002] # CANADIAN SYLLABICS NOO
14C6 ; [.34BE.0020.0002] # CANADIAN SYLLABICS Y-CREE NOO
14C7 ; [.34BF.0020.0002] # CANADIAN SYLLABICS NA
14C8 ; [.34C0.0020.0002] # CANADIAN SYLLABICS NAA
14C9 ; [.34C1.0020.0002] # CANADIAN SYLLABICS NWE
14CA ; [.34C2.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWE
14CB ; [.34C3.0020.0002] # CANADIAN SYLLABICS NWA
14CC ; [.34C4.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWA
14CD ; [.34C5.0020.0002] # CANADIAN SYLLABICS NWAA
14CE ; [.34C6.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWAA
14CF ; [.34C7.0020.0002] # CANADIAN SYLLABICS NASKAPI NWAA
14D0 ; [.34C8.0020.0002] # CANADIAN SYLLABICS N
14D1 ; [.34C9.0020.0002] # CANADIAN SYLLABICS CARRIER NG
14D2 ; [.34CA.0020.0002] # CANADIAN SYLLABICS NH
14D3 ; [.34CB.0020.0002] # CANADIAN SYLLABICS LE
14D4 ; [.34CC.0020.0002] # CANADIAN SYLLABICS LAAI
14D5 ; [.34CD.0020.0002] # CANADIAN SYLLABICS LI
14D6 ; [.34CE.0020.0002] # CANADIAN SYLLABICS LII
14D7 ; [.34CF.0020.0002] # CANADIAN SYLLABICS LO
14D8 ; [.34D0.0020.0002] # CANADIAN SYLLABICS LOO
14D9 ; [.34D1.0020.0002] # CANADIAN SYLLABICS Y-CREE LOO
14DA ; [.34D2.0020.0002] # CANADIAN SYLLABICS LA
14DB ; [.34D3.0020.0002] # CANADIAN SYLLABICS LAA
14DC ; [.34D4.0020.0002] # CANADIAN SYLLABICS LWE
14DD ; [.34D5.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWE
14DE ; [.34D6.0020.0002] # CANADIAN SYLLABICS LWI
14DF ; [.34D7.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWI
14E0 ; [.34D8.0020.0002] # CANADIAN SYLLABICS LWII
14E1 ; [.34D9.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWII
14E2 ; [.34DA.0020.0002] # CANADIAN SYLLABICS LWO
14E3 ; [.34DB.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWO
14E4 ; [.34DC.0020.0002] # CANADIAN SYLLABICS LWOO
14E5 ; [.34DD.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWOO
14E6 ; [.34DE.0020.0002] # CANADIAN SYLLABICS LWA
14E7 ; [.34DF.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWA
14E8 ; [.34E0.0020.0002] # CANADIAN SYLLABICS LWAA
14E9 ; [.34E1.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWAA
14EA ; [.34E2.0020.0002] # CANADIAN SYLLABICS L
14EB ; [.34E3.0020.0002] # CANADIAN SYLLABICS WEST-CREE L
14EC ; [.34E4.0020.0002] # CANADIAN SYLLABICS MEDIAL L
14ED ; [.34E5.0020.0002] # CANADIAN SYLLABICS SE
14EE ; [.34E6.0020.0002] # CANADIAN SYLLABICS SAAI
14EF ; [.34E7.0020.0002] # CANADIAN SYLLABICS SI
14F0 ; [.34E8.0020.0002] # CANADIAN SYLLABICS SII
14F1 ; [.34E9.0020.0002] # CANADIAN SYLLABICS SO
14F2 ; [.34EA.0020.0002] # CANADIAN SYLLABICS SOO
14F3 ; [.34EB.0020.0002] # CANADIAN SYLLABICS Y-CREE SOO
14F4 ; [.34EC.0020.0002] # CANADIAN SYLLABICS SA
14F5 ; [.34ED.0020.0002] # CANADIAN SYLLABICS SAA
14F6 ; [.34EE.0020.0002] # CANADIAN SYLLABICS SWE
14F7 ; [.34EF.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWE
14F8 ; [.34F0.0020.0002] # CANADIAN SYLLABICS SWI
14F9 ; [.34F1.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWI
14FA ; [.34F2.0020.0002] # CANADIAN SYLLABICS SWII
14FB ; [.34F3.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWII
14FC ; [.34F4.0020.0002] # CANADIAN SYLLABICS SWO
14FD ; [.34F5.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWO
14FE ; [.34F6.0020.0002] # CANADIAN SYLLABICS SWOO
14FF ; [.34F7.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWOO
1500 ; [.34F8.0020.0002] # CANADIAN SYLLABICS SWA
1501 ; [.34F9.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWA
1502 ; [.34FA.0020.0002] # CANADIAN SYLLABICS SWAA
1503 ; [.34FB.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWAA
1504 ; [.34FC.0020.0002] # CANADIAN SYLLABICS NASKAPI SWAA
1505 ; [.34FD.0020.0002] # CANADIAN SYLLABICS S
1506 ; [.34FE.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN S
1507 ; [.34FF.0020.0002] # CANADIAN SYLLABICS SW
1508 ; [.3500.0020.0002] # CANADIAN SYLLABICS BLACKFOOT S
1509 ; [.3501.0020.0002] # CANADIAN SYLLABICS MOOSE-CREE SK
150A ; [.3502.0020.0002] # CANADIAN SYLLABICS NASKAPI SKW
150B ; [.3503.0020.0002] # CANADIAN SYLLABICS NASKAPI S-W
150C ; [.3504.0020.0002] # CANADIAN SYLLABICS NASKAPI SPWA
150D ; [.3505.0020.0002] # CANADIAN SYLLABICS NASKAPI STWA
150E ; [.3506.0020.0002] # CANADIAN SYLLABICS NASKAPI SKWA
150F ; [.3507.0020.0002] # CANADIAN SYLLABICS NASKAPI SCWA
1510 ; [.3508.0020.0002] # CANADIAN SYLLABICS SHE
1511 ; [.3509.0020.0002] # CANADIAN SYLLABICS SHI
1512 ; [.350A.0020.0002] # CANADIAN SYLLABICS SHII
1513 ; [.350B.0020.0002] # CANADIAN SYLLABICS SHO
1514 ; [.350C.0020.0002] # CANADIAN SYLLABICS SHOO
1515 ; [.350D.0020.0002] # CANADIAN SYLLABICS SHA
1516 ; [.350E.0020.0002] # CANADIAN SYLLABICS SHAA
1517 ; [.350F.0020.0002] # CANADIAN SYLLABICS SHWE
1518 ; [.3510.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWE
1519 ; [.3511.0020.0002] # CANADIAN SYLLABICS SHWI
151A ; [.3512.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWI
151B ; [.3513.0020.0002] # CANADIAN SYLLABICS SHWII
151C ; [.3514.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWII
151D ; [.3515.0020.0002] # CANADIAN SYLLABICS SHWO
151E ; [.3516.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWO
151F ; [.3517.0020.0002] # CANADIAN SYLLABICS SHWOO
1520 ; [.3518.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWOO
1521 ; [.3519.0020.0002] # CANADIAN SYLLABICS SHWA
1522 ; [.351A.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWA
1523 ; [.351B.0020.0002] # CANADIAN SYLLABICS SHWAA
1524 ; [.351C.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWAA
1525 ; [.351D.0020.0002] # CANADIAN SYLLABICS SH
1526 ; [.351E.0020.0002] # CANADIAN SYLLABICS YE
1527 ; [.351F.0020.0002] # CANADIAN SYLLABICS YAAI
1528 ; [.3520.0020.0002] # CANADIAN SYLLABICS YI
1529 ; [.3521.0020.0002] # CANADIAN SYLLABICS YII
152A ; [.3522.0020.0002] # CANADIAN SYLLABICS YO
152B ; [.3523.0020.0002] # CANADIAN SYLLABICS YOO
152C ; [.3524.0020.0002] # CANADIAN SYLLABICS Y-CREE YOO
152D ; [.3525.0020.0002] # CANADIAN SYLLABICS YA
152E ; [.3526.0020.0002] # CANADIAN SYLLABICS YAA
152F ; [.3527.0020.0002] # CANADIAN SYLLABICS YWE
1530 ; [.3528.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWE
1531 ; [.3529.0020.0002] # CANADIAN SYLLABICS YWI
1532 ; [.352A.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWI
1533 ; [.352B.0020.0002] # CANADIAN SYLLABICS YWII
1534 ; [.352C.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWII
1535 ; [.352D.0020.0002] # CANADIAN SYLLABICS YWO
1536 ; [.352E.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWO
1537 ; [.352F.0020.0002] # CANADIAN SYLLABICS YWOO
1538 ; [.3530.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWOO
1539 ; [.3531.0020.0002] # CANADIAN SYLLABICS YWA
153A ; [.3532.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWA
153B ; [.3533.0020.0002] # CANADIAN SYLLABICS YWAA
153C ; [.3534.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWAA
153D ; [.3535.0020.0002] # CANADIAN SYLLABICS NASKAPI YWAA
153E ; [.3536.0020.0002] # CANADIAN SYLLABICS Y
153F ; [.3537.0020.0002] # CANADIAN SYLLABICS BIBLE-CREE Y
1540 ; [.3538.0020.0002] # CANADIAN SYLLABICS WEST-CREE Y
1541 ; [.3539.0020.0002] # CANADIAN SYLLABICS SAYISI YI
1542 ; [.353A.0020.0002] # CANADIAN SYLLABICS RE
1543 ; [.353B.0020.0002] # CANADIAN SYLLABICS R-CREE RE
1544 ; [.353C.0020.0002] # CANADIAN SYLLABICS WEST-CREE LE
1545 ; [.353D.0020.0002] # CANADIAN SYLLABICS RAAI
1546 ; [.353E.0020.0002] # CANADIAN SYLLABICS RI
1547 ; [.353F.0020.0002] # CANADIAN SYLLABICS RII
1548 ; [.3540.0020.0002] # CANADIAN SYLLABICS RO
1549 ; [.3541.0020.0002] # CANADIAN SYLLABICS ROO
154A ; [.3542.0020.0002] # CANADIAN SYLLABICS WEST-CREE LO
154B ; [.3543.0020.0002] # CANADIAN SYLLABICS RA
154C ; [.3544.0020.0002] # CANADIAN SYLLABICS RAA
154D ; [.3545.0020.0002] # CANADIAN SYLLABICS WEST-CREE LA
154E ; [.3546.0020.0002] # CANADIAN SYLLABICS RWAA
154F ; [.3547.0020.0002] # CANADIAN SYLLABICS WEST-CREE RWAA
1550 ; [.3548.0020.0002] # CANADIAN SYLLABICS R
1551 ; [.3549.0020.0002] # CANADIAN SYLLABICS WEST-CREE R
1552 ; [.354A.0020.0002] # CANADIAN SYLLABICS MEDIAL R
1553 ; [.354B.0020.0002] # CANADIAN SYLLABICS FE
1554 ; [.354C.0020.0002] # CANADIAN SYLLABICS FAAI
1555 ; [.354D.0020.0002] # CANADIAN SYLLABICS FI
1556 ; [.354E.0020.0002] # CANADIAN SYLLABICS FII
1557 ; [.354F.0020.0002] # CANADIAN SYLLABICS FO
1558 ; [.3550.0020.0002] # CANADIAN SYLLABICS FOO
1559 ; [.3551.0020.0002] # CANADIAN SYLLABICS FA
155A ; [.3552.0020.0002] # CANADIAN SYLLABICS FAA
155B ; [.3553.0020.0002] # CANADIAN SYLLABICS FWAA
155C ; [.3554.0020.0002] # CANADIAN SYLLABICS WEST-CREE FWAA
155D ; [.3555.0020.0002] # CANADIAN SYLLABICS F
155E ; [.3556.0020.0002] # CANADIAN SYLLABICS THE
155F ; [.3557.0020.0002] # CANADIAN SYLLABICS N-CREE THE
1560 ; [.3558.0020.0002] # CANADIAN SYLLABICS THI
1561 ; [.3559.0020.0002] # CANADIAN SYLLABICS N-CREE THI
1562 ; [.355A.0020.0002] # CANADIAN SYLLABICS THII
1563 ; [.355B.0020.0002] # CANADIAN SYLLABICS N-CREE THII
1564 ; [.355C.0020.0002] # CANADIAN SYLLABICS THO
1565 ; [.355D.0020.0002] # CANADIAN SYLLABICS THOO
1566 ; [.355E.0020.0002] # CANADIAN SYLLABICS THA
1567 ; [.355F.0020.0002] # CANADIAN SYLLABICS THAA
1568 ; [.3560.0020.0002] # CANADIAN SYLLABICS THWAA
1569 ; [.3561.0020.0002] # CANADIAN SYLLABICS WEST-CREE THWAA
156A ; [.3562.0020.0002] # CANADIAN SYLLABICS TH
156B ; [.3563.0020.0002] # CANADIAN SYLLABICS TTHE
156C ; [.3564.0020.0002] # CANADIAN SYLLABICS TTHI
156D ; [.3565.0020.0002] # CANADIAN SYLLABICS TTHO
156E ; [.3566.0020.0002] # CANADIAN SYLLABICS TTHA
156F ; [.3567.0020.0002] # CANADIAN SYLLABICS TTH
1570 ; [.3568.0020.0002] # CANADIAN SYLLABICS TYE
1571 ; [.3569.0020.0002] # CANADIAN SYLLABICS TYI
1572 ; [.356A.0020.0002] # CANADIAN SYLLABICS TYO
1573 ; [.356B.0020.0002] # CANADIAN SYLLABICS TYA
1574 ; [.356C.0020.0002] # CANADIAN SYLLABICS NUNAVIK HE
1575 ; [.356D.0020.0002] # CANADIAN SYLLABICS NUNAVIK HI
1576 ; [.356E.0020.0002] # CANADIAN SYLLABICS NUNAVIK HII
1577 ; [.356F.0020.0002] # CANADIAN SYLLABICS NUNAVIK HO
1578 ; [.3570.0020.0002] # CANADIAN SYLLABICS NUNAVIK HOO
1579 ; [.3571.0020.0002] # CANADIAN SYLLABICS NUNAVIK HA
157A ; [.3572.0020.0002] # CANADIAN SYLLABICS NUNAVIK HAA
157B ; [.3573.0020.0002] # CANADIAN SYLLABICS NUNAVIK H
157D ; [.3574.0020.0002] # CANADIAN SYLLABICS HK
166F ; [.3575.0020.0002] # CANADIAN SYLLABICS QAI
157E ; [.3576.0020.0002] # CANADIAN SYLLABICS QAAI
157F ; [.3577.0020.0002] # CANADIAN SYLLABICS QI
1580 ; [.3578.0020.0002] # CANADIAN SYLLABICS QII
1581 ; [.3579.0020.0002] # CANADIAN SYLLABICS QO
1582 ; [.357A.0020.0002] # CANADIAN SYLLABICS QOO
1583 ; [.357B.0020.0002] # CANADIAN SYLLABICS QA
1584 ; [.357C.0020.0002] # CANADIAN SYLLABICS QAA
1585 ; [.357D.0020.0002] # CANADIAN SYLLABICS Q
1586 ; [.357E.0020.0002] # CANADIAN SYLLABICS TLHE
1587 ; [.357F.0020.0002] # CANADIAN SYLLABICS TLHI
1588 ; [.3580.0020.0002] # CANADIAN SYLLABICS TLHO
1589 ; [.3581.0020.0002] # CANADIAN SYLLABICS TLHA
158A ; [.3582.0020.0002] # CANADIAN SYLLABICS WEST-CREE RE
158B ; [.3583.0020.0002] # CANADIAN SYLLABICS WEST-CREE RI
158C ; [.3584.0020.0002] # CANADIAN SYLLABICS WEST-CREE RO
158D ; [.3585.0020.0002] # CANADIAN SYLLABICS WEST-CREE RA
1670 ; [.3586.0020.0002] # CANADIAN SYLLABICS NGAI
158E ; [.3587.0020.0002] # CANADIAN SYLLABICS NGAAI
158F ; [.3588.0020.0002] # CANADIAN SYLLABICS NGI
1590 ; [.3589.0020.0002] # CANADIAN SYLLABICS NGII
1591 ; [.358A.0020.0002] # CANADIAN SYLLABICS NGO
1592 ; [.358B.0020.0002] # CANADIAN SYLLABICS NGOO
1593 ; [.358C.0020.0002] # CANADIAN SYLLABICS NGA
1594 ; [.358D.0020.0002] # CANADIAN SYLLABICS NGAA
1595 ; [.358E.0020.0002] # CANADIAN SYLLABICS NG
1671 ; [.358F.0020.0002] # CANADIAN SYLLABICS NNGI
1672 ; [.3590.0020.0002] # CANADIAN SYLLABICS NNGII
1673 ; [.3591.0020.0002] # CANADIAN SYLLABICS NNGO
1674 ; [.3592.0020.0002] # CANADIAN SYLLABICS NNGOO
1675 ; [.3593.0020.0002] # CANADIAN SYLLABICS NNGA
1676 ; [.3594.0020.0002] # CANADIAN SYLLABICS NNGAA
1596 ; [.3595.0020.0002] # CANADIAN SYLLABICS NNG
1597 ; [.3596.0020.0002] # CANADIAN SYLLABICS SAYISI SHE
1598 ; [.3597.0020.0002] # CANADIAN SYLLABICS SAYISI SHI
1599 ; [.3598.0020.0002] # CANADIAN SYLLABICS SAYISI SHO
159A ; [.3599.0020.0002] # CANADIAN SYLLABICS SAYISI SHA
159B ; [.359A.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THE
159C ; [.359B.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THI
159D ; [.359C.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THO
159E ; [.359D.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THA
159F ; [.359E.0020.0002] # CANADIAN SYLLABICS WOODS-CREE TH
15A0 ; [.359F.0020.0002] # CANADIAN SYLLABICS LHI
15A1 ; [.35A0.0020.0002] # CANADIAN SYLLABICS LHII
15A2 ; [.35A1.0020.0002] # CANADIAN SYLLABICS LHO
15A3 ; [.35A2.0020.0002] # CANADIAN SYLLABICS LHOO
15A4 ; [.35A3.0020.0002] # CANADIAN SYLLABICS LHA
15A5 ; [.35A4.0020.0002] # CANADIAN SYLLABICS LHAA
15A6 ; [.35A5.0020.0002] # CANADIAN SYLLABICS LH
157C ; [.35A6.0020.0002] # CANADIAN SYLLABICS NUNAVUT H
15A7 ; [.35A7.0020.0002] # CANADIAN SYLLABICS TH-CREE THE
15A8 ; [.35A8.0020.0002] # CANADIAN SYLLABICS TH-CREE THI
15A9 ; [.35A9.0020.0002] # CANADIAN SYLLABICS TH-CREE THII
15AA ; [.35AA.0020.0002] # CANADIAN SYLLABICS TH-CREE THO
15AB ; [.35AB.0020.0002] # CANADIAN SYLLABICS TH-CREE THOO
15AC ; [.35AC.0020.0002] # CANADIAN SYLLABICS TH-CREE THA
15AD ; [.35AD.0020.0002] # CANADIAN SYLLABICS TH-CREE THAA
15AE ; [.35AE.0020.0002] # CANADIAN SYLLABICS TH-CREE TH
15AF ; [.35AF.0020.0002] # CANADIAN SYLLABICS AIVILIK B
15B0 ; [.35B0.0020.0002] # CANADIAN SYLLABICS BLACKFOOT E
15B1 ; [.35B1.0020.0002] # CANADIAN SYLLABICS BLACKFOOT I
15B2 ; [.35B2.0020.0002] # CANADIAN SYLLABICS BLACKFOOT O
15B3 ; [.35B3.0020.0002] # CANADIAN SYLLABICS BLACKFOOT A
15B4 ; [.35B4.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WE
15B5 ; [.35B5.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WI
15B6 ; [.35B6.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WO
15B7 ; [.35B7.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WA
15B8 ; [.35B8.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NE
15B9 ; [.35B9.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NI
15BA ; [.35BA.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NO
15BB ; [.35BB.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NA
15BC ; [.35BC.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KE
15BD ; [.35BD.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KI
15BE ; [.35BE.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KO
15BF ; [.35BF.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KA
15C0 ; [.35C0.0020.0002] # CANADIAN SYLLABICS SAYISI HE
15C1 ; [.35C1.0020.0002] # CANADIAN SYLLABICS SAYISI HI
15C2 ; [.35C2.0020.0002] # CANADIAN SYLLABICS SAYISI HO
15C3 ; [.35C3.0020.0002] # CANADIAN SYLLABICS SAYISI HA
15C4 ; [.35C4.0020.0002] # CANADIAN SYLLABICS CARRIER GHU
15C5 ; [.35C5.0020.0002] # CANADIAN SYLLABICS CARRIER GHO
15C6 ; [.35C6.0020.0002] # CANADIAN SYLLABICS CARRIER GHE
15C7 ; [.35C7.0020.0002] # CANADIAN SYLLABICS CARRIER GHEE
15C8 ; [.35C8.0020.0002] # CANADIAN SYLLABICS CARRIER GHI
15C9 ; [.35C9.0020.0002] # CANADIAN SYLLABICS CARRIER GHA
15CA ; [.35CA.0020.0002] # CANADIAN SYLLABICS CARRIER RU
15CB ; [.35CB.0020.0002] # CANADIAN SYLLABICS CARRIER RO
15CC ; [.35CC.0020.0002] # CANADIAN SYLLABICS CARRIER RE
15CD ; [.35CD.0020.0002] # CANADIAN SYLLABICS CARRIER REE
15CE ; [.35CE.0020.0002] # CANADIAN SYLLABICS CARRIER RI
15CF ; [.35CF.0020.0002] # CANADIAN SYLLABICS CARRIER RA
15D0 ; [.35D0.0020.0002] # CANADIAN SYLLABICS CARRIER WU
15D1 ; [.35D1.0020.0002] # CANADIAN SYLLABICS CARRIER WO
15D2 ; [.35D2.0020.0002] # CANADIAN SYLLABICS CARRIER WE
15D3 ; [.35D3.0020.0002] # CANADIAN SYLLABICS CARRIER WEE
15D4 ; [.35D4.0020.0002] # CANADIAN SYLLABICS CARRIER WI
15D5 ; [.35D5.0020.0002] # CANADIAN SYLLABICS CARRIER WA
15D6 ; [.35D6.0020.0002] # CANADIAN SYLLABICS CARRIER HWU
15D7 ; [.35D7.0020.0002] # CANADIAN SYLLABICS CARRIER HWO
15D8 ; [.35D8.0020.0002] # CANADIAN SYLLABICS CARRIER HWE
15D9 ; [.35D9.0020.0002] # CANADIAN SYLLABICS CARRIER HWEE
15DA ; [.35DA.0020.0002] # CANADIAN SYLLABICS CARRIER HWI
15DB ; [.35DB.0020.0002] # CANADIAN SYLLABICS CARRIER HWA
15DC ; [.35DC.0020.0002] # CANADIAN SYLLABICS CARRIER THU
15DD ; [.35DD.0020.0002] # CANADIAN SYLLABICS CARRIER THO
15DE ; [.35DE.0020.0002] # CANADIAN SYLLABICS CARRIER THE
15DF ; [.35DF.0020.0002] # CANADIAN SYLLABICS CARRIER THEE
15E0 ; [.35E0.0020.0002] # CANADIAN SYLLABICS CARRIER THI
15E1 ; [.35E1.0020.0002] # CANADIAN SYLLABICS CARRIER THA
15E2 ; [.35E2.0020.0002] # CANADIAN SYLLABICS CARRIER TTU
15E3 ; [.35E3.0020.0002] # CANADIAN SYLLABICS CARRIER TTO
15E4 ; [.35E4.0020.0002] # CANADIAN SYLLABICS CARRIER TTE
15E5 ; [.35E5.0020.0002] # CANADIAN SYLLABICS CARRIER TTEE
15E6 ; [.35E6.0020.0002] # CANADIAN SYLLABICS CARRIER TTI
15E7 ; [.35E7.0020.0002] # CANADIAN SYLLABICS CARRIER TTA
15E8 ; [.35E8.0020.0002] # CANADIAN SYLLABICS CARRIER PU
15E9 ; [.35E9.0020.0002] # CANADIAN SYLLABICS CARRIER PO
15EA ; [.35EA.0020.0002] # CANADIAN SYLLABICS CARRIER PE
15EB ; [.35EB.0020.0002] # CANADIAN SYLLABICS CARRIER PEE
15EC ; [.35EC.0020.0002] # CANADIAN SYLLABICS CARRIER PI
15ED ; [.35ED.0020.0002] # CANADIAN SYLLABICS CARRIER PA
15EE ; [.35EE.0020.0002] # CANADIAN SYLLABICS CARRIER P
15EF ; [.35EF.0020.0002] # CANADIAN SYLLABICS CARRIER GU
15F0 ; [.35F0.0020.0002] # CANADIAN SYLLABICS CARRIER GO
15F1 ; [.35F1.0020.0002] # CANADIAN SYLLABICS CARRIER GE
15F2 ; [.35F2.0020.0002] # CANADIAN SYLLABICS CARRIER GEE
15F3 ; [.35F3.0020.0002] # CANADIAN SYLLABICS CARRIER GI
15F4 ; [.35F4.0020.0002] # CANADIAN SYLLABICS CARRIER GA
15F5 ; [.35F5.0020.0002] # CANADIAN SYLLABICS CARRIER KHU
15F6 ; [.35F6.0020.0002] # CANADIAN SYLLABICS CARRIER KHO
15F7 ; [.35F7.0020.0002] # CANADIAN SYLLABICS CARRIER KHE
15F8 ; [.35F8.0020.0002] # CANADIAN SYLLABICS CARRIER KHEE
15F9 ; [.35F9.0020.0002] # CANADIAN SYLLABICS CARRIER KHI
15FA ; [.35FA.0020.0002] # CANADIAN SYLLABICS CARRIER KHA
15FB ; [.35FB.0020.0002] # CANADIAN SYLLABICS CARRIER KKU
15FC ; [.35FC.0020.0002] # CANADIAN SYLLABICS CARRIER KKO
15FD ; [.35FD.0020.0002] # CANADIAN SYLLABICS CARRIER KKE
15FE ; [.35FE.0020.0002] # CANADIAN SYLLABICS CARRIER KKEE
15FF ; [.35FF.0020.0002] # CANADIAN SYLLABICS CARRIER KKI
1600 ; [.3600.0020.0002] # CANADIAN SYLLABICS CARRIER KKA
1601 ; [.3601.0020.0002] # CANADIAN SYLLABICS CARRIER KK
1602 ; [.3602.0020.0002] # CANADIAN SYLLABICS CARRIER NU
1603 ; [.3603.0020.0002] # CANADIAN SYLLABICS CARRIER NO
1604 ; [.3604.0020.0002] # CANADIAN SYLLABICS CARRIER NE
1605 ; [.3605.0020.0002] # CANADIAN SYLLABICS CARRIER NEE
1606 ; [.3606.0020.0002] # CANADIAN SYLLABICS CARRIER NI
1607 ; [.3607.0020.0002] # CANADIAN SYLLABICS CARRIER NA
1608 ; [.3608.0020.0002] # CANADIAN SYLLABICS CARRIER MU
1609 ; [.3609.0020.0002] # CANADIAN SYLLABICS CARRIER MO
160A ; [.360A.0020.0002] # CANADIAN SYLLABICS CARRIER ME
160B ; [.360B.0020.0002] # CANADIAN SYLLABICS CARRIER MEE
160C ; [.360C.0020.0002] # CANADIAN SYLLABICS CARRIER MI
160D ; [.360D.0020.0002] # CANADIAN SYLLABICS CARRIER MA
160E ; [.360E.0020.0002] # CANADIAN SYLLABICS CARRIER YU
160F ; [.360F.0020.0002] # CANADIAN SYLLABICS CARRIER YO
1610 ; [.3610.0020.0002] # CANADIAN SYLLABICS CARRIER YE
1611 ; [.3611.0020.0002] # CANADIAN SYLLABICS CARRIER YEE
1612 ; [.3612.0020.0002] # CANADIAN SYLLABICS CARRIER YI
1613 ; [.3613.0020.0002] # CANADIAN SYLLABICS CARRIER YA
1614 ; [.3614.0020.0002] # CANADIAN SYLLABICS CARRIER JU
1615 ; [.3615.0020.0002] # CANADIAN SYLLABICS SAYISI JU
1616 ; [.3616.0020.0002] # CANADIAN SYLLABICS CARRIER JO
1617 ; [.3617.0020.0002] # CANADIAN SYLLABICS CARRIER JE
1618 ; [.3618.0020.0002] # CANADIAN SYLLABICS CARRIER JEE
1619 ; [.3619.0020.0002] # CANADIAN SYLLABICS CARRIER JI
161A ; [.361A.0020.0002] # CANADIAN SYLLABICS SAYISI JI
161B ; [.361B.0020.0002] # CANADIAN SYLLABICS CARRIER JA
161C ; [.361C.0020.0002] # CANADIAN SYLLABICS CARRIER JJU
161D ; [.361D.0020.0002] # CANADIAN SYLLABICS CARRIER JJO
161E ; [.361E.0020.0002] # CANADIAN SYLLABICS CARRIER JJE
161F ; [.361F.0020.0002] # CANADIAN SYLLABICS CARRIER JJEE
1620 ; [.3620.0020.0002] # CANADIAN SYLLABICS CARRIER JJI
1621 ; [.3621.0020.0002] # CANADIAN SYLLABICS CARRIER JJA
1622 ; [.3622.0020.0002] # CANADIAN SYLLABICS CARRIER LU
1623 ; [.3623.0020.0002] # CANADIAN SYLLABICS CARRIER LO
1624 ; [.3624.0020.0002] # CANADIAN SYLLABICS CARRIER LE
1625 ; [.3625.0020.0002] # CANADIAN SYLLABICS CARRIER LEE
1626 ; [.3626.0020.0002] # CANADIAN SYLLABICS CARRIER LI
1627 ; [.3627.0020.0002] # CANADIAN SYLLABICS CARRIER LA
1628 ; [.3628.0020.0002] # CANADIAN SYLLABICS CARRIER DLU
1629 ; [.3629.0020.0002] # CANADIAN SYLLABICS CARRIER DLO
162A ; [.362A.0020.0002] # CANADIAN SYLLABICS CARRIER DLE
162B ; [.362B.0020.0002] # CANADIAN SYLLABICS CARRIER DLEE
162C ; [.362C.0020.0002] # CANADIAN SYLLABICS CARRIER DLI
162D ; [.362D.0020.0002] # CANADIAN SYLLABICS CARRIER DLA
162E ; [.362E.0020.0002] # CANADIAN SYLLABICS CARRIER LHU
162F ; [.362F.0020.0002] # CANADIAN SYLLABICS CARRIER LHO
1630 ; [.3630.0020.0002] # CANADIAN SYLLABICS CARRIER LHE
1631 ; [.3631.0020.0002] # CANADIAN SYLLABICS CARRIER LHEE
1632 ; [.3632.0020.0002] # CANADIAN SYLLABICS CARRIER LHI
1633 ; [.3633.0020.0002] # CANADIAN SYLLABICS CARRIER LHA
1634 ; [.3634.0020.0002] # CANADIAN SYLLABICS CARRIER TLHU
1635 ; [.3635.0020.0002] # CANADIAN SYLLABICS CARRIER TLHO
1636 ; [.3636.0020.0002] # CANADIAN SYLLABICS CARRIER TLHE
1637 ; [.3637.0020.0002] # CANADIAN SYLLABICS CARRIER TLHEE
1638 ; [.3638.0020.0002] # CANADIAN SYLLABICS CARRIER TLHI
1639 ; [.3639.0020.0002] # CANADIAN SYLLABICS CARRIER TLHA
163A ; [.363A.0020.0002] # CANADIAN SYLLABICS CARRIER TLU
163B ; [.363B.0020.0002] # CANADIAN SYLLABICS CARRIER TLO
163C ; [.363C.0020.0002] # CANADIAN SYLLABICS CARRIER TLE
163D ; [.363D.0020.0002] # CANADIAN SYLLABICS CARRIER TLEE
163E ; [.363E.0020.0002] # CANADIAN SYLLABICS CARRIER TLI
163F ; [.363F.0020.0002] # CANADIAN SYLLABICS CARRIER TLA
1640 ; [.3640.0020.0002] # CANADIAN SYLLABICS CARRIER ZU
1641 ; [.3641.0020.0002] # CANADIAN SYLLABICS CARRIER ZO
1642 ; [.3642.0020.0002] # CANADIAN SYLLABICS CARRIER ZE
1643 ; [.3643.0020.0002] # CANADIAN SYLLABICS CARRIER ZEE
1644 ; [.3644.0020.0002] # CANADIAN SYLLABICS CARRIER ZI
1645 ; [.3645.0020.0002] # CANADIAN SYLLABICS CARRIER ZA
1646 ; [.3646.0020.0002] # CANADIAN SYLLABICS CARRIER Z
1647 ; [.3647.0020.0002] # CANADIAN SYLLABICS CARRIER INITIAL Z
1648 ; [.3648.0020.0002] # CANADIAN SYLLABICS CARRIER DZU
1649 ; [.3649.0020.0002] # CANADIAN SYLLABICS CARRIER DZO
164A ; [.364A.0020.0002] # CANADIAN SYLLABICS CARRIER DZE
164B ; [.364B.0020.0002] # CANADIAN SYLLABICS CARRIER DZEE
164C ; [.364C.0020.0002] # CANADIAN SYLLABICS CARRIER DZI
164D ; [.364D.0020.0002] # CANADIAN SYLLABICS CARRIER DZA
164E ; [.364E.0020.0002] # CANADIAN SYLLABICS CARRIER SU
164F ; [.364F.0020.0002] # CANADIAN SYLLABICS CARRIER SO
1650 ; [.3650.0020.0002] # CANADIAN SYLLABICS CARRIER SE
1651 ; [.3651.0020.0002] # CANADIAN SYLLABICS CARRIER SEE
1652 ; [.3652.0020.0002] # CANADIAN SYLLABICS CARRIER SI
1653 ; [.3653.0020.0002] # CANADIAN SYLLABICS CARRIER SA
1654 ; [.3654.0020.0002] # CANADIAN SYLLABICS CARRIER SHU
1655 ; [.3655.0020.0002] # CANADIAN SYLLABICS CARRIER SHO
1656 ; [.3656.0020.0002] # CANADIAN SYLLABICS CARRIER SHE
1657 ; [.3657.0020.0002] # CANADIAN SYLLABICS CARRIER SHEE
1658 ; [.3658.0020.0002] # CANADIAN SYLLABICS CARRIER SHI
1659 ; [.3659.0020.0002] # CANADIAN SYLLABICS CARRIER SHA
165A ; [.365A.0020.0002] # CANADIAN SYLLABICS CARRIER SH
165B ; [.365B.0020.0002] # CANADIAN SYLLABICS CARRIER TSU
165C ; [.365C.0020.0002] # CANADIAN SYLLABICS CARRIER TSO
165D ; [.365D.0020.0002] # CANADIAN SYLLABICS CARRIER TSE
165E ; [.365E.0020.0002] # CANADIAN SYLLABICS CARRIER TSEE
165F ; [.365F.0020.0002] # CANADIAN SYLLABICS CARRIER TSI
1660 ; [.3660.0020.0002] # CANADIAN SYLLABICS CARRIER TSA
1661 ; [.3661.0020.0002] # CANADIAN SYLLABICS CARRIER CHU
1662 ; [.3662.0020.0002] # CANADIAN SYLLABICS CARRIER CHO
1663 ; [.3663.0020.0002] # CANADIAN SYLLABICS CARRIER CHE
1664 ; [.3664.0020.0002] # CANADIAN SYLLABICS CARRIER CHEE
1665 ; [.3665.0020.0002] # CANADIAN SYLLABICS CARRIER CHI
1666 ; [.3666.0020.0002] # CANADIAN SYLLABICS CARRIER CHA
1667 ; [.3667.0020.0002] # CANADIAN SYLLABICS CARRIER TTSU
1668 ; [.3668.0020.0002] # CANADIAN SYLLABICS CARRIER TTSO
1669 ; [.3669.0020.0002] # CANADIAN SYLLABICS CARRIER TTSE
166A ; [.366A.0020.0002] # CANADIAN SYLLABICS CARRIER TTSEE
166B ; [.366B.0020.0002] # CANADIAN SYLLABICS CARRIER TTSI
166C ; [.366C.0020.0002] # CANADIAN SYLLABICS CARRIER TTSA
1677 ; [.366D.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWEE
1678 ; [.366E.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWI
1679 ; [.366F.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWII
167A ; [.3670.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWO
167B ; [.3671.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWOO
167C ; [.3672.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWA
167D ; [.3673.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWAA
167E ; [.3674.0020.0002] # CANADIAN SYLLABICS WOODS-CREE FINAL TH
167F ; [.3675.0020.0002] # CANADIAN SYLLABICS BLACKFOOT W
18B0 ; [.3676.0020.0002] # CANADIAN SYLLABICS OY
18B1 ; [.3677.0020.0002] # CANADIAN SYLLABICS AY
18B2 ; [.3678.0020.0002] # CANADIAN SYLLABICS AAY
18B3 ; [.3679.0020.0002] # CANADIAN SYLLABICS WAY
18B4 ; [.367A.0020.0002] # CANADIAN SYLLABICS POY
18B5 ; [.367B.0020.0002] # CANADIAN SYLLABICS PAY
18B6 ; [.367C.0020.0002] # CANADIAN SYLLABICS PWOY
18B7 ; [.367D.0020.0002] # CANADIAN SYLLABICS TAY
18B8 ; [.367E.0020.0002] # CANADIAN SYLLABICS KAY
18B9 ; [.367F.0020.0002] # CANADIAN SYLLABICS KWAY
18BA ; [.3680.0020.0002] # CANADIAN SYLLABICS MAY
18BB ; [.3681.0020.0002] # CANADIAN SYLLABICS NOY
18BC ; [.3682.0020.0002] # CANADIAN SYLLABICS NAY
18BD ; [.3683.0020.0002] # CANADIAN SYLLABICS LAY
18BE ; [.3684.0020.0002] # CANADIAN SYLLABICS SOY
18BF ; [.3685.0020.0002] # CANADIAN SYLLABICS SAY
18C0 ; [.3686.0020.0002] # CANADIAN SYLLABICS SHOY
18C1 ; [.3687.0020.0002] # CANADIAN SYLLABICS SHAY
18C2 ; [.3688.0020.0002] # CANADIAN SYLLABICS SHWOY
18C3 ; [.3689.0020.0002] # CANADIAN SYLLABICS YOY
18C4 ; [.368A.0020.0002] # CANADIAN SYLLABICS YAY
18C5 ; [.368B.0020.0002] # CANADIAN SYLLABICS RAY
18C6 ; [.368C.0020.0002] # CANADIAN SYLLABICS NWI
18C7 ; [.368D.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWI
18C8 ; [.368E.0020.0002] # CANADIAN SYLLABICS NWII
18C9 ; [.368F.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWII
18CA ; [.3690.0020.0002] # CANADIAN SYLLABICS NWO
18CB ; [.3691.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWO
18CC ; [.3692.0020.0002] # CANADIAN SYLLABICS NWOO
18CD ; [.3693.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWOO
18CE ; [.3694.0020.0002] # CANADIAN SYLLABICS RWEE
18CF ; [.3695.0020.0002] # CANADIAN SYLLABICS RWI
18D0 ; [.3696.0020.0002] # CANADIAN SYLLABICS RWII
18D1 ; [.3697.0020.0002] # CANADIAN SYLLABICS RWO
18D2 ; [.3698.0020.0002] # CANADIAN SYLLABICS RWOO
18D3 ; [.3699.0020.0002] # CANADIAN SYLLABICS RWA
18D4 ; [.369A.0020.0002] # CANADIAN SYLLABICS OJIBWAY P
18D5 ; [.369B.0020.0002] # CANADIAN SYLLABICS OJIBWAY T
18D6 ; [.369C.0020.0002] # CANADIAN SYLLABICS OJIBWAY K
18D7 ; [.369D.0020.0002] # CANADIAN SYLLABICS OJIBWAY C
18D8 ; [.369E.0020.0002] # CANADIAN SYLLABICS OJIBWAY M
18D9 ; [.369F.0020.0002] # CANADIAN SYLLABICS OJIBWAY N
18DA ; [.36A0.0020.0002] # CANADIAN SYLLABICS OJIBWAY S
18DB ; [.36A1.0020.0002] # CANADIAN SYLLABICS OJIBWAY SH
18DC ; [.36A2.0020.0002] # CANADIAN SYLLABICS EASTERN W
18DD ; [.36A3.0020.0002] # CANADIAN SYLLABICS WESTERN W
18DE ; [.36A4.0020.0002] # CANADIAN SYLLABICS FINAL SMALL RING
18DF ; [.36A5.0020.0002] # CANADIAN SYLLABICS FINAL RAISED DOT
18E0 ; [.36A6.0020.0002] # CANADIAN SYLLABICS R-CREE RWE
18E1 ; [.36A7.0020.0002] # CANADIAN SYLLABICS WEST-CREE LOO
18E2 ; [.36A8.0020.0002] # CANADIAN SYLLABICS WEST-CREE LAA
18E3 ; [.36A9.0020.0002] # CANADIAN SYLLABICS THWE
18E4 ; [.36AA.0020.0002] # CANADIAN SYLLABICS THWA
18E5 ; [.36AB.0020.0002] # CANADIAN SYLLABICS TTHWE
18E6 ; [.36AC.0020.0002] # CANADIAN SYLLABICS TTHOO
18E7 ; [.36AD.0020.0002] # CANADIAN SYLLABICS TTHAA
18E8 ; [.36AE.0020.0002] # CANADIAN SYLLABICS TLHWE
18E9 ; [.36AF.0020.0002] # CANADIAN SYLLABICS TLHOO
18EA ; [.36B0.0020.0002] # CANADIAN SYLLABICS SAYISI SHWE
18EB ; [.36B1.0020.0002] # CANADIAN SYLLABICS SAYISI SHOO
18EC ; [.36B2.0020.0002] # CANADIAN SYLLABICS SAYISI HOO
18ED ; [.36B3.0020.0002] # CANADIAN SYLLABICS CARRIER GWU
18EE ; [.36B4.0020.0002] # CANADIAN SYLLABICS CARRIER DENE GEE
18EF ; [.36B5.0020.0002] # CANADIAN SYLLABICS CARRIER GAA
18F0 ; [.36B6.0020.0002] # CANADIAN SYLLABICS CARRIER GWA
18F1 ; [.36B7.0020.0002] # CANADIAN SYLLABICS SAYISI JUU
18F2 ; [.36B8.0020.0002] # CANADIAN SYLLABICS CARRIER JWA
18F3 ; [.36B9.0020.0002] # CANADIAN SYLLABICS BEAVER DENE L
18F4 ; [.36BA.0020.0002] # CANADIAN SYLLABICS BEAVER DENE R
18F5 ; [.36BB.0020.0002] # CANADIAN SYLLABICS CARRIER DENTAL S
1681 ; [.36BC.0020.0002] # OGHAM LETTER BEITH
1682 ; [.36BD.0020.0002] # OGHAM LETTER LUIS
1683 ; [.36BE.0020.0002] # OGHAM LETTER FEARN
1684 ; [.36BF.0020.0002] # OGHAM LETTER SAIL
1685 ; [.36C0.0020.0002] # OGHAM LETTER NION
1686 ; [.36C1.0020.0002] # OGHAM LETTER UATH
1687 ; [.36C2.0020.0002] # OGHAM LETTER DAIR
1688 ; [.36C3.0020.0002] # OGHAM LETTER TINNE
1689 ; [.36C4.0020.0002] # OGHAM LETTER COLL
168A ; [.36C5.0020.0002] # OGHAM LETTER CEIRT
168B ; [.36C6.0020.0002] # OGHAM LETTER MUIN
168C ; [.36C7.0020.0002] # OGHAM LETTER GORT
168D ; [.36C8.0020.0002] # OGHAM LETTER NGEADAL
168E ; [.36C9.0020.0002] # OGHAM LETTER STRAIF
168F ; [.36CA.0020.0002] # OGHAM LETTER RUIS
1690 ; [.36CB.0020.0002] # OGHAM LETTER AILM
1691 ; [.36CC.0020.0002] # OGHAM LETTER ONN
1692 ; [.36CD.0020.0002] # OGHAM LETTER UR
1693 ; [.36CE.0020.0002] # OGHAM LETTER EADHADH
1694 ; [.36CF.0020.0002] # OGHAM LETTER IODHADH
1695 ; [.36D0.0020.0002] # OGHAM LETTER EABHADH
1696 ; [.36D1.0020.0002] # OGHAM LETTER OR
1697 ; [.36D2.0020.0002] # OGHAM LETTER UILLEANN
1698 ; [.36D3.0020.0002] # OGHAM LETTER IFIN
1699 ; [.36D4.0020.0002] # OGHAM LETTER EAMHANCHOLL
169A ; [.36D5.0020.0002] # OGHAM LETTER PEITH
16A0 ; [.36D6.0020.0002] # RUNIC LETTER FEHU FEOH FE F
16A1 ; [.36D6.0020.0004][.0000.0110.0004] # RUNIC LETTER V
16A2 ; [.36D7.0020.0002] # RUNIC LETTER URUZ UR U
16A4 ; [.36D7.0020.0004][.0000.0110.0004] # RUNIC LETTER Y
16A5 ; [.36D7.0020.0004][.0000.0111.0004] # RUNIC LETTER W
16A6 ; [.36D8.0020.0002] # RUNIC LETTER THURISAZ THURS THORN
16A7 ; [.36D8.0020.0004][.0000.0110.0004] # RUNIC LETTER ETH
16F0 ; [.36D8.0020.0004][.36D8.0020.0004] # RUNIC BELGTHOR SYMBOL
16A8 ; [.36D9.0020.0002] # RUNIC LETTER ANSUZ A
16A9 ; [.36D9.0020.0004][.0000.0110.0004] # RUNIC LETTER OS O
16AC ; [.36D9.0020.0004][.0000.0111.0004] # RUNIC LETTER LONG-BRANCH-OSS O
16AD ; [.36D9.0020.0004][.0000.0112.0004] # RUNIC LETTER SHORT-TWIG-OSS O
16AE ; [.36D9.0020.0004][.0000.0113.0004] # RUNIC LETTER O
16F4 ; [.36DA.0020.0002] # RUNIC LETTER FRANKS CASKET OS
16AF ; [.36DB.0020.0002] # RUNIC LETTER OE
16B0 ; [.36DC.0020.0002] # RUNIC LETTER ON
16B1 ; [.36DD.0020.0002] # RUNIC LETTER RAIDO RAD REID R
16B2 ; [.36DE.0020.0002] # RUNIC LETTER KAUNA
16B3 ; [.36DE.0020.0004][.0000.0110.0004] # RUNIC LETTER CEN
16B4 ; [.36DE.0020.0004][.0000.0111.0004] # RUNIC LETTER KAUN K
16B5 ; [.36DE.0020.0004][.0000.0112.0004] # RUNIC LETTER G
16B6 ; [.36DE.0020.0004][.0000.0113.0004] # RUNIC LETTER ENG
16F1 ; [.36DF.0020.0002] # RUNIC LETTER K
16B7 ; [.36E0.0020.0002] # RUNIC LETTER GEBO GYFU G
16B9 ; [.36E1.0020.0002] # RUNIC LETTER WUNJO WYNN W
16E9 ; [.36E1.0020.0004][.0000.0110.0004] # RUNIC LETTER Q
16BA ; [.36E2.0020.0002] # RUNIC LETTER HAGLAZ H
16BB ; [.36E2.0020.0004][.0000.0110.0004] # RUNIC LETTER HAEGL H
16BC ; [.36E2.0020.0004][.0000.0111.0004] # RUNIC LETTER LONG-BRANCH-HAGALL H
16BD ; [.36E2.0020.0004][.0000.0112.0004] # RUNIC LETTER SHORT-TWIG-HAGALL H
16BE ; [.36E3.0020.0002] # RUNIC LETTER NAUDIZ NYD NAUD N
16BF ; [.36E3.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-NAUD N
16C0 ; [.36E3.0020.0004][.0000.0111.0004] # RUNIC LETTER DOTTED-N
16C1 ; [.36E4.0020.0002] # RUNIC LETTER ISAZ IS ISS I
16C2 ; [.36E4.0020.0004][.0000.0110.0004] # RUNIC LETTER E
16F5 ; [.36E5.0020.0002] # RUNIC LETTER FRANKS CASKET IS
16C3 ; [.36E6.0020.0002] # RUNIC LETTER JERAN J
16C4 ; [.36E6.0020.0004][.0000.0110.0004] # RUNIC LETTER GER
16C5 ; [.36E7.0020.0002] # RUNIC LETTER LONG-BRANCH-AR AE
16C6 ; [.36E7.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-AR A
16EE ; [.36E7.0020.0004][.36F2.0020.0004] # RUNIC ARLAUG SYMBOL
16C7 ; [.36E8.0020.0002] # RUNIC LETTER IWAZ EOH
16C8 ; [.36E9.0020.0002] # RUNIC LETTER PERTHO PEORTH P
16D5 ; [.36E9.0020.0004][.0000.0110.0004] # RUNIC LETTER OPEN-P
16C9 ; [.36EA.0020.0002] # RUNIC LETTER ALGIZ EOLHX
16CA ; [.36EB.0020.0002] # RUNIC LETTER SOWILO S
16CB ; [.36EB.0020.0004][.0000.0110.0004] # RUNIC LETTER SIGEL LONG-BRANCH-SOL S
16EA ; [.36EB.0020.0004][.0000.0111.0004] # RUNIC LETTER X
16CC ; [.36EB.0020.0004][.0000.0112.0004] # RUNIC LETTER SHORT-TWIG-SOL S
16CD ; [.36EB.0020.0004][.0000.0113.0004] # RUNIC LETTER C
16CE ; [.36EB.0020.0004][.0000.0114.0004] # RUNIC LETTER Z
16F2 ; [.36EC.0020.0002] # RUNIC LETTER SH
16CF ; [.36ED.0020.0002] # RUNIC LETTER TIWAZ TIR TYR T
16D0 ; [.36ED.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-TYR T
16D1 ; [.36ED.0020.0004][.0000.0111.0004] # RUNIC LETTER D
16D2 ; [.36EE.0020.0002] # RUNIC LETTER BERKANAN BEORC BJARKAN B
16D3 ; [.36EE.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-BJARKAN B
16D4 ; [.36EE.0020.0004][.0000.0111.0004] # RUNIC LETTER DOTTED-P
16D6 ; [.36EF.0020.0002] # RUNIC LETTER EHWAZ EH E
16F6 ; [.36F0.0020.0002] # RUNIC LETTER FRANKS CASKET EH
16D7 ; [.36F1.0020.0002] # RUNIC LETTER MANNAZ MAN M
16D8 ; [.36F1.0020.0004][.0000.0110.0004] # RUNIC LETTER LONG-BRANCH-MADR M
16D9 ; [.36F1.0020.0004][.0000.0111.0004] # RUNIC LETTER SHORT-TWIG-MADR M
16EF ; [.36F1.0020.0004][.0000.0110.0004][.36F1.0020.0004][.0000.0110.0004] # RUNIC TVIMADUR SYMBOL
16DA ; [.36F2.0020.0002] # RUNIC LETTER LAUKAZ LAGU LOGR L
16DB ; [.36F2.0020.0004][.0000.0110.0004] # RUNIC LETTER DOTTED-L
16DC ; [.36F3.0020.0002] # RUNIC LETTER INGWAZ
16DD ; [.36F3.0020.0004][.0000.0110.0004] # RUNIC LETTER ING
16DE ; [.36F4.0020.0002] # RUNIC LETTER DAGAZ DAEG D
16DF ; [.36F5.0020.0002] # RUNIC LETTER OTHALAN ETHEL O
16F3 ; [.36F6.0020.0002] # RUNIC LETTER OO
16AA ; [.36F7.0020.0002] # RUNIC LETTER AC A
16F7 ; [.36F8.0020.0002] # RUNIC LETTER FRANKS CASKET AC
16AB ; [.36F9.0020.0002] # RUNIC LETTER AESC
16F8 ; [.36FA.0020.0002] # RUNIC LETTER FRANKS CASKET AESC
16A3 ; [.36FB.0020.0002] # RUNIC LETTER YR
16E0 ; [.36FC.0020.0002] # RUNIC LETTER EAR
16E3 ; [.36FD.0020.0002] # RUNIC LETTER CALC
16B8 ; [.36FE.0020.0002] # RUNIC LETTER GAR
16E4 ; [.36FF.0020.0002] # RUNIC LETTER CEALC
16E1 ; [.3700.0020.0002] # RUNIC LETTER IOR
16E2 ; [.3701.0020.0002] # RUNIC LETTER CWEORTH
16E5 ; [.3702.0020.0002] # RUNIC LETTER STAN
16E6 ; [.3703.0020.0002] # RUNIC LETTER LONG-BRANCH-YR
16E7 ; [.3703.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-YR
16E8 ; [.3703.0020.0004][.0000.0111.0004] # RUNIC LETTER ICELANDIC-YR
10CC0 ; [.3704.0020.0002] # OLD HUNGARIAN SMALL LETTER A
10C80 ; [.3704.0020.0008] # OLD HUNGARIAN CAPITAL LETTER A
10CC1 ; [.3704.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER AA
10C81 ; [.3704.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER AA
10CC2 ; [.3705.0020.0002] # OLD HUNGARIAN SMALL LETTER EB
10C82 ; [.3705.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EB
10CC3 ; [.3706.0020.0002] # OLD HUNGARIAN SMALL LETTER AMB
10C83 ; [.3706.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AMB
10CC4 ; [.3707.0020.0002] # OLD HUNGARIAN SMALL LETTER EC
10C84 ; [.3707.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EC
10CC5 ; [.3708.0020.0002] # OLD HUNGARIAN SMALL LETTER ENC
10C85 ; [.3708.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENC
10CC6 ; [.3709.0020.0002] # OLD HUNGARIAN SMALL LETTER ECS
10C86 ; [.3709.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECS
10CC7 ; [.370A.0020.0002] # OLD HUNGARIAN SMALL LETTER ED
10C87 ; [.370A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ED
10CC8 ; [.370B.0020.0002] # OLD HUNGARIAN SMALL LETTER AND
10C88 ; [.370B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AND
10CC9 ; [.370C.0020.0002] # OLD HUNGARIAN SMALL LETTER E
10C89 ; [.370C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER E
10CCA ; [.370C.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER CLOSE E
10C8A ; [.370C.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER CLOSE E
10CCB ; [.370C.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER EE
10C8B ; [.370C.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER EE
10CCC ; [.370D.0020.0002] # OLD HUNGARIAN SMALL LETTER EF
10C8C ; [.370D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EF
10CCD ; [.370E.0020.0002] # OLD HUNGARIAN SMALL LETTER EG
10C8D ; [.370E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EG
10CCE ; [.370F.0020.0002] # OLD HUNGARIAN SMALL LETTER EGY
10C8E ; [.370F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EGY
10CCF ; [.3710.0020.0002] # OLD HUNGARIAN SMALL LETTER EH
10C8F ; [.3710.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EH
10CD0 ; [.3711.0020.0002] # OLD HUNGARIAN SMALL LETTER I
10C90 ; [.3711.0020.0008] # OLD HUNGARIAN CAPITAL LETTER I
10CD1 ; [.3711.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER II
10C91 ; [.3711.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER II
10CD2 ; [.3712.0020.0002] # OLD HUNGARIAN SMALL LETTER EJ
10C92 ; [.3712.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EJ
10CD3 ; [.3713.0020.0002] # OLD HUNGARIAN SMALL LETTER EK
10C93 ; [.3713.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EK
10CD4 ; [.3714.0020.0002] # OLD HUNGARIAN SMALL LETTER AK
10C94 ; [.3714.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AK
10CD5 ; [.3715.0020.0002] # OLD HUNGARIAN SMALL LETTER UNK
10C95 ; [.3715.0020.0008] # OLD HUNGARIAN CAPITAL LETTER UNK
10CD6 ; [.3716.0020.0002] # OLD HUNGARIAN SMALL LETTER EL
10C96 ; [.3716.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EL
10CD7 ; [.3717.0020.0002] # OLD HUNGARIAN SMALL LETTER ELY
10C97 ; [.3717.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ELY
10CD8 ; [.3718.0020.0002] # OLD HUNGARIAN SMALL LETTER EM
10C98 ; [.3718.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EM
10CD9 ; [.3719.0020.0002] # OLD HUNGARIAN SMALL LETTER EN
10C99 ; [.3719.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EN
10CDA ; [.371A.0020.0002] # OLD HUNGARIAN SMALL LETTER ENY
10C9A ; [.371A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENY
10CDB ; [.371B.0020.0002] # OLD HUNGARIAN SMALL LETTER O
10C9B ; [.371B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER O
10CDC ; [.371B.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER OO
10C9C ; [.371B.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER OO
10CDD ; [.371C.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE
10C9D ; [.371C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
10CDE ; [.371C.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA OE
10C9E ; [.371C.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
10CDF ; [.371C.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER OEE
10C9F ; [.371C.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER OEE
10CE0 ; [.371D.0020.0002] # OLD HUNGARIAN SMALL LETTER EP
10CA0 ; [.371D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EP
10CE1 ; [.371E.0020.0002] # OLD HUNGARIAN SMALL LETTER EMP
10CA1 ; [.371E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EMP
10CE2 ; [.371F.0020.0002] # OLD HUNGARIAN SMALL LETTER ER
10CA2 ; [.371F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ER
10CE3 ; [.371F.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER SHORT ER
10CA3 ; [.371F.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER SHORT ER
10CE4 ; [.3720.0020.0002] # OLD HUNGARIAN SMALL LETTER ES
10CA4 ; [.3720.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ES
10CE5 ; [.3721.0020.0002] # OLD HUNGARIAN SMALL LETTER ESZ
10CA5 ; [.3721.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ESZ
10CE6 ; [.3722.0020.0002] # OLD HUNGARIAN SMALL LETTER ET
10CA6 ; [.3722.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ET
10CE7 ; [.3723.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT
10CA7 ; [.3723.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT
10CE8 ; [.3724.0020.0002] # OLD HUNGARIAN SMALL LETTER ETY
10CA8 ; [.3724.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ETY
10CE9 ; [.3725.0020.0002] # OLD HUNGARIAN SMALL LETTER ECH
10CA9 ; [.3725.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECH
10CEA ; [.3726.0020.0002] # OLD HUNGARIAN SMALL LETTER U
10CAA ; [.3726.0020.0008] # OLD HUNGARIAN CAPITAL LETTER U
10CEB ; [.3726.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER UU
10CAB ; [.3726.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER UU
10CEC ; [.3727.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE
10CAC ; [.3727.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
10CED ; [.3727.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA UE
10CAD ; [.3727.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
10CEE ; [.3728.0020.0002] # OLD HUNGARIAN SMALL LETTER EV
10CAE ; [.3728.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EV
10CEF ; [.3729.0020.0002] # OLD HUNGARIAN SMALL LETTER EZ
10CAF ; [.3729.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZ
10CF0 ; [.372A.0020.0002] # OLD HUNGARIAN SMALL LETTER EZS
10CB0 ; [.372A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZS
10CF1 ; [.372B.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN
10CB1 ; [.372B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN
10CF2 ; [.372C.0020.0002] # OLD HUNGARIAN SMALL LETTER US
10CB2 ; [.372C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER US
10C00 ; [.372D.0020.0002] # OLD TURKIC LETTER ORKHON A
10C01 ; [.372D.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI A
10C02 ; [.372E.0020.0002] # OLD TURKIC LETTER YENISEI AE
10C03 ; [.372F.0020.0002] # OLD TURKIC LETTER ORKHON I
10C04 ; [.372F.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI I
10C05 ; [.3730.0020.0002] # OLD TURKIC LETTER YENISEI E
10C06 ; [.3731.0020.0002] # OLD TURKIC LETTER ORKHON O
10C07 ; [.3732.0020.0002] # OLD TURKIC LETTER ORKHON OE
10C08 ; [.3732.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI OE
10C09 ; [.3733.0020.0002] # OLD TURKIC LETTER ORKHON AB
10C0A ; [.3733.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AB
10C0B ; [.3734.0020.0002] # OLD TURKIC LETTER ORKHON AEB
10C0C ; [.3734.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEB
10C0D ; [.3735.0020.0002] # OLD TURKIC LETTER ORKHON AG
10C0E ; [.3735.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AG
10C0F ; [.3736.0020.0002] # OLD TURKIC LETTER ORKHON AEG
10C10 ; [.3736.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEG
10C11 ; [.3737.0020.0002] # OLD TURKIC LETTER ORKHON AD
10C12 ; [.3737.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AD
10C13 ; [.3738.0020.0002] # OLD TURKIC LETTER ORKHON AED
10C14 ; [.3739.0020.0002] # OLD TURKIC LETTER ORKHON EZ
10C15 ; [.3739.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI EZ
10C16 ; [.373A.0020.0002] # OLD TURKIC LETTER ORKHON AY
10C17 ; [.373A.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AY
10C18 ; [.373B.0020.0002] # OLD TURKIC LETTER ORKHON AEY
10C19 ; [.373B.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEY
10C1A ; [.373C.0020.0002] # OLD TURKIC LETTER ORKHON AEK
10C1B ; [.373C.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEK
10C1C ; [.373D.0020.0002] # OLD TURKIC LETTER ORKHON OEK
10C1D ; [.373D.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI OEK
10C1E ; [.373E.0020.0002] # OLD TURKIC LETTER ORKHON AL
10C1F ; [.373E.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AL
10C20 ; [.373F.0020.0002] # OLD TURKIC LETTER ORKHON AEL
10C21 ; [.3740.0020.0002] # OLD TURKIC LETTER ORKHON ELT
10C22 ; [.3741.0020.0002] # OLD TURKIC LETTER ORKHON EM
10C23 ; [.3742.0020.0002] # OLD TURKIC LETTER ORKHON AN
10C24 ; [.3743.0020.0002] # OLD TURKIC LETTER ORKHON AEN
10C25 ; [.3743.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEN
10C26 ; [.3744.0020.0002] # OLD TURKIC LETTER ORKHON ENT
10C27 ; [.3744.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ENT
10C28 ; [.3745.0020.0002] # OLD TURKIC LETTER ORKHON ENC
10C29 ; [.3745.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ENC
10C2A ; [.3746.0020.0002] # OLD TURKIC LETTER ORKHON ENY
10C2B ; [.3746.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ENY
10C2C ; [.3747.0020.0002] # OLD TURKIC LETTER YENISEI ANG
10C2D ; [.3748.0020.0002] # OLD TURKIC LETTER ORKHON ENG
10C2E ; [.3748.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AENG
10C2F ; [.3749.0020.0002] # OLD TURKIC LETTER ORKHON EP
10C30 ; [.374A.0020.0002] # OLD TURKIC LETTER ORKHON OP
10C31 ; [.374B.0020.0002] # OLD TURKIC LETTER ORKHON IC
10C32 ; [.374C.0020.0002] # OLD TURKIC LETTER ORKHON EC
10C33 ; [.374C.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI EC
10C34 ; [.374D.0020.0002] # OLD TURKIC LETTER ORKHON AQ
10C35 ; [.374D.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AQ
10C36 ; [.374E.0020.0002] # OLD TURKIC LETTER ORKHON IQ
10C37 ; [.374E.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI IQ
10C38 ; [.374F.0020.0002] # OLD TURKIC LETTER ORKHON OQ
10C39 ; [.374F.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI OQ
10C3A ; [.3750.0020.0002] # OLD TURKIC LETTER ORKHON AR
10C3B ; [.3750.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AR
10C3C ; [.3751.0020.0002] # OLD TURKIC LETTER ORKHON AER
10C3D ; [.3752.0020.0002] # OLD TURKIC LETTER ORKHON AS
10C3E ; [.3753.0020.0002] # OLD TURKIC LETTER ORKHON AES
10C3F ; [.3754.0020.0002] # OLD TURKIC LETTER ORKHON ASH
10C40 ; [.3754.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ASH
10C41 ; [.3755.0020.0002] # OLD TURKIC LETTER ORKHON ESH
10C42 ; [.3755.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ESH
10C43 ; [.3756.0020.0002] # OLD TURKIC LETTER ORKHON AT
10C44 ; [.3756.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AT
10C45 ; [.3757.0020.0002] # OLD TURKIC LETTER ORKHON AET
10C46 ; [.3757.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AET
10C47 ; [.3758.0020.0002] # OLD TURKIC LETTER ORKHON OT
10C48 ; [.3759.0020.0002] # OLD TURKIC LETTER ORKHON BASH
A500 ; [.375A.0020.0002] # VAI SYLLABLE EE
A501 ; [.375B.0020.0002] # VAI SYLLABLE EEN
A502 ; [.375C.0020.0002] # VAI SYLLABLE HEE
A503 ; [.375D.0020.0002] # VAI SYLLABLE WEE
A504 ; [.375E.0020.0002] # VAI SYLLABLE WEEN
A505 ; [.375F.0020.0002] # VAI SYLLABLE PEE
A506 ; [.3760.0020.0002] # VAI SYLLABLE BHEE
A507 ; [.3761.0020.0002] # VAI SYLLABLE BEE
A508 ; [.3762.0020.0002] # VAI SYLLABLE MBEE
A509 ; [.3763.0020.0002] # VAI SYLLABLE KPEE
A50A ; [.3764.0020.0002] # VAI SYLLABLE MGBEE
A50B ; [.3765.0020.0002] # VAI SYLLABLE GBEE
A50C ; [.3766.0020.0002] # VAI SYLLABLE FEE
A613 ; [.3766.0020.0004][.3865.0020.0004] # VAI SYMBOL FEENG
A50D ; [.3767.0020.0002] # VAI SYLLABLE VEE
A50E ; [.3768.0020.0002] # VAI SYLLABLE TEE
A50F ; [.3769.0020.0002] # VAI SYLLABLE THEE
A510 ; [.376A.0020.0002] # VAI SYLLABLE DHEE
A511 ; [.376B.0020.0002] # VAI SYLLABLE DHHEE
A512 ; [.376C.0020.0002] # VAI SYLLABLE LEE
A513 ; [.376D.0020.0002] # VAI SYLLABLE REE
A514 ; [.376E.0020.0002] # VAI SYLLABLE DEE
A515 ; [.376F.0020.0002] # VAI SYLLABLE NDEE
A516 ; [.3770.0020.0002] # VAI SYLLABLE SEE
A517 ; [.3771.0020.0002] # VAI SYLLABLE SHEE
A518 ; [.3772.0020.0002] # VAI SYLLABLE ZEE
A519 ; [.3773.0020.0002] # VAI SYLLABLE ZHEE
A51A ; [.3774.0020.0002] # VAI SYLLABLE CEE
A51B ; [.3775.0020.0002] # VAI SYLLABLE JEE
A51C ; [.3776.0020.0002] # VAI SYLLABLE NJEE
A51D ; [.3777.0020.0002] # VAI SYLLABLE YEE
A51E ; [.3778.0020.0002] # VAI SYLLABLE KEE
A614 ; [.3778.0020.0004][.3865.0020.0004] # VAI SYMBOL KEENG
A51F ; [.3779.0020.0002] # VAI SYLLABLE NGGEE
A520 ; [.377A.0020.0002] # VAI SYLLABLE GEE
A521 ; [.377B.0020.0002] # VAI SYLLABLE MEE
A522 ; [.377C.0020.0002] # VAI SYLLABLE NEE
A523 ; [.377D.0020.0002] # VAI SYLLABLE NYEE
A524 ; [.377E.0020.0002] # VAI SYLLABLE I
A525 ; [.377F.0020.0002] # VAI SYLLABLE IN
A526 ; [.3780.0020.0002] # VAI SYLLABLE HI
A527 ; [.3781.0020.0002] # VAI SYLLABLE HIN
A528 ; [.3782.0020.0002] # VAI SYLLABLE WI
A529 ; [.3783.0020.0002] # VAI SYLLABLE WIN
A52A ; [.3784.0020.0002] # VAI SYLLABLE PI
A52B ; [.3785.0020.0002] # VAI SYLLABLE BHI
A52C ; [.3786.0020.0002] # VAI SYLLABLE BI
A52D ; [.3787.0020.0002] # VAI SYLLABLE MBI
A52E ; [.3788.0020.0002] # VAI SYLLABLE KPI
A52F ; [.3789.0020.0002] # VAI SYLLABLE MGBI
A530 ; [.378A.0020.0002] # VAI SYLLABLE GBI
A531 ; [.378B.0020.0002] # VAI SYLLABLE FI
A532 ; [.378C.0020.0002] # VAI SYLLABLE VI
A533 ; [.378D.0020.0002] # VAI SYLLABLE TI
A615 ; [.378D.0020.0004][.3865.0020.0004] # VAI SYMBOL TING
A534 ; [.378E.0020.0002] # VAI SYLLABLE THI
A535 ; [.378F.0020.0002] # VAI SYLLABLE DHI
A536 ; [.3790.0020.0002] # VAI SYLLABLE DHHI
A537 ; [.3791.0020.0002] # VAI SYLLABLE LI
A538 ; [.3792.0020.0002] # VAI SYLLABLE RI
A539 ; [.3793.0020.0002] # VAI SYLLABLE DI
A53A ; [.3794.0020.0002] # VAI SYLLABLE NDI
A53B ; [.3795.0020.0002] # VAI SYLLABLE SI
A53C ; [.3796.0020.0002] # VAI SYLLABLE SHI
A53D ; [.3797.0020.0002] # VAI SYLLABLE ZI
A53E ; [.3798.0020.0002] # VAI SYLLABLE ZHI
A53F ; [.3799.0020.0002] # VAI SYLLABLE CI
A540 ; [.379A.0020.0002] # VAI SYLLABLE JI
A541 ; [.379B.0020.0002] # VAI SYLLABLE NJI
A542 ; [.379C.0020.0002] # VAI SYLLABLE YI
A543 ; [.379D.0020.0002] # VAI SYLLABLE KI
A544 ; [.379E.0020.0002] # VAI SYLLABLE NGGI
A545 ; [.379F.0020.0002] # VAI SYLLABLE GI
A546 ; [.37A0.0020.0002] # VAI SYLLABLE MI
A547 ; [.37A1.0020.0002] # VAI SYLLABLE NI
A616 ; [.37A1.0020.0004][.3866.0020.0004] # VAI SYMBOL NII
A548 ; [.37A2.0020.0002] # VAI SYLLABLE NYI
A549 ; [.37A3.0020.0002] # VAI SYLLABLE A
A54A ; [.37A4.0020.0002] # VAI SYLLABLE AN
A54B ; [.37A5.0020.0002] # VAI SYLLABLE NGAN
A54C ; [.37A6.0020.0002] # VAI SYLLABLE HA
A54D ; [.37A7.0020.0002] # VAI SYLLABLE HAN
A54E ; [.37A8.0020.0002] # VAI SYLLABLE WA
A54F ; [.37A9.0020.0002] # VAI SYLLABLE WAN
A550 ; [.37AA.0020.0002] # VAI SYLLABLE PA
A551 ; [.37AB.0020.0002] # VAI SYLLABLE BHA
A552 ; [.37AC.0020.0002] # VAI SYLLABLE BA
A617 ; [.37AC.0020.0004][.3865.0020.0004] # VAI SYMBOL BANG
A553 ; [.37AD.0020.0002] # VAI SYLLABLE MBA
A554 ; [.37AE.0020.0002] # VAI SYLLABLE KPA
A555 ; [.37AF.0020.0002] # VAI SYLLABLE KPAN
A556 ; [.37B0.0020.0002] # VAI SYLLABLE MGBA
A557 ; [.37B1.0020.0002] # VAI SYLLABLE GBA
A558 ; [.37B2.0020.0002] # VAI SYLLABLE FA
A610 ; [.37B2.0020.0004] # VAI SYLLABLE NDOLE FA
A618 ; [.37B2.0020.0004][.3866.0020.0004] # VAI SYMBOL FAA
A559 ; [.37B3.0020.0002] # VAI SYLLABLE VA
A55A ; [.37B4.0020.0002] # VAI SYLLABLE TA
A619 ; [.37B4.0020.0004][.3866.0020.0004] # VAI SYMBOL TAA
A55B ; [.37B5.0020.0002] # VAI SYLLABLE THA
A55C ; [.37B6.0020.0002] # VAI SYLLABLE DHA
A55D ; [.37B7.0020.0002] # VAI SYLLABLE DHHA
A55E ; [.37B8.0020.0002] # VAI SYLLABLE LA
A55F ; [.37B9.0020.0002] # VAI SYLLABLE RA
A560 ; [.37BA.0020.0002] # VAI SYLLABLE DA
A61A ; [.37BA.0020.0004][.3865.0020.0004] # VAI SYMBOL DANG
A561 ; [.37BB.0020.0002] # VAI SYLLABLE NDA
A562 ; [.37BC.0020.0002] # VAI SYLLABLE SA
A563 ; [.37BD.0020.0002] # VAI SYLLABLE SHA
A564 ; [.37BE.0020.0002] # VAI SYLLABLE ZA
A565 ; [.37BF.0020.0002] # VAI SYLLABLE ZHA
A566 ; [.37C0.0020.0002] # VAI SYLLABLE CA
A567 ; [.37C1.0020.0002] # VAI SYLLABLE JA
A568 ; [.37C2.0020.0002] # VAI SYLLABLE NJA
A569 ; [.37C3.0020.0002] # VAI SYLLABLE YA
A56A ; [.37C4.0020.0002] # VAI SYLLABLE KA
A611 ; [.37C4.0020.0004] # VAI SYLLABLE NDOLE KA
A56B ; [.37C5.0020.0002] # VAI SYLLABLE KAN
A56C ; [.37C6.0020.0002] # VAI SYLLABLE NGGA
A56D ; [.37C7.0020.0002] # VAI SYLLABLE GA
A56E ; [.37C8.0020.0002] # VAI SYLLABLE MA
A62A ; [.37C8.0020.0004] # VAI SYLLABLE NDOLE MA
A56F ; [.37C9.0020.0002] # VAI SYLLABLE NA
A570 ; [.37CA.0020.0002] # VAI SYLLABLE NYA
A571 ; [.37CB.0020.0002] # VAI SYLLABLE OO
A572 ; [.37CC.0020.0002] # VAI SYLLABLE OON
A573 ; [.37CD.0020.0002] # VAI SYLLABLE HOO
A574 ; [.37CE.0020.0002] # VAI SYLLABLE WOO
A575 ; [.37CF.0020.0002] # VAI SYLLABLE WOON
A576 ; [.37D0.0020.0002] # VAI SYLLABLE POO
A577 ; [.37D1.0020.0002] # VAI SYLLABLE BHOO
A578 ; [.37D2.0020.0002] # VAI SYLLABLE BOO
A579 ; [.37D3.0020.0002] # VAI SYLLABLE MBOO
A57A ; [.37D4.0020.0002] # VAI SYLLABLE KPOO
A57B ; [.37D5.0020.0002] # VAI SYLLABLE MGBOO
A57C ; [.37D6.0020.0002] # VAI SYLLABLE GBOO
A57D ; [.37D7.0020.0002] # VAI SYLLABLE FOO
A57E ; [.37D8.0020.0002] # VAI SYLLABLE VOO
A57F ; [.37D9.0020.0002] # VAI SYLLABLE TOO
A580 ; [.37DA.0020.0002] # VAI SYLLABLE THOO
A581 ; [.37DB.0020.0002] # VAI SYLLABLE DHOO
A582 ; [.37DC.0020.0002] # VAI SYLLABLE DHHOO
A583 ; [.37DD.0020.0002] # VAI SYLLABLE LOO
A584 ; [.37DE.0020.0002] # VAI SYLLABLE ROO
A585 ; [.37DF.0020.0002] # VAI SYLLABLE DOO
A61B ; [.37DF.0020.0004][.3865.0020.0004] # VAI SYMBOL DOONG
A586 ; [.37E0.0020.0002] # VAI SYLLABLE NDOO
A587 ; [.37E1.0020.0002] # VAI SYLLABLE SOO
A612 ; [.37E1.0020.0004] # VAI SYLLABLE NDOLE SOO
A588 ; [.37E2.0020.0002] # VAI SYLLABLE SHOO
A589 ; [.37E3.0020.0002] # VAI SYLLABLE ZOO
A58A ; [.37E4.0020.0002] # VAI SYLLABLE ZHOO
A58B ; [.37E5.0020.0002] # VAI SYLLABLE COO
A58C ; [.37E6.0020.0002] # VAI SYLLABLE JOO
A58D ; [.37E7.0020.0002] # VAI SYLLABLE NJOO
A58E ; [.37E8.0020.0002] # VAI SYLLABLE YOO
A58F ; [.37E9.0020.0002] # VAI SYLLABLE KOO
A590 ; [.37EA.0020.0002] # VAI SYLLABLE NGGOO
A591 ; [.37EB.0020.0002] # VAI SYLLABLE GOO
A592 ; [.37EC.0020.0002] # VAI SYLLABLE MOO
A593 ; [.37ED.0020.0002] # VAI SYLLABLE NOO
A594 ; [.37EE.0020.0002] # VAI SYLLABLE NYOO
A595 ; [.37EF.0020.0002] # VAI SYLLABLE U
A596 ; [.37F0.0020.0002] # VAI SYLLABLE UN
A597 ; [.37F1.0020.0002] # VAI SYLLABLE HU
A598 ; [.37F2.0020.0002] # VAI SYLLABLE HUN
A599 ; [.37F3.0020.0002] # VAI SYLLABLE WU
A59A ; [.37F4.0020.0002] # VAI SYLLABLE WUN
A59B ; [.37F5.0020.0002] # VAI SYLLABLE PU
A59C ; [.37F6.0020.0002] # VAI SYLLABLE BHU
A59D ; [.37F7.0020.0002] # VAI SYLLABLE BU
A59E ; [.37F8.0020.0002] # VAI SYLLABLE MBU
A59F ; [.37F9.0020.0002] # VAI SYLLABLE KPU
A5A0 ; [.37FA.0020.0002] # VAI SYLLABLE MGBU
A5A1 ; [.37FB.0020.0002] # VAI SYLLABLE GBU
A5A2 ; [.37FC.0020.0002] # VAI SYLLABLE FU
A5A3 ; [.37FD.0020.0002] # VAI SYLLABLE VU
A5A4 ; [.37FE.0020.0002] # VAI SYLLABLE TU
A5A5 ; [.37FF.0020.0002] # VAI SYLLABLE THU
A5A6 ; [.3800.0020.0002] # VAI SYLLABLE DHU
A5A7 ; [.3801.0020.0002] # VAI SYLLABLE DHHU
A5A8 ; [.3802.0020.0002] # VAI SYLLABLE LU
A5A9 ; [.3803.0020.0002] # VAI SYLLABLE RU
A5AA ; [.3804.0020.0002] # VAI SYLLABLE DU
A5AB ; [.3805.0020.0002] # VAI SYLLABLE NDU
A5AC ; [.3806.0020.0002] # VAI SYLLABLE SU
A5AD ; [.3807.0020.0002] # VAI SYLLABLE SHU
A5AE ; [.3808.0020.0002] # VAI SYLLABLE ZU
A5AF ; [.3809.0020.0002] # VAI SYLLABLE ZHU
A5B0 ; [.380A.0020.0002] # VAI SYLLABLE CU
A5B1 ; [.380B.0020.0002] # VAI SYLLABLE JU
A5B2 ; [.380C.0020.0002] # VAI SYLLABLE NJU
A5B3 ; [.380D.0020.0002] # VAI SYLLABLE YU
A5B4 ; [.380E.0020.0002] # VAI SYLLABLE KU
A61C ; [.380E.0020.0004][.3865.0020.0004] # VAI SYMBOL KUNG
A5B5 ; [.380F.0020.0002] # VAI SYLLABLE NGGU
A5B6 ; [.3810.0020.0002] # VAI SYLLABLE GU
A5B7 ; [.3811.0020.0002] # VAI SYLLABLE MU
A5B8 ; [.3812.0020.0002] # VAI SYLLABLE NU
A5B9 ; [.3813.0020.0002] # VAI SYLLABLE NYU
A5BA ; [.3814.0020.0002] # VAI SYLLABLE O
A5BB ; [.3815.0020.0002] # VAI SYLLABLE ON
A5BC ; [.3816.0020.0002] # VAI SYLLABLE NGON
A5BD ; [.3817.0020.0002] # VAI SYLLABLE HO
A5BE ; [.3818.0020.0002] # VAI SYLLABLE HON
A5BF ; [.3819.0020.0002] # VAI SYLLABLE WO
A5C0 ; [.381A.0020.0002] # VAI SYLLABLE WON
A5C1 ; [.381B.0020.0002] # VAI SYLLABLE PO
A5C2 ; [.381C.0020.0002] # VAI SYLLABLE BHO
A5C3 ; [.381D.0020.0002] # VAI SYLLABLE BO
A5C4 ; [.381E.0020.0002] # VAI SYLLABLE MBO
A5C5 ; [.381F.0020.0002] # VAI SYLLABLE KPO
A5C6 ; [.3820.0020.0002] # VAI SYLLABLE MGBO
A5C7 ; [.3821.0020.0002] # VAI SYLLABLE GBO
A5C8 ; [.3822.0020.0002] # VAI SYLLABLE GBON
A5C9 ; [.3823.0020.0002] # VAI SYLLABLE FO
A5CA ; [.3824.0020.0002] # VAI SYLLABLE VO
A5CB ; [.3825.0020.0002] # VAI SYLLABLE TO
A61D ; [.3825.0020.0004][.3865.0020.0004] # VAI SYMBOL TONG
A5CC ; [.3826.0020.0002] # VAI SYLLABLE THO
A5CD ; [.3827.0020.0002] # VAI SYLLABLE DHO
A5CE ; [.3828.0020.0002] # VAI SYLLABLE DHHO
A5CF ; [.3829.0020.0002] # VAI SYLLABLE LO
A5D0 ; [.382A.0020.0002] # VAI SYLLABLE RO
A5D1 ; [.382B.0020.0002] # VAI SYLLABLE DO
A62B ; [.382B.0020.0004] # VAI SYLLABLE NDOLE DO
A61E ; [.382B.0020.0004][.3866.0020.0004] # VAI SYMBOL DO-O
A5D2 ; [.382C.0020.0002] # VAI SYLLABLE NDO
A5D3 ; [.382D.0020.0002] # VAI SYLLABLE SO
A5D4 ; [.382E.0020.0002] # VAI SYLLABLE SHO
A5D5 ; [.382F.0020.0002] # VAI SYLLABLE ZO
A5D6 ; [.3830.0020.0002] # VAI SYLLABLE ZHO
A5D7 ; [.3831.0020.0002] # VAI SYLLABLE CO
A5D8 ; [.3832.0020.0002] # VAI SYLLABLE JO
A61F ; [.3832.0020.0004][.3865.0020.0004] # VAI SYMBOL JONG
A5D9 ; [.3833.0020.0002] # VAI SYLLABLE NJO
A5DA ; [.3834.0020.0002] # VAI SYLLABLE YO
A5DB ; [.3835.0020.0002] # VAI SYLLABLE KO
A5DC ; [.3836.0020.0002] # VAI SYLLABLE NGGO
A5DD ; [.3837.0020.0002] # VAI SYLLABLE GO
A5DE ; [.3838.0020.0002] # VAI SYLLABLE MO
A5DF ; [.3839.0020.0002] # VAI SYLLABLE NO
A5E0 ; [.383A.0020.0002] # VAI SYLLABLE NYO
A5E1 ; [.383B.0020.0002] # VAI SYLLABLE E
A5E2 ; [.383C.0020.0002] # VAI SYLLABLE EN
A5E3 ; [.383D.0020.0002] # VAI SYLLABLE NGEN
A5E4 ; [.383E.0020.0002] # VAI SYLLABLE HE
A5E5 ; [.383F.0020.0002] # VAI SYLLABLE HEN
A5E6 ; [.3840.0020.0002] # VAI SYLLABLE WE
A5E7 ; [.3841.0020.0002] # VAI SYLLABLE WEN
A5E8 ; [.3842.0020.0002] # VAI SYLLABLE PE
A5E9 ; [.3843.0020.0002] # VAI SYLLABLE BHE
A5EA ; [.3844.0020.0002] # VAI SYLLABLE BE
A5EB ; [.3845.0020.0002] # VAI SYLLABLE MBE
A5EC ; [.3846.0020.0002] # VAI SYLLABLE KPE
A5ED ; [.3847.0020.0002] # VAI SYLLABLE KPEN
A5EE ; [.3848.0020.0002] # VAI SYLLABLE MGBE
A5EF ; [.3849.0020.0002] # VAI SYLLABLE GBE
A5F0 ; [.384A.0020.0002] # VAI SYLLABLE GBEN
A5F1 ; [.384B.0020.0002] # VAI SYLLABLE FE
A5F2 ; [.384C.0020.0002] # VAI SYLLABLE VE
A5F3 ; [.384D.0020.0002] # VAI SYLLABLE TE
A5F4 ; [.384E.0020.0002] # VAI SYLLABLE THE
A5F5 ; [.384F.0020.0002] # VAI SYLLABLE DHE
A5F6 ; [.3850.0020.0002] # VAI SYLLABLE DHHE
A5F7 ; [.3851.0020.0002] # VAI SYLLABLE LE
A5F8 ; [.3852.0020.0002] # VAI SYLLABLE RE
A5F9 ; [.3853.0020.0002] # VAI SYLLABLE DE
A5FA ; [.3854.0020.0002] # VAI SYLLABLE NDE
A5FB ; [.3855.0020.0002] # VAI SYLLABLE SE
A5FC ; [.3856.0020.0002] # VAI SYLLABLE SHE
A5FD ; [.3857.0020.0002] # VAI SYLLABLE ZE
A5FE ; [.3858.0020.0002] # VAI SYLLABLE ZHE
A5FF ; [.3859.0020.0002] # VAI SYLLABLE CE
A600 ; [.385A.0020.0002] # VAI SYLLABLE JE
A601 ; [.385B.0020.0002] # VAI SYLLABLE NJE
A602 ; [.385C.0020.0002] # VAI SYLLABLE YE
A603 ; [.385D.0020.0002] # VAI SYLLABLE KE
A604 ; [.385E.0020.0002] # VAI SYLLABLE NGGE
A605 ; [.385F.0020.0002] # VAI SYLLABLE NGGEN
A606 ; [.3860.0020.0002] # VAI SYLLABLE GE
A607 ; [.3861.0020.0002] # VAI SYLLABLE GEN
A608 ; [.3862.0020.0002] # VAI SYLLABLE ME
A609 ; [.3863.0020.0002] # VAI SYLLABLE NE
A60A ; [.3864.0020.0002] # VAI SYLLABLE NYE
A60B ; [.3865.0020.0002] # VAI SYLLABLE NG
A60C ; [.3866.0020.0002] # VAI SYLLABLE LENGTHENER
A6A0 ; [.3867.0020.0002] # BAMUM LETTER A
A6A1 ; [.3868.0020.0002] # BAMUM LETTER KA
A6A2 ; [.3869.0020.0002] # BAMUM LETTER U
A6A3 ; [.386A.0020.0002] # BAMUM LETTER KU
A6A4 ; [.386B.0020.0002] # BAMUM LETTER EE
A6A5 ; [.386C.0020.0002] # BAMUM LETTER REE
A6A6 ; [.386D.0020.0002] # BAMUM LETTER TAE
A6A7 ; [.386E.0020.0002] # BAMUM LETTER O
A6A8 ; [.386F.0020.0002] # BAMUM LETTER NYI
A6A9 ; [.3870.0020.0002] # BAMUM LETTER I
A6AA ; [.3871.0020.0002] # BAMUM LETTER LA
A6AB ; [.3872.0020.0002] # BAMUM LETTER PA
A6AC ; [.3873.0020.0002] # BAMUM LETTER RII
A6AD ; [.3874.0020.0002] # BAMUM LETTER RIEE
A6AE ; [.3875.0020.0002] # BAMUM LETTER LEEEE
A6AF ; [.3876.0020.0002] # BAMUM LETTER MEEEE
A6B0 ; [.3877.0020.0002] # BAMUM LETTER TAA
A6B1 ; [.3878.0020.0002] # BAMUM LETTER NDAA
A6B2 ; [.3879.0020.0002] # BAMUM LETTER NJAEM
A6B3 ; [.387A.0020.0002] # BAMUM LETTER M
A6B4 ; [.387B.0020.0002] # BAMUM LETTER SUU
A6B5 ; [.387C.0020.0002] # BAMUM LETTER MU
A6B6 ; [.387D.0020.0002] # BAMUM LETTER SHII
A6B7 ; [.387E.0020.0002] # BAMUM LETTER SI
A6B8 ; [.387F.0020.0002] # BAMUM LETTER SHEUX
A6B9 ; [.3880.0020.0002] # BAMUM LETTER SEUX
A6BA ; [.3881.0020.0002] # BAMUM LETTER KYEE
A6BB ; [.3882.0020.0002] # BAMUM LETTER KET
A6BC ; [.3883.0020.0002] # BAMUM LETTER NUAE
A6BD ; [.3884.0020.0002] # BAMUM LETTER NU
A6BE ; [.3885.0020.0002] # BAMUM LETTER NJUAE
A6BF ; [.3886.0020.0002] # BAMUM LETTER YOQ
A6C0 ; [.3887.0020.0002] # BAMUM LETTER SHU
A6C1 ; [.3888.0020.0002] # BAMUM LETTER YUQ
A6C2 ; [.3889.0020.0002] # BAMUM LETTER YA
A6C3 ; [.388A.0020.0002] # BAMUM LETTER NSHA
A6C4 ; [.388B.0020.0002] # BAMUM LETTER KEUX
A6C5 ; [.388C.0020.0002] # BAMUM LETTER PEUX
A6C6 ; [.388D.0020.0002] # BAMUM LETTER NJEE
A6C7 ; [.388E.0020.0002] # BAMUM LETTER NTEE
A6C8 ; [.388F.0020.0002] # BAMUM LETTER PUE
A6C9 ; [.3890.0020.0002] # BAMUM LETTER WUE
A6CA ; [.3891.0020.0002] # BAMUM LETTER PEE
A6CB ; [.3892.0020.0002] # BAMUM LETTER FEE
A6CC ; [.3893.0020.0002] # BAMUM LETTER RU
A6CD ; [.3894.0020.0002] # BAMUM LETTER LU
A6CE ; [.3895.0020.0002] # BAMUM LETTER MI
A6CF ; [.3896.0020.0002] # BAMUM LETTER NI
A6D0 ; [.3897.0020.0002] # BAMUM LETTER REUX
A6D1 ; [.3898.0020.0002] # BAMUM LETTER RAE
A6D2 ; [.3899.0020.0002] # BAMUM LETTER KEN
A6D3 ; [.389A.0020.0002] # BAMUM LETTER NGKWAEN
A6D4 ; [.389B.0020.0002] # BAMUM LETTER NGGA
A6D5 ; [.389C.0020.0002] # BAMUM LETTER NGA
A6D6 ; [.389D.0020.0002] # BAMUM LETTER SHO
A6D7 ; [.389E.0020.0002] # BAMUM LETTER PUAE
A6D8 ; [.389F.0020.0002] # BAMUM LETTER FU
A6D9 ; [.38A0.0020.0002] # BAMUM LETTER FOM
A6DA ; [.38A1.0020.0002] # BAMUM LETTER WA
A6DB ; [.38A2.0020.0002] # BAMUM LETTER NA
A6DC ; [.38A3.0020.0002] # BAMUM LETTER LI
A6DD ; [.38A4.0020.0002] # BAMUM LETTER PI
A6DE ; [.38A5.0020.0002] # BAMUM LETTER LOQ
A6DF ; [.38A6.0020.0002] # BAMUM LETTER KO
A6E0 ; [.38A7.0020.0002] # BAMUM LETTER MBEN
A6E1 ; [.38A8.0020.0002] # BAMUM LETTER REN
A6E2 ; [.38A9.0020.0002] # BAMUM LETTER MEN
A6E3 ; [.38AA.0020.0002] # BAMUM LETTER MA
A6E4 ; [.38AB.0020.0002] # BAMUM LETTER TI
A6E5 ; [.38AC.0020.0002] # BAMUM LETTER KI
A6E6 ; [.38AD.0020.0002] # BAMUM LETTER MO
A6E7 ; [.38AE.0020.0002] # BAMUM LETTER MBAA
A6E8 ; [.38AF.0020.0002] # BAMUM LETTER TET
A6E9 ; [.38B0.0020.0002] # BAMUM LETTER KPA
A6EA ; [.38B1.0020.0002] # BAMUM LETTER TEN
A6EB ; [.38B2.0020.0002] # BAMUM LETTER NTUU
A6EC ; [.38B3.0020.0002] # BAMUM LETTER SAMBA
A6ED ; [.38B4.0020.0002] # BAMUM LETTER FAAMAE
A6EE ; [.38B5.0020.0002] # BAMUM LETTER KOVUU
A6EF ; [.38B6.0020.0002] # BAMUM LETTER KOGHOM
16800 ; [.38B7.0020.0002] # BAMUM LETTER PHASE-A NGKUE MFON
16801 ; [.38B8.0020.0002] # BAMUM LETTER PHASE-A GBIEE FON
16802 ; [.38B9.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE
16803 ; [.38BA.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMBA
16804 ; [.38BB.0020.0002] # BAMUM LETTER PHASE-A NAA MFON
16805 ; [.38BC.0020.0002] # BAMUM LETTER PHASE-A SHUENSHUET
16806 ; [.38BD.0020.0002] # BAMUM LETTER PHASE-A TITA MFON
16807 ; [.38BE.0020.0002] # BAMUM LETTER PHASE-A NZA MFON
16808 ; [.38BF.0020.0002] # BAMUM LETTER PHASE-A SHINDA PA NJI
16809 ; [.38C0.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE
1680A ; [.38C1.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA
1680B ; [.38C2.0020.0002] # BAMUM LETTER PHASE-A MAEMBGBIEE
1680C ; [.38C3.0020.0002] # BAMUM LETTER PHASE-A TU MAEMBA
1680D ; [.38C4.0020.0002] # BAMUM LETTER PHASE-A NGANGU
1680E ; [.38C5.0020.0002] # BAMUM LETTER PHASE-A MAEMVEUX
1680F ; [.38C6.0020.0002] # BAMUM LETTER PHASE-A MANSUAE
16810 ; [.38C7.0020.0002] # BAMUM LETTER PHASE-A MVEUAENGAM
16811 ; [.38C8.0020.0002] # BAMUM LETTER PHASE-A SEUNYAM
16812 ; [.38C9.0020.0002] # BAMUM LETTER PHASE-A NTOQPEN
16813 ; [.38CA.0020.0002] # BAMUM LETTER PHASE-A KEUKEUTNDA
16814 ; [.38CB.0020.0002] # BAMUM LETTER PHASE-A NKINDI
16815 ; [.38CC.0020.0002] # BAMUM LETTER PHASE-A SUU
16816 ; [.38CD.0020.0002] # BAMUM LETTER PHASE-A NGKUENZEUM
16817 ; [.38CE.0020.0002] # BAMUM LETTER PHASE-A LAPAQ
16818 ; [.38CF.0020.0002] # BAMUM LETTER PHASE-A LET KUT
16819 ; [.38D0.0020.0002] # BAMUM LETTER PHASE-A NTAP MFAA
1681A ; [.38D1.0020.0002] # BAMUM LETTER PHASE-A MAEKEUP
1681B ; [.38D2.0020.0002] # BAMUM LETTER PHASE-A PASHAE
1681C ; [.38D3.0020.0002] # BAMUM LETTER PHASE-A GHEUAERAE
1681D ; [.38D4.0020.0002] # BAMUM LETTER PHASE-A PAMSHAE
1681E ; [.38D5.0020.0002] # BAMUM LETTER PHASE-A MON NGGEUAET
1681F ; [.38D6.0020.0002] # BAMUM LETTER PHASE-A NZUN MEUT
16820 ; [.38D7.0020.0002] # BAMUM LETTER PHASE-A U YUQ NAE
16821 ; [.38D8.0020.0002] # BAMUM LETTER PHASE-A GHEUAEGHEUAE
16822 ; [.38D9.0020.0002] # BAMUM LETTER PHASE-A NTAP NTAA
16823 ; [.38DA.0020.0002] # BAMUM LETTER PHASE-A SISA
16824 ; [.38DB.0020.0002] # BAMUM LETTER PHASE-A MGBASA
16825 ; [.38DC.0020.0002] # BAMUM LETTER PHASE-A MEUNJOMNDEUQ
16826 ; [.38DD.0020.0002] # BAMUM LETTER PHASE-A MOOMPUQ
16827 ; [.38DE.0020.0002] # BAMUM LETTER PHASE-A KAFA
16828 ; [.38DF.0020.0002] # BAMUM LETTER PHASE-A PA LEERAEWA
16829 ; [.38E0.0020.0002] # BAMUM LETTER PHASE-A NDA LEERAEWA
1682A ; [.38E1.0020.0002] # BAMUM LETTER PHASE-A PET
1682B ; [.38E2.0020.0002] # BAMUM LETTER PHASE-A MAEMKPEN
1682C ; [.38E3.0020.0002] # BAMUM LETTER PHASE-A NIKA
1682D ; [.38E4.0020.0002] # BAMUM LETTER PHASE-A PUP
1682E ; [.38E5.0020.0002] # BAMUM LETTER PHASE-A TUAEP
1682F ; [.38E6.0020.0002] # BAMUM LETTER PHASE-A LUAEP
16830 ; [.38E7.0020.0002] # BAMUM LETTER PHASE-A SONJAM
16831 ; [.38E8.0020.0002] # BAMUM LETTER PHASE-A TEUTEUWEN
16832 ; [.38E9.0020.0002] # BAMUM LETTER PHASE-A MAENYI
16833 ; [.38EA.0020.0002] # BAMUM LETTER PHASE-A KET
16834 ; [.38EB.0020.0002] # BAMUM LETTER PHASE-A NDAANGGEUAET
16835 ; [.38EC.0020.0002] # BAMUM LETTER PHASE-A KUOQ
16836 ; [.38ED.0020.0002] # BAMUM LETTER PHASE-A MOOMEUT
16837 ; [.38EE.0020.0002] # BAMUM LETTER PHASE-A SHUM
16838 ; [.38EF.0020.0002] # BAMUM LETTER PHASE-A LOMMAE
16839 ; [.38F0.0020.0002] # BAMUM LETTER PHASE-A FIRI
1683A ; [.38F1.0020.0002] # BAMUM LETTER PHASE-A ROM
1683B ; [.38F2.0020.0002] # BAMUM LETTER PHASE-A KPOQ
1683C ; [.38F3.0020.0002] # BAMUM LETTER PHASE-A SOQ
1683D ; [.38F4.0020.0002] # BAMUM LETTER PHASE-A MAP PIEET
1683E ; [.38F5.0020.0002] # BAMUM LETTER PHASE-A SHIRAE
1683F ; [.38F6.0020.0002] # BAMUM LETTER PHASE-A NTAP
16840 ; [.38F7.0020.0002] # BAMUM LETTER PHASE-A SHOQ NSHUT YUM
16841 ; [.38F8.0020.0002] # BAMUM LETTER PHASE-A NYIT MONGKEUAEQ
16842 ; [.38F9.0020.0002] # BAMUM LETTER PHASE-A PAARAE
16843 ; [.38FA.0020.0002] # BAMUM LETTER PHASE-A NKAARAE
16844 ; [.38FB.0020.0002] # BAMUM LETTER PHASE-A UNKNOWN
16845 ; [.38FC.0020.0002] # BAMUM LETTER PHASE-A NGGEN
16846 ; [.38FD.0020.0002] # BAMUM LETTER PHASE-A MAESI
16847 ; [.38FE.0020.0002] # BAMUM LETTER PHASE-A NJAM
16848 ; [.38FF.0020.0002] # BAMUM LETTER PHASE-A MBANYI
16849 ; [.3900.0020.0002] # BAMUM LETTER PHASE-A NYET
1684A ; [.3901.0020.0002] # BAMUM LETTER PHASE-A TEUAEN
1684B ; [.3902.0020.0002] # BAMUM LETTER PHASE-A SOT
1684C ; [.3903.0020.0002] # BAMUM LETTER PHASE-A PAAM
1684D ; [.3904.0020.0002] # BAMUM LETTER PHASE-A NSHIEE
1684E ; [.3905.0020.0002] # BAMUM LETTER PHASE-A MAEM
1684F ; [.3906.0020.0002] # BAMUM LETTER PHASE-A NYI
16850 ; [.3907.0020.0002] # BAMUM LETTER PHASE-A KAQ
16851 ; [.3908.0020.0002] # BAMUM LETTER PHASE-A NSHA
16852 ; [.3909.0020.0002] # BAMUM LETTER PHASE-A VEE
16853 ; [.390A.0020.0002] # BAMUM LETTER PHASE-A LU
16854 ; [.390B.0020.0002] # BAMUM LETTER PHASE-A NEN
16855 ; [.390C.0020.0002] # BAMUM LETTER PHASE-A NAQ
16856 ; [.390D.0020.0002] # BAMUM LETTER PHASE-A MBAQ
16857 ; [.390E.0020.0002] # BAMUM LETTER PHASE-B NSHUET
16858 ; [.390F.0020.0002] # BAMUM LETTER PHASE-B TU MAEMGBIEE
16859 ; [.3910.0020.0002] # BAMUM LETTER PHASE-B SIEE
1685A ; [.3911.0020.0002] # BAMUM LETTER PHASE-B SET TU
1685B ; [.3912.0020.0002] # BAMUM LETTER PHASE-B LOM NTEUM
1685C ; [.3913.0020.0002] # BAMUM LETTER PHASE-B MBA MAELEE
1685D ; [.3914.0020.0002] # BAMUM LETTER PHASE-B KIEEM
1685E ; [.3915.0020.0002] # BAMUM LETTER PHASE-B YEURAE
1685F ; [.3916.0020.0002] # BAMUM LETTER PHASE-B MBAARAE
16860 ; [.3917.0020.0002] # BAMUM LETTER PHASE-B KAM
16861 ; [.3918.0020.0002] # BAMUM LETTER PHASE-B PEESHI
16862 ; [.3919.0020.0002] # BAMUM LETTER PHASE-B YAFU LEERAEWA
16863 ; [.391A.0020.0002] # BAMUM LETTER PHASE-B LAM NSHUT NYAM
16864 ; [.391B.0020.0002] # BAMUM LETTER PHASE-B NTIEE SHEUOQ
16865 ; [.391C.0020.0002] # BAMUM LETTER PHASE-B NDU NJAA
16866 ; [.391D.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEUAEM
16867 ; [.391E.0020.0002] # BAMUM LETTER PHASE-B PIT
16868 ; [.391F.0020.0002] # BAMUM LETTER PHASE-B TU NSIEE
16869 ; [.3920.0020.0002] # BAMUM LETTER PHASE-B SHET NJAQ
1686A ; [.3921.0020.0002] # BAMUM LETTER PHASE-B SHEUAEQTU
1686B ; [.3922.0020.0002] # BAMUM LETTER PHASE-B MFON TEUAEQ
1686C ; [.3923.0020.0002] # BAMUM LETTER PHASE-B MBIT MBAAKET
1686D ; [.3924.0020.0002] # BAMUM LETTER PHASE-B NYI NTEUM
1686E ; [.3925.0020.0002] # BAMUM LETTER PHASE-B KEUPUQ
1686F ; [.3926.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEN
16870 ; [.3927.0020.0002] # BAMUM LETTER PHASE-B KEUYEUX
16871 ; [.3928.0020.0002] # BAMUM LETTER PHASE-B LAANAE
16872 ; [.3929.0020.0002] # BAMUM LETTER PHASE-B PARUM
16873 ; [.392A.0020.0002] # BAMUM LETTER PHASE-B VEUM
16874 ; [.392B.0020.0002] # BAMUM LETTER PHASE-B NGKINDI MVOP
16875 ; [.392C.0020.0002] # BAMUM LETTER PHASE-B NGGEU MBU
16876 ; [.392D.0020.0002] # BAMUM LETTER PHASE-B WUAET
16877 ; [.392E.0020.0002] # BAMUM LETTER PHASE-B SAKEUAE
16878 ; [.392F.0020.0002] # BAMUM LETTER PHASE-B TAAM
16879 ; [.3930.0020.0002] # BAMUM LETTER PHASE-B MEUQ
1687A ; [.3931.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ
1687B ; [.3932.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ LARGE
1687C ; [.3933.0020.0002] # BAMUM LETTER PHASE-B MFIYAQ
1687D ; [.3934.0020.0002] # BAMUM LETTER PHASE-B SUE
1687E ; [.3935.0020.0002] # BAMUM LETTER PHASE-B MBEURI
1687F ; [.3936.0020.0002] # BAMUM LETTER PHASE-B MONTIEEN
16880 ; [.3937.0020.0002] # BAMUM LETTER PHASE-B NYAEMAE
16881 ; [.3938.0020.0002] # BAMUM LETTER PHASE-B PUNGAAM
16882 ; [.3939.0020.0002] # BAMUM LETTER PHASE-B MEUT NGGEET
16883 ; [.393A.0020.0002] # BAMUM LETTER PHASE-B FEUX
16884 ; [.393B.0020.0002] # BAMUM LETTER PHASE-B MBUOQ
16885 ; [.393C.0020.0002] # BAMUM LETTER PHASE-B FEE
16886 ; [.393D.0020.0002] # BAMUM LETTER PHASE-B KEUAEM
16887 ; [.393E.0020.0002] # BAMUM LETTER PHASE-B MA NJEUAENA
16888 ; [.393F.0020.0002] # BAMUM LETTER PHASE-B MA NJUQA
16889 ; [.3940.0020.0002] # BAMUM LETTER PHASE-B LET
1688A ; [.3941.0020.0002] # BAMUM LETTER PHASE-B NGGAAM
1688B ; [.3942.0020.0002] # BAMUM LETTER PHASE-B NSEN
1688C ; [.3943.0020.0002] # BAMUM LETTER PHASE-B MA
1688D ; [.3944.0020.0002] # BAMUM LETTER PHASE-B KIQ
1688E ; [.3945.0020.0002] # BAMUM LETTER PHASE-B NGOM
1688F ; [.3946.0020.0002] # BAMUM LETTER PHASE-C NGKUE MAEMBA
16890 ; [.3947.0020.0002] # BAMUM LETTER PHASE-C NZA
16891 ; [.3948.0020.0002] # BAMUM LETTER PHASE-C YUM
16892 ; [.3949.0020.0002] # BAMUM LETTER PHASE-C WANGKUOQ
16893 ; [.394A.0020.0002] # BAMUM LETTER PHASE-C NGGEN
16894 ; [.394B.0020.0002] # BAMUM LETTER PHASE-C NDEUAEREE
16895 ; [.394C.0020.0002] # BAMUM LETTER PHASE-C NGKAQ
16896 ; [.394D.0020.0002] # BAMUM LETTER PHASE-C GHARAE
16897 ; [.394E.0020.0002] # BAMUM LETTER PHASE-C MBEEKEET
16898 ; [.394F.0020.0002] # BAMUM LETTER PHASE-C GBAYI
16899 ; [.3950.0020.0002] # BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN
1689A ; [.3951.0020.0002] # BAMUM LETTER PHASE-C NTU MBIT
1689B ; [.3952.0020.0002] # BAMUM LETTER PHASE-C MBEUM
1689C ; [.3953.0020.0002] # BAMUM LETTER PHASE-C PIRIEEN
1689D ; [.3954.0020.0002] # BAMUM LETTER PHASE-C NDOMBU
1689E ; [.3955.0020.0002] # BAMUM LETTER PHASE-C MBAA CABBAGE-TREE
1689F ; [.3956.0020.0002] # BAMUM LETTER PHASE-C KEUSHEUAEP
168A0 ; [.3957.0020.0002] # BAMUM LETTER PHASE-C GHAP
168A1 ; [.3958.0020.0002] # BAMUM LETTER PHASE-C KEUKAQ
168A2 ; [.3959.0020.0002] # BAMUM LETTER PHASE-C YU MUOMAE
168A3 ; [.395A.0020.0002] # BAMUM LETTER PHASE-C NZEUM
168A4 ; [.395B.0020.0002] # BAMUM LETTER PHASE-C MBUE
168A5 ; [.395C.0020.0002] # BAMUM LETTER PHASE-C NSEUAEN
168A6 ; [.395D.0020.0002] # BAMUM LETTER PHASE-C MBIT
168A7 ; [.395E.0020.0002] # BAMUM LETTER PHASE-C YEUQ
168A8 ; [.395F.0020.0002] # BAMUM LETTER PHASE-C KPARAQ
168A9 ; [.3960.0020.0002] # BAMUM LETTER PHASE-C KAA
168AA ; [.3961.0020.0002] # BAMUM LETTER PHASE-C SEUX
168AB ; [.3962.0020.0002] # BAMUM LETTER PHASE-C NDIDA
168AC ; [.3963.0020.0002] # BAMUM LETTER PHASE-C TAASHAE
168AD ; [.3964.0020.0002] # BAMUM LETTER PHASE-C NJUEQ
168AE ; [.3965.0020.0002] # BAMUM LETTER PHASE-C TITA YUE
168AF ; [.3966.0020.0002] # BAMUM LETTER PHASE-C SUAET
168B0 ; [.3967.0020.0002] # BAMUM LETTER PHASE-C NGGUAEN NYAM
168B1 ; [.3968.0020.0002] # BAMUM LETTER PHASE-C VEUX
168B2 ; [.3969.0020.0002] # BAMUM LETTER PHASE-C NANSANAQ
168B3 ; [.396A.0020.0002] # BAMUM LETTER PHASE-C MA KEUAERI
168B4 ; [.396B.0020.0002] # BAMUM LETTER PHASE-C NTAA
168B5 ; [.396C.0020.0002] # BAMUM LETTER PHASE-C NGGUON
168B6 ; [.396D.0020.0002] # BAMUM LETTER PHASE-C LAP
168B7 ; [.396E.0020.0002] # BAMUM LETTER PHASE-C MBIRIEEN
168B8 ; [.396F.0020.0002] # BAMUM LETTER PHASE-C MGBASAQ
168B9 ; [.3970.0020.0002] # BAMUM LETTER PHASE-C NTEUNGBA
168BA ; [.3971.0020.0002] # BAMUM LETTER PHASE-C TEUTEUX
168BB ; [.3972.0020.0002] # BAMUM LETTER PHASE-C NGGUM
168BC ; [.3973.0020.0002] # BAMUM LETTER PHASE-C FUE
168BD ; [.3974.0020.0002] # BAMUM LETTER PHASE-C NDEUT
168BE ; [.3975.0020.0002] # BAMUM LETTER PHASE-C NSA
168BF ; [.3976.0020.0002] # BAMUM LETTER PHASE-C NSHAQ
168C0 ; [.3977.0020.0002] # BAMUM LETTER PHASE-C BUNG
168C1 ; [.3978.0020.0002] # BAMUM LETTER PHASE-C VEUAEPEN
168C2 ; [.3979.0020.0002] # BAMUM LETTER PHASE-C MBERAE
168C3 ; [.397A.0020.0002] # BAMUM LETTER PHASE-C RU
168C4 ; [.397B.0020.0002] # BAMUM LETTER PHASE-C NJAEM
168C5 ; [.397C.0020.0002] # BAMUM LETTER PHASE-C LAM
168C6 ; [.397D.0020.0002] # BAMUM LETTER PHASE-C TITUAEP
168C7 ; [.397E.0020.0002] # BAMUM LETTER PHASE-C NSUOT NGOM
168C8 ; [.397F.0020.0002] # BAMUM LETTER PHASE-C NJEEEE
168C9 ; [.3980.0020.0002] # BAMUM LETTER PHASE-C KET
168CA ; [.3981.0020.0002] # BAMUM LETTER PHASE-C NGGU
168CB ; [.3982.0020.0002] # BAMUM LETTER PHASE-C MAESI
168CC ; [.3983.0020.0002] # BAMUM LETTER PHASE-C MBUAEM
168CD ; [.3984.0020.0002] # BAMUM LETTER PHASE-C LU
168CE ; [.3985.0020.0002] # BAMUM LETTER PHASE-C KUT
168CF ; [.3986.0020.0002] # BAMUM LETTER PHASE-C NJAM
168D0 ; [.3987.0020.0002] # BAMUM LETTER PHASE-C NGOM
168D1 ; [.3988.0020.0002] # BAMUM LETTER PHASE-C WUP
168D2 ; [.3989.0020.0002] # BAMUM LETTER PHASE-C NGGUEET
168D3 ; [.398A.0020.0002] # BAMUM LETTER PHASE-C NSOM
168D4 ; [.398B.0020.0002] # BAMUM LETTER PHASE-C NTEN
168D5 ; [.398C.0020.0002] # BAMUM LETTER PHASE-C KUOP NKAARAE
168D6 ; [.398D.0020.0002] # BAMUM LETTER PHASE-C NSUN
168D7 ; [.398E.0020.0002] # BAMUM LETTER PHASE-C NDAM
168D8 ; [.398F.0020.0002] # BAMUM LETTER PHASE-C MA NSIEE
168D9 ; [.3990.0020.0002] # BAMUM LETTER PHASE-C YAA
168DA ; [.3991.0020.0002] # BAMUM LETTER PHASE-C NDAP
168DB ; [.3992.0020.0002] # BAMUM LETTER PHASE-C SHUEQ
168DC ; [.3993.0020.0002] # BAMUM LETTER PHASE-C SETFON
168DD ; [.3994.0020.0002] # BAMUM LETTER PHASE-C MBI
168DE ; [.3995.0020.0002] # BAMUM LETTER PHASE-C MAEMBA
168DF ; [.3996.0020.0002] # BAMUM LETTER PHASE-C MBANYI
168E0 ; [.3997.0020.0002] # BAMUM LETTER PHASE-C KEUSEUX
168E1 ; [.3998.0020.0002] # BAMUM LETTER PHASE-C MBEUX
168E2 ; [.3999.0020.0002] # BAMUM LETTER PHASE-C KEUM
168E3 ; [.399A.0020.0002] # BAMUM LETTER PHASE-C MBAA PICKET
168E4 ; [.399B.0020.0002] # BAMUM LETTER PHASE-C YUWOQ
168E5 ; [.399C.0020.0002] # BAMUM LETTER PHASE-C NJEUX
168E6 ; [.399D.0020.0002] # BAMUM LETTER PHASE-C MIEE
168E7 ; [.399E.0020.0002] # BAMUM LETTER PHASE-C MUAE
168E8 ; [.399F.0020.0002] # BAMUM LETTER PHASE-C SHIQ
168E9 ; [.39A0.0020.0002] # BAMUM LETTER PHASE-C KEN LAW
168EA ; [.39A1.0020.0002] # BAMUM LETTER PHASE-C KEN FATIGUE
168EB ; [.39A2.0020.0002] # BAMUM LETTER PHASE-C NGAQ
168EC ; [.39A3.0020.0002] # BAMUM LETTER PHASE-C NAQ
168ED ; [.39A4.0020.0002] # BAMUM LETTER PHASE-C LIQ
168EE ; [.39A5.0020.0002] # BAMUM LETTER PHASE-C PIN
168EF ; [.39A6.0020.0002] # BAMUM LETTER PHASE-C PEN
168F0 ; [.39A7.0020.0002] # BAMUM LETTER PHASE-C TET
168F1 ; [.39A8.0020.0002] # BAMUM LETTER PHASE-D MBUO
168F2 ; [.39A9.0020.0002] # BAMUM LETTER PHASE-D WAP
168F3 ; [.39AA.0020.0002] # BAMUM LETTER PHASE-D NJI
168F4 ; [.39AB.0020.0002] # BAMUM LETTER PHASE-D MFON
168F5 ; [.39AC.0020.0002] # BAMUM LETTER PHASE-D NJIEE
168F6 ; [.39AD.0020.0002] # BAMUM LETTER PHASE-D LIEE
168F7 ; [.39AE.0020.0002] # BAMUM LETTER PHASE-D NJEUT
168F8 ; [.39AF.0020.0002] # BAMUM LETTER PHASE-D NSHEE
168F9 ; [.39B0.0020.0002] # BAMUM LETTER PHASE-D NGGAAMAE
168FA ; [.39B1.0020.0002] # BAMUM LETTER PHASE-D NYAM
168FB ; [.39B2.0020.0002] # BAMUM LETTER PHASE-D WUAEN
168FC ; [.39B3.0020.0002] # BAMUM LETTER PHASE-D NGKUN
168FD ; [.39B4.0020.0002] # BAMUM LETTER PHASE-D SHEE
168FE ; [.39B5.0020.0002] # BAMUM LETTER PHASE-D NGKAP
168FF ; [.39B6.0020.0002] # BAMUM LETTER PHASE-D KEUAETMEUN
16900 ; [.39B7.0020.0002] # BAMUM LETTER PHASE-D TEUT
16901 ; [.39B8.0020.0002] # BAMUM LETTER PHASE-D SHEUAE
16902 ; [.39B9.0020.0002] # BAMUM LETTER PHASE-D NJAP
16903 ; [.39BA.0020.0002] # BAMUM LETTER PHASE-D SUE
16904 ; [.39BB.0020.0002] # BAMUM LETTER PHASE-D KET
16905 ; [.39BC.0020.0002] # BAMUM LETTER PHASE-D YAEMMAE
16906 ; [.39BD.0020.0002] # BAMUM LETTER PHASE-D KUOM
16907 ; [.39BE.0020.0002] # BAMUM LETTER PHASE-D SAP
16908 ; [.39BF.0020.0002] # BAMUM LETTER PHASE-D MFEUT
16909 ; [.39C0.0020.0002] # BAMUM LETTER PHASE-D NDEUX
1690A ; [.39C1.0020.0002] # BAMUM LETTER PHASE-D MALEERI
1690B ; [.39C2.0020.0002] # BAMUM LETTER PHASE-D MEUT
1690C ; [.39C3.0020.0002] # BAMUM LETTER PHASE-D SEUAEQ
1690D ; [.39C4.0020.0002] # BAMUM LETTER PHASE-D YEN
1690E ; [.39C5.0020.0002] # BAMUM LETTER PHASE-D NJEUAEM
1690F ; [.39C6.0020.0002] # BAMUM LETTER PHASE-D KEUOT MBUAE
16910 ; [.39C7.0020.0002] # BAMUM LETTER PHASE-D NGKEURI
16911 ; [.39C8.0020.0002] # BAMUM LETTER PHASE-D TU
16912 ; [.39C9.0020.0002] # BAMUM LETTER PHASE-D GHAA
16913 ; [.39CA.0020.0002] # BAMUM LETTER PHASE-D NGKYEE
16914 ; [.39CB.0020.0002] # BAMUM LETTER PHASE-D FEUFEUAET
16915 ; [.39CC.0020.0002] # BAMUM LETTER PHASE-D NDEE
16916 ; [.39CD.0020.0002] # BAMUM LETTER PHASE-D MGBOFUM
16917 ; [.39CE.0020.0002] # BAMUM LETTER PHASE-D LEUAEP
16918 ; [.39CF.0020.0002] # BAMUM LETTER PHASE-D NDON
16919 ; [.39D0.0020.0002] # BAMUM LETTER PHASE-D MONI
1691A ; [.39D1.0020.0002] # BAMUM LETTER PHASE-D MGBEUN
1691B ; [.39D2.0020.0002] # BAMUM LETTER PHASE-D PUUT
1691C ; [.39D3.0020.0002] # BAMUM LETTER PHASE-D MGBIEE
1691D ; [.39D4.0020.0002] # BAMUM LETTER PHASE-D MFO
1691E ; [.39D5.0020.0002] # BAMUM LETTER PHASE-D LUM
1691F ; [.39D6.0020.0002] # BAMUM LETTER PHASE-D NSIEEP
16920 ; [.39D7.0020.0002] # BAMUM LETTER PHASE-D MBAA
16921 ; [.39D8.0020.0002] # BAMUM LETTER PHASE-D KWAET
16922 ; [.39D9.0020.0002] # BAMUM LETTER PHASE-D NYET
16923 ; [.39DA.0020.0002] # BAMUM LETTER PHASE-D TEUAEN
16924 ; [.39DB.0020.0002] # BAMUM LETTER PHASE-D SOT
16925 ; [.39DC.0020.0002] # BAMUM LETTER PHASE-D YUWOQ
16926 ; [.39DD.0020.0002] # BAMUM LETTER PHASE-D KEUM
16927 ; [.39DE.0020.0002] # BAMUM LETTER PHASE-D RAEM
16928 ; [.39DF.0020.0002] # BAMUM LETTER PHASE-D TEEEE
16929 ; [.39E0.0020.0002] # BAMUM LETTER PHASE-D NGKEUAEQ
1692A ; [.39E1.0020.0002] # BAMUM LETTER PHASE-D MFEUAE
1692B ; [.39E2.0020.0002] # BAMUM LETTER PHASE-D NSIEET
1692C ; [.39E3.0020.0002] # BAMUM LETTER PHASE-D KEUP
1692D ; [.39E4.0020.0002] # BAMUM LETTER PHASE-D PIP
1692E ; [.39E5.0020.0002] # BAMUM LETTER PHASE-D PEUTAE
1692F ; [.39E6.0020.0002] # BAMUM LETTER PHASE-D NYUE
16930 ; [.39E7.0020.0002] # BAMUM LETTER PHASE-D LET
16931 ; [.39E8.0020.0002] # BAMUM LETTER PHASE-D NGGAAM
16932 ; [.39E9.0020.0002] # BAMUM LETTER PHASE-D MFIEE
16933 ; [.39EA.0020.0002] # BAMUM LETTER PHASE-D NGGWAEN
16934 ; [.39EB.0020.0002] # BAMUM LETTER PHASE-D YUOM
16935 ; [.39EC.0020.0002] # BAMUM LETTER PHASE-D PAP
16936 ; [.39ED.0020.0002] # BAMUM LETTER PHASE-D YUOP
16937 ; [.39EE.0020.0002] # BAMUM LETTER PHASE-D NDAM
16938 ; [.39EF.0020.0002] # BAMUM LETTER PHASE-D NTEUM
16939 ; [.39F0.0020.0002] # BAMUM LETTER PHASE-D SUAE
1693A ; [.39F1.0020.0002] # BAMUM LETTER PHASE-D KUN
1693B ; [.39F2.0020.0002] # BAMUM LETTER PHASE-D NGGEUX
1693C ; [.39F3.0020.0002] # BAMUM LETTER PHASE-D NGKIEE
1693D ; [.39F4.0020.0002] # BAMUM LETTER PHASE-D TUOT
1693E ; [.39F5.0020.0002] # BAMUM LETTER PHASE-D MEUN
1693F ; [.39F6.0020.0002] # BAMUM LETTER PHASE-D KUQ
16940 ; [.39F7.0020.0002] # BAMUM LETTER PHASE-D NSUM
16941 ; [.39F8.0020.0002] # BAMUM LETTER PHASE-D TEUN
16942 ; [.39F9.0020.0002] # BAMUM LETTER PHASE-D MAENJET
16943 ; [.39FA.0020.0002] # BAMUM LETTER PHASE-D NGGAP
16944 ; [.39FB.0020.0002] # BAMUM LETTER PHASE-D LEUM
16945 ; [.39FC.0020.0002] # BAMUM LETTER PHASE-D NGGUOM
16946 ; [.39FD.0020.0002] # BAMUM LETTER PHASE-D NSHUT
16947 ; [.39FE.0020.0002] # BAMUM LETTER PHASE-D NJUEQ
16948 ; [.39FF.0020.0002] # BAMUM LETTER PHASE-D GHEUAE
16949 ; [.3A00.0020.0002] # BAMUM LETTER PHASE-D KU
1694A ; [.3A01.0020.0002] # BAMUM LETTER PHASE-D REN OLD
1694B ; [.3A02.0020.0002] # BAMUM LETTER PHASE-D TAE
1694C ; [.3A03.0020.0002] # BAMUM LETTER PHASE-D TOQ
1694D ; [.3A04.0020.0002] # BAMUM LETTER PHASE-D NYI
1694E ; [.3A05.0020.0002] # BAMUM LETTER PHASE-D RII
1694F ; [.3A06.0020.0002] # BAMUM LETTER PHASE-D LEEEE
16950 ; [.3A07.0020.0002] # BAMUM LETTER PHASE-D MEEEE
16951 ; [.3A08.0020.0002] # BAMUM LETTER PHASE-D M
16952 ; [.3A09.0020.0002] # BAMUM LETTER PHASE-D SUU
16953 ; [.3A0A.0020.0002] # BAMUM LETTER PHASE-D MU
16954 ; [.3A0B.0020.0002] # BAMUM LETTER PHASE-D SHII
16955 ; [.3A0C.0020.0002] # BAMUM LETTER PHASE-D SHEUX
16956 ; [.3A0D.0020.0002] # BAMUM LETTER PHASE-D KYEE
16957 ; [.3A0E.0020.0002] # BAMUM LETTER PHASE-D NU
16958 ; [.3A0F.0020.0002] # BAMUM LETTER PHASE-D SHU
16959 ; [.3A10.0020.0002] # BAMUM LETTER PHASE-D NTEE
1695A ; [.3A11.0020.0002] # BAMUM LETTER PHASE-D PEE
1695B ; [.3A12.0020.0002] # BAMUM LETTER PHASE-D NI
1695C ; [.3A13.0020.0002] # BAMUM LETTER PHASE-D SHOQ
1695D ; [.3A14.0020.0002] # BAMUM LETTER PHASE-D PUQ
1695E ; [.3A15.0020.0002] # BAMUM LETTER PHASE-D MVOP
1695F ; [.3A16.0020.0002] # BAMUM LETTER PHASE-D LOQ
16960 ; [.3A17.0020.0002] # BAMUM LETTER PHASE-D REN MUCH
16961 ; [.3A18.0020.0002] # BAMUM LETTER PHASE-D TI
16962 ; [.3A19.0020.0002] # BAMUM LETTER PHASE-D NTUU
16963 ; [.3A1A.0020.0002] # BAMUM LETTER PHASE-D MBAA SEVEN
16964 ; [.3A1B.0020.0002] # BAMUM LETTER PHASE-D SAQ
16965 ; [.3A1C.0020.0002] # BAMUM LETTER PHASE-D FAA
16966 ; [.3A1D.0020.0002] # BAMUM LETTER PHASE-E NDAP
16967 ; [.3A1E.0020.0002] # BAMUM LETTER PHASE-E TOON
16968 ; [.3A1F.0020.0002] # BAMUM LETTER PHASE-E MBEUM
16969 ; [.3A20.0020.0002] # BAMUM LETTER PHASE-E LAP
1696A ; [.3A21.0020.0002] # BAMUM LETTER PHASE-E VOM
1696B ; [.3A22.0020.0002] # BAMUM LETTER PHASE-E LOON
1696C ; [.3A23.0020.0002] # BAMUM LETTER PHASE-E PAA
1696D ; [.3A24.0020.0002] # BAMUM LETTER PHASE-E SOM
1696E ; [.3A25.0020.0002] # BAMUM LETTER PHASE-E RAQ
1696F ; [.3A26.0020.0002] # BAMUM LETTER PHASE-E NSHUOP
16970 ; [.3A27.0020.0002] # BAMUM LETTER PHASE-E NDUN
16971 ; [.3A28.0020.0002] # BAMUM LETTER PHASE-E PUAE
16972 ; [.3A29.0020.0002] # BAMUM LETTER PHASE-E TAM
16973 ; [.3A2A.0020.0002] # BAMUM LETTER PHASE-E NGKA
16974 ; [.3A2B.0020.0002] # BAMUM LETTER PHASE-E KPEUX
16975 ; [.3A2C.0020.0002] # BAMUM LETTER PHASE-E WUO
16976 ; [.3A2D.0020.0002] # BAMUM LETTER PHASE-E SEE
16977 ; [.3A2E.0020.0002] # BAMUM LETTER PHASE-E NGGEUAET
16978 ; [.3A2F.0020.0002] # BAMUM LETTER PHASE-E PAAM
16979 ; [.3A30.0020.0002] # BAMUM LETTER PHASE-E TOO
1697A ; [.3A31.0020.0002] # BAMUM LETTER PHASE-E KUOP
1697B ; [.3A32.0020.0002] # BAMUM LETTER PHASE-E LOM
1697C ; [.3A33.0020.0002] # BAMUM LETTER PHASE-E NSHIEE
1697D ; [.3A34.0020.0002] # BAMUM LETTER PHASE-E NGOP
1697E ; [.3A35.0020.0002] # BAMUM LETTER PHASE-E MAEM
1697F ; [.3A36.0020.0002] # BAMUM LETTER PHASE-E NGKEUX
16980 ; [.3A37.0020.0002] # BAMUM LETTER PHASE-E NGOQ
16981 ; [.3A38.0020.0002] # BAMUM LETTER PHASE-E NSHUE
16982 ; [.3A39.0020.0002] # BAMUM LETTER PHASE-E RIMGBA
16983 ; [.3A3A.0020.0002] # BAMUM LETTER PHASE-E NJEUX
16984 ; [.3A3B.0020.0002] # BAMUM LETTER PHASE-E PEEM
16985 ; [.3A3C.0020.0002] # BAMUM LETTER PHASE-E SAA
16986 ; [.3A3D.0020.0002] # BAMUM LETTER PHASE-E NGGURAE
16987 ; [.3A3E.0020.0002] # BAMUM LETTER PHASE-E MGBA
16988 ; [.3A3F.0020.0002] # BAMUM LETTER PHASE-E GHEUX
16989 ; [.3A40.0020.0002] # BAMUM LETTER PHASE-E NGKEUAEM
1698A ; [.3A41.0020.0002] # BAMUM LETTER PHASE-E NJAEMLI
1698B ; [.3A42.0020.0002] # BAMUM LETTER PHASE-E MAP
1698C ; [.3A43.0020.0002] # BAMUM LETTER PHASE-E LOOT
1698D ; [.3A44.0020.0002] # BAMUM LETTER PHASE-E NGGEEEE
1698E ; [.3A45.0020.0002] # BAMUM LETTER PHASE-E NDIQ
1698F ; [.3A46.0020.0002] # BAMUM LETTER PHASE-E TAEN NTEUM
16990 ; [.3A47.0020.0002] # BAMUM LETTER PHASE-E SET
16991 ; [.3A48.0020.0002] # BAMUM LETTER PHASE-E PUM
16992 ; [.3A49.0020.0002] # BAMUM LETTER PHASE-E NDAA SOFTNESS
16993 ; [.3A4A.0020.0002] # BAMUM LETTER PHASE-E NGGUAESHAE NYAM
16994 ; [.3A4B.0020.0002] # BAMUM LETTER PHASE-E YIEE
16995 ; [.3A4C.0020.0002] # BAMUM LETTER PHASE-E GHEUN
16996 ; [.3A4D.0020.0002] # BAMUM LETTER PHASE-E TUAE
16997 ; [.3A4E.0020.0002] # BAMUM LETTER PHASE-E YEUAE
16998 ; [.3A4F.0020.0002] # BAMUM LETTER PHASE-E PO
16999 ; [.3A50.0020.0002] # BAMUM LETTER PHASE-E TUMAE
1699A ; [.3A51.0020.0002] # BAMUM LETTER PHASE-E KEUAE
1699B ; [.3A52.0020.0002] # BAMUM LETTER PHASE-E SUAEN
1699C ; [.3A53.0020.0002] # BAMUM LETTER PHASE-E TEUAEQ
1699D ; [.3A54.0020.0002] # BAMUM LETTER PHASE-E VEUAE
1699E ; [.3A55.0020.0002] # BAMUM LETTER PHASE-E WEUX
1699F ; [.3A56.0020.0002] # BAMUM LETTER PHASE-E LAAM
169A0 ; [.3A57.0020.0002] # BAMUM LETTER PHASE-E PU
169A1 ; [.3A58.0020.0002] # BAMUM LETTER PHASE-E TAAQ
169A2 ; [.3A59.0020.0002] # BAMUM LETTER PHASE-E GHAAMAE
169A3 ; [.3A5A.0020.0002] # BAMUM LETTER PHASE-E NGEUREUT
169A4 ; [.3A5B.0020.0002] # BAMUM LETTER PHASE-E SHEUAEQ
169A5 ; [.3A5C.0020.0002] # BAMUM LETTER PHASE-E MGBEN
169A6 ; [.3A5D.0020.0002] # BAMUM LETTER PHASE-E MBEE
169A7 ; [.3A5E.0020.0002] # BAMUM LETTER PHASE-E NZAQ
169A8 ; [.3A5F.0020.0002] # BAMUM LETTER PHASE-E NKOM
169A9 ; [.3A60.0020.0002] # BAMUM LETTER PHASE-E GBET
169AA ; [.3A61.0020.0002] # BAMUM LETTER PHASE-E TUM
169AB ; [.3A62.0020.0002] # BAMUM LETTER PHASE-E KUET
169AC ; [.3A63.0020.0002] # BAMUM LETTER PHASE-E YAP
169AD ; [.3A64.0020.0002] # BAMUM LETTER PHASE-E NYI CLEAVER
169AE ; [.3A65.0020.0002] # BAMUM LETTER PHASE-E YIT
169AF ; [.3A66.0020.0002] # BAMUM LETTER PHASE-E MFEUQ
169B0 ; [.3A67.0020.0002] # BAMUM LETTER PHASE-E NDIAQ
169B1 ; [.3A68.0020.0002] # BAMUM LETTER PHASE-E PIEEQ
169B2 ; [.3A69.0020.0002] # BAMUM LETTER PHASE-E YUEQ
169B3 ; [.3A6A.0020.0002] # BAMUM LETTER PHASE-E LEUAEM
169B4 ; [.3A6B.0020.0002] # BAMUM LETTER PHASE-E FUE
169B5 ; [.3A6C.0020.0002] # BAMUM LETTER PHASE-E GBEUX
169B6 ; [.3A6D.0020.0002] # BAMUM LETTER PHASE-E NGKUP
169B7 ; [.3A6E.0020.0002] # BAMUM LETTER PHASE-E KET
169B8 ; [.3A6F.0020.0002] # BAMUM LETTER PHASE-E MAE
169B9 ; [.3A70.0020.0002] # BAMUM LETTER PHASE-E NGKAAMI
169BA ; [.3A71.0020.0002] # BAMUM LETTER PHASE-E GHET
169BB ; [.3A72.0020.0002] # BAMUM LETTER PHASE-E FA
169BC ; [.3A73.0020.0002] # BAMUM LETTER PHASE-E NTUM
169BD ; [.3A74.0020.0002] # BAMUM LETTER PHASE-E PEUT
169BE ; [.3A75.0020.0002] # BAMUM LETTER PHASE-E YEUM
169BF ; [.3A76.0020.0002] # BAMUM LETTER PHASE-E NGGEUAE
169C0 ; [.3A77.0020.0002] # BAMUM LETTER PHASE-E NYI BETWEEN
169C1 ; [.3A78.0020.0002] # BAMUM LETTER PHASE-E NZUQ
169C2 ; [.3A79.0020.0002] # BAMUM LETTER PHASE-E POON
169C3 ; [.3A7A.0020.0002] # BAMUM LETTER PHASE-E MIEE
169C4 ; [.3A7B.0020.0002] # BAMUM LETTER PHASE-E FUET
169C5 ; [.3A7C.0020.0002] # BAMUM LETTER PHASE-E NAE
169C6 ; [.3A7D.0020.0002] # BAMUM LETTER PHASE-E MUAE
169C7 ; [.3A7E.0020.0002] # BAMUM LETTER PHASE-E GHEUAE
169C8 ; [.3A7F.0020.0002] # BAMUM LETTER PHASE-E FU I
169C9 ; [.3A80.0020.0002] # BAMUM LETTER PHASE-E MVI
169CA ; [.3A81.0020.0002] # BAMUM LETTER PHASE-E PUAQ
169CB ; [.3A82.0020.0002] # BAMUM LETTER PHASE-E NGKUM
169CC ; [.3A83.0020.0002] # BAMUM LETTER PHASE-E KUT
169CD ; [.3A84.0020.0002] # BAMUM LETTER PHASE-E PIET
169CE ; [.3A85.0020.0002] # BAMUM LETTER PHASE-E NTAP
169CF ; [.3A86.0020.0002] # BAMUM LETTER PHASE-E YEUAET
169D0 ; [.3A87.0020.0002] # BAMUM LETTER PHASE-E NGGUP
169D1 ; [.3A88.0020.0002] # BAMUM LETTER PHASE-E PA PEOPLE
169D2 ; [.3A89.0020.0002] # BAMUM LETTER PHASE-E FU CALL
169D3 ; [.3A8A.0020.0002] # BAMUM LETTER PHASE-E FOM
169D4 ; [.3A8B.0020.0002] # BAMUM LETTER PHASE-E NJEE
169D5 ; [.3A8C.0020.0002] # BAMUM LETTER PHASE-E A
169D6 ; [.3A8D.0020.0002] # BAMUM LETTER PHASE-E TOQ
169D7 ; [.3A8E.0020.0002] # BAMUM LETTER PHASE-E O
169D8 ; [.3A8F.0020.0002] # BAMUM LETTER PHASE-E I
169D9 ; [.3A90.0020.0002] # BAMUM LETTER PHASE-E LAQ
169DA ; [.3A91.0020.0002] # BAMUM LETTER PHASE-E PA PLURAL
169DB ; [.3A92.0020.0002] # BAMUM LETTER PHASE-E TAA
169DC ; [.3A93.0020.0002] # BAMUM LETTER PHASE-E TAQ
169DD ; [.3A94.0020.0002] # BAMUM LETTER PHASE-E NDAA MY HOUSE
169DE ; [.3A95.0020.0002] # BAMUM LETTER PHASE-E SHIQ
169DF ; [.3A96.0020.0002] # BAMUM LETTER PHASE-E YEUX
169E0 ; [.3A97.0020.0002] # BAMUM LETTER PHASE-E NGUAE
169E1 ; [.3A98.0020.0002] # BAMUM LETTER PHASE-E YUAEN
169E2 ; [.3A99.0020.0002] # BAMUM LETTER PHASE-E YOQ SWIMMING
169E3 ; [.3A9A.0020.0002] # BAMUM LETTER PHASE-E YOQ COVER
169E4 ; [.3A9B.0020.0002] # BAMUM LETTER PHASE-E YUQ
169E5 ; [.3A9C.0020.0002] # BAMUM LETTER PHASE-E YUN
169E6 ; [.3A9D.0020.0002] # BAMUM LETTER PHASE-E KEUX
169E7 ; [.3A9E.0020.0002] # BAMUM LETTER PHASE-E PEUX
169E8 ; [.3A9F.0020.0002] # BAMUM LETTER PHASE-E NJEE EPOCH
169E9 ; [.3AA0.0020.0002] # BAMUM LETTER PHASE-E PUE
169EA ; [.3AA1.0020.0002] # BAMUM LETTER PHASE-E WUE
169EB ; [.3AA2.0020.0002] # BAMUM LETTER PHASE-E FEE
169EC ; [.3AA3.0020.0002] # BAMUM LETTER PHASE-E VEE
169ED ; [.3AA4.0020.0002] # BAMUM LETTER PHASE-E LU
169EE ; [.3AA5.0020.0002] # BAMUM LETTER PHASE-E MI
169EF ; [.3AA6.0020.0002] # BAMUM LETTER PHASE-E REUX
169F0 ; [.3AA7.0020.0002] # BAMUM LETTER PHASE-E RAE
169F1 ; [.3AA8.0020.0002] # BAMUM LETTER PHASE-E NGUAET
169F2 ; [.3AA9.0020.0002] # BAMUM LETTER PHASE-E NGA
169F3 ; [.3AAA.0020.0002] # BAMUM LETTER PHASE-E SHO
169F4 ; [.3AAB.0020.0002] # BAMUM LETTER PHASE-E SHOQ
169F5 ; [.3AAC.0020.0002] # BAMUM LETTER PHASE-E FU REMEDY
169F6 ; [.3AAD.0020.0002] # BAMUM LETTER PHASE-E NA
169F7 ; [.3AAE.0020.0002] # BAMUM LETTER PHASE-E PI
169F8 ; [.3AAF.0020.0002] # BAMUM LETTER PHASE-E LOQ
169F9 ; [.3AB0.0020.0002] # BAMUM LETTER PHASE-E KO
169FA ; [.3AB1.0020.0002] # BAMUM LETTER PHASE-E MEN
169FB ; [.3AB2.0020.0002] # BAMUM LETTER PHASE-E MA
169FC ; [.3AB3.0020.0002] # BAMUM LETTER PHASE-E MAQ
169FD ; [.3AB4.0020.0002] # BAMUM LETTER PHASE-E TEU
169FE ; [.3AB5.0020.0002] # BAMUM LETTER PHASE-E KI
169FF ; [.3AB6.0020.0002] # BAMUM LETTER PHASE-E MON
16A00 ; [.3AB7.0020.0002] # BAMUM LETTER PHASE-E TEN
16A01 ; [.3AB8.0020.0002] # BAMUM LETTER PHASE-E FAQ
16A02 ; [.3AB9.0020.0002] # BAMUM LETTER PHASE-E GHOM
16A03 ; [.3ABA.0020.0002] # BAMUM LETTER PHASE-F KA
16A04 ; [.3ABB.0020.0002] # BAMUM LETTER PHASE-F U
16A05 ; [.3ABC.0020.0002] # BAMUM LETTER PHASE-F KU
16A06 ; [.3ABD.0020.0002] # BAMUM LETTER PHASE-F EE
16A07 ; [.3ABE.0020.0002] # BAMUM LETTER PHASE-F REE
16A08 ; [.3ABF.0020.0002] # BAMUM LETTER PHASE-F TAE
16A09 ; [.3AC0.0020.0002] # BAMUM LETTER PHASE-F NYI
16A0A ; [.3AC1.0020.0002] # BAMUM LETTER PHASE-F LA
16A0B ; [.3AC2.0020.0002] # BAMUM LETTER PHASE-F RII
16A0C ; [.3AC3.0020.0002] # BAMUM LETTER PHASE-F RIEE
16A0D ; [.3AC4.0020.0002] # BAMUM LETTER PHASE-F MEEEE
16A0E ; [.3AC5.0020.0002] # BAMUM LETTER PHASE-F TAA
16A0F ; [.3AC6.0020.0002] # BAMUM LETTER PHASE-F NDAA
16A10 ; [.3AC7.0020.0002] # BAMUM LETTER PHASE-F NJAEM
16A11 ; [.3AC8.0020.0002] # BAMUM LETTER PHASE-F M
16A12 ; [.3AC9.0020.0002] # BAMUM LETTER PHASE-F SUU
16A13 ; [.3ACA.0020.0002] # BAMUM LETTER PHASE-F SHII
16A14 ; [.3ACB.0020.0002] # BAMUM LETTER PHASE-F SI
16A15 ; [.3ACC.0020.0002] # BAMUM LETTER PHASE-F SEUX
16A16 ; [.3ACD.0020.0002] # BAMUM LETTER PHASE-F KYEE
16A17 ; [.3ACE.0020.0002] # BAMUM LETTER PHASE-F KET
16A18 ; [.3ACF.0020.0002] # BAMUM LETTER PHASE-F NUAE
16A19 ; [.3AD0.0020.0002] # BAMUM LETTER PHASE-F NU
16A1A ; [.3AD1.0020.0002] # BAMUM LETTER PHASE-F NJUAE
16A1B ; [.3AD2.0020.0002] # BAMUM LETTER PHASE-F YOQ
16A1C ; [.3AD3.0020.0002] # BAMUM LETTER PHASE-F SHU
16A1D ; [.3AD4.0020.0002] # BAMUM LETTER PHASE-F YA
16A1E ; [.3AD5.0020.0002] # BAMUM LETTER PHASE-F NSHA
16A1F ; [.3AD6.0020.0002] # BAMUM LETTER PHASE-F PEUX
16A20 ; [.3AD7.0020.0002] # BAMUM LETTER PHASE-F NTEE
16A21 ; [.3AD8.0020.0002] # BAMUM LETTER PHASE-F WUE
16A22 ; [.3AD9.0020.0002] # BAMUM LETTER PHASE-F PEE
16A23 ; [.3ADA.0020.0002] # BAMUM LETTER PHASE-F RU
16A24 ; [.3ADB.0020.0002] # BAMUM LETTER PHASE-F NI
16A25 ; [.3ADC.0020.0002] # BAMUM LETTER PHASE-F REUX
16A26 ; [.3ADD.0020.0002] # BAMUM LETTER PHASE-F KEN
16A27 ; [.3ADE.0020.0002] # BAMUM LETTER PHASE-F NGKWAEN
16A28 ; [.3ADF.0020.0002] # BAMUM LETTER PHASE-F NGGA
16A29 ; [.3AE0.0020.0002] # BAMUM LETTER PHASE-F SHO
16A2A ; [.3AE1.0020.0002] # BAMUM LETTER PHASE-F PUAE
16A2B ; [.3AE2.0020.0002] # BAMUM LETTER PHASE-F FOM
16A2C ; [.3AE3.0020.0002] # BAMUM LETTER PHASE-F WA
16A2D ; [.3AE4.0020.0002] # BAMUM LETTER PHASE-F LI
16A2E ; [.3AE5.0020.0002] # BAMUM LETTER PHASE-F LOQ
16A2F ; [.3AE6.0020.0002] # BAMUM LETTER PHASE-F KO
16A30 ; [.3AE7.0020.0002] # BAMUM LETTER PHASE-F MBEN
16A31 ; [.3AE8.0020.0002] # BAMUM LETTER PHASE-F REN
16A32 ; [.3AE9.0020.0002] # BAMUM LETTER PHASE-F MA
16A33 ; [.3AEA.0020.0002] # BAMUM LETTER PHASE-F MO
16A34 ; [.3AEB.0020.0002] # BAMUM LETTER PHASE-F MBAA
16A35 ; [.3AEC.0020.0002] # BAMUM LETTER PHASE-F TET
16A36 ; [.3AED.0020.0002] # BAMUM LETTER PHASE-F KPA
16A37 ; [.3AEE.0020.0002] # BAMUM LETTER PHASE-F SAMBA
16A38 ; [.3AEF.0020.0002] # BAMUM LETTER PHASE-F VUEQ
16AD0 ; [.3AF0.0020.0002] # BASSA VAH LETTER ENNI
16AD1 ; [.3AF1.0020.0002] # BASSA VAH LETTER KA
16AD2 ; [.3AF2.0020.0002] # BASSA VAH LETTER SE
16AD3 ; [.3AF3.0020.0002] # BASSA VAH LETTER FA
16AD4 ; [.3AF4.0020.0002] # BASSA VAH LETTER MBE
16AD5 ; [.3AF5.0020.0002] # BASSA VAH LETTER YIE
16AD6 ; [.3AF6.0020.0002] # BASSA VAH LETTER GAH
16AD7 ; [.3AF7.0020.0002] # BASSA VAH LETTER DHII
16AD8 ; [.3AF8.0020.0002] # BASSA VAH LETTER KPAH
16AD9 ; [.3AF9.0020.0002] # BASSA VAH LETTER JO
16ADA ; [.3AFA.0020.0002] # BASSA VAH LETTER HWAH
16ADB ; [.3AFB.0020.0002] # BASSA VAH LETTER WA
16ADC ; [.3AFC.0020.0002] # BASSA VAH LETTER ZO
16ADD ; [.3AFD.0020.0002] # BASSA VAH LETTER GBU
16ADE ; [.3AFE.0020.0002] # BASSA VAH LETTER DO
16ADF ; [.3AFF.0020.0002] # BASSA VAH LETTER CE
16AE0 ; [.3B00.0020.0002] # BASSA VAH LETTER UWU
16AE1 ; [.3B01.0020.0002] # BASSA VAH LETTER TO
16AE2 ; [.3B02.0020.0002] # BASSA VAH LETTER BA
16AE3 ; [.3B03.0020.0002] # BASSA VAH LETTER VU
16AE4 ; [.3B04.0020.0002] # BASSA VAH LETTER YEIN
16AE5 ; [.3B05.0020.0002] # BASSA VAH LETTER PA
16AE6 ; [.3B06.0020.0002] # BASSA VAH LETTER WADDA
16AE7 ; [.3B07.0020.0002] # BASSA VAH LETTER A
16AE8 ; [.3B08.0020.0002] # BASSA VAH LETTER O
16AE9 ; [.3B09.0020.0002] # BASSA VAH LETTER OO
16AEA ; [.3B0A.0020.0002] # BASSA VAH LETTER U
16AEB ; [.3B0B.0020.0002] # BASSA VAH LETTER EE
16AEC ; [.3B0C.0020.0002] # BASSA VAH LETTER E
16AED ; [.3B0D.0020.0002] # BASSA VAH LETTER I
1E800 ; [.3B0E.0020.0002] # MENDE KIKAKUI SYLLABLE M001 KI
1E801 ; [.3B0F.0020.0002] # MENDE KIKAKUI SYLLABLE M002 KA
1E802 ; [.3B10.0020.0002] # MENDE KIKAKUI SYLLABLE M003 KU
1E803 ; [.3B11.0020.0002] # MENDE KIKAKUI SYLLABLE M065 KEE
1E804 ; [.3B12.0020.0002] # MENDE KIKAKUI SYLLABLE M095 KE
1E805 ; [.3B13.0020.0002] # MENDE KIKAKUI SYLLABLE M076 KOO
1E806 ; [.3B14.0020.0002] # MENDE KIKAKUI SYLLABLE M048 KO
1E807 ; [.3B15.0020.0002] # MENDE KIKAKUI SYLLABLE M179 KUA
1E808 ; [.3B16.0020.0002] # MENDE KIKAKUI SYLLABLE M004 WI
1E809 ; [.3B17.0020.0002] # MENDE KIKAKUI SYLLABLE M005 WA
1E80A ; [.3B18.0020.0002] # MENDE KIKAKUI SYLLABLE M006 WU
1E80B ; [.3B19.0020.0002] # MENDE KIKAKUI SYLLABLE M126 WEE
1E80C ; [.3B1A.0020.0002] # MENDE KIKAKUI SYLLABLE M118 WE
1E80D ; [.3B1B.0020.0002] # MENDE KIKAKUI SYLLABLE M114 WOO
1E80E ; [.3B1C.0020.0002] # MENDE KIKAKUI SYLLABLE M045 WO
1E80F ; [.3B1D.0020.0002] # MENDE KIKAKUI SYLLABLE M194 WUI
1E810 ; [.3B1E.0020.0002] # MENDE KIKAKUI SYLLABLE M143 WEI
1E811 ; [.3B1F.0020.0002] # MENDE KIKAKUI SYLLABLE M061 WVI
1E812 ; [.3B20.0020.0002] # MENDE KIKAKUI SYLLABLE M049 WVA
1E813 ; [.3B21.0020.0002] # MENDE KIKAKUI SYLLABLE M139 WVE
1E814 ; [.3B22.0020.0002] # MENDE KIKAKUI SYLLABLE M007 MIN
1E815 ; [.3B23.0020.0002] # MENDE KIKAKUI SYLLABLE M008 MAN
1E816 ; [.3B24.0020.0002] # MENDE KIKAKUI SYLLABLE M009 MUN
1E817 ; [.3B25.0020.0002] # MENDE KIKAKUI SYLLABLE M059 MEN
1E818 ; [.3B26.0020.0002] # MENDE KIKAKUI SYLLABLE M094 MON
1E819 ; [.3B27.0020.0002] # MENDE KIKAKUI SYLLABLE M154 MUAN
1E81A ; [.3B28.0020.0002] # MENDE KIKAKUI SYLLABLE M189 MUEN
1E81B ; [.3B29.0020.0002] # MENDE KIKAKUI SYLLABLE M010 BI
1E81C ; [.3B2A.0020.0002] # MENDE KIKAKUI SYLLABLE M011 BA
1E81D ; [.3B2B.0020.0002] # MENDE KIKAKUI SYLLABLE M012 BU
1E81E ; [.3B2C.0020.0002] # MENDE KIKAKUI SYLLABLE M150 BEE
1E81F ; [.3B2D.0020.0002] # MENDE KIKAKUI SYLLABLE M097 BE
1E820 ; [.3B2E.0020.0002] # MENDE KIKAKUI SYLLABLE M103 BOO
1E821 ; [.3B2F.0020.0002] # MENDE KIKAKUI SYLLABLE M138 BO
1E822 ; [.3B30.0020.0002] # MENDE KIKAKUI SYLLABLE M013 I
1E823 ; [.3B31.0020.0002] # MENDE KIKAKUI SYLLABLE M014 A
1E824 ; [.3B32.0020.0002] # MENDE KIKAKUI SYLLABLE M015 U
1E825 ; [.3B33.0020.0002] # MENDE KIKAKUI SYLLABLE M163 EE
1E826 ; [.3B34.0020.0002] # MENDE KIKAKUI SYLLABLE M100 E
1E827 ; [.3B35.0020.0002] # MENDE KIKAKUI SYLLABLE M165 OO
1E828 ; [.3B36.0020.0002] # MENDE KIKAKUI SYLLABLE M147 O
1E829 ; [.3B37.0020.0002] # MENDE KIKAKUI SYLLABLE M137 EI
1E82A ; [.3B38.0020.0002] # MENDE KIKAKUI SYLLABLE M131 IN
1E82B ; [.3B39.0020.0002] # MENDE KIKAKUI SYLLABLE M135 IN
1E82C ; [.3B3A.0020.0002] # MENDE KIKAKUI SYLLABLE M195 AN
1E82D ; [.3B3B.0020.0002] # MENDE KIKAKUI SYLLABLE M178 EN
1E82E ; [.3B3C.0020.0002] # MENDE KIKAKUI SYLLABLE M019 SI
1E82F ; [.3B3D.0020.0002] # MENDE KIKAKUI SYLLABLE M020 SA
1E830 ; [.3B3E.0020.0002] # MENDE KIKAKUI SYLLABLE M021 SU
1E831 ; [.3B3F.0020.0002] # MENDE KIKAKUI SYLLABLE M162 SEE
1E832 ; [.3B40.0020.0002] # MENDE KIKAKUI SYLLABLE M116 SE
1E833 ; [.3B41.0020.0002] # MENDE KIKAKUI SYLLABLE M136 SOO
1E834 ; [.3B42.0020.0002] # MENDE KIKAKUI SYLLABLE M079 SO
1E835 ; [.3B43.0020.0002] # MENDE KIKAKUI SYLLABLE M196 SIA
1E836 ; [.3B44.0020.0002] # MENDE KIKAKUI SYLLABLE M025 LI
1E837 ; [.3B45.0020.0002] # MENDE KIKAKUI SYLLABLE M026 LA
1E838 ; [.3B46.0020.0002] # MENDE KIKAKUI SYLLABLE M027 LU
1E839 ; [.3B47.0020.0002] # MENDE KIKAKUI SYLLABLE M084 LEE
1E83A ; [.3B48.0020.0002] # MENDE KIKAKUI SYLLABLE M073 LE
1E83B ; [.3B49.0020.0002] # MENDE KIKAKUI SYLLABLE M054 LOO
1E83C ; [.3B4A.0020.0002] # MENDE KIKAKUI SYLLABLE M153 LO
1E83D ; [.3B4B.0020.0002] # MENDE KIKAKUI SYLLABLE M110 LONG LE
1E83E ; [.3B4C.0020.0002] # MENDE KIKAKUI SYLLABLE M016 DI
1E83F ; [.3B4D.0020.0002] # MENDE KIKAKUI SYLLABLE M017 DA
1E840 ; [.3B4E.0020.0002] # MENDE KIKAKUI SYLLABLE M018 DU
1E841 ; [.3B4F.0020.0002] # MENDE KIKAKUI SYLLABLE M089 DEE
1E842 ; [.3B50.0020.0002] # MENDE KIKAKUI SYLLABLE M180 DOO
1E843 ; [.3B51.0020.0002] # MENDE KIKAKUI SYLLABLE M181 DO
1E844 ; [.3B52.0020.0002] # MENDE KIKAKUI SYLLABLE M022 TI
1E845 ; [.3B53.0020.0002] # MENDE KIKAKUI SYLLABLE M023 TA
1E846 ; [.3B54.0020.0002] # MENDE KIKAKUI SYLLABLE M024 TU
1E847 ; [.3B55.0020.0002] # MENDE KIKAKUI SYLLABLE M091 TEE
1E848 ; [.3B56.0020.0002] # MENDE KIKAKUI SYLLABLE M055 TE
1E849 ; [.3B57.0020.0002] # MENDE KIKAKUI SYLLABLE M104 TOO
1E84A ; [.3B58.0020.0002] # MENDE KIKAKUI SYLLABLE M069 TO
1E84B ; [.3B59.0020.0002] # MENDE KIKAKUI SYLLABLE M028 JI
1E84C ; [.3B5A.0020.0002] # MENDE KIKAKUI SYLLABLE M029 JA
1E84D ; [.3B5B.0020.0002] # MENDE KIKAKUI SYLLABLE M030 JU
1E84E ; [.3B5C.0020.0002] # MENDE KIKAKUI SYLLABLE M157 JEE
1E84F ; [.3B5D.0020.0002] # MENDE KIKAKUI SYLLABLE M113 JE
1E850 ; [.3B5E.0020.0002] # MENDE KIKAKUI SYLLABLE M160 JOO
1E851 ; [.3B5F.0020.0002] # MENDE KIKAKUI SYLLABLE M063 JO
1E852 ; [.3B60.0020.0002] # MENDE KIKAKUI SYLLABLE M175 LONG JO
1E853 ; [.3B61.0020.0002] # MENDE KIKAKUI SYLLABLE M031 YI
1E854 ; [.3B62.0020.0002] # MENDE KIKAKUI SYLLABLE M032 YA
1E855 ; [.3B63.0020.0002] # MENDE KIKAKUI SYLLABLE M033 YU
1E856 ; [.3B64.0020.0002] # MENDE KIKAKUI SYLLABLE M109 YEE
1E857 ; [.3B65.0020.0002] # MENDE KIKAKUI SYLLABLE M080 YE
1E858 ; [.3B66.0020.0002] # MENDE KIKAKUI SYLLABLE M141 YOO
1E859 ; [.3B67.0020.0002] # MENDE KIKAKUI SYLLABLE M121 YO
1E85A ; [.3B68.0020.0002] # MENDE KIKAKUI SYLLABLE M034 FI
1E85B ; [.3B69.0020.0002] # MENDE KIKAKUI SYLLABLE M035 FA
1E85C ; [.3B6A.0020.0002] # MENDE KIKAKUI SYLLABLE M036 FU
1E85D ; [.3B6B.0020.0002] # MENDE KIKAKUI SYLLABLE M078 FEE
1E85E ; [.3B6C.0020.0002] # MENDE KIKAKUI SYLLABLE M075 FE
1E85F ; [.3B6D.0020.0002] # MENDE KIKAKUI SYLLABLE M133 FOO
1E860 ; [.3B6E.0020.0002] # MENDE KIKAKUI SYLLABLE M088 FO
1E861 ; [.3B6F.0020.0002] # MENDE KIKAKUI SYLLABLE M197 FUA
1E862 ; [.3B70.0020.0002] # MENDE KIKAKUI SYLLABLE M101 FAN
1E863 ; [.3B71.0020.0002] # MENDE KIKAKUI SYLLABLE M037 NIN
1E864 ; [.3B72.0020.0002] # MENDE KIKAKUI SYLLABLE M038 NAN
1E865 ; [.3B73.0020.0002] # MENDE KIKAKUI SYLLABLE M039 NUN
1E866 ; [.3B74.0020.0002] # MENDE KIKAKUI SYLLABLE M117 NEN
1E867 ; [.3B75.0020.0002] # MENDE KIKAKUI SYLLABLE M169 NON
1E868 ; [.3B76.0020.0002] # MENDE KIKAKUI SYLLABLE M176 HI
1E869 ; [.3B77.0020.0002] # MENDE KIKAKUI SYLLABLE M041 HA
1E86A ; [.3B78.0020.0002] # MENDE KIKAKUI SYLLABLE M186 HU
1E86B ; [.3B79.0020.0002] # MENDE KIKAKUI SYLLABLE M040 HEE
1E86C ; [.3B7A.0020.0002] # MENDE KIKAKUI SYLLABLE M096 HE
1E86D ; [.3B7B.0020.0002] # MENDE KIKAKUI SYLLABLE M042 HOO
1E86E ; [.3B7C.0020.0002] # MENDE KIKAKUI SYLLABLE M140 HO
1E86F ; [.3B7D.0020.0002] # MENDE KIKAKUI SYLLABLE M083 HEEI
1E870 ; [.3B7E.0020.0002] # MENDE KIKAKUI SYLLABLE M128 HOOU
1E871 ; [.3B7F.0020.0002] # MENDE KIKAKUI SYLLABLE M053 HIN
1E872 ; [.3B80.0020.0002] # MENDE KIKAKUI SYLLABLE M130 HAN
1E873 ; [.3B81.0020.0002] # MENDE KIKAKUI SYLLABLE M087 HUN
1E874 ; [.3B82.0020.0002] # MENDE KIKAKUI SYLLABLE M052 HEN
1E875 ; [.3B83.0020.0002] # MENDE KIKAKUI SYLLABLE M193 HON
1E876 ; [.3B84.0020.0002] # MENDE KIKAKUI SYLLABLE M046 HUAN
1E877 ; [.3B85.0020.0002] # MENDE KIKAKUI SYLLABLE M090 NGGI
1E878 ; [.3B86.0020.0002] # MENDE KIKAKUI SYLLABLE M043 NGGA
1E879 ; [.3B87.0020.0002] # MENDE KIKAKUI SYLLABLE M082 NGGU
1E87A ; [.3B88.0020.0002] # MENDE KIKAKUI SYLLABLE M115 NGGEE
1E87B ; [.3B89.0020.0002] # MENDE KIKAKUI SYLLABLE M146 NGGE
1E87C ; [.3B8A.0020.0002] # MENDE KIKAKUI SYLLABLE M156 NGGOO
1E87D ; [.3B8B.0020.0002] # MENDE KIKAKUI SYLLABLE M120 NGGO
1E87E ; [.3B8C.0020.0002] # MENDE KIKAKUI SYLLABLE M159 NGGAA
1E87F ; [.3B8D.0020.0002] # MENDE KIKAKUI SYLLABLE M127 NGGUA
1E880 ; [.3B8E.0020.0002] # MENDE KIKAKUI SYLLABLE M086 LONG NGGE
1E881 ; [.3B8F.0020.0002] # MENDE KIKAKUI SYLLABLE M106 LONG NGGOO
1E882 ; [.3B90.0020.0002] # MENDE KIKAKUI SYLLABLE M183 LONG NGGO
1E883 ; [.3B91.0020.0002] # MENDE KIKAKUI SYLLABLE M155 GI
1E884 ; [.3B92.0020.0002] # MENDE KIKAKUI SYLLABLE M111 GA
1E885 ; [.3B93.0020.0002] # MENDE KIKAKUI SYLLABLE M168 GU
1E886 ; [.3B94.0020.0002] # MENDE KIKAKUI SYLLABLE M190 GEE
1E887 ; [.3B95.0020.0002] # MENDE KIKAKUI SYLLABLE M166 GUEI
1E888 ; [.3B96.0020.0002] # MENDE KIKAKUI SYLLABLE M167 GUAN
1E889 ; [.3B97.0020.0002] # MENDE KIKAKUI SYLLABLE M184 NGEN
1E88A ; [.3B98.0020.0002] # MENDE KIKAKUI SYLLABLE M057 NGON
1E88B ; [.3B99.0020.0002] # MENDE KIKAKUI SYLLABLE M177 NGUAN
1E88C ; [.3B9A.0020.0002] # MENDE KIKAKUI SYLLABLE M068 PI
1E88D ; [.3B9B.0020.0002] # MENDE KIKAKUI SYLLABLE M099 PA
1E88E ; [.3B9C.0020.0002] # MENDE KIKAKUI SYLLABLE M050 PU
1E88F ; [.3B9D.0020.0002] # MENDE KIKAKUI SYLLABLE M081 PEE
1E890 ; [.3B9E.0020.0002] # MENDE KIKAKUI SYLLABLE M051 PE
1E891 ; [.3B9F.0020.0002] # MENDE KIKAKUI SYLLABLE M102 POO
1E892 ; [.3BA0.0020.0002] # MENDE KIKAKUI SYLLABLE M066 PO
1E893 ; [.3BA1.0020.0002] # MENDE KIKAKUI SYLLABLE M145 MBI
1E894 ; [.3BA2.0020.0002] # MENDE KIKAKUI SYLLABLE M062 MBA
1E895 ; [.3BA3.0020.0002] # MENDE KIKAKUI SYLLABLE M122 MBU
1E896 ; [.3BA4.0020.0002] # MENDE KIKAKUI SYLLABLE M047 MBEE
1E897 ; [.3BA5.0020.0002] # MENDE KIKAKUI SYLLABLE M188 MBEE
1E898 ; [.3BA6.0020.0002] # MENDE KIKAKUI SYLLABLE M072 MBE
1E899 ; [.3BA7.0020.0002] # MENDE KIKAKUI SYLLABLE M172 MBOO
1E89A ; [.3BA8.0020.0002] # MENDE KIKAKUI SYLLABLE M174 MBO
1E89B ; [.3BA9.0020.0002] # MENDE KIKAKUI SYLLABLE M187 MBUU
1E89C ; [.3BAA.0020.0002] # MENDE KIKAKUI SYLLABLE M161 LONG MBE
1E89D ; [.3BAB.0020.0002] # MENDE KIKAKUI SYLLABLE M105 LONG MBOO
1E89E ; [.3BAC.0020.0002] # MENDE KIKAKUI SYLLABLE M142 LONG MBO
1E89F ; [.3BAD.0020.0002] # MENDE KIKAKUI SYLLABLE M132 KPI
1E8A0 ; [.3BAE.0020.0002] # MENDE KIKAKUI SYLLABLE M092 KPA
1E8A1 ; [.3BAF.0020.0002] # MENDE KIKAKUI SYLLABLE M074 KPU
1E8A2 ; [.3BB0.0020.0002] # MENDE KIKAKUI SYLLABLE M044 KPEE
1E8A3 ; [.3BB1.0020.0002] # MENDE KIKAKUI SYLLABLE M108 KPE
1E8A4 ; [.3BB2.0020.0002] # MENDE KIKAKUI SYLLABLE M112 KPOO
1E8A5 ; [.3BB3.0020.0002] # MENDE KIKAKUI SYLLABLE M158 KPO
1E8A6 ; [.3BB4.0020.0002] # MENDE KIKAKUI SYLLABLE M124 GBI
1E8A7 ; [.3BB5.0020.0002] # MENDE KIKAKUI SYLLABLE M056 GBA
1E8A8 ; [.3BB6.0020.0002] # MENDE KIKAKUI SYLLABLE M148 GBU
1E8A9 ; [.3BB7.0020.0002] # MENDE KIKAKUI SYLLABLE M093 GBEE
1E8AA ; [.3BB8.0020.0002] # MENDE KIKAKUI SYLLABLE M107 GBE
1E8AB ; [.3BB9.0020.0002] # MENDE KIKAKUI SYLLABLE M071 GBOO
1E8AC ; [.3BBA.0020.0002] # MENDE KIKAKUI SYLLABLE M070 GBO
1E8AD ; [.3BBB.0020.0002] # MENDE KIKAKUI SYLLABLE M171 RA
1E8AE ; [.3BBC.0020.0002] # MENDE KIKAKUI SYLLABLE M123 NDI
1E8AF ; [.3BBD.0020.0002] # MENDE KIKAKUI SYLLABLE M129 NDA
1E8B0 ; [.3BBE.0020.0002] # MENDE KIKAKUI SYLLABLE M125 NDU
1E8B1 ; [.3BBF.0020.0002] # MENDE KIKAKUI SYLLABLE M191 NDEE
1E8B2 ; [.3BC0.0020.0002] # MENDE KIKAKUI SYLLABLE M119 NDE
1E8B3 ; [.3BC1.0020.0002] # MENDE KIKAKUI SYLLABLE M067 NDOO
1E8B4 ; [.3BC2.0020.0002] # MENDE KIKAKUI SYLLABLE M064 NDO
1E8B5 ; [.3BC3.0020.0002] # MENDE KIKAKUI SYLLABLE M152 NJA
1E8B6 ; [.3BC4.0020.0002] # MENDE KIKAKUI SYLLABLE M192 NJU
1E8B7 ; [.3BC5.0020.0002] # MENDE KIKAKUI SYLLABLE M149 NJEE
1E8B8 ; [.3BC6.0020.0002] # MENDE KIKAKUI SYLLABLE M134 NJOO
1E8B9 ; [.3BC7.0020.0002] # MENDE KIKAKUI SYLLABLE M182 VI
1E8BA ; [.3BC8.0020.0002] # MENDE KIKAKUI SYLLABLE M185 VA
1E8BB ; [.3BC9.0020.0002] # MENDE KIKAKUI SYLLABLE M151 VU
1E8BC ; [.3BCA.0020.0002] # MENDE KIKAKUI SYLLABLE M173 VEE
1E8BD ; [.3BCB.0020.0002] # MENDE KIKAKUI SYLLABLE M085 VE
1E8BE ; [.3BCC.0020.0002] # MENDE KIKAKUI SYLLABLE M144 VOO
1E8BF ; [.3BCD.0020.0002] # MENDE KIKAKUI SYLLABLE M077 VO
1E8C0 ; [.3BCE.0020.0002] # MENDE KIKAKUI SYLLABLE M164 NYIN
1E8C1 ; [.3BCF.0020.0002] # MENDE KIKAKUI SYLLABLE M058 NYAN
1E8C2 ; [.3BD0.0020.0002] # MENDE KIKAKUI SYLLABLE M170 NYUN
1E8C3 ; [.3BD1.0020.0002] # MENDE KIKAKUI SYLLABLE M098 NYEN
1E8C4 ; [.3BD2.0020.0002] # MENDE KIKAKUI SYLLABLE M060 NYON
1E922 ; [.3BD3.0020.0002] # ADLAM SMALL LETTER ALIF
1E900 ; [.3BD3.0020.0008] # ADLAM CAPITAL LETTER ALIF
1E923 ; [.3BD4.0020.0002] # ADLAM SMALL LETTER DAALI
1E901 ; [.3BD4.0020.0008] # ADLAM CAPITAL LETTER DAALI
1E924 ; [.3BD5.0020.0002] # ADLAM SMALL LETTER LAAM
1E902 ; [.3BD5.0020.0008] # ADLAM CAPITAL LETTER LAAM
1E925 ; [.3BD6.0020.0002] # ADLAM SMALL LETTER MIIM
1E903 ; [.3BD6.0020.0008] # ADLAM CAPITAL LETTER MIIM
1E926 ; [.3BD7.0020.0002] # ADLAM SMALL LETTER BA
1E904 ; [.3BD7.0020.0008] # ADLAM CAPITAL LETTER BA
1E927 ; [.3BD8.0020.0002] # ADLAM SMALL LETTER SINNYIIYHE
1E905 ; [.3BD8.0020.0008] # ADLAM CAPITAL LETTER SINNYIIYHE
1E928 ; [.3BD9.0020.0002] # ADLAM SMALL LETTER PE
1E906 ; [.3BD9.0020.0008] # ADLAM CAPITAL LETTER PE
1E929 ; [.3BDA.0020.0002] # ADLAM SMALL LETTER BHE
1E907 ; [.3BDA.0020.0008] # ADLAM CAPITAL LETTER BHE
1E92A ; [.3BDB.0020.0002] # ADLAM SMALL LETTER RA
1E908 ; [.3BDB.0020.0008] # ADLAM CAPITAL LETTER RA
1E92B ; [.3BDC.0020.0002] # ADLAM SMALL LETTER E
1E909 ; [.3BDC.0020.0008] # ADLAM CAPITAL LETTER E
1E92C ; [.3BDD.0020.0002] # ADLAM SMALL LETTER FA
1E90A ; [.3BDD.0020.0008] # ADLAM CAPITAL LETTER FA
1E92D ; [.3BDE.0020.0002] # ADLAM SMALL LETTER I
1E90B ; [.3BDE.0020.0008] # ADLAM CAPITAL LETTER I
1E92E ; [.3BDF.0020.0002] # ADLAM SMALL LETTER O
1E90C ; [.3BDF.0020.0008] # ADLAM CAPITAL LETTER O
1E92F ; [.3BE0.0020.0002] # ADLAM SMALL LETTER DHA
1E90D ; [.3BE0.0020.0008] # ADLAM CAPITAL LETTER DHA
1E930 ; [.3BE1.0020.0002] # ADLAM SMALL LETTER YHE
1E90E ; [.3BE1.0020.0008] # ADLAM CAPITAL LETTER YHE
1E931 ; [.3BE2.0020.0002] # ADLAM SMALL LETTER WAW
1E90F ; [.3BE2.0020.0008] # ADLAM CAPITAL LETTER WAW
1E932 ; [.3BE3.0020.0002] # ADLAM SMALL LETTER NUN
1E910 ; [.3BE3.0020.0008] # ADLAM CAPITAL LETTER NUN
1E933 ; [.3BE4.0020.0002] # ADLAM SMALL LETTER KAF
1E911 ; [.3BE4.0020.0008] # ADLAM CAPITAL LETTER KAF
1E934 ; [.3BE5.0020.0002] # ADLAM SMALL LETTER YA
1E912 ; [.3BE5.0020.0008] # ADLAM CAPITAL LETTER YA
1E935 ; [.3BE6.0020.0002] # ADLAM SMALL LETTER U
1E913 ; [.3BE6.0020.0008] # ADLAM CAPITAL LETTER U
1E936 ; [.3BE7.0020.0002] # ADLAM SMALL LETTER JIIM
1E914 ; [.3BE7.0020.0008] # ADLAM CAPITAL LETTER JIIM
1E937 ; [.3BE8.0020.0002] # ADLAM SMALL LETTER CHI
1E915 ; [.3BE8.0020.0008] # ADLAM CAPITAL LETTER CHI
1E938 ; [.3BE9.0020.0002] # ADLAM SMALL LETTER HA
1E916 ; [.3BE9.0020.0008] # ADLAM CAPITAL LETTER HA
1E939 ; [.3BEA.0020.0002] # ADLAM SMALL LETTER QAAF
1E917 ; [.3BEA.0020.0008] # ADLAM CAPITAL LETTER QAAF
1E93A ; [.3BEB.0020.0002] # ADLAM SMALL LETTER GA
1E918 ; [.3BEB.0020.0008] # ADLAM CAPITAL LETTER GA
1E93B ; [.3BEC.0020.0002] # ADLAM SMALL LETTER NYA
1E919 ; [.3BEC.0020.0008] # ADLAM CAPITAL LETTER NYA
1E93C ; [.3BED.0020.0002] # ADLAM SMALL LETTER TU
1E91A ; [.3BED.0020.0008] # ADLAM CAPITAL LETTER TU
1E93D ; [.3BEE.0020.0002] # ADLAM SMALL LETTER NHA
1E91B ; [.3BEE.0020.0008] # ADLAM CAPITAL LETTER NHA
1E93E ; [.3BEF.0020.0002] # ADLAM SMALL LETTER VA
1E91C ; [.3BEF.0020.0008] # ADLAM CAPITAL LETTER VA
1E93F ; [.3BF0.0020.0002] # ADLAM SMALL LETTER KHA
1E91D ; [.3BF0.0020.0008] # ADLAM CAPITAL LETTER KHA
1E940 ; [.3BF1.0020.0002] # ADLAM SMALL LETTER GBE
1E91E ; [.3BF1.0020.0008] # ADLAM CAPITAL LETTER GBE
1E941 ; [.3BF2.0020.0002] # ADLAM SMALL LETTER ZAL
1E91F ; [.3BF2.0020.0008] # ADLAM CAPITAL LETTER ZAL
1E942 ; [.3BF3.0020.0002] # ADLAM SMALL LETTER KPO
1E920 ; [.3BF3.0020.0008] # ADLAM CAPITAL LETTER KPO
1E943 ; [.3BF4.0020.0002] # ADLAM SMALL LETTER SHA
1E921 ; [.3BF4.0020.0008] # ADLAM CAPITAL LETTER SHA
1100 ; [.3BF5.0020.0002] # HANGUL CHOSEONG KIYEOK
3131 ; [.3BF5.0020.0004] # HANGUL LETTER KIYEOK
3200 ; [*0317.0020.0004][.3BF5.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KIYEOK
3260 ; [.3BF5.0020.0006] # CIRCLED HANGUL KIYEOK
FFA1 ; [.3BF5.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK
320E ; [*0317.0020.0004][.3BF5.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KIYEOK A
326E ; [.3BF5.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL KIYEOK A
1101 ; [.3BF6.0020.0002] # HANGUL CHOSEONG SSANGKIYEOK
3132 ; [.3BF6.0020.0004] # HANGUL LETTER SSANGKIYEOK
FFA2 ; [.3BF6.0020.0012] # HALFWIDTH HANGUL LETTER SSANGKIYEOK
1102 ; [.3BF7.0020.0002] # HANGUL CHOSEONG NIEUN
3134 ; [.3BF7.0020.0004] # HANGUL LETTER NIEUN
3201 ; [*0317.0020.0004][.3BF7.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL NIEUN
3261 ; [.3BF7.0020.0006] # CIRCLED HANGUL NIEUN
FFA4 ; [.3BF7.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN
320F ; [*0317.0020.0004][.3BF7.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL NIEUN A
326F ; [.3BF7.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL NIEUN A
1103 ; [.3BF8.0020.0002] # HANGUL CHOSEONG TIKEUT
3137 ; [.3BF8.0020.0004] # HANGUL LETTER TIKEUT
3202 ; [*0317.0020.0004][.3BF8.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL TIKEUT
3262 ; [.3BF8.0020.0006] # CIRCLED HANGUL TIKEUT
FFA7 ; [.3BF8.0020.0012] # HALFWIDTH HANGUL LETTER TIKEUT
3210 ; [*0317.0020.0004][.3BF8.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL TIKEUT A
3270 ; [.3BF8.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL TIKEUT A
1104 ; [.3BF9.0020.0002] # HANGUL CHOSEONG SSANGTIKEUT
3138 ; [.3BF9.0020.0004] # HANGUL LETTER SSANGTIKEUT
FFA8 ; [.3BF9.0020.0012] # HALFWIDTH HANGUL LETTER SSANGTIKEUT
1105 ; [.3BFA.0020.0002] # HANGUL CHOSEONG RIEUL
3139 ; [.3BFA.0020.0004] # HANGUL LETTER RIEUL
3203 ; [*0317.0020.0004][.3BFA.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL RIEUL
3263 ; [.3BFA.0020.0006] # CIRCLED HANGUL RIEUL
FFA9 ; [.3BFA.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL
3211 ; [*0317.0020.0004][.3BFA.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL RIEUL A
3271 ; [.3BFA.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL RIEUL A
1106 ; [.3BFB.0020.0002] # HANGUL CHOSEONG MIEUM
3141 ; [.3BFB.0020.0004] # HANGUL LETTER MIEUM
3204 ; [*0317.0020.0004][.3BFB.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL MIEUM
3264 ; [.3BFB.0020.0006] # CIRCLED HANGUL MIEUM
FFB1 ; [.3BFB.0020.0012] # HALFWIDTH HANGUL LETTER MIEUM
3212 ; [*0317.0020.0004][.3BFB.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL MIEUM A
3272 ; [.3BFB.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL MIEUM A
1107 ; [.3BFC.0020.0002] # HANGUL CHOSEONG PIEUP
3142 ; [.3BFC.0020.0004] # HANGUL LETTER PIEUP
3205 ; [*0317.0020.0004][.3BFC.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PIEUP
3265 ; [.3BFC.0020.0006] # CIRCLED HANGUL PIEUP
FFB2 ; [.3BFC.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP
3213 ; [*0317.0020.0004][.3BFC.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PIEUP A
3273 ; [.3BFC.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL PIEUP A
1108 ; [.3BFD.0020.0002] # HANGUL CHOSEONG SSANGPIEUP
3143 ; [.3BFD.0020.0004] # HANGUL LETTER SSANGPIEUP
FFB3 ; [.3BFD.0020.0012] # HALFWIDTH HANGUL LETTER SSANGPIEUP
1109 ; [.3BFE.0020.0002] # HANGUL CHOSEONG SIOS
3145 ; [.3BFE.0020.0004] # HANGUL LETTER SIOS
3206 ; [*0317.0020.0004][.3BFE.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL SIOS
3266 ; [.3BFE.0020.0006] # CIRCLED HANGUL SIOS
FFB5 ; [.3BFE.0020.0012] # HALFWIDTH HANGUL LETTER SIOS
3214 ; [*0317.0020.0004][.3BFE.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL SIOS A
3274 ; [.3BFE.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL SIOS A
110A ; [.3BFF.0020.0002] # HANGUL CHOSEONG SSANGSIOS
3146 ; [.3BFF.0020.0004] # HANGUL LETTER SSANGSIOS
FFB6 ; [.3BFF.0020.0012] # HALFWIDTH HANGUL LETTER SSANGSIOS
110B ; [.3C00.0020.0002] # HANGUL CHOSEONG IEUNG
3147 ; [.3C00.0020.0004] # HANGUL LETTER IEUNG
3207 ; [*0317.0020.0004][.3C00.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL IEUNG
3267 ; [.3C00.0020.0006] # CIRCLED HANGUL IEUNG
FFB7 ; [.3C00.0020.0012] # HALFWIDTH HANGUL LETTER IEUNG
3215 ; [*0317.0020.0004][.3C00.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL IEUNG A
3275 ; [.3C00.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL IEUNG A
321D ; [*0317.0020.0004][.3C00.0020.0004][.3C7B.0020.0004][.3C01.0020.0004][.3C77.0020.0004][.3CD4.0020.0004][*0318.0020.0004] # PARENTHESIZED KOREAN CHARACTER OJEON
321E ; [*0317.0020.0004][.3C00.0020.0004][.3C7B.0020.0004][.3C07.0020.0004][.3C80.0020.0004][*0318.0020.0004] # PARENTHESIZED KOREAN CHARACTER O HU
327E ; [.3C00.0020.0006][.3C80.0020.0006] # CIRCLED HANGUL IEUNG U
110C ; [.3C01.0020.0002] # HANGUL CHOSEONG CIEUC
3148 ; [.3C01.0020.0004] # HANGUL LETTER CIEUC
3208 ; [*0317.0020.0004][.3C01.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CIEUC
3268 ; [.3C01.0020.0006] # CIRCLED HANGUL CIEUC
FFB8 ; [.3C01.0020.0012] # HALFWIDTH HANGUL LETTER CIEUC
3216 ; [*0317.0020.0004][.3C01.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CIEUC A
3276 ; [.3C01.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL CIEUC A
321C ; [*0317.0020.0004][.3C01.0020.0004][.3C80.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CIEUC U
327D ; [.3C01.0020.0006][.3C80.0020.0006][.3C00.0020.0006][.3C86.0020.0006] # CIRCLED KOREAN CHARACTER JUEUI
110D ; [.3C02.0020.0002] # HANGUL CHOSEONG SSANGCIEUC
3149 ; [.3C02.0020.0004] # HANGUL LETTER SSANGCIEUC
FFB9 ; [.3C02.0020.0012] # HALFWIDTH HANGUL LETTER SSANGCIEUC
110E ; [.3C03.0020.0002] # HANGUL CHOSEONG CHIEUCH
314A ; [.3C03.0020.0004] # HANGUL LETTER CHIEUCH
3209 ; [*0317.0020.0004][.3C03.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CHIEUCH
3269 ; [.3C03.0020.0006] # CIRCLED HANGUL CHIEUCH
FFBA ; [.3C03.0020.0012] # HALFWIDTH HANGUL LETTER CHIEUCH
3217 ; [*0317.0020.0004][.3C03.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CHIEUCH A
3277 ; [.3C03.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL CHIEUCH A
327C ; [.3C03.0020.0006][.3C73.0020.0006][.3CE0.0020.0006][.3BF5.0020.0006][.3C7B.0020.0006] # CIRCLED KOREAN CHARACTER CHAMKO
110F ; [.3C04.0020.0002] # HANGUL CHOSEONG KHIEUKH
314B ; [.3C04.0020.0004] # HANGUL LETTER KHIEUKH
320A ; [*0317.0020.0004][.3C04.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KHIEUKH
326A ; [.3C04.0020.0006] # CIRCLED HANGUL KHIEUKH
FFBB ; [.3C04.0020.0012] # HALFWIDTH HANGUL LETTER KHIEUKH
3218 ; [*0317.0020.0004][.3C04.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KHIEUKH A
3278 ; [.3C04.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL KHIEUKH A
1110 ; [.3C05.0020.0002] # HANGUL CHOSEONG THIEUTH
314C ; [.3C05.0020.0004] # HANGUL LETTER THIEUTH
320B ; [*0317.0020.0004][.3C05.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL THIEUTH
326B ; [.3C05.0020.0006] # CIRCLED HANGUL THIEUTH
FFBC ; [.3C05.0020.0012] # HALFWIDTH HANGUL LETTER THIEUTH
3219 ; [*0317.0020.0004][.3C05.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL THIEUTH A
3279 ; [.3C05.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL THIEUTH A
1111 ; [.3C06.0020.0002] # HANGUL CHOSEONG PHIEUPH
314D ; [.3C06.0020.0004] # HANGUL LETTER PHIEUPH
320C ; [*0317.0020.0004][.3C06.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PHIEUPH
326C ; [.3C06.0020.0006] # CIRCLED HANGUL PHIEUPH
FFBD ; [.3C06.0020.0012] # HALFWIDTH HANGUL LETTER PHIEUPH
321A ; [*0317.0020.0004][.3C06.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PHIEUPH A
327A ; [.3C06.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL PHIEUPH A
1112 ; [.3C07.0020.0002] # HANGUL CHOSEONG HIEUH
314E ; [.3C07.0020.0004] # HANGUL LETTER HIEUH
320D ; [*0317.0020.0004][.3C07.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL HIEUH
326D ; [.3C07.0020.0006] # CIRCLED HANGUL HIEUH
FFBE ; [.3C07.0020.0012] # HALFWIDTH HANGUL LETTER HIEUH
321B ; [*0317.0020.0004][.3C07.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL HIEUH A
327B ; [.3C07.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL HIEUH A
1113 ; [.3C08.0020.0002] # HANGUL CHOSEONG NIEUN-KIYEOK
1114 ; [.3C09.0020.0002] # HANGUL CHOSEONG SSANGNIEUN
3165 ; [.3C09.0020.0004] # HANGUL LETTER SSANGNIEUN
1115 ; [.3C0A.0020.0002] # HANGUL CHOSEONG NIEUN-TIKEUT
3166 ; [.3C0A.0020.0004] # HANGUL LETTER NIEUN-TIKEUT
1116 ; [.3C0B.0020.0002] # HANGUL CHOSEONG NIEUN-PIEUP
1117 ; [.3C0C.0020.0002] # HANGUL CHOSEONG TIKEUT-KIYEOK
1118 ; [.3C0D.0020.0002] # HANGUL CHOSEONG RIEUL-NIEUN
1119 ; [.3C0E.0020.0002] # HANGUL CHOSEONG SSANGRIEUL
111A ; [.3C0F.0020.0002] # HANGUL CHOSEONG RIEUL-HIEUH
3140 ; [.3C0F.0020.0004] # HANGUL LETTER RIEUL-HIEUH
FFB0 ; [.3C0F.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-HIEUH
111B ; [.3C10.0020.0002] # HANGUL CHOSEONG KAPYEOUNRIEUL
111C ; [.3C11.0020.0002] # HANGUL CHOSEONG MIEUM-PIEUP
316E ; [.3C11.0020.0004] # HANGUL LETTER MIEUM-PIEUP
111D ; [.3C12.0020.0002] # HANGUL CHOSEONG KAPYEOUNMIEUM
3171 ; [.3C12.0020.0004] # HANGUL LETTER KAPYEOUNMIEUM
111E ; [.3C13.0020.0002] # HANGUL CHOSEONG PIEUP-KIYEOK
3172 ; [.3C13.0020.0004] # HANGUL LETTER PIEUP-KIYEOK
111F ; [.3C14.0020.0002] # HANGUL CHOSEONG PIEUP-NIEUN
1120 ; [.3C15.0020.0002] # HANGUL CHOSEONG PIEUP-TIKEUT
3173 ; [.3C15.0020.0004] # HANGUL LETTER PIEUP-TIKEUT
1121 ; [.3C16.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS
3144 ; [.3C16.0020.0004] # HANGUL LETTER PIEUP-SIOS
FFB4 ; [.3C16.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP-SIOS
1122 ; [.3C17.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
3174 ; [.3C17.0020.0004] # HANGUL LETTER PIEUP-SIOS-KIYEOK
1123 ; [.3C18.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
3175 ; [.3C18.0020.0004] # HANGUL LETTER PIEUP-SIOS-TIKEUT
1124 ; [.3C19.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
1125 ; [.3C1A.0020.0002] # HANGUL CHOSEONG PIEUP-SSANGSIOS
1126 ; [.3C1B.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
1127 ; [.3C1C.0020.0002] # HANGUL CHOSEONG PIEUP-CIEUC
3176 ; [.3C1C.0020.0004] # HANGUL LETTER PIEUP-CIEUC
1128 ; [.3C1D.0020.0002] # HANGUL CHOSEONG PIEUP-CHIEUCH
1129 ; [.3C1E.0020.0002] # HANGUL CHOSEONG PIEUP-THIEUTH
3177 ; [.3C1E.0020.0004] # HANGUL LETTER PIEUP-THIEUTH
112A ; [.3C1F.0020.0002] # HANGUL CHOSEONG PIEUP-PHIEUPH
112B ; [.3C20.0020.0002] # HANGUL CHOSEONG KAPYEOUNPIEUP
3178 ; [.3C20.0020.0004] # HANGUL LETTER KAPYEOUNPIEUP
112C ; [.3C21.0020.0002] # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
3179 ; [.3C21.0020.0004] # HANGUL LETTER KAPYEOUNSSANGPIEUP
112D ; [.3C22.0020.0002] # HANGUL CHOSEONG SIOS-KIYEOK
317A ; [.3C22.0020.0004] # HANGUL LETTER SIOS-KIYEOK
112E ; [.3C23.0020.0002] # HANGUL CHOSEONG SIOS-NIEUN
317B ; [.3C23.0020.0004] # HANGUL LETTER SIOS-NIEUN
112F ; [.3C24.0020.0002] # HANGUL CHOSEONG SIOS-TIKEUT
317C ; [.3C24.0020.0004] # HANGUL LETTER SIOS-TIKEUT
1130 ; [.3C25.0020.0002] # HANGUL CHOSEONG SIOS-RIEUL
1131 ; [.3C26.0020.0002] # HANGUL CHOSEONG SIOS-MIEUM
1132 ; [.3C27.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP
317D ; [.3C27.0020.0004] # HANGUL LETTER SIOS-PIEUP
1133 ; [.3C28.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
1134 ; [.3C29.0020.0002] # HANGUL CHOSEONG SIOS-SSANGSIOS
1135 ; [.3C2A.0020.0002] # HANGUL CHOSEONG SIOS-IEUNG
1136 ; [.3C2B.0020.0002] # HANGUL CHOSEONG SIOS-CIEUC
317E ; [.3C2B.0020.0004] # HANGUL LETTER SIOS-CIEUC
1137 ; [.3C2C.0020.0002] # HANGUL CHOSEONG SIOS-CHIEUCH
1138 ; [.3C2D.0020.0002] # HANGUL CHOSEONG SIOS-KHIEUKH
1139 ; [.3C2E.0020.0002] # HANGUL CHOSEONG SIOS-THIEUTH
113A ; [.3C2F.0020.0002] # HANGUL CHOSEONG SIOS-PHIEUPH
113B ; [.3C30.0020.0002] # HANGUL CHOSEONG SIOS-HIEUH
113C ; [.3C31.0020.0002] # HANGUL CHOSEONG CHITUEUMSIOS
113D ; [.3C32.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGSIOS
113E ; [.3C33.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSIOS
113F ; [.3C34.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
1140 ; [.3C35.0020.0002] # HANGUL CHOSEONG PANSIOS
317F ; [.3C35.0020.0004] # HANGUL LETTER PANSIOS
1141 ; [.3C36.0020.0002] # HANGUL CHOSEONG IEUNG-KIYEOK
1142 ; [.3C37.0020.0002] # HANGUL CHOSEONG IEUNG-TIKEUT
1143 ; [.3C38.0020.0002] # HANGUL CHOSEONG IEUNG-MIEUM
1144 ; [.3C39.0020.0002] # HANGUL CHOSEONG IEUNG-PIEUP
1145 ; [.3C3A.0020.0002] # HANGUL CHOSEONG IEUNG-SIOS
1146 ; [.3C3B.0020.0002] # HANGUL CHOSEONG IEUNG-PANSIOS
1147 ; [.3C3C.0020.0002] # HANGUL CHOSEONG SSANGIEUNG
3180 ; [.3C3C.0020.0004] # HANGUL LETTER SSANGIEUNG
1148 ; [.3C3D.0020.0002] # HANGUL CHOSEONG IEUNG-CIEUC
1149 ; [.3C3E.0020.0002] # HANGUL CHOSEONG IEUNG-CHIEUCH
114A ; [.3C3F.0020.0002] # HANGUL CHOSEONG IEUNG-THIEUTH
114B ; [.3C40.0020.0002] # HANGUL CHOSEONG IEUNG-PHIEUPH
114C ; [.3C41.0020.0002] # HANGUL CHOSEONG YESIEUNG
3181 ; [.3C41.0020.0004] # HANGUL LETTER YESIEUNG
114D ; [.3C42.0020.0002] # HANGUL CHOSEONG CIEUC-IEUNG
114E ; [.3C43.0020.0002] # HANGUL CHOSEONG CHITUEUMCIEUC
114F ; [.3C44.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
1150 ; [.3C45.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCIEUC
1151 ; [.3C46.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
1152 ; [.3C47.0020.0002] # HANGUL CHOSEONG CHIEUCH-KHIEUKH
1153 ; [.3C48.0020.0002] # HANGUL CHOSEONG CHIEUCH-HIEUH
1154 ; [.3C49.0020.0002] # HANGUL CHOSEONG CHITUEUMCHIEUCH
1155 ; [.3C4A.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
1156 ; [.3C4B.0020.0002] # HANGUL CHOSEONG PHIEUPH-PIEUP
1157 ; [.3C4C.0020.0002] # HANGUL CHOSEONG KAPYEOUNPHIEUPH
3184 ; [.3C4C.0020.0004] # HANGUL LETTER KAPYEOUNPHIEUPH
1158 ; [.3C4D.0020.0002] # HANGUL CHOSEONG SSANGHIEUH
3185 ; [.3C4D.0020.0004] # HANGUL LETTER SSANGHIEUH
1159 ; [.3C4E.0020.0002] # HANGUL CHOSEONG YEORINHIEUH
3186 ; [.3C4E.0020.0004] # HANGUL LETTER YEORINHIEUH
115A ; [.3C4F.0020.0002] # HANGUL CHOSEONG KIYEOK-TIKEUT
115B ; [.3C50.0020.0002] # HANGUL CHOSEONG NIEUN-SIOS
115C ; [.3C51.0020.0002] # HANGUL CHOSEONG NIEUN-CIEUC
115D ; [.3C52.0020.0002] # HANGUL CHOSEONG NIEUN-HIEUH
115E ; [.3C53.0020.0002] # HANGUL CHOSEONG TIKEUT-RIEUL
A960 ; [.3C54.0020.0002] # HANGUL CHOSEONG TIKEUT-MIEUM
A961 ; [.3C55.0020.0002] # HANGUL CHOSEONG TIKEUT-PIEUP
A962 ; [.3C56.0020.0002] # HANGUL CHOSEONG TIKEUT-SIOS
A963 ; [.3C57.0020.0002] # HANGUL CHOSEONG TIKEUT-CIEUC
A964 ; [.3C58.0020.0002] # HANGUL CHOSEONG RIEUL-KIYEOK
A965 ; [.3C59.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGKIYEOK
A966 ; [.3C5A.0020.0002] # HANGUL CHOSEONG RIEUL-TIKEUT
A967 ; [.3C5B.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGTIKEUT
A968 ; [.3C5C.0020.0002] # HANGUL CHOSEONG RIEUL-MIEUM
A969 ; [.3C5D.0020.0002] # HANGUL CHOSEONG RIEUL-PIEUP
A96A ; [.3C5E.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGPIEUP
A96B ; [.3C5F.0020.0002] # HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP
A96C ; [.3C60.0020.0002] # HANGUL CHOSEONG RIEUL-SIOS
A96D ; [.3C61.0020.0002] # HANGUL CHOSEONG RIEUL-CIEUC
A96E ; [.3C62.0020.0002] # HANGUL CHOSEONG RIEUL-KHIEUKH
A96F ; [.3C63.0020.0002] # HANGUL CHOSEONG MIEUM-KIYEOK
A970 ; [.3C64.0020.0002] # HANGUL CHOSEONG MIEUM-TIKEUT
A971 ; [.3C65.0020.0002] # HANGUL CHOSEONG MIEUM-SIOS
A972 ; [.3C66.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-THIEUTH
A973 ; [.3C67.0020.0002] # HANGUL CHOSEONG PIEUP-KHIEUKH
A974 ; [.3C68.0020.0002] # HANGUL CHOSEONG PIEUP-HIEUH
A975 ; [.3C69.0020.0002] # HANGUL CHOSEONG SSANGSIOS-PIEUP
A976 ; [.3C6A.0020.0002] # HANGUL CHOSEONG IEUNG-RIEUL
A977 ; [.3C6B.0020.0002] # HANGUL CHOSEONG IEUNG-HIEUH
A978 ; [.3C6C.0020.0002] # HANGUL CHOSEONG SSANGCIEUC-HIEUH
A979 ; [.3C6D.0020.0002] # HANGUL CHOSEONG SSANGTHIEUTH
A97A ; [.3C6E.0020.0002] # HANGUL CHOSEONG PHIEUPH-HIEUH
A97B ; [.3C6F.0020.0002] # HANGUL CHOSEONG HIEUH-SIOS
A97C ; [.3C70.0020.0002] # HANGUL CHOSEONG SSANGYEORINHIEUH
115F ; [.3C71.0020.0002] # HANGUL CHOSEONG FILLER
1160 ; [.3C72.0020.0002] # HANGUL JUNGSEONG FILLER
3164 ; [.3C72.0020.0004] # HANGUL FILLER
FFA0 ; [.3C72.0020.0012] # HALFWIDTH HANGUL FILLER
1161 ; [.3C73.0020.0002] # HANGUL JUNGSEONG A
314F ; [.3C73.0020.0004] # HANGUL LETTER A
FFC2 ; [.3C73.0020.0012] # HALFWIDTH HANGUL LETTER A
1162 ; [.3C74.0020.0002] # HANGUL JUNGSEONG AE
3150 ; [.3C74.0020.0004] # HANGUL LETTER AE
FFC3 ; [.3C74.0020.0012] # HALFWIDTH HANGUL LETTER AE
1163 ; [.3C75.0020.0002] # HANGUL JUNGSEONG YA
3151 ; [.3C75.0020.0004] # HANGUL LETTER YA
FFC4 ; [.3C75.0020.0012] # HALFWIDTH HANGUL LETTER YA
1164 ; [.3C76.0020.0002] # HANGUL JUNGSEONG YAE
3152 ; [.3C76.0020.0004] # HANGUL LETTER YAE
FFC5 ; [.3C76.0020.0012] # HALFWIDTH HANGUL LETTER YAE
1165 ; [.3C77.0020.0002] # HANGUL JUNGSEONG EO
3153 ; [.3C77.0020.0004] # HANGUL LETTER EO
FFC6 ; [.3C77.0020.0012] # HALFWIDTH HANGUL LETTER EO
1166 ; [.3C78.0020.0002] # HANGUL JUNGSEONG E
3154 ; [.3C78.0020.0004] # HANGUL LETTER E
FFC7 ; [.3C78.0020.0012] # HALFWIDTH HANGUL LETTER E
1167 ; [.3C79.0020.0002] # HANGUL JUNGSEONG YEO
3155 ; [.3C79.0020.0004] # HANGUL LETTER YEO
FFCA ; [.3C79.0020.0012] # HALFWIDTH HANGUL LETTER YEO
1168 ; [.3C7A.0020.0002] # HANGUL JUNGSEONG YE
3156 ; [.3C7A.0020.0004] # HANGUL LETTER YE
FFCB ; [.3C7A.0020.0012] # HALFWIDTH HANGUL LETTER YE
1169 ; [.3C7B.0020.0002] # HANGUL JUNGSEONG O
3157 ; [.3C7B.0020.0004] # HANGUL LETTER O
FFCC ; [.3C7B.0020.0012] # HALFWIDTH HANGUL LETTER O
116A ; [.3C7C.0020.0002] # HANGUL JUNGSEONG WA
3158 ; [.3C7C.0020.0004] # HANGUL LETTER WA
FFCD ; [.3C7C.0020.0012] # HALFWIDTH HANGUL LETTER WA
116B ; [.3C7D.0020.0002] # HANGUL JUNGSEONG WAE
3159 ; [.3C7D.0020.0004] # HANGUL LETTER WAE
FFCE ; [.3C7D.0020.0012] # HALFWIDTH HANGUL LETTER WAE
116C ; [.3C7E.0020.0002] # HANGUL JUNGSEONG OE
315A ; [.3C7E.0020.0004] # HANGUL LETTER OE
FFCF ; [.3C7E.0020.0012] # HALFWIDTH HANGUL LETTER OE
116D ; [.3C7F.0020.0002] # HANGUL JUNGSEONG YO
315B ; [.3C7F.0020.0004] # HANGUL LETTER YO
FFD2 ; [.3C7F.0020.0012] # HALFWIDTH HANGUL LETTER YO
116E ; [.3C80.0020.0002] # HANGUL JUNGSEONG U
315C ; [.3C80.0020.0004] # HANGUL LETTER U
FFD3 ; [.3C80.0020.0012] # HALFWIDTH HANGUL LETTER U
116F ; [.3C81.0020.0002] # HANGUL JUNGSEONG WEO
315D ; [.3C81.0020.0004] # HANGUL LETTER WEO
FFD4 ; [.3C81.0020.0012] # HALFWIDTH HANGUL LETTER WEO
1170 ; [.3C82.0020.0002] # HANGUL JUNGSEONG WE
315E ; [.3C82.0020.0004] # HANGUL LETTER WE
FFD5 ; [.3C82.0020.0012] # HALFWIDTH HANGUL LETTER WE
1171 ; [.3C83.0020.0002] # HANGUL JUNGSEONG WI
315F ; [.3C83.0020.0004] # HANGUL LETTER WI
FFD6 ; [.3C83.0020.0012] # HALFWIDTH HANGUL LETTER WI
1172 ; [.3C84.0020.0002] # HANGUL JUNGSEONG YU
3160 ; [.3C84.0020.0004] # HANGUL LETTER YU
FFD7 ; [.3C84.0020.0012] # HALFWIDTH HANGUL LETTER YU
1173 ; [.3C85.0020.0002] # HANGUL JUNGSEONG EU
3161 ; [.3C85.0020.0004] # HANGUL LETTER EU
FFDA ; [.3C85.0020.0012] # HALFWIDTH HANGUL LETTER EU
1174 ; [.3C86.0020.0002] # HANGUL JUNGSEONG YI
3162 ; [.3C86.0020.0004] # HANGUL LETTER YI
FFDB ; [.3C86.0020.0012] # HALFWIDTH HANGUL LETTER YI
1175 ; [.3C87.0020.0002] # HANGUL JUNGSEONG I
3163 ; [.3C87.0020.0004] # HANGUL LETTER I
FFDC ; [.3C87.0020.0012] # HALFWIDTH HANGUL LETTER I
1176 ; [.3C88.0020.0002] # HANGUL JUNGSEONG A-O
1177 ; [.3C89.0020.0002] # HANGUL JUNGSEONG A-U
1178 ; [.3C8A.0020.0002] # HANGUL JUNGSEONG YA-O
1179 ; [.3C8B.0020.0002] # HANGUL JUNGSEONG YA-YO
117A ; [.3C8C.0020.0002] # HANGUL JUNGSEONG EO-O
117B ; [.3C8D.0020.0002] # HANGUL JUNGSEONG EO-U
117C ; [.3C8E.0020.0002] # HANGUL JUNGSEONG EO-EU
117D ; [.3C8F.0020.0002] # HANGUL JUNGSEONG YEO-O
117E ; [.3C90.0020.0002] # HANGUL JUNGSEONG YEO-U
117F ; [.3C91.0020.0002] # HANGUL JUNGSEONG O-EO
1180 ; [.3C92.0020.0002] # HANGUL JUNGSEONG O-E
1181 ; [.3C93.0020.0002] # HANGUL JUNGSEONG O-YE
1182 ; [.3C94.0020.0002] # HANGUL JUNGSEONG O-O
1183 ; [.3C95.0020.0002] # HANGUL JUNGSEONG O-U
1184 ; [.3C96.0020.0002] # HANGUL JUNGSEONG YO-YA
3187 ; [.3C96.0020.0004] # HANGUL LETTER YO-YA
1185 ; [.3C97.0020.0002] # HANGUL JUNGSEONG YO-YAE
3188 ; [.3C97.0020.0004] # HANGUL LETTER YO-YAE
1186 ; [.3C98.0020.0002] # HANGUL JUNGSEONG YO-YEO
1187 ; [.3C99.0020.0002] # HANGUL JUNGSEONG YO-O
1188 ; [.3C9A.0020.0002] # HANGUL JUNGSEONG YO-I
3189 ; [.3C9A.0020.0004] # HANGUL LETTER YO-I
1189 ; [.3C9B.0020.0002] # HANGUL JUNGSEONG U-A
118A ; [.3C9C.0020.0002] # HANGUL JUNGSEONG U-AE
118B ; [.3C9D.0020.0002] # HANGUL JUNGSEONG U-EO-EU
118C ; [.3C9E.0020.0002] # HANGUL JUNGSEONG U-YE
118D ; [.3C9F.0020.0002] # HANGUL JUNGSEONG U-U
118E ; [.3CA0.0020.0002] # HANGUL JUNGSEONG YU-A
118F ; [.3CA1.0020.0002] # HANGUL JUNGSEONG YU-EO
1190 ; [.3CA2.0020.0002] # HANGUL JUNGSEONG YU-E
1191 ; [.3CA3.0020.0002] # HANGUL JUNGSEONG YU-YEO
318A ; [.3CA3.0020.0004] # HANGUL LETTER YU-YEO
1192 ; [.3CA4.0020.0002] # HANGUL JUNGSEONG YU-YE
318B ; [.3CA4.0020.0004] # HANGUL LETTER YU-YE
1193 ; [.3CA5.0020.0002] # HANGUL JUNGSEONG YU-U
1194 ; [.3CA6.0020.0002] # HANGUL JUNGSEONG YU-I
318C ; [.3CA6.0020.0004] # HANGUL LETTER YU-I
1195 ; [.3CA7.0020.0002] # HANGUL JUNGSEONG EU-U
1196 ; [.3CA8.0020.0002] # HANGUL JUNGSEONG EU-EU
1197 ; [.3CA9.0020.0002] # HANGUL JUNGSEONG YI-U
1198 ; [.3CAA.0020.0002] # HANGUL JUNGSEONG I-A
1199 ; [.3CAB.0020.0002] # HANGUL JUNGSEONG I-YA
119A ; [.3CAC.0020.0002] # HANGUL JUNGSEONG I-O
119B ; [.3CAD.0020.0002] # HANGUL JUNGSEONG I-U
119C ; [.3CAE.0020.0002] # HANGUL JUNGSEONG I-EU
119D ; [.3CAF.0020.0002] # HANGUL JUNGSEONG I-ARAEA
119E ; [.3CB0.0020.0002] # HANGUL JUNGSEONG ARAEA
318D ; [.3CB0.0020.0004] # HANGUL LETTER ARAEA
119F ; [.3CB1.0020.0002] # HANGUL JUNGSEONG ARAEA-EO
11A0 ; [.3CB2.0020.0002] # HANGUL JUNGSEONG ARAEA-U
11A1 ; [.3CB3.0020.0002] # HANGUL JUNGSEONG ARAEA-I
318E ; [.3CB3.0020.0004] # HANGUL LETTER ARAEAE
11A2 ; [.3CB4.0020.0002] # HANGUL JUNGSEONG SSANGARAEA
11A3 ; [.3CB5.0020.0002] # HANGUL JUNGSEONG A-EU
11A4 ; [.3CB6.0020.0002] # HANGUL JUNGSEONG YA-U
11A5 ; [.3CB7.0020.0002] # HANGUL JUNGSEONG YEO-YA
11A6 ; [.3CB8.0020.0002] # HANGUL JUNGSEONG O-YA
11A7 ; [.3CB9.0020.0002] # HANGUL JUNGSEONG O-YAE
D7B0 ; [.3CBA.0020.0002] # HANGUL JUNGSEONG O-YEO
D7B1 ; [.3CBB.0020.0002] # HANGUL JUNGSEONG O-O-I
D7B2 ; [.3CBC.0020.0002] # HANGUL JUNGSEONG YO-A
D7B3 ; [.3CBD.0020.0002] # HANGUL JUNGSEONG YO-AE
D7B4 ; [.3CBE.0020.0002] # HANGUL JUNGSEONG YO-EO
D7B5 ; [.3CBF.0020.0002] # HANGUL JUNGSEONG U-YEO
D7B6 ; [.3CC0.0020.0002] # HANGUL JUNGSEONG U-I-I
D7B7 ; [.3CC1.0020.0002] # HANGUL JUNGSEONG YU-AE
D7B8 ; [.3CC2.0020.0002] # HANGUL JUNGSEONG YU-O
D7B9 ; [.3CC3.0020.0002] # HANGUL JUNGSEONG EU-A
D7BA ; [.3CC4.0020.0002] # HANGUL JUNGSEONG EU-EO
D7BB ; [.3CC5.0020.0002] # HANGUL JUNGSEONG EU-E
D7BC ; [.3CC6.0020.0002] # HANGUL JUNGSEONG EU-O
D7BD ; [.3CC7.0020.0002] # HANGUL JUNGSEONG I-YA-O
D7BE ; [.3CC8.0020.0002] # HANGUL JUNGSEONG I-YAE
D7BF ; [.3CC9.0020.0002] # HANGUL JUNGSEONG I-YEO
D7C0 ; [.3CCA.0020.0002] # HANGUL JUNGSEONG I-YE
D7C1 ; [.3CCB.0020.0002] # HANGUL JUNGSEONG I-O-I
D7C2 ; [.3CCC.0020.0002] # HANGUL JUNGSEONG I-YO
D7C3 ; [.3CCD.0020.0002] # HANGUL JUNGSEONG I-YU
D7C4 ; [.3CCE.0020.0002] # HANGUL JUNGSEONG I-I
D7C5 ; [.3CCF.0020.0002] # HANGUL JUNGSEONG ARAEA-A
D7C6 ; [.3CD0.0020.0002] # HANGUL JUNGSEONG ARAEA-E
11A8 ; [.3CD1.0020.0002] # HANGUL JONGSEONG KIYEOK
11A9 ; [.3CD2.0020.0002] # HANGUL JONGSEONG SSANGKIYEOK
11AA ; [.3CD3.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS
3133 ; [.3CD3.0020.0004] # HANGUL LETTER KIYEOK-SIOS
FFA3 ; [.3CD3.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK-SIOS
11AB ; [.3CD4.0020.0002] # HANGUL JONGSEONG NIEUN
11AC ; [.3CD5.0020.0002] # HANGUL JONGSEONG NIEUN-CIEUC
3135 ; [.3CD5.0020.0004] # HANGUL LETTER NIEUN-CIEUC
FFA5 ; [.3CD5.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-CIEUC
11AD ; [.3CD6.0020.0002] # HANGUL JONGSEONG NIEUN-HIEUH
3136 ; [.3CD6.0020.0004] # HANGUL LETTER NIEUN-HIEUH
FFA6 ; [.3CD6.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-HIEUH
11AE ; [.3CD7.0020.0002] # HANGUL JONGSEONG TIKEUT
11AF ; [.3CD8.0020.0002] # HANGUL JONGSEONG RIEUL
11B0 ; [.3CD9.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK
313A ; [.3CD9.0020.0004] # HANGUL LETTER RIEUL-KIYEOK
FFAA ; [.3CD9.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
11B1 ; [.3CDA.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM
313B ; [.3CDA.0020.0004] # HANGUL LETTER RIEUL-MIEUM
FFAB ; [.3CDA.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-MIEUM
11B2 ; [.3CDB.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP
313C ; [.3CDB.0020.0004] # HANGUL LETTER RIEUL-PIEUP
FFAC ; [.3CDB.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PIEUP
11B3 ; [.3CDC.0020.0002] # HANGUL JONGSEONG RIEUL-SIOS
313D ; [.3CDC.0020.0004] # HANGUL LETTER RIEUL-SIOS
FFAD ; [.3CDC.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-SIOS
11B4 ; [.3CDD.0020.0002] # HANGUL JONGSEONG RIEUL-THIEUTH
313E ; [.3CDD.0020.0004] # HANGUL LETTER RIEUL-THIEUTH
FFAE ; [.3CDD.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
11B5 ; [.3CDE.0020.0002] # HANGUL JONGSEONG RIEUL-PHIEUPH
313F ; [.3CDE.0020.0004] # HANGUL LETTER RIEUL-PHIEUPH
FFAF ; [.3CDE.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
11B6 ; [.3CDF.0020.0002] # HANGUL JONGSEONG RIEUL-HIEUH
11B7 ; [.3CE0.0020.0002] # HANGUL JONGSEONG MIEUM
11B8 ; [.3CE1.0020.0002] # HANGUL JONGSEONG PIEUP
11B9 ; [.3CE2.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS
11BA ; [.3CE3.0020.0002] # HANGUL JONGSEONG SIOS
11BB ; [.3CE4.0020.0002] # HANGUL JONGSEONG SSANGSIOS
11BC ; [.3CE5.0020.0002] # HANGUL JONGSEONG IEUNG
11BD ; [.3CE6.0020.0002] # HANGUL JONGSEONG CIEUC
11BE ; [.3CE7.0020.0002] # HANGUL JONGSEONG CHIEUCH
11BF ; [.3CE8.0020.0002] # HANGUL JONGSEONG KHIEUKH
11C0 ; [.3CE9.0020.0002] # HANGUL JONGSEONG THIEUTH
11C1 ; [.3CEA.0020.0002] # HANGUL JONGSEONG PHIEUPH
11C2 ; [.3CEB.0020.0002] # HANGUL JONGSEONG HIEUH
11C3 ; [.3CEC.0020.0002] # HANGUL JONGSEONG KIYEOK-RIEUL
11C4 ; [.3CED.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
11C5 ; [.3CEE.0020.0002] # HANGUL JONGSEONG NIEUN-KIYEOK
11C6 ; [.3CEF.0020.0002] # HANGUL JONGSEONG NIEUN-TIKEUT
11C7 ; [.3CF0.0020.0002] # HANGUL JONGSEONG NIEUN-SIOS
3167 ; [.3CF0.0020.0004] # HANGUL LETTER NIEUN-SIOS
11C8 ; [.3CF1.0020.0002] # HANGUL JONGSEONG NIEUN-PANSIOS
3168 ; [.3CF1.0020.0004] # HANGUL LETTER NIEUN-PANSIOS
11C9 ; [.3CF2.0020.0002] # HANGUL JONGSEONG NIEUN-THIEUTH
11CA ; [.3CF3.0020.0002] # HANGUL JONGSEONG TIKEUT-KIYEOK
11CB ; [.3CF4.0020.0002] # HANGUL JONGSEONG TIKEUT-RIEUL
11CC ; [.3CF5.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
3169 ; [.3CF5.0020.0004] # HANGUL LETTER RIEUL-KIYEOK-SIOS
11CD ; [.3CF6.0020.0002] # HANGUL JONGSEONG RIEUL-NIEUN
11CE ; [.3CF7.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT
316A ; [.3CF7.0020.0004] # HANGUL LETTER RIEUL-TIKEUT
11CF ; [.3CF8.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
11D0 ; [.3CF9.0020.0002] # HANGUL JONGSEONG SSANGRIEUL
11D1 ; [.3CFA.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
11D2 ; [.3CFB.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
11D3 ; [.3CFC.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
316B ; [.3CFC.0020.0004] # HANGUL LETTER RIEUL-PIEUP-SIOS
11D4 ; [.3CFD.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
11D5 ; [.3CFE.0020.0002] # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
11D6 ; [.3CFF.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGSIOS
11D7 ; [.3D00.0020.0002] # HANGUL JONGSEONG RIEUL-PANSIOS
316C ; [.3D00.0020.0004] # HANGUL LETTER RIEUL-PANSIOS
11D8 ; [.3D01.0020.0002] # HANGUL JONGSEONG RIEUL-KHIEUKH
11D9 ; [.3D02.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH
316D ; [.3D02.0020.0004] # HANGUL LETTER RIEUL-YEORINHIEUH
11DA ; [.3D03.0020.0002] # HANGUL JONGSEONG MIEUM-KIYEOK
11DB ; [.3D04.0020.0002] # HANGUL JONGSEONG MIEUM-RIEUL
11DC ; [.3D05.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP
11DD ; [.3D06.0020.0002] # HANGUL JONGSEONG MIEUM-SIOS
316F ; [.3D06.0020.0004] # HANGUL LETTER MIEUM-SIOS
11DE ; [.3D07.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGSIOS
11DF ; [.3D08.0020.0002] # HANGUL JONGSEONG MIEUM-PANSIOS
3170 ; [.3D08.0020.0004] # HANGUL LETTER MIEUM-PANSIOS
11E0 ; [.3D09.0020.0002] # HANGUL JONGSEONG MIEUM-CHIEUCH
11E1 ; [.3D0A.0020.0002] # HANGUL JONGSEONG MIEUM-HIEUH
11E2 ; [.3D0B.0020.0002] # HANGUL JONGSEONG KAPYEOUNMIEUM
11E3 ; [.3D0C.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL
11E4 ; [.3D0D.0020.0002] # HANGUL JONGSEONG PIEUP-PHIEUPH
11E5 ; [.3D0E.0020.0002] # HANGUL JONGSEONG PIEUP-HIEUH
11E6 ; [.3D0F.0020.0002] # HANGUL JONGSEONG KAPYEOUNPIEUP
11E7 ; [.3D10.0020.0002] # HANGUL JONGSEONG SIOS-KIYEOK
11E8 ; [.3D11.0020.0002] # HANGUL JONGSEONG SIOS-TIKEUT
11E9 ; [.3D12.0020.0002] # HANGUL JONGSEONG SIOS-RIEUL
11EA ; [.3D13.0020.0002] # HANGUL JONGSEONG SIOS-PIEUP
11EB ; [.3D14.0020.0002] # HANGUL JONGSEONG PANSIOS
11EC ; [.3D15.0020.0002] # HANGUL JONGSEONG IEUNG-KIYEOK
11ED ; [.3D16.0020.0002] # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
11EE ; [.3D17.0020.0002] # HANGUL JONGSEONG SSANGIEUNG
11EF ; [.3D18.0020.0002] # HANGUL JONGSEONG IEUNG-KHIEUKH
11F0 ; [.3D19.0020.0002] # HANGUL JONGSEONG YESIEUNG
11F1 ; [.3D1A.0020.0002] # HANGUL JONGSEONG YESIEUNG-SIOS
3182 ; [.3D1A.0020.0004] # HANGUL LETTER YESIEUNG-SIOS
11F2 ; [.3D1B.0020.0002] # HANGUL JONGSEONG YESIEUNG-PANSIOS
3183 ; [.3D1B.0020.0004] # HANGUL LETTER YESIEUNG-PANSIOS
11F3 ; [.3D1C.0020.0002] # HANGUL JONGSEONG PHIEUPH-PIEUP
11F4 ; [.3D1D.0020.0002] # HANGUL JONGSEONG KAPYEOUNPHIEUPH
11F5 ; [.3D1E.0020.0002] # HANGUL JONGSEONG HIEUH-NIEUN
11F6 ; [.3D1F.0020.0002] # HANGUL JONGSEONG HIEUH-RIEUL
11F7 ; [.3D20.0020.0002] # HANGUL JONGSEONG HIEUH-MIEUM
11F8 ; [.3D21.0020.0002] # HANGUL JONGSEONG HIEUH-PIEUP
11F9 ; [.3D22.0020.0002] # HANGUL JONGSEONG YEORINHIEUH
11FA ; [.3D23.0020.0002] # HANGUL JONGSEONG KIYEOK-NIEUN
11FB ; [.3D24.0020.0002] # HANGUL JONGSEONG KIYEOK-PIEUP
11FC ; [.3D25.0020.0002] # HANGUL JONGSEONG KIYEOK-CHIEUCH
11FD ; [.3D26.0020.0002] # HANGUL JONGSEONG KIYEOK-KHIEUKH
11FE ; [.3D27.0020.0002] # HANGUL JONGSEONG KIYEOK-HIEUH
11FF ; [.3D28.0020.0002] # HANGUL JONGSEONG SSANGNIEUN
D7CB ; [.3D29.0020.0002] # HANGUL JONGSEONG NIEUN-RIEUL
D7CC ; [.3D2A.0020.0002] # HANGUL JONGSEONG NIEUN-CHIEUCH
D7CD ; [.3D2B.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT
D7CE ; [.3D2C.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT-PIEUP
D7CF ; [.3D2D.0020.0002] # HANGUL JONGSEONG TIKEUT-PIEUP
D7D0 ; [.3D2E.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS
D7D1 ; [.3D2F.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK
D7D2 ; [.3D30.0020.0002] # HANGUL JONGSEONG TIKEUT-CIEUC
D7D3 ; [.3D31.0020.0002] # HANGUL JONGSEONG TIKEUT-CHIEUCH
D7D4 ; [.3D32.0020.0002] # HANGUL JONGSEONG TIKEUT-THIEUTH
D7D5 ; [.3D33.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGKIYEOK
D7D6 ; [.3D34.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH
D7D7 ; [.3D35.0020.0002] # HANGUL JONGSEONG SSANGRIEUL-KHIEUKH
D7D8 ; [.3D36.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-HIEUH
D7D9 ; [.3D37.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT
D7DA ; [.3D38.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH
D7DB ; [.3D39.0020.0002] # HANGUL JONGSEONG RIEUL-YESIEUNG
D7DC ; [.3D3A.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH
D7DD ; [.3D3B.0020.0002] # HANGUL JONGSEONG KAPYEOUNRIEUL
D7DE ; [.3D3C.0020.0002] # HANGUL JONGSEONG MIEUM-NIEUN
D7DF ; [.3D3D.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGNIEUN
D7E0 ; [.3D3E.0020.0002] # HANGUL JONGSEONG SSANGMIEUM
D7E1 ; [.3D3F.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP-SIOS
D7E2 ; [.3D40.0020.0002] # HANGUL JONGSEONG MIEUM-CIEUC
D7E3 ; [.3D41.0020.0002] # HANGUL JONGSEONG PIEUP-TIKEUT
D7E4 ; [.3D42.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH
D7E5 ; [.3D43.0020.0002] # HANGUL JONGSEONG PIEUP-MIEUM
D7E6 ; [.3D44.0020.0002] # HANGUL JONGSEONG SSANGPIEUP
D7E7 ; [.3D45.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS-TIKEUT
D7E8 ; [.3D46.0020.0002] # HANGUL JONGSEONG PIEUP-CIEUC
D7E9 ; [.3D47.0020.0002] # HANGUL JONGSEONG PIEUP-CHIEUCH
D7EA ; [.3D48.0020.0002] # HANGUL JONGSEONG SIOS-MIEUM
D7EB ; [.3D49.0020.0002] # HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP
D7EC ; [.3D4A.0020.0002] # HANGUL JONGSEONG SSANGSIOS-KIYEOK
D7ED ; [.3D4B.0020.0002] # HANGUL JONGSEONG SSANGSIOS-TIKEUT
D7EE ; [.3D4C.0020.0002] # HANGUL JONGSEONG SIOS-PANSIOS
D7EF ; [.3D4D.0020.0002] # HANGUL JONGSEONG SIOS-CIEUC
D7F0 ; [.3D4E.0020.0002] # HANGUL JONGSEONG SIOS-CHIEUCH
D7F1 ; [.3D4F.0020.0002] # HANGUL JONGSEONG SIOS-THIEUTH
D7F2 ; [.3D50.0020.0002] # HANGUL JONGSEONG SIOS-HIEUH
D7F3 ; [.3D51.0020.0002] # HANGUL JONGSEONG PANSIOS-PIEUP
D7F4 ; [.3D52.0020.0002] # HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP
D7F5 ; [.3D53.0020.0002] # HANGUL JONGSEONG YESIEUNG-MIEUM
D7F6 ; [.3D54.0020.0002] # HANGUL JONGSEONG YESIEUNG-HIEUH
D7F7 ; [.3D55.0020.0002] # HANGUL JONGSEONG CIEUC-PIEUP
D7F8 ; [.3D56.0020.0002] # HANGUL JONGSEONG CIEUC-SSANGPIEUP
D7F9 ; [.3D57.0020.0002] # HANGUL JONGSEONG SSANGCIEUC
D7FA ; [.3D58.0020.0002] # HANGUL JONGSEONG PHIEUPH-SIOS
D7FB ; [.3D59.0020.0002] # HANGUL JONGSEONG PHIEUPH-THIEUTH
3041 ; [.3D5A.0020.000D] # HIRAGANA LETTER SMALL A
3042 ; [.3D5A.0020.000E] # HIRAGANA LETTER A
30A1 ; [.3D5A.0020.000F] # KATAKANA LETTER SMALL A
FF67 ; [.3D5A.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL A
30A2 ; [.3D5A.0020.0011] # KATAKANA LETTER A
FF71 ; [.3D5A.0020.0012] # HALFWIDTH KATAKANA LETTER A
32D0 ; [.3D5A.0020.0013] # CIRCLED KATAKANA A
3303 ; [.3D5A.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE AARU
3300 ; [.3D5A.0020.001C][.3D74.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D6E.0020.001C] # SQUARE APAATO
3301 ; [.3D5A.0020.001C][.3D84.0020.001C][.3D76.0020.001C][.3D5A.0020.001C] # SQUARE ARUHUA
3302 ; [.3D5A.0020.001C][.3D8B.0020.001C][.3D77.0020.001C][.0000.0038.001C][.3D5A.0020.001C] # SQUARE ANPEA
3043 ; [.3D5B.0020.000D] # HIRAGANA LETTER SMALL I
3044 ; [.3D5B.0020.000E] # HIRAGANA LETTER I
30A3 ; [.3D5B.0020.000F] # KATAKANA LETTER SMALL I
FF68 ; [.3D5B.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL I
30A4 ; [.3D5B.0020.0011] # KATAKANA LETTER I
FF72 ; [.3D5B.0020.0012] # HALFWIDTH KATAKANA LETTER I
32D1 ; [.3D5B.0020.0013] # CIRCLED KATAKANA I
3304 ; [.3D5B.0020.001C][.3D70.0020.001C][.3D8B.0020.001C][.3D62.0020.001C][.0000.0037.001C] # SQUARE ININGU
3305 ; [.3D5B.0020.001C][.3D8B.0020.001C][.3D6B.0020.001C] # SQUARE INTI
3045 ; [.3D5C.0020.000D] # HIRAGANA LETTER SMALL U
3046 ; [.3D5C.0020.000E] # HIRAGANA LETTER U
30A5 ; [.3D5C.0020.000F] # KATAKANA LETTER SMALL U
FF69 ; [.3D5C.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL U
30A6 ; [.3D5C.0020.0011] # KATAKANA LETTER U
FF73 ; [.3D5C.0020.0012] # HALFWIDTH KATAKANA LETTER U
32D2 ; [.3D5C.0020.0013] # CIRCLED KATAKANA U
3094 ; [.3D5C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER VU
30F4 ; [.3D5C.0020.0011][.0000.0037.0002] # KATAKANA LETTER VU
3306 ; [.3D5C.0020.001C][.3D5F.0020.001C][.3D8B.0020.001C] # SQUARE UON
1B000 ; [.3D5D.0020.0011] # KATAKANA LETTER ARCHAIC E
3047 ; [.3D5E.0020.000D] # HIRAGANA LETTER SMALL E
3048 ; [.3D5E.0020.000E] # HIRAGANA LETTER E
30A7 ; [.3D5E.0020.000F] # KATAKANA LETTER SMALL E
FF6A ; [.3D5E.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL E
30A8 ; [.3D5E.0020.0011] # KATAKANA LETTER E
FF74 ; [.3D5E.0020.0012] # HALFWIDTH KATAKANA LETTER E
32D3 ; [.3D5E.0020.0013] # CIRCLED KATAKANA E
3308 ; [.3D5E.0020.001C][.1C0E.0020.001C][.3D60.0020.001C][.1C0E.0020.001C] # SQUARE EEKAA
3307 ; [.3D5E.0020.001C][.3D67.0020.001C][.3D62.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE ESUKUUDO
3049 ; [.3D5F.0020.000D] # HIRAGANA LETTER SMALL O
304A ; [.3D5F.0020.000E] # HIRAGANA LETTER O
30A9 ; [.3D5F.0020.000F] # KATAKANA LETTER SMALL O
FF6B ; [.3D5F.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL O
30AA ; [.3D5F.0020.0011] # KATAKANA LETTER O
FF75 ; [.3D5F.0020.0012] # HALFWIDTH KATAKANA LETTER O
32D4 ; [.3D5F.0020.0013] # CIRCLED KATAKANA O
330A ; [.3D5F.0020.001C][.1C0E.0020.001C][.3D7B.0020.001C] # SQUARE OOMU
3309 ; [.3D5F.0020.001C][.3D8B.0020.001C][.3D67.0020.001C] # SQUARE ONSU
3095 ; [.3D60.0020.000D] # HIRAGANA LETTER SMALL KA
304B ; [.3D60.0020.000E] # HIRAGANA LETTER KA
30F5 ; [.3D60.0020.000F] # KATAKANA LETTER SMALL KA
30AB ; [.3D60.0020.0011] # KATAKANA LETTER KA
FF76 ; [.3D60.0020.0012] # HALFWIDTH KATAKANA LETTER KA
32D5 ; [.3D60.0020.0013] # CIRCLED KATAKANA KA
304C ; [.3D60.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GA
30AC ; [.3D60.0020.0011][.0000.0037.0002] # KATAKANA LETTER GA
330B ; [.3D60.0020.001C][.3D5B.0020.001C][.3D83.0020.001C] # SQUARE KAIRI
330C ; [.3D60.0020.001C][.3D82.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE KARATTO
330D ; [.3D60.0020.001C][.3D86.0020.001C][.3D83.0020.001C][.1C0E.0020.001C] # SQUARE KARORII
330E ; [.3D60.0020.001C][.0000.0037.001C][.3D86.0020.001C][.3D8B.0020.001C] # SQUARE GARON
330F ; [.3D60.0020.001C][.0000.0037.001C][.3D8B.0020.001C][.3D79.0020.001C] # SQUARE GANMA
304D ; [.3D61.0020.000E] # HIRAGANA LETTER KI
30AD ; [.3D61.0020.0011] # KATAKANA LETTER KI
FF77 ; [.3D61.0020.0012] # HALFWIDTH KATAKANA LETTER KI
32D6 ; [.3D61.0020.0013] # CIRCLED KATAKANA KI
304E ; [.3D61.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GI
30AE ; [.3D61.0020.0011][.0000.0037.0002] # KATAKANA LETTER GI
3310 ; [.3D61.0020.001C][.0000.0037.001C][.3D60.0020.001C][.0000.0037.001C] # SQUARE GIGA
3311 ; [.3D61.0020.001C][.0000.0037.001C][.3D70.0020.001C][.1C0E.0020.001C] # SQUARE GINII
3312 ; [.3D61.0020.001C][.3D7F.0020.001C][.3D83.0020.001C][.1C0E.0020.001C] # SQUARE KYURII
3313 ; [.3D61.0020.001C][.0000.0037.001C][.3D84.0020.001C][.3D6A.0020.001C][.0000.0037.001C][.1C0E.0020.001C] # SQUARE GIRUDAA
3314 ; [.3D61.0020.001C][.3D86.0020.001C] # SQUARE KIRO
3315 ; [.3D61.0020.001C][.3D86.0020.001C][.3D62.0020.001C][.0000.0037.001C][.3D82.0020.001C][.3D7B.0020.001C] # SQUARE KIROGURAMU
3316 ; [.3D61.0020.001C][.3D86.0020.001C][.3D7C.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE KIROMEETORU
3317 ; [.3D61.0020.001C][.3D86.0020.001C][.3D87.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE KIROWATTO
304F ; [.3D62.0020.000E] # HIRAGANA LETTER KU
31F0 ; [.3D62.0020.000F] # KATAKANA LETTER SMALL KU
30AF ; [.3D62.0020.0011] # KATAKANA LETTER KU
FF78 ; [.3D62.0020.0012] # HALFWIDTH KATAKANA LETTER KU
32D7 ; [.3D62.0020.0013] # CIRCLED KATAKANA KU
3050 ; [.3D62.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GU
30B0 ; [.3D62.0020.0011][.0000.0037.0002] # KATAKANA LETTER GU
3318 ; [.3D62.0020.001C][.0000.0037.001C][.3D82.0020.001C][.3D7B.0020.001C] # SQUARE GURAMU
3319 ; [.3D62.0020.001C][.0000.0037.001C][.3D82.0020.001C][.3D7B.0020.001C][.3D6E.0020.001C][.3D8B.0020.001C] # SQUARE GURAMUTON
331A ; [.3D62.0020.001C][.3D84.0020.001C][.3D68.0020.001C][.0000.0037.001C][.3D5B.0020.001C][.3D86.0020.001C] # SQUARE KURUZEIRO
331B ; [.3D62.0020.001C][.3D86.0020.001C][.1C0E.0020.001C][.3D72.0020.001C] # SQUARE KUROONE
3096 ; [.3D63.0020.000D] # HIRAGANA LETTER SMALL KE
3051 ; [.3D63.0020.000E] # HIRAGANA LETTER KE
30F6 ; [.3D63.0020.000F] # KATAKANA LETTER SMALL KE
30B1 ; [.3D63.0020.0011] # KATAKANA LETTER KE
FF79 ; [.3D63.0020.0012] # HALFWIDTH KATAKANA LETTER KE
32D8 ; [.3D63.0020.0013] # CIRCLED KATAKANA KE
3052 ; [.3D63.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GE
30B2 ; [.3D63.0020.0011][.0000.0037.0002] # KATAKANA LETTER GE
331C ; [.3D63.0020.001C][.1C0E.0020.001C][.3D67.0020.001C] # SQUARE KEESU
3053 ; [.3D64.0020.000E] # HIRAGANA LETTER KO
30B3 ; [.3D64.0020.0011] # KATAKANA LETTER KO
FF7A ; [.3D64.0020.0012] # HALFWIDTH KATAKANA LETTER KO
32D9 ; [.3D64.0020.0013] # CIRCLED KATAKANA KO
3054 ; [.3D64.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GO
30B4 ; [.3D64.0020.0011][.0000.0037.0002] # KATAKANA LETTER GO
331E ; [.3D64.0020.001C][.1C0E.0020.001C][.3D78.0020.001C][.0000.0038.001C] # SQUARE KOOPO
1F201 ; [.3D64.0020.001C][.3D64.0020.001C] # SQUARED KATAKANA KOKO
30FF ; [.3D64.0020.0016][.3D6E.0020.0016] # KATAKANA DIGRAPH KOTO
331D ; [.3D64.0020.001C][.3D84.0020.001C][.3D6F.0020.001C] # SQUARE KORUNA
3055 ; [.3D65.0020.000E] # HIRAGANA LETTER SA
30B5 ; [.3D65.0020.0011] # KATAKANA LETTER SA
FF7B ; [.3D65.0020.0012] # HALFWIDTH KATAKANA LETTER SA
32DA ; [.3D65.0020.0013] # CIRCLED KATAKANA SA
1F202 ; [.3D65.0020.001C] # SQUARED KATAKANA SA
3056 ; [.3D65.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZA
30B6 ; [.3D65.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZA
331F ; [.3D65.0020.001C][.3D5B.0020.001C][.3D62.0020.001C][.3D84.0020.001C] # SQUARE SAIKURU
3320 ; [.3D65.0020.001C][.3D8B.0020.001C][.3D6B.0020.001C][.1C0E.0020.001C][.3D7B.0020.001C] # SQUARE SANTIIMU
3057 ; [.3D66.0020.000E] # HIRAGANA LETTER SI
31F1 ; [.3D66.0020.000F] # KATAKANA LETTER SMALL SI
30B7 ; [.3D66.0020.0011] # KATAKANA LETTER SI
FF7C ; [.3D66.0020.0012] # HALFWIDTH KATAKANA LETTER SI
32DB ; [.3D66.0020.0013] # CIRCLED KATAKANA SI
3058 ; [.3D66.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZI
30B8 ; [.3D66.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZI
3006 ; [.3D66.0020.0004][.3D7C.0020.0004] # IDEOGRAPHIC CLOSING MARK
3321 ; [.3D66.0020.001C][.3D83.0020.001C][.3D8B.0020.001C][.3D62.0020.001C][.0000.0037.001C] # SQUARE SIRINGU
3059 ; [.3D67.0020.000E] # HIRAGANA LETTER SU
31F2 ; [.3D67.0020.000F] # KATAKANA LETTER SMALL SU
30B9 ; [.3D67.0020.0011] # KATAKANA LETTER SU
FF7D ; [.3D67.0020.0012] # HALFWIDTH KATAKANA LETTER SU
32DC ; [.3D67.0020.0013] # CIRCLED KATAKANA SU
305A ; [.3D67.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZU
30BA ; [.3D67.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZU
305B ; [.3D68.0020.000E] # HIRAGANA LETTER SE
30BB ; [.3D68.0020.0011] # KATAKANA LETTER SE
FF7E ; [.3D68.0020.0012] # HALFWIDTH KATAKANA LETTER SE
32DD ; [.3D68.0020.0013] # CIRCLED KATAKANA SE
305C ; [.3D68.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZE
30BC ; [.3D68.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZE
3322 ; [.3D68.0020.001C][.3D8B.0020.001C][.3D6B.0020.001C] # SQUARE SENTI
3323 ; [.3D68.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C] # SQUARE SENTO
305D ; [.3D69.0020.000E] # HIRAGANA LETTER SO
30BD ; [.3D69.0020.0011] # KATAKANA LETTER SO
FF7F ; [.3D69.0020.0012] # HALFWIDTH KATAKANA LETTER SO
32DE ; [.3D69.0020.0013] # CIRCLED KATAKANA SO
305E ; [.3D69.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZO
30BE ; [.3D69.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZO
305F ; [.3D6A.0020.000E] # HIRAGANA LETTER TA
30BF ; [.3D6A.0020.0011] # KATAKANA LETTER TA
FF80 ; [.3D6A.0020.0012] # HALFWIDTH KATAKANA LETTER TA
32DF ; [.3D6A.0020.0013] # CIRCLED KATAKANA TA
3060 ; [.3D6A.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DA
30C0 ; [.3D6A.0020.0011][.0000.0037.0002] # KATAKANA LETTER DA
3324 ; [.3D6A.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D67.0020.001C] # SQUARE DAASU
3061 ; [.3D6B.0020.000E] # HIRAGANA LETTER TI
30C1 ; [.3D6B.0020.0011] # KATAKANA LETTER TI
FF81 ; [.3D6B.0020.0012] # HALFWIDTH KATAKANA LETTER TI
32E0 ; [.3D6B.0020.0013] # CIRCLED KATAKANA TI
3062 ; [.3D6B.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DI
30C2 ; [.3D6B.0020.0011][.0000.0037.0002] # KATAKANA LETTER DI
3063 ; [.3D6C.0020.000D] # HIRAGANA LETTER SMALL TU
3064 ; [.3D6C.0020.000E] # HIRAGANA LETTER TU
30C3 ; [.3D6C.0020.000F] # KATAKANA LETTER SMALL TU
FF6F ; [.3D6C.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL TU
30C4 ; [.3D6C.0020.0011] # KATAKANA LETTER TU
FF82 ; [.3D6C.0020.0012] # HALFWIDTH KATAKANA LETTER TU
32E1 ; [.3D6C.0020.0013] # CIRCLED KATAKANA TU
3065 ; [.3D6C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DU
30C5 ; [.3D6C.0020.0011][.0000.0037.0002] # KATAKANA LETTER DU
3066 ; [.3D6D.0020.000E] # HIRAGANA LETTER TE
30C6 ; [.3D6D.0020.0011] # KATAKANA LETTER TE
FF83 ; [.3D6D.0020.0012] # HALFWIDTH KATAKANA LETTER TE
32E2 ; [.3D6D.0020.0013] # CIRCLED KATAKANA TE
3067 ; [.3D6D.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DE
30C7 ; [.3D6D.0020.0011][.0000.0037.0002] # KATAKANA LETTER DE
1F213 ; [.3D6D.0020.001C][.0000.0037.001C] # SQUARED KATAKANA DE
3325 ; [.3D6D.0020.001C][.0000.0037.001C][.3D66.0020.001C] # SQUARE DESI
3068 ; [.3D6E.0020.000E] # HIRAGANA LETTER TO
31F3 ; [.3D6E.0020.000F] # KATAKANA LETTER SMALL TO
30C8 ; [.3D6E.0020.0011] # KATAKANA LETTER TO
FF84 ; [.3D6E.0020.0012] # HALFWIDTH KATAKANA LETTER TO
32E3 ; [.3D6E.0020.0013] # CIRCLED KATAKANA TO
3069 ; [.3D6E.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DO
30C9 ; [.3D6E.0020.0011][.0000.0037.0002] # KATAKANA LETTER DO
3326 ; [.3D6E.0020.001C][.0000.0037.001C][.3D84.0020.001C] # SQUARE DORU
3327 ; [.3D6E.0020.001C][.3D8B.0020.001C] # SQUARE TON
306A ; [.3D6F.0020.000E] # HIRAGANA LETTER NA
30CA ; [.3D6F.0020.0011] # KATAKANA LETTER NA
FF85 ; [.3D6F.0020.0012] # HALFWIDTH KATAKANA LETTER NA
32E4 ; [.3D6F.0020.0013] # CIRCLED KATAKANA NA
3328 ; [.3D6F.0020.001C][.3D73.0020.001C] # SQUARE NANO
306B ; [.3D70.0020.000E] # HIRAGANA LETTER NI
30CB ; [.3D70.0020.0011] # KATAKANA LETTER NI
FF86 ; [.3D70.0020.0012] # HALFWIDTH KATAKANA LETTER NI
32E5 ; [.3D70.0020.0013] # CIRCLED KATAKANA NI
306C ; [.3D71.0020.000E] # HIRAGANA LETTER NU
31F4 ; [.3D71.0020.000F] # KATAKANA LETTER SMALL NU
30CC ; [.3D71.0020.0011] # KATAKANA LETTER NU
FF87 ; [.3D71.0020.0012] # HALFWIDTH KATAKANA LETTER NU
32E6 ; [.3D71.0020.0013] # CIRCLED KATAKANA NU
306D ; [.3D72.0020.000E] # HIRAGANA LETTER NE
30CD ; [.3D72.0020.0011] # KATAKANA LETTER NE
FF88 ; [.3D72.0020.0012] # HALFWIDTH KATAKANA LETTER NE
32E7 ; [.3D72.0020.0013] # CIRCLED KATAKANA NE
306E ; [.3D73.0020.000E] # HIRAGANA LETTER NO
30CE ; [.3D73.0020.0011] # KATAKANA LETTER NO
FF89 ; [.3D73.0020.0012] # HALFWIDTH KATAKANA LETTER NO
32E8 ; [.3D73.0020.0013] # CIRCLED KATAKANA NO
3329 ; [.3D73.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE NOTTO
306F ; [.3D74.0020.000E] # HIRAGANA LETTER HA
31F5 ; [.3D74.0020.000F] # KATAKANA LETTER SMALL HA
30CF ; [.3D74.0020.0011] # KATAKANA LETTER HA
FF8A ; [.3D74.0020.0012] # HALFWIDTH KATAKANA LETTER HA
32E9 ; [.3D74.0020.0013] # CIRCLED KATAKANA HA
3070 ; [.3D74.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BA
30D0 ; [.3D74.0020.0011][.0000.0037.0002] # KATAKANA LETTER BA
3071 ; [.3D74.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PA
30D1 ; [.3D74.0020.0011][.0000.0038.0002] # KATAKANA LETTER PA
332B ; [.3D74.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D68.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C] # SQUARE PAASENTO
332C ; [.3D74.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D6C.0020.001C] # SQUARE PAATU
332D ; [.3D74.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D85.0020.001C][.3D84.0020.001C] # SQUARE BAARERU
332A ; [.3D74.0020.001C][.3D5B.0020.001C][.3D6C.0020.001C] # SQUARE HAITU
3072 ; [.3D75.0020.000E] # HIRAGANA LETTER HI
31F6 ; [.3D75.0020.000F] # KATAKANA LETTER SMALL HI
30D2 ; [.3D75.0020.0011] # KATAKANA LETTER HI
FF8B ; [.3D75.0020.0012] # HALFWIDTH KATAKANA LETTER HI
32EA ; [.3D75.0020.0013] # CIRCLED KATAKANA HI
3073 ; [.3D75.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BI
30D3 ; [.3D75.0020.0011][.0000.0037.0002] # KATAKANA LETTER BI
3074 ; [.3D75.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PI
30D4 ; [.3D75.0020.0011][.0000.0038.0002] # KATAKANA LETTER PI
332E ; [.3D75.0020.001C][.0000.0038.001C][.3D5A.0020.001C][.3D67.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE PIASUTORU
332F ; [.3D75.0020.001C][.0000.0038.001C][.3D62.0020.001C][.3D84.0020.001C] # SQUARE PIKURU
3330 ; [.3D75.0020.001C][.0000.0038.001C][.3D64.0020.001C] # SQUARE PIKO
3331 ; [.3D75.0020.001C][.0000.0037.001C][.3D84.0020.001C] # SQUARE BIRU
3075 ; [.3D76.0020.000E] # HIRAGANA LETTER HU
31F7 ; [.3D76.0020.000F] # KATAKANA LETTER SMALL HU
30D5 ; [.3D76.0020.0011] # KATAKANA LETTER HU
FF8C ; [.3D76.0020.0012] # HALFWIDTH KATAKANA LETTER HU
32EB ; [.3D76.0020.0013] # CIRCLED KATAKANA HU
3076 ; [.3D76.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BU
30D6 ; [.3D76.0020.0011][.0000.0037.0002] # KATAKANA LETTER BU
3077 ; [.3D76.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PU
30D7 ; [.3D76.0020.0011][.0000.0038.0002] # KATAKANA LETTER PU
3332 ; [.3D76.0020.001C][.3D5A.0020.001C][.3D82.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE HUARADDO
3333 ; [.3D76.0020.001C][.3D5B.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C] # SQUARE HUIITO
3334 ; [.3D76.0020.001C][.0000.0037.001C][.3D6C.0020.001C][.3D66.0020.001C][.3D5E.0020.001C][.3D84.0020.001C] # SQUARE BUSSYERU
3335 ; [.3D76.0020.001C][.3D82.0020.001C][.3D8B.0020.001C] # SQUARE HURAN
3078 ; [.3D77.0020.000E] # HIRAGANA LETTER HE
31F8 ; [.3D77.0020.000F] # KATAKANA LETTER SMALL HE
30D8 ; [.3D77.0020.0011] # KATAKANA LETTER HE
FF8D ; [.3D77.0020.0012] # HALFWIDTH KATAKANA LETTER HE
32EC ; [.3D77.0020.0013] # CIRCLED KATAKANA HE
3079 ; [.3D77.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BE
30D9 ; [.3D77.0020.0011][.0000.0037.0002] # KATAKANA LETTER BE
307A ; [.3D77.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PE
30DA ; [.3D77.0020.0011][.0000.0038.0002] # KATAKANA LETTER PE
333B ; [.3D77.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D66.0020.001C][.0000.0037.001C] # SQUARE PEEZI
333C ; [.3D77.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D6A.0020.001C] # SQUARE BEETA
3336 ; [.3D77.0020.001C][.3D62.0020.001C][.3D6A.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE HEKUTAARU
3337 ; [.3D77.0020.001C][.0000.0038.001C][.3D69.0020.001C] # SQUARE PESO
3338 ; [.3D77.0020.001C][.0000.0038.001C][.3D70.0020.001C][.3D75.0020.001C] # SQUARE PENIHI
3339 ; [.3D77.0020.001C][.3D84.0020.001C][.3D6C.0020.001C] # SQUARE HERUTU
333A ; [.3D77.0020.001C][.0000.0038.001C][.3D8B.0020.001C][.3D67.0020.001C] # SQUARE PENSU
307B ; [.3D78.0020.000E] # HIRAGANA LETTER HO
31F9 ; [.3D78.0020.000F] # KATAKANA LETTER SMALL HO
30DB ; [.3D78.0020.0011] # KATAKANA LETTER HO
FF8E ; [.3D78.0020.0012] # HALFWIDTH KATAKANA LETTER HO
32ED ; [.3D78.0020.0013] # CIRCLED KATAKANA HO
307C ; [.3D78.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BO
30DC ; [.3D78.0020.0011][.0000.0037.0002] # KATAKANA LETTER BO
307D ; [.3D78.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PO
30DD ; [.3D78.0020.0011][.0000.0038.0002] # KATAKANA LETTER PO
3341 ; [.3D78.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE HOORU
3342 ; [.3D78.0020.001C][.1C0E.0020.001C][.3D8B.0020.001C] # SQUARE HOON
333D ; [.3D78.0020.001C][.0000.0038.001C][.3D5B.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C] # SQUARE POINTO
1F200 ; [.3D78.0020.001C][.3D60.0020.001C] # SQUARE HIRAGANA HOKA
333E ; [.3D78.0020.001C][.0000.0037.001C][.3D84.0020.001C][.3D6E.0020.001C] # SQUARE BORUTO
333F ; [.3D78.0020.001C][.3D8B.0020.001C] # SQUARE HON
3340 ; [.3D78.0020.001C][.0000.0038.001C][.3D8B.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE PONDO
307E ; [.3D79.0020.000E] # HIRAGANA LETTER MA
30DE ; [.3D79.0020.0011] # KATAKANA LETTER MA
FF8F ; [.3D79.0020.0012] # HALFWIDTH KATAKANA LETTER MA
32EE ; [.3D79.0020.0013] # CIRCLED KATAKANA MA
3343 ; [.3D79.0020.001C][.3D5B.0020.001C][.3D62.0020.001C][.3D86.0020.001C] # SQUARE MAIKURO
3344 ; [.3D79.0020.001C][.3D5B.0020.001C][.3D84.0020.001C] # SQUARE MAIRU
303C ; [.3D79.0020.0004][.3D67.0020.0004] # MASU MARK
3345 ; [.3D79.0020.001C][.3D6C.0020.001C][.3D74.0020.001C] # SQUARE MAHHA
3346 ; [.3D79.0020.001C][.3D84.0020.001C][.3D62.0020.001C] # SQUARE MARUKU
3347 ; [.3D79.0020.001C][.3D8B.0020.001C][.3D66.0020.001C][.3D81.0020.001C][.3D8B.0020.001C] # SQUARE MANSYON
307F ; [.3D7A.0020.000E] # HIRAGANA LETTER MI
30DF ; [.3D7A.0020.0011] # KATAKANA LETTER MI
FF90 ; [.3D7A.0020.0012] # HALFWIDTH KATAKANA LETTER MI
32EF ; [.3D7A.0020.0013] # CIRCLED KATAKANA MI
3348 ; [.3D7A.0020.001C][.3D62.0020.001C][.3D86.0020.001C][.3D8B.0020.001C] # SQUARE MIKURON
3349 ; [.3D7A.0020.001C][.3D83.0020.001C] # SQUARE MIRI
334A ; [.3D7A.0020.001C][.3D83.0020.001C][.3D74.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE MIRIBAARU
3080 ; [.3D7B.0020.000E] # HIRAGANA LETTER MU
31FA ; [.3D7B.0020.000F] # KATAKANA LETTER SMALL MU
30E0 ; [.3D7B.0020.0011] # KATAKANA LETTER MU
FF91 ; [.3D7B.0020.0012] # HALFWIDTH KATAKANA LETTER MU
32F0 ; [.3D7B.0020.0013] # CIRCLED KATAKANA MU
3081 ; [.3D7C.0020.000E] # HIRAGANA LETTER ME
30E1 ; [.3D7C.0020.0011] # KATAKANA LETTER ME
FF92 ; [.3D7C.0020.0012] # HALFWIDTH KATAKANA LETTER ME
32F1 ; [.3D7C.0020.0013] # CIRCLED KATAKANA ME
334D ; [.3D7C.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE MEETORU
334B ; [.3D7C.0020.001C][.3D60.0020.001C][.0000.0037.001C] # SQUARE MEGA
334C ; [.3D7C.0020.001C][.3D60.0020.001C][.0000.0037.001C][.3D6E.0020.001C][.3D8B.0020.001C] # SQUARE MEGATON
3082 ; [.3D7D.0020.000E] # HIRAGANA LETTER MO
30E2 ; [.3D7D.0020.0011] # KATAKANA LETTER MO
FF93 ; [.3D7D.0020.0012] # HALFWIDTH KATAKANA LETTER MO
32F2 ; [.3D7D.0020.0013] # CIRCLED KATAKANA MO
3083 ; [.3D7E.0020.000D] # HIRAGANA LETTER SMALL YA
3084 ; [.3D7E.0020.000E] # HIRAGANA LETTER YA
30E3 ; [.3D7E.0020.000F] # KATAKANA LETTER SMALL YA
FF6C ; [.3D7E.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YA
30E4 ; [.3D7E.0020.0011] # KATAKANA LETTER YA
FF94 ; [.3D7E.0020.0012] # HALFWIDTH KATAKANA LETTER YA
32F3 ; [.3D7E.0020.0013] # CIRCLED KATAKANA YA
334E ; [.3D7E.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE YAADO
334F ; [.3D7E.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE YAARU
3085 ; [.3D7F.0020.000D] # HIRAGANA LETTER SMALL YU
3086 ; [.3D7F.0020.000E] # HIRAGANA LETTER YU
30E5 ; [.3D7F.0020.000F] # KATAKANA LETTER SMALL YU
FF6D ; [.3D7F.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YU
30E6 ; [.3D7F.0020.0011] # KATAKANA LETTER YU
FF95 ; [.3D7F.0020.0012] # HALFWIDTH KATAKANA LETTER YU
32F4 ; [.3D7F.0020.0013] # CIRCLED KATAKANA YU
3350 ; [.3D7F.0020.001C][.3D5A.0020.001C][.3D8B.0020.001C] # SQUARE YUAN
1B001 ; [.3D80.0020.000E] # HIRAGANA LETTER ARCHAIC YE
3087 ; [.3D81.0020.000D] # HIRAGANA LETTER SMALL YO
3088 ; [.3D81.0020.000E] # HIRAGANA LETTER YO
30E7 ; [.3D81.0020.000F] # KATAKANA LETTER SMALL YO
FF6E ; [.3D81.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YO
30E8 ; [.3D81.0020.0011] # KATAKANA LETTER YO
FF96 ; [.3D81.0020.0012] # HALFWIDTH KATAKANA LETTER YO
32F5 ; [.3D81.0020.0013] # CIRCLED KATAKANA YO
309F ; [.3D81.0020.0016][.3D83.0020.0016] # HIRAGANA DIGRAPH YORI
3089 ; [.3D82.0020.000E] # HIRAGANA LETTER RA
31FB ; [.3D82.0020.000F] # KATAKANA LETTER SMALL RA
30E9 ; [.3D82.0020.0011] # KATAKANA LETTER RA
FF97 ; [.3D82.0020.0012] # HALFWIDTH KATAKANA LETTER RA
32F6 ; [.3D82.0020.0013] # CIRCLED KATAKANA RA
308A ; [.3D83.0020.000E] # HIRAGANA LETTER RI
31FC ; [.3D83.0020.000F] # KATAKANA LETTER SMALL RI
30EA ; [.3D83.0020.0011] # KATAKANA LETTER RI
FF98 ; [.3D83.0020.0012] # HALFWIDTH KATAKANA LETTER RI
32F7 ; [.3D83.0020.0013] # CIRCLED KATAKANA RI
3351 ; [.3D83.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE RITTORU
3352 ; [.3D83.0020.001C][.3D82.0020.001C] # SQUARE RIRA
308B ; [.3D84.0020.000E] # HIRAGANA LETTER RU
31FD ; [.3D84.0020.000F] # KATAKANA LETTER SMALL RU
30EB ; [.3D84.0020.0011] # KATAKANA LETTER RU
FF99 ; [.3D84.0020.0012] # HALFWIDTH KATAKANA LETTER RU
32F8 ; [.3D84.0020.0013] # CIRCLED KATAKANA RU
3354 ; [.3D84.0020.001C][.1C0E.0020.001C][.3D76.0020.001C][.0000.0037.001C][.3D84.0020.001C] # SQUARE RUUBURU
3353 ; [.3D84.0020.001C][.3D75.0020.001C][.0000.0038.001C][.1C0E.0020.001C] # SQUARE RUPII
308C ; [.3D85.0020.000E] # HIRAGANA LETTER RE
31FE ; [.3D85.0020.000F] # KATAKANA LETTER SMALL RE
30EC ; [.3D85.0020.0011] # KATAKANA LETTER RE
FF9A ; [.3D85.0020.0012] # HALFWIDTH KATAKANA LETTER RE
32F9 ; [.3D85.0020.0013] # CIRCLED KATAKANA RE
3355 ; [.3D85.0020.001C][.3D7B.0020.001C] # SQUARE REMU
3356 ; [.3D85.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C][.3D63.0020.001C][.0000.0037.001C][.3D8B.0020.001C] # SQUARE RENTOGEN
308D ; [.3D86.0020.000E] # HIRAGANA LETTER RO
31FF ; [.3D86.0020.000F] # KATAKANA LETTER SMALL RO
30ED ; [.3D86.0020.0011] # KATAKANA LETTER RO
FF9B ; [.3D86.0020.0012] # HALFWIDTH KATAKANA LETTER RO
32FA ; [.3D86.0020.0013] # CIRCLED KATAKANA RO
308E ; [.3D87.0020.000D] # HIRAGANA LETTER SMALL WA
308F ; [.3D87.0020.000E] # HIRAGANA LETTER WA
30EE ; [.3D87.0020.000F] # KATAKANA LETTER SMALL WA
30EF ; [.3D87.0020.0011] # KATAKANA LETTER WA
FF9C ; [.3D87.0020.0012] # HALFWIDTH KATAKANA LETTER WA
32FB ; [.3D87.0020.0013] # CIRCLED KATAKANA WA
30F7 ; [.3D87.0020.0011][.0000.0037.0002] # KATAKANA LETTER VA
3357 ; [.3D87.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE WATTO
3090 ; [.3D88.0020.000E] # HIRAGANA LETTER WI
30F0 ; [.3D88.0020.0011] # KATAKANA LETTER WI
32FC ; [.3D88.0020.0013] # CIRCLED KATAKANA WI
30F8 ; [.3D88.0020.0011][.0000.0037.0002] # KATAKANA LETTER VI
3091 ; [.3D89.0020.000E] # HIRAGANA LETTER WE
30F1 ; [.3D89.0020.0011] # KATAKANA LETTER WE
32FD ; [.3D89.0020.0013] # CIRCLED KATAKANA WE
30F9 ; [.3D89.0020.0011][.0000.0037.0002] # KATAKANA LETTER VE
3092 ; [.3D8A.0020.000E] # HIRAGANA LETTER WO
30F2 ; [.3D8A.0020.0011] # KATAKANA LETTER WO
FF66 ; [.3D8A.0020.0012] # HALFWIDTH KATAKANA LETTER WO
32FE ; [.3D8A.0020.0013] # CIRCLED KATAKANA WO
30FA ; [.3D8A.0020.0011][.0000.0037.0002] # KATAKANA LETTER VO
3093 ; [.3D8B.0020.000E] # HIRAGANA LETTER N
30F3 ; [.3D8B.0020.0011] # KATAKANA LETTER N
FF9D ; [.3D8B.0020.0012] # HALFWIDTH KATAKANA LETTER N
3105 ; [.3D8C.0020.0002] # BOPOMOFO LETTER B
31A0 ; [.3D8C.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER BU
3106 ; [.3D8D.0020.0002] # BOPOMOFO LETTER P
31B4 ; [.3D8D.0020.0019] # BOPOMOFO FINAL LETTER P
3107 ; [.3D8E.0020.0002] # BOPOMOFO LETTER M
3108 ; [.3D8F.0020.0002] # BOPOMOFO LETTER F
312A ; [.3D90.0020.0002] # BOPOMOFO LETTER V
3109 ; [.3D91.0020.0002] # BOPOMOFO LETTER D
310A ; [.3D92.0020.0002] # BOPOMOFO LETTER T
31B5 ; [.3D92.0020.0019] # BOPOMOFO FINAL LETTER T
310B ; [.3D93.0020.0002] # BOPOMOFO LETTER N
310C ; [.3D94.0020.0002] # BOPOMOFO LETTER L
310D ; [.3D95.0020.0002] # BOPOMOFO LETTER G
31A3 ; [.3D95.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER GU
310E ; [.3D96.0020.0002] # BOPOMOFO LETTER K
31B6 ; [.3D96.0020.0019] # BOPOMOFO FINAL LETTER K
312B ; [.3D97.0020.0002] # BOPOMOFO LETTER NG
31AD ; [.3D98.0020.0002] # BOPOMOFO LETTER NGG
310F ; [.3D99.0020.0002] # BOPOMOFO LETTER H
31B7 ; [.3D99.0020.0019] # BOPOMOFO FINAL LETTER H
3110 ; [.3D9A.0020.0002] # BOPOMOFO LETTER J
31A2 ; [.3D9A.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER JI
3111 ; [.3D9B.0020.0002] # BOPOMOFO LETTER Q
3112 ; [.3D9C.0020.0002] # BOPOMOFO LETTER X
312C ; [.3D9D.0020.0002] # BOPOMOFO LETTER GN
3113 ; [.3D9E.0020.0002] # BOPOMOFO LETTER ZH
3114 ; [.3D9F.0020.0002] # BOPOMOFO LETTER CH
3115 ; [.3DA0.0020.0002] # BOPOMOFO LETTER SH
3116 ; [.3DA1.0020.0002] # BOPOMOFO LETTER R
3117 ; [.3DA2.0020.0002] # BOPOMOFO LETTER Z
31A1 ; [.3DA2.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ZI
3118 ; [.3DA3.0020.0002] # BOPOMOFO LETTER C
3119 ; [.3DA4.0020.0002] # BOPOMOFO LETTER S
31B8 ; [.3DA5.0020.0002] # BOPOMOFO LETTER GH
31B9 ; [.3DA6.0020.0002] # BOPOMOFO LETTER LH
31BA ; [.3DA7.0020.0002] # BOPOMOFO LETTER ZY
311A ; [.3DA8.0020.0002] # BOPOMOFO LETTER A
31A9 ; [.3DA8.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ANN
311B ; [.3DA9.0020.0002] # BOPOMOFO LETTER O
31A7 ; [.3DA9.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ONN
31A6 ; [.3DAA.0020.0002] # BOPOMOFO LETTER OO
311C ; [.3DAB.0020.0002] # BOPOMOFO LETTER E
311D ; [.3DAC.0020.0002] # BOPOMOFO LETTER EH
31A4 ; [.3DAD.0020.0002] # BOPOMOFO LETTER EE
31A5 ; [.3DAD.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ENN
311E ; [.3DAE.0020.0002] # BOPOMOFO LETTER AI
31AE ; [.3DAE.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER AINN
311F ; [.3DAF.0020.0002] # BOPOMOFO LETTER EI
3120 ; [.3DB0.0020.0002] # BOPOMOFO LETTER AU
31AF ; [.3DB0.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER AUNN
3121 ; [.3DB1.0020.0002] # BOPOMOFO LETTER OU
3122 ; [.3DB2.0020.0002] # BOPOMOFO LETTER AN
3123 ; [.3DB3.0020.0002] # BOPOMOFO LETTER EN
3124 ; [.3DB4.0020.0002] # BOPOMOFO LETTER ANG
31B2 ; [.3DB5.0020.0002] # BOPOMOFO LETTER ONG
3125 ; [.3DB6.0020.0002] # BOPOMOFO LETTER ENG
31B0 ; [.3DB7.0020.0002] # BOPOMOFO LETTER AM
31B1 ; [.3DB8.0020.0002] # BOPOMOFO LETTER OM
31AC ; [.3DB9.0020.0002] # BOPOMOFO LETTER IM
3126 ; [.3DBA.0020.0002] # BOPOMOFO LETTER ER
3127 ; [.3DBB.0020.0002] # BOPOMOFO LETTER I
31AA ; [.3DBB.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER INN
31B3 ; [.3DBB.0020.0016][.0000.0111.0016] # BOPOMOFO LETTER INNN
3128 ; [.3DBC.0020.0002] # BOPOMOFO LETTER U
31AB ; [.3DBC.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER UNN
31A8 ; [.3DBC.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER IR
3129 ; [.3DBD.0020.0002] # BOPOMOFO LETTER IU
312D ; [.3DBE.0020.0002] # BOPOMOFO LETTER IH
A000 ; [.3DBF.0020.0002] # YI SYLLABLE IT
A001 ; [.3DC0.0020.0002] # YI SYLLABLE IX
A002 ; [.3DC1.0020.0002] # YI SYLLABLE I
A003 ; [.3DC2.0020.0002] # YI SYLLABLE IP
A004 ; [.3DC3.0020.0002] # YI SYLLABLE IET
A005 ; [.3DC4.0020.0002] # YI SYLLABLE IEX
A006 ; [.3DC5.0020.0002] # YI SYLLABLE IE
A007 ; [.3DC6.0020.0002] # YI SYLLABLE IEP
A008 ; [.3DC7.0020.0002] # YI SYLLABLE AT
A009 ; [.3DC8.0020.0002] # YI SYLLABLE AX
A00A ; [.3DC9.0020.0002] # YI SYLLABLE A
A00B ; [.3DCA.0020.0002] # YI SYLLABLE AP
A00C ; [.3DCB.0020.0002] # YI SYLLABLE UOX
A00D ; [.3DCC.0020.0002] # YI SYLLABLE UO
A00E ; [.3DCD.0020.0002] # YI SYLLABLE UOP
A00F ; [.3DCE.0020.0002] # YI SYLLABLE OT
A010 ; [.3DCF.0020.0002] # YI SYLLABLE OX
A011 ; [.3DD0.0020.0002] # YI SYLLABLE O
A012 ; [.3DD1.0020.0002] # YI SYLLABLE OP
A013 ; [.3DD2.0020.0002] # YI SYLLABLE EX
A014 ; [.3DD3.0020.0002] # YI SYLLABLE E
A015 ; [.3DD4.0020.0002] # YI SYLLABLE WU
A016 ; [.3DD5.0020.0002] # YI SYLLABLE BIT
A017 ; [.3DD6.0020.0002] # YI SYLLABLE BIX
A018 ; [.3DD7.0020.0002] # YI SYLLABLE BI
A019 ; [.3DD8.0020.0002] # YI SYLLABLE BIP
A01A ; [.3DD9.0020.0002] # YI SYLLABLE BIET
A01B ; [.3DDA.0020.0002] # YI SYLLABLE BIEX
A01C ; [.3DDB.0020.0002] # YI SYLLABLE BIE
A01D ; [.3DDC.0020.0002] # YI SYLLABLE BIEP
A01E ; [.3DDD.0020.0002] # YI SYLLABLE BAT
A01F ; [.3DDE.0020.0002] # YI SYLLABLE BAX
A020 ; [.3DDF.0020.0002] # YI SYLLABLE BA
A021 ; [.3DE0.0020.0002] # YI SYLLABLE BAP
A022 ; [.3DE1.0020.0002] # YI SYLLABLE BUOX
A023 ; [.3DE2.0020.0002] # YI SYLLABLE BUO
A024 ; [.3DE3.0020.0002] # YI SYLLABLE BUOP
A025 ; [.3DE4.0020.0002] # YI SYLLABLE BOT
A026 ; [.3DE5.0020.0002] # YI SYLLABLE BOX
A027 ; [.3DE6.0020.0002] # YI SYLLABLE BO
A028 ; [.3DE7.0020.0002] # YI SYLLABLE BOP
A029 ; [.3DE8.0020.0002] # YI SYLLABLE BEX
A02A ; [.3DE9.0020.0002] # YI SYLLABLE BE
A02B ; [.3DEA.0020.0002] # YI SYLLABLE BEP
A02C ; [.3DEB.0020.0002] # YI SYLLABLE BUT
A02D ; [.3DEC.0020.0002] # YI SYLLABLE BUX
A02E ; [.3DED.0020.0002] # YI SYLLABLE BU
A02F ; [.3DEE.0020.0002] # YI SYLLABLE BUP
A030 ; [.3DEF.0020.0002] # YI SYLLABLE BURX
A031 ; [.3DF0.0020.0002] # YI SYLLABLE BUR
A032 ; [.3DF1.0020.0002] # YI SYLLABLE BYT
A033 ; [.3DF2.0020.0002] # YI SYLLABLE BYX
A034 ; [.3DF3.0020.0002] # YI SYLLABLE BY
A035 ; [.3DF4.0020.0002] # YI SYLLABLE BYP
A036 ; [.3DF5.0020.0002] # YI SYLLABLE BYRX
A037 ; [.3DF6.0020.0002] # YI SYLLABLE BYR
A038 ; [.3DF7.0020.0002] # YI SYLLABLE PIT
A039 ; [.3DF8.0020.0002] # YI SYLLABLE PIX
A03A ; [.3DF9.0020.0002] # YI SYLLABLE PI
A03B ; [.3DFA.0020.0002] # YI SYLLABLE PIP
A03C ; [.3DFB.0020.0002] # YI SYLLABLE PIEX
A03D ; [.3DFC.0020.0002] # YI SYLLABLE PIE
A03E ; [.3DFD.0020.0002] # YI SYLLABLE PIEP
A03F ; [.3DFE.0020.0002] # YI SYLLABLE PAT
A040 ; [.3DFF.0020.0002] # YI SYLLABLE PAX
A041 ; [.3E00.0020.0002] # YI SYLLABLE PA
A042 ; [.3E01.0020.0002] # YI SYLLABLE PAP
A043 ; [.3E02.0020.0002] # YI SYLLABLE PUOX
A044 ; [.3E03.0020.0002] # YI SYLLABLE PUO
A045 ; [.3E04.0020.0002] # YI SYLLABLE PUOP
A046 ; [.3E05.0020.0002] # YI SYLLABLE POT
A047 ; [.3E06.0020.0002] # YI SYLLABLE POX
A048 ; [.3E07.0020.0002] # YI SYLLABLE PO
A049 ; [.3E08.0020.0002] # YI SYLLABLE POP
A04A ; [.3E09.0020.0002] # YI SYLLABLE PUT
A04B ; [.3E0A.0020.0002] # YI SYLLABLE PUX
A04C ; [.3E0B.0020.0002] # YI SYLLABLE PU
A04D ; [.3E0C.0020.0002] # YI SYLLABLE PUP
A04E ; [.3E0D.0020.0002] # YI SYLLABLE PURX
A04F ; [.3E0E.0020.0002] # YI SYLLABLE PUR
A050 ; [.3E0F.0020.0002] # YI SYLLABLE PYT
A051 ; [.3E10.0020.0002] # YI SYLLABLE PYX
A052 ; [.3E11.0020.0002] # YI SYLLABLE PY
A053 ; [.3E12.0020.0002] # YI SYLLABLE PYP
A054 ; [.3E13.0020.0002] # YI SYLLABLE PYRX
A055 ; [.3E14.0020.0002] # YI SYLLABLE PYR
A056 ; [.3E15.0020.0002] # YI SYLLABLE BBIT
A057 ; [.3E16.0020.0002] # YI SYLLABLE BBIX
A058 ; [.3E17.0020.0002] # YI SYLLABLE BBI
A059 ; [.3E18.0020.0002] # YI SYLLABLE BBIP
A05A ; [.3E19.0020.0002] # YI SYLLABLE BBIET
A05B ; [.3E1A.0020.0002] # YI SYLLABLE BBIEX
A05C ; [.3E1B.0020.0002] # YI SYLLABLE BBIE
A05D ; [.3E1C.0020.0002] # YI SYLLABLE BBIEP
A05E ; [.3E1D.0020.0002] # YI SYLLABLE BBAT
A05F ; [.3E1E.0020.0002] # YI SYLLABLE BBAX
A060 ; [.3E1F.0020.0002] # YI SYLLABLE BBA
A061 ; [.3E20.0020.0002] # YI SYLLABLE BBAP
A062 ; [.3E21.0020.0002] # YI SYLLABLE BBUOX
A063 ; [.3E22.0020.0002] # YI SYLLABLE BBUO
A064 ; [.3E23.0020.0002] # YI SYLLABLE BBUOP
A065 ; [.3E24.0020.0002] # YI SYLLABLE BBOT
A066 ; [.3E25.0020.0002] # YI SYLLABLE BBOX
A067 ; [.3E26.0020.0002] # YI SYLLABLE BBO
A068 ; [.3E27.0020.0002] # YI SYLLABLE BBOP
A069 ; [.3E28.0020.0002] # YI SYLLABLE BBEX
A06A ; [.3E29.0020.0002] # YI SYLLABLE BBE
A06B ; [.3E2A.0020.0002] # YI SYLLABLE BBEP
A06C ; [.3E2B.0020.0002] # YI SYLLABLE BBUT
A06D ; [.3E2C.0020.0002] # YI SYLLABLE BBUX
A06E ; [.3E2D.0020.0002] # YI SYLLABLE BBU
A06F ; [.3E2E.0020.0002] # YI SYLLABLE BBUP
A070 ; [.3E2F.0020.0002] # YI SYLLABLE BBURX
A071 ; [.3E30.0020.0002] # YI SYLLABLE BBUR
A072 ; [.3E31.0020.0002] # YI SYLLABLE BBYT
A073 ; [.3E32.0020.0002] # YI SYLLABLE BBYX
A074 ; [.3E33.0020.0002] # YI SYLLABLE BBY
A075 ; [.3E34.0020.0002] # YI SYLLABLE BBYP
A076 ; [.3E35.0020.0002] # YI SYLLABLE NBIT
A077 ; [.3E36.0020.0002] # YI SYLLABLE NBIX
A078 ; [.3E37.0020.0002] # YI SYLLABLE NBI
A079 ; [.3E38.0020.0002] # YI SYLLABLE NBIP
A07A ; [.3E39.0020.0002] # YI SYLLABLE NBIEX
A07B ; [.3E3A.0020.0002] # YI SYLLABLE NBIE
A07C ; [.3E3B.0020.0002] # YI SYLLABLE NBIEP
A07D ; [.3E3C.0020.0002] # YI SYLLABLE NBAT
A07E ; [.3E3D.0020.0002] # YI SYLLABLE NBAX
A07F ; [.3E3E.0020.0002] # YI SYLLABLE NBA
A080 ; [.3E3F.0020.0002] # YI SYLLABLE NBAP
A081 ; [.3E40.0020.0002] # YI SYLLABLE NBOT
A082 ; [.3E41.0020.0002] # YI SYLLABLE NBOX
A083 ; [.3E42.0020.0002] # YI SYLLABLE NBO
A084 ; [.3E43.0020.0002] # YI SYLLABLE NBOP
A085 ; [.3E44.0020.0002] # YI SYLLABLE NBUT
A086 ; [.3E45.0020.0002] # YI SYLLABLE NBUX
A087 ; [.3E46.0020.0002] # YI SYLLABLE NBU
A088 ; [.3E47.0020.0002] # YI SYLLABLE NBUP
A089 ; [.3E48.0020.0002] # YI SYLLABLE NBURX
A08A ; [.3E49.0020.0002] # YI SYLLABLE NBUR
A08B ; [.3E4A.0020.0002] # YI SYLLABLE NBYT
A08C ; [.3E4B.0020.0002] # YI SYLLABLE NBYX
A08D ; [.3E4C.0020.0002] # YI SYLLABLE NBY
A08E ; [.3E4D.0020.0002] # YI SYLLABLE NBYP
A08F ; [.3E4E.0020.0002] # YI SYLLABLE NBYRX
A090 ; [.3E4F.0020.0002] # YI SYLLABLE NBYR
A091 ; [.3E50.0020.0002] # YI SYLLABLE HMIT
A092 ; [.3E51.0020.0002] # YI SYLLABLE HMIX
A093 ; [.3E52.0020.0002] # YI SYLLABLE HMI
A094 ; [.3E53.0020.0002] # YI SYLLABLE HMIP
A095 ; [.3E54.0020.0002] # YI SYLLABLE HMIEX
A096 ; [.3E55.0020.0002] # YI SYLLABLE HMIE
A097 ; [.3E56.0020.0002] # YI SYLLABLE HMIEP
A098 ; [.3E57.0020.0002] # YI SYLLABLE HMAT
A099 ; [.3E58.0020.0002] # YI SYLLABLE HMAX
A09A ; [.3E59.0020.0002] # YI SYLLABLE HMA
A09B ; [.3E5A.0020.0002] # YI SYLLABLE HMAP
A09C ; [.3E5B.0020.0002] # YI SYLLABLE HMUOX
A09D ; [.3E5C.0020.0002] # YI SYLLABLE HMUO
A09E ; [.3E5D.0020.0002] # YI SYLLABLE HMUOP
A09F ; [.3E5E.0020.0002] # YI SYLLABLE HMOT
A0A0 ; [.3E5F.0020.0002] # YI SYLLABLE HMOX
A0A1 ; [.3E60.0020.0002] # YI SYLLABLE HMO
A0A2 ; [.3E61.0020.0002] # YI SYLLABLE HMOP
A0A3 ; [.3E62.0020.0002] # YI SYLLABLE HMUT
A0A4 ; [.3E63.0020.0002] # YI SYLLABLE HMUX
A0A5 ; [.3E64.0020.0002] # YI SYLLABLE HMU
A0A6 ; [.3E65.0020.0002] # YI SYLLABLE HMUP
A0A7 ; [.3E66.0020.0002] # YI SYLLABLE HMURX
A0A8 ; [.3E67.0020.0002] # YI SYLLABLE HMUR
A0A9 ; [.3E68.0020.0002] # YI SYLLABLE HMYX
A0AA ; [.3E69.0020.0002] # YI SYLLABLE HMY
A0AB ; [.3E6A.0020.0002] # YI SYLLABLE HMYP
A0AC ; [.3E6B.0020.0002] # YI SYLLABLE HMYRX
A0AD ; [.3E6C.0020.0002] # YI SYLLABLE HMYR
A0AE ; [.3E6D.0020.0002] # YI SYLLABLE MIT
A0AF ; [.3E6E.0020.0002] # YI SYLLABLE MIX
A0B0 ; [.3E6F.0020.0002] # YI SYLLABLE MI
A0B1 ; [.3E70.0020.0002] # YI SYLLABLE MIP
A0B2 ; [.3E71.0020.0002] # YI SYLLABLE MIEX
A0B3 ; [.3E72.0020.0002] # YI SYLLABLE MIE
A0B4 ; [.3E73.0020.0002] # YI SYLLABLE MIEP
A0B5 ; [.3E74.0020.0002] # YI SYLLABLE MAT
A0B6 ; [.3E75.0020.0002] # YI SYLLABLE MAX
A0B7 ; [.3E76.0020.0002] # YI SYLLABLE MA
A0B8 ; [.3E77.0020.0002] # YI SYLLABLE MAP
A0B9 ; [.3E78.0020.0002] # YI SYLLABLE MUOT
A0BA ; [.3E79.0020.0002] # YI SYLLABLE MUOX
A0BB ; [.3E7A.0020.0002] # YI SYLLABLE MUO
A0BC ; [.3E7B.0020.0002] # YI SYLLABLE MUOP
A0BD ; [.3E7C.0020.0002] # YI SYLLABLE MOT
A0BE ; [.3E7D.0020.0002] # YI SYLLABLE MOX
A0BF ; [.3E7E.0020.0002] # YI SYLLABLE MO
A0C0 ; [.3E7F.0020.0002] # YI SYLLABLE MOP
A0C1 ; [.3E80.0020.0002] # YI SYLLABLE MEX
A0C2 ; [.3E81.0020.0002] # YI SYLLABLE ME
A0C3 ; [.3E82.0020.0002] # YI SYLLABLE MUT
A0C4 ; [.3E83.0020.0002] # YI SYLLABLE MUX
A0C5 ; [.3E84.0020.0002] # YI SYLLABLE MU
A0C6 ; [.3E85.0020.0002] # YI SYLLABLE MUP
A0C7 ; [.3E86.0020.0002] # YI SYLLABLE MURX
A0C8 ; [.3E87.0020.0002] # YI SYLLABLE MUR
A0C9 ; [.3E88.0020.0002] # YI SYLLABLE MYT
A0CA ; [.3E89.0020.0002] # YI SYLLABLE MYX
A0CB ; [.3E8A.0020.0002] # YI SYLLABLE MY
A0CC ; [.3E8B.0020.0002] # YI SYLLABLE MYP
A0CD ; [.3E8C.0020.0002] # YI SYLLABLE FIT
A0CE ; [.3E8D.0020.0002] # YI SYLLABLE FIX
A0CF ; [.3E8E.0020.0002] # YI SYLLABLE FI
A0D0 ; [.3E8F.0020.0002] # YI SYLLABLE FIP
A0D1 ; [.3E90.0020.0002] # YI SYLLABLE FAT
A0D2 ; [.3E91.0020.0002] # YI SYLLABLE FAX
A0D3 ; [.3E92.0020.0002] # YI SYLLABLE FA
A0D4 ; [.3E93.0020.0002] # YI SYLLABLE FAP
A0D5 ; [.3E94.0020.0002] # YI SYLLABLE FOX
A0D6 ; [.3E95.0020.0002] # YI SYLLABLE FO
A0D7 ; [.3E96.0020.0002] # YI SYLLABLE FOP
A0D8 ; [.3E97.0020.0002] # YI SYLLABLE FUT
A0D9 ; [.3E98.0020.0002] # YI SYLLABLE FUX
A0DA ; [.3E99.0020.0002] # YI SYLLABLE FU
A0DB ; [.3E9A.0020.0002] # YI SYLLABLE FUP
A0DC ; [.3E9B.0020.0002] # YI SYLLABLE FURX
A0DD ; [.3E9C.0020.0002] # YI SYLLABLE FUR
A0DE ; [.3E9D.0020.0002] # YI SYLLABLE FYT
A0DF ; [.3E9E.0020.0002] # YI SYLLABLE FYX
A0E0 ; [.3E9F.0020.0002] # YI SYLLABLE FY
A0E1 ; [.3EA0.0020.0002] # YI SYLLABLE FYP
A0E2 ; [.3EA1.0020.0002] # YI SYLLABLE VIT
A0E3 ; [.3EA2.0020.0002] # YI SYLLABLE VIX
A0E4 ; [.3EA3.0020.0002] # YI SYLLABLE VI
A0E5 ; [.3EA4.0020.0002] # YI SYLLABLE VIP
A0E6 ; [.3EA5.0020.0002] # YI SYLLABLE VIET
A0E7 ; [.3EA6.0020.0002] # YI SYLLABLE VIEX
A0E8 ; [.3EA7.0020.0002] # YI SYLLABLE VIE
A0E9 ; [.3EA8.0020.0002] # YI SYLLABLE VIEP
A0EA ; [.3EA9.0020.0002] # YI SYLLABLE VAT
A0EB ; [.3EAA.0020.0002] # YI SYLLABLE VAX
A0EC ; [.3EAB.0020.0002] # YI SYLLABLE VA
A0ED ; [.3EAC.0020.0002] # YI SYLLABLE VAP
A0EE ; [.3EAD.0020.0002] # YI SYLLABLE VOT
A0EF ; [.3EAE.0020.0002] # YI SYLLABLE VOX
A0F0 ; [.3EAF.0020.0002] # YI SYLLABLE VO
A0F1 ; [.3EB0.0020.0002] # YI SYLLABLE VOP
A0F2 ; [.3EB1.0020.0002] # YI SYLLABLE VEX
A0F3 ; [.3EB2.0020.0002] # YI SYLLABLE VEP
A0F4 ; [.3EB3.0020.0002] # YI SYLLABLE VUT
A0F5 ; [.3EB4.0020.0002] # YI SYLLABLE VUX
A0F6 ; [.3EB5.0020.0002] # YI SYLLABLE VU
A0F7 ; [.3EB6.0020.0002] # YI SYLLABLE VUP
A0F8 ; [.3EB7.0020.0002] # YI SYLLABLE VURX
A0F9 ; [.3EB8.0020.0002] # YI SYLLABLE VUR
A0FA ; [.3EB9.0020.0002] # YI SYLLABLE VYT
A0FB ; [.3EBA.0020.0002] # YI SYLLABLE VYX
A0FC ; [.3EBB.0020.0002] # YI SYLLABLE VY
A0FD ; [.3EBC.0020.0002] # YI SYLLABLE VYP
A0FE ; [.3EBD.0020.0002] # YI SYLLABLE VYRX
A0FF ; [.3EBE.0020.0002] # YI SYLLABLE VYR
A100 ; [.3EBF.0020.0002] # YI SYLLABLE DIT
A101 ; [.3EC0.0020.0002] # YI SYLLABLE DIX
A102 ; [.3EC1.0020.0002] # YI SYLLABLE DI
A103 ; [.3EC2.0020.0002] # YI SYLLABLE DIP
A104 ; [.3EC3.0020.0002] # YI SYLLABLE DIEX
A105 ; [.3EC4.0020.0002] # YI SYLLABLE DIE
A106 ; [.3EC5.0020.0002] # YI SYLLABLE DIEP
A107 ; [.3EC6.0020.0002] # YI SYLLABLE DAT
A108 ; [.3EC7.0020.0002] # YI SYLLABLE DAX
A109 ; [.3EC8.0020.0002] # YI SYLLABLE DA
A10A ; [.3EC9.0020.0002] # YI SYLLABLE DAP
A10B ; [.3ECA.0020.0002] # YI SYLLABLE DUOX
A10C ; [.3ECB.0020.0002] # YI SYLLABLE DUO
A10D ; [.3ECC.0020.0002] # YI SYLLABLE DOT
A10E ; [.3ECD.0020.0002] # YI SYLLABLE DOX
A10F ; [.3ECE.0020.0002] # YI SYLLABLE DO
A110 ; [.3ECF.0020.0002] # YI SYLLABLE DOP
A111 ; [.3ED0.0020.0002] # YI SYLLABLE DEX
A112 ; [.3ED1.0020.0002] # YI SYLLABLE DE
A113 ; [.3ED2.0020.0002] # YI SYLLABLE DEP
A114 ; [.3ED3.0020.0002] # YI SYLLABLE DUT
A115 ; [.3ED4.0020.0002] # YI SYLLABLE DUX
A116 ; [.3ED5.0020.0002] # YI SYLLABLE DU
A117 ; [.3ED6.0020.0002] # YI SYLLABLE DUP
A118 ; [.3ED7.0020.0002] # YI SYLLABLE DURX
A119 ; [.3ED8.0020.0002] # YI SYLLABLE DUR
A11A ; [.3ED9.0020.0002] # YI SYLLABLE TIT
A11B ; [.3EDA.0020.0002] # YI SYLLABLE TIX
A11C ; [.3EDB.0020.0002] # YI SYLLABLE TI
A11D ; [.3EDC.0020.0002] # YI SYLLABLE TIP
A11E ; [.3EDD.0020.0002] # YI SYLLABLE TIEX
A11F ; [.3EDE.0020.0002] # YI SYLLABLE TIE
A120 ; [.3EDF.0020.0002] # YI SYLLABLE TIEP
A121 ; [.3EE0.0020.0002] # YI SYLLABLE TAT
A122 ; [.3EE1.0020.0002] # YI SYLLABLE TAX
A123 ; [.3EE2.0020.0002] # YI SYLLABLE TA
A124 ; [.3EE3.0020.0002] # YI SYLLABLE TAP
A125 ; [.3EE4.0020.0002] # YI SYLLABLE TUOT
A126 ; [.3EE5.0020.0002] # YI SYLLABLE TUOX
A127 ; [.3EE6.0020.0002] # YI SYLLABLE TUO
A128 ; [.3EE7.0020.0002] # YI SYLLABLE TUOP
A129 ; [.3EE8.0020.0002] # YI SYLLABLE TOT
A12A ; [.3EE9.0020.0002] # YI SYLLABLE TOX
A12B ; [.3EEA.0020.0002] # YI SYLLABLE TO
A12C ; [.3EEB.0020.0002] # YI SYLLABLE TOP
A12D ; [.3EEC.0020.0002] # YI SYLLABLE TEX
A12E ; [.3EED.0020.0002] # YI SYLLABLE TE
A12F ; [.3EEE.0020.0002] # YI SYLLABLE TEP
A130 ; [.3EEF.0020.0002] # YI SYLLABLE TUT
A131 ; [.3EF0.0020.0002] # YI SYLLABLE TUX
A132 ; [.3EF1.0020.0002] # YI SYLLABLE TU
A133 ; [.3EF2.0020.0002] # YI SYLLABLE TUP
A134 ; [.3EF3.0020.0002] # YI SYLLABLE TURX
A135 ; [.3EF4.0020.0002] # YI SYLLABLE TUR
A136 ; [.3EF5.0020.0002] # YI SYLLABLE DDIT
A137 ; [.3EF6.0020.0002] # YI SYLLABLE DDIX
A138 ; [.3EF7.0020.0002] # YI SYLLABLE DDI
A139 ; [.3EF8.0020.0002] # YI SYLLABLE DDIP
A13A ; [.3EF9.0020.0002] # YI SYLLABLE DDIEX
A13B ; [.3EFA.0020.0002] # YI SYLLABLE DDIE
A13C ; [.3EFB.0020.0002] # YI SYLLABLE DDIEP
A13D ; [.3EFC.0020.0002] # YI SYLLABLE DDAT
A13E ; [.3EFD.0020.0002] # YI SYLLABLE DDAX
A13F ; [.3EFE.0020.0002] # YI SYLLABLE DDA
A140 ; [.3EFF.0020.0002] # YI SYLLABLE DDAP
A141 ; [.3F00.0020.0002] # YI SYLLABLE DDUOX
A142 ; [.3F01.0020.0002] # YI SYLLABLE DDUO
A143 ; [.3F02.0020.0002] # YI SYLLABLE DDUOP
A144 ; [.3F03.0020.0002] # YI SYLLABLE DDOT
A145 ; [.3F04.0020.0002] # YI SYLLABLE DDOX
A146 ; [.3F05.0020.0002] # YI SYLLABLE DDO
A147 ; [.3F06.0020.0002] # YI SYLLABLE DDOP
A148 ; [.3F07.0020.0002] # YI SYLLABLE DDEX
A149 ; [.3F08.0020.0002] # YI SYLLABLE DDE
A14A ; [.3F09.0020.0002] # YI SYLLABLE DDEP
A14B ; [.3F0A.0020.0002] # YI SYLLABLE DDUT
A14C ; [.3F0B.0020.0002] # YI SYLLABLE DDUX
A14D ; [.3F0C.0020.0002] # YI SYLLABLE DDU
A14E ; [.3F0D.0020.0002] # YI SYLLABLE DDUP
A14F ; [.3F0E.0020.0002] # YI SYLLABLE DDURX
A150 ; [.3F0F.0020.0002] # YI SYLLABLE DDUR
A151 ; [.3F10.0020.0002] # YI SYLLABLE NDIT
A152 ; [.3F11.0020.0002] # YI SYLLABLE NDIX
A153 ; [.3F12.0020.0002] # YI SYLLABLE NDI
A154 ; [.3F13.0020.0002] # YI SYLLABLE NDIP
A155 ; [.3F14.0020.0002] # YI SYLLABLE NDIEX
A156 ; [.3F15.0020.0002] # YI SYLLABLE NDIE
A157 ; [.3F16.0020.0002] # YI SYLLABLE NDAT
A158 ; [.3F17.0020.0002] # YI SYLLABLE NDAX
A159 ; [.3F18.0020.0002] # YI SYLLABLE NDA
A15A ; [.3F19.0020.0002] # YI SYLLABLE NDAP
A15B ; [.3F1A.0020.0002] # YI SYLLABLE NDOT
A15C ; [.3F1B.0020.0002] # YI SYLLABLE NDOX
A15D ; [.3F1C.0020.0002] # YI SYLLABLE NDO
A15E ; [.3F1D.0020.0002] # YI SYLLABLE NDOP
A15F ; [.3F1E.0020.0002] # YI SYLLABLE NDEX
A160 ; [.3F1F.0020.0002] # YI SYLLABLE NDE
A161 ; [.3F20.0020.0002] # YI SYLLABLE NDEP
A162 ; [.3F21.0020.0002] # YI SYLLABLE NDUT
A163 ; [.3F22.0020.0002] # YI SYLLABLE NDUX
A164 ; [.3F23.0020.0002] # YI SYLLABLE NDU
A165 ; [.3F24.0020.0002] # YI SYLLABLE NDUP
A166 ; [.3F25.0020.0002] # YI SYLLABLE NDURX
A167 ; [.3F26.0020.0002] # YI SYLLABLE NDUR
A168 ; [.3F27.0020.0002] # YI SYLLABLE HNIT
A169 ; [.3F28.0020.0002] # YI SYLLABLE HNIX
A16A ; [.3F29.0020.0002] # YI SYLLABLE HNI
A16B ; [.3F2A.0020.0002] # YI SYLLABLE HNIP
A16C ; [.3F2B.0020.0002] # YI SYLLABLE HNIET
A16D ; [.3F2C.0020.0002] # YI SYLLABLE HNIEX
A16E ; [.3F2D.0020.0002] # YI SYLLABLE HNIE
A16F ; [.3F2E.0020.0002] # YI SYLLABLE HNIEP
A170 ; [.3F2F.0020.0002] # YI SYLLABLE HNAT
A171 ; [.3F30.0020.0002] # YI SYLLABLE HNAX
A172 ; [.3F31.0020.0002] # YI SYLLABLE HNA
A173 ; [.3F32.0020.0002] # YI SYLLABLE HNAP
A174 ; [.3F33.0020.0002] # YI SYLLABLE HNUOX
A175 ; [.3F34.0020.0002] # YI SYLLABLE HNUO
A176 ; [.3F35.0020.0002] # YI SYLLABLE HNOT
A177 ; [.3F36.0020.0002] # YI SYLLABLE HNOX
A178 ; [.3F37.0020.0002] # YI SYLLABLE HNOP
A179 ; [.3F38.0020.0002] # YI SYLLABLE HNEX
A17A ; [.3F39.0020.0002] # YI SYLLABLE HNE
A17B ; [.3F3A.0020.0002] # YI SYLLABLE HNEP
A17C ; [.3F3B.0020.0002] # YI SYLLABLE HNUT
A17D ; [.3F3C.0020.0002] # YI SYLLABLE NIT
A17E ; [.3F3D.0020.0002] # YI SYLLABLE NIX
A17F ; [.3F3E.0020.0002] # YI SYLLABLE NI
A180 ; [.3F3F.0020.0002] # YI SYLLABLE NIP
A181 ; [.3F40.0020.0002] # YI SYLLABLE NIEX
A182 ; [.3F41.0020.0002] # YI SYLLABLE NIE
A183 ; [.3F42.0020.0002] # YI SYLLABLE NIEP
A184 ; [.3F43.0020.0002] # YI SYLLABLE NAX
A185 ; [.3F44.0020.0002] # YI SYLLABLE NA
A186 ; [.3F45.0020.0002] # YI SYLLABLE NAP
A187 ; [.3F46.0020.0002] # YI SYLLABLE NUOX
A188 ; [.3F47.0020.0002] # YI SYLLABLE NUO
A189 ; [.3F48.0020.0002] # YI SYLLABLE NUOP
A18A ; [.3F49.0020.0002] # YI SYLLABLE NOT
A18B ; [.3F4A.0020.0002] # YI SYLLABLE NOX
A18C ; [.3F4B.0020.0002] # YI SYLLABLE NO
A18D ; [.3F4C.0020.0002] # YI SYLLABLE NOP
A18E ; [.3F4D.0020.0002] # YI SYLLABLE NEX
A18F ; [.3F4E.0020.0002] # YI SYLLABLE NE
A190 ; [.3F4F.0020.0002] # YI SYLLABLE NEP
A191 ; [.3F50.0020.0002] # YI SYLLABLE NUT
A192 ; [.3F51.0020.0002] # YI SYLLABLE NUX
A193 ; [.3F52.0020.0002] # YI SYLLABLE NU
A194 ; [.3F53.0020.0002] # YI SYLLABLE NUP
A195 ; [.3F54.0020.0002] # YI SYLLABLE NURX
A196 ; [.3F55.0020.0002] # YI SYLLABLE NUR
A197 ; [.3F56.0020.0002] # YI SYLLABLE HLIT
A198 ; [.3F57.0020.0002] # YI SYLLABLE HLIX
A199 ; [.3F58.0020.0002] # YI SYLLABLE HLI
A19A ; [.3F59.0020.0002] # YI SYLLABLE HLIP
A19B ; [.3F5A.0020.0002] # YI SYLLABLE HLIEX
A19C ; [.3F5B.0020.0002] # YI SYLLABLE HLIE
A19D ; [.3F5C.0020.0002] # YI SYLLABLE HLIEP
A19E ; [.3F5D.0020.0002] # YI SYLLABLE HLAT
A19F ; [.3F5E.0020.0002] # YI SYLLABLE HLAX
A1A0 ; [.3F5F.0020.0002] # YI SYLLABLE HLA
A1A1 ; [.3F60.0020.0002] # YI SYLLABLE HLAP
A1A2 ; [.3F61.0020.0002] # YI SYLLABLE HLUOX
A1A3 ; [.3F62.0020.0002] # YI SYLLABLE HLUO
A1A4 ; [.3F63.0020.0002] # YI SYLLABLE HLUOP
A1A5 ; [.3F64.0020.0002] # YI SYLLABLE HLOX
A1A6 ; [.3F65.0020.0002] # YI SYLLABLE HLO
A1A7 ; [.3F66.0020.0002] # YI SYLLABLE HLOP
A1A8 ; [.3F67.0020.0002] # YI SYLLABLE HLEX
A1A9 ; [.3F68.0020.0002] # YI SYLLABLE HLE
A1AA ; [.3F69.0020.0002] # YI SYLLABLE HLEP
A1AB ; [.3F6A.0020.0002] # YI SYLLABLE HLUT
A1AC ; [.3F6B.0020.0002] # YI SYLLABLE HLUX
A1AD ; [.3F6C.0020.0002] # YI SYLLABLE HLU
A1AE ; [.3F6D.0020.0002] # YI SYLLABLE HLUP
A1AF ; [.3F6E.0020.0002] # YI SYLLABLE HLURX
A1B0 ; [.3F6F.0020.0002] # YI SYLLABLE HLUR
A1B1 ; [.3F70.0020.0002] # YI SYLLABLE HLYT
A1B2 ; [.3F71.0020.0002] # YI SYLLABLE HLYX
A1B3 ; [.3F72.0020.0002] # YI SYLLABLE HLY
A1B4 ; [.3F73.0020.0002] # YI SYLLABLE HLYP
A1B5 ; [.3F74.0020.0002] # YI SYLLABLE HLYRX
A1B6 ; [.3F75.0020.0002] # YI SYLLABLE HLYR
A1B7 ; [.3F76.0020.0002] # YI SYLLABLE LIT
A1B8 ; [.3F77.0020.0002] # YI SYLLABLE LIX
A1B9 ; [.3F78.0020.0002] # YI SYLLABLE LI
A1BA ; [.3F79.0020.0002] # YI SYLLABLE LIP
A1BB ; [.3F7A.0020.0002] # YI SYLLABLE LIET
A1BC ; [.3F7B.0020.0002] # YI SYLLABLE LIEX
A1BD ; [.3F7C.0020.0002] # YI SYLLABLE LIE
A1BE ; [.3F7D.0020.0002] # YI SYLLABLE LIEP
A1BF ; [.3F7E.0020.0002] # YI SYLLABLE LAT
A1C0 ; [.3F7F.0020.0002] # YI SYLLABLE LAX
A1C1 ; [.3F80.0020.0002] # YI SYLLABLE LA
A1C2 ; [.3F81.0020.0002] # YI SYLLABLE LAP
A1C3 ; [.3F82.0020.0002] # YI SYLLABLE LUOT
A1C4 ; [.3F83.0020.0002] # YI SYLLABLE LUOX
A1C5 ; [.3F84.0020.0002] # YI SYLLABLE LUO
A1C6 ; [.3F85.0020.0002] # YI SYLLABLE LUOP
A1C7 ; [.3F86.0020.0002] # YI SYLLABLE LOT
A1C8 ; [.3F87.0020.0002] # YI SYLLABLE LOX
A1C9 ; [.3F88.0020.0002] # YI SYLLABLE LO
A1CA ; [.3F89.0020.0002] # YI SYLLABLE LOP
A1CB ; [.3F8A.0020.0002] # YI SYLLABLE LEX
A1CC ; [.3F8B.0020.0002] # YI SYLLABLE LE
A1CD ; [.3F8C.0020.0002] # YI SYLLABLE LEP
A1CE ; [.3F8D.0020.0002] # YI SYLLABLE LUT
A1CF ; [.3F8E.0020.0002] # YI SYLLABLE LUX
A1D0 ; [.3F8F.0020.0002] # YI SYLLABLE LU
A1D1 ; [.3F90.0020.0002] # YI SYLLABLE LUP
A1D2 ; [.3F91.0020.0002] # YI SYLLABLE LURX
A1D3 ; [.3F92.0020.0002] # YI SYLLABLE LUR
A1D4 ; [.3F93.0020.0002] # YI SYLLABLE LYT
A1D5 ; [.3F94.0020.0002] # YI SYLLABLE LYX
A1D6 ; [.3F95.0020.0002] # YI SYLLABLE LY
A1D7 ; [.3F96.0020.0002] # YI SYLLABLE LYP
A1D8 ; [.3F97.0020.0002] # YI SYLLABLE LYRX
A1D9 ; [.3F98.0020.0002] # YI SYLLABLE LYR
A1DA ; [.3F99.0020.0002] # YI SYLLABLE GIT
A1DB ; [.3F9A.0020.0002] # YI SYLLABLE GIX
A1DC ; [.3F9B.0020.0002] # YI SYLLABLE GI
A1DD ; [.3F9C.0020.0002] # YI SYLLABLE GIP
A1DE ; [.3F9D.0020.0002] # YI SYLLABLE GIET
A1DF ; [.3F9E.0020.0002] # YI SYLLABLE GIEX
A1E0 ; [.3F9F.0020.0002] # YI SYLLABLE GIE
A1E1 ; [.3FA0.0020.0002] # YI SYLLABLE GIEP
A1E2 ; [.3FA1.0020.0002] # YI SYLLABLE GAT
A1E3 ; [.3FA2.0020.0002] # YI SYLLABLE GAX
A1E4 ; [.3FA3.0020.0002] # YI SYLLABLE GA
A1E5 ; [.3FA4.0020.0002] # YI SYLLABLE GAP
A1E6 ; [.3FA5.0020.0002] # YI SYLLABLE GUOT
A1E7 ; [.3FA6.0020.0002] # YI SYLLABLE GUOX
A1E8 ; [.3FA7.0020.0002] # YI SYLLABLE GUO
A1E9 ; [.3FA8.0020.0002] # YI SYLLABLE GUOP
A1EA ; [.3FA9.0020.0002] # YI SYLLABLE GOT
A1EB ; [.3FAA.0020.0002] # YI SYLLABLE GOX
A1EC ; [.3FAB.0020.0002] # YI SYLLABLE GO
A1ED ; [.3FAC.0020.0002] # YI SYLLABLE GOP
A1EE ; [.3FAD.0020.0002] # YI SYLLABLE GET
A1EF ; [.3FAE.0020.0002] # YI SYLLABLE GEX
A1F0 ; [.3FAF.0020.0002] # YI SYLLABLE GE
A1F1 ; [.3FB0.0020.0002] # YI SYLLABLE GEP
A1F2 ; [.3FB1.0020.0002] # YI SYLLABLE GUT
A1F3 ; [.3FB2.0020.0002] # YI SYLLABLE GUX
A1F4 ; [.3FB3.0020.0002] # YI SYLLABLE GU
A1F5 ; [.3FB4.0020.0002] # YI SYLLABLE GUP
A1F6 ; [.3FB5.0020.0002] # YI SYLLABLE GURX
A1F7 ; [.3FB6.0020.0002] # YI SYLLABLE GUR
A1F8 ; [.3FB7.0020.0002] # YI SYLLABLE KIT
A1F9 ; [.3FB8.0020.0002] # YI SYLLABLE KIX
A1FA ; [.3FB9.0020.0002] # YI SYLLABLE KI
A1FB ; [.3FBA.0020.0002] # YI SYLLABLE KIP
A1FC ; [.3FBB.0020.0002] # YI SYLLABLE KIEX
A1FD ; [.3FBC.0020.0002] # YI SYLLABLE KIE
A1FE ; [.3FBD.0020.0002] # YI SYLLABLE KIEP
A1FF ; [.3FBE.0020.0002] # YI SYLLABLE KAT
A200 ; [.3FBF.0020.0002] # YI SYLLABLE KAX
A201 ; [.3FC0.0020.0002] # YI SYLLABLE KA
A202 ; [.3FC1.0020.0002] # YI SYLLABLE KAP
A203 ; [.3FC2.0020.0002] # YI SYLLABLE KUOX
A204 ; [.3FC3.0020.0002] # YI SYLLABLE KUO
A205 ; [.3FC4.0020.0002] # YI SYLLABLE KUOP
A206 ; [.3FC5.0020.0002] # YI SYLLABLE KOT
A207 ; [.3FC6.0020.0002] # YI SYLLABLE KOX
A208 ; [.3FC7.0020.0002] # YI SYLLABLE KO
A209 ; [.3FC8.0020.0002] # YI SYLLABLE KOP
A20A ; [.3FC9.0020.0002] # YI SYLLABLE KET
A20B ; [.3FCA.0020.0002] # YI SYLLABLE KEX
A20C ; [.3FCB.0020.0002] # YI SYLLABLE KE
A20D ; [.3FCC.0020.0002] # YI SYLLABLE KEP
A20E ; [.3FCD.0020.0002] # YI SYLLABLE KUT
A20F ; [.3FCE.0020.0002] # YI SYLLABLE KUX
A210 ; [.3FCF.0020.0002] # YI SYLLABLE KU
A211 ; [.3FD0.0020.0002] # YI SYLLABLE KUP
A212 ; [.3FD1.0020.0002] # YI SYLLABLE KURX
A213 ; [.3FD2.0020.0002] # YI SYLLABLE KUR
A214 ; [.3FD3.0020.0002] # YI SYLLABLE GGIT
A215 ; [.3FD4.0020.0002] # YI SYLLABLE GGIX
A216 ; [.3FD5.0020.0002] # YI SYLLABLE GGI
A217 ; [.3FD6.0020.0002] # YI SYLLABLE GGIEX
A218 ; [.3FD7.0020.0002] # YI SYLLABLE GGIE
A219 ; [.3FD8.0020.0002] # YI SYLLABLE GGIEP
A21A ; [.3FD9.0020.0002] # YI SYLLABLE GGAT
A21B ; [.3FDA.0020.0002] # YI SYLLABLE GGAX
A21C ; [.3FDB.0020.0002] # YI SYLLABLE GGA
A21D ; [.3FDC.0020.0002] # YI SYLLABLE GGAP
A21E ; [.3FDD.0020.0002] # YI SYLLABLE GGUOT
A21F ; [.3FDE.0020.0002] # YI SYLLABLE GGUOX
A220 ; [.3FDF.0020.0002] # YI SYLLABLE GGUO
A221 ; [.3FE0.0020.0002] # YI SYLLABLE GGUOP
A222 ; [.3FE1.0020.0002] # YI SYLLABLE GGOT
A223 ; [.3FE2.0020.0002] # YI SYLLABLE GGOX
A224 ; [.3FE3.0020.0002] # YI SYLLABLE GGO
A225 ; [.3FE4.0020.0002] # YI SYLLABLE GGOP
A226 ; [.3FE5.0020.0002] # YI SYLLABLE GGET
A227 ; [.3FE6.0020.0002] # YI SYLLABLE GGEX
A228 ; [.3FE7.0020.0002] # YI SYLLABLE GGE
A229 ; [.3FE8.0020.0002] # YI SYLLABLE GGEP
A22A ; [.3FE9.0020.0002] # YI SYLLABLE GGUT
A22B ; [.3FEA.0020.0002] # YI SYLLABLE GGUX
A22C ; [.3FEB.0020.0002] # YI SYLLABLE GGU
A22D ; [.3FEC.0020.0002] # YI SYLLABLE GGUP
A22E ; [.3FED.0020.0002] # YI SYLLABLE GGURX
A22F ; [.3FEE.0020.0002] # YI SYLLABLE GGUR
A230 ; [.3FEF.0020.0002] # YI SYLLABLE MGIEX
A231 ; [.3FF0.0020.0002] # YI SYLLABLE MGIE
A232 ; [.3FF1.0020.0002] # YI SYLLABLE MGAT
A233 ; [.3FF2.0020.0002] # YI SYLLABLE MGAX
A234 ; [.3FF3.0020.0002] # YI SYLLABLE MGA
A235 ; [.3FF4.0020.0002] # YI SYLLABLE MGAP
A236 ; [.3FF5.0020.0002] # YI SYLLABLE MGUOX
A237 ; [.3FF6.0020.0002] # YI SYLLABLE MGUO
A238 ; [.3FF7.0020.0002] # YI SYLLABLE MGUOP
A239 ; [.3FF8.0020.0002] # YI SYLLABLE MGOT
A23A ; [.3FF9.0020.0002] # YI SYLLABLE MGOX
A23B ; [.3FFA.0020.0002] # YI SYLLABLE MGO
A23C ; [.3FFB.0020.0002] # YI SYLLABLE MGOP
A23D ; [.3FFC.0020.0002] # YI SYLLABLE MGEX
A23E ; [.3FFD.0020.0002] # YI SYLLABLE MGE
A23F ; [.3FFE.0020.0002] # YI SYLLABLE MGEP
A240 ; [.3FFF.0020.0002] # YI SYLLABLE MGUT
A241 ; [.4000.0020.0002] # YI SYLLABLE MGUX
A242 ; [.4001.0020.0002] # YI SYLLABLE MGU
A243 ; [.4002.0020.0002] # YI SYLLABLE MGUP
A244 ; [.4003.0020.0002] # YI SYLLABLE MGURX
A245 ; [.4004.0020.0002] # YI SYLLABLE MGUR
A246 ; [.4005.0020.0002] # YI SYLLABLE HXIT
A247 ; [.4006.0020.0002] # YI SYLLABLE HXIX
A248 ; [.4007.0020.0002] # YI SYLLABLE HXI
A249 ; [.4008.0020.0002] # YI SYLLABLE HXIP
A24A ; [.4009.0020.0002] # YI SYLLABLE HXIET
A24B ; [.400A.0020.0002] # YI SYLLABLE HXIEX
A24C ; [.400B.0020.0002] # YI SYLLABLE HXIE
A24D ; [.400C.0020.0002] # YI SYLLABLE HXIEP
A24E ; [.400D.0020.0002] # YI SYLLABLE HXAT
A24F ; [.400E.0020.0002] # YI SYLLABLE HXAX
A250 ; [.400F.0020.0002] # YI SYLLABLE HXA
A251 ; [.4010.0020.0002] # YI SYLLABLE HXAP
A252 ; [.4011.0020.0002] # YI SYLLABLE HXUOT
A253 ; [.4012.0020.0002] # YI SYLLABLE HXUOX
A254 ; [.4013.0020.0002] # YI SYLLABLE HXUO
A255 ; [.4014.0020.0002] # YI SYLLABLE HXUOP
A256 ; [.4015.0020.0002] # YI SYLLABLE HXOT
A257 ; [.4016.0020.0002] # YI SYLLABLE HXOX
A258 ; [.4017.0020.0002] # YI SYLLABLE HXO
A259 ; [.4018.0020.0002] # YI SYLLABLE HXOP
A25A ; [.4019.0020.0002] # YI SYLLABLE HXEX
A25B ; [.401A.0020.0002] # YI SYLLABLE HXE
A25C ; [.401B.0020.0002] # YI SYLLABLE HXEP
A25D ; [.401C.0020.0002] # YI SYLLABLE NGIEX
A25E ; [.401D.0020.0002] # YI SYLLABLE NGIE
A25F ; [.401E.0020.0002] # YI SYLLABLE NGIEP
A260 ; [.401F.0020.0002] # YI SYLLABLE NGAT
A261 ; [.4020.0020.0002] # YI SYLLABLE NGAX
A262 ; [.4021.0020.0002] # YI SYLLABLE NGA
A263 ; [.4022.0020.0002] # YI SYLLABLE NGAP
A264 ; [.4023.0020.0002] # YI SYLLABLE NGUOT
A265 ; [.4024.0020.0002] # YI SYLLABLE NGUOX
A266 ; [.4025.0020.0002] # YI SYLLABLE NGUO
A267 ; [.4026.0020.0002] # YI SYLLABLE NGOT
A268 ; [.4027.0020.0002] # YI SYLLABLE NGOX
A269 ; [.4028.0020.0002] # YI SYLLABLE NGO
A26A ; [.4029.0020.0002] # YI SYLLABLE NGOP
A26B ; [.402A.0020.0002] # YI SYLLABLE NGEX
A26C ; [.402B.0020.0002] # YI SYLLABLE NGE
A26D ; [.402C.0020.0002] # YI SYLLABLE NGEP
A26E ; [.402D.0020.0002] # YI SYLLABLE HIT
A26F ; [.402E.0020.0002] # YI SYLLABLE HIEX
A270 ; [.402F.0020.0002] # YI SYLLABLE HIE
A271 ; [.4030.0020.0002] # YI SYLLABLE HAT
A272 ; [.4031.0020.0002] # YI SYLLABLE HAX
A273 ; [.4032.0020.0002] # YI SYLLABLE HA
A274 ; [.4033.0020.0002] # YI SYLLABLE HAP
A275 ; [.4034.0020.0002] # YI SYLLABLE HUOT
A276 ; [.4035.0020.0002] # YI SYLLABLE HUOX
A277 ; [.4036.0020.0002] # YI SYLLABLE HUO
A278 ; [.4037.0020.0002] # YI SYLLABLE HUOP
A279 ; [.4038.0020.0002] # YI SYLLABLE HOT
A27A ; [.4039.0020.0002] # YI SYLLABLE HOX
A27B ; [.403A.0020.0002] # YI SYLLABLE HO
A27C ; [.403B.0020.0002] # YI SYLLABLE HOP
A27D ; [.403C.0020.0002] # YI SYLLABLE HEX
A27E ; [.403D.0020.0002] # YI SYLLABLE HE
A27F ; [.403E.0020.0002] # YI SYLLABLE HEP
A280 ; [.403F.0020.0002] # YI SYLLABLE WAT
A281 ; [.4040.0020.0002] # YI SYLLABLE WAX
A282 ; [.4041.0020.0002] # YI SYLLABLE WA
A283 ; [.4042.0020.0002] # YI SYLLABLE WAP
A284 ; [.4043.0020.0002] # YI SYLLABLE WUOX
A285 ; [.4044.0020.0002] # YI SYLLABLE WUO
A286 ; [.4045.0020.0002] # YI SYLLABLE WUOP
A287 ; [.4046.0020.0002] # YI SYLLABLE WOX
A288 ; [.4047.0020.0002] # YI SYLLABLE WO
A289 ; [.4048.0020.0002] # YI SYLLABLE WOP
A28A ; [.4049.0020.0002] # YI SYLLABLE WEX
A28B ; [.404A.0020.0002] # YI SYLLABLE WE
A28C ; [.404B.0020.0002] # YI SYLLABLE WEP
A28D ; [.404C.0020.0002] # YI SYLLABLE ZIT
A28E ; [.404D.0020.0002] # YI SYLLABLE ZIX
A28F ; [.404E.0020.0002] # YI SYLLABLE ZI
A290 ; [.404F.0020.0002] # YI SYLLABLE ZIP
A291 ; [.4050.0020.0002] # YI SYLLABLE ZIEX
A292 ; [.4051.0020.0002] # YI SYLLABLE ZIE
A293 ; [.4052.0020.0002] # YI SYLLABLE ZIEP
A294 ; [.4053.0020.0002] # YI SYLLABLE ZAT
A295 ; [.4054.0020.0002] # YI SYLLABLE ZAX
A296 ; [.4055.0020.0002] # YI SYLLABLE ZA
A297 ; [.4056.0020.0002] # YI SYLLABLE ZAP
A298 ; [.4057.0020.0002] # YI SYLLABLE ZUOX
A299 ; [.4058.0020.0002] # YI SYLLABLE ZUO
A29A ; [.4059.0020.0002] # YI SYLLABLE ZUOP
A29B ; [.405A.0020.0002] # YI SYLLABLE ZOT
A29C ; [.405B.0020.0002] # YI SYLLABLE ZOX
A29D ; [.405C.0020.0002] # YI SYLLABLE ZO
A29E ; [.405D.0020.0002] # YI SYLLABLE ZOP
A29F ; [.405E.0020.0002] # YI SYLLABLE ZEX
A2A0 ; [.405F.0020.0002] # YI SYLLABLE ZE
A2A1 ; [.4060.0020.0002] # YI SYLLABLE ZEP
A2A2 ; [.4061.0020.0002] # YI SYLLABLE ZUT
A2A3 ; [.4062.0020.0002] # YI SYLLABLE ZUX
A2A4 ; [.4063.0020.0002] # YI SYLLABLE ZU
A2A5 ; [.4064.0020.0002] # YI SYLLABLE ZUP
A2A6 ; [.4065.0020.0002] # YI SYLLABLE ZURX
A2A7 ; [.4066.0020.0002] # YI SYLLABLE ZUR
A2A8 ; [.4067.0020.0002] # YI SYLLABLE ZYT
A2A9 ; [.4068.0020.0002] # YI SYLLABLE ZYX
A2AA ; [.4069.0020.0002] # YI SYLLABLE ZY
A2AB ; [.406A.0020.0002] # YI SYLLABLE ZYP
A2AC ; [.406B.0020.0002] # YI SYLLABLE ZYRX
A2AD ; [.406C.0020.0002] # YI SYLLABLE ZYR
A2AE ; [.406D.0020.0002] # YI SYLLABLE CIT
A2AF ; [.406E.0020.0002] # YI SYLLABLE CIX
A2B0 ; [.406F.0020.0002] # YI SYLLABLE CI
A2B1 ; [.4070.0020.0002] # YI SYLLABLE CIP
A2B2 ; [.4071.0020.0002] # YI SYLLABLE CIET
A2B3 ; [.4072.0020.0002] # YI SYLLABLE CIEX
A2B4 ; [.4073.0020.0002] # YI SYLLABLE CIE
A2B5 ; [.4074.0020.0002] # YI SYLLABLE CIEP
A2B6 ; [.4075.0020.0002] # YI SYLLABLE CAT
A2B7 ; [.4076.0020.0002] # YI SYLLABLE CAX
A2B8 ; [.4077.0020.0002] # YI SYLLABLE CA
A2B9 ; [.4078.0020.0002] # YI SYLLABLE CAP
A2BA ; [.4079.0020.0002] # YI SYLLABLE CUOX
A2BB ; [.407A.0020.0002] # YI SYLLABLE CUO
A2BC ; [.407B.0020.0002] # YI SYLLABLE CUOP
A2BD ; [.407C.0020.0002] # YI SYLLABLE COT
A2BE ; [.407D.0020.0002] # YI SYLLABLE COX
A2BF ; [.407E.0020.0002] # YI SYLLABLE CO
A2C0 ; [.407F.0020.0002] # YI SYLLABLE COP
A2C1 ; [.4080.0020.0002] # YI SYLLABLE CEX
A2C2 ; [.4081.0020.0002] # YI SYLLABLE CE
A2C3 ; [.4082.0020.0002] # YI SYLLABLE CEP
A2C4 ; [.4083.0020.0002] # YI SYLLABLE CUT
A2C5 ; [.4084.0020.0002] # YI SYLLABLE CUX
A2C6 ; [.4085.0020.0002] # YI SYLLABLE CU
A2C7 ; [.4086.0020.0002] # YI SYLLABLE CUP
A2C8 ; [.4087.0020.0002] # YI SYLLABLE CURX
A2C9 ; [.4088.0020.0002] # YI SYLLABLE CUR
A2CA ; [.4089.0020.0002] # YI SYLLABLE CYT
A2CB ; [.408A.0020.0002] # YI SYLLABLE CYX
A2CC ; [.408B.0020.0002] # YI SYLLABLE CY
A2CD ; [.408C.0020.0002] # YI SYLLABLE CYP
A2CE ; [.408D.0020.0002] # YI SYLLABLE CYRX
A2CF ; [.408E.0020.0002] # YI SYLLABLE CYR
A2D0 ; [.408F.0020.0002] # YI SYLLABLE ZZIT
A2D1 ; [.4090.0020.0002] # YI SYLLABLE ZZIX
A2D2 ; [.4091.0020.0002] # YI SYLLABLE ZZI
A2D3 ; [.4092.0020.0002] # YI SYLLABLE ZZIP
A2D4 ; [.4093.0020.0002] # YI SYLLABLE ZZIET
A2D5 ; [.4094.0020.0002] # YI SYLLABLE ZZIEX
A2D6 ; [.4095.0020.0002] # YI SYLLABLE ZZIE
A2D7 ; [.4096.0020.0002] # YI SYLLABLE ZZIEP
A2D8 ; [.4097.0020.0002] # YI SYLLABLE ZZAT
A2D9 ; [.4098.0020.0002] # YI SYLLABLE ZZAX
A2DA ; [.4099.0020.0002] # YI SYLLABLE ZZA
A2DB ; [.409A.0020.0002] # YI SYLLABLE ZZAP
A2DC ; [.409B.0020.0002] # YI SYLLABLE ZZOX
A2DD ; [.409C.0020.0002] # YI SYLLABLE ZZO
A2DE ; [.409D.0020.0002] # YI SYLLABLE ZZOP
A2DF ; [.409E.0020.0002] # YI SYLLABLE ZZEX
A2E0 ; [.409F.0020.0002] # YI SYLLABLE ZZE
A2E1 ; [.40A0.0020.0002] # YI SYLLABLE ZZEP
A2E2 ; [.40A1.0020.0002] # YI SYLLABLE ZZUX
A2E3 ; [.40A2.0020.0002] # YI SYLLABLE ZZU
A2E4 ; [.40A3.0020.0002] # YI SYLLABLE ZZUP
A2E5 ; [.40A4.0020.0002] # YI SYLLABLE ZZURX
A2E6 ; [.40A5.0020.0002] # YI SYLLABLE ZZUR
A2E7 ; [.40A6.0020.0002] # YI SYLLABLE ZZYT
A2E8 ; [.40A7.0020.0002] # YI SYLLABLE ZZYX
A2E9 ; [.40A8.0020.0002] # YI SYLLABLE ZZY
A2EA ; [.40A9.0020.0002] # YI SYLLABLE ZZYP
A2EB ; [.40AA.0020.0002] # YI SYLLABLE ZZYRX
A2EC ; [.40AB.0020.0002] # YI SYLLABLE ZZYR
A2ED ; [.40AC.0020.0002] # YI SYLLABLE NZIT
A2EE ; [.40AD.0020.0002] # YI SYLLABLE NZIX
A2EF ; [.40AE.0020.0002] # YI SYLLABLE NZI
A2F0 ; [.40AF.0020.0002] # YI SYLLABLE NZIP
A2F1 ; [.40B0.0020.0002] # YI SYLLABLE NZIEX
A2F2 ; [.40B1.0020.0002] # YI SYLLABLE NZIE
A2F3 ; [.40B2.0020.0002] # YI SYLLABLE NZIEP
A2F4 ; [.40B3.0020.0002] # YI SYLLABLE NZAT
A2F5 ; [.40B4.0020.0002] # YI SYLLABLE NZAX
A2F6 ; [.40B5.0020.0002] # YI SYLLABLE NZA
A2F7 ; [.40B6.0020.0002] # YI SYLLABLE NZAP
A2F8 ; [.40B7.0020.0002] # YI SYLLABLE NZUOX
A2F9 ; [.40B8.0020.0002] # YI SYLLABLE NZUO
A2FA ; [.40B9.0020.0002] # YI SYLLABLE NZOX
A2FB ; [.40BA.0020.0002] # YI SYLLABLE NZOP
A2FC ; [.40BB.0020.0002] # YI SYLLABLE NZEX
A2FD ; [.40BC.0020.0002] # YI SYLLABLE NZE
A2FE ; [.40BD.0020.0002] # YI SYLLABLE NZUX
A2FF ; [.40BE.0020.0002] # YI SYLLABLE NZU
A300 ; [.40BF.0020.0002] # YI SYLLABLE NZUP
A301 ; [.40C0.0020.0002] # YI SYLLABLE NZURX
A302 ; [.40C1.0020.0002] # YI SYLLABLE NZUR
A303 ; [.40C2.0020.0002] # YI SYLLABLE NZYT
A304 ; [.40C3.0020.0002] # YI SYLLABLE NZYX
A305 ; [.40C4.0020.0002] # YI SYLLABLE NZY
A306 ; [.40C5.0020.0002] # YI SYLLABLE NZYP
A307 ; [.40C6.0020.0002] # YI SYLLABLE NZYRX
A308 ; [.40C7.0020.0002] # YI SYLLABLE NZYR
A309 ; [.40C8.0020.0002] # YI SYLLABLE SIT
A30A ; [.40C9.0020.0002] # YI SYLLABLE SIX
A30B ; [.40CA.0020.0002] # YI SYLLABLE SI
A30C ; [.40CB.0020.0002] # YI SYLLABLE SIP
A30D ; [.40CC.0020.0002] # YI SYLLABLE SIEX
A30E ; [.40CD.0020.0002] # YI SYLLABLE SIE
A30F ; [.40CE.0020.0002] # YI SYLLABLE SIEP
A310 ; [.40CF.0020.0002] # YI SYLLABLE SAT
A311 ; [.40D0.0020.0002] # YI SYLLABLE SAX
A312 ; [.40D1.0020.0002] # YI SYLLABLE SA
A313 ; [.40D2.0020.0002] # YI SYLLABLE SAP
A314 ; [.40D3.0020.0002] # YI SYLLABLE SUOX
A315 ; [.40D4.0020.0002] # YI SYLLABLE SUO
A316 ; [.40D5.0020.0002] # YI SYLLABLE SUOP
A317 ; [.40D6.0020.0002] # YI SYLLABLE SOT
A318 ; [.40D7.0020.0002] # YI SYLLABLE SOX
A319 ; [.40D8.0020.0002] # YI SYLLABLE SO
A31A ; [.40D9.0020.0002] # YI SYLLABLE SOP
A31B ; [.40DA.0020.0002] # YI SYLLABLE SEX
A31C ; [.40DB.0020.0002] # YI SYLLABLE SE
A31D ; [.40DC.0020.0002] # YI SYLLABLE SEP
A31E ; [.40DD.0020.0002] # YI SYLLABLE SUT
A31F ; [.40DE.0020.0002] # YI SYLLABLE SUX
A320 ; [.40DF.0020.0002] # YI SYLLABLE SU
A321 ; [.40E0.0020.0002] # YI SYLLABLE SUP
A322 ; [.40E1.0020.0002] # YI SYLLABLE SURX
A323 ; [.40E2.0020.0002] # YI SYLLABLE SUR
A324 ; [.40E3.0020.0002] # YI SYLLABLE SYT
A325 ; [.40E4.0020.0002] # YI SYLLABLE SYX
A326 ; [.40E5.0020.0002] # YI SYLLABLE SY
A327 ; [.40E6.0020.0002] # YI SYLLABLE SYP
A328 ; [.40E7.0020.0002] # YI SYLLABLE SYRX
A329 ; [.40E8.0020.0002] # YI SYLLABLE SYR
A32A ; [.40E9.0020.0002] # YI SYLLABLE SSIT
A32B ; [.40EA.0020.0002] # YI SYLLABLE SSIX
A32C ; [.40EB.0020.0002] # YI SYLLABLE SSI
A32D ; [.40EC.0020.0002] # YI SYLLABLE SSIP
A32E ; [.40ED.0020.0002] # YI SYLLABLE SSIEX
A32F ; [.40EE.0020.0002] # YI SYLLABLE SSIE
A330 ; [.40EF.0020.0002] # YI SYLLABLE SSIEP
A331 ; [.40F0.0020.0002] # YI SYLLABLE SSAT
A332 ; [.40F1.0020.0002] # YI SYLLABLE SSAX
A333 ; [.40F2.0020.0002] # YI SYLLABLE SSA
A334 ; [.40F3.0020.0002] # YI SYLLABLE SSAP
A335 ; [.40F4.0020.0002] # YI SYLLABLE SSOT
A336 ; [.40F5.0020.0002] # YI SYLLABLE SSOX
A337 ; [.40F6.0020.0002] # YI SYLLABLE SSO
A338 ; [.40F7.0020.0002] # YI SYLLABLE SSOP
A339 ; [.40F8.0020.0002] # YI SYLLABLE SSEX
A33A ; [.40F9.0020.0002] # YI SYLLABLE SSE
A33B ; [.40FA.0020.0002] # YI SYLLABLE SSEP
A33C ; [.40FB.0020.0002] # YI SYLLABLE SSUT
A33D ; [.40FC.0020.0002] # YI SYLLABLE SSUX
A33E ; [.40FD.0020.0002] # YI SYLLABLE SSU
A33F ; [.40FE.0020.0002] # YI SYLLABLE SSUP
A340 ; [.40FF.0020.0002] # YI SYLLABLE SSYT
A341 ; [.4100.0020.0002] # YI SYLLABLE SSYX
A342 ; [.4101.0020.0002] # YI SYLLABLE SSY
A343 ; [.4102.0020.0002] # YI SYLLABLE SSYP
A344 ; [.4103.0020.0002] # YI SYLLABLE SSYRX
A345 ; [.4104.0020.0002] # YI SYLLABLE SSYR
A346 ; [.4105.0020.0002] # YI SYLLABLE ZHAT
A347 ; [.4106.0020.0002] # YI SYLLABLE ZHAX
A348 ; [.4107.0020.0002] # YI SYLLABLE ZHA
A349 ; [.4108.0020.0002] # YI SYLLABLE ZHAP
A34A ; [.4109.0020.0002] # YI SYLLABLE ZHUOX
A34B ; [.410A.0020.0002] # YI SYLLABLE ZHUO
A34C ; [.410B.0020.0002] # YI SYLLABLE ZHUOP
A34D ; [.410C.0020.0002] # YI SYLLABLE ZHOT
A34E ; [.410D.0020.0002] # YI SYLLABLE ZHOX
A34F ; [.410E.0020.0002] # YI SYLLABLE ZHO
A350 ; [.410F.0020.0002] # YI SYLLABLE ZHOP
A351 ; [.4110.0020.0002] # YI SYLLABLE ZHET
A352 ; [.4111.0020.0002] # YI SYLLABLE ZHEX
A353 ; [.4112.0020.0002] # YI SYLLABLE ZHE
A354 ; [.4113.0020.0002] # YI SYLLABLE ZHEP
A355 ; [.4114.0020.0002] # YI SYLLABLE ZHUT
A356 ; [.4115.0020.0002] # YI SYLLABLE ZHUX
A357 ; [.4116.0020.0002] # YI SYLLABLE ZHU
A358 ; [.4117.0020.0002] # YI SYLLABLE ZHUP
A359 ; [.4118.0020.0002] # YI SYLLABLE ZHURX
A35A ; [.4119.0020.0002] # YI SYLLABLE ZHUR
A35B ; [.411A.0020.0002] # YI SYLLABLE ZHYT
A35C ; [.411B.0020.0002] # YI SYLLABLE ZHYX
A35D ; [.411C.0020.0002] # YI SYLLABLE ZHY
A35E ; [.411D.0020.0002] # YI SYLLABLE ZHYP
A35F ; [.411E.0020.0002] # YI SYLLABLE ZHYRX
A360 ; [.411F.0020.0002] # YI SYLLABLE ZHYR
A361 ; [.4120.0020.0002] # YI SYLLABLE CHAT
A362 ; [.4121.0020.0002] # YI SYLLABLE CHAX
A363 ; [.4122.0020.0002] # YI SYLLABLE CHA
A364 ; [.4123.0020.0002] # YI SYLLABLE CHAP
A365 ; [.4124.0020.0002] # YI SYLLABLE CHUOT
A366 ; [.4125.0020.0002] # YI SYLLABLE CHUOX
A367 ; [.4126.0020.0002] # YI SYLLABLE CHUO
A368 ; [.4127.0020.0002] # YI SYLLABLE CHUOP
A369 ; [.4128.0020.0002] # YI SYLLABLE CHOT
A36A ; [.4129.0020.0002] # YI SYLLABLE CHOX
A36B ; [.412A.0020.0002] # YI SYLLABLE CHO
A36C ; [.412B.0020.0002] # YI SYLLABLE CHOP
A36D ; [.412C.0020.0002] # YI SYLLABLE CHET
A36E ; [.412D.0020.0002] # YI SYLLABLE CHEX
A36F ; [.412E.0020.0002] # YI SYLLABLE CHE
A370 ; [.412F.0020.0002] # YI SYLLABLE CHEP
A371 ; [.4130.0020.0002] # YI SYLLABLE CHUX
A372 ; [.4131.0020.0002] # YI SYLLABLE CHU
A373 ; [.4132.0020.0002] # YI SYLLABLE CHUP
A374 ; [.4133.0020.0002] # YI SYLLABLE CHURX
A375 ; [.4134.0020.0002] # YI SYLLABLE CHUR
A376 ; [.4135.0020.0002] # YI SYLLABLE CHYT
A377 ; [.4136.0020.0002] # YI SYLLABLE CHYX
A378 ; [.4137.0020.0002] # YI SYLLABLE CHY
A379 ; [.4138.0020.0002] # YI SYLLABLE CHYP
A37A ; [.4139.0020.0002] # YI SYLLABLE CHYRX
A37B ; [.413A.0020.0002] # YI SYLLABLE CHYR
A37C ; [.413B.0020.0002] # YI SYLLABLE RRAX
A37D ; [.413C.0020.0002] # YI SYLLABLE RRA
A37E ; [.413D.0020.0002] # YI SYLLABLE RRUOX
A37F ; [.413E.0020.0002] # YI SYLLABLE RRUO
A380 ; [.413F.0020.0002] # YI SYLLABLE RROT
A381 ; [.4140.0020.0002] # YI SYLLABLE RROX
A382 ; [.4141.0020.0002] # YI SYLLABLE RRO
A383 ; [.4142.0020.0002] # YI SYLLABLE RROP
A384 ; [.4143.0020.0002] # YI SYLLABLE RRET
A385 ; [.4144.0020.0002] # YI SYLLABLE RREX
A386 ; [.4145.0020.0002] # YI SYLLABLE RRE
A387 ; [.4146.0020.0002] # YI SYLLABLE RREP
A388 ; [.4147.0020.0002] # YI SYLLABLE RRUT
A389 ; [.4148.0020.0002] # YI SYLLABLE RRUX
A38A ; [.4149.0020.0002] # YI SYLLABLE RRU
A38B ; [.414A.0020.0002] # YI SYLLABLE RRUP
A38C ; [.414B.0020.0002] # YI SYLLABLE RRURX
A38D ; [.414C.0020.0002] # YI SYLLABLE RRUR
A38E ; [.414D.0020.0002] # YI SYLLABLE RRYT
A38F ; [.414E.0020.0002] # YI SYLLABLE RRYX
A390 ; [.414F.0020.0002] # YI SYLLABLE RRY
A391 ; [.4150.0020.0002] # YI SYLLABLE RRYP
A392 ; [.4151.0020.0002] # YI SYLLABLE RRYRX
A393 ; [.4152.0020.0002] # YI SYLLABLE RRYR
A394 ; [.4153.0020.0002] # YI SYLLABLE NRAT
A395 ; [.4154.0020.0002] # YI SYLLABLE NRAX
A396 ; [.4155.0020.0002] # YI SYLLABLE NRA
A397 ; [.4156.0020.0002] # YI SYLLABLE NRAP
A398 ; [.4157.0020.0002] # YI SYLLABLE NROX
A399 ; [.4158.0020.0002] # YI SYLLABLE NRO
A39A ; [.4159.0020.0002] # YI SYLLABLE NROP
A39B ; [.415A.0020.0002] # YI SYLLABLE NRET
A39C ; [.415B.0020.0002] # YI SYLLABLE NREX
A39D ; [.415C.0020.0002] # YI SYLLABLE NRE
A39E ; [.415D.0020.0002] # YI SYLLABLE NREP
A39F ; [.415E.0020.0002] # YI SYLLABLE NRUT
A3A0 ; [.415F.0020.0002] # YI SYLLABLE NRUX
A3A1 ; [.4160.0020.0002] # YI SYLLABLE NRU
A3A2 ; [.4161.0020.0002] # YI SYLLABLE NRUP
A3A3 ; [.4162.0020.0002] # YI SYLLABLE NRURX
A3A4 ; [.4163.0020.0002] # YI SYLLABLE NRUR
A3A5 ; [.4164.0020.0002] # YI SYLLABLE NRYT
A3A6 ; [.4165.0020.0002] # YI SYLLABLE NRYX
A3A7 ; [.4166.0020.0002] # YI SYLLABLE NRY
A3A8 ; [.4167.0020.0002] # YI SYLLABLE NRYP
A3A9 ; [.4168.0020.0002] # YI SYLLABLE NRYRX
A3AA ; [.4169.0020.0002] # YI SYLLABLE NRYR
A3AB ; [.416A.0020.0002] # YI SYLLABLE SHAT
A3AC ; [.416B.0020.0002] # YI SYLLABLE SHAX
A3AD ; [.416C.0020.0002] # YI SYLLABLE SHA
A3AE ; [.416D.0020.0002] # YI SYLLABLE SHAP
A3AF ; [.416E.0020.0002] # YI SYLLABLE SHUOX
A3B0 ; [.416F.0020.0002] # YI SYLLABLE SHUO
A3B1 ; [.4170.0020.0002] # YI SYLLABLE SHUOP
A3B2 ; [.4171.0020.0002] # YI SYLLABLE SHOT
A3B3 ; [.4172.0020.0002] # YI SYLLABLE SHOX
A3B4 ; [.4173.0020.0002] # YI SYLLABLE SHO
A3B5 ; [.4174.0020.0002] # YI SYLLABLE SHOP
A3B6 ; [.4175.0020.0002] # YI SYLLABLE SHET
A3B7 ; [.4176.0020.0002] # YI SYLLABLE SHEX
A3B8 ; [.4177.0020.0002] # YI SYLLABLE SHE
A3B9 ; [.4178.0020.0002] # YI SYLLABLE SHEP
A3BA ; [.4179.0020.0002] # YI SYLLABLE SHUT
A3BB ; [.417A.0020.0002] # YI SYLLABLE SHUX
A3BC ; [.417B.0020.0002] # YI SYLLABLE SHU
A3BD ; [.417C.0020.0002] # YI SYLLABLE SHUP
A3BE ; [.417D.0020.0002] # YI SYLLABLE SHURX
A3BF ; [.417E.0020.0002] # YI SYLLABLE SHUR
A3C0 ; [.417F.0020.0002] # YI SYLLABLE SHYT
A3C1 ; [.4180.0020.0002] # YI SYLLABLE SHYX
A3C2 ; [.4181.0020.0002] # YI SYLLABLE SHY
A3C3 ; [.4182.0020.0002] # YI SYLLABLE SHYP
A3C4 ; [.4183.0020.0002] # YI SYLLABLE SHYRX
A3C5 ; [.4184.0020.0002] # YI SYLLABLE SHYR
A3C6 ; [.4185.0020.0002] # YI SYLLABLE RAT
A3C7 ; [.4186.0020.0002] # YI SYLLABLE RAX
A3C8 ; [.4187.0020.0002] # YI SYLLABLE RA
A3C9 ; [.4188.0020.0002] # YI SYLLABLE RAP
A3CA ; [.4189.0020.0002] # YI SYLLABLE RUOX
A3CB ; [.418A.0020.0002] # YI SYLLABLE RUO
A3CC ; [.418B.0020.0002] # YI SYLLABLE RUOP
A3CD ; [.418C.0020.0002] # YI SYLLABLE ROT
A3CE ; [.418D.0020.0002] # YI SYLLABLE ROX
A3CF ; [.418E.0020.0002] # YI SYLLABLE RO
A3D0 ; [.418F.0020.0002] # YI SYLLABLE ROP
A3D1 ; [.4190.0020.0002] # YI SYLLABLE REX
A3D2 ; [.4191.0020.0002] # YI SYLLABLE RE
A3D3 ; [.4192.0020.0002] # YI SYLLABLE REP
A3D4 ; [.4193.0020.0002] # YI SYLLABLE RUT
A3D5 ; [.4194.0020.0002] # YI SYLLABLE RUX
A3D6 ; [.4195.0020.0002] # YI SYLLABLE RU
A3D7 ; [.4196.0020.0002] # YI SYLLABLE RUP
A3D8 ; [.4197.0020.0002] # YI SYLLABLE RURX
A3D9 ; [.4198.0020.0002] # YI SYLLABLE RUR
A3DA ; [.4199.0020.0002] # YI SYLLABLE RYT
A3DB ; [.419A.0020.0002] # YI SYLLABLE RYX
A3DC ; [.419B.0020.0002] # YI SYLLABLE RY
A3DD ; [.419C.0020.0002] # YI SYLLABLE RYP
A3DE ; [.419D.0020.0002] # YI SYLLABLE RYRX
A3DF ; [.419E.0020.0002] # YI SYLLABLE RYR
A3E0 ; [.419F.0020.0002] # YI SYLLABLE JIT
A3E1 ; [.41A0.0020.0002] # YI SYLLABLE JIX
A3E2 ; [.41A1.0020.0002] # YI SYLLABLE JI
A3E3 ; [.41A2.0020.0002] # YI SYLLABLE JIP
A3E4 ; [.41A3.0020.0002] # YI SYLLABLE JIET
A3E5 ; [.41A4.0020.0002] # YI SYLLABLE JIEX
A3E6 ; [.41A5.0020.0002] # YI SYLLABLE JIE
A3E7 ; [.41A6.0020.0002] # YI SYLLABLE JIEP
A3E8 ; [.41A7.0020.0002] # YI SYLLABLE JUOT
A3E9 ; [.41A8.0020.0002] # YI SYLLABLE JUOX
A3EA ; [.41A9.0020.0002] # YI SYLLABLE JUO
A3EB ; [.41AA.0020.0002] # YI SYLLABLE JUOP
A3EC ; [.41AB.0020.0002] # YI SYLLABLE JOT
A3ED ; [.41AC.0020.0002] # YI SYLLABLE JOX
A3EE ; [.41AD.0020.0002] # YI SYLLABLE JO
A3EF ; [.41AE.0020.0002] # YI SYLLABLE JOP
A3F0 ; [.41AF.0020.0002] # YI SYLLABLE JUT
A3F1 ; [.41B0.0020.0002] # YI SYLLABLE JUX
A3F2 ; [.41B1.0020.0002] # YI SYLLABLE JU
A3F3 ; [.41B2.0020.0002] # YI SYLLABLE JUP
A3F4 ; [.41B3.0020.0002] # YI SYLLABLE JURX
A3F5 ; [.41B4.0020.0002] # YI SYLLABLE JUR
A3F6 ; [.41B5.0020.0002] # YI SYLLABLE JYT
A3F7 ; [.41B6.0020.0002] # YI SYLLABLE JYX
A3F8 ; [.41B7.0020.0002] # YI SYLLABLE JY
A3F9 ; [.41B8.0020.0002] # YI SYLLABLE JYP
A3FA ; [.41B9.0020.0002] # YI SYLLABLE JYRX
A3FB ; [.41BA.0020.0002] # YI SYLLABLE JYR
A3FC ; [.41BB.0020.0002] # YI SYLLABLE QIT
A3FD ; [.41BC.0020.0002] # YI SYLLABLE QIX
A3FE ; [.41BD.0020.0002] # YI SYLLABLE QI
A3FF ; [.41BE.0020.0002] # YI SYLLABLE QIP
A400 ; [.41BF.0020.0002] # YI SYLLABLE QIET
A401 ; [.41C0.0020.0002] # YI SYLLABLE QIEX
A402 ; [.41C1.0020.0002] # YI SYLLABLE QIE
A403 ; [.41C2.0020.0002] # YI SYLLABLE QIEP
A404 ; [.41C3.0020.0002] # YI SYLLABLE QUOT
A405 ; [.41C4.0020.0002] # YI SYLLABLE QUOX
A406 ; [.41C5.0020.0002] # YI SYLLABLE QUO
A407 ; [.41C6.0020.0002] # YI SYLLABLE QUOP
A408 ; [.41C7.0020.0002] # YI SYLLABLE QOT
A409 ; [.41C8.0020.0002] # YI SYLLABLE QOX
A40A ; [.41C9.0020.0002] # YI SYLLABLE QO
A40B ; [.41CA.0020.0002] # YI SYLLABLE QOP
A40C ; [.41CB.0020.0002] # YI SYLLABLE QUT
A40D ; [.41CC.0020.0002] # YI SYLLABLE QUX
A40E ; [.41CD.0020.0002] # YI SYLLABLE QU
A40F ; [.41CE.0020.0002] # YI SYLLABLE QUP
A410 ; [.41CF.0020.0002] # YI SYLLABLE QURX
A411 ; [.41D0.0020.0002] # YI SYLLABLE QUR
A412 ; [.41D1.0020.0002] # YI SYLLABLE QYT
A413 ; [.41D2.0020.0002] # YI SYLLABLE QYX
A414 ; [.41D3.0020.0002] # YI SYLLABLE QY
A415 ; [.41D4.0020.0002] # YI SYLLABLE QYP
A416 ; [.41D5.0020.0002] # YI SYLLABLE QYRX
A417 ; [.41D6.0020.0002] # YI SYLLABLE QYR
A418 ; [.41D7.0020.0002] # YI SYLLABLE JJIT
A419 ; [.41D8.0020.0002] # YI SYLLABLE JJIX
A41A ; [.41D9.0020.0002] # YI SYLLABLE JJI
A41B ; [.41DA.0020.0002] # YI SYLLABLE JJIP
A41C ; [.41DB.0020.0002] # YI SYLLABLE JJIET
A41D ; [.41DC.0020.0002] # YI SYLLABLE JJIEX
A41E ; [.41DD.0020.0002] # YI SYLLABLE JJIE
A41F ; [.41DE.0020.0002] # YI SYLLABLE JJIEP
A420 ; [.41DF.0020.0002] # YI SYLLABLE JJUOX
A421 ; [.41E0.0020.0002] # YI SYLLABLE JJUO
A422 ; [.41E1.0020.0002] # YI SYLLABLE JJUOP
A423 ; [.41E2.0020.0002] # YI SYLLABLE JJOT
A424 ; [.41E3.0020.0002] # YI SYLLABLE JJOX
A425 ; [.41E4.0020.0002] # YI SYLLABLE JJO
A426 ; [.41E5.0020.0002] # YI SYLLABLE JJOP
A427 ; [.41E6.0020.0002] # YI SYLLABLE JJUT
A428 ; [.41E7.0020.0002] # YI SYLLABLE JJUX
A429 ; [.41E8.0020.0002] # YI SYLLABLE JJU
A42A ; [.41E9.0020.0002] # YI SYLLABLE JJUP
A42B ; [.41EA.0020.0002] # YI SYLLABLE JJURX
A42C ; [.41EB.0020.0002] # YI SYLLABLE JJUR
A42D ; [.41EC.0020.0002] # YI SYLLABLE JJYT
A42E ; [.41ED.0020.0002] # YI SYLLABLE JJYX
A42F ; [.41EE.0020.0002] # YI SYLLABLE JJY
A430 ; [.41EF.0020.0002] # YI SYLLABLE JJYP
A431 ; [.41F0.0020.0002] # YI SYLLABLE NJIT
A432 ; [.41F1.0020.0002] # YI SYLLABLE NJIX
A433 ; [.41F2.0020.0002] # YI SYLLABLE NJI
A434 ; [.41F3.0020.0002] # YI SYLLABLE NJIP
A435 ; [.41F4.0020.0002] # YI SYLLABLE NJIET
A436 ; [.41F5.0020.0002] # YI SYLLABLE NJIEX
A437 ; [.41F6.0020.0002] # YI SYLLABLE NJIE
A438 ; [.41F7.0020.0002] # YI SYLLABLE NJIEP
A439 ; [.41F8.0020.0002] # YI SYLLABLE NJUOX
A43A ; [.41F9.0020.0002] # YI SYLLABLE NJUO
A43B ; [.41FA.0020.0002] # YI SYLLABLE NJOT
A43C ; [.41FB.0020.0002] # YI SYLLABLE NJOX
A43D ; [.41FC.0020.0002] # YI SYLLABLE NJO
A43E ; [.41FD.0020.0002] # YI SYLLABLE NJOP
A43F ; [.41FE.0020.0002] # YI SYLLABLE NJUX
A440 ; [.41FF.0020.0002] # YI SYLLABLE NJU
A441 ; [.4200.0020.0002] # YI SYLLABLE NJUP
A442 ; [.4201.0020.0002] # YI SYLLABLE NJURX
A443 ; [.4202.0020.0002] # YI SYLLABLE NJUR
A444 ; [.4203.0020.0002] # YI SYLLABLE NJYT
A445 ; [.4204.0020.0002] # YI SYLLABLE NJYX
A446 ; [.4205.0020.0002] # YI SYLLABLE NJY
A447 ; [.4206.0020.0002] # YI SYLLABLE NJYP
A448 ; [.4207.0020.0002] # YI SYLLABLE NJYRX
A449 ; [.4208.0020.0002] # YI SYLLABLE NJYR
A44A ; [.4209.0020.0002] # YI SYLLABLE NYIT
A44B ; [.420A.0020.0002] # YI SYLLABLE NYIX
A44C ; [.420B.0020.0002] # YI SYLLABLE NYI
A44D ; [.420C.0020.0002] # YI SYLLABLE NYIP
A44E ; [.420D.0020.0002] # YI SYLLABLE NYIET
A44F ; [.420E.0020.0002] # YI SYLLABLE NYIEX
A450 ; [.420F.0020.0002] # YI SYLLABLE NYIE
A451 ; [.4210.0020.0002] # YI SYLLABLE NYIEP
A452 ; [.4211.0020.0002] # YI SYLLABLE NYUOX
A453 ; [.4212.0020.0002] # YI SYLLABLE NYUO
A454 ; [.4213.0020.0002] # YI SYLLABLE NYUOP
A455 ; [.4214.0020.0002] # YI SYLLABLE NYOT
A456 ; [.4215.0020.0002] # YI SYLLABLE NYOX
A457 ; [.4216.0020.0002] # YI SYLLABLE NYO
A458 ; [.4217.0020.0002] # YI SYLLABLE NYOP
A459 ; [.4218.0020.0002] # YI SYLLABLE NYUT
A45A ; [.4219.0020.0002] # YI SYLLABLE NYUX
A45B ; [.421A.0020.0002] # YI SYLLABLE NYU
A45C ; [.421B.0020.0002] # YI SYLLABLE NYUP
A45D ; [.421C.0020.0002] # YI SYLLABLE XIT
A45E ; [.421D.0020.0002] # YI SYLLABLE XIX
A45F ; [.421E.0020.0002] # YI SYLLABLE XI
A460 ; [.421F.0020.0002] # YI SYLLABLE XIP
A461 ; [.4220.0020.0002] # YI SYLLABLE XIET
A462 ; [.4221.0020.0002] # YI SYLLABLE XIEX
A463 ; [.4222.0020.0002] # YI SYLLABLE XIE
A464 ; [.4223.0020.0002] # YI SYLLABLE XIEP
A465 ; [.4224.0020.0002] # YI SYLLABLE XUOX
A466 ; [.4225.0020.0002] # YI SYLLABLE XUO
A467 ; [.4226.0020.0002] # YI SYLLABLE XOT
A468 ; [.4227.0020.0002] # YI SYLLABLE XOX
A469 ; [.4228.0020.0002] # YI SYLLABLE XO
A46A ; [.4229.0020.0002] # YI SYLLABLE XOP
A46B ; [.422A.0020.0002] # YI SYLLABLE XYT
A46C ; [.422B.0020.0002] # YI SYLLABLE XYX
A46D ; [.422C.0020.0002] # YI SYLLABLE XY
A46E ; [.422D.0020.0002] # YI SYLLABLE XYP
A46F ; [.422E.0020.0002] # YI SYLLABLE XYRX
A470 ; [.422F.0020.0002] # YI SYLLABLE XYR
A471 ; [.4230.0020.0002] # YI SYLLABLE YIT
A472 ; [.4231.0020.0002] # YI SYLLABLE YIX
A473 ; [.4232.0020.0002] # YI SYLLABLE YI
A474 ; [.4233.0020.0002] # YI SYLLABLE YIP
A475 ; [.4234.0020.0002] # YI SYLLABLE YIET
A476 ; [.4235.0020.0002] # YI SYLLABLE YIEX
A477 ; [.4236.0020.0002] # YI SYLLABLE YIE
A478 ; [.4237.0020.0002] # YI SYLLABLE YIEP
A479 ; [.4238.0020.0002] # YI SYLLABLE YUOT
A47A ; [.4239.0020.0002] # YI SYLLABLE YUOX
A47B ; [.423A.0020.0002] # YI SYLLABLE YUO
A47C ; [.423B.0020.0002] # YI SYLLABLE YUOP
A47D ; [.423C.0020.0002] # YI SYLLABLE YOT
A47E ; [.423D.0020.0002] # YI SYLLABLE YOX
A47F ; [.423E.0020.0002] # YI SYLLABLE YO
A480 ; [.423F.0020.0002] # YI SYLLABLE YOP
A481 ; [.4240.0020.0002] # YI SYLLABLE YUT
A482 ; [.4241.0020.0002] # YI SYLLABLE YUX
A483 ; [.4242.0020.0002] # YI SYLLABLE YU
A484 ; [.4243.0020.0002] # YI SYLLABLE YUP
A485 ; [.4244.0020.0002] # YI SYLLABLE YURX
A486 ; [.4245.0020.0002] # YI SYLLABLE YUR
A487 ; [.4246.0020.0002] # YI SYLLABLE YYT
A488 ; [.4247.0020.0002] # YI SYLLABLE YYX
A489 ; [.4248.0020.0002] # YI SYLLABLE YY
A48A ; [.4249.0020.0002] # YI SYLLABLE YYP
A48B ; [.424A.0020.0002] # YI SYLLABLE YYRX
A48C ; [.424B.0020.0002] # YI SYLLABLE YYR
A4F8 ; [.424C.0020.0002] # LISU LETTER TONE MYA TI
A4F9 ; [.424D.0020.0002] # LISU LETTER TONE NA PO
A4FA ; [.424E.0020.0002] # LISU LETTER TONE MYA CYA
A4FB ; [.424F.0020.0002] # LISU LETTER TONE MYA BO
A4FD ; [.4250.0020.0002] # LISU LETTER TONE MYA JEU
A4FC ; [.4251.0020.0002] # LISU LETTER TONE MYA NA
A4D0 ; [.4252.0020.0002] # LISU LETTER BA
A4D1 ; [.4253.0020.0002] # LISU LETTER PA
A4D2 ; [.4254.0020.0002] # LISU LETTER PHA
A4D3 ; [.4255.0020.0002] # LISU LETTER DA
A4D4 ; [.4256.0020.0002] # LISU LETTER TA
A4D5 ; [.4257.0020.0002] # LISU LETTER THA
A4D6 ; [.4258.0020.0002] # LISU LETTER GA
A4D7 ; [.4259.0020.0002] # LISU LETTER KA
A4D8 ; [.425A.0020.0002] # LISU LETTER KHA
A4D9 ; [.425B.0020.0002] # LISU LETTER JA
A4DA ; [.425C.0020.0002] # LISU LETTER CA
A4DB ; [.425D.0020.0002] # LISU LETTER CHA
A4DC ; [.425E.0020.0002] # LISU LETTER DZA
A4DD ; [.425F.0020.0002] # LISU LETTER TSA
A4DE ; [.4260.0020.0002] # LISU LETTER TSHA
A4DF ; [.4261.0020.0002] # LISU LETTER MA
A4E0 ; [.4262.0020.0002] # LISU LETTER NA
A4E1 ; [.4263.0020.0002] # LISU LETTER LA
A4E2 ; [.4264.0020.0002] # LISU LETTER SA
A4E3 ; [.4265.0020.0002] # LISU LETTER ZHA
A4E4 ; [.4266.0020.0002] # LISU LETTER ZA
A4E5 ; [.4267.0020.0002] # LISU LETTER NGA
A4E6 ; [.4268.0020.0002] # LISU LETTER HA
A4E7 ; [.4269.0020.0002] # LISU LETTER XA
A4E8 ; [.426A.0020.0002] # LISU LETTER HHA
A4E9 ; [.426B.0020.0002] # LISU LETTER FA
A4EB ; [.426C.0020.0002] # LISU LETTER SHA
A4ED ; [.426D.0020.0002] # LISU LETTER GHA
A4EA ; [.426E.0020.0002] # LISU LETTER WA
A4EC ; [.426F.0020.0002] # LISU LETTER YA
A4EE ; [.4270.0020.0002] # LISU LETTER A
A4EF ; [.4271.0020.0002] # LISU LETTER AE
A4F0 ; [.4272.0020.0002] # LISU LETTER E
A4F1 ; [.4273.0020.0002] # LISU LETTER EU
A4F2 ; [.4274.0020.0002] # LISU LETTER I
A4F3 ; [.4275.0020.0002] # LISU LETTER O
A4F4 ; [.4276.0020.0002] # LISU LETTER U
A4F5 ; [.4277.0020.0002] # LISU LETTER UE
A4F6 ; [.4278.0020.0002] # LISU LETTER UH
A4F7 ; [.4279.0020.0002] # LISU LETTER OE
16F00 ; [.427A.0020.0002] # MIAO LETTER PA
16F01 ; [.427B.0020.0002] # MIAO LETTER BA
16F02 ; [.427C.0020.0002] # MIAO LETTER YI PA
16F03 ; [.427D.0020.0002] # MIAO LETTER PLA
16F04 ; [.427E.0020.0002] # MIAO LETTER MA
16F06 ; [.427E.0020.0004] # MIAO LETTER ARCHAIC MA
16F05 ; [.427F.0020.0002] # MIAO LETTER MHA
16F07 ; [.4280.0020.0002] # MIAO LETTER FA
16F08 ; [.4281.0020.0002] # MIAO LETTER VA
16F09 ; [.4282.0020.0002] # MIAO LETTER VFA
16F0A ; [.4283.0020.0002] # MIAO LETTER TA
16F0B ; [.4284.0020.0002] # MIAO LETTER DA
16F0C ; [.4285.0020.0002] # MIAO LETTER YI TTA
16F0D ; [.4286.0020.0002] # MIAO LETTER YI TA
16F0E ; [.4287.0020.0002] # MIAO LETTER TTA
16F0F ; [.4288.0020.0002] # MIAO LETTER DDA
16F10 ; [.4289.0020.0002] # MIAO LETTER NA
16F13 ; [.4289.0020.0004] # MIAO LETTER ARCHAIC NA
16F11 ; [.428A.0020.0002] # MIAO LETTER NHA
16F12 ; [.428B.0020.0002] # MIAO LETTER YI NNA
16F14 ; [.428C.0020.0002] # MIAO LETTER NNA
16F15 ; [.428D.0020.0002] # MIAO LETTER NNHA
16F16 ; [.428E.0020.0002] # MIAO LETTER LA
16F17 ; [.428F.0020.0002] # MIAO LETTER LYA
16F18 ; [.4290.0020.0002] # MIAO LETTER LHA
16F19 ; [.4291.0020.0002] # MIAO LETTER LHYA
16F1A ; [.4292.0020.0002] # MIAO LETTER TLHA
16F1B ; [.4293.0020.0002] # MIAO LETTER DLHA
16F1C ; [.4294.0020.0002] # MIAO LETTER TLHYA
16F1D ; [.4295.0020.0002] # MIAO LETTER DLHYA
16F1E ; [.4296.0020.0002] # MIAO LETTER KA
16F1F ; [.4297.0020.0002] # MIAO LETTER GA
16F20 ; [.4298.0020.0002] # MIAO LETTER YI KA
16F21 ; [.4299.0020.0002] # MIAO LETTER QA
16F22 ; [.429A.0020.0002] # MIAO LETTER QGA
16F23 ; [.429B.0020.0002] # MIAO LETTER NGA
16F25 ; [.429B.0020.0004] # MIAO LETTER ARCHAIC NGA
16F24 ; [.429C.0020.0002] # MIAO LETTER NGHA
16F26 ; [.429D.0020.0002] # MIAO LETTER HA
16F27 ; [.429E.0020.0002] # MIAO LETTER XA
16F28 ; [.429F.0020.0002] # MIAO LETTER GHA
16F29 ; [.42A0.0020.0002] # MIAO LETTER GHHA
16F2A ; [.42A1.0020.0002] # MIAO LETTER TSSA
16F2B ; [.42A2.0020.0002] # MIAO LETTER DZZA
16F2C ; [.42A3.0020.0002] # MIAO LETTER NYA
16F2D ; [.42A4.0020.0002] # MIAO LETTER NYHA
16F2E ; [.42A5.0020.0002] # MIAO LETTER TSHA
16F2F ; [.42A6.0020.0002] # MIAO LETTER DZHA
16F30 ; [.42A7.0020.0002] # MIAO LETTER YI TSHA
16F31 ; [.42A8.0020.0002] # MIAO LETTER YI DZHA
16F32 ; [.42A9.0020.0002] # MIAO LETTER REFORMED TSHA
16F33 ; [.42AA.0020.0002] # MIAO LETTER SHA
16F34 ; [.42AB.0020.0002] # MIAO LETTER SSA
16F35 ; [.42AC.0020.0002] # MIAO LETTER ZHA
16F36 ; [.42AD.0020.0002] # MIAO LETTER ZSHA
16F37 ; [.42AE.0020.0002] # MIAO LETTER TSA
16F38 ; [.42AF.0020.0002] # MIAO LETTER DZA
16F39 ; [.42B0.0020.0002] # MIAO LETTER YI TSA
16F3A ; [.42B1.0020.0002] # MIAO LETTER SA
16F3B ; [.42B2.0020.0002] # MIAO LETTER ZA
16F3C ; [.42B3.0020.0002] # MIAO LETTER ZSA
16F3D ; [.42B4.0020.0002] # MIAO LETTER ZZA
16F3F ; [.42B4.0020.0004] # MIAO LETTER ARCHAIC ZZA
16F3E ; [.42B5.0020.0002] # MIAO LETTER ZZSA
16F40 ; [.42B6.0020.0002] # MIAO LETTER ZZYA
16F41 ; [.42B7.0020.0002] # MIAO LETTER ZZSYA
16F42 ; [.42B8.0020.0002] # MIAO LETTER WA
16F43 ; [.42B9.0020.0002] # MIAO LETTER AH
16F44 ; [.42BA.0020.0002] # MIAO LETTER HHA
16F50 ; [.42BB.0020.0002] # MIAO LETTER NASALIZATION
16F51 ; [.42BC.0020.0002] # MIAO SIGN ASPIRATION
16F52 ; [.42BD.0020.0002] # MIAO SIGN REFORMED VOICING
16F53 ; [.42BE.0020.0002] # MIAO SIGN REFORMED ASPIRATION
16F54 ; [.42BF.0020.0002] # MIAO VOWEL SIGN A
16F55 ; [.42C0.0020.0002] # MIAO VOWEL SIGN AA
16F56 ; [.42C1.0020.0002] # MIAO VOWEL SIGN AHH
16F57 ; [.42C2.0020.0002] # MIAO VOWEL SIGN AN
16F58 ; [.42C3.0020.0002] # MIAO VOWEL SIGN ANG
16F59 ; [.42C4.0020.0002] # MIAO VOWEL SIGN O
16F5A ; [.42C5.0020.0002] # MIAO VOWEL SIGN OO
16F5B ; [.42C6.0020.0002] # MIAO VOWEL SIGN WO
16F5C ; [.42C7.0020.0002] # MIAO VOWEL SIGN W
16F5D ; [.42C8.0020.0002] # MIAO VOWEL SIGN E
16F5E ; [.42C9.0020.0002] # MIAO VOWEL SIGN EN
16F5F ; [.42CA.0020.0002] # MIAO VOWEL SIGN ENG
16F60 ; [.42CB.0020.0002] # MIAO VOWEL SIGN OEY
16F61 ; [.42CC.0020.0002] # MIAO VOWEL SIGN I
16F62 ; [.42CD.0020.0002] # MIAO VOWEL SIGN IA
16F63 ; [.42CE.0020.0002] # MIAO VOWEL SIGN IAN
16F64 ; [.42CF.0020.0002] # MIAO VOWEL SIGN IANG
16F65 ; [.42D0.0020.0002] # MIAO VOWEL SIGN IO
16F66 ; [.42D1.0020.0002] # MIAO VOWEL SIGN IE
16F67 ; [.42D2.0020.0002] # MIAO VOWEL SIGN II
16F68 ; [.42D3.0020.0002] # MIAO VOWEL SIGN IU
16F69 ; [.42D4.0020.0002] # MIAO VOWEL SIGN ING
16F6A ; [.42D5.0020.0002] # MIAO VOWEL SIGN U
16F6B ; [.42D6.0020.0002] # MIAO VOWEL SIGN UA
16F6C ; [.42D7.0020.0002] # MIAO VOWEL SIGN UAN
16F6D ; [.42D8.0020.0002] # MIAO VOWEL SIGN UANG
16F6E ; [.42D9.0020.0002] # MIAO VOWEL SIGN UU
16F6F ; [.42DA.0020.0002] # MIAO VOWEL SIGN UEI
16F70 ; [.42DB.0020.0002] # MIAO VOWEL SIGN UNG
16F71 ; [.42DC.0020.0002] # MIAO VOWEL SIGN Y
16F72 ; [.42DD.0020.0002] # MIAO VOWEL SIGN YI
16F73 ; [.42DE.0020.0002] # MIAO VOWEL SIGN AE
16F74 ; [.42DF.0020.0002] # MIAO VOWEL SIGN AEE
16F75 ; [.42E0.0020.0002] # MIAO VOWEL SIGN ERR
16F76 ; [.42E1.0020.0002] # MIAO VOWEL SIGN ROUNDED ERR
16F77 ; [.42E2.0020.0002] # MIAO VOWEL SIGN ER
16F78 ; [.42E3.0020.0002] # MIAO VOWEL SIGN ROUNDED ER
16F79 ; [.42E4.0020.0002] # MIAO VOWEL SIGN AI
16F7A ; [.42E5.0020.0002] # MIAO VOWEL SIGN EI
16F7B ; [.42E6.0020.0002] # MIAO VOWEL SIGN AU
16F7C ; [.42E7.0020.0002] # MIAO VOWEL SIGN OU
16F7D ; [.42E8.0020.0002] # MIAO VOWEL SIGN N
16F7E ; [.42E9.0020.0002] # MIAO VOWEL SIGN NG
16F8F ; [.42EA.0020.0002] # MIAO TONE RIGHT
16F90 ; [.42EB.0020.0002] # MIAO TONE TOP RIGHT
16F91 ; [.42EC.0020.0002] # MIAO TONE ABOVE
16F92 ; [.42ED.0020.0002] # MIAO TONE BELOW
16F93 ; [.42EE.0020.0002] # MIAO LETTER TONE-2
16F94 ; [.42EF.0020.0002] # MIAO LETTER TONE-3
16F95 ; [.42F0.0020.0002] # MIAO LETTER TONE-4
16F96 ; [.42F1.0020.0002] # MIAO LETTER TONE-5
16F97 ; [.42F2.0020.0002] # MIAO LETTER TONE-6
16F98 ; [.42F3.0020.0002] # MIAO LETTER TONE-7
16F99 ; [.42F4.0020.0002] # MIAO LETTER TONE-8
16F9A ; [.42F5.0020.0002] # MIAO LETTER REFORMED TONE-1
16F9B ; [.42F6.0020.0002] # MIAO LETTER REFORMED TONE-2
16F9C ; [.42F7.0020.0002] # MIAO LETTER REFORMED TONE-4
16F9D ; [.42F8.0020.0002] # MIAO LETTER REFORMED TONE-5
16F9E ; [.42F9.0020.0002] # MIAO LETTER REFORMED TONE-6
16F9F ; [.42FA.0020.0002] # MIAO LETTER REFORMED TONE-8
118FF ; [.42FB.0020.0002] # WARANG CITI OM
118C0 ; [.42FC.0020.0002] # WARANG CITI SMALL LETTER NGAA
118A0 ; [.42FC.0020.0008] # WARANG CITI CAPITAL LETTER NGAA
118C1 ; [.42FD.0020.0002] # WARANG CITI SMALL LETTER A
118A1 ; [.42FD.0020.0008] # WARANG CITI CAPITAL LETTER A
118C2 ; [.42FE.0020.0002] # WARANG CITI SMALL LETTER WI
118A2 ; [.42FE.0020.0008] # WARANG CITI CAPITAL LETTER WI
118C3 ; [.42FF.0020.0002] # WARANG CITI SMALL LETTER YU
118A3 ; [.42FF.0020.0008] # WARANG CITI CAPITAL LETTER YU
118C4 ; [.4300.0020.0002] # WARANG CITI SMALL LETTER YA
118A4 ; [.4300.0020.0008] # WARANG CITI CAPITAL LETTER YA
118C5 ; [.4301.0020.0002] # WARANG CITI SMALL LETTER YO
118A5 ; [.4301.0020.0008] # WARANG CITI CAPITAL LETTER YO
118C6 ; [.4302.0020.0002] # WARANG CITI SMALL LETTER II
118A6 ; [.4302.0020.0008] # WARANG CITI CAPITAL LETTER II
118C7 ; [.4303.0020.0002] # WARANG CITI SMALL LETTER UU
118A7 ; [.4303.0020.0008] # WARANG CITI CAPITAL LETTER UU
118C8 ; [.4304.0020.0002] # WARANG CITI SMALL LETTER E
118A8 ; [.4304.0020.0008] # WARANG CITI CAPITAL LETTER E
118C9 ; [.4305.0020.0002] # WARANG CITI SMALL LETTER O
118A9 ; [.4305.0020.0008] # WARANG CITI CAPITAL LETTER O
118CA ; [.4306.0020.0002] # WARANG CITI SMALL LETTER ANG
118AA ; [.4306.0020.0008] # WARANG CITI CAPITAL LETTER ANG
118CB ; [.4307.0020.0002] # WARANG CITI SMALL LETTER GA
118AB ; [.4307.0020.0008] # WARANG CITI CAPITAL LETTER GA
118CC ; [.4308.0020.0002] # WARANG CITI SMALL LETTER KO
118AC ; [.4308.0020.0008] # WARANG CITI CAPITAL LETTER KO
118CD ; [.4309.0020.0002] # WARANG CITI SMALL LETTER ENY
118AD ; [.4309.0020.0008] # WARANG CITI CAPITAL LETTER ENY
118CE ; [.430A.0020.0002] # WARANG CITI SMALL LETTER YUJ
118AE ; [.430A.0020.0008] # WARANG CITI CAPITAL LETTER YUJ
118CF ; [.430B.0020.0002] # WARANG CITI SMALL LETTER UC
118AF ; [.430B.0020.0008] # WARANG CITI CAPITAL LETTER UC
118D0 ; [.430C.0020.0002] # WARANG CITI SMALL LETTER ENN
118B0 ; [.430C.0020.0008] # WARANG CITI CAPITAL LETTER ENN
118D1 ; [.430D.0020.0002] # WARANG CITI SMALL LETTER ODD
118B1 ; [.430D.0020.0008] # WARANG CITI CAPITAL LETTER ODD
118D2 ; [.430E.0020.0002] # WARANG CITI SMALL LETTER TTE
118B2 ; [.430E.0020.0008] # WARANG CITI CAPITAL LETTER TTE
118D3 ; [.430F.0020.0002] # WARANG CITI SMALL LETTER NUNG
118B3 ; [.430F.0020.0008] # WARANG CITI CAPITAL LETTER NUNG
118D4 ; [.4310.0020.0002] # WARANG CITI SMALL LETTER DA
118B4 ; [.4310.0020.0008] # WARANG CITI CAPITAL LETTER DA
118D5 ; [.4311.0020.0002] # WARANG CITI SMALL LETTER AT
118B5 ; [.4311.0020.0008] # WARANG CITI CAPITAL LETTER AT
118D6 ; [.4312.0020.0002] # WARANG CITI SMALL LETTER AM
118B6 ; [.4312.0020.0008] # WARANG CITI CAPITAL LETTER AM
118D7 ; [.4313.0020.0002] # WARANG CITI SMALL LETTER BU
118B7 ; [.4313.0020.0008] # WARANG CITI CAPITAL LETTER BU
118D8 ; [.4314.0020.0002] # WARANG CITI SMALL LETTER PU
118B8 ; [.4314.0020.0008] # WARANG CITI CAPITAL LETTER PU
118D9 ; [.4315.0020.0002] # WARANG CITI SMALL LETTER HIYO
118B9 ; [.4315.0020.0008] # WARANG CITI CAPITAL LETTER HIYO
118DA ; [.4316.0020.0002] # WARANG CITI SMALL LETTER HOLO
118BA ; [.4316.0020.0008] # WARANG CITI CAPITAL LETTER HOLO
118DB ; [.4317.0020.0002] # WARANG CITI SMALL LETTER HORR
118BB ; [.4317.0020.0008] # WARANG CITI CAPITAL LETTER HORR
118DC ; [.4318.0020.0002] # WARANG CITI SMALL LETTER HAR
118BC ; [.4318.0020.0008] # WARANG CITI CAPITAL LETTER HAR
118DD ; [.4319.0020.0002] # WARANG CITI SMALL LETTER SSUU
118BD ; [.4319.0020.0008] # WARANG CITI CAPITAL LETTER SSUU
118DE ; [.431A.0020.0002] # WARANG CITI SMALL LETTER SII
118BE ; [.431A.0020.0008] # WARANG CITI CAPITAL LETTER SII
118DF ; [.431B.0020.0002] # WARANG CITI SMALL LETTER VIYO
118BF ; [.431B.0020.0008] # WARANG CITI CAPITAL LETTER VIYO
11AD5 ; [.431C.0020.0002] # PAU CIN HAU LETTER A
11AD6 ; [.431D.0020.0002] # PAU CIN HAU LETTER E
11AD7 ; [.431E.0020.0002] # PAU CIN HAU LETTER I
11AD8 ; [.431F.0020.0002] # PAU CIN HAU LETTER O
11AD9 ; [.4320.0020.0002] # PAU CIN HAU LETTER U
11ADA ; [.4321.0020.0002] # PAU CIN HAU LETTER UA
11ADB ; [.4322.0020.0002] # PAU CIN HAU LETTER IA
11AC0 ; [.4323.0020.0002] # PAU CIN HAU LETTER PA
11AC1 ; [.4324.0020.0002] # PAU CIN HAU LETTER KA
11AC2 ; [.4325.0020.0002] # PAU CIN HAU LETTER LA
11AC3 ; [.4326.0020.0002] # PAU CIN HAU LETTER MA
11AC4 ; [.4327.0020.0002] # PAU CIN HAU LETTER DA
11AC5 ; [.4328.0020.0002] # PAU CIN HAU LETTER ZA
11AC6 ; [.4329.0020.0002] # PAU CIN HAU LETTER VA
11AC7 ; [.432A.0020.0002] # PAU CIN HAU LETTER NGA
11AC8 ; [.432B.0020.0002] # PAU CIN HAU LETTER HA
11AC9 ; [.432C.0020.0002] # PAU CIN HAU LETTER GA
11ACA ; [.432D.0020.0002] # PAU CIN HAU LETTER KHA
11ACB ; [.432E.0020.0002] # PAU CIN HAU LETTER SA
11ACC ; [.432F.0020.0002] # PAU CIN HAU LETTER BA
11ACD ; [.4330.0020.0002] # PAU CIN HAU LETTER CA
11ACE ; [.4331.0020.0002] # PAU CIN HAU LETTER TA
11ACF ; [.4332.0020.0002] # PAU CIN HAU LETTER THA
11AD0 ; [.4333.0020.0002] # PAU CIN HAU LETTER NA
11AD1 ; [.4334.0020.0002] # PAU CIN HAU LETTER PHA
11AD2 ; [.4335.0020.0002] # PAU CIN HAU LETTER RA
11AD3 ; [.4336.0020.0002] # PAU CIN HAU LETTER FA
11AD4 ; [.4337.0020.0002] # PAU CIN HAU LETTER CHA
11ADC ; [.4338.0020.0002] # PAU CIN HAU LETTER FINAL P
11ADD ; [.4339.0020.0002] # PAU CIN HAU LETTER FINAL K
11ADF ; [.433A.0020.0002] # PAU CIN HAU LETTER FINAL M
11AE0 ; [.433B.0020.0002] # PAU CIN HAU LETTER FINAL N
11AE1 ; [.433C.0020.0002] # PAU CIN HAU LETTER FINAL L
11AE2 ; [.433D.0020.0002] # PAU CIN HAU LETTER FINAL W
11AE3 ; [.433E.0020.0002] # PAU CIN HAU LETTER FINAL NG
11ADE ; [.433F.0020.0002] # PAU CIN HAU LETTER FINAL T
11AE4 ; [.4340.0020.0002] # PAU CIN HAU LETTER FINAL Y
11AEF ; [.4341.0020.0002] # PAU CIN HAU MID-LEVEL TONE
11AF2 ; [.4342.0020.0002] # PAU CIN HAU MID-LEVEL TONE FINAL
11AF1 ; [.4343.0020.0002] # PAU CIN HAU MID-LEVEL TONE LONG FINAL
11AE6 ; [.4344.0020.0002] # PAU CIN HAU RISING TONE
11AE9 ; [.4345.0020.0002] # PAU CIN HAU RISING TONE FINAL
11AE5 ; [.4346.0020.0002] # PAU CIN HAU RISING TONE LONG
11AE8 ; [.4347.0020.0002] # PAU CIN HAU RISING TONE LONG FINAL
11AF4 ; [.4348.0020.0002] # PAU CIN HAU LOW-FALLING TONE
11AF7 ; [.4349.0020.0002] # PAU CIN HAU LOW-FALLING TONE FINAL
11AF3 ; [.434A.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG
11AF6 ; [.434B.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG FINAL
11AEC ; [.434C.0020.0002] # PAU CIN HAU SANDHI TONE
11AEE ; [.434D.0020.0002] # PAU CIN HAU SANDHI TONE FINAL
11AEB ; [.434E.0020.0002] # PAU CIN HAU SANDHI TONE LONG
11AED ; [.434F.0020.0002] # PAU CIN HAU SANDHI TONE LONG FINAL
11AF5 ; [.4350.0020.0002] # PAU CIN HAU GLOTTAL STOP
11AF8 ; [.4351.0020.0002] # PAU CIN HAU GLOTTAL STOP FINAL
11AE7 ; [.4352.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP
11AEA ; [.4353.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP FINAL
11AF0 ; [.4354.0020.0002] # PAU CIN HAU GLOTTAL STOP VARIANT
16B00 ; [.4355.0020.0002] # PAHAWH HMONG VOWEL KEEB
16B01 ; [.4356.0020.0002] # PAHAWH HMONG VOWEL KEEV
16B02 ; [.4357.0020.0002] # PAHAWH HMONG VOWEL KIB
16B03 ; [.4358.0020.0002] # PAHAWH HMONG VOWEL KIV
16B04 ; [.4359.0020.0002] # PAHAWH HMONG VOWEL KAUB
16B05 ; [.435A.0020.0002] # PAHAWH HMONG VOWEL KAUV
16B06 ; [.435B.0020.0002] # PAHAWH HMONG VOWEL KUB
16B07 ; [.435C.0020.0002] # PAHAWH HMONG VOWEL KUV
16B08 ; [.435D.0020.0002] # PAHAWH HMONG VOWEL KEB
16B09 ; [.435E.0020.0002] # PAHAWH HMONG VOWEL KEV
16B0A ; [.435F.0020.0002] # PAHAWH HMONG VOWEL KAIB
16B0B ; [.4360.0020.0002] # PAHAWH HMONG VOWEL KAIV
16B0C ; [.4361.0020.0002] # PAHAWH HMONG VOWEL KOOB
16B0D ; [.4362.0020.0002] # PAHAWH HMONG VOWEL KOOV
16B0E ; [.4363.0020.0002] # PAHAWH HMONG VOWEL KAWB
16B0F ; [.4364.0020.0002] # PAHAWH HMONG VOWEL KAWV
16B10 ; [.4365.0020.0002] # PAHAWH HMONG VOWEL KUAB
16B11 ; [.4366.0020.0002] # PAHAWH HMONG VOWEL KUAV
16B12 ; [.4367.0020.0002] # PAHAWH HMONG VOWEL KOB
16B13 ; [.4368.0020.0002] # PAHAWH HMONG VOWEL KOV
16B14 ; [.4369.0020.0002] # PAHAWH HMONG VOWEL KIAB
16B15 ; [.436A.0020.0002] # PAHAWH HMONG VOWEL KIAV
16B16 ; [.436B.0020.0002] # PAHAWH HMONG VOWEL KAB
16B17 ; [.436C.0020.0002] # PAHAWH HMONG VOWEL KAV
16B18 ; [.436D.0020.0002] # PAHAWH HMONG VOWEL KWB
16B19 ; [.436E.0020.0002] # PAHAWH HMONG VOWEL KWV
16B1A ; [.436F.0020.0002] # PAHAWH HMONG VOWEL KAAB
16B1B ; [.4370.0020.0002] # PAHAWH HMONG VOWEL KAAV
16B1C ; [.4371.0020.0002] # PAHAWH HMONG CONSONANT VAU
16B1D ; [.4372.0020.0002] # PAHAWH HMONG CONSONANT NTSAU
16B1E ; [.4373.0020.0002] # PAHAWH HMONG CONSONANT LAU
16B1F ; [.4374.0020.0002] # PAHAWH HMONG CONSONANT HAU
16B20 ; [.4375.0020.0002] # PAHAWH HMONG CONSONANT NLAU
16B21 ; [.4376.0020.0002] # PAHAWH HMONG CONSONANT RAU
16B22 ; [.4377.0020.0002] # PAHAWH HMONG CONSONANT NKAU
16B23 ; [.4378.0020.0002] # PAHAWH HMONG CONSONANT QHAU
16B24 ; [.4379.0020.0002] # PAHAWH HMONG CONSONANT YAU
16B25 ; [.437A.0020.0002] # PAHAWH HMONG CONSONANT HLAU
16B26 ; [.437B.0020.0002] # PAHAWH HMONG CONSONANT MAU
16B27 ; [.437C.0020.0002] # PAHAWH HMONG CONSONANT CHAU
16B28 ; [.437D.0020.0002] # PAHAWH HMONG CONSONANT NCHAU
16B29 ; [.437E.0020.0002] # PAHAWH HMONG CONSONANT HNAU
16B2A ; [.437F.0020.0002] # PAHAWH HMONG CONSONANT PLHAU
16B2B ; [.4380.0020.0002] # PAHAWH HMONG CONSONANT NTHAU
16B2C ; [.4381.0020.0002] # PAHAWH HMONG CONSONANT NAU
16B2D ; [.4382.0020.0002] # PAHAWH HMONG CONSONANT AU
16B2E ; [.4383.0020.0002] # PAHAWH HMONG CONSONANT XAU
16B2F ; [.4384.0020.0002] # PAHAWH HMONG CONSONANT CAU
16B40 ; [.4385.0020.0002] # PAHAWH HMONG SIGN VOS SEEV
16B41 ; [.4386.0020.0002] # PAHAWH HMONG SIGN MEEJ SUAB
16B63 ; [.4387.0020.0002] # PAHAWH HMONG SIGN VOS LUB
16B64 ; [.4388.0020.0002] # PAHAWH HMONG SIGN XYOO
16B65 ; [.4389.0020.0002] # PAHAWH HMONG SIGN HLI
16B66 ; [.438A.0020.0002] # PAHAWH HMONG SIGN THIRD-STAGE HLI
16B67 ; [.438B.0020.0002] # PAHAWH HMONG SIGN ZWJ THAJ
16B68 ; [.438C.0020.0002] # PAHAWH HMONG SIGN HNUB
16B69 ; [.438D.0020.0002] # PAHAWH HMONG SIGN NQIG
16B6A ; [.438E.0020.0002] # PAHAWH HMONG SIGN XIAB
16B6B ; [.438F.0020.0002] # PAHAWH HMONG SIGN NTUJ
16B6C ; [.4390.0020.0002] # PAHAWH HMONG SIGN AV
16B6D ; [.4391.0020.0002] # PAHAWH HMONG SIGN TXHEEJ CEEV
16B6E ; [.4392.0020.0002] # PAHAWH HMONG SIGN MEEJ TSEEB
16B6F ; [.4393.0020.0002] # PAHAWH HMONG SIGN TAU
16B70 ; [.4394.0020.0002] # PAHAWH HMONG SIGN LOS
16B71 ; [.4395.0020.0002] # PAHAWH HMONG SIGN MUS
16B72 ; [.4396.0020.0002] # PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG
16B73 ; [.4397.0020.0002] # PAHAWH HMONG SIGN CIM CUAM TSHOOJ
16B74 ; [.4398.0020.0002] # PAHAWH HMONG SIGN CIM TXWV
16B75 ; [.4399.0020.0002] # PAHAWH HMONG SIGN CIM TXWV CHWV
16B76 ; [.439A.0020.0002] # PAHAWH HMONG SIGN CIM PUB DAWB
16B77 ; [.439B.0020.0002] # PAHAWH HMONG SIGN CIM NRES TOS
16B7D ; [.439C.0020.0002] # PAHAWH HMONG CLAN SIGN TSHEEJ
16B7E ; [.439D.0020.0002] # PAHAWH HMONG CLAN SIGN YEEG
16B7F ; [.439E.0020.0002] # PAHAWH HMONG CLAN SIGN LIS
16B80 ; [.439F.0020.0002] # PAHAWH HMONG CLAN SIGN LAUJ
16B81 ; [.43A0.0020.0002] # PAHAWH HMONG CLAN SIGN XYOOJ
16B82 ; [.43A1.0020.0002] # PAHAWH HMONG CLAN SIGN KOO
16B83 ; [.43A2.0020.0002] # PAHAWH HMONG CLAN SIGN HAWJ
16B84 ; [.43A3.0020.0002] # PAHAWH HMONG CLAN SIGN MUAS
16B85 ; [.43A4.0020.0002] # PAHAWH HMONG CLAN SIGN THOJ
16B86 ; [.43A5.0020.0002] # PAHAWH HMONG CLAN SIGN TSAB
16B87 ; [.43A6.0020.0002] # PAHAWH HMONG CLAN SIGN PHAB
16B88 ; [.43A7.0020.0002] # PAHAWH HMONG CLAN SIGN KHAB
16B89 ; [.43A8.0020.0002] # PAHAWH HMONG CLAN SIGN HAM
16B8A ; [.43A9.0020.0002] # PAHAWH HMONG CLAN SIGN VAJ
16B8B ; [.43AA.0020.0002] # PAHAWH HMONG CLAN SIGN FAJ
16B8C ; [.43AB.0020.0002] # PAHAWH HMONG CLAN SIGN YAJ
16B8D ; [.43AC.0020.0002] # PAHAWH HMONG CLAN SIGN TSWB
16B8E ; [.43AD.0020.0002] # PAHAWH HMONG CLAN SIGN KWM
16B8F ; [.43AE.0020.0002] # PAHAWH HMONG CLAN SIGN VWJ
10280 ; [.43AF.0020.0002] # LYCIAN LETTER A
10281 ; [.43B0.0020.0002] # LYCIAN LETTER E
10282 ; [.43B1.0020.0002] # LYCIAN LETTER B
10283 ; [.43B2.0020.0002] # LYCIAN LETTER BH
10284 ; [.43B3.0020.0002] # LYCIAN LETTER G
10285 ; [.43B4.0020.0002] # LYCIAN LETTER D
10286 ; [.43B5.0020.0002] # LYCIAN LETTER I
10287 ; [.43B6.0020.0002] # LYCIAN LETTER W
10288 ; [.43B7.0020.0002] # LYCIAN LETTER Z
10289 ; [.43B8.0020.0002] # LYCIAN LETTER TH
1028A ; [.43B9.0020.0002] # LYCIAN LETTER J
1028B ; [.43BA.0020.0002] # LYCIAN LETTER K
1028C ; [.43BB.0020.0002] # LYCIAN LETTER Q
1028D ; [.43BC.0020.0002] # LYCIAN LETTER L
1028E ; [.43BD.0020.0002] # LYCIAN LETTER M
1028F ; [.43BE.0020.0002] # LYCIAN LETTER N
10290 ; [.43BF.0020.0002] # LYCIAN LETTER MM
10291 ; [.43C0.0020.0002] # LYCIAN LETTER NN
10292 ; [.43C1.0020.0002] # LYCIAN LETTER U
10293 ; [.43C2.0020.0002] # LYCIAN LETTER P
10294 ; [.43C3.0020.0002] # LYCIAN LETTER KK
10295 ; [.43C4.0020.0002] # LYCIAN LETTER R
10296 ; [.43C5.0020.0002] # LYCIAN LETTER S
10297 ; [.43C6.0020.0002] # LYCIAN LETTER T
10298 ; [.43C7.0020.0002] # LYCIAN LETTER TT
10299 ; [.43C8.0020.0002] # LYCIAN LETTER AN
1029A ; [.43C9.0020.0002] # LYCIAN LETTER EN
1029B ; [.43CA.0020.0002] # LYCIAN LETTER H
1029C ; [.43CB.0020.0002] # LYCIAN LETTER X
102A0 ; [.43CC.0020.0002] # CARIAN LETTER A
102A1 ; [.43CD.0020.0002] # CARIAN LETTER P2
102A2 ; [.43CE.0020.0002] # CARIAN LETTER D
102A3 ; [.43CF.0020.0002] # CARIAN LETTER L
102A4 ; [.43D0.0020.0002] # CARIAN LETTER UUU
102A5 ; [.43D1.0020.0002] # CARIAN LETTER R
102A6 ; [.43D2.0020.0002] # CARIAN LETTER LD
102A7 ; [.43D3.0020.0002] # CARIAN LETTER A2
102A8 ; [.43D4.0020.0002] # CARIAN LETTER Q
102A9 ; [.43D5.0020.0002] # CARIAN LETTER B
102AA ; [.43D6.0020.0002] # CARIAN LETTER M
102AB ; [.43D7.0020.0002] # CARIAN LETTER O
102AC ; [.43D8.0020.0002] # CARIAN LETTER D2
102AD ; [.43D9.0020.0002] # CARIAN LETTER T
102AE ; [.43DA.0020.0002] # CARIAN LETTER SH
102AF ; [.43DB.0020.0002] # CARIAN LETTER SH2
102B0 ; [.43DC.0020.0002] # CARIAN LETTER S
102B1 ; [.43DD.0020.0002] # CARIAN LETTER C-18
102B2 ; [.43DE.0020.0002] # CARIAN LETTER U
102B3 ; [.43DF.0020.0002] # CARIAN LETTER NN
102B4 ; [.43E0.0020.0002] # CARIAN LETTER X
102B5 ; [.43E1.0020.0002] # CARIAN LETTER N
102B6 ; [.43E2.0020.0002] # CARIAN LETTER TT2
102B7 ; [.43E3.0020.0002] # CARIAN LETTER P
102B8 ; [.43E4.0020.0002] # CARIAN LETTER SS
102B9 ; [.43E5.0020.0002] # CARIAN LETTER I
102BA ; [.43E6.0020.0002] # CARIAN LETTER E
102BB ; [.43E7.0020.0002] # CARIAN LETTER UUUU
102BC ; [.43E8.0020.0002] # CARIAN LETTER K
102BD ; [.43E9.0020.0002] # CARIAN LETTER K2
102BE ; [.43EA.0020.0002] # CARIAN LETTER ND
102BF ; [.43EB.0020.0002] # CARIAN LETTER UU
102C0 ; [.43EC.0020.0002] # CARIAN LETTER G
102C1 ; [.43ED.0020.0002] # CARIAN LETTER G2
102C2 ; [.43EE.0020.0002] # CARIAN LETTER ST
102C3 ; [.43EF.0020.0002] # CARIAN LETTER ST2
102C4 ; [.43F0.0020.0002] # CARIAN LETTER NG
102C5 ; [.43F1.0020.0002] # CARIAN LETTER II
102C6 ; [.43F2.0020.0002] # CARIAN LETTER C-39
102C7 ; [.43F3.0020.0002] # CARIAN LETTER TT
102C8 ; [.43F4.0020.0002] # CARIAN LETTER UUU2
102C9 ; [.43F5.0020.0002] # CARIAN LETTER RR
102CA ; [.43F6.0020.0002] # CARIAN LETTER MB
102CB ; [.43F7.0020.0002] # CARIAN LETTER MB2
102CC ; [.43F8.0020.0002] # CARIAN LETTER MB3
102CD ; [.43F9.0020.0002] # CARIAN LETTER MB4
102CE ; [.43FA.0020.0002] # CARIAN LETTER LD2
102CF ; [.43FB.0020.0002] # CARIAN LETTER E2
102D0 ; [.43FC.0020.0002] # CARIAN LETTER UUU3
10920 ; [.43FD.0020.0002] # LYDIAN LETTER A
10921 ; [.43FE.0020.0002] # LYDIAN LETTER B
10922 ; [.43FF.0020.0002] # LYDIAN LETTER G
10923 ; [.4400.0020.0002] # LYDIAN LETTER D
10924 ; [.4401.0020.0002] # LYDIAN LETTER E
10925 ; [.4402.0020.0002] # LYDIAN LETTER V
10926 ; [.4403.0020.0002] # LYDIAN LETTER I
10927 ; [.4404.0020.0002] # LYDIAN LETTER Y
10928 ; [.4405.0020.0002] # LYDIAN LETTER K
10929 ; [.4406.0020.0002] # LYDIAN LETTER L
1092A ; [.4407.0020.0002] # LYDIAN LETTER M
1092B ; [.4408.0020.0002] # LYDIAN LETTER N
1092C ; [.4409.0020.0002] # LYDIAN LETTER O
1092D ; [.440A.0020.0002] # LYDIAN LETTER R
1092E ; [.440B.0020.0002] # LYDIAN LETTER SS
1092F ; [.440C.0020.0002] # LYDIAN LETTER T
10930 ; [.440D.0020.0002] # LYDIAN LETTER U
10931 ; [.440E.0020.0002] # LYDIAN LETTER F
10932 ; [.440F.0020.0002] # LYDIAN LETTER Q
10933 ; [.4410.0020.0002] # LYDIAN LETTER S
10934 ; [.4411.0020.0002] # LYDIAN LETTER TT
10935 ; [.4412.0020.0002] # LYDIAN LETTER AN
10936 ; [.4413.0020.0002] # LYDIAN LETTER EN
10937 ; [.4414.0020.0002] # LYDIAN LETTER LY
10938 ; [.4415.0020.0002] # LYDIAN LETTER NN
10939 ; [.4416.0020.0002] # LYDIAN LETTER C
10300 ; [.4417.0020.0002] # OLD ITALIC LETTER A
10301 ; [.4418.0020.0002] # OLD ITALIC LETTER BE
10302 ; [.4419.0020.0002] # OLD ITALIC LETTER KE
10303 ; [.441A.0020.0002] # OLD ITALIC LETTER DE
10304 ; [.441B.0020.0002] # OLD ITALIC LETTER E
10305 ; [.441C.0020.0002] # OLD ITALIC LETTER VE
10306 ; [.441D.0020.0002] # OLD ITALIC LETTER ZE
10307 ; [.441E.0020.0002] # OLD ITALIC LETTER HE
10308 ; [.441F.0020.0002] # OLD ITALIC LETTER THE
10309 ; [.4420.0020.0002] # OLD ITALIC LETTER I
1030A ; [.4421.0020.0002] # OLD ITALIC LETTER KA
1030B ; [.4422.0020.0002] # OLD ITALIC LETTER EL
1030C ; [.4423.0020.0002] # OLD ITALIC LETTER EM
1030D ; [.4424.0020.0002] # OLD ITALIC LETTER EN
1030E ; [.4425.0020.0002] # OLD ITALIC LETTER ESH
1031F ; [.4426.0020.0002] # OLD ITALIC LETTER ESS
1030F ; [.4427.0020.0002] # OLD ITALIC LETTER O
10310 ; [.4428.0020.0002] # OLD ITALIC LETTER PE
10311 ; [.4429.0020.0002] # OLD ITALIC LETTER SHE
10312 ; [.442A.0020.0002] # OLD ITALIC LETTER KU
10313 ; [.442B.0020.0002] # OLD ITALIC LETTER ER
10314 ; [.442C.0020.0002] # OLD ITALIC LETTER ES
10315 ; [.442D.0020.0002] # OLD ITALIC LETTER TE
10316 ; [.442E.0020.0002] # OLD ITALIC LETTER U
10317 ; [.442F.0020.0002] # OLD ITALIC LETTER EKS
10318 ; [.4430.0020.0002] # OLD ITALIC LETTER PHE
10319 ; [.4431.0020.0002] # OLD ITALIC LETTER KHE
1031A ; [.4432.0020.0002] # OLD ITALIC LETTER EF
1031B ; [.4433.0020.0002] # OLD ITALIC LETTER ERS
1031C ; [.4434.0020.0002] # OLD ITALIC LETTER CHE
1031D ; [.4435.0020.0002] # OLD ITALIC LETTER II
1031E ; [.4436.0020.0002] # OLD ITALIC LETTER UU
10330 ; [.4437.0020.0002] # GOTHIC LETTER AHSA
10331 ; [.4438.0020.0002] # GOTHIC LETTER BAIRKAN
10332 ; [.4439.0020.0002] # GOTHIC LETTER GIBA
10333 ; [.443A.0020.0002] # GOTHIC LETTER DAGS
10334 ; [.443B.0020.0002] # GOTHIC LETTER AIHVUS
10335 ; [.443C.0020.0002] # GOTHIC LETTER QAIRTHRA
10336 ; [.443D.0020.0002] # GOTHIC LETTER IUJA
10337 ; [.443E.0020.0002] # GOTHIC LETTER HAGL
10338 ; [.443F.0020.0002] # GOTHIC LETTER THIUTH
10339 ; [.4440.0020.0002] # GOTHIC LETTER EIS
1033A ; [.4441.0020.0002] # GOTHIC LETTER KUSMA
1033B ; [.4442.0020.0002] # GOTHIC LETTER LAGUS
1033C ; [.4443.0020.0002] # GOTHIC LETTER MANNA
1033D ; [.4444.0020.0002] # GOTHIC LETTER NAUTHS
1033E ; [.4445.0020.0002] # GOTHIC LETTER JER
1033F ; [.4446.0020.0002] # GOTHIC LETTER URUS
10340 ; [.4447.0020.0002] # GOTHIC LETTER PAIRTHRA
10341 ; [.4448.0020.0002] # GOTHIC LETTER NINETY
10342 ; [.4449.0020.0002] # GOTHIC LETTER RAIDA
10343 ; [.444A.0020.0002] # GOTHIC LETTER SAUIL
10344 ; [.444B.0020.0002] # GOTHIC LETTER TEIWS
10345 ; [.444C.0020.0002] # GOTHIC LETTER WINJA
10346 ; [.444D.0020.0002] # GOTHIC LETTER FAIHU
10347 ; [.444E.0020.0002] # GOTHIC LETTER IGGWS
10348 ; [.444F.0020.0002] # GOTHIC LETTER HWAIR
10349 ; [.4450.0020.0002] # GOTHIC LETTER OTHAL
1034A ; [.4451.0020.0002] # GOTHIC LETTER NINE HUNDRED
10428 ; [.4452.0020.0002] # DESERET SMALL LETTER LONG I
10400 ; [.4452.0020.0008] # DESERET CAPITAL LETTER LONG I
10429 ; [.4453.0020.0002] # DESERET SMALL LETTER LONG E
10401 ; [.4453.0020.0008] # DESERET CAPITAL LETTER LONG E
1042A ; [.4454.0020.0002] # DESERET SMALL LETTER LONG A
10402 ; [.4454.0020.0008] # DESERET CAPITAL LETTER LONG A
1042B ; [.4455.0020.0002] # DESERET SMALL LETTER LONG AH
10403 ; [.4455.0020.0008] # DESERET CAPITAL LETTER LONG AH
1042C ; [.4456.0020.0002] # DESERET SMALL LETTER LONG O
10404 ; [.4456.0020.0008] # DESERET CAPITAL LETTER LONG O
1042D ; [.4457.0020.0002] # DESERET SMALL LETTER LONG OO
10405 ; [.4457.0020.0008] # DESERET CAPITAL LETTER LONG OO
1042E ; [.4458.0020.0002] # DESERET SMALL LETTER SHORT I
10406 ; [.4458.0020.0008] # DESERET CAPITAL LETTER SHORT I
1042F ; [.4459.0020.0002] # DESERET SMALL LETTER SHORT E
10407 ; [.4459.0020.0008] # DESERET CAPITAL LETTER SHORT E
10430 ; [.445A.0020.0002] # DESERET SMALL LETTER SHORT A
10408 ; [.445A.0020.0008] # DESERET CAPITAL LETTER SHORT A
10431 ; [.445B.0020.0002] # DESERET SMALL LETTER SHORT AH
10409 ; [.445B.0020.0008] # DESERET CAPITAL LETTER SHORT AH
10432 ; [.445C.0020.0002] # DESERET SMALL LETTER SHORT O
1040A ; [.445C.0020.0008] # DESERET CAPITAL LETTER SHORT O
10433 ; [.445D.0020.0002] # DESERET SMALL LETTER SHORT OO
1040B ; [.445D.0020.0008] # DESERET CAPITAL LETTER SHORT OO
10434 ; [.445E.0020.0002] # DESERET SMALL LETTER AY
1040C ; [.445E.0020.0008] # DESERET CAPITAL LETTER AY
10435 ; [.445F.0020.0002] # DESERET SMALL LETTER OW
1040D ; [.445F.0020.0008] # DESERET CAPITAL LETTER OW
10436 ; [.4460.0020.0002] # DESERET SMALL LETTER WU
1040E ; [.4460.0020.0008] # DESERET CAPITAL LETTER WU
10437 ; [.4461.0020.0002] # DESERET SMALL LETTER YEE
1040F ; [.4461.0020.0008] # DESERET CAPITAL LETTER YEE
10438 ; [.4462.0020.0002] # DESERET SMALL LETTER H
10410 ; [.4462.0020.0008] # DESERET CAPITAL LETTER H
10439 ; [.4463.0020.0002] # DESERET SMALL LETTER PEE
10411 ; [.4463.0020.0008] # DESERET CAPITAL LETTER PEE
1043A ; [.4464.0020.0002] # DESERET SMALL LETTER BEE
10412 ; [.4464.0020.0008] # DESERET CAPITAL LETTER BEE
1043B ; [.4465.0020.0002] # DESERET SMALL LETTER TEE
10413 ; [.4465.0020.0008] # DESERET CAPITAL LETTER TEE
1043C ; [.4466.0020.0002] # DESERET SMALL LETTER DEE
10414 ; [.4466.0020.0008] # DESERET CAPITAL LETTER DEE
1043D ; [.4467.0020.0002] # DESERET SMALL LETTER CHEE
10415 ; [.4467.0020.0008] # DESERET CAPITAL LETTER CHEE
1043E ; [.4468.0020.0002] # DESERET SMALL LETTER JEE
10416 ; [.4468.0020.0008] # DESERET CAPITAL LETTER JEE
1043F ; [.4469.0020.0002] # DESERET SMALL LETTER KAY
10417 ; [.4469.0020.0008] # DESERET CAPITAL LETTER KAY
10440 ; [.446A.0020.0002] # DESERET SMALL LETTER GAY
10418 ; [.446A.0020.0008] # DESERET CAPITAL LETTER GAY
10441 ; [.446B.0020.0002] # DESERET SMALL LETTER EF
10419 ; [.446B.0020.0008] # DESERET CAPITAL LETTER EF
10442 ; [.446C.0020.0002] # DESERET SMALL LETTER VEE
1041A ; [.446C.0020.0008] # DESERET CAPITAL LETTER VEE
10443 ; [.446D.0020.0002] # DESERET SMALL LETTER ETH
1041B ; [.446D.0020.0008] # DESERET CAPITAL LETTER ETH
10444 ; [.446E.0020.0002] # DESERET SMALL LETTER THEE
1041C ; [.446E.0020.0008] # DESERET CAPITAL LETTER THEE
10445 ; [.446F.0020.0002] # DESERET SMALL LETTER ES
1041D ; [.446F.0020.0008] # DESERET CAPITAL LETTER ES
10446 ; [.4470.0020.0002] # DESERET SMALL LETTER ZEE
1041E ; [.4470.0020.0008] # DESERET CAPITAL LETTER ZEE
10447 ; [.4471.0020.0002] # DESERET SMALL LETTER ESH
1041F ; [.4471.0020.0008] # DESERET CAPITAL LETTER ESH
10448 ; [.4472.0020.0002] # DESERET SMALL LETTER ZHEE
10420 ; [.4472.0020.0008] # DESERET CAPITAL LETTER ZHEE
10449 ; [.4473.0020.0002] # DESERET SMALL LETTER ER
10421 ; [.4473.0020.0008] # DESERET CAPITAL LETTER ER
1044A ; [.4474.0020.0002] # DESERET SMALL LETTER EL
10422 ; [.4474.0020.0008] # DESERET CAPITAL LETTER EL
1044B ; [.4475.0020.0002] # DESERET SMALL LETTER EM
10423 ; [.4475.0020.0008] # DESERET CAPITAL LETTER EM
1044C ; [.4476.0020.0002] # DESERET SMALL LETTER EN
10424 ; [.4476.0020.0008] # DESERET CAPITAL LETTER EN
1044D ; [.4477.0020.0002] # DESERET SMALL LETTER ENG
10425 ; [.4477.0020.0008] # DESERET CAPITAL LETTER ENG
1044E ; [.4478.0020.0002] # DESERET SMALL LETTER OI
10426 ; [.4478.0020.0008] # DESERET CAPITAL LETTER OI
1044F ; [.4479.0020.0002] # DESERET SMALL LETTER EW
10427 ; [.4479.0020.0008] # DESERET CAPITAL LETTER EW
10450 ; [.447A.0020.0002] # SHAVIAN LETTER PEEP
10451 ; [.447B.0020.0002] # SHAVIAN LETTER TOT
10452 ; [.447C.0020.0002] # SHAVIAN LETTER KICK
10453 ; [.447D.0020.0002] # SHAVIAN LETTER FEE
10454 ; [.447E.0020.0002] # SHAVIAN LETTER THIGH
10455 ; [.447F.0020.0002] # SHAVIAN LETTER SO
10456 ; [.4480.0020.0002] # SHAVIAN LETTER SURE
10457 ; [.4481.0020.0002] # SHAVIAN LETTER CHURCH
10458 ; [.4482.0020.0002] # SHAVIAN LETTER YEA
10459 ; [.4483.0020.0002] # SHAVIAN LETTER HUNG
1045A ; [.4484.0020.0002] # SHAVIAN LETTER BIB
1045B ; [.4485.0020.0002] # SHAVIAN LETTER DEAD
1045C ; [.4486.0020.0002] # SHAVIAN LETTER GAG
1045D ; [.4487.0020.0002] # SHAVIAN LETTER VOW
1045E ; [.4488.0020.0002] # SHAVIAN LETTER THEY
1045F ; [.4489.0020.0002] # SHAVIAN LETTER ZOO
10460 ; [.448A.0020.0002] # SHAVIAN LETTER MEASURE
10461 ; [.448B.0020.0002] # SHAVIAN LETTER JUDGE
10462 ; [.448C.0020.0002] # SHAVIAN LETTER WOE
10463 ; [.448D.0020.0002] # SHAVIAN LETTER HA-HA
10464 ; [.448E.0020.0002] # SHAVIAN LETTER LOLL
10465 ; [.448F.0020.0002] # SHAVIAN LETTER MIME
10466 ; [.4490.0020.0002] # SHAVIAN LETTER IF
10467 ; [.4491.0020.0002] # SHAVIAN LETTER EGG
10468 ; [.4492.0020.0002] # SHAVIAN LETTER ASH
10469 ; [.4493.0020.0002] # SHAVIAN LETTER ADO
1046A ; [.4494.0020.0002] # SHAVIAN LETTER ON
1046B ; [.4495.0020.0002] # SHAVIAN LETTER WOOL
1046C ; [.4496.0020.0002] # SHAVIAN LETTER OUT
1046D ; [.4497.0020.0002] # SHAVIAN LETTER AH
1046E ; [.4498.0020.0002] # SHAVIAN LETTER ROAR
1046F ; [.4499.0020.0002] # SHAVIAN LETTER NUN
10470 ; [.449A.0020.0002] # SHAVIAN LETTER EAT
10471 ; [.449B.0020.0002] # SHAVIAN LETTER AGE
10472 ; [.449C.0020.0002] # SHAVIAN LETTER ICE
10473 ; [.449D.0020.0002] # SHAVIAN LETTER UP
10474 ; [.449E.0020.0002] # SHAVIAN LETTER OAK
10475 ; [.449F.0020.0002] # SHAVIAN LETTER OOZE
10476 ; [.44A0.0020.0002] # SHAVIAN LETTER OIL
10477 ; [.44A1.0020.0002] # SHAVIAN LETTER AWE
10478 ; [.44A2.0020.0002] # SHAVIAN LETTER ARE
10479 ; [.44A3.0020.0002] # SHAVIAN LETTER OR
1047A ; [.44A4.0020.0002] # SHAVIAN LETTER AIR
1047B ; [.44A5.0020.0002] # SHAVIAN LETTER ERR
1047C ; [.44A6.0020.0002] # SHAVIAN LETTER ARRAY
1047D ; [.44A7.0020.0002] # SHAVIAN LETTER EAR
1047E ; [.44A8.0020.0002] # SHAVIAN LETTER IAN
1047F ; [.44A9.0020.0002] # SHAVIAN LETTER YEW
1BC00 ; [.44AA.0020.0002] # DUPLOYAN LETTER H
1BC01 ; [.44AB.0020.0002] # DUPLOYAN LETTER X
1BC02 ; [.44AC.0020.0002] # DUPLOYAN LETTER P
1BC03 ; [.44AD.0020.0002] # DUPLOYAN LETTER T
1BC04 ; [.44AE.0020.0002] # DUPLOYAN LETTER F
1BC05 ; [.44AF.0020.0002] # DUPLOYAN LETTER K
1BC06 ; [.44B0.0020.0002] # DUPLOYAN LETTER L
1BC07 ; [.44B1.0020.0002] # DUPLOYAN LETTER B
1BC08 ; [.44B2.0020.0002] # DUPLOYAN LETTER D
1BC09 ; [.44B3.0020.0002] # DUPLOYAN LETTER V
1BC0A ; [.44B4.0020.0002] # DUPLOYAN LETTER G
1BC0B ; [.44B5.0020.0002] # DUPLOYAN LETTER R
1BC0C ; [.44B6.0020.0002] # DUPLOYAN LETTER P N
1BC0D ; [.44B7.0020.0002] # DUPLOYAN LETTER D S
1BC0E ; [.44B8.0020.0002] # DUPLOYAN LETTER F N
1BC0F ; [.44B9.0020.0002] # DUPLOYAN LETTER K M
1BC10 ; [.44BA.0020.0002] # DUPLOYAN LETTER R S
1BC11 ; [.44BB.0020.0002] # DUPLOYAN LETTER TH
1BC12 ; [.44BC.0020.0002] # DUPLOYAN LETTER SLOAN DH
1BC13 ; [.44BD.0020.0002] # DUPLOYAN LETTER DH
1BC14 ; [.44BE.0020.0002] # DUPLOYAN LETTER KK
1BC15 ; [.44BF.0020.0002] # DUPLOYAN LETTER SLOAN J
1BC16 ; [.44C0.0020.0002] # DUPLOYAN LETTER HL
1BC17 ; [.44C1.0020.0002] # DUPLOYAN LETTER LH
1BC18 ; [.44C2.0020.0002] # DUPLOYAN LETTER RH
1BC19 ; [.44C3.0020.0002] # DUPLOYAN LETTER M
1BC1A ; [.44C4.0020.0002] # DUPLOYAN LETTER N
1BC1B ; [.44C5.0020.0002] # DUPLOYAN LETTER J
1BC1C ; [.44C6.0020.0002] # DUPLOYAN LETTER S
1BC1D ; [.44C7.0020.0002] # DUPLOYAN LETTER M N
1BC1E ; [.44C8.0020.0002] # DUPLOYAN LETTER N M
1BC1F ; [.44C9.0020.0002] # DUPLOYAN LETTER J M
1BC20 ; [.44CA.0020.0002] # DUPLOYAN LETTER S J
1BC21 ; [.44CB.0020.0002] # DUPLOYAN LETTER M WITH DOT
1BC22 ; [.44CC.0020.0002] # DUPLOYAN LETTER N WITH DOT
1BC23 ; [.44CD.0020.0002] # DUPLOYAN LETTER J WITH DOT
1BC24 ; [.44CE.0020.0002] # DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE
1BC25 ; [.44CF.0020.0002] # DUPLOYAN LETTER S WITH DOT
1BC26 ; [.44D0.0020.0002] # DUPLOYAN LETTER S WITH DOT BELOW
1BC27 ; [.44D1.0020.0002] # DUPLOYAN LETTER M S
1BC28 ; [.44D2.0020.0002] # DUPLOYAN LETTER N S
1BC29 ; [.44D3.0020.0002] # DUPLOYAN LETTER J S
1BC2A ; [.44D4.0020.0002] # DUPLOYAN LETTER S S
1BC2B ; [.44D5.0020.0002] # DUPLOYAN LETTER M N S
1BC2C ; [.44D6.0020.0002] # DUPLOYAN LETTER N M S
1BC2D ; [.44D7.0020.0002] # DUPLOYAN LETTER J M S
1BC2E ; [.44D8.0020.0002] # DUPLOYAN LETTER S J S
1BC2F ; [.44D9.0020.0002] # DUPLOYAN LETTER J S WITH DOT
1BC30 ; [.44DA.0020.0002] # DUPLOYAN LETTER J N
1BC31 ; [.44DB.0020.0002] # DUPLOYAN LETTER J N S
1BC32 ; [.44DC.0020.0002] # DUPLOYAN LETTER S T
1BC33 ; [.44DD.0020.0002] # DUPLOYAN LETTER S T R
1BC34 ; [.44DE.0020.0002] # DUPLOYAN LETTER S P
1BC35 ; [.44DF.0020.0002] # DUPLOYAN LETTER S P R
1BC36 ; [.44E0.0020.0002] # DUPLOYAN LETTER T S
1BC37 ; [.44E1.0020.0002] # DUPLOYAN LETTER T R S
1BC38 ; [.44E2.0020.0002] # DUPLOYAN LETTER W
1BC39 ; [.44E3.0020.0002] # DUPLOYAN LETTER WH
1BC3A ; [.44E4.0020.0002] # DUPLOYAN LETTER W R
1BC3B ; [.44E5.0020.0002] # DUPLOYAN LETTER S N
1BC3C ; [.44E6.0020.0002] # DUPLOYAN LETTER S M
1BC3D ; [.44E7.0020.0002] # DUPLOYAN LETTER K R S
1BC3E ; [.44E8.0020.0002] # DUPLOYAN LETTER G R S
1BC3F ; [.44E9.0020.0002] # DUPLOYAN LETTER S K
1BC40 ; [.44EA.0020.0002] # DUPLOYAN LETTER S K R
1BC41 ; [.44EB.0020.0002] # DUPLOYAN LETTER A
1BC42 ; [.44EC.0020.0002] # DUPLOYAN LETTER SLOAN OW
1BC43 ; [.44ED.0020.0002] # DUPLOYAN LETTER OA
1BC44 ; [.44EE.0020.0002] # DUPLOYAN LETTER O
1BC45 ; [.44EF.0020.0002] # DUPLOYAN LETTER AOU
1BC46 ; [.44F0.0020.0002] # DUPLOYAN LETTER I
1BC47 ; [.44F1.0020.0002] # DUPLOYAN LETTER E
1BC48 ; [.44F2.0020.0002] # DUPLOYAN LETTER IE
1BC49 ; [.44F3.0020.0002] # DUPLOYAN LETTER SHORT I
1BC4A ; [.44F4.0020.0002] # DUPLOYAN LETTER UI
1BC4B ; [.44F5.0020.0002] # DUPLOYAN LETTER EE
1BC4C ; [.44F6.0020.0002] # DUPLOYAN LETTER SLOAN EH
1BC4D ; [.44F7.0020.0002] # DUPLOYAN LETTER ROMANIAN I
1BC4E ; [.44F8.0020.0002] # DUPLOYAN LETTER SLOAN EE
1BC4F ; [.44F9.0020.0002] # DUPLOYAN LETTER LONG I
1BC50 ; [.44FA.0020.0002] # DUPLOYAN LETTER YE
1BC51 ; [.44FB.0020.0002] # DUPLOYAN LETTER U
1BC52 ; [.44FC.0020.0002] # DUPLOYAN LETTER EU
1BC53 ; [.44FD.0020.0002] # DUPLOYAN LETTER XW
1BC54 ; [.44FE.0020.0002] # DUPLOYAN LETTER U N
1BC55 ; [.44FF.0020.0002] # DUPLOYAN LETTER LONG U
1BC56 ; [.4500.0020.0002] # DUPLOYAN LETTER ROMANIAN U
1BC57 ; [.4501.0020.0002] # DUPLOYAN LETTER UH
1BC58 ; [.4502.0020.0002] # DUPLOYAN LETTER SLOAN U
1BC59 ; [.4503.0020.0002] # DUPLOYAN LETTER OOH
1BC5A ; [.4504.0020.0002] # DUPLOYAN LETTER OW
1BC5B ; [.4505.0020.0002] # DUPLOYAN LETTER OU
1BC5C ; [.4506.0020.0002] # DUPLOYAN LETTER WA
1BC5D ; [.4507.0020.0002] # DUPLOYAN LETTER WO
1BC5E ; [.4508.0020.0002] # DUPLOYAN LETTER WI
1BC5F ; [.4509.0020.0002] # DUPLOYAN LETTER WEI
1BC60 ; [.450A.0020.0002] # DUPLOYAN LETTER WOW
1BC61 ; [.450B.0020.0002] # DUPLOYAN LETTER NASAL U
1BC62 ; [.450C.0020.0002] # DUPLOYAN LETTER NASAL O
1BC63 ; [.450D.0020.0002] # DUPLOYAN LETTER NASAL I
1BC64 ; [.450E.0020.0002] # DUPLOYAN LETTER NASAL A
1BC65 ; [.450F.0020.0002] # DUPLOYAN LETTER PERNIN AN
1BC66 ; [.4510.0020.0002] # DUPLOYAN LETTER PERNIN AM
1BC67 ; [.4511.0020.0002] # DUPLOYAN LETTER SLOAN EN
1BC68 ; [.4512.0020.0002] # DUPLOYAN LETTER SLOAN AN
1BC69 ; [.4513.0020.0002] # DUPLOYAN LETTER SLOAN ON
1BC6A ; [.4514.0020.0002] # DUPLOYAN LETTER VOCALIC M
1BC70 ; [.4515.0020.0002] # DUPLOYAN AFFIX LEFT HORIZONTAL SECANT
1BC71 ; [.4516.0020.0002] # DUPLOYAN AFFIX MID HORIZONTAL SECANT
1BC72 ; [.4517.0020.0002] # DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT
1BC73 ; [.4518.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL SECANT
1BC74 ; [.4519.0020.0002] # DUPLOYAN AFFIX MID VERTICAL SECANT
1BC75 ; [.451A.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL SECANT
1BC76 ; [.451B.0020.0002] # DUPLOYAN AFFIX ATTACHED SECANT
1BC77 ; [.451C.0020.0002] # DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT
1BC78 ; [.451D.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT
1BC79 ; [.451E.0020.0002] # DUPLOYAN AFFIX ATTACHED TAIL
1BC7A ; [.451F.0020.0002] # DUPLOYAN AFFIX ATTACHED E HOOK
1BC7B ; [.4520.0020.0002] # DUPLOYAN AFFIX ATTACHED I HOOK
1BC7C ; [.4521.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT HOOK
1BC80 ; [.4522.0020.0002] # DUPLOYAN AFFIX HIGH ACUTE
1BC81 ; [.4523.0020.0002] # DUPLOYAN AFFIX HIGH TIGHT ACUTE
1BC82 ; [.4524.0020.0002] # DUPLOYAN AFFIX HIGH GRAVE
1BC83 ; [.4525.0020.0002] # DUPLOYAN AFFIX HIGH LONG GRAVE
1BC84 ; [.4526.0020.0002] # DUPLOYAN AFFIX HIGH DOT
1BC85 ; [.4527.0020.0002] # DUPLOYAN AFFIX HIGH CIRCLE
1BC86 ; [.4528.0020.0002] # DUPLOYAN AFFIX HIGH LINE
1BC87 ; [.4529.0020.0002] # DUPLOYAN AFFIX HIGH WAVE
1BC88 ; [.452A.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL
1BC90 ; [.452B.0020.0002] # DUPLOYAN AFFIX LOW ACUTE
1BC91 ; [.452C.0020.0002] # DUPLOYAN AFFIX LOW TIGHT ACUTE
1BC92 ; [.452D.0020.0002] # DUPLOYAN AFFIX LOW GRAVE
1BC93 ; [.452E.0020.0002] # DUPLOYAN AFFIX LOW LONG GRAVE
1BC94 ; [.452F.0020.0002] # DUPLOYAN AFFIX LOW DOT
1BC95 ; [.4530.0020.0002] # DUPLOYAN AFFIX LOW CIRCLE
1BC96 ; [.4531.0020.0002] # DUPLOYAN AFFIX LOW LINE
1BC97 ; [.4532.0020.0002] # DUPLOYAN AFFIX LOW WAVE
1BC98 ; [.4533.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL
1BC99 ; [.4534.0020.0002] # DUPLOYAN AFFIX LOW ARROW
10480 ; [.4535.0020.0002] # OSMANYA LETTER ALEF
10481 ; [.4536.0020.0002] # OSMANYA LETTER BA
10482 ; [.4537.0020.0002] # OSMANYA LETTER TA
10483 ; [.4538.0020.0002] # OSMANYA LETTER JA
10484 ; [.4539.0020.0002] # OSMANYA LETTER XA
10485 ; [.453A.0020.0002] # OSMANYA LETTER KHA
10486 ; [.453B.0020.0002] # OSMANYA LETTER DEEL
10487 ; [.453C.0020.0002] # OSMANYA LETTER RA
10488 ; [.453D.0020.0002] # OSMANYA LETTER SA
10489 ; [.453E.0020.0002] # OSMANYA LETTER SHIIN
1048A ; [.453F.0020.0002] # OSMANYA LETTER DHA
1048B ; [.4540.0020.0002] # OSMANYA LETTER CAYN
1048C ; [.4541.0020.0002] # OSMANYA LETTER GA
1048D ; [.4542.0020.0002] # OSMANYA LETTER FA
1048E ; [.4543.0020.0002] # OSMANYA LETTER QAAF
1048F ; [.4544.0020.0002] # OSMANYA LETTER KAAF
10490 ; [.4545.0020.0002] # OSMANYA LETTER LAAN
10491 ; [.4546.0020.0002] # OSMANYA LETTER MIIN
10492 ; [.4547.0020.0002] # OSMANYA LETTER NUUN
10493 ; [.4548.0020.0002] # OSMANYA LETTER WAW
10494 ; [.4549.0020.0002] # OSMANYA LETTER HA
10495 ; [.454A.0020.0002] # OSMANYA LETTER YA
10496 ; [.454B.0020.0002] # OSMANYA LETTER A
10497 ; [.454C.0020.0002] # OSMANYA LETTER E
10498 ; [.454D.0020.0002] # OSMANYA LETTER I
10499 ; [.454E.0020.0002] # OSMANYA LETTER O
1049A ; [.454F.0020.0002] # OSMANYA LETTER U
1049B ; [.4550.0020.0002] # OSMANYA LETTER AA
1049C ; [.4551.0020.0002] # OSMANYA LETTER EE
1049D ; [.4552.0020.0002] # OSMANYA LETTER OO
10500 ; [.4553.0020.0002] # ELBASAN LETTER A
10501 ; [.4554.0020.0002] # ELBASAN LETTER BE
10502 ; [.4555.0020.0002] # ELBASAN LETTER CE
10503 ; [.4556.0020.0002] # ELBASAN LETTER CHE
10504 ; [.4557.0020.0002] # ELBASAN LETTER DE
10505 ; [.4558.0020.0002] # ELBASAN LETTER NDE
10506 ; [.4559.0020.0002] # ELBASAN LETTER DHE
10507 ; [.455A.0020.0002] # ELBASAN LETTER EI
10508 ; [.455B.0020.0002] # ELBASAN LETTER E
10509 ; [.455C.0020.0002] # ELBASAN LETTER FE
1050A ; [.455D.0020.0002] # ELBASAN LETTER GE
1050B ; [.455E.0020.0002] # ELBASAN LETTER GJE
1050C ; [.455F.0020.0002] # ELBASAN LETTER HE
1050D ; [.4560.0020.0002] # ELBASAN LETTER I
1050E ; [.4561.0020.0002] # ELBASAN LETTER JE
1050F ; [.4562.0020.0002] # ELBASAN LETTER KE
10510 ; [.4563.0020.0002] # ELBASAN LETTER LE
10511 ; [.4564.0020.0002] # ELBASAN LETTER LLE
10512 ; [.4565.0020.0002] # ELBASAN LETTER ME
10513 ; [.4566.0020.0002] # ELBASAN LETTER NE
10514 ; [.4567.0020.0002] # ELBASAN LETTER NA
10515 ; [.4568.0020.0002] # ELBASAN LETTER NJE
10516 ; [.4569.0020.0002] # ELBASAN LETTER O
10517 ; [.456A.0020.0002] # ELBASAN LETTER PE
10518 ; [.456B.0020.0002] # ELBASAN LETTER QE
10519 ; [.456C.0020.0002] # ELBASAN LETTER RE
1051A ; [.456D.0020.0002] # ELBASAN LETTER RRE
1051B ; [.456E.0020.0002] # ELBASAN LETTER SE
1051C ; [.456F.0020.0002] # ELBASAN LETTER SHE
1051D ; [.4570.0020.0002] # ELBASAN LETTER TE
1051E ; [.4571.0020.0002] # ELBASAN LETTER THE
1051F ; [.4572.0020.0002] # ELBASAN LETTER U
10520 ; [.4573.0020.0002] # ELBASAN LETTER VE
10521 ; [.4574.0020.0002] # ELBASAN LETTER XE
10522 ; [.4575.0020.0002] # ELBASAN LETTER Y
10523 ; [.4576.0020.0002] # ELBASAN LETTER ZE
10524 ; [.4577.0020.0002] # ELBASAN LETTER ZHE
10525 ; [.4578.0020.0002] # ELBASAN LETTER GHE
10526 ; [.4579.0020.0002] # ELBASAN LETTER GHAMMA
10527 ; [.457A.0020.0002] # ELBASAN LETTER KHE
10530 ; [.457B.0020.0002] # CAUCASIAN ALBANIAN LETTER ALT
10531 ; [.457C.0020.0002] # CAUCASIAN ALBANIAN LETTER BET
10532 ; [.457D.0020.0002] # CAUCASIAN ALBANIAN LETTER GIM
10533 ; [.457E.0020.0002] # CAUCASIAN ALBANIAN LETTER DAT
10534 ; [.457F.0020.0002] # CAUCASIAN ALBANIAN LETTER EB
10535 ; [.4580.0020.0002] # CAUCASIAN ALBANIAN LETTER ZARL
10536 ; [.4581.0020.0002] # CAUCASIAN ALBANIAN LETTER EYN
10537 ; [.4582.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHIL
10538 ; [.4583.0020.0002] # CAUCASIAN ALBANIAN LETTER TAS
10539 ; [.4584.0020.0002] # CAUCASIAN ALBANIAN LETTER CHA
1053A ; [.4585.0020.0002] # CAUCASIAN ALBANIAN LETTER YOWD
1053B ; [.4586.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHA
1053C ; [.4587.0020.0002] # CAUCASIAN ALBANIAN LETTER IRB
1053D ; [.4588.0020.0002] # CAUCASIAN ALBANIAN LETTER SHA
1053E ; [.4589.0020.0002] # CAUCASIAN ALBANIAN LETTER LAN
1053F ; [.458A.0020.0002] # CAUCASIAN ALBANIAN LETTER INYA
10540 ; [.458B.0020.0002] # CAUCASIAN ALBANIAN LETTER XEYN
10541 ; [.458C.0020.0002] # CAUCASIAN ALBANIAN LETTER DYAN
10542 ; [.458D.0020.0002] # CAUCASIAN ALBANIAN LETTER CAR
10543 ; [.458E.0020.0002] # CAUCASIAN ALBANIAN LETTER JHOX
10544 ; [.458F.0020.0002] # CAUCASIAN ALBANIAN LETTER KAR
10545 ; [.4590.0020.0002] # CAUCASIAN ALBANIAN LETTER LYIT
10546 ; [.4591.0020.0002] # CAUCASIAN ALBANIAN LETTER HEYT
10547 ; [.4592.0020.0002] # CAUCASIAN ALBANIAN LETTER QAY
10548 ; [.4593.0020.0002] # CAUCASIAN ALBANIAN LETTER AOR
10549 ; [.4594.0020.0002] # CAUCASIAN ALBANIAN LETTER CHOY
1054A ; [.4595.0020.0002] # CAUCASIAN ALBANIAN LETTER CHI
1054B ; [.4596.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAY
1054C ; [.4597.0020.0002] # CAUCASIAN ALBANIAN LETTER MAQ
1054D ; [.4598.0020.0002] # CAUCASIAN ALBANIAN LETTER QAR
1054E ; [.4599.0020.0002] # CAUCASIAN ALBANIAN LETTER NOWC
1054F ; [.459A.0020.0002] # CAUCASIAN ALBANIAN LETTER DZYAY
10550 ; [.459B.0020.0002] # CAUCASIAN ALBANIAN LETTER SHAK
10551 ; [.459C.0020.0002] # CAUCASIAN ALBANIAN LETTER JAYN
10552 ; [.459D.0020.0002] # CAUCASIAN ALBANIAN LETTER ON
10553 ; [.459E.0020.0002] # CAUCASIAN ALBANIAN LETTER TYAY
10554 ; [.459F.0020.0002] # CAUCASIAN ALBANIAN LETTER FAM
10555 ; [.45A0.0020.0002] # CAUCASIAN ALBANIAN LETTER DZAY
10556 ; [.45A1.0020.0002] # CAUCASIAN ALBANIAN LETTER CHAT
10557 ; [.45A2.0020.0002] # CAUCASIAN ALBANIAN LETTER PEN
10558 ; [.45A3.0020.0002] # CAUCASIAN ALBANIAN LETTER GHEYS
10559 ; [.45A4.0020.0002] # CAUCASIAN ALBANIAN LETTER RAT
1055A ; [.45A5.0020.0002] # CAUCASIAN ALBANIAN LETTER SEYK
1055B ; [.45A6.0020.0002] # CAUCASIAN ALBANIAN LETTER VEYZ
1055C ; [.45A7.0020.0002] # CAUCASIAN ALBANIAN LETTER TIWR
1055D ; [.45A8.0020.0002] # CAUCASIAN ALBANIAN LETTER SHOY
1055E ; [.45A9.0020.0002] # CAUCASIAN ALBANIAN LETTER IWN
1055F ; [.45AA.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAW
10560 ; [.45AB.0020.0002] # CAUCASIAN ALBANIAN LETTER CAYN
10561 ; [.45AC.0020.0002] # CAUCASIAN ALBANIAN LETTER YAYD
10562 ; [.45AD.0020.0002] # CAUCASIAN ALBANIAN LETTER PIWR
10563 ; [.45AE.0020.0002] # CAUCASIAN ALBANIAN LETTER KIW
110D0 ; [.45AF.0020.0002] # SORA SOMPENG LETTER SAH
110D1 ; [.45B0.0020.0002] # SORA SOMPENG LETTER TAH
110D2 ; [.45B1.0020.0002] # SORA SOMPENG LETTER BAH
110D3 ; [.45B2.0020.0002] # SORA SOMPENG LETTER CAH
110D4 ; [.45B3.0020.0002] # SORA SOMPENG LETTER DAH
110D5 ; [.45B4.0020.0002] # SORA SOMPENG LETTER GAH
110D6 ; [.45B5.0020.0002] # SORA SOMPENG LETTER MAH
110D7 ; [.45B6.0020.0002] # SORA SOMPENG LETTER NGAH
110D8 ; [.45B7.0020.0002] # SORA SOMPENG LETTER LAH
110D9 ; [.45B8.0020.0002] # SORA SOMPENG LETTER NAH
110DA ; [.45B9.0020.0002] # SORA SOMPENG LETTER VAH
110DB ; [.45BA.0020.0002] # SORA SOMPENG LETTER PAH
110DC ; [.45BB.0020.0002] # SORA SOMPENG LETTER YAH
110DD ; [.45BC.0020.0002] # SORA SOMPENG LETTER RAH
110DE ; [.45BD.0020.0002] # SORA SOMPENG LETTER HAH
110DF ; [.45BE.0020.0002] # SORA SOMPENG LETTER KAH
110E0 ; [.45BF.0020.0002] # SORA SOMPENG LETTER JAH
110E1 ; [.45C0.0020.0002] # SORA SOMPENG LETTER NYAH
110E2 ; [.45C1.0020.0002] # SORA SOMPENG LETTER AH
110E3 ; [.45C2.0020.0002] # SORA SOMPENG LETTER EEH
110E4 ; [.45C3.0020.0002] # SORA SOMPENG LETTER IH
110E5 ; [.45C4.0020.0002] # SORA SOMPENG LETTER UH
110E6 ; [.45C5.0020.0002] # SORA SOMPENG LETTER OH
110E7 ; [.45C6.0020.0002] # SORA SOMPENG LETTER EH
110E8 ; [.45C7.0020.0002] # SORA SOMPENG LETTER MAE
16A40 ; [.45C8.0020.0002] # MRO LETTER TA
16A41 ; [.45C9.0020.0002] # MRO LETTER NGI
16A42 ; [.45CA.0020.0002] # MRO LETTER YO
16A43 ; [.45CB.0020.0002] # MRO LETTER MIM
16A44 ; [.45CC.0020.0002] # MRO LETTER BA
16A45 ; [.45CD.0020.0002] # MRO LETTER DA
16A46 ; [.45CE.0020.0002] # MRO LETTER A
16A47 ; [.45CF.0020.0002] # MRO LETTER PHI
16A48 ; [.45D0.0020.0002] # MRO LETTER KHAI
16A49 ; [.45D1.0020.0002] # MRO LETTER HAO
16A4A ; [.45D2.0020.0002] # MRO LETTER DAI
16A4B ; [.45D3.0020.0002] # MRO LETTER CHU
16A4C ; [.45D4.0020.0002] # MRO LETTER KEAAE
16A4D ; [.45D5.0020.0002] # MRO LETTER OL
16A4E ; [.45D6.0020.0002] # MRO LETTER MAEM
16A4F ; [.45D7.0020.0002] # MRO LETTER NIN
16A50 ; [.45D8.0020.0002] # MRO LETTER PA
16A51 ; [.45D9.0020.0002] # MRO LETTER OO
16A52 ; [.45DA.0020.0002] # MRO LETTER O
16A53 ; [.45DB.0020.0002] # MRO LETTER RO
16A54 ; [.45DC.0020.0002] # MRO LETTER SHI
16A55 ; [.45DD.0020.0002] # MRO LETTER THEA
16A56 ; [.45DE.0020.0002] # MRO LETTER EA
16A57 ; [.45DF.0020.0002] # MRO LETTER WA
16A58 ; [.45E0.0020.0002] # MRO LETTER E
16A59 ; [.45E1.0020.0002] # MRO LETTER KO
16A5A ; [.45E2.0020.0002] # MRO LETTER LAN
16A5B ; [.45E3.0020.0002] # MRO LETTER LA
16A5C ; [.45E4.0020.0002] # MRO LETTER HAI
16A5D ; [.45E5.0020.0002] # MRO LETTER RI
16A5E ; [.45E6.0020.0002] # MRO LETTER TEK
10000 ; [.45E7.0020.0002] # LINEAR B SYLLABLE B008 A
10001 ; [.45E8.0020.0002] # LINEAR B SYLLABLE B038 E
10002 ; [.45E9.0020.0002] # LINEAR B SYLLABLE B028 I
10003 ; [.45EA.0020.0002] # LINEAR B SYLLABLE B061 O
10004 ; [.45EB.0020.0002] # LINEAR B SYLLABLE B010 U
10005 ; [.45EC.0020.0002] # LINEAR B SYLLABLE B001 DA
10006 ; [.45ED.0020.0002] # LINEAR B SYLLABLE B045 DE
10007 ; [.45EE.0020.0002] # LINEAR B SYLLABLE B007 DI
10008 ; [.45EF.0020.0002] # LINEAR B SYLLABLE B014 DO
10009 ; [.45F0.0020.0002] # LINEAR B SYLLABLE B051 DU
1000A ; [.45F1.0020.0002] # LINEAR B SYLLABLE B057 JA
1000B ; [.45F2.0020.0002] # LINEAR B SYLLABLE B046 JE
1000D ; [.45F3.0020.0002] # LINEAR B SYLLABLE B036 JO
1000E ; [.45F4.0020.0002] # LINEAR B SYLLABLE B065 JU
1000F ; [.45F5.0020.0002] # LINEAR B SYLLABLE B077 KA
10010 ; [.45F6.0020.0002] # LINEAR B SYLLABLE B044 KE
10011 ; [.45F7.0020.0002] # LINEAR B SYLLABLE B067 KI
10012 ; [.45F8.0020.0002] # LINEAR B SYLLABLE B070 KO
10013 ; [.45F9.0020.0002] # LINEAR B SYLLABLE B081 KU
10014 ; [.45FA.0020.0002] # LINEAR B SYLLABLE B080 MA
10015 ; [.45FB.0020.0002] # LINEAR B SYLLABLE B013 ME
10016 ; [.45FC.0020.0002] # LINEAR B SYLLABLE B073 MI
10017 ; [.45FD.0020.0002] # LINEAR B SYLLABLE B015 MO
10018 ; [.45FE.0020.0002] # LINEAR B SYLLABLE B023 MU
10019 ; [.45FF.0020.0002] # LINEAR B SYLLABLE B006 NA
1001A ; [.4600.0020.0002] # LINEAR B SYLLABLE B024 NE
1001B ; [.4601.0020.0002] # LINEAR B SYLLABLE B030 NI
1001C ; [.4602.0020.0002] # LINEAR B SYLLABLE B052 NO
1001D ; [.4603.0020.0002] # LINEAR B SYLLABLE B055 NU
1001E ; [.4604.0020.0002] # LINEAR B SYLLABLE B003 PA
1001F ; [.4605.0020.0002] # LINEAR B SYLLABLE B072 PE
10020 ; [.4606.0020.0002] # LINEAR B SYLLABLE B039 PI
10021 ; [.4607.0020.0002] # LINEAR B SYLLABLE B011 PO
10022 ; [.4608.0020.0002] # LINEAR B SYLLABLE B050 PU
10023 ; [.4609.0020.0002] # LINEAR B SYLLABLE B016 QA
10024 ; [.460A.0020.0002] # LINEAR B SYLLABLE B078 QE
10025 ; [.460B.0020.0002] # LINEAR B SYLLABLE B021 QI
10026 ; [.460C.0020.0002] # LINEAR B SYLLABLE B032 QO
10028 ; [.460D.0020.0002] # LINEAR B SYLLABLE B060 RA
10029 ; [.460E.0020.0002] # LINEAR B SYLLABLE B027 RE
1002A ; [.460F.0020.0002] # LINEAR B SYLLABLE B053 RI
1002B ; [.4610.0020.0002] # LINEAR B SYLLABLE B002 RO
1002C ; [.4611.0020.0002] # LINEAR B SYLLABLE B026 RU
1002D ; [.4612.0020.0002] # LINEAR B SYLLABLE B031 SA
1002E ; [.4613.0020.0002] # LINEAR B SYLLABLE B009 SE
1002F ; [.4614.0020.0002] # LINEAR B SYLLABLE B041 SI
10030 ; [.4615.0020.0002] # LINEAR B SYLLABLE B012 SO
10031 ; [.4616.0020.0002] # LINEAR B SYLLABLE B058 SU
10032 ; [.4617.0020.0002] # LINEAR B SYLLABLE B059 TA
10033 ; [.4618.0020.0002] # LINEAR B SYLLABLE B004 TE
10034 ; [.4619.0020.0002] # LINEAR B SYLLABLE B037 TI
10035 ; [.461A.0020.0002] # LINEAR B SYLLABLE B005 TO
10036 ; [.461B.0020.0002] # LINEAR B SYLLABLE B069 TU
10037 ; [.461C.0020.0002] # LINEAR B SYLLABLE B054 WA
10038 ; [.461D.0020.0002] # LINEAR B SYLLABLE B075 WE
10039 ; [.461E.0020.0002] # LINEAR B SYLLABLE B040 WI
1003A ; [.461F.0020.0002] # LINEAR B SYLLABLE B042 WO
1003C ; [.4620.0020.0002] # LINEAR B SYLLABLE B017 ZA
1003D ; [.4621.0020.0002] # LINEAR B SYLLABLE B074 ZE
1003F ; [.4622.0020.0002] # LINEAR B SYLLABLE B020 ZO
10040 ; [.4623.0020.0002] # LINEAR B SYLLABLE B025 A2
10041 ; [.4624.0020.0002] # LINEAR B SYLLABLE B043 A3
10042 ; [.4625.0020.0002] # LINEAR B SYLLABLE B085 AU
10043 ; [.4626.0020.0002] # LINEAR B SYLLABLE B071 DWE
10044 ; [.4627.0020.0002] # LINEAR B SYLLABLE B090 DWO
10045 ; [.4628.0020.0002] # LINEAR B SYLLABLE B048 NWA
10046 ; [.4629.0020.0002] # LINEAR B SYLLABLE B029 PU2
10047 ; [.462A.0020.0002] # LINEAR B SYLLABLE B062 PTE
10048 ; [.462B.0020.0002] # LINEAR B SYLLABLE B076 RA2
10049 ; [.462C.0020.0002] # LINEAR B SYLLABLE B033 RA3
1004A ; [.462D.0020.0002] # LINEAR B SYLLABLE B068 RO2
1004B ; [.462E.0020.0002] # LINEAR B SYLLABLE B066 TA2
1004C ; [.462F.0020.0002] # LINEAR B SYLLABLE B087 TWE
1004D ; [.4630.0020.0002] # LINEAR B SYLLABLE B091 TWO
10050 ; [.4631.0020.0002] # LINEAR B SYMBOL B018
10051 ; [.4632.0020.0002] # LINEAR B SYMBOL B019
10052 ; [.4633.0020.0002] # LINEAR B SYMBOL B022
10053 ; [.4634.0020.0002] # LINEAR B SYMBOL B034
10054 ; [.4635.0020.0002] # LINEAR B SYMBOL B047
10055 ; [.4636.0020.0002] # LINEAR B SYMBOL B049
10056 ; [.4637.0020.0002] # LINEAR B SYMBOL B056
10057 ; [.4638.0020.0002] # LINEAR B SYMBOL B063
10058 ; [.4639.0020.0002] # LINEAR B SYMBOL B064
10059 ; [.463A.0020.0002] # LINEAR B SYMBOL B079
1005A ; [.463B.0020.0002] # LINEAR B SYMBOL B082
1005B ; [.463C.0020.0002] # LINEAR B SYMBOL B083
1005C ; [.463D.0020.0002] # LINEAR B SYMBOL B086
1005D ; [.463E.0020.0002] # LINEAR B SYMBOL B089
10080 ; [.463F.0020.0002] # LINEAR B IDEOGRAM B100 MAN
10081 ; [.4640.0020.0002] # LINEAR B IDEOGRAM B102 WOMAN
10082 ; [.4641.0020.0002] # LINEAR B IDEOGRAM B104 DEER
10083 ; [.4642.0020.0002] # LINEAR B IDEOGRAM B105 EQUID
10084 ; [.4643.0020.0002] # LINEAR B IDEOGRAM B105F MARE
10085 ; [.4644.0020.0002] # LINEAR B IDEOGRAM B105M STALLION
10086 ; [.4645.0020.0002] # LINEAR B IDEOGRAM B106F EWE
10087 ; [.4646.0020.0002] # LINEAR B IDEOGRAM B106M RAM
10088 ; [.4647.0020.0002] # LINEAR B IDEOGRAM B107F SHE-GOAT
10089 ; [.4648.0020.0002] # LINEAR B IDEOGRAM B107M HE-GOAT
1008A ; [.4649.0020.0002] # LINEAR B IDEOGRAM B108F SOW
1008B ; [.464A.0020.0002] # LINEAR B IDEOGRAM B108M BOAR
1008C ; [.464B.0020.0002] # LINEAR B IDEOGRAM B109F COW
1008D ; [.464C.0020.0002] # LINEAR B IDEOGRAM B109M BULL
1008E ; [.464D.0020.0002] # LINEAR B IDEOGRAM B120 WHEAT
1008F ; [.464E.0020.0002] # LINEAR B IDEOGRAM B121 BARLEY
10090 ; [.464F.0020.0002] # LINEAR B IDEOGRAM B122 OLIVE
10091 ; [.4650.0020.0002] # LINEAR B IDEOGRAM B123 SPICE
10092 ; [.4651.0020.0002] # LINEAR B IDEOGRAM B125 CYPERUS
10093 ; [.4652.0020.0002] # LINEAR B MONOGRAM B127 KAPO
10094 ; [.4653.0020.0002] # LINEAR B MONOGRAM B128 KANAKO
10095 ; [.4654.0020.0002] # LINEAR B IDEOGRAM B130 OIL
10096 ; [.4655.0020.0002] # LINEAR B IDEOGRAM B131 WINE
10097 ; [.4656.0020.0002] # LINEAR B IDEOGRAM B132
10098 ; [.4657.0020.0002] # LINEAR B MONOGRAM B133 AREPA
10099 ; [.4658.0020.0002] # LINEAR B MONOGRAM B135 MERI
1009A ; [.4659.0020.0002] # LINEAR B IDEOGRAM B140 BRONZE
1009B ; [.465A.0020.0002] # LINEAR B IDEOGRAM B141 GOLD
1009C ; [.465B.0020.0002] # LINEAR B IDEOGRAM B142
1009D ; [.465C.0020.0002] # LINEAR B IDEOGRAM B145 WOOL
1009E ; [.465D.0020.0002] # LINEAR B IDEOGRAM B146
1009F ; [.465E.0020.0002] # LINEAR B IDEOGRAM B150
100A0 ; [.465F.0020.0002] # LINEAR B IDEOGRAM B151 HORN
100A1 ; [.4660.0020.0002] # LINEAR B IDEOGRAM B152
100A2 ; [.4661.0020.0002] # LINEAR B IDEOGRAM B153
100A3 ; [.4662.0020.0002] # LINEAR B IDEOGRAM B154
100A4 ; [.4663.0020.0002] # LINEAR B MONOGRAM B156 TURO2
100A5 ; [.4664.0020.0002] # LINEAR B IDEOGRAM B157
100A6 ; [.4665.0020.0002] # LINEAR B IDEOGRAM B158
100A7 ; [.4666.0020.0002] # LINEAR B IDEOGRAM B159 CLOTH
100A8 ; [.4667.0020.0002] # LINEAR B IDEOGRAM B160
100A9 ; [.4668.0020.0002] # LINEAR B IDEOGRAM B161
100AA ; [.4669.0020.0002] # LINEAR B IDEOGRAM B162 GARMENT
100AB ; [.466A.0020.0002] # LINEAR B IDEOGRAM B163 ARMOUR
100AC ; [.466B.0020.0002] # LINEAR B IDEOGRAM B164
100AD ; [.466C.0020.0002] # LINEAR B IDEOGRAM B165
100AE ; [.466D.0020.0002] # LINEAR B IDEOGRAM B166
100AF ; [.466E.0020.0002] # LINEAR B IDEOGRAM B167
100B0 ; [.466F.0020.0002] # LINEAR B IDEOGRAM B168
100B1 ; [.4670.0020.0002] # LINEAR B IDEOGRAM B169
100B2 ; [.4671.0020.0002] # LINEAR B IDEOGRAM B170
100B3 ; [.4672.0020.0002] # LINEAR B IDEOGRAM B171
100B4 ; [.4673.0020.0002] # LINEAR B IDEOGRAM B172
100B5 ; [.4674.0020.0002] # LINEAR B IDEOGRAM B173 MONTH
100B6 ; [.4675.0020.0002] # LINEAR B IDEOGRAM B174
100B7 ; [.4676.0020.0002] # LINEAR B IDEOGRAM B176 TREE
100B8 ; [.4677.0020.0002] # LINEAR B IDEOGRAM B177
100B9 ; [.4678.0020.0002] # LINEAR B IDEOGRAM B178
100BA ; [.4679.0020.0002] # LINEAR B IDEOGRAM B179
100BB ; [.467A.0020.0002] # LINEAR B IDEOGRAM B180
100BC ; [.467B.0020.0002] # LINEAR B IDEOGRAM B181
100BD ; [.467C.0020.0002] # LINEAR B IDEOGRAM B182
100BE ; [.467D.0020.0002] # LINEAR B IDEOGRAM B183
100BF ; [.467E.0020.0002] # LINEAR B IDEOGRAM B184
100C0 ; [.467F.0020.0002] # LINEAR B IDEOGRAM B185
100C1 ; [.4680.0020.0002] # LINEAR B IDEOGRAM B189
100C2 ; [.4681.0020.0002] # LINEAR B IDEOGRAM B190
100C3 ; [.4682.0020.0002] # LINEAR B IDEOGRAM B191 HELMET
100C4 ; [.4683.0020.0002] # LINEAR B IDEOGRAM B220 FOOTSTOOL
100C5 ; [.4684.0020.0002] # LINEAR B IDEOGRAM B225 BATHTUB
100C6 ; [.4685.0020.0002] # LINEAR B IDEOGRAM B230 SPEAR
100C7 ; [.4686.0020.0002] # LINEAR B IDEOGRAM B231 ARROW
100C8 ; [.4687.0020.0002] # LINEAR B IDEOGRAM B232
100C9 ; [.4688.0020.0002] # LINEAR B IDEOGRAM B233 SWORD
100CA ; [.4689.0020.0002] # LINEAR B IDEOGRAM B234
100CB ; [.468A.0020.0002] # LINEAR B IDEOGRAM B236
100CC ; [.468B.0020.0002] # LINEAR B IDEOGRAM B240 WHEELED CHARIOT
100CD ; [.468C.0020.0002] # LINEAR B IDEOGRAM B241 CHARIOT
100CE ; [.468D.0020.0002] # LINEAR B IDEOGRAM B242 CHARIOT FRAME
100CF ; [.468E.0020.0002] # LINEAR B IDEOGRAM B243 WHEEL
100D0 ; [.468F.0020.0002] # LINEAR B IDEOGRAM B245
100D1 ; [.4690.0020.0002] # LINEAR B IDEOGRAM B246
100D2 ; [.4691.0020.0002] # LINEAR B MONOGRAM B247 DIPTE
100D3 ; [.4692.0020.0002] # LINEAR B IDEOGRAM B248
100D4 ; [.4693.0020.0002] # LINEAR B IDEOGRAM B249
100D5 ; [.4694.0020.0002] # LINEAR B IDEOGRAM B251
100D6 ; [.4695.0020.0002] # LINEAR B IDEOGRAM B252
100D7 ; [.4696.0020.0002] # LINEAR B IDEOGRAM B253
100D8 ; [.4697.0020.0002] # LINEAR B IDEOGRAM B254 DART
100D9 ; [.4698.0020.0002] # LINEAR B IDEOGRAM B255
100DA ; [.4699.0020.0002] # LINEAR B IDEOGRAM B256
100DB ; [.469A.0020.0002] # LINEAR B IDEOGRAM B257
100DC ; [.469B.0020.0002] # LINEAR B IDEOGRAM B258
100DD ; [.469C.0020.0002] # LINEAR B IDEOGRAM B259
100DE ; [.469D.0020.0002] # LINEAR B IDEOGRAM VESSEL B155
100DF ; [.469E.0020.0002] # LINEAR B IDEOGRAM VESSEL B200
100E0 ; [.469F.0020.0002] # LINEAR B IDEOGRAM VESSEL B201
100E1 ; [.46A0.0020.0002] # LINEAR B IDEOGRAM VESSEL B202
100E2 ; [.46A1.0020.0002] # LINEAR B IDEOGRAM VESSEL B203
100E3 ; [.46A2.0020.0002] # LINEAR B IDEOGRAM VESSEL B204
100E4 ; [.46A3.0020.0002] # LINEAR B IDEOGRAM VESSEL B205
100E5 ; [.46A4.0020.0002] # LINEAR B IDEOGRAM VESSEL B206
100E6 ; [.46A5.0020.0002] # LINEAR B IDEOGRAM VESSEL B207
100E7 ; [.46A6.0020.0002] # LINEAR B IDEOGRAM VESSEL B208
100E8 ; [.46A7.0020.0002] # LINEAR B IDEOGRAM VESSEL B209
100E9 ; [.46A8.0020.0002] # LINEAR B IDEOGRAM VESSEL B210
100EA ; [.46A9.0020.0002] # LINEAR B IDEOGRAM VESSEL B211
100EB ; [.46AA.0020.0002] # LINEAR B IDEOGRAM VESSEL B212
100EC ; [.46AB.0020.0002] # LINEAR B IDEOGRAM VESSEL B213
100ED ; [.46AC.0020.0002] # LINEAR B IDEOGRAM VESSEL B214
100EE ; [.46AD.0020.0002] # LINEAR B IDEOGRAM VESSEL B215
100EF ; [.46AE.0020.0002] # LINEAR B IDEOGRAM VESSEL B216
100F0 ; [.46AF.0020.0002] # LINEAR B IDEOGRAM VESSEL B217
100F1 ; [.46B0.0020.0002] # LINEAR B IDEOGRAM VESSEL B218
100F2 ; [.46B1.0020.0002] # LINEAR B IDEOGRAM VESSEL B219
100F3 ; [.46B2.0020.0002] # LINEAR B IDEOGRAM VESSEL B221
100F4 ; [.46B3.0020.0002] # LINEAR B IDEOGRAM VESSEL B222
100F5 ; [.46B4.0020.0002] # LINEAR B IDEOGRAM VESSEL B226
100F6 ; [.46B5.0020.0002] # LINEAR B IDEOGRAM VESSEL B227
100F7 ; [.46B6.0020.0002] # LINEAR B IDEOGRAM VESSEL B228
100F8 ; [.46B7.0020.0002] # LINEAR B IDEOGRAM VESSEL B229
100F9 ; [.46B8.0020.0002] # LINEAR B IDEOGRAM VESSEL B250
100FA ; [.46B9.0020.0002] # LINEAR B IDEOGRAM VESSEL B305
10600 ; [.46BA.0020.0002] # LINEAR A SIGN AB001
10601 ; [.46BB.0020.0002] # LINEAR A SIGN AB002
10602 ; [.46BC.0020.0002] # LINEAR A SIGN AB003
10603 ; [.46BD.0020.0002] # LINEAR A SIGN AB004
10604 ; [.46BE.0020.0002] # LINEAR A SIGN AB005
10605 ; [.46BF.0020.0002] # LINEAR A SIGN AB006
10606 ; [.46C0.0020.0002] # LINEAR A SIGN AB007
10607 ; [.46C1.0020.0002] # LINEAR A SIGN AB008
10608 ; [.46C2.0020.0002] # LINEAR A SIGN AB009
10609 ; [.46C3.0020.0002] # LINEAR A SIGN AB010
1060A ; [.46C4.0020.0002] # LINEAR A SIGN AB011
1060B ; [.46C5.0020.0002] # LINEAR A SIGN AB013
1060C ; [.46C6.0020.0002] # LINEAR A SIGN AB016
1060D ; [.46C7.0020.0002] # LINEAR A SIGN AB017
1060E ; [.46C8.0020.0002] # LINEAR A SIGN AB020
1060F ; [.46C9.0020.0002] # LINEAR A SIGN AB021
10610 ; [.46CA.0020.0002] # LINEAR A SIGN AB021F
10611 ; [.46CB.0020.0002] # LINEAR A SIGN AB021M
10612 ; [.46CC.0020.0002] # LINEAR A SIGN AB022
10613 ; [.46CD.0020.0002] # LINEAR A SIGN AB022F
10614 ; [.46CE.0020.0002] # LINEAR A SIGN AB022M
10615 ; [.46CF.0020.0002] # LINEAR A SIGN AB023
10616 ; [.46D0.0020.0002] # LINEAR A SIGN AB023M
10617 ; [.46D1.0020.0002] # LINEAR A SIGN AB024
10618 ; [.46D2.0020.0002] # LINEAR A SIGN AB026
10619 ; [.46D3.0020.0002] # LINEAR A SIGN AB027
1061A ; [.46D4.0020.0002] # LINEAR A SIGN AB028
1061B ; [.46D5.0020.0002] # LINEAR A SIGN A028B
1061C ; [.46D6.0020.0002] # LINEAR A SIGN AB029
1061D ; [.46D7.0020.0002] # LINEAR A SIGN AB030
1061E ; [.46D8.0020.0002] # LINEAR A SIGN AB031
1061F ; [.46D9.0020.0002] # LINEAR A SIGN AB034
10620 ; [.46DA.0020.0002] # LINEAR A SIGN AB037
10621 ; [.46DB.0020.0002] # LINEAR A SIGN AB038
10622 ; [.46DC.0020.0002] # LINEAR A SIGN AB039
10623 ; [.46DD.0020.0002] # LINEAR A SIGN AB040
10624 ; [.46DE.0020.0002] # LINEAR A SIGN AB041
10625 ; [.46DF.0020.0002] # LINEAR A SIGN AB044
10626 ; [.46E0.0020.0002] # LINEAR A SIGN AB045
10627 ; [.46E1.0020.0002] # LINEAR A SIGN AB046
10628 ; [.46E2.0020.0002] # LINEAR A SIGN AB047
10629 ; [.46E3.0020.0002] # LINEAR A SIGN AB048
1062A ; [.46E4.0020.0002] # LINEAR A SIGN AB049
1062B ; [.46E5.0020.0002] # LINEAR A SIGN AB050
1062C ; [.46E6.0020.0002] # LINEAR A SIGN AB051
1062D ; [.46E7.0020.0002] # LINEAR A SIGN AB053
1062E ; [.46E8.0020.0002] # LINEAR A SIGN AB054
1062F ; [.46E9.0020.0002] # LINEAR A SIGN AB055
10630 ; [.46EA.0020.0002] # LINEAR A SIGN AB056
10631 ; [.46EB.0020.0002] # LINEAR A SIGN AB057
10632 ; [.46EC.0020.0002] # LINEAR A SIGN AB058
10633 ; [.46ED.0020.0002] # LINEAR A SIGN AB059
10634 ; [.46EE.0020.0002] # LINEAR A SIGN AB060
10635 ; [.46EF.0020.0002] # LINEAR A SIGN AB061
10636 ; [.46F0.0020.0002] # LINEAR A SIGN AB065
10637 ; [.46F1.0020.0002] # LINEAR A SIGN AB066
10638 ; [.46F2.0020.0002] # LINEAR A SIGN AB067
10639 ; [.46F3.0020.0002] # LINEAR A SIGN AB069
1063A ; [.46F4.0020.0002] # LINEAR A SIGN AB070
1063B ; [.46F5.0020.0002] # LINEAR A SIGN AB073
1063C ; [.46F6.0020.0002] # LINEAR A SIGN AB074
1063D ; [.46F7.0020.0002] # LINEAR A SIGN AB076
1063E ; [.46F8.0020.0002] # LINEAR A SIGN AB077
1063F ; [.46F9.0020.0002] # LINEAR A SIGN AB078
10640 ; [.46FA.0020.0002] # LINEAR A SIGN AB079
10641 ; [.46FB.0020.0002] # LINEAR A SIGN AB080
10642 ; [.46FC.0020.0002] # LINEAR A SIGN AB081
10643 ; [.46FD.0020.0002] # LINEAR A SIGN AB082
10644 ; [.46FE.0020.0002] # LINEAR A SIGN AB085
10645 ; [.46FF.0020.0002] # LINEAR A SIGN AB086
10646 ; [.4700.0020.0002] # LINEAR A SIGN AB087
10647 ; [.4701.0020.0002] # LINEAR A SIGN A100-102
10648 ; [.4702.0020.0002] # LINEAR A SIGN AB118
10649 ; [.4703.0020.0002] # LINEAR A SIGN AB120
1064A ; [.4704.0020.0002] # LINEAR A SIGN A120B
1064B ; [.4705.0020.0002] # LINEAR A SIGN AB122
1064C ; [.4706.0020.0002] # LINEAR A SIGN AB123
1064D ; [.4707.0020.0002] # LINEAR A SIGN AB131A
1064E ; [.4708.0020.0002] # LINEAR A SIGN AB131B
1064F ; [.4709.0020.0002] # LINEAR A SIGN A131C
10650 ; [.470A.0020.0002] # LINEAR A SIGN AB164
10651 ; [.470B.0020.0002] # LINEAR A SIGN AB171
10652 ; [.470C.0020.0002] # LINEAR A SIGN AB180
10653 ; [.470D.0020.0002] # LINEAR A SIGN AB188
10654 ; [.470E.0020.0002] # LINEAR A SIGN AB191
10655 ; [.470F.0020.0002] # LINEAR A SIGN A301
10656 ; [.4710.0020.0002] # LINEAR A SIGN A302
10657 ; [.4711.0020.0002] # LINEAR A SIGN A303
10658 ; [.4712.0020.0002] # LINEAR A SIGN A304
10659 ; [.4713.0020.0002] # LINEAR A SIGN A305
1065A ; [.4714.0020.0002] # LINEAR A SIGN A306
1065B ; [.4715.0020.0002] # LINEAR A SIGN A307
1065C ; [.4716.0020.0002] # LINEAR A SIGN A308
1065D ; [.4717.0020.0002] # LINEAR A SIGN A309A
1065E ; [.4718.0020.0002] # LINEAR A SIGN A309B
1065F ; [.4719.0020.0002] # LINEAR A SIGN A309C
10660 ; [.471A.0020.0002] # LINEAR A SIGN A310
10661 ; [.471B.0020.0002] # LINEAR A SIGN A311
10662 ; [.471C.0020.0002] # LINEAR A SIGN A312
10663 ; [.471D.0020.0002] # LINEAR A SIGN A313A
10664 ; [.471E.0020.0002] # LINEAR A SIGN A313B
10665 ; [.471F.0020.0002] # LINEAR A SIGN A313C
10666 ; [.4720.0020.0002] # LINEAR A SIGN A314
10667 ; [.4721.0020.0002] # LINEAR A SIGN A315
10668 ; [.4722.0020.0002] # LINEAR A SIGN A316
10669 ; [.4723.0020.0002] # LINEAR A SIGN A317
1066A ; [.4724.0020.0002] # LINEAR A SIGN A318
1066B ; [.4725.0020.0002] # LINEAR A SIGN A319
1066C ; [.4726.0020.0002] # LINEAR A SIGN A320
1066D ; [.4727.0020.0002] # LINEAR A SIGN A321
1066E ; [.4728.0020.0002] # LINEAR A SIGN A322
1066F ; [.4729.0020.0002] # LINEAR A SIGN A323
10670 ; [.472A.0020.0002] # LINEAR A SIGN A324
10671 ; [.472B.0020.0002] # LINEAR A SIGN A325
10672 ; [.472C.0020.0002] # LINEAR A SIGN A326
10673 ; [.472D.0020.0002] # LINEAR A SIGN A327
10674 ; [.472E.0020.0002] # LINEAR A SIGN A328
10675 ; [.472F.0020.0002] # LINEAR A SIGN A329
10676 ; [.4730.0020.0002] # LINEAR A SIGN A330
10677 ; [.4731.0020.0002] # LINEAR A SIGN A331
10678 ; [.4732.0020.0002] # LINEAR A SIGN A332
10679 ; [.4733.0020.0002] # LINEAR A SIGN A333
1067A ; [.4734.0020.0002] # LINEAR A SIGN A334
1067B ; [.4735.0020.0002] # LINEAR A SIGN A335
1067C ; [.4736.0020.0002] # LINEAR A SIGN A336
1067D ; [.4737.0020.0002] # LINEAR A SIGN A337
1067E ; [.4738.0020.0002] # LINEAR A SIGN A338
1067F ; [.4739.0020.0002] # LINEAR A SIGN A339
10680 ; [.473A.0020.0002] # LINEAR A SIGN A340
10681 ; [.473B.0020.0002] # LINEAR A SIGN A341
10682 ; [.473C.0020.0002] # LINEAR A SIGN A342
10683 ; [.473D.0020.0002] # LINEAR A SIGN A343
10684 ; [.473E.0020.0002] # LINEAR A SIGN A344
10685 ; [.473F.0020.0002] # LINEAR A SIGN A345
10686 ; [.4740.0020.0002] # LINEAR A SIGN A346
10687 ; [.4741.0020.0002] # LINEAR A SIGN A347
10688 ; [.4742.0020.0002] # LINEAR A SIGN A348
10689 ; [.4743.0020.0002] # LINEAR A SIGN A349
1068A ; [.4744.0020.0002] # LINEAR A SIGN A350
1068B ; [.4745.0020.0002] # LINEAR A SIGN A351
1068C ; [.4746.0020.0002] # LINEAR A SIGN A352
1068D ; [.4747.0020.0002] # LINEAR A SIGN A353
1068E ; [.4748.0020.0002] # LINEAR A SIGN A354
1068F ; [.4749.0020.0002] # LINEAR A SIGN A355
10690 ; [.474A.0020.0002] # LINEAR A SIGN A356
10691 ; [.474B.0020.0002] # LINEAR A SIGN A357
10692 ; [.474C.0020.0002] # LINEAR A SIGN A358
10693 ; [.474D.0020.0002] # LINEAR A SIGN A359
10694 ; [.474E.0020.0002] # LINEAR A SIGN A360
10695 ; [.474F.0020.0002] # LINEAR A SIGN A361
10696 ; [.4750.0020.0002] # LINEAR A SIGN A362
10697 ; [.4751.0020.0002] # LINEAR A SIGN A363
10698 ; [.4752.0020.0002] # LINEAR A SIGN A364
10699 ; [.4753.0020.0002] # LINEAR A SIGN A365
1069A ; [.4754.0020.0002] # LINEAR A SIGN A366
1069B ; [.4755.0020.0002] # LINEAR A SIGN A367
1069C ; [.4756.0020.0002] # LINEAR A SIGN A368
1069D ; [.4757.0020.0002] # LINEAR A SIGN A369
1069E ; [.4758.0020.0002] # LINEAR A SIGN A370
1069F ; [.4759.0020.0002] # LINEAR A SIGN A371
106A0 ; [.475A.0020.0002] # LINEAR A SIGN A400-VAS
106A1 ; [.475B.0020.0002] # LINEAR A SIGN A401-VAS
106A2 ; [.475C.0020.0002] # LINEAR A SIGN A402-VAS
106A3 ; [.475D.0020.0002] # LINEAR A SIGN A403-VAS
106A4 ; [.475E.0020.0002] # LINEAR A SIGN A404-VAS
106A5 ; [.475F.0020.0002] # LINEAR A SIGN A405-VAS
106A6 ; [.4760.0020.0002] # LINEAR A SIGN A406-VAS
106A7 ; [.4761.0020.0002] # LINEAR A SIGN A407-VAS
106A8 ; [.4762.0020.0002] # LINEAR A SIGN A408-VAS
106A9 ; [.4763.0020.0002] # LINEAR A SIGN A409-VAS
106AA ; [.4764.0020.0002] # LINEAR A SIGN A410-VAS
106AB ; [.4765.0020.0002] # LINEAR A SIGN A411-VAS
106AC ; [.4766.0020.0002] # LINEAR A SIGN A412-VAS
106AD ; [.4767.0020.0002] # LINEAR A SIGN A413-VAS
106AE ; [.4768.0020.0002] # LINEAR A SIGN A414-VAS
106AF ; [.4769.0020.0002] # LINEAR A SIGN A415-VAS
106B0 ; [.476A.0020.0002] # LINEAR A SIGN A416-VAS
106B1 ; [.476B.0020.0002] # LINEAR A SIGN A417-VAS
106B2 ; [.476C.0020.0002] # LINEAR A SIGN A418-VAS
106B3 ; [.476D.0020.0002] # LINEAR A SIGN A501
106B4 ; [.476E.0020.0002] # LINEAR A SIGN A502
106B5 ; [.476F.0020.0002] # LINEAR A SIGN A503
106B6 ; [.4770.0020.0002] # LINEAR A SIGN A504
106B7 ; [.4771.0020.0002] # LINEAR A SIGN A505
106B8 ; [.4772.0020.0002] # LINEAR A SIGN A506
106B9 ; [.4773.0020.0002] # LINEAR A SIGN A508
106BA ; [.4774.0020.0002] # LINEAR A SIGN A509
106BB ; [.4775.0020.0002] # LINEAR A SIGN A510
106BC ; [.4776.0020.0002] # LINEAR A SIGN A511
106BD ; [.4777.0020.0002] # LINEAR A SIGN A512
106BE ; [.4778.0020.0002] # LINEAR A SIGN A513
106BF ; [.4779.0020.0002] # LINEAR A SIGN A515
106C0 ; [.477A.0020.0002] # LINEAR A SIGN A516
106C1 ; [.477B.0020.0002] # LINEAR A SIGN A520
106C2 ; [.477C.0020.0002] # LINEAR A SIGN A521
106C3 ; [.477D.0020.0002] # LINEAR A SIGN A523
106C4 ; [.477E.0020.0002] # LINEAR A SIGN A524
106C5 ; [.477F.0020.0002] # LINEAR A SIGN A525
106C6 ; [.4780.0020.0002] # LINEAR A SIGN A526
106C7 ; [.4781.0020.0002] # LINEAR A SIGN A527
106C8 ; [.4782.0020.0002] # LINEAR A SIGN A528
106C9 ; [.4783.0020.0002] # LINEAR A SIGN A529
106CA ; [.4784.0020.0002] # LINEAR A SIGN A530
106CB ; [.4785.0020.0002] # LINEAR A SIGN A531
106CC ; [.4786.0020.0002] # LINEAR A SIGN A532
106CD ; [.4787.0020.0002] # LINEAR A SIGN A534
106CE ; [.4788.0020.0002] # LINEAR A SIGN A535
106CF ; [.4789.0020.0002] # LINEAR A SIGN A536
106D0 ; [.478A.0020.0002] # LINEAR A SIGN A537
106D1 ; [.478B.0020.0002] # LINEAR A SIGN A538
106D2 ; [.478C.0020.0002] # LINEAR A SIGN A539
106D3 ; [.478D.0020.0002] # LINEAR A SIGN A540
106D4 ; [.478E.0020.0002] # LINEAR A SIGN A541
106D5 ; [.478F.0020.0002] # LINEAR A SIGN A542
106D6 ; [.4790.0020.0002] # LINEAR A SIGN A545
106D7 ; [.4791.0020.0002] # LINEAR A SIGN A547
106D8 ; [.4792.0020.0002] # LINEAR A SIGN A548
106D9 ; [.4793.0020.0002] # LINEAR A SIGN A549
106DA ; [.4794.0020.0002] # LINEAR A SIGN A550
106DB ; [.4795.0020.0002] # LINEAR A SIGN A551
106DC ; [.4796.0020.0002] # LINEAR A SIGN A552
106DD ; [.4797.0020.0002] # LINEAR A SIGN A553
106DE ; [.4798.0020.0002] # LINEAR A SIGN A554
106DF ; [.4799.0020.0002] # LINEAR A SIGN A555
106E0 ; [.479A.0020.0002] # LINEAR A SIGN A556
106E1 ; [.479B.0020.0002] # LINEAR A SIGN A557
106E2 ; [.479C.0020.0002] # LINEAR A SIGN A559
106E3 ; [.479D.0020.0002] # LINEAR A SIGN A563
106E4 ; [.479E.0020.0002] # LINEAR A SIGN A564
106E5 ; [.479F.0020.0002] # LINEAR A SIGN A565
106E6 ; [.47A0.0020.0002] # LINEAR A SIGN A566
106E7 ; [.47A1.0020.0002] # LINEAR A SIGN A568
106E8 ; [.47A2.0020.0002] # LINEAR A SIGN A569
106E9 ; [.47A3.0020.0002] # LINEAR A SIGN A570
106EA ; [.47A4.0020.0002] # LINEAR A SIGN A571
106EB ; [.47A5.0020.0002] # LINEAR A SIGN A572
106EC ; [.47A6.0020.0002] # LINEAR A SIGN A573
106ED ; [.47A7.0020.0002] # LINEAR A SIGN A574
106EE ; [.47A8.0020.0002] # LINEAR A SIGN A575
106EF ; [.47A9.0020.0002] # LINEAR A SIGN A576
106F0 ; [.47AA.0020.0002] # LINEAR A SIGN A577
106F1 ; [.47AB.0020.0002] # LINEAR A SIGN A578
106F2 ; [.47AC.0020.0002] # LINEAR A SIGN A579
106F3 ; [.47AD.0020.0002] # LINEAR A SIGN A580
106F4 ; [.47AE.0020.0002] # LINEAR A SIGN A581
106F5 ; [.47AF.0020.0002] # LINEAR A SIGN A582
106F6 ; [.47B0.0020.0002] # LINEAR A SIGN A583
106F7 ; [.47B1.0020.0002] # LINEAR A SIGN A584
106F8 ; [.47B2.0020.0002] # LINEAR A SIGN A585
106F9 ; [.47B3.0020.0002] # LINEAR A SIGN A586
106FA ; [.47B4.0020.0002] # LINEAR A SIGN A587
106FB ; [.47B5.0020.0002] # LINEAR A SIGN A588
106FC ; [.47B6.0020.0002] # LINEAR A SIGN A589
106FD ; [.47B7.0020.0002] # LINEAR A SIGN A591
106FE ; [.47B8.0020.0002] # LINEAR A SIGN A592
106FF ; [.47B9.0020.0002] # LINEAR A SIGN A594
10700 ; [.47BA.0020.0002] # LINEAR A SIGN A595
10701 ; [.47BB.0020.0002] # LINEAR A SIGN A596
10702 ; [.47BC.0020.0002] # LINEAR A SIGN A598
10703 ; [.47BD.0020.0002] # LINEAR A SIGN A600
10704 ; [.47BE.0020.0002] # LINEAR A SIGN A601
10705 ; [.47BF.0020.0002] # LINEAR A SIGN A602
10706 ; [.47C0.0020.0002] # LINEAR A SIGN A603
10707 ; [.47C1.0020.0002] # LINEAR A SIGN A604
10708 ; [.47C2.0020.0002] # LINEAR A SIGN A606
10709 ; [.47C3.0020.0002] # LINEAR A SIGN A608
1070A ; [.47C4.0020.0002] # LINEAR A SIGN A609
1070B ; [.47C5.0020.0002] # LINEAR A SIGN A610
1070C ; [.47C6.0020.0002] # LINEAR A SIGN A611
1070D ; [.47C7.0020.0002] # LINEAR A SIGN A612
1070E ; [.47C8.0020.0002] # LINEAR A SIGN A613
1070F ; [.47C9.0020.0002] # LINEAR A SIGN A614
10710 ; [.47CA.0020.0002] # LINEAR A SIGN A615
10711 ; [.47CB.0020.0002] # LINEAR A SIGN A616
10712 ; [.47CC.0020.0002] # LINEAR A SIGN A617
10713 ; [.47CD.0020.0002] # LINEAR A SIGN A618
10714 ; [.47CE.0020.0002] # LINEAR A SIGN A619
10715 ; [.47CF.0020.0002] # LINEAR A SIGN A620
10716 ; [.47D0.0020.0002] # LINEAR A SIGN A621
10717 ; [.47D1.0020.0002] # LINEAR A SIGN A622
10718 ; [.47D2.0020.0002] # LINEAR A SIGN A623
10719 ; [.47D3.0020.0002] # LINEAR A SIGN A624
1071A ; [.47D4.0020.0002] # LINEAR A SIGN A626
1071B ; [.47D5.0020.0002] # LINEAR A SIGN A627
1071C ; [.47D6.0020.0002] # LINEAR A SIGN A628
1071D ; [.47D7.0020.0002] # LINEAR A SIGN A629
1071E ; [.47D8.0020.0002] # LINEAR A SIGN A634
1071F ; [.47D9.0020.0002] # LINEAR A SIGN A637
10720 ; [.47DA.0020.0002] # LINEAR A SIGN A638
10721 ; [.47DB.0020.0002] # LINEAR A SIGN A640
10722 ; [.47DC.0020.0002] # LINEAR A SIGN A642
10723 ; [.47DD.0020.0002] # LINEAR A SIGN A643
10724 ; [.47DE.0020.0002] # LINEAR A SIGN A644
10725 ; [.47DF.0020.0002] # LINEAR A SIGN A645
10726 ; [.47E0.0020.0002] # LINEAR A SIGN A646
10727 ; [.47E1.0020.0002] # LINEAR A SIGN A648
10728 ; [.47E2.0020.0002] # LINEAR A SIGN A649
10729 ; [.47E3.0020.0002] # LINEAR A SIGN A651
1072A ; [.47E4.0020.0002] # LINEAR A SIGN A652
1072B ; [.47E5.0020.0002] # LINEAR A SIGN A653
1072C ; [.47E6.0020.0002] # LINEAR A SIGN A654
1072D ; [.47E7.0020.0002] # LINEAR A SIGN A655
1072E ; [.47E8.0020.0002] # LINEAR A SIGN A656
1072F ; [.47E9.0020.0002] # LINEAR A SIGN A657
10730 ; [.47EA.0020.0002] # LINEAR A SIGN A658
10731 ; [.47EB.0020.0002] # LINEAR A SIGN A659
10732 ; [.47EC.0020.0002] # LINEAR A SIGN A660
10733 ; [.47ED.0020.0002] # LINEAR A SIGN A661
10734 ; [.47EE.0020.0002] # LINEAR A SIGN A662
10735 ; [.47EF.0020.0002] # LINEAR A SIGN A663
10736 ; [.47F0.0020.0002] # LINEAR A SIGN A664
10740 ; [.47F1.0020.0002] # LINEAR A SIGN A701 A
10741 ; [.47F2.0020.0002] # LINEAR A SIGN A702 B
10742 ; [.47F3.0020.0002] # LINEAR A SIGN A703 D
10743 ; [.47F4.0020.0002] # LINEAR A SIGN A704 E
10744 ; [.47F5.0020.0002] # LINEAR A SIGN A705 F
10745 ; [.47F6.0020.0002] # LINEAR A SIGN A706 H
10746 ; [.47F7.0020.0002] # LINEAR A SIGN A707 J
10747 ; [.47F8.0020.0002] # LINEAR A SIGN A708 K
10748 ; [.47F9.0020.0002] # LINEAR A SIGN A709 L
10749 ; [.47FA.0020.0002] # LINEAR A SIGN A709-2 L2
1074A ; [.47FB.0020.0002] # LINEAR A SIGN A709-3 L3
1074B ; [.47FC.0020.0002] # LINEAR A SIGN A709-4 L4
1074C ; [.47FD.0020.0002] # LINEAR A SIGN A709-6 L6
1074D ; [.47FE.0020.0002] # LINEAR A SIGN A710 W
1074E ; [.47FF.0020.0002] # LINEAR A SIGN A711 X
1074F ; [.4800.0020.0002] # LINEAR A SIGN A712 Y
10750 ; [.4801.0020.0002] # LINEAR A SIGN A713 OMEGA
10751 ; [.4802.0020.0002] # LINEAR A SIGN A714 ABB
10752 ; [.4803.0020.0002] # LINEAR A SIGN A715 BB
10753 ; [.4804.0020.0002] # LINEAR A SIGN A717 DD
10754 ; [.4805.0020.0002] # LINEAR A SIGN A726 EYYY
10755 ; [.4806.0020.0002] # LINEAR A SIGN A732 JE
10760 ; [.4807.0020.0002] # LINEAR A SIGN A800
10761 ; [.4808.0020.0002] # LINEAR A SIGN A801
10762 ; [.4809.0020.0002] # LINEAR A SIGN A802
10763 ; [.480A.0020.0002] # LINEAR A SIGN A803
10764 ; [.480B.0020.0002] # LINEAR A SIGN A804
10765 ; [.480C.0020.0002] # LINEAR A SIGN A805
10766 ; [.480D.0020.0002] # LINEAR A SIGN A806
10767 ; [.480E.0020.0002] # LINEAR A SIGN A807
10800 ; [.480F.0020.0002] # CYPRIOT SYLLABLE A
10801 ; [.4810.0020.0002] # CYPRIOT SYLLABLE E
10802 ; [.4811.0020.0002] # CYPRIOT SYLLABLE I
10803 ; [.4812.0020.0002] # CYPRIOT SYLLABLE O
10804 ; [.4813.0020.0002] # CYPRIOT SYLLABLE U
10805 ; [.4814.0020.0002] # CYPRIOT SYLLABLE JA
10808 ; [.4815.0020.0002] # CYPRIOT SYLLABLE JO
1080A ; [.4816.0020.0002] # CYPRIOT SYLLABLE KA
1080B ; [.4817.0020.0002] # CYPRIOT SYLLABLE KE
1080C ; [.4818.0020.0002] # CYPRIOT SYLLABLE KI
1080D ; [.4819.0020.0002] # CYPRIOT SYLLABLE KO
1080E ; [.481A.0020.0002] # CYPRIOT SYLLABLE KU
1080F ; [.481B.0020.0002] # CYPRIOT SYLLABLE LA
10810 ; [.481C.0020.0002] # CYPRIOT SYLLABLE LE
10811 ; [.481D.0020.0002] # CYPRIOT SYLLABLE LI
10812 ; [.481E.0020.0002] # CYPRIOT SYLLABLE LO
10813 ; [.481F.0020.0002] # CYPRIOT SYLLABLE LU
10814 ; [.4820.0020.0002] # CYPRIOT SYLLABLE MA
10815 ; [.4821.0020.0002] # CYPRIOT SYLLABLE ME
10816 ; [.4822.0020.0002] # CYPRIOT SYLLABLE MI
10817 ; [.4823.0020.0002] # CYPRIOT SYLLABLE MO
10818 ; [.4824.0020.0002] # CYPRIOT SYLLABLE MU
10819 ; [.4825.0020.0002] # CYPRIOT SYLLABLE NA
1081A ; [.4826.0020.0002] # CYPRIOT SYLLABLE NE
1081B ; [.4827.0020.0002] # CYPRIOT SYLLABLE NI
1081C ; [.4828.0020.0002] # CYPRIOT SYLLABLE NO
1081D ; [.4829.0020.0002] # CYPRIOT SYLLABLE NU
1081E ; [.482A.0020.0002] # CYPRIOT SYLLABLE PA
1081F ; [.482B.0020.0002] # CYPRIOT SYLLABLE PE
10820 ; [.482C.0020.0002] # CYPRIOT SYLLABLE PI
10821 ; [.482D.0020.0002] # CYPRIOT SYLLABLE PO
10822 ; [.482E.0020.0002] # CYPRIOT SYLLABLE PU
10823 ; [.482F.0020.0002] # CYPRIOT SYLLABLE RA
10824 ; [.4830.0020.0002] # CYPRIOT SYLLABLE RE
10825 ; [.4831.0020.0002] # CYPRIOT SYLLABLE RI
10826 ; [.4832.0020.0002] # CYPRIOT SYLLABLE RO
10827 ; [.4833.0020.0002] # CYPRIOT SYLLABLE RU
10828 ; [.4834.0020.0002] # CYPRIOT SYLLABLE SA
10829 ; [.4835.0020.0002] # CYPRIOT SYLLABLE SE
1082A ; [.4836.0020.0002] # CYPRIOT SYLLABLE SI
1082B ; [.4837.0020.0002] # CYPRIOT SYLLABLE SO
1082C ; [.4838.0020.0002] # CYPRIOT SYLLABLE SU
1082D ; [.4839.0020.0002] # CYPRIOT SYLLABLE TA
1082E ; [.483A.0020.0002] # CYPRIOT SYLLABLE TE
1082F ; [.483B.0020.0002] # CYPRIOT SYLLABLE TI
10830 ; [.483C.0020.0002] # CYPRIOT SYLLABLE TO
10831 ; [.483D.0020.0002] # CYPRIOT SYLLABLE TU
10832 ; [.483E.0020.0002] # CYPRIOT SYLLABLE WA
10833 ; [.483F.0020.0002] # CYPRIOT SYLLABLE WE
10834 ; [.4840.0020.0002] # CYPRIOT SYLLABLE WI
10835 ; [.4841.0020.0002] # CYPRIOT SYLLABLE WO
10837 ; [.4842.0020.0002] # CYPRIOT SYLLABLE XA
10838 ; [.4843.0020.0002] # CYPRIOT SYLLABLE XE
1083C ; [.4844.0020.0002] # CYPRIOT SYLLABLE ZA
1083F ; [.4845.0020.0002] # CYPRIOT SYLLABLE ZO
10A60 ; [.4846.0020.0002] # OLD SOUTH ARABIAN LETTER HE
10A61 ; [.4847.0020.0002] # OLD SOUTH ARABIAN LETTER LAMEDH
10A62 ; [.4848.0020.0002] # OLD SOUTH ARABIAN LETTER HETH
10A63 ; [.4849.0020.0002] # OLD SOUTH ARABIAN LETTER MEM
10A64 ; [.484A.0020.0002] # OLD SOUTH ARABIAN LETTER QOPH
10A65 ; [.484B.0020.0002] # OLD SOUTH ARABIAN LETTER WAW
10A66 ; [.484C.0020.0002] # OLD SOUTH ARABIAN LETTER SHIN
10A67 ; [.484D.0020.0002] # OLD SOUTH ARABIAN LETTER RESH
10A68 ; [.484E.0020.0002] # OLD SOUTH ARABIAN LETTER BETH
10A69 ; [.484F.0020.0002] # OLD SOUTH ARABIAN LETTER TAW
10A6A ; [.4850.0020.0002] # OLD SOUTH ARABIAN LETTER SAT
10A6B ; [.4851.0020.0002] # OLD SOUTH ARABIAN LETTER KAPH
10A6C ; [.4852.0020.0002] # OLD SOUTH ARABIAN LETTER NUN
10A6D ; [.4853.0020.0002] # OLD SOUTH ARABIAN LETTER KHETH
10A6E ; [.4854.0020.0002] # OLD SOUTH ARABIAN LETTER SADHE
10A6F ; [.4855.0020.0002] # OLD SOUTH ARABIAN LETTER SAMEKH
10A70 ; [.4856.0020.0002] # OLD SOUTH ARABIAN LETTER FE
10A71 ; [.4857.0020.0002] # OLD SOUTH ARABIAN LETTER ALEF
10A72 ; [.4858.0020.0002] # OLD SOUTH ARABIAN LETTER AYN
10A73 ; [.4859.0020.0002] # OLD SOUTH ARABIAN LETTER DHADHE
10A74 ; [.485A.0020.0002] # OLD SOUTH ARABIAN LETTER GIMEL
10A75 ; [.485B.0020.0002] # OLD SOUTH ARABIAN LETTER DALETH
10A76 ; [.485C.0020.0002] # OLD SOUTH ARABIAN LETTER GHAYN
10A77 ; [.485D.0020.0002] # OLD SOUTH ARABIAN LETTER TETH
10A78 ; [.485E.0020.0002] # OLD SOUTH ARABIAN LETTER ZAYN
10A79 ; [.485F.0020.0002] # OLD SOUTH ARABIAN LETTER DHALETH
10A7A ; [.4860.0020.0002] # OLD SOUTH ARABIAN LETTER YODH
10A7B ; [.4861.0020.0002] # OLD SOUTH ARABIAN LETTER THAW
10A7C ; [.4862.0020.0002] # OLD SOUTH ARABIAN LETTER THETH
10A80 ; [.4863.0020.0002] # OLD NORTH ARABIAN LETTER HEH
10A81 ; [.4864.0020.0002] # OLD NORTH ARABIAN LETTER LAM
10A82 ; [.4865.0020.0002] # OLD NORTH ARABIAN LETTER HAH
10A83 ; [.4866.0020.0002] # OLD NORTH ARABIAN LETTER MEEM
10A84 ; [.4867.0020.0002] # OLD NORTH ARABIAN LETTER QAF
10A85 ; [.4868.0020.0002] # OLD NORTH ARABIAN LETTER WAW
10A86 ; [.4869.0020.0002] # OLD NORTH ARABIAN LETTER ES-2
10A87 ; [.486A.0020.0002] # OLD NORTH ARABIAN LETTER REH
10A88 ; [.486B.0020.0002] # OLD NORTH ARABIAN LETTER BEH
10A89 ; [.486C.0020.0002] # OLD NORTH ARABIAN LETTER TEH
10A8A ; [.486D.0020.0002] # OLD NORTH ARABIAN LETTER ES-1
10A8B ; [.486E.0020.0002] # OLD NORTH ARABIAN LETTER KAF
10A8C ; [.486F.0020.0002] # OLD NORTH ARABIAN LETTER NOON
10A8D ; [.4870.0020.0002] # OLD NORTH ARABIAN LETTER KHAH
10A8E ; [.4871.0020.0002] # OLD NORTH ARABIAN LETTER SAD
10A8F ; [.4872.0020.0002] # OLD NORTH ARABIAN LETTER ES-3
10A90 ; [.4873.0020.0002] # OLD NORTH ARABIAN LETTER FEH
10A91 ; [.4874.0020.0002] # OLD NORTH ARABIAN LETTER ALEF
10A92 ; [.4875.0020.0002] # OLD NORTH ARABIAN LETTER AIN
10A93 ; [.4876.0020.0002] # OLD NORTH ARABIAN LETTER DAD
10A94 ; [.4877.0020.0002] # OLD NORTH ARABIAN LETTER GEEM
10A95 ; [.4878.0020.0002] # OLD NORTH ARABIAN LETTER DAL
10A96 ; [.4879.0020.0002] # OLD NORTH ARABIAN LETTER GHAIN
10A97 ; [.487A.0020.0002] # OLD NORTH ARABIAN LETTER TAH
10A98 ; [.487B.0020.0002] # OLD NORTH ARABIAN LETTER ZAIN
10A99 ; [.487C.0020.0002] # OLD NORTH ARABIAN LETTER THAL
10A9A ; [.487D.0020.0002] # OLD NORTH ARABIAN LETTER YEH
10A9B ; [.487E.0020.0002] # OLD NORTH ARABIAN LETTER THEH
10A9C ; [.487F.0020.0002] # OLD NORTH ARABIAN LETTER ZAH
10B00 ; [.4880.0020.0002] # AVESTAN LETTER A
10B01 ; [.4881.0020.0002] # AVESTAN LETTER AA
10B02 ; [.4882.0020.0002] # AVESTAN LETTER AO
10B03 ; [.4883.0020.0002] # AVESTAN LETTER AAO
10B04 ; [.4884.0020.0002] # AVESTAN LETTER AN
10B05 ; [.4885.0020.0002] # AVESTAN LETTER AAN
10B06 ; [.4886.0020.0002] # AVESTAN LETTER AE
10B07 ; [.4887.0020.0002] # AVESTAN LETTER AEE
10B08 ; [.4888.0020.0002] # AVESTAN LETTER E
10B09 ; [.4889.0020.0002] # AVESTAN LETTER EE
10B0A ; [.488A.0020.0002] # AVESTAN LETTER O
10B0B ; [.488B.0020.0002] # AVESTAN LETTER OO
10B0C ; [.488C.0020.0002] # AVESTAN LETTER I
10B0D ; [.488D.0020.0002] # AVESTAN LETTER II
10B0E ; [.488E.0020.0002] # AVESTAN LETTER U
10B0F ; [.488F.0020.0002] # AVESTAN LETTER UU
10B10 ; [.4890.0020.0002] # AVESTAN LETTER KE
10B11 ; [.4891.0020.0002] # AVESTAN LETTER XE
10B12 ; [.4892.0020.0002] # AVESTAN LETTER XYE
10B13 ; [.4893.0020.0002] # AVESTAN LETTER XVE
10B14 ; [.4894.0020.0002] # AVESTAN LETTER GE
10B15 ; [.4895.0020.0002] # AVESTAN LETTER GGE
10B16 ; [.4896.0020.0002] # AVESTAN LETTER GHE
10B17 ; [.4897.0020.0002] # AVESTAN LETTER CE
10B18 ; [.4898.0020.0002] # AVESTAN LETTER JE
10B19 ; [.4899.0020.0002] # AVESTAN LETTER TE
10B1A ; [.489A.0020.0002] # AVESTAN LETTER THE
10B1B ; [.489B.0020.0002] # AVESTAN LETTER DE
10B1C ; [.489C.0020.0002] # AVESTAN LETTER DHE
10B1D ; [.489D.0020.0002] # AVESTAN LETTER TTE
10B1E ; [.489E.0020.0002] # AVESTAN LETTER PE
10B1F ; [.489F.0020.0002] # AVESTAN LETTER FE
10B20 ; [.48A0.0020.0002] # AVESTAN LETTER BE
10B21 ; [.48A1.0020.0002] # AVESTAN LETTER BHE
10B22 ; [.48A2.0020.0002] # AVESTAN LETTER NGE
10B23 ; [.48A3.0020.0002] # AVESTAN LETTER NGYE
10B24 ; [.48A4.0020.0002] # AVESTAN LETTER NGVE
10B25 ; [.48A5.0020.0002] # AVESTAN LETTER NE
10B26 ; [.48A6.0020.0002] # AVESTAN LETTER NYE
10B27 ; [.48A7.0020.0002] # AVESTAN LETTER NNE
10B28 ; [.48A8.0020.0002] # AVESTAN LETTER ME
10B29 ; [.48A9.0020.0002] # AVESTAN LETTER HME
10B2A ; [.48AA.0020.0002] # AVESTAN LETTER YYE
10B2B ; [.48AB.0020.0002] # AVESTAN LETTER YE
10B2C ; [.48AC.0020.0002] # AVESTAN LETTER VE
10B2D ; [.48AD.0020.0002] # AVESTAN LETTER RE
10B2E ; [.48AD.0020.0004][.0000.0110.0004] # AVESTAN LETTER LE
10B2F ; [.48AE.0020.0002] # AVESTAN LETTER SE
10B30 ; [.48AF.0020.0002] # AVESTAN LETTER ZE
10B31 ; [.48B0.0020.0002] # AVESTAN LETTER SHE
10B32 ; [.48B1.0020.0002] # AVESTAN LETTER ZHE
10B33 ; [.48B2.0020.0002] # AVESTAN LETTER SHYE
10B34 ; [.48B3.0020.0002] # AVESTAN LETTER SSHE
10B35 ; [.48B4.0020.0002] # AVESTAN LETTER HE
10860 ; [.48B5.0020.0002] # PALMYRENE LETTER ALEPH
10861 ; [.48B6.0020.0002] # PALMYRENE LETTER BETH
10862 ; [.48B7.0020.0002] # PALMYRENE LETTER GIMEL
10863 ; [.48B8.0020.0002] # PALMYRENE LETTER DALETH
10864 ; [.48B9.0020.0002] # PALMYRENE LETTER HE
10865 ; [.48BA.0020.0002] # PALMYRENE LETTER WAW
10866 ; [.48BB.0020.0002] # PALMYRENE LETTER ZAYIN
10867 ; [.48BC.0020.0002] # PALMYRENE LETTER HETH
10868 ; [.48BD.0020.0002] # PALMYRENE LETTER TETH
10869 ; [.48BE.0020.0002] # PALMYRENE LETTER YODH
1086A ; [.48BF.0020.0002] # PALMYRENE LETTER KAPH
1086B ; [.48C0.0020.0002] # PALMYRENE LETTER LAMEDH
1086C ; [.48C1.0020.0002] # PALMYRENE LETTER MEM
1086E ; [.48C2.0020.0002] # PALMYRENE LETTER NUN
1086D ; [.48C2.0020.0019] # PALMYRENE LETTER FINAL NUN
1086F ; [.48C3.0020.0002] # PALMYRENE LETTER SAMEKH
10870 ; [.48C4.0020.0002] # PALMYRENE LETTER AYIN
10871 ; [.48C5.0020.0002] # PALMYRENE LETTER PE
10872 ; [.48C6.0020.0002] # PALMYRENE LETTER SADHE
10873 ; [.48C7.0020.0002] # PALMYRENE LETTER QOPH
10874 ; [.48C8.0020.0002] # PALMYRENE LETTER RESH
10875 ; [.48C9.0020.0002] # PALMYRENE LETTER SHIN
10876 ; [.48CA.0020.0002] # PALMYRENE LETTER TAW
10881 ; [.48CB.0020.0002] # NABATAEAN LETTER ALEPH
10880 ; [.48CB.0020.0019] # NABATAEAN LETTER FINAL ALEPH
10883 ; [.48CC.0020.0002] # NABATAEAN LETTER BETH
10882 ; [.48CC.0020.0019] # NABATAEAN LETTER FINAL BETH
10884 ; [.48CD.0020.0002] # NABATAEAN LETTER GIMEL
10885 ; [.48CE.0020.0002] # NABATAEAN LETTER DALETH
10887 ; [.48CF.0020.0002] # NABATAEAN LETTER HE
10886 ; [.48CF.0020.0019] # NABATAEAN LETTER FINAL HE
10888 ; [.48D0.0020.0002] # NABATAEAN LETTER WAW
10889 ; [.48D1.0020.0002] # NABATAEAN LETTER ZAYIN
1088A ; [.48D2.0020.0002] # NABATAEAN LETTER HETH
1088B ; [.48D3.0020.0002] # NABATAEAN LETTER TETH
1088D ; [.48D4.0020.0002] # NABATAEAN LETTER YODH
1088C ; [.48D4.0020.0019] # NABATAEAN LETTER FINAL YODH
1088F ; [.48D5.0020.0002] # NABATAEAN LETTER KAPH
1088E ; [.48D5.0020.0019] # NABATAEAN LETTER FINAL KAPH
10891 ; [.48D6.0020.0002] # NABATAEAN LETTER LAMEDH
10890 ; [.48D6.0020.0019] # NABATAEAN LETTER FINAL LAMEDH
10893 ; [.48D7.0020.0002] # NABATAEAN LETTER MEM
10892 ; [.48D7.0020.0019] # NABATAEAN LETTER FINAL MEM
10895 ; [.48D8.0020.0002] # NABATAEAN LETTER NUN
10894 ; [.48D8.0020.0019] # NABATAEAN LETTER FINAL NUN
10896 ; [.48D9.0020.0002] # NABATAEAN LETTER SAMEKH
10897 ; [.48DA.0020.0002] # NABATAEAN LETTER AYIN
10898 ; [.48DB.0020.0002] # NABATAEAN LETTER PE
10899 ; [.48DC.0020.0002] # NABATAEAN LETTER SADHE
1089A ; [.48DD.0020.0002] # NABATAEAN LETTER QOPH
1089B ; [.48DE.0020.0002] # NABATAEAN LETTER RESH
1089D ; [.48DF.0020.0002] # NABATAEAN LETTER SHIN
1089C ; [.48DF.0020.0019] # NABATAEAN LETTER FINAL SHIN
1089E ; [.48E0.0020.0002] # NABATAEAN LETTER TAW
108E0 ; [.48E1.0020.0002] # HATRAN LETTER ALEPH
108E1 ; [.48E2.0020.0002] # HATRAN LETTER BETH
108E2 ; [.48E3.0020.0002] # HATRAN LETTER GIMEL
108E3 ; [.48E4.0020.0002] # HATRAN LETTER DALETH-RESH
108E4 ; [.48E5.0020.0002] # HATRAN LETTER HE
108E5 ; [.48E6.0020.0002] # HATRAN LETTER WAW
108E6 ; [.48E7.0020.0002] # HATRAN LETTER ZAYN
108E7 ; [.48E8.0020.0002] # HATRAN LETTER HETH
108E8 ; [.48E9.0020.0002] # HATRAN LETTER TETH
108E9 ; [.48EA.0020.0002] # HATRAN LETTER YODH
108EA ; [.48EB.0020.0002] # HATRAN LETTER KAPH
108EB ; [.48EC.0020.0002] # HATRAN LETTER LAMEDH
108EC ; [.48ED.0020.0002] # HATRAN LETTER MEM
108ED ; [.48EE.0020.0002] # HATRAN LETTER NUN
108EE ; [.48EF.0020.0002] # HATRAN LETTER SAMEKH
108EF ; [.48F0.0020.0002] # HATRAN LETTER AYN
108F0 ; [.48F1.0020.0002] # HATRAN LETTER PE
108F1 ; [.48F2.0020.0002] # HATRAN LETTER SADHE
108F2 ; [.48F3.0020.0002] # HATRAN LETTER QOPH
108F4 ; [.48F4.0020.0002] # HATRAN LETTER SHIN
108F5 ; [.48F5.0020.0002] # HATRAN LETTER TAW
10840 ; [.48F6.0020.0002] # IMPERIAL ARAMAIC LETTER ALEPH
10841 ; [.48F7.0020.0002] # IMPERIAL ARAMAIC LETTER BETH
10842 ; [.48F8.0020.0002] # IMPERIAL ARAMAIC LETTER GIMEL
10843 ; [.48F9.0020.0002] # IMPERIAL ARAMAIC LETTER DALETH
10844 ; [.48FA.0020.0002] # IMPERIAL ARAMAIC LETTER HE
10845 ; [.48FB.0020.0002] # IMPERIAL ARAMAIC LETTER WAW
10846 ; [.48FC.0020.0002] # IMPERIAL ARAMAIC LETTER ZAYIN
10847 ; [.48FD.0020.0002] # IMPERIAL ARAMAIC LETTER HETH
10848 ; [.48FE.0020.0002] # IMPERIAL ARAMAIC LETTER TETH
10849 ; [.48FF.0020.0002] # IMPERIAL ARAMAIC LETTER YODH
1084A ; [.4900.0020.0002] # IMPERIAL ARAMAIC LETTER KAPH
1084B ; [.4901.0020.0002] # IMPERIAL ARAMAIC LETTER LAMEDH
1084C ; [.4902.0020.0002] # IMPERIAL ARAMAIC LETTER MEM
1084D ; [.4903.0020.0002] # IMPERIAL ARAMAIC LETTER NUN
1084E ; [.4904.0020.0002] # IMPERIAL ARAMAIC LETTER SAMEKH
1084F ; [.4905.0020.0002] # IMPERIAL ARAMAIC LETTER AYIN
10850 ; [.4906.0020.0002] # IMPERIAL ARAMAIC LETTER PE
10851 ; [.4907.0020.0002] # IMPERIAL ARAMAIC LETTER SADHE
10852 ; [.4908.0020.0002] # IMPERIAL ARAMAIC LETTER QOPH
10853 ; [.4909.0020.0002] # IMPERIAL ARAMAIC LETTER RESH
10854 ; [.490A.0020.0002] # IMPERIAL ARAMAIC LETTER SHIN
10855 ; [.490B.0020.0002] # IMPERIAL ARAMAIC LETTER TAW
10B40 ; [.490C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ALEPH
10B41 ; [.490D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER BETH
10B42 ; [.490E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER GIMEL
10B43 ; [.490F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER DALETH
10B44 ; [.4910.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HE
10B45 ; [.4911.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER WAW
10B46 ; [.4912.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ZAYIN
10B47 ; [.4913.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HETH
10B48 ; [.4914.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TETH
10B49 ; [.4915.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER YODH
10B4A ; [.4916.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER KAPH
10B4B ; [.4917.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER LAMEDH
10B4C ; [.4918.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER MEM
10B4D ; [.4919.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER NUN
10B4E ; [.491A.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SAMEKH
10B4F ; [.491B.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER AYIN
10B50 ; [.491C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER PE
10B51 ; [.491D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SADHE
10B52 ; [.491E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER QOPH
10B53 ; [.491F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER RESH
10B54 ; [.4920.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SHIN
10B55 ; [.4921.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TAW
10B60 ; [.4922.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ALEPH
10B61 ; [.4923.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER BETH
10B62 ; [.4924.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER GIMEL
10B63 ; [.4925.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER DALETH
10B64 ; [.4926.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HE
10B65 ; [.4927.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH
10B66 ; [.4928.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ZAYIN
10B67 ; [.4929.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HETH
10B68 ; [.492A.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TETH
10B69 ; [.492B.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER YODH
10B6A ; [.492C.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER KAPH
10B6B ; [.492D.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER LAMEDH
10B6C ; [.492E.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH
10B6D ; [.492F.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER NUN
10B6E ; [.4930.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SAMEKH
10B6F ; [.4931.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER PE
10B70 ; [.4932.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SADHE
10B71 ; [.4933.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SHIN
10B72 ; [.4934.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TAW
10B80 ; [.4935.0020.0002] # PSALTER PAHLAVI LETTER ALEPH
10B81 ; [.4936.0020.0002] # PSALTER PAHLAVI LETTER BETH
10B82 ; [.4937.0020.0002] # PSALTER PAHLAVI LETTER GIMEL
10B83 ; [.4938.0020.0002] # PSALTER PAHLAVI LETTER DALETH
10B84 ; [.4939.0020.0002] # PSALTER PAHLAVI LETTER HE
10B85 ; [.493A.0020.0002] # PSALTER PAHLAVI LETTER WAW-AYIN-RESH
10B86 ; [.493B.0020.0002] # PSALTER PAHLAVI LETTER ZAYIN
10B87 ; [.493C.0020.0002] # PSALTER PAHLAVI LETTER HETH
10B88 ; [.493D.0020.0002] # PSALTER PAHLAVI LETTER YODH
10B89 ; [.493E.0020.0002] # PSALTER PAHLAVI LETTER KAPH
10B8A ; [.493F.0020.0002] # PSALTER PAHLAVI LETTER LAMEDH
10B8B ; [.4940.0020.0002] # PSALTER PAHLAVI LETTER MEM-QOPH
10B8C ; [.4941.0020.0002] # PSALTER PAHLAVI LETTER NUN
10B8D ; [.4942.0020.0002] # PSALTER PAHLAVI LETTER SAMEKH
10B8E ; [.4943.0020.0002] # PSALTER PAHLAVI LETTER PE
10B8F ; [.4944.0020.0002] # PSALTER PAHLAVI LETTER SADHE
10B90 ; [.4945.0020.0002] # PSALTER PAHLAVI LETTER SHIN
10B91 ; [.4946.0020.0002] # PSALTER PAHLAVI LETTER TAW
10AC0 ; [.4947.0020.0002] # MANICHAEAN LETTER ALEPH
10AC1 ; [.4948.0020.0002] # MANICHAEAN LETTER BETH
10AC2 ; [.4949.0020.0002] # MANICHAEAN LETTER BHETH
10AC3 ; [.494A.0020.0002] # MANICHAEAN LETTER GIMEL
10AC4 ; [.494B.0020.0002] # MANICHAEAN LETTER GHIMEL
10AC5 ; [.494C.0020.0002] # MANICHAEAN LETTER DALETH
10AC6 ; [.494D.0020.0002] # MANICHAEAN LETTER HE
10AC7 ; [.494E.0020.0002] # MANICHAEAN LETTER WAW
10AC8 ; [.494E.0020.0004][.0000.0111.0004] # MANICHAEAN SIGN UD
10AC9 ; [.494F.0020.0002] # MANICHAEAN LETTER ZAYIN
10ACA ; [.4950.0020.0002] # MANICHAEAN LETTER ZHAYIN
10ACB ; [.4951.0020.0002] # MANICHAEAN LETTER JAYIN
10ACC ; [.4952.0020.0002] # MANICHAEAN LETTER JHAYIN
10ACD ; [.4953.0020.0002] # MANICHAEAN LETTER HETH
10ACE ; [.4954.0020.0002] # MANICHAEAN LETTER TETH
10ACF ; [.4955.0020.0002] # MANICHAEAN LETTER YODH
10AD0 ; [.4956.0020.0002] # MANICHAEAN LETTER KAPH
10AD1 ; [.4957.0020.0002] # MANICHAEAN LETTER XAPH
10AD2 ; [.4958.0020.0002] # MANICHAEAN LETTER KHAPH
10AD3 ; [.4959.0020.0002] # MANICHAEAN LETTER LAMEDH
10AD4 ; [.495A.0020.0002] # MANICHAEAN LETTER DHAMEDH
10AD5 ; [.495B.0020.0002] # MANICHAEAN LETTER THAMEDH
10AD6 ; [.495C.0020.0002] # MANICHAEAN LETTER MEM
10AD7 ; [.495D.0020.0002] # MANICHAEAN LETTER NUN
10AD8 ; [.495E.0020.0002] # MANICHAEAN LETTER SAMEKH
10AD9 ; [.495F.0020.0002] # MANICHAEAN LETTER AYIN
10ADA ; [.4960.0020.0002] # MANICHAEAN LETTER AAYIN
10ADB ; [.4961.0020.0002] # MANICHAEAN LETTER PE
10ADC ; [.4962.0020.0002] # MANICHAEAN LETTER FE
10ADD ; [.4963.0020.0002] # MANICHAEAN LETTER SADHE
10ADE ; [.4964.0020.0002] # MANICHAEAN LETTER QOPH
10ADF ; [.4965.0020.0002] # MANICHAEAN LETTER XOPH
10AE0 ; [.4966.0020.0002] # MANICHAEAN LETTER QHOPH
10AE1 ; [.4967.0020.0002] # MANICHAEAN LETTER RESH
10AE2 ; [.4968.0020.0002] # MANICHAEAN LETTER SHIN
10AE3 ; [.4969.0020.0002] # MANICHAEAN LETTER SSHIN
10AE4 ; [.496A.0020.0002] # MANICHAEAN LETTER TAW
10380 ; [.496B.0020.0002] # UGARITIC LETTER ALPA
10381 ; [.496C.0020.0002] # UGARITIC LETTER BETA
10382 ; [.496D.0020.0002] # UGARITIC LETTER GAMLA
10383 ; [.496E.0020.0002] # UGARITIC LETTER KHA
10384 ; [.496F.0020.0002] # UGARITIC LETTER DELTA
10385 ; [.4970.0020.0002] # UGARITIC LETTER HO
10386 ; [.4971.0020.0002] # UGARITIC LETTER WO
10387 ; [.4972.0020.0002] # UGARITIC LETTER ZETA
10388 ; [.4973.0020.0002] # UGARITIC LETTER HOTA
10389 ; [.4974.0020.0002] # UGARITIC LETTER TET
1038A ; [.4975.0020.0002] # UGARITIC LETTER YOD
1038B ; [.4976.0020.0002] # UGARITIC LETTER KAF
1038C ; [.4977.0020.0002] # UGARITIC LETTER SHIN
1038D ; [.4978.0020.0002] # UGARITIC LETTER LAMDA
1038E ; [.4979.0020.0002] # UGARITIC LETTER MEM
1038F ; [.497A.0020.0002] # UGARITIC LETTER DHAL
10390 ; [.497B.0020.0002] # UGARITIC LETTER NUN
10391 ; [.497C.0020.0002] # UGARITIC LETTER ZU
10392 ; [.497D.0020.0002] # UGARITIC LETTER SAMKA
10393 ; [.497E.0020.0002] # UGARITIC LETTER AIN
10394 ; [.497F.0020.0002] # UGARITIC LETTER PU
10395 ; [.4980.0020.0002] # UGARITIC LETTER SADE
10396 ; [.4981.0020.0002] # UGARITIC LETTER QOPA
10397 ; [.4982.0020.0002] # UGARITIC LETTER RASHA
10398 ; [.4983.0020.0002] # UGARITIC LETTER THANNA
10399 ; [.4984.0020.0002] # UGARITIC LETTER GHAIN
1039A ; [.4985.0020.0002] # UGARITIC LETTER TO
1039B ; [.4986.0020.0002] # UGARITIC LETTER I
1039C ; [.4987.0020.0002] # UGARITIC LETTER U
1039D ; [.4988.0020.0002] # UGARITIC LETTER SSU
103A0 ; [.4989.0020.0002] # OLD PERSIAN SIGN A
103A1 ; [.498A.0020.0002] # OLD PERSIAN SIGN I
103A2 ; [.498B.0020.0002] # OLD PERSIAN SIGN U
103A3 ; [.498C.0020.0002] # OLD PERSIAN SIGN KA
103A4 ; [.498D.0020.0002] # OLD PERSIAN SIGN KU
103A5 ; [.498E.0020.0002] # OLD PERSIAN SIGN GA
103A6 ; [.498F.0020.0002] # OLD PERSIAN SIGN GU
103A7 ; [.4990.0020.0002] # OLD PERSIAN SIGN XA
103A8 ; [.4991.0020.0002] # OLD PERSIAN SIGN CA
103A9 ; [.4992.0020.0002] # OLD PERSIAN SIGN JA
103AA ; [.4993.0020.0002] # OLD PERSIAN SIGN JI
103AB ; [.4994.0020.0002] # OLD PERSIAN SIGN TA
103AC ; [.4995.0020.0002] # OLD PERSIAN SIGN TU
103AD ; [.4996.0020.0002] # OLD PERSIAN SIGN DA
103AE ; [.4997.0020.0002] # OLD PERSIAN SIGN DI
103AF ; [.4998.0020.0002] # OLD PERSIAN SIGN DU
103B0 ; [.4999.0020.0002] # OLD PERSIAN SIGN THA
103B1 ; [.499A.0020.0002] # OLD PERSIAN SIGN PA
103B2 ; [.499B.0020.0002] # OLD PERSIAN SIGN BA
103B3 ; [.499C.0020.0002] # OLD PERSIAN SIGN FA
103B4 ; [.499D.0020.0002] # OLD PERSIAN SIGN NA
103B5 ; [.499E.0020.0002] # OLD PERSIAN SIGN NU
103B6 ; [.499F.0020.0002] # OLD PERSIAN SIGN MA
103B7 ; [.49A0.0020.0002] # OLD PERSIAN SIGN MI
103B8 ; [.49A1.0020.0002] # OLD PERSIAN SIGN MU
103B9 ; [.49A2.0020.0002] # OLD PERSIAN SIGN YA
103BA ; [.49A3.0020.0002] # OLD PERSIAN SIGN VA
103BB ; [.49A4.0020.0002] # OLD PERSIAN SIGN VI
103BC ; [.49A5.0020.0002] # OLD PERSIAN SIGN RA
103BD ; [.49A6.0020.0002] # OLD PERSIAN SIGN RU
103BE ; [.49A7.0020.0002] # OLD PERSIAN SIGN LA
103BF ; [.49A8.0020.0002] # OLD PERSIAN SIGN SA
103C0 ; [.49A9.0020.0002] # OLD PERSIAN SIGN ZA
103C1 ; [.49AA.0020.0002] # OLD PERSIAN SIGN SHA
103C2 ; [.49AB.0020.0002] # OLD PERSIAN SIGN SSA
103C3 ; [.49AC.0020.0002] # OLD PERSIAN SIGN HA
103C8 ; [.49AD.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA
103C9 ; [.49AE.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA-2
103CA ; [.49AF.0020.0002] # OLD PERSIAN SIGN AURAMAZDAAHA
103CB ; [.49B0.0020.0002] # OLD PERSIAN SIGN XSHAAYATHIYA
103CC ; [.49B1.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH
103CD ; [.49B2.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH-2
103CE ; [.49B3.0020.0002] # OLD PERSIAN SIGN BAGA
103CF ; [.49B4.0020.0002] # OLD PERSIAN SIGN BUUMISH
12000 ; [.49B5.0020.0002] # CUNEIFORM SIGN A
12001 ; [.49B6.0020.0002] # CUNEIFORM SIGN A TIMES A
12002 ; [.49B7.0020.0002] # CUNEIFORM SIGN A TIMES BAD
12003 ; [.49B8.0020.0002] # CUNEIFORM SIGN A TIMES GAN2 TENU
12004 ; [.49B9.0020.0002] # CUNEIFORM SIGN A TIMES HA
12005 ; [.49BA.0020.0002] # CUNEIFORM SIGN A TIMES IGI
12006 ; [.49BB.0020.0002] # CUNEIFORM SIGN A TIMES LAGAR GUNU
12007 ; [.49BC.0020.0002] # CUNEIFORM SIGN A TIMES MUSH
12008 ; [.49BD.0020.0002] # CUNEIFORM SIGN A TIMES SAG
12009 ; [.49BE.0020.0002] # CUNEIFORM SIGN A2
1200A ; [.49BF.0020.0002] # CUNEIFORM SIGN AB
1200B ; [.49C0.0020.0002] # CUNEIFORM SIGN AB TIMES ASH2
1200C ; [.49C1.0020.0002] # CUNEIFORM SIGN AB TIMES DUN3 GUNU
1200D ; [.49C2.0020.0002] # CUNEIFORM SIGN AB TIMES GAL
1200E ; [.49C3.0020.0002] # CUNEIFORM SIGN AB TIMES GAN2 TENU
1200F ; [.49C4.0020.0002] # CUNEIFORM SIGN AB TIMES HA
12010 ; [.49C5.0020.0002] # CUNEIFORM SIGN AB TIMES IGI GUNU
12011 ; [.49C6.0020.0002] # CUNEIFORM SIGN AB TIMES IMIN
12012 ; [.49C7.0020.0002] # CUNEIFORM SIGN AB TIMES LAGAB
12013 ; [.49C8.0020.0002] # CUNEIFORM SIGN AB TIMES SHESH
12014 ; [.49C9.0020.0002] # CUNEIFORM SIGN AB TIMES U PLUS U PLUS U
12015 ; [.49CA.0020.0002] # CUNEIFORM SIGN AB GUNU
12016 ; [.49CB.0020.0002] # CUNEIFORM SIGN AB2
12017 ; [.49CC.0020.0002] # CUNEIFORM SIGN AB2 TIMES BALAG
12018 ; [.49CD.0020.0002] # CUNEIFORM SIGN AB2 TIMES GAN2 TENU
12019 ; [.49CE.0020.0002] # CUNEIFORM SIGN AB2 TIMES ME PLUS EN
1201A ; [.49CF.0020.0002] # CUNEIFORM SIGN AB2 TIMES SHA3
1201B ; [.49D0.0020.0002] # CUNEIFORM SIGN AB2 TIMES TAK4
1201C ; [.49D1.0020.0002] # CUNEIFORM SIGN AD
1201D ; [.49D2.0020.0002] # CUNEIFORM SIGN AK
1201E ; [.49D3.0020.0002] # CUNEIFORM SIGN AK TIMES ERIN2
1201F ; [.49D4.0020.0002] # CUNEIFORM SIGN AK TIMES SHITA PLUS GISH
12020 ; [.49D5.0020.0002] # CUNEIFORM SIGN AL
12021 ; [.49D6.0020.0002] # CUNEIFORM SIGN AL TIMES AL
12022 ; [.49D7.0020.0002] # CUNEIFORM SIGN AL TIMES DIM2
12023 ; [.49D8.0020.0002] # CUNEIFORM SIGN AL TIMES GISH
12024 ; [.49D9.0020.0002] # CUNEIFORM SIGN AL TIMES HA
12025 ; [.49DA.0020.0002] # CUNEIFORM SIGN AL TIMES KAD3
12026 ; [.49DB.0020.0002] # CUNEIFORM SIGN AL TIMES KI
12027 ; [.49DC.0020.0002] # CUNEIFORM SIGN AL TIMES SHE
12028 ; [.49DD.0020.0002] # CUNEIFORM SIGN AL TIMES USH
12029 ; [.49DE.0020.0002] # CUNEIFORM SIGN ALAN
1202A ; [.49DF.0020.0002] # CUNEIFORM SIGN ALEPH
1202B ; [.49E0.0020.0002] # CUNEIFORM SIGN AMAR
1202C ; [.49E1.0020.0002] # CUNEIFORM SIGN AMAR TIMES SHE
1202D ; [.49E2.0020.0002] # CUNEIFORM SIGN AN
1202E ; [.49E3.0020.0002] # CUNEIFORM SIGN AN OVER AN
1202F ; [.49E4.0020.0002] # CUNEIFORM SIGN AN THREE TIMES
12030 ; [.49E5.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA
12031 ; [.49E6.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA SQUARED
12032 ; [.49E7.0020.0002] # CUNEIFORM SIGN ANSHE
12033 ; [.49E8.0020.0002] # CUNEIFORM SIGN APIN
12034 ; [.49E9.0020.0002] # CUNEIFORM SIGN ARAD
12035 ; [.49EA.0020.0002] # CUNEIFORM SIGN ARAD TIMES KUR
12036 ; [.49EB.0020.0002] # CUNEIFORM SIGN ARKAB
12037 ; [.49EC.0020.0002] # CUNEIFORM SIGN ASAL2
12038 ; [.49ED.0020.0002] # CUNEIFORM SIGN ASH
12039 ; [.49EE.0020.0002] # CUNEIFORM SIGN ASH ZIDA TENU
1203A ; [.49EF.0020.0002] # CUNEIFORM SIGN ASH KABA TENU
1203B ; [.49F0.0020.0002] # CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP
1203C ; [.49F1.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH
1203D ; [.49F2.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH
1203E ; [.49F3.0020.0002] # CUNEIFORM SIGN ASH2
1203F ; [.49F4.0020.0002] # CUNEIFORM SIGN ASHGAB
12040 ; [.49F5.0020.0002] # CUNEIFORM SIGN BA
12041 ; [.49F6.0020.0002] # CUNEIFORM SIGN BAD
12042 ; [.49F7.0020.0002] # CUNEIFORM SIGN BAG3
12043 ; [.49F8.0020.0002] # CUNEIFORM SIGN BAHAR2
12044 ; [.49F9.0020.0002] # CUNEIFORM SIGN BAL
12045 ; [.49FA.0020.0002] # CUNEIFORM SIGN BAL OVER BAL
12046 ; [.49FB.0020.0002] # CUNEIFORM SIGN BALAG
12047 ; [.49FC.0020.0002] # CUNEIFORM SIGN BAR
12048 ; [.49FD.0020.0002] # CUNEIFORM SIGN BARA2
12049 ; [.49FE.0020.0002] # CUNEIFORM SIGN BI
1204A ; [.49FF.0020.0002] # CUNEIFORM SIGN BI TIMES A
1204B ; [.4A00.0020.0002] # CUNEIFORM SIGN BI TIMES GAR
1204C ; [.4A01.0020.0002] # CUNEIFORM SIGN BI TIMES IGI GUNU
1204D ; [.4A02.0020.0002] # CUNEIFORM SIGN BU
1204E ; [.4A03.0020.0002] # CUNEIFORM SIGN BU OVER BU AB
1204F ; [.4A04.0020.0002] # CUNEIFORM SIGN BU OVER BU UN
12050 ; [.4A05.0020.0002] # CUNEIFORM SIGN BU CROSSING BU
12051 ; [.4A06.0020.0002] # CUNEIFORM SIGN BULUG
12052 ; [.4A07.0020.0002] # CUNEIFORM SIGN BULUG OVER BULUG
12053 ; [.4A08.0020.0002] # CUNEIFORM SIGN BUR
12054 ; [.4A09.0020.0002] # CUNEIFORM SIGN BUR2
12055 ; [.4A0A.0020.0002] # CUNEIFORM SIGN DA
12056 ; [.4A0B.0020.0002] # CUNEIFORM SIGN DAG
12057 ; [.4A0C.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH
12058 ; [.4A0D.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES AMAR
12059 ; [.4A0E.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BALAG
1205A ; [.4A0F.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BI
1205B ; [.4A10.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA
1205C ; [.4A11.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH
1205D ; [.4A12.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GI
1205E ; [.4A13.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GIR2
1205F ; [.4A14.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GUD
12060 ; [.4A15.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES HA
12061 ; [.4A16.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR
12062 ; [.4A17.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU
12063 ; [.4A18.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES KAK
12064 ; [.4A19.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LA
12065 ; [.4A1A.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU
12066 ; [.4A1B.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2
12067 ; [.4A1C.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LUM
12068 ; [.4A1D.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES NE
12069 ; [.4A1E.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP
1206A ; [.4A1F.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES SI
1206B ; [.4A20.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES TAK4
1206C ; [.4A21.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2
1206D ; [.4A22.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES USH
1206E ; [.4A23.0020.0002] # CUNEIFORM SIGN DAM
1206F ; [.4A24.0020.0002] # CUNEIFORM SIGN DAR
12070 ; [.4A25.0020.0002] # CUNEIFORM SIGN DARA3
12071 ; [.4A26.0020.0002] # CUNEIFORM SIGN DARA4
12072 ; [.4A27.0020.0002] # CUNEIFORM SIGN DI
12073 ; [.4A28.0020.0002] # CUNEIFORM SIGN DIB
12074 ; [.4A29.0020.0002] # CUNEIFORM SIGN DIM
12075 ; [.4A2A.0020.0002] # CUNEIFORM SIGN DIM TIMES SHE
12076 ; [.4A2B.0020.0002] # CUNEIFORM SIGN DIM2
12077 ; [.4A2C.0020.0002] # CUNEIFORM SIGN DIN
12078 ; [.4A2D.0020.0002] # CUNEIFORM SIGN DIN KASKAL U GUNU DISH
12079 ; [.4A2E.0020.0002] # CUNEIFORM SIGN DISH
1207A ; [.4A2F.0020.0002] # CUNEIFORM SIGN DU
1207B ; [.4A30.0020.0002] # CUNEIFORM SIGN DU OVER DU
1207C ; [.4A31.0020.0002] # CUNEIFORM SIGN DU GUNU
1207D ; [.4A32.0020.0002] # CUNEIFORM SIGN DU SHESHIG
1207E ; [.4A33.0020.0002] # CUNEIFORM SIGN DUB
1207F ; [.4A34.0020.0002] # CUNEIFORM SIGN DUB TIMES ESH2
12080 ; [.4A35.0020.0002] # CUNEIFORM SIGN DUB2
12081 ; [.4A36.0020.0002] # CUNEIFORM SIGN DUG
12082 ; [.4A37.0020.0002] # CUNEIFORM SIGN DUGUD
12083 ; [.4A38.0020.0002] # CUNEIFORM SIGN DUH
12084 ; [.4A39.0020.0002] # CUNEIFORM SIGN DUN
12085 ; [.4A3A.0020.0002] # CUNEIFORM SIGN DUN3
12086 ; [.4A3B.0020.0002] # CUNEIFORM SIGN DUN3 GUNU
12087 ; [.4A3C.0020.0002] # CUNEIFORM SIGN DUN3 GUNU GUNU
12088 ; [.4A3D.0020.0002] # CUNEIFORM SIGN DUN4
12089 ; [.4A3E.0020.0002] # CUNEIFORM SIGN DUR2
1208A ; [.4A3F.0020.0002] # CUNEIFORM SIGN E
1208B ; [.4A40.0020.0002] # CUNEIFORM SIGN E TIMES PAP
1208C ; [.4A41.0020.0002] # CUNEIFORM SIGN E OVER E NUN OVER NUN
1208D ; [.4A42.0020.0002] # CUNEIFORM SIGN E2
1208E ; [.4A43.0020.0002] # CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA
1208F ; [.4A44.0020.0002] # CUNEIFORM SIGN E2 TIMES GAR
12090 ; [.4A45.0020.0002] # CUNEIFORM SIGN E2 TIMES MI
12091 ; [.4A46.0020.0002] # CUNEIFORM SIGN E2 TIMES SAL
12092 ; [.4A47.0020.0002] # CUNEIFORM SIGN E2 TIMES SHE
12093 ; [.4A48.0020.0002] # CUNEIFORM SIGN E2 TIMES U
12094 ; [.4A49.0020.0002] # CUNEIFORM SIGN EDIN
12095 ; [.4A4A.0020.0002] # CUNEIFORM SIGN EGIR
12096 ; [.4A4B.0020.0002] # CUNEIFORM SIGN EL
12097 ; [.4A4C.0020.0002] # CUNEIFORM SIGN EN
12098 ; [.4A4D.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2
12099 ; [.4A4E.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 TENU
1209A ; [.4A4F.0020.0002] # CUNEIFORM SIGN EN TIMES ME
1209B ; [.4A50.0020.0002] # CUNEIFORM SIGN EN CROSSING EN
1209C ; [.4A51.0020.0002] # CUNEIFORM SIGN EN OPPOSING EN
1209D ; [.4A52.0020.0002] # CUNEIFORM SIGN EN SQUARED
1209E ; [.4A53.0020.0002] # CUNEIFORM SIGN EREN
1209F ; [.4A54.0020.0002] # CUNEIFORM SIGN ERIN2
120A0 ; [.4A55.0020.0002] # CUNEIFORM SIGN ESH2
120A1 ; [.4A56.0020.0002] # CUNEIFORM SIGN EZEN
120A2 ; [.4A57.0020.0002] # CUNEIFORM SIGN EZEN TIMES A
120A3 ; [.4A58.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL
120A4 ; [.4A59.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL
120A5 ; [.4A5A.0020.0002] # CUNEIFORM SIGN EZEN TIMES AN
120A6 ; [.4A5B.0020.0002] # CUNEIFORM SIGN EZEN TIMES BAD
120A7 ; [.4A5C.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU
120A8 ; [.4A5D.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU
120A9 ; [.4A5E.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA
120AA ; [.4A5F.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA GUNU
120AB ; [.4A60.0020.0002] # CUNEIFORM SIGN EZEN TIMES IGI GUNU
120AC ; [.4A61.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL
120AD ; [.4A62.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED
120AE ; [.4A63.0020.0002] # CUNEIFORM SIGN EZEN TIMES KU3
120AF ; [.4A64.0020.0002] # CUNEIFORM SIGN EZEN TIMES LA
120B0 ; [.4A65.0020.0002] # CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL
120B1 ; [.4A66.0020.0002] # CUNEIFORM SIGN EZEN TIMES LI
120B2 ; [.4A67.0020.0002] # CUNEIFORM SIGN EZEN TIMES LU
120B3 ; [.4A68.0020.0002] # CUNEIFORM SIGN EZEN TIMES U2
120B4 ; [.4A69.0020.0002] # CUNEIFORM SIGN EZEN TIMES UD
120B5 ; [.4A6A.0020.0002] # CUNEIFORM SIGN GA
120B6 ; [.4A6B.0020.0002] # CUNEIFORM SIGN GA GUNU
120B7 ; [.4A6C.0020.0002] # CUNEIFORM SIGN GA2
120B8 ; [.4A6D.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA
120B9 ; [.4A6E.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS HA
120BA ; [.4A6F.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS IGI
120BB ; [.4A70.0020.0002] # CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB
120BC ; [.4A71.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN
120BD ; [.4A72.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH
120BE ; [.4A73.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL
120BF ; [.4A74.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAD
120C0 ; [.4A75.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAR PLUS RA
120C1 ; [.4A76.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR
120C2 ; [.4A77.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR PLUS RA
120C3 ; [.4A78.0020.0002] # CUNEIFORM SIGN GA2 TIMES DA
120C4 ; [.4A79.0020.0002] # CUNEIFORM SIGN GA2 TIMES DI
120C5 ; [.4A7A.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE
120C6 ; [.4A7B.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUB
120C7 ; [.4A7C.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL
120C8 ; [.4A7D.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL PLUS LA
120C9 ; [.4A7E.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN
120CA ; [.4A7F.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU
120CB ; [.4A80.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAN2 TENU
120CC ; [.4A81.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR
120CD ; [.4A82.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI
120CE ; [.4A83.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4
120CF ; [.4A84.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 PLUS A
120D0 ; [.4A85.0020.0002] # CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU
120D1 ; [.4A86.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2
120D2 ; [.4A87.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL
120D3 ; [.4A88.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL PLUS LA
120D4 ; [.4A89.0020.0002] # CUNEIFORM SIGN GA2 TIMES HI PLUS LI
120D5 ; [.4A8A.0020.0002] # CUNEIFORM SIGN GA2 TIMES HUB2
120D6 ; [.4A8B.0020.0002] # CUNEIFORM SIGN GA2 TIMES IGI GUNU
120D7 ; [.4A8C.0020.0002] # CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH
120D8 ; [.4A8D.0020.0002] # CUNEIFORM SIGN GA2 TIMES KAK
120D9 ; [.4A8E.0020.0002] # CUNEIFORM SIGN GA2 TIMES KASKAL
120DA ; [.4A8F.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID
120DB ; [.4A90.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID PLUS LAL
120DC ; [.4A91.0020.0002] # CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN
120DD ; [.4A92.0020.0002] # CUNEIFORM SIGN GA2 TIMES LA
120DE ; [.4A93.0020.0002] # CUNEIFORM SIGN GA2 TIMES ME PLUS EN
120DF ; [.4A94.0020.0002] # CUNEIFORM SIGN GA2 TIMES MI
120E0 ; [.4A95.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN
120E1 ; [.4A96.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN OVER NUN
120E2 ; [.4A97.0020.0002] # CUNEIFORM SIGN GA2 TIMES PA
120E3 ; [.4A98.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAL
120E4 ; [.4A99.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAR
120E5 ; [.4A9A.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE
120E6 ; [.4A9B.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR
120E7 ; [.4A9C.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHID
120E8 ; [.4A9D.0020.0002] # CUNEIFORM SIGN GA2 TIMES SUM
120E9 ; [.4A9E.0020.0002] # CUNEIFORM SIGN GA2 TIMES TAK4
120EA ; [.4A9F.0020.0002] # CUNEIFORM SIGN GA2 TIMES U
120EB ; [.4AA0.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD
120EC ; [.4AA1.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD PLUS DU
120ED ; [.4AA2.0020.0002] # CUNEIFORM SIGN GA2 OVER GA2
120EE ; [.4AA3.0020.0002] # CUNEIFORM SIGN GABA
120EF ; [.4AA4.0020.0002] # CUNEIFORM SIGN GABA CROSSING GABA
120F0 ; [.4AA5.0020.0002] # CUNEIFORM SIGN GAD
120F1 ; [.4AA6.0020.0002] # CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR
120F2 ; [.4AA7.0020.0002] # CUNEIFORM SIGN GAL
120F3 ; [.4AA8.0020.0002] # CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR
120F4 ; [.4AA9.0020.0002] # CUNEIFORM SIGN GALAM
120F5 ; [.4AAA.0020.0002] # CUNEIFORM SIGN GAM
120F6 ; [.4AAB.0020.0002] # CUNEIFORM SIGN GAN
120F7 ; [.4AAC.0020.0002] # CUNEIFORM SIGN GAN2
120F8 ; [.4AAD.0020.0002] # CUNEIFORM SIGN GAN2 TENU
120F9 ; [.4AAE.0020.0002] # CUNEIFORM SIGN GAN2 OVER GAN2
120FA ; [.4AAF.0020.0002] # CUNEIFORM SIGN GAN2 CROSSING GAN2
120FB ; [.4AB0.0020.0002] # CUNEIFORM SIGN GAR
120FC ; [.4AB1.0020.0002] # CUNEIFORM SIGN GAR3
120FD ; [.4AB2.0020.0002] # CUNEIFORM SIGN GASHAN
120FE ; [.4AB3.0020.0002] # CUNEIFORM SIGN GESHTIN
120FF ; [.4AB4.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES KUR
12100 ; [.4AB5.0020.0002] # CUNEIFORM SIGN GI
12101 ; [.4AB6.0020.0002] # CUNEIFORM SIGN GI TIMES E
12102 ; [.4AB7.0020.0002] # CUNEIFORM SIGN GI TIMES U
12103 ; [.4AB8.0020.0002] # CUNEIFORM SIGN GI CROSSING GI
12104 ; [.4AB9.0020.0002] # CUNEIFORM SIGN GI4
12105 ; [.4ABA.0020.0002] # CUNEIFORM SIGN GI4 OVER GI4
12106 ; [.4ABB.0020.0002] # CUNEIFORM SIGN GI4 CROSSING GI4
12107 ; [.4ABC.0020.0002] # CUNEIFORM SIGN GIDIM
12108 ; [.4ABD.0020.0002] # CUNEIFORM SIGN GIR2
12109 ; [.4ABE.0020.0002] # CUNEIFORM SIGN GIR2 GUNU
1210A ; [.4ABF.0020.0002] # CUNEIFORM SIGN GIR3
1210B ; [.4AC0.0020.0002] # CUNEIFORM SIGN GIR3 TIMES A PLUS IGI
1210C ; [.4AC1.0020.0002] # CUNEIFORM SIGN GIR3 TIMES GAN2 TENU
1210D ; [.4AC2.0020.0002] # CUNEIFORM SIGN GIR3 TIMES IGI
1210E ; [.4AC3.0020.0002] # CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI
1210F ; [.4AC4.0020.0002] # CUNEIFORM SIGN GIR3 TIMES PA
12110 ; [.4AC5.0020.0002] # CUNEIFORM SIGN GISAL
12111 ; [.4AC6.0020.0002] # CUNEIFORM SIGN GISH
12112 ; [.4AC7.0020.0002] # CUNEIFORM SIGN GISH CROSSING GISH
12113 ; [.4AC8.0020.0002] # CUNEIFORM SIGN GISH TIMES BAD
12114 ; [.4AC9.0020.0002] # CUNEIFORM SIGN GISH TIMES TAK4
12115 ; [.4ACA.0020.0002] # CUNEIFORM SIGN GISH TENU
12116 ; [.4ACB.0020.0002] # CUNEIFORM SIGN GU
12117 ; [.4ACC.0020.0002] # CUNEIFORM SIGN GU CROSSING GU
12118 ; [.4ACD.0020.0002] # CUNEIFORM SIGN GU2
12119 ; [.4ACE.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK
1211A ; [.4ACF.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU
1211B ; [.4AD0.0020.0002] # CUNEIFORM SIGN GU2 TIMES NUN
1211C ; [.4AD1.0020.0002] # CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2
1211D ; [.4AD2.0020.0002] # CUNEIFORM SIGN GU2 GUNU
1211E ; [.4AD3.0020.0002] # CUNEIFORM SIGN GUD
1211F ; [.4AD4.0020.0002] # CUNEIFORM SIGN GUD TIMES A PLUS KUR
12120 ; [.4AD5.0020.0002] # CUNEIFORM SIGN GUD TIMES KUR
12121 ; [.4AD6.0020.0002] # CUNEIFORM SIGN GUD OVER GUD LUGAL
12122 ; [.4AD7.0020.0002] # CUNEIFORM SIGN GUL
12123 ; [.4AD8.0020.0002] # CUNEIFORM SIGN GUM
12124 ; [.4AD9.0020.0002] # CUNEIFORM SIGN GUM TIMES SHE
12125 ; [.4ADA.0020.0002] # CUNEIFORM SIGN GUR
12126 ; [.4ADB.0020.0002] # CUNEIFORM SIGN GUR7
12127 ; [.4ADC.0020.0002] # CUNEIFORM SIGN GURUN
12128 ; [.4ADD.0020.0002] # CUNEIFORM SIGN GURUSH
12129 ; [.4ADE.0020.0002] # CUNEIFORM SIGN HA
1212A ; [.4ADF.0020.0002] # CUNEIFORM SIGN HA TENU
1212B ; [.4AE0.0020.0002] # CUNEIFORM SIGN HA GUNU
1212C ; [.4AE1.0020.0002] # CUNEIFORM SIGN HAL
1212D ; [.4AE2.0020.0002] # CUNEIFORM SIGN HI
1212E ; [.4AE3.0020.0002] # CUNEIFORM SIGN HI TIMES ASH
1212F ; [.4AE4.0020.0002] # CUNEIFORM SIGN HI TIMES ASH2
12130 ; [.4AE5.0020.0002] # CUNEIFORM SIGN HI TIMES BAD
12131 ; [.4AE6.0020.0002] # CUNEIFORM SIGN HI TIMES DISH
12132 ; [.4AE7.0020.0002] # CUNEIFORM SIGN HI TIMES GAD
12133 ; [.4AE8.0020.0002] # CUNEIFORM SIGN HI TIMES KIN
12134 ; [.4AE9.0020.0002] # CUNEIFORM SIGN HI TIMES NUN
12135 ; [.4AEA.0020.0002] # CUNEIFORM SIGN HI TIMES SHE
12136 ; [.4AEB.0020.0002] # CUNEIFORM SIGN HI TIMES U
12137 ; [.4AEC.0020.0002] # CUNEIFORM SIGN HU
12138 ; [.4AED.0020.0002] # CUNEIFORM SIGN HUB2
12139 ; [.4AEE.0020.0002] # CUNEIFORM SIGN HUB2 TIMES AN
1213A ; [.4AEF.0020.0002] # CUNEIFORM SIGN HUB2 TIMES HAL
1213B ; [.4AF0.0020.0002] # CUNEIFORM SIGN HUB2 TIMES KASKAL
1213C ; [.4AF1.0020.0002] # CUNEIFORM SIGN HUB2 TIMES LISH
1213D ; [.4AF2.0020.0002] # CUNEIFORM SIGN HUB2 TIMES UD
1213E ; [.4AF3.0020.0002] # CUNEIFORM SIGN HUL2
1213F ; [.4AF4.0020.0002] # CUNEIFORM SIGN I
12140 ; [.4AF5.0020.0002] # CUNEIFORM SIGN I A
12141 ; [.4AF6.0020.0002] # CUNEIFORM SIGN IB
12142 ; [.4AF7.0020.0002] # CUNEIFORM SIGN IDIM
12143 ; [.4AF8.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM BUR
12144 ; [.4AF9.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM SQUARED
12145 ; [.4AFA.0020.0002] # CUNEIFORM SIGN IG
12146 ; [.4AFB.0020.0002] # CUNEIFORM SIGN IGI
12147 ; [.4AFC.0020.0002] # CUNEIFORM SIGN IGI DIB
12148 ; [.4AFD.0020.0002] # CUNEIFORM SIGN IGI RI
12149 ; [.4AFE.0020.0002] # CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD
1214A ; [.4AFF.0020.0002] # CUNEIFORM SIGN IGI GUNU
1214B ; [.4B00.0020.0002] # CUNEIFORM SIGN IL
1214C ; [.4B01.0020.0002] # CUNEIFORM SIGN IL TIMES GAN2 TENU
1214D ; [.4B02.0020.0002] # CUNEIFORM SIGN IL2
1214E ; [.4B03.0020.0002] # CUNEIFORM SIGN IM
1214F ; [.4B04.0020.0002] # CUNEIFORM SIGN IM TIMES TAK4
12150 ; [.4B05.0020.0002] # CUNEIFORM SIGN IM CROSSING IM
12151 ; [.4B06.0020.0002] # CUNEIFORM SIGN IM OPPOSING IM
12152 ; [.4B07.0020.0002] # CUNEIFORM SIGN IM SQUARED
12153 ; [.4B08.0020.0002] # CUNEIFORM SIGN IMIN
12154 ; [.4B09.0020.0002] # CUNEIFORM SIGN IN
12155 ; [.4B0A.0020.0002] # CUNEIFORM SIGN IR
12156 ; [.4B0B.0020.0002] # CUNEIFORM SIGN ISH
12157 ; [.4B0C.0020.0002] # CUNEIFORM SIGN KA
12158 ; [.4B0D.0020.0002] # CUNEIFORM SIGN KA TIMES A
12159 ; [.4B0E.0020.0002] # CUNEIFORM SIGN KA TIMES AD
1215A ; [.4B0F.0020.0002] # CUNEIFORM SIGN KA TIMES AD PLUS KU3
1215B ; [.4B10.0020.0002] # CUNEIFORM SIGN KA TIMES ASH2
1215C ; [.4B11.0020.0002] # CUNEIFORM SIGN KA TIMES BAD
1215D ; [.4B12.0020.0002] # CUNEIFORM SIGN KA TIMES BALAG
1215E ; [.4B13.0020.0002] # CUNEIFORM SIGN KA TIMES BAR
1215F ; [.4B14.0020.0002] # CUNEIFORM SIGN KA TIMES BI
12160 ; [.4B15.0020.0002] # CUNEIFORM SIGN KA TIMES ERIN2
12161 ; [.4B16.0020.0002] # CUNEIFORM SIGN KA TIMES ESH2
12162 ; [.4B17.0020.0002] # CUNEIFORM SIGN KA TIMES GA
12163 ; [.4B18.0020.0002] # CUNEIFORM SIGN KA TIMES GAL
12164 ; [.4B19.0020.0002] # CUNEIFORM SIGN KA TIMES GAN2 TENU
12165 ; [.4B1A.0020.0002] # CUNEIFORM SIGN KA TIMES GAR
12166 ; [.4B1B.0020.0002] # CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A
12167 ; [.4B1C.0020.0002] # CUNEIFORM SIGN KA TIMES GI
12168 ; [.4B1D.0020.0002] # CUNEIFORM SIGN KA TIMES GIR2
12169 ; [.4B1E.0020.0002] # CUNEIFORM SIGN KA TIMES GISH PLUS SAR
1216A ; [.4B1F.0020.0002] # CUNEIFORM SIGN KA TIMES GISH CROSSING GISH
1216B ; [.4B20.0020.0002] # CUNEIFORM SIGN KA TIMES GU
1216C ; [.4B21.0020.0002] # CUNEIFORM SIGN KA TIMES GUR7
1216D ; [.4B22.0020.0002] # CUNEIFORM SIGN KA TIMES IGI
1216E ; [.4B23.0020.0002] # CUNEIFORM SIGN KA TIMES IM
1216F ; [.4B24.0020.0002] # CUNEIFORM SIGN KA TIMES KAK
12170 ; [.4B25.0020.0002] # CUNEIFORM SIGN KA TIMES KI
12171 ; [.4B26.0020.0002] # CUNEIFORM SIGN KA TIMES KID
12172 ; [.4B27.0020.0002] # CUNEIFORM SIGN KA TIMES LI
12173 ; [.4B28.0020.0002] # CUNEIFORM SIGN KA TIMES LU
12174 ; [.4B29.0020.0002] # CUNEIFORM SIGN KA TIMES ME
12175 ; [.4B2A.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS DU
12176 ; [.4B2B.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS GI
12177 ; [.4B2C.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS TE
12178 ; [.4B2D.0020.0002] # CUNEIFORM SIGN KA TIMES MI
12179 ; [.4B2E.0020.0002] # CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ
1217A ; [.4B2F.0020.0002] # CUNEIFORM SIGN KA TIMES NE
1217B ; [.4B30.0020.0002] # CUNEIFORM SIGN KA TIMES NUN
1217C ; [.4B31.0020.0002] # CUNEIFORM SIGN KA TIMES PI
1217D ; [.4B32.0020.0002] # CUNEIFORM SIGN KA TIMES RU
1217E ; [.4B33.0020.0002] # CUNEIFORM SIGN KA TIMES SA
1217F ; [.4B34.0020.0002] # CUNEIFORM SIGN KA TIMES SAR
12180 ; [.4B35.0020.0002] # CUNEIFORM SIGN KA TIMES SHA
12181 ; [.4B36.0020.0002] # CUNEIFORM SIGN KA TIMES SHE
12182 ; [.4B37.0020.0002] # CUNEIFORM SIGN KA TIMES SHID
12183 ; [.4B38.0020.0002] # CUNEIFORM SIGN KA TIMES SHU
12184 ; [.4B39.0020.0002] # CUNEIFORM SIGN KA TIMES SIG
12185 ; [.4B3A.0020.0002] # CUNEIFORM SIGN KA TIMES SUHUR
12186 ; [.4B3B.0020.0002] # CUNEIFORM SIGN KA TIMES TAR
12187 ; [.4B3C.0020.0002] # CUNEIFORM SIGN KA TIMES U
12188 ; [.4B3D.0020.0002] # CUNEIFORM SIGN KA TIMES U2
12189 ; [.4B3E.0020.0002] # CUNEIFORM SIGN KA TIMES UD
1218A ; [.4B3F.0020.0002] # CUNEIFORM SIGN KA TIMES UMUM TIMES PA
1218B ; [.4B40.0020.0002] # CUNEIFORM SIGN KA TIMES USH
1218C ; [.4B41.0020.0002] # CUNEIFORM SIGN KA TIMES ZI
1218D ; [.4B42.0020.0002] # CUNEIFORM SIGN KA2
1218E ; [.4B43.0020.0002] # CUNEIFORM SIGN KA2 CROSSING KA2
1218F ; [.4B44.0020.0002] # CUNEIFORM SIGN KAB
12190 ; [.4B45.0020.0002] # CUNEIFORM SIGN KAD2
12191 ; [.4B46.0020.0002] # CUNEIFORM SIGN KAD3
12192 ; [.4B47.0020.0002] # CUNEIFORM SIGN KAD4
12193 ; [.4B48.0020.0002] # CUNEIFORM SIGN KAD5
12194 ; [.4B49.0020.0002] # CUNEIFORM SIGN KAD5 OVER KAD5
12195 ; [.4B4A.0020.0002] # CUNEIFORM SIGN KAK
12196 ; [.4B4B.0020.0002] # CUNEIFORM SIGN KAK TIMES IGI GUNU
12197 ; [.4B4C.0020.0002] # CUNEIFORM SIGN KAL
12198 ; [.4B4D.0020.0002] # CUNEIFORM SIGN KAL TIMES BAD
12199 ; [.4B4E.0020.0002] # CUNEIFORM SIGN KAL CROSSING KAL
1219A ; [.4B4F.0020.0002] # CUNEIFORM SIGN KAM2
1219B ; [.4B50.0020.0002] # CUNEIFORM SIGN KAM4
1219C ; [.4B51.0020.0002] # CUNEIFORM SIGN KASKAL
1219D ; [.4B52.0020.0002] # CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U
1219E ; [.4B53.0020.0002] # CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U
1219F ; [.4B54.0020.0002] # CUNEIFORM SIGN KESH2
121A0 ; [.4B55.0020.0002] # CUNEIFORM SIGN KI
121A1 ; [.4B56.0020.0002] # CUNEIFORM SIGN KI TIMES BAD
121A2 ; [.4B57.0020.0002] # CUNEIFORM SIGN KI TIMES U
121A3 ; [.4B58.0020.0002] # CUNEIFORM SIGN KI TIMES UD
121A4 ; [.4B59.0020.0002] # CUNEIFORM SIGN KID
121A5 ; [.4B5A.0020.0002] # CUNEIFORM SIGN KIN
121A6 ; [.4B5B.0020.0002] # CUNEIFORM SIGN KISAL
121A7 ; [.4B5C.0020.0002] # CUNEIFORM SIGN KISH
121A8 ; [.4B5D.0020.0002] # CUNEIFORM SIGN KISIM5
121A9 ; [.4B5E.0020.0002] # CUNEIFORM SIGN KISIM5 OVER KISIM5
121AA ; [.4B5F.0020.0002] # CUNEIFORM SIGN KU
121AB ; [.4B60.0020.0002] # CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2
121AC ; [.4B61.0020.0002] # CUNEIFORM SIGN KU3
121AD ; [.4B62.0020.0002] # CUNEIFORM SIGN KU4
121AE ; [.4B63.0020.0002] # CUNEIFORM SIGN KU4 VARIANT FORM
121AF ; [.4B64.0020.0002] # CUNEIFORM SIGN KU7
121B0 ; [.4B65.0020.0002] # CUNEIFORM SIGN KUL
121B1 ; [.4B66.0020.0002] # CUNEIFORM SIGN KUL GUNU
121B2 ; [.4B67.0020.0002] # CUNEIFORM SIGN KUN
121B3 ; [.4B68.0020.0002] # CUNEIFORM SIGN KUR
121B4 ; [.4B69.0020.0002] # CUNEIFORM SIGN KUR OPPOSING KUR
121B5 ; [.4B6A.0020.0002] # CUNEIFORM SIGN KUSHU2
121B6 ; [.4B6B.0020.0002] # CUNEIFORM SIGN KWU318
121B7 ; [.4B6C.0020.0002] # CUNEIFORM SIGN LA
121B8 ; [.4B6D.0020.0002] # CUNEIFORM SIGN LAGAB
121B9 ; [.4B6E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A
121BA ; [.4B6F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA
121BB ; [.4B70.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS GAR
121BC ; [.4B71.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS LAL
121BD ; [.4B72.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AL
121BE ; [.4B73.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AN
121BF ; [.4B74.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU
121C0 ; [.4B75.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BAD
121C1 ; [.4B76.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BI
121C2 ; [.4B77.0020.0002] # CUNEIFORM SIGN LAGAB TIMES DAR
121C3 ; [.4B78.0020.0002] # CUNEIFORM SIGN LAGAB TIMES EN
121C4 ; [.4B79.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GA
121C5 ; [.4B7A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GAR
121C6 ; [.4B7B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD
121C7 ; [.4B7C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD
121C8 ; [.4B7D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HA
121C9 ; [.4B7E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HAL
121CA ; [.4B7F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN
121CB ; [.4B80.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IGI GUNU
121CC ; [.4B81.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM
121CD ; [.4B82.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS HA
121CE ; [.4B83.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS LU
121CF ; [.4B84.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KI
121D0 ; [.4B85.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KIN
121D1 ; [.4B86.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KU3
121D2 ; [.4B87.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL
121D3 ; [.4B88.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A
121D4 ; [.4B89.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LAGAB
121D5 ; [.4B8A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LISH
121D6 ; [.4B8B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LU
121D7 ; [.4B8C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LUL
121D8 ; [.4B8D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME
121D9 ; [.4B8E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME PLUS EN
121DA ; [.4B8F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES MUSH
121DB ; [.4B90.0020.0002] # CUNEIFORM SIGN LAGAB TIMES NE
121DC ; [.4B91.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM
121DD ; [.4B92.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2
121DE ; [.4B93.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU
121DF ; [.4B94.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2
121E0 ; [.4B95.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2
121E1 ; [.4B96.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SUM
121E2 ; [.4B97.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAG
121E3 ; [.4B98.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAK4
121E4 ; [.4B99.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA
121E5 ; [.4B9A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U
121E6 ; [.4B9B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS A
121E7 ; [.4B9C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U
121E8 ; [.4B9D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH
121E9 ; [.4B9E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES UD
121EA ; [.4B9F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES USH
121EB ; [.4BA0.0020.0002] # CUNEIFORM SIGN LAGAB SQUARED
121EC ; [.4BA1.0020.0002] # CUNEIFORM SIGN LAGAR
121ED ; [.4BA2.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE
121EE ; [.4BA3.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM
121EF ; [.4BA4.0020.0002] # CUNEIFORM SIGN LAGAR GUNU
121F0 ; [.4BA5.0020.0002] # CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE
121F1 ; [.4BA6.0020.0002] # CUNEIFORM SIGN LAHSHU
121F2 ; [.4BA7.0020.0002] # CUNEIFORM SIGN LAL
121F3 ; [.4BA8.0020.0002] # CUNEIFORM SIGN LAL TIMES LAL
121F4 ; [.4BA9.0020.0002] # CUNEIFORM SIGN LAM
121F5 ; [.4BAA.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR
121F6 ; [.4BAB.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR PLUS RU
121F7 ; [.4BAC.0020.0002] # CUNEIFORM SIGN LI
121F8 ; [.4BAD.0020.0002] # CUNEIFORM SIGN LIL
121F9 ; [.4BAE.0020.0002] # CUNEIFORM SIGN LIMMU2
121FA ; [.4BAF.0020.0002] # CUNEIFORM SIGN LISH
121FB ; [.4BB0.0020.0002] # CUNEIFORM SIGN LU
121FC ; [.4BB1.0020.0002] # CUNEIFORM SIGN LU TIMES BAD
121FD ; [.4BB2.0020.0002] # CUNEIFORM SIGN LU2
121FE ; [.4BB3.0020.0002] # CUNEIFORM SIGN LU2 TIMES AL
121FF ; [.4BB4.0020.0002] # CUNEIFORM SIGN LU2 TIMES BAD
12200 ; [.4BB5.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2
12201 ; [.4BB6.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 TENU
12202 ; [.4BB7.0020.0002] # CUNEIFORM SIGN LU2 TIMES GAN2 TENU
12203 ; [.4BB8.0020.0002] # CUNEIFORM SIGN LU2 TIMES HI TIMES BAD
12204 ; [.4BB9.0020.0002] # CUNEIFORM SIGN LU2 TIMES IM
12205 ; [.4BBA.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD2
12206 ; [.4BBB.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3
12207 ; [.4BBC.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH
12208 ; [.4BBD.0020.0002] # CUNEIFORM SIGN LU2 TIMES KI
12209 ; [.4BBE.0020.0002] # CUNEIFORM SIGN LU2 TIMES LA PLUS ASH
1220A ; [.4BBF.0020.0002] # CUNEIFORM SIGN LU2 TIMES LAGAB
1220B ; [.4BC0.0020.0002] # CUNEIFORM SIGN LU2 TIMES ME PLUS EN
1220C ; [.4BC1.0020.0002] # CUNEIFORM SIGN LU2 TIMES NE
1220D ; [.4BC2.0020.0002] # CUNEIFORM SIGN LU2 TIMES NU
1220E ; [.4BC3.0020.0002] # CUNEIFORM SIGN LU2 TIMES SI PLUS ASH
1220F ; [.4BC4.0020.0002] # CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU
12210 ; [.4BC5.0020.0002] # CUNEIFORM SIGN LU2 TIMES TUG2
12211 ; [.4BC6.0020.0002] # CUNEIFORM SIGN LU2 TENU
12212 ; [.4BC7.0020.0002] # CUNEIFORM SIGN LU2 CROSSING LU2
12213 ; [.4BC8.0020.0002] # CUNEIFORM SIGN LU2 OPPOSING LU2
12214 ; [.4BC9.0020.0002] # CUNEIFORM SIGN LU2 SQUARED
12215 ; [.4BCA.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG
12216 ; [.4BCB.0020.0002] # CUNEIFORM SIGN LU3
12217 ; [.4BCC.0020.0002] # CUNEIFORM SIGN LUGAL
12218 ; [.4BCD.0020.0002] # CUNEIFORM SIGN LUGAL OVER LUGAL
12219 ; [.4BCE.0020.0002] # CUNEIFORM SIGN LUGAL OPPOSING LUGAL
1221A ; [.4BCF.0020.0002] # CUNEIFORM SIGN LUGAL SHESHIG
1221B ; [.4BD0.0020.0002] # CUNEIFORM SIGN LUH
1221C ; [.4BD1.0020.0002] # CUNEIFORM SIGN LUL
1221D ; [.4BD2.0020.0002] # CUNEIFORM SIGN LUM
1221E ; [.4BD3.0020.0002] # CUNEIFORM SIGN LUM OVER LUM
1221F ; [.4BD4.0020.0002] # CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR
12220 ; [.4BD5.0020.0002] # CUNEIFORM SIGN MA
12221 ; [.4BD6.0020.0002] # CUNEIFORM SIGN MA TIMES TAK4
12222 ; [.4BD7.0020.0002] # CUNEIFORM SIGN MA GUNU
12223 ; [.4BD8.0020.0002] # CUNEIFORM SIGN MA2
12224 ; [.4BD9.0020.0002] # CUNEIFORM SIGN MAH
12225 ; [.4BDA.0020.0002] # CUNEIFORM SIGN MAR
12226 ; [.4BDB.0020.0002] # CUNEIFORM SIGN MASH
12227 ; [.4BDC.0020.0002] # CUNEIFORM SIGN MASH2
12228 ; [.4BDD.0020.0002] # CUNEIFORM SIGN ME
12229 ; [.4BDE.0020.0002] # CUNEIFORM SIGN MES
1222A ; [.4BDF.0020.0002] # CUNEIFORM SIGN MI
1222B ; [.4BE0.0020.0002] # CUNEIFORM SIGN MIN
1222C ; [.4BE1.0020.0002] # CUNEIFORM SIGN MU
1222D ; [.4BE2.0020.0002] # CUNEIFORM SIGN MU OVER MU
1222E ; [.4BE3.0020.0002] # CUNEIFORM SIGN MUG
1222F ; [.4BE4.0020.0002] # CUNEIFORM SIGN MUG GUNU
12230 ; [.4BE5.0020.0002] # CUNEIFORM SIGN MUNSUB
12231 ; [.4BE6.0020.0002] # CUNEIFORM SIGN MURGU2
12232 ; [.4BE7.0020.0002] # CUNEIFORM SIGN MUSH
12233 ; [.4BE8.0020.0002] # CUNEIFORM SIGN MUSH TIMES A
12234 ; [.4BE9.0020.0002] # CUNEIFORM SIGN MUSH TIMES KUR
12235 ; [.4BEA.0020.0002] # CUNEIFORM SIGN MUSH TIMES ZA
12236 ; [.4BEB.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH
12237 ; [.4BEC.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA
12238 ; [.4BED.0020.0002] # CUNEIFORM SIGN MUSH CROSSING MUSH
12239 ; [.4BEE.0020.0002] # CUNEIFORM SIGN MUSH3
1223A ; [.4BEF.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A
1223B ; [.4BF0.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A PLUS DI
1223C ; [.4BF1.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES DI
1223D ; [.4BF2.0020.0002] # CUNEIFORM SIGN MUSH3 GUNU
1223E ; [.4BF3.0020.0002] # CUNEIFORM SIGN NA
1223F ; [.4BF4.0020.0002] # CUNEIFORM SIGN NA2
12240 ; [.4BF5.0020.0002] # CUNEIFORM SIGN NAGA
12241 ; [.4BF6.0020.0002] # CUNEIFORM SIGN NAGA INVERTED
12242 ; [.4BF7.0020.0002] # CUNEIFORM SIGN NAGA TIMES SHU TENU
12243 ; [.4BF8.0020.0002] # CUNEIFORM SIGN NAGA OPPOSING NAGA
12244 ; [.4BF9.0020.0002] # CUNEIFORM SIGN NAGAR
12245 ; [.4BFA.0020.0002] # CUNEIFORM SIGN NAM NUTILLU
12246 ; [.4BFB.0020.0002] # CUNEIFORM SIGN NAM
12247 ; [.4BFC.0020.0002] # CUNEIFORM SIGN NAM2
12248 ; [.4BFD.0020.0002] # CUNEIFORM SIGN NE
12249 ; [.4BFE.0020.0002] # CUNEIFORM SIGN NE TIMES A
1224A ; [.4BFF.0020.0002] # CUNEIFORM SIGN NE TIMES UD
1224B ; [.4C00.0020.0002] # CUNEIFORM SIGN NE SHESHIG
1224C ; [.4C01.0020.0002] # CUNEIFORM SIGN NI
1224D ; [.4C02.0020.0002] # CUNEIFORM SIGN NI TIMES E
1224E ; [.4C03.0020.0002] # CUNEIFORM SIGN NI2
1224F ; [.4C04.0020.0002] # CUNEIFORM SIGN NIM
12250 ; [.4C05.0020.0002] # CUNEIFORM SIGN NIM TIMES GAN2 TENU
12251 ; [.4C06.0020.0002] # CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU
12252 ; [.4C07.0020.0002] # CUNEIFORM SIGN NINDA2
12253 ; [.4C08.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES AN
12254 ; [.4C09.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH
12255 ; [.4C0A.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH
12256 ; [.4C0B.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUD
12257 ; [.4C0C.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU
12258 ; [.4C0D.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NE
12259 ; [.4C0E.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NUN
1225A ; [.4C0F.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE
1225B ; [.4C10.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN
1225C ; [.4C11.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH
1225D ; [.4C12.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH
1225E ; [.4C13.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH
1225F ; [.4C14.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES USH
12260 ; [.4C15.0020.0002] # CUNEIFORM SIGN NISAG
12261 ; [.4C16.0020.0002] # CUNEIFORM SIGN NU
12262 ; [.4C17.0020.0002] # CUNEIFORM SIGN NU11
122D4 ; [.4C18.0020.0002] # CUNEIFORM SIGN SHIR TENU
122D5 ; [.4C19.0020.0002] # CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR
12263 ; [.4C1A.0020.0002] # CUNEIFORM SIGN NUN
12264 ; [.4C1B.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES GAR
12265 ; [.4C1C.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES MASH
12266 ; [.4C1D.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL
12267 ; [.4C1E.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL
12268 ; [.4C1F.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES USH
12269 ; [.4C20.0020.0002] # CUNEIFORM SIGN NUN TENU
1226A ; [.4C21.0020.0002] # CUNEIFORM SIGN NUN OVER NUN
1226B ; [.4C22.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN
1226C ; [.4C23.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR
1226D ; [.4C24.0020.0002] # CUNEIFORM SIGN NUNUZ
1226E ; [.4C25.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB
1226F ; [.4C26.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES BI
12270 ; [.4C27.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES DUG
12271 ; [.4C28.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES GUD
12272 ; [.4C29.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU
12273 ; [.4C2A.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3
12274 ; [.4C2B.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES LA
12275 ; [.4C2C.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES NE
12276 ; [.4C2D.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3
12277 ; [.4C2E.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES U2
12278 ; [.4C2F.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI
12279 ; [.4C30.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U
1227A ; [.4C31.0020.0002] # CUNEIFORM SIGN PA
1227B ; [.4C32.0020.0002] # CUNEIFORM SIGN PAD
1227C ; [.4C33.0020.0002] # CUNEIFORM SIGN PAN
1227D ; [.4C34.0020.0002] # CUNEIFORM SIGN PAP
1227E ; [.4C35.0020.0002] # CUNEIFORM SIGN PESH2
1227F ; [.4C36.0020.0002] # CUNEIFORM SIGN PI
12280 ; [.4C37.0020.0002] # CUNEIFORM SIGN PI TIMES A
12281 ; [.4C38.0020.0002] # CUNEIFORM SIGN PI TIMES AB
12282 ; [.4C39.0020.0002] # CUNEIFORM SIGN PI TIMES BI
12283 ; [.4C3A.0020.0002] # CUNEIFORM SIGN PI TIMES BU
12284 ; [.4C3B.0020.0002] # CUNEIFORM SIGN PI TIMES E
12285 ; [.4C3C.0020.0002] # CUNEIFORM SIGN PI TIMES I
12286 ; [.4C3D.0020.0002] # CUNEIFORM SIGN PI TIMES IB
12287 ; [.4C3E.0020.0002] # CUNEIFORM SIGN PI TIMES U
12288 ; [.4C3F.0020.0002] # CUNEIFORM SIGN PI TIMES U2
12289 ; [.4C40.0020.0002] # CUNEIFORM SIGN PI CROSSING PI
1228A ; [.4C41.0020.0002] # CUNEIFORM SIGN PIRIG
1228B ; [.4C42.0020.0002] # CUNEIFORM SIGN PIRIG TIMES KAL
1228C ; [.4C43.0020.0002] # CUNEIFORM SIGN PIRIG TIMES UD
1228D ; [.4C44.0020.0002] # CUNEIFORM SIGN PIRIG TIMES ZA
1228E ; [.4C45.0020.0002] # CUNEIFORM SIGN PIRIG OPPOSING PIRIG
1228F ; [.4C46.0020.0002] # CUNEIFORM SIGN RA
12290 ; [.4C47.0020.0002] # CUNEIFORM SIGN RAB
12291 ; [.4C48.0020.0002] # CUNEIFORM SIGN RI
12292 ; [.4C49.0020.0002] # CUNEIFORM SIGN RU
12293 ; [.4C4A.0020.0002] # CUNEIFORM SIGN SA
12294 ; [.4C4B.0020.0002] # CUNEIFORM SIGN SAG NUTILLU
12295 ; [.4C4C.0020.0002] # CUNEIFORM SIGN SAG
12296 ; [.4C4D.0020.0002] # CUNEIFORM SIGN SAG TIMES A
12297 ; [.4C4E.0020.0002] # CUNEIFORM SIGN SAG TIMES DU
12298 ; [.4C4F.0020.0002] # CUNEIFORM SIGN SAG TIMES DUB
12299 ; [.4C50.0020.0002] # CUNEIFORM SIGN SAG TIMES HA
1229A ; [.4C51.0020.0002] # CUNEIFORM SIGN SAG TIMES KAK
1229B ; [.4C52.0020.0002] # CUNEIFORM SIGN SAG TIMES KUR
1229C ; [.4C53.0020.0002] # CUNEIFORM SIGN SAG TIMES LUM
1229D ; [.4C54.0020.0002] # CUNEIFORM SIGN SAG TIMES MI
1229E ; [.4C55.0020.0002] # CUNEIFORM SIGN SAG TIMES NUN
1229F ; [.4C56.0020.0002] # CUNEIFORM SIGN SAG TIMES SAL
122A0 ; [.4C57.0020.0002] # CUNEIFORM SIGN SAG TIMES SHID
122A1 ; [.4C58.0020.0002] # CUNEIFORM SIGN SAG TIMES TAB
122A2 ; [.4C59.0020.0002] # CUNEIFORM SIGN SAG TIMES U2
122A3 ; [.4C5A.0020.0002] # CUNEIFORM SIGN SAG TIMES UB
122A4 ; [.4C5B.0020.0002] # CUNEIFORM SIGN SAG TIMES UM
122A5 ; [.4C5C.0020.0002] # CUNEIFORM SIGN SAG TIMES UR
122A6 ; [.4C5D.0020.0002] # CUNEIFORM SIGN SAG TIMES USH
122A7 ; [.4C5E.0020.0002] # CUNEIFORM SIGN SAG OVER SAG
122A8 ; [.4C5F.0020.0002] # CUNEIFORM SIGN SAG GUNU
122A9 ; [.4C60.0020.0002] # CUNEIFORM SIGN SAL
122AA ; [.4C61.0020.0002] # CUNEIFORM SIGN SAL LAGAB TIMES ASH2
122AB ; [.4C62.0020.0002] # CUNEIFORM SIGN SANGA2
122AC ; [.4C63.0020.0002] # CUNEIFORM SIGN SAR
122AD ; [.4C64.0020.0002] # CUNEIFORM SIGN SHA
122AE ; [.4C65.0020.0002] # CUNEIFORM SIGN SHA3
122AF ; [.4C66.0020.0002] # CUNEIFORM SIGN SHA3 TIMES A
122B0 ; [.4C67.0020.0002] # CUNEIFORM SIGN SHA3 TIMES BAD
122B1 ; [.4C68.0020.0002] # CUNEIFORM SIGN SHA3 TIMES GISH
122B2 ; [.4C69.0020.0002] # CUNEIFORM SIGN SHA3 TIMES NE
122B3 ; [.4C6A.0020.0002] # CUNEIFORM SIGN SHA3 TIMES SHU2
122B4 ; [.4C6B.0020.0002] # CUNEIFORM SIGN SHA3 TIMES TUR
122B5 ; [.4C6C.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U
122B6 ; [.4C6D.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U PLUS A
122B7 ; [.4C6E.0020.0002] # CUNEIFORM SIGN SHA6
122B8 ; [.4C6F.0020.0002] # CUNEIFORM SIGN SHAB6
122B9 ; [.4C70.0020.0002] # CUNEIFORM SIGN SHAR2
122BA ; [.4C71.0020.0002] # CUNEIFORM SIGN SHE
122BB ; [.4C72.0020.0002] # CUNEIFORM SIGN SHE HU
122BC ; [.4C73.0020.0002] # CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR
122BD ; [.4C74.0020.0002] # CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR
122BE ; [.4C75.0020.0002] # CUNEIFORM SIGN SHEG9
122BF ; [.4C76.0020.0002] # CUNEIFORM SIGN SHEN
122C0 ; [.4C77.0020.0002] # CUNEIFORM SIGN SHESH
122C1 ; [.4C78.0020.0002] # CUNEIFORM SIGN SHESH2
122C2 ; [.4C79.0020.0002] # CUNEIFORM SIGN SHESHLAM
122C3 ; [.4C7A.0020.0002] # CUNEIFORM SIGN SHID
122C4 ; [.4C7B.0020.0002] # CUNEIFORM SIGN SHID TIMES A
122C5 ; [.4C7C.0020.0002] # CUNEIFORM SIGN SHID TIMES IM
122C6 ; [.4C7D.0020.0002] # CUNEIFORM SIGN SHIM
122C7 ; [.4C7E.0020.0002] # CUNEIFORM SIGN SHIM TIMES A
122C8 ; [.4C7F.0020.0002] # CUNEIFORM SIGN SHIM TIMES BAL
122C9 ; [.4C80.0020.0002] # CUNEIFORM SIGN SHIM TIMES BULUG
122CA ; [.4C81.0020.0002] # CUNEIFORM SIGN SHIM TIMES DIN
122CB ; [.4C82.0020.0002] # CUNEIFORM SIGN SHIM TIMES GAR
122CC ; [.4C83.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI
122CD ; [.4C84.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI GUNU
122CE ; [.4C85.0020.0002] # CUNEIFORM SIGN SHIM TIMES KUSHU2
122CF ; [.4C86.0020.0002] # CUNEIFORM SIGN SHIM TIMES LUL
122D0 ; [.4C87.0020.0002] # CUNEIFORM SIGN SHIM TIMES MUG
122D1 ; [.4C88.0020.0002] # CUNEIFORM SIGN SHIM TIMES SAL
122D2 ; [.4C89.0020.0002] # CUNEIFORM SIGN SHINIG
122D3 ; [.4C8A.0020.0002] # CUNEIFORM SIGN SHIR
122D6 ; [.4C8B.0020.0002] # CUNEIFORM SIGN SHITA
122D7 ; [.4C8C.0020.0002] # CUNEIFORM SIGN SHU
122D8 ; [.4C8D.0020.0002] # CUNEIFORM SIGN SHU OVER INVERTED SHU
122D9 ; [.4C8E.0020.0002] # CUNEIFORM SIGN SHU2
122DA ; [.4C8F.0020.0002] # CUNEIFORM SIGN SHUBUR
122DB ; [.4C90.0020.0002] # CUNEIFORM SIGN SI
122DC ; [.4C91.0020.0002] # CUNEIFORM SIGN SI GUNU
122DD ; [.4C92.0020.0002] # CUNEIFORM SIGN SIG
122DE ; [.4C93.0020.0002] # CUNEIFORM SIGN SIG4
122DF ; [.4C94.0020.0002] # CUNEIFORM SIGN SIG4 OVER SIG4 SHU2
122E0 ; [.4C95.0020.0002] # CUNEIFORM SIGN SIK2
122E1 ; [.4C96.0020.0002] # CUNEIFORM SIGN SILA3
122E2 ; [.4C97.0020.0002] # CUNEIFORM SIGN SU
122E3 ; [.4C98.0020.0002] # CUNEIFORM SIGN SU OVER SU
122E4 ; [.4C99.0020.0002] # CUNEIFORM SIGN SUD
122E5 ; [.4C9A.0020.0002] # CUNEIFORM SIGN SUD2
122E6 ; [.4C9B.0020.0002] # CUNEIFORM SIGN SUHUR
122E7 ; [.4C9C.0020.0002] # CUNEIFORM SIGN SUM
122E8 ; [.4C9D.0020.0002] # CUNEIFORM SIGN SUMASH
122E9 ; [.4C9E.0020.0002] # CUNEIFORM SIGN SUR
122EA ; [.4C9F.0020.0002] # CUNEIFORM SIGN SUR9
122EB ; [.4CA0.0020.0002] # CUNEIFORM SIGN TA
122EC ; [.4CA1.0020.0002] # CUNEIFORM SIGN TA ASTERISK
122ED ; [.4CA2.0020.0002] # CUNEIFORM SIGN TA TIMES HI
122EE ; [.4CA3.0020.0002] # CUNEIFORM SIGN TA TIMES MI
122EF ; [.4CA4.0020.0002] # CUNEIFORM SIGN TA GUNU
122F0 ; [.4CA5.0020.0002] # CUNEIFORM SIGN TAB
122F1 ; [.4CA6.0020.0002] # CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH
122F2 ; [.4CA7.0020.0002] # CUNEIFORM SIGN TAB SQUARED
122F3 ; [.4CA8.0020.0002] # CUNEIFORM SIGN TAG
122F4 ; [.4CA9.0020.0002] # CUNEIFORM SIGN TAG TIMES BI
122F5 ; [.4CAA.0020.0002] # CUNEIFORM SIGN TAG TIMES GUD
122F6 ; [.4CAB.0020.0002] # CUNEIFORM SIGN TAG TIMES SHE
122F7 ; [.4CAC.0020.0002] # CUNEIFORM SIGN TAG TIMES SHU
122F8 ; [.4CAD.0020.0002] # CUNEIFORM SIGN TAG TIMES TUG2
122F9 ; [.4CAE.0020.0002] # CUNEIFORM SIGN TAG TIMES UD
122FA ; [.4CAF.0020.0002] # CUNEIFORM SIGN TAK4
122FB ; [.4CB0.0020.0002] # CUNEIFORM SIGN TAR
122FC ; [.4CB1.0020.0002] # CUNEIFORM SIGN TE
122FD ; [.4CB2.0020.0002] # CUNEIFORM SIGN TE GUNU
122FE ; [.4CB3.0020.0002] # CUNEIFORM SIGN TI
122FF ; [.4CB4.0020.0002] # CUNEIFORM SIGN TI TENU
12300 ; [.4CB5.0020.0002] # CUNEIFORM SIGN TIL
12301 ; [.4CB6.0020.0002] # CUNEIFORM SIGN TIR
12302 ; [.4CB7.0020.0002] # CUNEIFORM SIGN TIR TIMES TAK4
12303 ; [.4CB8.0020.0002] # CUNEIFORM SIGN TIR OVER TIR
12304 ; [.4CB9.0020.0002] # CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR
12305 ; [.4CBA.0020.0002] # CUNEIFORM SIGN TU
12306 ; [.4CBB.0020.0002] # CUNEIFORM SIGN TUG2
12307 ; [.4CBC.0020.0002] # CUNEIFORM SIGN TUK
12308 ; [.4CBD.0020.0002] # CUNEIFORM SIGN TUM
12309 ; [.4CBE.0020.0002] # CUNEIFORM SIGN TUR
1230A ; [.4CBF.0020.0002] # CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA
1230B ; [.4CC0.0020.0002] # CUNEIFORM SIGN U
1230C ; [.4CC1.0020.0002] # CUNEIFORM SIGN U GUD
1230D ; [.4CC2.0020.0002] # CUNEIFORM SIGN U U U
1230E ; [.4CC3.0020.0002] # CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR
1230F ; [.4CC4.0020.0002] # CUNEIFORM SIGN U OVER U SUR OVER SUR
12310 ; [.4CC5.0020.0002] # CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED
12311 ; [.4CC6.0020.0002] # CUNEIFORM SIGN U2
12312 ; [.4CC7.0020.0002] # CUNEIFORM SIGN UB
12313 ; [.4CC8.0020.0002] # CUNEIFORM SIGN UD
12314 ; [.4CC9.0020.0002] # CUNEIFORM SIGN UD KUSHU2
12315 ; [.4CCA.0020.0002] # CUNEIFORM SIGN UD TIMES BAD
12316 ; [.4CCB.0020.0002] # CUNEIFORM SIGN UD TIMES MI
12317 ; [.4CCC.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U
12318 ; [.4CCD.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU
12319 ; [.4CCE.0020.0002] # CUNEIFORM SIGN UD GUNU
1231A ; [.4CCF.0020.0002] # CUNEIFORM SIGN UD SHESHIG
1231B ; [.4CD0.0020.0002] # CUNEIFORM SIGN UD SHESHIG TIMES BAD
1231C ; [.4CD1.0020.0002] # CUNEIFORM SIGN UDUG
1231D ; [.4CD2.0020.0002] # CUNEIFORM SIGN UM
1231E ; [.4CD3.0020.0002] # CUNEIFORM SIGN UM TIMES LAGAB
1231F ; [.4CD4.0020.0002] # CUNEIFORM SIGN UM TIMES ME PLUS DA
12320 ; [.4CD5.0020.0002] # CUNEIFORM SIGN UM TIMES SHA3
12321 ; [.4CD6.0020.0002] # CUNEIFORM SIGN UM TIMES U
12322 ; [.4CD7.0020.0002] # CUNEIFORM SIGN UMBIN
12323 ; [.4CD8.0020.0002] # CUNEIFORM SIGN UMUM
12324 ; [.4CD9.0020.0002] # CUNEIFORM SIGN UMUM TIMES KASKAL
12325 ; [.4CDA.0020.0002] # CUNEIFORM SIGN UMUM TIMES PA
12326 ; [.4CDB.0020.0002] # CUNEIFORM SIGN UN
12327 ; [.4CDC.0020.0002] # CUNEIFORM SIGN UN GUNU
12328 ; [.4CDD.0020.0002] # CUNEIFORM SIGN UR
12329 ; [.4CDE.0020.0002] # CUNEIFORM SIGN UR CROSSING UR
1232A ; [.4CDF.0020.0002] # CUNEIFORM SIGN UR SHESHIG
1232B ; [.4CE0.0020.0002] # CUNEIFORM SIGN UR2
1232C ; [.4CE1.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS HA
1232D ; [.4CE2.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS NA
1232E ; [.4CE3.0020.0002] # CUNEIFORM SIGN UR2 TIMES AL
1232F ; [.4CE4.0020.0002] # CUNEIFORM SIGN UR2 TIMES HA
12330 ; [.4CE5.0020.0002] # CUNEIFORM SIGN UR2 TIMES NUN
12331 ; [.4CE6.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2
12332 ; [.4CE7.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH
12333 ; [.4CE8.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS BI
12334 ; [.4CE9.0020.0002] # CUNEIFORM SIGN UR4
12335 ; [.4CEA.0020.0002] # CUNEIFORM SIGN URI
12336 ; [.4CEB.0020.0002] # CUNEIFORM SIGN URI3
12337 ; [.4CEC.0020.0002] # CUNEIFORM SIGN URU
12338 ; [.4CED.0020.0002] # CUNEIFORM SIGN URU TIMES A
12339 ; [.4CEE.0020.0002] # CUNEIFORM SIGN URU TIMES ASHGAB
1233A ; [.4CEF.0020.0002] # CUNEIFORM SIGN URU TIMES BAR
1233B ; [.4CF0.0020.0002] # CUNEIFORM SIGN URU TIMES DUN
1233C ; [.4CF1.0020.0002] # CUNEIFORM SIGN URU TIMES GA
1233D ; [.4CF2.0020.0002] # CUNEIFORM SIGN URU TIMES GAL
1233E ; [.4CF3.0020.0002] # CUNEIFORM SIGN URU TIMES GAN2 TENU
1233F ; [.4CF4.0020.0002] # CUNEIFORM SIGN URU TIMES GAR
12340 ; [.4CF5.0020.0002] # CUNEIFORM SIGN URU TIMES GU
12341 ; [.4CF6.0020.0002] # CUNEIFORM SIGN URU TIMES HA
12342 ; [.4CF7.0020.0002] # CUNEIFORM SIGN URU TIMES IGI
12343 ; [.4CF8.0020.0002] # CUNEIFORM SIGN URU TIMES IM
12344 ; [.4CF9.0020.0002] # CUNEIFORM SIGN URU TIMES ISH
12345 ; [.4CFA.0020.0002] # CUNEIFORM SIGN URU TIMES KI
12346 ; [.4CFB.0020.0002] # CUNEIFORM SIGN URU TIMES LUM
12347 ; [.4CFC.0020.0002] # CUNEIFORM SIGN URU TIMES MIN
12348 ; [.4CFD.0020.0002] # CUNEIFORM SIGN URU TIMES PA
12349 ; [.4CFE.0020.0002] # CUNEIFORM SIGN URU TIMES SHE
1234A ; [.4CFF.0020.0002] # CUNEIFORM SIGN URU TIMES SIG4
1234B ; [.4D00.0020.0002] # CUNEIFORM SIGN URU TIMES TU
1234C ; [.4D01.0020.0002] # CUNEIFORM SIGN URU TIMES U PLUS GUD
1234D ; [.4D02.0020.0002] # CUNEIFORM SIGN URU TIMES UD
1234E ; [.4D03.0020.0002] # CUNEIFORM SIGN URU TIMES URUDA
1234F ; [.4D04.0020.0002] # CUNEIFORM SIGN URUDA
12350 ; [.4D05.0020.0002] # CUNEIFORM SIGN URUDA TIMES U
12351 ; [.4D06.0020.0002] # CUNEIFORM SIGN USH
12352 ; [.4D07.0020.0002] # CUNEIFORM SIGN USH TIMES A
12353 ; [.4D08.0020.0002] # CUNEIFORM SIGN USH TIMES KU
12354 ; [.4D09.0020.0002] # CUNEIFORM SIGN USH TIMES KUR
12355 ; [.4D0A.0020.0002] # CUNEIFORM SIGN USH TIMES TAK4
12356 ; [.4D0B.0020.0002] # CUNEIFORM SIGN USHX
12357 ; [.4D0C.0020.0002] # CUNEIFORM SIGN USH2
12358 ; [.4D0D.0020.0002] # CUNEIFORM SIGN USHUMX
12359 ; [.4D0E.0020.0002] # CUNEIFORM SIGN UTUKI
1235A ; [.4D0F.0020.0002] # CUNEIFORM SIGN UZ3
1235B ; [.4D10.0020.0002] # CUNEIFORM SIGN UZ3 TIMES KASKAL
1235C ; [.4D11.0020.0002] # CUNEIFORM SIGN UZU
1235D ; [.4D12.0020.0002] # CUNEIFORM SIGN ZA
1235E ; [.4D13.0020.0002] # CUNEIFORM SIGN ZA TENU
1235F ; [.4D14.0020.0002] # CUNEIFORM SIGN ZA SQUARED TIMES KUR
12360 ; [.4D15.0020.0002] # CUNEIFORM SIGN ZAG
12361 ; [.4D16.0020.0002] # CUNEIFORM SIGN ZAMX
12362 ; [.4D17.0020.0002] # CUNEIFORM SIGN ZE2
12363 ; [.4D18.0020.0002] # CUNEIFORM SIGN ZI
12364 ; [.4D19.0020.0002] # CUNEIFORM SIGN ZI OVER ZI
12365 ; [.4D1A.0020.0002] # CUNEIFORM SIGN ZI3
12366 ; [.4D1B.0020.0002] # CUNEIFORM SIGN ZIB
12367 ; [.4D1C.0020.0002] # CUNEIFORM SIGN ZIB KABA TENU
12368 ; [.4D1D.0020.0002] # CUNEIFORM SIGN ZIG
12369 ; [.4D1E.0020.0002] # CUNEIFORM SIGN ZIZ2
1236A ; [.4D1F.0020.0002] # CUNEIFORM SIGN ZU
1236B ; [.4D20.0020.0002] # CUNEIFORM SIGN ZU5
1236C ; [.4D21.0020.0002] # CUNEIFORM SIGN ZU5 TIMES A
1236D ; [.4D22.0020.0002] # CUNEIFORM SIGN ZUBUR
1236E ; [.4D23.0020.0002] # CUNEIFORM SIGN ZUM
1236F ; [.4D24.0020.0002] # CUNEIFORM SIGN KAP ELAMITE
12370 ; [.4D25.0020.0002] # CUNEIFORM SIGN AB TIMES NUN
12371 ; [.4D26.0020.0002] # CUNEIFORM SIGN AB2 TIMES A
12372 ; [.4D27.0020.0002] # CUNEIFORM SIGN AMAR TIMES KUG
12373 ; [.4D28.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH
12374 ; [.4D29.0020.0002] # CUNEIFORM SIGN DAG3
12375 ; [.4D2A.0020.0002] # CUNEIFORM SIGN DISH PLUS SHU
12376 ; [.4D2B.0020.0002] # CUNEIFORM SIGN DUB TIMES SHE
12377 ; [.4D2C.0020.0002] # CUNEIFORM SIGN EZEN TIMES GUD
12378 ; [.4D2D.0020.0002] # CUNEIFORM SIGN EZEN TIMES SHE
12379 ; [.4D2E.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A
1237A ; [.4D2F.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2
1237B ; [.4D30.0020.0002] # CUNEIFORM SIGN GE22
1237C ; [.4D31.0020.0002] # CUNEIFORM SIGN GIG
1237D ; [.4D32.0020.0002] # CUNEIFORM SIGN HUSH
1237E ; [.4D33.0020.0002] # CUNEIFORM SIGN KA TIMES ANSHE
1237F ; [.4D34.0020.0002] # CUNEIFORM SIGN KA TIMES ASH3
12380 ; [.4D35.0020.0002] # CUNEIFORM SIGN KA TIMES GISH
12381 ; [.4D36.0020.0002] # CUNEIFORM SIGN KA TIMES GUD
12382 ; [.4D37.0020.0002] # CUNEIFORM SIGN KA TIMES HI TIMES ASH2
12383 ; [.4D38.0020.0002] # CUNEIFORM SIGN KA TIMES LUM
12384 ; [.4D39.0020.0002] # CUNEIFORM SIGN KA TIMES PA
12385 ; [.4D3A.0020.0002] # CUNEIFORM SIGN KA TIMES SHUL
12386 ; [.4D3B.0020.0002] # CUNEIFORM SIGN KA TIMES TU
12387 ; [.4D3C.0020.0002] # CUNEIFORM SIGN KA TIMES UR2
12388 ; [.4D3D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GI
12389 ; [.4D3E.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG TIMES BAD
1238A ; [.4D3F.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL
1238B ; [.4D40.0020.0002] # CUNEIFORM SIGN LU2 TIMES SHU
1238C ; [.4D41.0020.0002] # CUNEIFORM SIGN MESH
1238D ; [.4D42.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES ZA
1238E ; [.4D43.0020.0002] # CUNEIFORM SIGN NA4
1238F ; [.4D44.0020.0002] # CUNEIFORM SIGN NIN
12390 ; [.4D45.0020.0002] # CUNEIFORM SIGN NIN9
12391 ; [.4D46.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES BAL
12392 ; [.4D47.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GI
12393 ; [.4D48.0020.0002] # CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES
12394 ; [.4D49.0020.0002] # CUNEIFORM SIGN PESH2 ASTERISK
12395 ; [.4D4A.0020.0002] # CUNEIFORM SIGN PIR2
12396 ; [.4D4B.0020.0002] # CUNEIFORM SIGN SAG TIMES IGI GUNU
12397 ; [.4D4C.0020.0002] # CUNEIFORM SIGN TI2
12398 ; [.4D4D.0020.0002] # CUNEIFORM SIGN UM TIMES ME
12399 ; [.4D4E.0020.0002] # CUNEIFORM SIGN U U
12480 ; [.4D4F.0020.0002] # CUNEIFORM SIGN AB TIMES NUN TENU
12481 ; [.4D50.0020.0002] # CUNEIFORM SIGN AB TIMES SHU2
12482 ; [.4D51.0020.0002] # CUNEIFORM SIGN AD TIMES ESH2
12483 ; [.4D52.0020.0002] # CUNEIFORM SIGN BAD TIMES DISH TENU
12484 ; [.4D53.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES AB2
12485 ; [.4D54.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES NI
12486 ; [.4D55.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES ZA
12487 ; [.4D56.0020.0002] # CUNEIFORM SIGN BU OVER BU TIMES NA2
12488 ; [.4D57.0020.0002] # CUNEIFORM SIGN DA TIMES TAK4
12489 ; [.4D58.0020.0002] # CUNEIFORM SIGN DAG TIMES KUR
1248A ; [.4D59.0020.0002] # CUNEIFORM SIGN DIM TIMES IGI
1248B ; [.4D5A.0020.0002] # CUNEIFORM SIGN DIM TIMES U U U
1248C ; [.4D5B.0020.0002] # CUNEIFORM SIGN DIM2 TIMES UD
1248D ; [.4D5C.0020.0002] # CUNEIFORM SIGN DUG TIMES ANSHE
1248E ; [.4D5D.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH
1248F ; [.4D5E.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH AT LEFT
12490 ; [.4D5F.0020.0002] # CUNEIFORM SIGN DUG TIMES DIN
12491 ; [.4D60.0020.0002] # CUNEIFORM SIGN DUG TIMES DUN
12492 ; [.4D61.0020.0002] # CUNEIFORM SIGN DUG TIMES ERIN2
12493 ; [.4D62.0020.0002] # CUNEIFORM SIGN DUG TIMES GA
12494 ; [.4D63.0020.0002] # CUNEIFORM SIGN DUG TIMES GI
12495 ; [.4D64.0020.0002] # CUNEIFORM SIGN DUG TIMES GIR2 GUNU
12496 ; [.4D65.0020.0002] # CUNEIFORM SIGN DUG TIMES GISH
12497 ; [.4D66.0020.0002] # CUNEIFORM SIGN DUG TIMES HA
12498 ; [.4D67.0020.0002] # CUNEIFORM SIGN DUG TIMES HI
12499 ; [.4D68.0020.0002] # CUNEIFORM SIGN DUG TIMES IGI GUNU
1249A ; [.4D69.0020.0002] # CUNEIFORM SIGN DUG TIMES KASKAL
1249B ; [.4D6A.0020.0002] # CUNEIFORM SIGN DUG TIMES KUR
1249C ; [.4D6B.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2
1249D ; [.4D6C.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL
1249E ; [.4D6D.0020.0002] # CUNEIFORM SIGN DUG TIMES LAK-020
1249F ; [.4D6E.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM
124A0 ; [.4D6F.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM TIMES KUR
124A1 ; [.4D70.0020.0002] # CUNEIFORM SIGN DUG TIMES LUH PLUS GISH
124A2 ; [.4D71.0020.0002] # CUNEIFORM SIGN DUG TIMES MASH
124A3 ; [.4D72.0020.0002] # CUNEIFORM SIGN DUG TIMES MES
124A4 ; [.4D73.0020.0002] # CUNEIFORM SIGN DUG TIMES MI
124A5 ; [.4D74.0020.0002] # CUNEIFORM SIGN DUG TIMES NI
124A6 ; [.4D75.0020.0002] # CUNEIFORM SIGN DUG TIMES PI
124A7 ; [.4D76.0020.0002] # CUNEIFORM SIGN DUG TIMES SHE
124A8 ; [.4D77.0020.0002] # CUNEIFORM SIGN DUG TIMES SI GUNU
124A9 ; [.4D78.0020.0002] # CUNEIFORM SIGN E2 TIMES KUR
124AA ; [.4D79.0020.0002] # CUNEIFORM SIGN E2 TIMES PAP
124AB ; [.4D7A.0020.0002] # CUNEIFORM SIGN ERIN2 X
124AC ; [.4D7B.0020.0002] # CUNEIFORM SIGN ESH2 CROSSING ESH2
124AD ; [.4D7C.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ASH
124AE ; [.4D7D.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES HI
124AF ; [.4D7E.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU
124B0 ; [.4D7F.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LA
124B1 ; [.4D80.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LAL
124B2 ; [.4D81.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ME
124B3 ; [.4D82.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES MES
124B4 ; [.4D83.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES SU
124B5 ; [.4D84.0020.0002] # CUNEIFORM SIGN EZEN TIMES SU
124B6 ; [.4D85.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAHAR2
124B7 ; [.4D86.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM GUNU
124B8 ; [.4D87.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU
124B9 ; [.4D88.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL
124BA ; [.4D89.0020.0002] # CUNEIFORM SIGN GA2 TIMES EREN
124BB ; [.4D8A.0020.0002] # CUNEIFORM SIGN GA2 TIMES GA
124BC ; [.4D8B.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS DI
124BD ; [.4D8C.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS NE
124BE ; [.4D8D.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS A
124BF ; [.4D8E.0020.0002] # CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL
124C0 ; [.4D8F.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM
124C1 ; [.4D90.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR
124C2 ; [.4D91.0020.0002] # CUNEIFORM SIGN GA2 TIMES LUH
124C3 ; [.4D92.0020.0002] # CUNEIFORM SIGN GA2 TIMES MUSH
124C4 ; [.4D93.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE
124C5 ; [.4D94.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS E2
124C6 ; [.4D95.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS GI
124C7 ; [.4D96.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHIM
124C8 ; [.4D97.0020.0002] # CUNEIFORM SIGN GA2 TIMES ZIZ2
124C9 ; [.4D98.0020.0002] # CUNEIFORM SIGN GABA ROTATED NINETY DEGREES
124CA ; [.4D99.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES U
124CB ; [.4D9A.0020.0002] # CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH
124CC ; [.4D9B.0020.0002] # CUNEIFORM SIGN GU2 TIMES IGI GUNU
124CD ; [.4D9C.0020.0002] # CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4
124CE ; [.4D9D.0020.0002] # CUNEIFORM SIGN HA TENU GUNU
124CF ; [.4D9E.0020.0002] # CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH
124D0 ; [.4D9F.0020.0002] # CUNEIFORM SIGN KA TIMES BU
124D1 ; [.4DA0.0020.0002] # CUNEIFORM SIGN KA TIMES KA
124D2 ; [.4DA1.0020.0002] # CUNEIFORM SIGN KA TIMES U U U
124D3 ; [.4DA2.0020.0002] # CUNEIFORM SIGN KA TIMES UR
124D4 ; [.4DA3.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU
124D5 ; [.4DA4.0020.0002] # CUNEIFORM SIGN LAK-003
124D6 ; [.4DA5.0020.0002] # CUNEIFORM SIGN LAK-021
124D7 ; [.4DA6.0020.0002] # CUNEIFORM SIGN LAK-025
124D8 ; [.4DA7.0020.0002] # CUNEIFORM SIGN LAK-030
124D9 ; [.4DA8.0020.0002] # CUNEIFORM SIGN LAK-050
124DA ; [.4DA9.0020.0002] # CUNEIFORM SIGN LAK-051
124DB ; [.4DAA.0020.0002] # CUNEIFORM SIGN LAK-062
124DC ; [.4DAB.0020.0002] # CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU
124DD ; [.4DAC.0020.0002] # CUNEIFORM SIGN LAK-080
124DE ; [.4DAD.0020.0002] # CUNEIFORM SIGN LAK-081 OVER LAK-081
124DF ; [.4DAE.0020.0002] # CUNEIFORM SIGN LAK-092
124E0 ; [.4DAF.0020.0002] # CUNEIFORM SIGN LAK-130
124E1 ; [.4DB0.0020.0002] # CUNEIFORM SIGN LAK-142
124E2 ; [.4DB1.0020.0002] # CUNEIFORM SIGN LAK-210
124E3 ; [.4DB2.0020.0002] # CUNEIFORM SIGN LAK-219
124E4 ; [.4DB3.0020.0002] # CUNEIFORM SIGN LAK-220
124E5 ; [.4DB4.0020.0002] # CUNEIFORM SIGN LAK-225
124E6 ; [.4DB5.0020.0002] # CUNEIFORM SIGN LAK-228
124E7 ; [.4DB6.0020.0002] # CUNEIFORM SIGN LAK-238
124E8 ; [.4DB7.0020.0002] # CUNEIFORM SIGN LAK-265
124E9 ; [.4DB8.0020.0002] # CUNEIFORM SIGN LAK-266
124EA ; [.4DB9.0020.0002] # CUNEIFORM SIGN LAK-343
124EB ; [.4DBA.0020.0002] # CUNEIFORM SIGN LAK-347
124EC ; [.4DBB.0020.0002] # CUNEIFORM SIGN LAK-348
124ED ; [.4DBC.0020.0002] # CUNEIFORM SIGN LAK-383
124EE ; [.4DBD.0020.0002] # CUNEIFORM SIGN LAK-384
124EF ; [.4DBE.0020.0002] # CUNEIFORM SIGN LAK-390
124F0 ; [.4DBF.0020.0002] # CUNEIFORM SIGN LAK-441
124F1 ; [.4DC0.0020.0002] # CUNEIFORM SIGN LAK-449
124F2 ; [.4DC1.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES GU
124F3 ; [.4DC2.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES IGI
124F4 ; [.4DC3.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3
124F5 ; [.4DC4.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3
124F6 ; [.4DC5.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA
124F7 ; [.4DC6.0020.0002] # CUNEIFORM SIGN LAK-450
124F8 ; [.4DC7.0020.0002] # CUNEIFORM SIGN LAK-457
124F9 ; [.4DC8.0020.0002] # CUNEIFORM SIGN LAK-470
124FA ; [.4DC9.0020.0002] # CUNEIFORM SIGN LAK-483
124FB ; [.4DCA.0020.0002] # CUNEIFORM SIGN LAK-490
124FC ; [.4DCB.0020.0002] # CUNEIFORM SIGN LAK-492
124FD ; [.4DCC.0020.0002] # CUNEIFORM SIGN LAK-493
124FE ; [.4DCD.0020.0002] # CUNEIFORM SIGN LAK-495
124FF ; [.4DCE.0020.0002] # CUNEIFORM SIGN LAK-550
12500 ; [.4DCF.0020.0002] # CUNEIFORM SIGN LAK-608
12501 ; [.4DD0.0020.0002] # CUNEIFORM SIGN LAK-617
12502 ; [.4DD1.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES ASH
12503 ; [.4DD2.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES BAD
12504 ; [.4DD3.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU
12505 ; [.4DD4.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES KU3
12506 ; [.4DD5.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES LA
12507 ; [.4DD6.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TAR
12508 ; [.4DD7.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TE
12509 ; [.4DD8.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES U2
1250A ; [.4DD9.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES UD
1250B ; [.4DDA.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES URUDA
1250C ; [.4DDB.0020.0002] # CUNEIFORM SIGN LAK-636
1250D ; [.4DDC.0020.0002] # CUNEIFORM SIGN LAK-648
1250E ; [.4DDD.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES DUB
1250F ; [.4DDE.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES GA
12510 ; [.4DDF.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI
12511 ; [.4DE0.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI GUNU
12512 ; [.4DE1.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES NI
12513 ; [.4DE2.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3
12514 ; [.4DE3.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI
12515 ; [.4DE4.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES UD
12516 ; [.4DE5.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES URUDA
12517 ; [.4DE6.0020.0002] # CUNEIFORM SIGN LAK-724
12518 ; [.4DE7.0020.0002] # CUNEIFORM SIGN LAK-749
12519 ; [.4DE8.0020.0002] # CUNEIFORM SIGN LU2 GUNU TIMES ASH
1251A ; [.4DE9.0020.0002] # CUNEIFORM SIGN LU2 TIMES DISH
1251B ; [.4DEA.0020.0002] # CUNEIFORM SIGN LU2 TIMES HAL
1251C ; [.4DEB.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP
1251D ; [.4DEC.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3
1251E ; [.4DED.0020.0002] # CUNEIFORM SIGN LU2 TIMES TAK4
1251F ; [.4DEE.0020.0002] # CUNEIFORM SIGN MI PLUS ZA7
12520 ; [.4DEF.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES GA
12521 ; [.4DF0.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK
12522 ; [.4DF1.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES DIM GUNU
12523 ; [.4DF2.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GISH
12524 ; [.4DF3.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUL
12525 ; [.4DF4.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES HI
12526 ; [.4DF5.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES KESH2
12527 ; [.4DF6.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES LAK-050
12528 ; [.4DF7.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES MASH
12529 ; [.4DF8.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP
1252A ; [.4DF9.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U
1252B ; [.4DFA.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U PLUS U
1252C ; [.4DFB.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES URUDA
1252D ; [.4DFC.0020.0002] # CUNEIFORM SIGN SAG GUNU TIMES HA
1252E ; [.4DFD.0020.0002] # CUNEIFORM SIGN SAG TIMES EN
1252F ; [.4DFE.0020.0002] # CUNEIFORM SIGN SAG TIMES SHE AT LEFT
12530 ; [.4DFF.0020.0002] # CUNEIFORM SIGN SAG TIMES TAK4
12531 ; [.4E00.0020.0002] # CUNEIFORM SIGN SHA6 TENU
12532 ; [.4E01.0020.0002] # CUNEIFORM SIGN SHE OVER SHE
12533 ; [.4E02.0020.0002] # CUNEIFORM SIGN SHE PLUS HUB2
12534 ; [.4E03.0020.0002] # CUNEIFORM SIGN SHE PLUS NAM2
12535 ; [.4E04.0020.0002] # CUNEIFORM SIGN SHE PLUS SAR
12536 ; [.4E05.0020.0002] # CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI
12537 ; [.4E06.0020.0002] # CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN
12538 ; [.4E07.0020.0002] # CUNEIFORM SIGN SI TIMES TAK4
12539 ; [.4E08.0020.0002] # CUNEIFORM SIGN TAK4 PLUS SAG
1253A ; [.4E09.0020.0002] # CUNEIFORM SIGN TUM TIMES GAN2 TENU
1253B ; [.4E0A.0020.0002] # CUNEIFORM SIGN TUM TIMES THREE DISH
1253C ; [.4E0B.0020.0002] # CUNEIFORM SIGN UR2 INVERTED
1253D ; [.4E0C.0020.0002] # CUNEIFORM SIGN UR2 TIMES UD
1253E ; [.4E0D.0020.0002] # CUNEIFORM SIGN URU TIMES DARA3
1253F ; [.4E0E.0020.0002] # CUNEIFORM SIGN URU TIMES LAK-668
12540 ; [.4E0F.0020.0002] # CUNEIFORM SIGN URU TIMES LU3
12541 ; [.4E10.0020.0002] # CUNEIFORM SIGN ZA7
12542 ; [.4E11.0020.0002] # CUNEIFORM SIGN ZU OVER ZU PLUS SAR
12543 ; [.4E12.0020.0002] # CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
13000 ; [.4E13.0020.0002] # EGYPTIAN HIEROGLYPH A001
13001 ; [.4E14.0020.0002] # EGYPTIAN HIEROGLYPH A002
13002 ; [.4E15.0020.0002] # EGYPTIAN HIEROGLYPH A003
13003 ; [.4E16.0020.0002] # EGYPTIAN HIEROGLYPH A004
13004 ; [.4E17.0020.0002] # EGYPTIAN HIEROGLYPH A005
13005 ; [.4E18.0020.0002] # EGYPTIAN HIEROGLYPH A005A
13006 ; [.4E19.0020.0002] # EGYPTIAN HIEROGLYPH A006
13007 ; [.4E1A.0020.0002] # EGYPTIAN HIEROGLYPH A006A
13008 ; [.4E1B.0020.0002] # EGYPTIAN HIEROGLYPH A006B
13009 ; [.4E1C.0020.0002] # EGYPTIAN HIEROGLYPH A007
1300A ; [.4E1D.0020.0002] # EGYPTIAN HIEROGLYPH A008
1300B ; [.4E1E.0020.0002] # EGYPTIAN HIEROGLYPH A009
1300C ; [.4E1F.0020.0002] # EGYPTIAN HIEROGLYPH A010
1300D ; [.4E20.0020.0002] # EGYPTIAN HIEROGLYPH A011
1300E ; [.4E21.0020.0002] # EGYPTIAN HIEROGLYPH A012
1300F ; [.4E22.0020.0002] # EGYPTIAN HIEROGLYPH A013
13010 ; [.4E23.0020.0002] # EGYPTIAN HIEROGLYPH A014
13011 ; [.4E24.0020.0002] # EGYPTIAN HIEROGLYPH A014A
13012 ; [.4E25.0020.0002] # EGYPTIAN HIEROGLYPH A015
13013 ; [.4E26.0020.0002] # EGYPTIAN HIEROGLYPH A016
13014 ; [.4E27.0020.0002] # EGYPTIAN HIEROGLYPH A017
13015 ; [.4E28.0020.0002] # EGYPTIAN HIEROGLYPH A017A
13016 ; [.4E29.0020.0002] # EGYPTIAN HIEROGLYPH A018
13017 ; [.4E2A.0020.0002] # EGYPTIAN HIEROGLYPH A019
13018 ; [.4E2B.0020.0002] # EGYPTIAN HIEROGLYPH A020
13019 ; [.4E2C.0020.0002] # EGYPTIAN HIEROGLYPH A021
1301A ; [.4E2D.0020.0002] # EGYPTIAN HIEROGLYPH A022
1301B ; [.4E2E.0020.0002] # EGYPTIAN HIEROGLYPH A023
1301C ; [.4E2F.0020.0002] # EGYPTIAN HIEROGLYPH A024
1301D ; [.4E30.0020.0002] # EGYPTIAN HIEROGLYPH A025
1301E ; [.4E31.0020.0002] # EGYPTIAN HIEROGLYPH A026
1301F ; [.4E32.0020.0002] # EGYPTIAN HIEROGLYPH A027
13020 ; [.4E33.0020.0002] # EGYPTIAN HIEROGLYPH A028
13021 ; [.4E34.0020.0002] # EGYPTIAN HIEROGLYPH A029
13022 ; [.4E35.0020.0002] # EGYPTIAN HIEROGLYPH A030
13023 ; [.4E36.0020.0002] # EGYPTIAN HIEROGLYPH A031
13024 ; [.4E37.0020.0002] # EGYPTIAN HIEROGLYPH A032
13025 ; [.4E38.0020.0002] # EGYPTIAN HIEROGLYPH A032A
13026 ; [.4E39.0020.0002] # EGYPTIAN HIEROGLYPH A033
13027 ; [.4E3A.0020.0002] # EGYPTIAN HIEROGLYPH A034
13028 ; [.4E3B.0020.0002] # EGYPTIAN HIEROGLYPH A035
13029 ; [.4E3C.0020.0002] # EGYPTIAN HIEROGLYPH A036
1302A ; [.4E3D.0020.0002] # EGYPTIAN HIEROGLYPH A037
1302B ; [.4E3E.0020.0002] # EGYPTIAN HIEROGLYPH A038
1302C ; [.4E3F.0020.0002] # EGYPTIAN HIEROGLYPH A039
1302D ; [.4E40.0020.0002] # EGYPTIAN HIEROGLYPH A040
1302E ; [.4E41.0020.0002] # EGYPTIAN HIEROGLYPH A040A
1302F ; [.4E42.0020.0002] # EGYPTIAN HIEROGLYPH A041
13030 ; [.4E43.0020.0002] # EGYPTIAN HIEROGLYPH A042
13031 ; [.4E44.0020.0002] # EGYPTIAN HIEROGLYPH A042A
13032 ; [.4E45.0020.0002] # EGYPTIAN HIEROGLYPH A043
13033 ; [.4E46.0020.0002] # EGYPTIAN HIEROGLYPH A043A
13034 ; [.4E47.0020.0002] # EGYPTIAN HIEROGLYPH A044
13035 ; [.4E48.0020.0002] # EGYPTIAN HIEROGLYPH A045
13036 ; [.4E49.0020.0002] # EGYPTIAN HIEROGLYPH A045A
13037 ; [.4E4A.0020.0002] # EGYPTIAN HIEROGLYPH A046
13038 ; [.4E4B.0020.0002] # EGYPTIAN HIEROGLYPH A047
13039 ; [.4E4C.0020.0002] # EGYPTIAN HIEROGLYPH A048
1303A ; [.4E4D.0020.0002] # EGYPTIAN HIEROGLYPH A049
1303B ; [.4E4E.0020.0002] # EGYPTIAN HIEROGLYPH A050
1303C ; [.4E4F.0020.0002] # EGYPTIAN HIEROGLYPH A051
1303D ; [.4E50.0020.0002] # EGYPTIAN HIEROGLYPH A052
1303E ; [.4E51.0020.0002] # EGYPTIAN HIEROGLYPH A053
1303F ; [.4E52.0020.0002] # EGYPTIAN HIEROGLYPH A054
13040 ; [.4E53.0020.0002] # EGYPTIAN HIEROGLYPH A055
13041 ; [.4E54.0020.0002] # EGYPTIAN HIEROGLYPH A056
13042 ; [.4E55.0020.0002] # EGYPTIAN HIEROGLYPH A057
13043 ; [.4E56.0020.0002] # EGYPTIAN HIEROGLYPH A058
13044 ; [.4E57.0020.0002] # EGYPTIAN HIEROGLYPH A059
13045 ; [.4E58.0020.0002] # EGYPTIAN HIEROGLYPH A060
13046 ; [.4E59.0020.0002] # EGYPTIAN HIEROGLYPH A061
13047 ; [.4E5A.0020.0002] # EGYPTIAN HIEROGLYPH A062
13048 ; [.4E5B.0020.0002] # EGYPTIAN HIEROGLYPH A063
13049 ; [.4E5C.0020.0002] # EGYPTIAN HIEROGLYPH A064
1304A ; [.4E5D.0020.0002] # EGYPTIAN HIEROGLYPH A065
1304B ; [.4E5E.0020.0002] # EGYPTIAN HIEROGLYPH A066
1304C ; [.4E5F.0020.0002] # EGYPTIAN HIEROGLYPH A067
1304D ; [.4E60.0020.0002] # EGYPTIAN HIEROGLYPH A068
1304E ; [.4E61.0020.0002] # EGYPTIAN HIEROGLYPH A069
1304F ; [.4E62.0020.0002] # EGYPTIAN HIEROGLYPH A070
13050 ; [.4E63.0020.0002] # EGYPTIAN HIEROGLYPH B001
13051 ; [.4E64.0020.0002] # EGYPTIAN HIEROGLYPH B002
13052 ; [.4E65.0020.0002] # EGYPTIAN HIEROGLYPH B003
13053 ; [.4E66.0020.0002] # EGYPTIAN HIEROGLYPH B004
13054 ; [.4E67.0020.0002] # EGYPTIAN HIEROGLYPH B005
13055 ; [.4E68.0020.0002] # EGYPTIAN HIEROGLYPH B005A
13056 ; [.4E69.0020.0002] # EGYPTIAN HIEROGLYPH B006
13057 ; [.4E6A.0020.0002] # EGYPTIAN HIEROGLYPH B007
13058 ; [.4E6B.0020.0002] # EGYPTIAN HIEROGLYPH B008
13059 ; [.4E6C.0020.0002] # EGYPTIAN HIEROGLYPH B009
1305A ; [.4E6D.0020.0002] # EGYPTIAN HIEROGLYPH C001
1305B ; [.4E6E.0020.0002] # EGYPTIAN HIEROGLYPH C002
1305C ; [.4E6F.0020.0002] # EGYPTIAN HIEROGLYPH C002A
1305D ; [.4E70.0020.0002] # EGYPTIAN HIEROGLYPH C002B
1305E ; [.4E71.0020.0002] # EGYPTIAN HIEROGLYPH C002C
1305F ; [.4E72.0020.0002] # EGYPTIAN HIEROGLYPH C003
13060 ; [.4E73.0020.0002] # EGYPTIAN HIEROGLYPH C004
13061 ; [.4E74.0020.0002] # EGYPTIAN HIEROGLYPH C005
13062 ; [.4E75.0020.0002] # EGYPTIAN HIEROGLYPH C006
13063 ; [.4E76.0020.0002] # EGYPTIAN HIEROGLYPH C007
13064 ; [.4E77.0020.0002] # EGYPTIAN HIEROGLYPH C008
13065 ; [.4E78.0020.0002] # EGYPTIAN HIEROGLYPH C009
13066 ; [.4E79.0020.0002] # EGYPTIAN HIEROGLYPH C010
13067 ; [.4E7A.0020.0002] # EGYPTIAN HIEROGLYPH C010A
13068 ; [.4E7B.0020.0002] # EGYPTIAN HIEROGLYPH C011
13069 ; [.4E7C.0020.0002] # EGYPTIAN HIEROGLYPH C012
1306A ; [.4E7D.0020.0002] # EGYPTIAN HIEROGLYPH C013
1306B ; [.4E7E.0020.0002] # EGYPTIAN HIEROGLYPH C014
1306C ; [.4E7F.0020.0002] # EGYPTIAN HIEROGLYPH C015
1306D ; [.4E80.0020.0002] # EGYPTIAN HIEROGLYPH C016
1306E ; [.4E81.0020.0002] # EGYPTIAN HIEROGLYPH C017
1306F ; [.4E82.0020.0002] # EGYPTIAN HIEROGLYPH C018
13070 ; [.4E83.0020.0002] # EGYPTIAN HIEROGLYPH C019
13071 ; [.4E84.0020.0002] # EGYPTIAN HIEROGLYPH C020
13072 ; [.4E85.0020.0002] # EGYPTIAN HIEROGLYPH C021
13073 ; [.4E86.0020.0002] # EGYPTIAN HIEROGLYPH C022
13074 ; [.4E87.0020.0002] # EGYPTIAN HIEROGLYPH C023
13075 ; [.4E88.0020.0002] # EGYPTIAN HIEROGLYPH C024
13076 ; [.4E89.0020.0002] # EGYPTIAN HIEROGLYPH D001
13077 ; [.4E8A.0020.0002] # EGYPTIAN HIEROGLYPH D002
13078 ; [.4E8B.0020.0002] # EGYPTIAN HIEROGLYPH D003
13079 ; [.4E8C.0020.0002] # EGYPTIAN HIEROGLYPH D004
1307A ; [.4E8D.0020.0002] # EGYPTIAN HIEROGLYPH D005
1307B ; [.4E8E.0020.0002] # EGYPTIAN HIEROGLYPH D006
1307C ; [.4E8F.0020.0002] # EGYPTIAN HIEROGLYPH D007
1307D ; [.4E90.0020.0002] # EGYPTIAN HIEROGLYPH D008
1307E ; [.4E91.0020.0002] # EGYPTIAN HIEROGLYPH D008A
1307F ; [.4E92.0020.0002] # EGYPTIAN HIEROGLYPH D009
13080 ; [.4E93.0020.0002] # EGYPTIAN HIEROGLYPH D010
13081 ; [.4E94.0020.0002] # EGYPTIAN HIEROGLYPH D011
13082 ; [.4E95.0020.0002] # EGYPTIAN HIEROGLYPH D012
13083 ; [.4E96.0020.0002] # EGYPTIAN HIEROGLYPH D013
13084 ; [.4E97.0020.0002] # EGYPTIAN HIEROGLYPH D014
13085 ; [.4E98.0020.0002] # EGYPTIAN HIEROGLYPH D015
13086 ; [.4E99.0020.0002] # EGYPTIAN HIEROGLYPH D016
13087 ; [.4E9A.0020.0002] # EGYPTIAN HIEROGLYPH D017
13088 ; [.4E9B.0020.0002] # EGYPTIAN HIEROGLYPH D018
13089 ; [.4E9C.0020.0002] # EGYPTIAN HIEROGLYPH D019
1308A ; [.4E9D.0020.0002] # EGYPTIAN HIEROGLYPH D020
1308B ; [.4E9E.0020.0002] # EGYPTIAN HIEROGLYPH D021
1308C ; [.4E9F.0020.0002] # EGYPTIAN HIEROGLYPH D022
1308D ; [.4EA0.0020.0002] # EGYPTIAN HIEROGLYPH D023
1308E ; [.4EA1.0020.0002] # EGYPTIAN HIEROGLYPH D024
1308F ; [.4EA2.0020.0002] # EGYPTIAN HIEROGLYPH D025
13090 ; [.4EA3.0020.0002] # EGYPTIAN HIEROGLYPH D026
13091 ; [.4EA4.0020.0002] # EGYPTIAN HIEROGLYPH D027
13092 ; [.4EA5.0020.0002] # EGYPTIAN HIEROGLYPH D027A
13093 ; [.4EA6.0020.0002] # EGYPTIAN HIEROGLYPH D028
13094 ; [.4EA7.0020.0002] # EGYPTIAN HIEROGLYPH D029
13095 ; [.4EA8.0020.0002] # EGYPTIAN HIEROGLYPH D030
13096 ; [.4EA9.0020.0002] # EGYPTIAN HIEROGLYPH D031
13097 ; [.4EAA.0020.0002] # EGYPTIAN HIEROGLYPH D031A
13098 ; [.4EAB.0020.0002] # EGYPTIAN HIEROGLYPH D032
13099 ; [.4EAC.0020.0002] # EGYPTIAN HIEROGLYPH D033
1309A ; [.4EAD.0020.0002] # EGYPTIAN HIEROGLYPH D034
1309B ; [.4EAE.0020.0002] # EGYPTIAN HIEROGLYPH D034A
1309C ; [.4EAF.0020.0002] # EGYPTIAN HIEROGLYPH D035
1309D ; [.4EB0.0020.0002] # EGYPTIAN HIEROGLYPH D036
1309E ; [.4EB1.0020.0002] # EGYPTIAN HIEROGLYPH D037
1309F ; [.4EB2.0020.0002] # EGYPTIAN HIEROGLYPH D038
130A0 ; [.4EB3.0020.0002] # EGYPTIAN HIEROGLYPH D039
130A1 ; [.4EB4.0020.0002] # EGYPTIAN HIEROGLYPH D040
130A2 ; [.4EB5.0020.0002] # EGYPTIAN HIEROGLYPH D041
130A3 ; [.4EB6.0020.0002] # EGYPTIAN HIEROGLYPH D042
130A4 ; [.4EB7.0020.0002] # EGYPTIAN HIEROGLYPH D043
130A5 ; [.4EB8.0020.0002] # EGYPTIAN HIEROGLYPH D044
130A6 ; [.4EB9.0020.0002] # EGYPTIAN HIEROGLYPH D045
130A7 ; [.4EBA.0020.0002] # EGYPTIAN HIEROGLYPH D046
130A8 ; [.4EBB.0020.0002] # EGYPTIAN HIEROGLYPH D046A
130A9 ; [.4EBC.0020.0002] # EGYPTIAN HIEROGLYPH D047
130AA ; [.4EBD.0020.0002] # EGYPTIAN HIEROGLYPH D048
130AB ; [.4EBE.0020.0002] # EGYPTIAN HIEROGLYPH D048A
130AC ; [.4EBF.0020.0002] # EGYPTIAN HIEROGLYPH D049
130AD ; [.4EC0.0020.0002] # EGYPTIAN HIEROGLYPH D050
130AE ; [.4EC1.0020.0002] # EGYPTIAN HIEROGLYPH D050A
130AF ; [.4EC2.0020.0002] # EGYPTIAN HIEROGLYPH D050B
130B0 ; [.4EC3.0020.0002] # EGYPTIAN HIEROGLYPH D050C
130B1 ; [.4EC4.0020.0002] # EGYPTIAN HIEROGLYPH D050D
130B2 ; [.4EC5.0020.0002] # EGYPTIAN HIEROGLYPH D050E
130B3 ; [.4EC6.0020.0002] # EGYPTIAN HIEROGLYPH D050F
130B4 ; [.4EC7.0020.0002] # EGYPTIAN HIEROGLYPH D050G
130B5 ; [.4EC8.0020.0002] # EGYPTIAN HIEROGLYPH D050H
130B6 ; [.4EC9.0020.0002] # EGYPTIAN HIEROGLYPH D050I
130B7 ; [.4ECA.0020.0002] # EGYPTIAN HIEROGLYPH D051
130B8 ; [.4ECB.0020.0002] # EGYPTIAN HIEROGLYPH D052
130B9 ; [.4ECC.0020.0002] # EGYPTIAN HIEROGLYPH D052A
130BA ; [.4ECD.0020.0002] # EGYPTIAN HIEROGLYPH D053
130BB ; [.4ECE.0020.0002] # EGYPTIAN HIEROGLYPH D054
130BC ; [.4ECF.0020.0002] # EGYPTIAN HIEROGLYPH D054A
130BD ; [.4ED0.0020.0002] # EGYPTIAN HIEROGLYPH D055
130BE ; [.4ED1.0020.0002] # EGYPTIAN HIEROGLYPH D056
130BF ; [.4ED2.0020.0002] # EGYPTIAN HIEROGLYPH D057
130C0 ; [.4ED3.0020.0002] # EGYPTIAN HIEROGLYPH D058
130C1 ; [.4ED4.0020.0002] # EGYPTIAN HIEROGLYPH D059
130C2 ; [.4ED5.0020.0002] # EGYPTIAN HIEROGLYPH D060
130C3 ; [.4ED6.0020.0002] # EGYPTIAN HIEROGLYPH D061
130C4 ; [.4ED7.0020.0002] # EGYPTIAN HIEROGLYPH D062
130C5 ; [.4ED8.0020.0002] # EGYPTIAN HIEROGLYPH D063
130C6 ; [.4ED9.0020.0002] # EGYPTIAN HIEROGLYPH D064
130C7 ; [.4EDA.0020.0002] # EGYPTIAN HIEROGLYPH D065
130C8 ; [.4EDB.0020.0002] # EGYPTIAN HIEROGLYPH D066
130C9 ; [.4EDC.0020.0002] # EGYPTIAN HIEROGLYPH D067
130CA ; [.4EDD.0020.0002] # EGYPTIAN HIEROGLYPH D067A
130CB ; [.4EDE.0020.0002] # EGYPTIAN HIEROGLYPH D067B
130CC ; [.4EDF.0020.0002] # EGYPTIAN HIEROGLYPH D067C
130CD ; [.4EE0.0020.0002] # EGYPTIAN HIEROGLYPH D067D
130CE ; [.4EE1.0020.0002] # EGYPTIAN HIEROGLYPH D067E
130CF ; [.4EE2.0020.0002] # EGYPTIAN HIEROGLYPH D067F
130D0 ; [.4EE3.0020.0002] # EGYPTIAN HIEROGLYPH D067G
130D1 ; [.4EE4.0020.0002] # EGYPTIAN HIEROGLYPH D067H
130D2 ; [.4EE5.0020.0002] # EGYPTIAN HIEROGLYPH E001
130D3 ; [.4EE6.0020.0002] # EGYPTIAN HIEROGLYPH E002
130D4 ; [.4EE7.0020.0002] # EGYPTIAN HIEROGLYPH E003
130D5 ; [.4EE8.0020.0002] # EGYPTIAN HIEROGLYPH E004
130D6 ; [.4EE9.0020.0002] # EGYPTIAN HIEROGLYPH E005
130D7 ; [.4EEA.0020.0002] # EGYPTIAN HIEROGLYPH E006
130D8 ; [.4EEB.0020.0002] # EGYPTIAN HIEROGLYPH E007
130D9 ; [.4EEC.0020.0002] # EGYPTIAN HIEROGLYPH E008
130DA ; [.4EED.0020.0002] # EGYPTIAN HIEROGLYPH E008A
130DB ; [.4EEE.0020.0002] # EGYPTIAN HIEROGLYPH E009
130DC ; [.4EEF.0020.0002] # EGYPTIAN HIEROGLYPH E009A
130DD ; [.4EF0.0020.0002] # EGYPTIAN HIEROGLYPH E010
130DE ; [.4EF1.0020.0002] # EGYPTIAN HIEROGLYPH E011
130DF ; [.4EF2.0020.0002] # EGYPTIAN HIEROGLYPH E012
130E0 ; [.4EF3.0020.0002] # EGYPTIAN HIEROGLYPH E013
130E1 ; [.4EF4.0020.0002] # EGYPTIAN HIEROGLYPH E014
130E2 ; [.4EF5.0020.0002] # EGYPTIAN HIEROGLYPH E015
130E3 ; [.4EF6.0020.0002] # EGYPTIAN HIEROGLYPH E016
130E4 ; [.4EF7.0020.0002] # EGYPTIAN HIEROGLYPH E016A
130E5 ; [.4EF8.0020.0002] # EGYPTIAN HIEROGLYPH E017
130E6 ; [.4EF9.0020.0002] # EGYPTIAN HIEROGLYPH E017A
130E7 ; [.4EFA.0020.0002] # EGYPTIAN HIEROGLYPH E018
130E8 ; [.4EFB.0020.0002] # EGYPTIAN HIEROGLYPH E019
130E9 ; [.4EFC.0020.0002] # EGYPTIAN HIEROGLYPH E020
130EA ; [.4EFD.0020.0002] # EGYPTIAN HIEROGLYPH E020A
130EB ; [.4EFE.0020.0002] # EGYPTIAN HIEROGLYPH E021
130EC ; [.4EFF.0020.0002] # EGYPTIAN HIEROGLYPH E022
130ED ; [.4F00.0020.0002] # EGYPTIAN HIEROGLYPH E023
130EE ; [.4F01.0020.0002] # EGYPTIAN HIEROGLYPH E024
130EF ; [.4F02.0020.0002] # EGYPTIAN HIEROGLYPH E025
130F0 ; [.4F03.0020.0002] # EGYPTIAN HIEROGLYPH E026
130F1 ; [.4F04.0020.0002] # EGYPTIAN HIEROGLYPH E027
130F2 ; [.4F05.0020.0002] # EGYPTIAN HIEROGLYPH E028
130F3 ; [.4F06.0020.0002] # EGYPTIAN HIEROGLYPH E028A
130F4 ; [.4F07.0020.0002] # EGYPTIAN HIEROGLYPH E029
130F5 ; [.4F08.0020.0002] # EGYPTIAN HIEROGLYPH E030
130F6 ; [.4F09.0020.0002] # EGYPTIAN HIEROGLYPH E031
130F7 ; [.4F0A.0020.0002] # EGYPTIAN HIEROGLYPH E032
130F8 ; [.4F0B.0020.0002] # EGYPTIAN HIEROGLYPH E033
130F9 ; [.4F0C.0020.0002] # EGYPTIAN HIEROGLYPH E034
130FA ; [.4F0D.0020.0002] # EGYPTIAN HIEROGLYPH E034A
130FB ; [.4F0E.0020.0002] # EGYPTIAN HIEROGLYPH E036
130FC ; [.4F0F.0020.0002] # EGYPTIAN HIEROGLYPH E037
130FD ; [.4F10.0020.0002] # EGYPTIAN HIEROGLYPH E038
130FE ; [.4F11.0020.0002] # EGYPTIAN HIEROGLYPH F001
130FF ; [.4F12.0020.0002] # EGYPTIAN HIEROGLYPH F001A
13100 ; [.4F13.0020.0002] # EGYPTIAN HIEROGLYPH F002
13101 ; [.4F14.0020.0002] # EGYPTIAN HIEROGLYPH F003
13102 ; [.4F15.0020.0002] # EGYPTIAN HIEROGLYPH F004
13103 ; [.4F16.0020.0002] # EGYPTIAN HIEROGLYPH F005
13104 ; [.4F17.0020.0002] # EGYPTIAN HIEROGLYPH F006
13105 ; [.4F18.0020.0002] # EGYPTIAN HIEROGLYPH F007
13106 ; [.4F19.0020.0002] # EGYPTIAN HIEROGLYPH F008
13107 ; [.4F1A.0020.0002] # EGYPTIAN HIEROGLYPH F009
13108 ; [.4F1B.0020.0002] # EGYPTIAN HIEROGLYPH F010
13109 ; [.4F1C.0020.0002] # EGYPTIAN HIEROGLYPH F011
1310A ; [.4F1D.0020.0002] # EGYPTIAN HIEROGLYPH F012
1310B ; [.4F1E.0020.0002] # EGYPTIAN HIEROGLYPH F013
1310C ; [.4F1F.0020.0002] # EGYPTIAN HIEROGLYPH F013A
1310D ; [.4F20.0020.0002] # EGYPTIAN HIEROGLYPH F014
1310E ; [.4F21.0020.0002] # EGYPTIAN HIEROGLYPH F015
1310F ; [.4F22.0020.0002] # EGYPTIAN HIEROGLYPH F016
13110 ; [.4F23.0020.0002] # EGYPTIAN HIEROGLYPH F017
13111 ; [.4F24.0020.0002] # EGYPTIAN HIEROGLYPH F018
13112 ; [.4F25.0020.0002] # EGYPTIAN HIEROGLYPH F019
13113 ; [.4F26.0020.0002] # EGYPTIAN HIEROGLYPH F020
13114 ; [.4F27.0020.0002] # EGYPTIAN HIEROGLYPH F021
13115 ; [.4F28.0020.0002] # EGYPTIAN HIEROGLYPH F021A
13116 ; [.4F29.0020.0002] # EGYPTIAN HIEROGLYPH F022
13117 ; [.4F2A.0020.0002] # EGYPTIAN HIEROGLYPH F023
13118 ; [.4F2B.0020.0002] # EGYPTIAN HIEROGLYPH F024
13119 ; [.4F2C.0020.0002] # EGYPTIAN HIEROGLYPH F025
1311A ; [.4F2D.0020.0002] # EGYPTIAN HIEROGLYPH F026
1311B ; [.4F2E.0020.0002] # EGYPTIAN HIEROGLYPH F027
1311C ; [.4F2F.0020.0002] # EGYPTIAN HIEROGLYPH F028
1311D ; [.4F30.0020.0002] # EGYPTIAN HIEROGLYPH F029
1311E ; [.4F31.0020.0002] # EGYPTIAN HIEROGLYPH F030
1311F ; [.4F32.0020.0002] # EGYPTIAN HIEROGLYPH F031
13120 ; [.4F33.0020.0002] # EGYPTIAN HIEROGLYPH F031A
13121 ; [.4F34.0020.0002] # EGYPTIAN HIEROGLYPH F032
13122 ; [.4F35.0020.0002] # EGYPTIAN HIEROGLYPH F033
13123 ; [.4F36.0020.0002] # EGYPTIAN HIEROGLYPH F034
13124 ; [.4F37.0020.0002] # EGYPTIAN HIEROGLYPH F035
13125 ; [.4F38.0020.0002] # EGYPTIAN HIEROGLYPH F036
13126 ; [.4F39.0020.0002] # EGYPTIAN HIEROGLYPH F037
13127 ; [.4F3A.0020.0002] # EGYPTIAN HIEROGLYPH F037A
13128 ; [.4F3B.0020.0002] # EGYPTIAN HIEROGLYPH F038
13129 ; [.4F3C.0020.0002] # EGYPTIAN HIEROGLYPH F038A
1312A ; [.4F3D.0020.0002] # EGYPTIAN HIEROGLYPH F039
1312B ; [.4F3E.0020.0002] # EGYPTIAN HIEROGLYPH F040
1312C ; [.4F3F.0020.0002] # EGYPTIAN HIEROGLYPH F041
1312D ; [.4F40.0020.0002] # EGYPTIAN HIEROGLYPH F042
1312E ; [.4F41.0020.0002] # EGYPTIAN HIEROGLYPH F043
1312F ; [.4F42.0020.0002] # EGYPTIAN HIEROGLYPH F044
13130 ; [.4F43.0020.0002] # EGYPTIAN HIEROGLYPH F045
13131 ; [.4F44.0020.0002] # EGYPTIAN HIEROGLYPH F045A
13132 ; [.4F45.0020.0002] # EGYPTIAN HIEROGLYPH F046
13133 ; [.4F46.0020.0002] # EGYPTIAN HIEROGLYPH F046A
13134 ; [.4F47.0020.0002] # EGYPTIAN HIEROGLYPH F047
13135 ; [.4F48.0020.0002] # EGYPTIAN HIEROGLYPH F047A
13136 ; [.4F49.0020.0002] # EGYPTIAN HIEROGLYPH F048
13137 ; [.4F4A.0020.0002] # EGYPTIAN HIEROGLYPH F049
13138 ; [.4F4B.0020.0002] # EGYPTIAN HIEROGLYPH F050
13139 ; [.4F4C.0020.0002] # EGYPTIAN HIEROGLYPH F051
1313A ; [.4F4D.0020.0002] # EGYPTIAN HIEROGLYPH F051A
1313B ; [.4F4E.0020.0002] # EGYPTIAN HIEROGLYPH F051B
1313C ; [.4F4F.0020.0002] # EGYPTIAN HIEROGLYPH F051C
1313D ; [.4F50.0020.0002] # EGYPTIAN HIEROGLYPH F052
1313E ; [.4F51.0020.0002] # EGYPTIAN HIEROGLYPH F053
1313F ; [.4F52.0020.0002] # EGYPTIAN HIEROGLYPH G001
13140 ; [.4F53.0020.0002] # EGYPTIAN HIEROGLYPH G002
13141 ; [.4F54.0020.0002] # EGYPTIAN HIEROGLYPH G003
13142 ; [.4F55.0020.0002] # EGYPTIAN HIEROGLYPH G004
13143 ; [.4F56.0020.0002] # EGYPTIAN HIEROGLYPH G005
13144 ; [.4F57.0020.0002] # EGYPTIAN HIEROGLYPH G006
13145 ; [.4F58.0020.0002] # EGYPTIAN HIEROGLYPH G006A
13146 ; [.4F59.0020.0002] # EGYPTIAN HIEROGLYPH G007
13147 ; [.4F5A.0020.0002] # EGYPTIAN HIEROGLYPH G007A
13148 ; [.4F5B.0020.0002] # EGYPTIAN HIEROGLYPH G007B
13149 ; [.4F5C.0020.0002] # EGYPTIAN HIEROGLYPH G008
1314A ; [.4F5D.0020.0002] # EGYPTIAN HIEROGLYPH G009
1314B ; [.4F5E.0020.0002] # EGYPTIAN HIEROGLYPH G010
1314C ; [.4F5F.0020.0002] # EGYPTIAN HIEROGLYPH G011
1314D ; [.4F60.0020.0002] # EGYPTIAN HIEROGLYPH G011A
1314E ; [.4F61.0020.0002] # EGYPTIAN HIEROGLYPH G012
1314F ; [.4F62.0020.0002] # EGYPTIAN HIEROGLYPH G013
13150 ; [.4F63.0020.0002] # EGYPTIAN HIEROGLYPH G014
13151 ; [.4F64.0020.0002] # EGYPTIAN HIEROGLYPH G015
13152 ; [.4F65.0020.0002] # EGYPTIAN HIEROGLYPH G016
13153 ; [.4F66.0020.0002] # EGYPTIAN HIEROGLYPH G017
13154 ; [.4F67.0020.0002] # EGYPTIAN HIEROGLYPH G018
13155 ; [.4F68.0020.0002] # EGYPTIAN HIEROGLYPH G019
13156 ; [.4F69.0020.0002] # EGYPTIAN HIEROGLYPH G020
13157 ; [.4F6A.0020.0002] # EGYPTIAN HIEROGLYPH G020A
13158 ; [.4F6B.0020.0002] # EGYPTIAN HIEROGLYPH G021
13159 ; [.4F6C.0020.0002] # EGYPTIAN HIEROGLYPH G022
1315A ; [.4F6D.0020.0002] # EGYPTIAN HIEROGLYPH G023
1315B ; [.4F6E.0020.0002] # EGYPTIAN HIEROGLYPH G024
1315C ; [.4F6F.0020.0002] # EGYPTIAN HIEROGLYPH G025
1315D ; [.4F70.0020.0002] # EGYPTIAN HIEROGLYPH G026
1315E ; [.4F71.0020.0002] # EGYPTIAN HIEROGLYPH G026A
1315F ; [.4F72.0020.0002] # EGYPTIAN HIEROGLYPH G027
13160 ; [.4F73.0020.0002] # EGYPTIAN HIEROGLYPH G028
13161 ; [.4F74.0020.0002] # EGYPTIAN HIEROGLYPH G029
13162 ; [.4F75.0020.0002] # EGYPTIAN HIEROGLYPH G030
13163 ; [.4F76.0020.0002] # EGYPTIAN HIEROGLYPH G031
13164 ; [.4F77.0020.0002] # EGYPTIAN HIEROGLYPH G032
13165 ; [.4F78.0020.0002] # EGYPTIAN HIEROGLYPH G033
13166 ; [.4F79.0020.0002] # EGYPTIAN HIEROGLYPH G034
13167 ; [.4F7A.0020.0002] # EGYPTIAN HIEROGLYPH G035
13168 ; [.4F7B.0020.0002] # EGYPTIAN HIEROGLYPH G036
13169 ; [.4F7C.0020.0002] # EGYPTIAN HIEROGLYPH G036A
1316A ; [.4F7D.0020.0002] # EGYPTIAN HIEROGLYPH G037
1316B ; [.4F7E.0020.0002] # EGYPTIAN HIEROGLYPH G037A
1316C ; [.4F7F.0020.0002] # EGYPTIAN HIEROGLYPH G038
1316D ; [.4F80.0020.0002] # EGYPTIAN HIEROGLYPH G039
1316E ; [.4F81.0020.0002] # EGYPTIAN HIEROGLYPH G040
1316F ; [.4F82.0020.0002] # EGYPTIAN HIEROGLYPH G041
13170 ; [.4F83.0020.0002] # EGYPTIAN HIEROGLYPH G042
13171 ; [.4F84.0020.0002] # EGYPTIAN HIEROGLYPH G043
13172 ; [.4F85.0020.0002] # EGYPTIAN HIEROGLYPH G043A
13173 ; [.4F86.0020.0002] # EGYPTIAN HIEROGLYPH G044
13174 ; [.4F87.0020.0002] # EGYPTIAN HIEROGLYPH G045
13175 ; [.4F88.0020.0002] # EGYPTIAN HIEROGLYPH G045A
13176 ; [.4F89.0020.0002] # EGYPTIAN HIEROGLYPH G046
13177 ; [.4F8A.0020.0002] # EGYPTIAN HIEROGLYPH G047
13178 ; [.4F8B.0020.0002] # EGYPTIAN HIEROGLYPH G048
13179 ; [.4F8C.0020.0002] # EGYPTIAN HIEROGLYPH G049
1317A ; [.4F8D.0020.0002] # EGYPTIAN HIEROGLYPH G050
1317B ; [.4F8E.0020.0002] # EGYPTIAN HIEROGLYPH G051
1317C ; [.4F8F.0020.0002] # EGYPTIAN HIEROGLYPH G052
1317D ; [.4F90.0020.0002] # EGYPTIAN HIEROGLYPH G053
1317E ; [.4F91.0020.0002] # EGYPTIAN HIEROGLYPH G054
1317F ; [.4F92.0020.0002] # EGYPTIAN HIEROGLYPH H001
13180 ; [.4F93.0020.0002] # EGYPTIAN HIEROGLYPH H002
13181 ; [.4F94.0020.0002] # EGYPTIAN HIEROGLYPH H003
13182 ; [.4F95.0020.0002] # EGYPTIAN HIEROGLYPH H004
13183 ; [.4F96.0020.0002] # EGYPTIAN HIEROGLYPH H005
13184 ; [.4F97.0020.0002] # EGYPTIAN HIEROGLYPH H006
13185 ; [.4F98.0020.0002] # EGYPTIAN HIEROGLYPH H006A
13186 ; [.4F99.0020.0002] # EGYPTIAN HIEROGLYPH H007
13187 ; [.4F9A.0020.0002] # EGYPTIAN HIEROGLYPH H008
13188 ; [.4F9B.0020.0002] # EGYPTIAN HIEROGLYPH I001
13189 ; [.4F9C.0020.0002] # EGYPTIAN HIEROGLYPH I002
1318A ; [.4F9D.0020.0002] # EGYPTIAN HIEROGLYPH I003
1318B ; [.4F9E.0020.0002] # EGYPTIAN HIEROGLYPH I004
1318C ; [.4F9F.0020.0002] # EGYPTIAN HIEROGLYPH I005
1318D ; [.4FA0.0020.0002] # EGYPTIAN HIEROGLYPH I005A
1318E ; [.4FA1.0020.0002] # EGYPTIAN HIEROGLYPH I006
1318F ; [.4FA2.0020.0002] # EGYPTIAN HIEROGLYPH I007
13190 ; [.4FA3.0020.0002] # EGYPTIAN HIEROGLYPH I008
13191 ; [.4FA4.0020.0002] # EGYPTIAN HIEROGLYPH I009
13192 ; [.4FA5.0020.0002] # EGYPTIAN HIEROGLYPH I009A
13193 ; [.4FA6.0020.0002] # EGYPTIAN HIEROGLYPH I010
13194 ; [.4FA7.0020.0002] # EGYPTIAN HIEROGLYPH I010A
13195 ; [.4FA8.0020.0002] # EGYPTIAN HIEROGLYPH I011
13196 ; [.4FA9.0020.0002] # EGYPTIAN HIEROGLYPH I011A
13197 ; [.4FAA.0020.0002] # EGYPTIAN HIEROGLYPH I012
13198 ; [.4FAB.0020.0002] # EGYPTIAN HIEROGLYPH I013
13199 ; [.4FAC.0020.0002] # EGYPTIAN HIEROGLYPH I014
1319A ; [.4FAD.0020.0002] # EGYPTIAN HIEROGLYPH I015
1319B ; [.4FAE.0020.0002] # EGYPTIAN HIEROGLYPH K001
1319C ; [.4FAF.0020.0002] # EGYPTIAN HIEROGLYPH K002
1319D ; [.4FB0.0020.0002] # EGYPTIAN HIEROGLYPH K003
1319E ; [.4FB1.0020.0002] # EGYPTIAN HIEROGLYPH K004
1319F ; [.4FB2.0020.0002] # EGYPTIAN HIEROGLYPH K005
131A0 ; [.4FB3.0020.0002] # EGYPTIAN HIEROGLYPH K006
131A1 ; [.4FB4.0020.0002] # EGYPTIAN HIEROGLYPH K007
131A2 ; [.4FB5.0020.0002] # EGYPTIAN HIEROGLYPH K008
131A3 ; [.4FB6.0020.0002] # EGYPTIAN HIEROGLYPH L001
131A4 ; [.4FB7.0020.0002] # EGYPTIAN HIEROGLYPH L002
131A5 ; [.4FB8.0020.0002] # EGYPTIAN HIEROGLYPH L002A
131A6 ; [.4FB9.0020.0002] # EGYPTIAN HIEROGLYPH L003
131A7 ; [.4FBA.0020.0002] # EGYPTIAN HIEROGLYPH L004
131A8 ; [.4FBB.0020.0002] # EGYPTIAN HIEROGLYPH L005
131A9 ; [.4FBC.0020.0002] # EGYPTIAN HIEROGLYPH L006
131AA ; [.4FBD.0020.0002] # EGYPTIAN HIEROGLYPH L006A
131AB ; [.4FBE.0020.0002] # EGYPTIAN HIEROGLYPH L007
131AC ; [.4FBF.0020.0002] # EGYPTIAN HIEROGLYPH L008
131AD ; [.4FC0.0020.0002] # EGYPTIAN HIEROGLYPH M001
131AE ; [.4FC1.0020.0002] # EGYPTIAN HIEROGLYPH M001A
131AF ; [.4FC2.0020.0002] # EGYPTIAN HIEROGLYPH M001B
131B0 ; [.4FC3.0020.0002] # EGYPTIAN HIEROGLYPH M002
131B1 ; [.4FC4.0020.0002] # EGYPTIAN HIEROGLYPH M003
131B2 ; [.4FC5.0020.0002] # EGYPTIAN HIEROGLYPH M003A
131B3 ; [.4FC6.0020.0002] # EGYPTIAN HIEROGLYPH M004
131B4 ; [.4FC7.0020.0002] # EGYPTIAN HIEROGLYPH M005
131B5 ; [.4FC8.0020.0002] # EGYPTIAN HIEROGLYPH M006
131B6 ; [.4FC9.0020.0002] # EGYPTIAN HIEROGLYPH M007
131B7 ; [.4FCA.0020.0002] # EGYPTIAN HIEROGLYPH M008
131B8 ; [.4FCB.0020.0002] # EGYPTIAN HIEROGLYPH M009
131B9 ; [.4FCC.0020.0002] # EGYPTIAN HIEROGLYPH M010
131BA ; [.4FCD.0020.0002] # EGYPTIAN HIEROGLYPH M010A
131BB ; [.4FCE.0020.0002] # EGYPTIAN HIEROGLYPH M011
131BC ; [.4FCF.0020.0002] # EGYPTIAN HIEROGLYPH M012
131BD ; [.4FD0.0020.0002] # EGYPTIAN HIEROGLYPH M012A
131BE ; [.4FD1.0020.0002] # EGYPTIAN HIEROGLYPH M012B
131BF ; [.4FD2.0020.0002] # EGYPTIAN HIEROGLYPH M012C
131C0 ; [.4FD3.0020.0002] # EGYPTIAN HIEROGLYPH M012D
131C1 ; [.4FD4.0020.0002] # EGYPTIAN HIEROGLYPH M012E
131C2 ; [.4FD5.0020.0002] # EGYPTIAN HIEROGLYPH M012F
131C3 ; [.4FD6.0020.0002] # EGYPTIAN HIEROGLYPH M012G
131C4 ; [.4FD7.0020.0002] # EGYPTIAN HIEROGLYPH M012H
131C5 ; [.4FD8.0020.0002] # EGYPTIAN HIEROGLYPH M013
131C6 ; [.4FD9.0020.0002] # EGYPTIAN HIEROGLYPH M014
131C7 ; [.4FDA.0020.0002] # EGYPTIAN HIEROGLYPH M015
131C8 ; [.4FDB.0020.0002] # EGYPTIAN HIEROGLYPH M015A
131C9 ; [.4FDC.0020.0002] # EGYPTIAN HIEROGLYPH M016
131CA ; [.4FDD.0020.0002] # EGYPTIAN HIEROGLYPH M016A
131CB ; [.4FDE.0020.0002] # EGYPTIAN HIEROGLYPH M017
131CC ; [.4FDF.0020.0002] # EGYPTIAN HIEROGLYPH M017A
131CD ; [.4FE0.0020.0002] # EGYPTIAN HIEROGLYPH M018
131CE ; [.4FE1.0020.0002] # EGYPTIAN HIEROGLYPH M019
131CF ; [.4FE2.0020.0002] # EGYPTIAN HIEROGLYPH M020
131D0 ; [.4FE3.0020.0002] # EGYPTIAN HIEROGLYPH M021
131D1 ; [.4FE4.0020.0002] # EGYPTIAN HIEROGLYPH M022
131D2 ; [.4FE5.0020.0002] # EGYPTIAN HIEROGLYPH M022A
131D3 ; [.4FE6.0020.0002] # EGYPTIAN HIEROGLYPH M023
131D4 ; [.4FE7.0020.0002] # EGYPTIAN HIEROGLYPH M024
131D5 ; [.4FE8.0020.0002] # EGYPTIAN HIEROGLYPH M024A
131D6 ; [.4FE9.0020.0002] # EGYPTIAN HIEROGLYPH M025
131D7 ; [.4FEA.0020.0002] # EGYPTIAN HIEROGLYPH M026
131D8 ; [.4FEB.0020.0002] # EGYPTIAN HIEROGLYPH M027
131D9 ; [.4FEC.0020.0002] # EGYPTIAN HIEROGLYPH M028
131DA ; [.4FED.0020.0002] # EGYPTIAN HIEROGLYPH M028A
131DB ; [.4FEE.0020.0002] # EGYPTIAN HIEROGLYPH M029
131DC ; [.4FEF.0020.0002] # EGYPTIAN HIEROGLYPH M030
131DD ; [.4FF0.0020.0002] # EGYPTIAN HIEROGLYPH M031
131DE ; [.4FF1.0020.0002] # EGYPTIAN HIEROGLYPH M031A
131DF ; [.4FF2.0020.0002] # EGYPTIAN HIEROGLYPH M032
131E0 ; [.4FF3.0020.0002] # EGYPTIAN HIEROGLYPH M033
131E1 ; [.4FF4.0020.0002] # EGYPTIAN HIEROGLYPH M033A
131E2 ; [.4FF5.0020.0002] # EGYPTIAN HIEROGLYPH M033B
131E3 ; [.4FF6.0020.0002] # EGYPTIAN HIEROGLYPH M034
131E4 ; [.4FF7.0020.0002] # EGYPTIAN HIEROGLYPH M035
131E5 ; [.4FF8.0020.0002] # EGYPTIAN HIEROGLYPH M036
131E6 ; [.4FF9.0020.0002] # EGYPTIAN HIEROGLYPH M037
131E7 ; [.4FFA.0020.0002] # EGYPTIAN HIEROGLYPH M038
131E8 ; [.4FFB.0020.0002] # EGYPTIAN HIEROGLYPH M039
131E9 ; [.4FFC.0020.0002] # EGYPTIAN HIEROGLYPH M040
131EA ; [.4FFD.0020.0002] # EGYPTIAN HIEROGLYPH M040A
131EB ; [.4FFE.0020.0002] # EGYPTIAN HIEROGLYPH M041
131EC ; [.4FFF.0020.0002] # EGYPTIAN HIEROGLYPH M042
131ED ; [.5000.0020.0002] # EGYPTIAN HIEROGLYPH M043
131EE ; [.5001.0020.0002] # EGYPTIAN HIEROGLYPH M044
131EF ; [.5002.0020.0002] # EGYPTIAN HIEROGLYPH N001
131F0 ; [.5003.0020.0002] # EGYPTIAN HIEROGLYPH N002
131F1 ; [.5004.0020.0002] # EGYPTIAN HIEROGLYPH N003
131F2 ; [.5005.0020.0002] # EGYPTIAN HIEROGLYPH N004
131F3 ; [.5006.0020.0002] # EGYPTIAN HIEROGLYPH N005
131F4 ; [.5007.0020.0002] # EGYPTIAN HIEROGLYPH N006
131F5 ; [.5008.0020.0002] # EGYPTIAN HIEROGLYPH N007
131F6 ; [.5009.0020.0002] # EGYPTIAN HIEROGLYPH N008
131F7 ; [.500A.0020.0002] # EGYPTIAN HIEROGLYPH N009
131F8 ; [.500B.0020.0002] # EGYPTIAN HIEROGLYPH N010
131F9 ; [.500C.0020.0002] # EGYPTIAN HIEROGLYPH N011
131FA ; [.500D.0020.0002] # EGYPTIAN HIEROGLYPH N012
131FB ; [.500E.0020.0002] # EGYPTIAN HIEROGLYPH N013
131FC ; [.500F.0020.0002] # EGYPTIAN HIEROGLYPH N014
131FD ; [.5010.0020.0002] # EGYPTIAN HIEROGLYPH N015
131FE ; [.5011.0020.0002] # EGYPTIAN HIEROGLYPH N016
131FF ; [.5012.0020.0002] # EGYPTIAN HIEROGLYPH N017
13200 ; [.5013.0020.0002] # EGYPTIAN HIEROGLYPH N018
13201 ; [.5014.0020.0002] # EGYPTIAN HIEROGLYPH N018A
13202 ; [.5015.0020.0002] # EGYPTIAN HIEROGLYPH N018B
13203 ; [.5016.0020.0002] # EGYPTIAN HIEROGLYPH N019
13204 ; [.5017.0020.0002] # EGYPTIAN HIEROGLYPH N020
13205 ; [.5018.0020.0002] # EGYPTIAN HIEROGLYPH N021
13206 ; [.5019.0020.0002] # EGYPTIAN HIEROGLYPH N022
13207 ; [.501A.0020.0002] # EGYPTIAN HIEROGLYPH N023
13208 ; [.501B.0020.0002] # EGYPTIAN HIEROGLYPH N024
13209 ; [.501C.0020.0002] # EGYPTIAN HIEROGLYPH N025
1320A ; [.501D.0020.0002] # EGYPTIAN HIEROGLYPH N025A
1320B ; [.501E.0020.0002] # EGYPTIAN HIEROGLYPH N026
1320C ; [.501F.0020.0002] # EGYPTIAN HIEROGLYPH N027
1320D ; [.5020.0020.0002] # EGYPTIAN HIEROGLYPH N028
1320E ; [.5021.0020.0002] # EGYPTIAN HIEROGLYPH N029
1320F ; [.5022.0020.0002] # EGYPTIAN HIEROGLYPH N030
13210 ; [.5023.0020.0002] # EGYPTIAN HIEROGLYPH N031
13211 ; [.5024.0020.0002] # EGYPTIAN HIEROGLYPH N032
13212 ; [.5025.0020.0002] # EGYPTIAN HIEROGLYPH N033
13213 ; [.5026.0020.0002] # EGYPTIAN HIEROGLYPH N033A
13214 ; [.5027.0020.0002] # EGYPTIAN HIEROGLYPH N034
13215 ; [.5028.0020.0002] # EGYPTIAN HIEROGLYPH N034A
13216 ; [.5029.0020.0002] # EGYPTIAN HIEROGLYPH N035
13217 ; [.502A.0020.0002] # EGYPTIAN HIEROGLYPH N035A
13218 ; [.502B.0020.0002] # EGYPTIAN HIEROGLYPH N036
13219 ; [.502C.0020.0002] # EGYPTIAN HIEROGLYPH N037
1321A ; [.502D.0020.0002] # EGYPTIAN HIEROGLYPH N037A
1321B ; [.502E.0020.0002] # EGYPTIAN HIEROGLYPH N038
1321C ; [.502F.0020.0002] # EGYPTIAN HIEROGLYPH N039
1321D ; [.5030.0020.0002] # EGYPTIAN HIEROGLYPH N040
1321E ; [.5031.0020.0002] # EGYPTIAN HIEROGLYPH N041
1321F ; [.5032.0020.0002] # EGYPTIAN HIEROGLYPH N042
13220 ; [.5033.0020.0002] # EGYPTIAN HIEROGLYPH NL001
13221 ; [.5034.0020.0002] # EGYPTIAN HIEROGLYPH NL002
13222 ; [.5035.0020.0002] # EGYPTIAN HIEROGLYPH NL003
13223 ; [.5036.0020.0002] # EGYPTIAN HIEROGLYPH NL004
13224 ; [.5037.0020.0002] # EGYPTIAN HIEROGLYPH NL005
13225 ; [.5038.0020.0002] # EGYPTIAN HIEROGLYPH NL005A
13226 ; [.5039.0020.0002] # EGYPTIAN HIEROGLYPH NL006
13227 ; [.503A.0020.0002] # EGYPTIAN HIEROGLYPH NL007
13228 ; [.503B.0020.0002] # EGYPTIAN HIEROGLYPH NL008
13229 ; [.503C.0020.0002] # EGYPTIAN HIEROGLYPH NL009
1322A ; [.503D.0020.0002] # EGYPTIAN HIEROGLYPH NL010
1322B ; [.503E.0020.0002] # EGYPTIAN HIEROGLYPH NL011
1322C ; [.503F.0020.0002] # EGYPTIAN HIEROGLYPH NL012
1322D ; [.5040.0020.0002] # EGYPTIAN HIEROGLYPH NL013
1322E ; [.5041.0020.0002] # EGYPTIAN HIEROGLYPH NL014
1322F ; [.5042.0020.0002] # EGYPTIAN HIEROGLYPH NL015
13230 ; [.5043.0020.0002] # EGYPTIAN HIEROGLYPH NL016
13231 ; [.5044.0020.0002] # EGYPTIAN HIEROGLYPH NL017
13232 ; [.5045.0020.0002] # EGYPTIAN HIEROGLYPH NL017A
13233 ; [.5046.0020.0002] # EGYPTIAN HIEROGLYPH NL018
13234 ; [.5047.0020.0002] # EGYPTIAN HIEROGLYPH NL019
13235 ; [.5048.0020.0002] # EGYPTIAN HIEROGLYPH NL020
13236 ; [.5049.0020.0002] # EGYPTIAN HIEROGLYPH NU001
13237 ; [.504A.0020.0002] # EGYPTIAN HIEROGLYPH NU002
13238 ; [.504B.0020.0002] # EGYPTIAN HIEROGLYPH NU003
13239 ; [.504C.0020.0002] # EGYPTIAN HIEROGLYPH NU004
1323A ; [.504D.0020.0002] # EGYPTIAN HIEROGLYPH NU005
1323B ; [.504E.0020.0002] # EGYPTIAN HIEROGLYPH NU006
1323C ; [.504F.0020.0002] # EGYPTIAN HIEROGLYPH NU007
1323D ; [.5050.0020.0002] # EGYPTIAN HIEROGLYPH NU008
1323E ; [.5051.0020.0002] # EGYPTIAN HIEROGLYPH NU009
1323F ; [.5052.0020.0002] # EGYPTIAN HIEROGLYPH NU010
13240 ; [.5053.0020.0002] # EGYPTIAN HIEROGLYPH NU010A
13241 ; [.5054.0020.0002] # EGYPTIAN HIEROGLYPH NU011
13242 ; [.5055.0020.0002] # EGYPTIAN HIEROGLYPH NU011A
13243 ; [.5056.0020.0002] # EGYPTIAN HIEROGLYPH NU012
13244 ; [.5057.0020.0002] # EGYPTIAN HIEROGLYPH NU013
13245 ; [.5058.0020.0002] # EGYPTIAN HIEROGLYPH NU014
13246 ; [.5059.0020.0002] # EGYPTIAN HIEROGLYPH NU015
13247 ; [.505A.0020.0002] # EGYPTIAN HIEROGLYPH NU016
13248 ; [.505B.0020.0002] # EGYPTIAN HIEROGLYPH NU017
13249 ; [.505C.0020.0002] # EGYPTIAN HIEROGLYPH NU018
1324A ; [.505D.0020.0002] # EGYPTIAN HIEROGLYPH NU018A
1324B ; [.505E.0020.0002] # EGYPTIAN HIEROGLYPH NU019
1324C ; [.505F.0020.0002] # EGYPTIAN HIEROGLYPH NU020
1324D ; [.5060.0020.0002] # EGYPTIAN HIEROGLYPH NU021
1324E ; [.5061.0020.0002] # EGYPTIAN HIEROGLYPH NU022
1324F ; [.5062.0020.0002] # EGYPTIAN HIEROGLYPH NU022A
13250 ; [.5063.0020.0002] # EGYPTIAN HIEROGLYPH O001
13251 ; [.5064.0020.0002] # EGYPTIAN HIEROGLYPH O001A
13252 ; [.5065.0020.0002] # EGYPTIAN HIEROGLYPH O002
13253 ; [.5066.0020.0002] # EGYPTIAN HIEROGLYPH O003
13254 ; [.5067.0020.0002] # EGYPTIAN HIEROGLYPH O004
13255 ; [.5068.0020.0002] # EGYPTIAN HIEROGLYPH O005
13256 ; [.5069.0020.0002] # EGYPTIAN HIEROGLYPH O005A
13257 ; [.506A.0020.0002] # EGYPTIAN HIEROGLYPH O006
13258 ; [.506B.0020.0002] # EGYPTIAN HIEROGLYPH O006A
13259 ; [.506C.0020.0002] # EGYPTIAN HIEROGLYPH O006B
1325A ; [.506D.0020.0002] # EGYPTIAN HIEROGLYPH O006C
1325B ; [.506E.0020.0002] # EGYPTIAN HIEROGLYPH O006D
1325C ; [.506F.0020.0002] # EGYPTIAN HIEROGLYPH O006E
1325D ; [.5070.0020.0002] # EGYPTIAN HIEROGLYPH O006F
1325E ; [.5071.0020.0002] # EGYPTIAN HIEROGLYPH O007
1325F ; [.5072.0020.0002] # EGYPTIAN HIEROGLYPH O008
13260 ; [.5073.0020.0002] # EGYPTIAN HIEROGLYPH O009
13261 ; [.5074.0020.0002] # EGYPTIAN HIEROGLYPH O010
13262 ; [.5075.0020.0002] # EGYPTIAN HIEROGLYPH O010A
13263 ; [.5076.0020.0002] # EGYPTIAN HIEROGLYPH O010B
13264 ; [.5077.0020.0002] # EGYPTIAN HIEROGLYPH O010C
13265 ; [.5078.0020.0002] # EGYPTIAN HIEROGLYPH O011
13266 ; [.5079.0020.0002] # EGYPTIAN HIEROGLYPH O012
13267 ; [.507A.0020.0002] # EGYPTIAN HIEROGLYPH O013
13268 ; [.507B.0020.0002] # EGYPTIAN HIEROGLYPH O014
13269 ; [.507C.0020.0002] # EGYPTIAN HIEROGLYPH O015
1326A ; [.507D.0020.0002] # EGYPTIAN HIEROGLYPH O016
1326B ; [.507E.0020.0002] # EGYPTIAN HIEROGLYPH O017
1326C ; [.507F.0020.0002] # EGYPTIAN HIEROGLYPH O018
1326D ; [.5080.0020.0002] # EGYPTIAN HIEROGLYPH O019
1326E ; [.5081.0020.0002] # EGYPTIAN HIEROGLYPH O019A
1326F ; [.5082.0020.0002] # EGYPTIAN HIEROGLYPH O020
13270 ; [.5083.0020.0002] # EGYPTIAN HIEROGLYPH O020A
13271 ; [.5084.0020.0002] # EGYPTIAN HIEROGLYPH O021
13272 ; [.5085.0020.0002] # EGYPTIAN HIEROGLYPH O022
13273 ; [.5086.0020.0002] # EGYPTIAN HIEROGLYPH O023
13274 ; [.5087.0020.0002] # EGYPTIAN HIEROGLYPH O024
13275 ; [.5088.0020.0002] # EGYPTIAN HIEROGLYPH O024A
13276 ; [.5089.0020.0002] # EGYPTIAN HIEROGLYPH O025
13277 ; [.508A.0020.0002] # EGYPTIAN HIEROGLYPH O025A
13278 ; [.508B.0020.0002] # EGYPTIAN HIEROGLYPH O026
13279 ; [.508C.0020.0002] # EGYPTIAN HIEROGLYPH O027
1327A ; [.508D.0020.0002] # EGYPTIAN HIEROGLYPH O028
1327B ; [.508E.0020.0002] # EGYPTIAN HIEROGLYPH O029
1327C ; [.508F.0020.0002] # EGYPTIAN HIEROGLYPH O029A
1327D ; [.5090.0020.0002] # EGYPTIAN HIEROGLYPH O030
1327E ; [.5091.0020.0002] # EGYPTIAN HIEROGLYPH O030A
1327F ; [.5092.0020.0002] # EGYPTIAN HIEROGLYPH O031
13280 ; [.5093.0020.0002] # EGYPTIAN HIEROGLYPH O032
13281 ; [.5094.0020.0002] # EGYPTIAN HIEROGLYPH O033
13282 ; [.5095.0020.0002] # EGYPTIAN HIEROGLYPH O033A
13283 ; [.5096.0020.0002] # EGYPTIAN HIEROGLYPH O034
13284 ; [.5097.0020.0002] # EGYPTIAN HIEROGLYPH O035
13285 ; [.5098.0020.0002] # EGYPTIAN HIEROGLYPH O036
13286 ; [.5099.0020.0002] # EGYPTIAN HIEROGLYPH O036A
13287 ; [.509A.0020.0002] # EGYPTIAN HIEROGLYPH O036B
13288 ; [.509B.0020.0002] # EGYPTIAN HIEROGLYPH O036C
13289 ; [.509C.0020.0002] # EGYPTIAN HIEROGLYPH O036D
1328A ; [.509D.0020.0002] # EGYPTIAN HIEROGLYPH O037
1328B ; [.509E.0020.0002] # EGYPTIAN HIEROGLYPH O038
1328C ; [.509F.0020.0002] # EGYPTIAN HIEROGLYPH O039
1328D ; [.50A0.0020.0002] # EGYPTIAN HIEROGLYPH O040
1328E ; [.50A1.0020.0002] # EGYPTIAN HIEROGLYPH O041
1328F ; [.50A2.0020.0002] # EGYPTIAN HIEROGLYPH O042
13290 ; [.50A3.0020.0002] # EGYPTIAN HIEROGLYPH O043
13291 ; [.50A4.0020.0002] # EGYPTIAN HIEROGLYPH O044
13292 ; [.50A5.0020.0002] # EGYPTIAN HIEROGLYPH O045
13293 ; [.50A6.0020.0002] # EGYPTIAN HIEROGLYPH O046
13294 ; [.50A7.0020.0002] # EGYPTIAN HIEROGLYPH O047
13295 ; [.50A8.0020.0002] # EGYPTIAN HIEROGLYPH O048
13296 ; [.50A9.0020.0002] # EGYPTIAN HIEROGLYPH O049
13297 ; [.50AA.0020.0002] # EGYPTIAN HIEROGLYPH O050
13298 ; [.50AB.0020.0002] # EGYPTIAN HIEROGLYPH O050A
13299 ; [.50AC.0020.0002] # EGYPTIAN HIEROGLYPH O050B
1329A ; [.50AD.0020.0002] # EGYPTIAN HIEROGLYPH O051
1329B ; [.50AE.0020.0002] # EGYPTIAN HIEROGLYPH P001
1329C ; [.50AF.0020.0002] # EGYPTIAN HIEROGLYPH P001A
1329D ; [.50B0.0020.0002] # EGYPTIAN HIEROGLYPH P002
1329E ; [.50B1.0020.0002] # EGYPTIAN HIEROGLYPH P003
1329F ; [.50B2.0020.0002] # EGYPTIAN HIEROGLYPH P003A
132A0 ; [.50B3.0020.0002] # EGYPTIAN HIEROGLYPH P004
132A1 ; [.50B4.0020.0002] # EGYPTIAN HIEROGLYPH P005
132A2 ; [.50B5.0020.0002] # EGYPTIAN HIEROGLYPH P006
132A3 ; [.50B6.0020.0002] # EGYPTIAN HIEROGLYPH P007
132A4 ; [.50B7.0020.0002] # EGYPTIAN HIEROGLYPH P008
132A5 ; [.50B8.0020.0002] # EGYPTIAN HIEROGLYPH P009
132A6 ; [.50B9.0020.0002] # EGYPTIAN HIEROGLYPH P010
132A7 ; [.50BA.0020.0002] # EGYPTIAN HIEROGLYPH P011
132A8 ; [.50BB.0020.0002] # EGYPTIAN HIEROGLYPH Q001
132A9 ; [.50BC.0020.0002] # EGYPTIAN HIEROGLYPH Q002
132AA ; [.50BD.0020.0002] # EGYPTIAN HIEROGLYPH Q003
132AB ; [.50BE.0020.0002] # EGYPTIAN HIEROGLYPH Q004
132AC ; [.50BF.0020.0002] # EGYPTIAN HIEROGLYPH Q005
132AD ; [.50C0.0020.0002] # EGYPTIAN HIEROGLYPH Q006
132AE ; [.50C1.0020.0002] # EGYPTIAN HIEROGLYPH Q007
132AF ; [.50C2.0020.0002] # EGYPTIAN HIEROGLYPH R001
132B0 ; [.50C3.0020.0002] # EGYPTIAN HIEROGLYPH R002
132B1 ; [.50C4.0020.0002] # EGYPTIAN HIEROGLYPH R002A
132B2 ; [.50C5.0020.0002] # EGYPTIAN HIEROGLYPH R003
132B3 ; [.50C6.0020.0002] # EGYPTIAN HIEROGLYPH R003A
132B4 ; [.50C7.0020.0002] # EGYPTIAN HIEROGLYPH R003B
132B5 ; [.50C8.0020.0002] # EGYPTIAN HIEROGLYPH R004
132B6 ; [.50C9.0020.0002] # EGYPTIAN HIEROGLYPH R005
132B7 ; [.50CA.0020.0002] # EGYPTIAN HIEROGLYPH R006
132B8 ; [.50CB.0020.0002] # EGYPTIAN HIEROGLYPH R007
132B9 ; [.50CC.0020.0002] # EGYPTIAN HIEROGLYPH R008
132BA ; [.50CD.0020.0002] # EGYPTIAN HIEROGLYPH R009
132BB ; [.50CE.0020.0002] # EGYPTIAN HIEROGLYPH R010
132BC ; [.50CF.0020.0002] # EGYPTIAN HIEROGLYPH R010A
132BD ; [.50D0.0020.0002] # EGYPTIAN HIEROGLYPH R011
132BE ; [.50D1.0020.0002] # EGYPTIAN HIEROGLYPH R012
132BF ; [.50D2.0020.0002] # EGYPTIAN HIEROGLYPH R013
132C0 ; [.50D3.0020.0002] # EGYPTIAN HIEROGLYPH R014
132C1 ; [.50D4.0020.0002] # EGYPTIAN HIEROGLYPH R015
132C2 ; [.50D5.0020.0002] # EGYPTIAN HIEROGLYPH R016
132C3 ; [.50D6.0020.0002] # EGYPTIAN HIEROGLYPH R016A
132C4 ; [.50D7.0020.0002] # EGYPTIAN HIEROGLYPH R017
132C5 ; [.50D8.0020.0002] # EGYPTIAN HIEROGLYPH R018
132C6 ; [.50D9.0020.0002] # EGYPTIAN HIEROGLYPH R019
132C7 ; [.50DA.0020.0002] # EGYPTIAN HIEROGLYPH R020
132C8 ; [.50DB.0020.0002] # EGYPTIAN HIEROGLYPH R021
132C9 ; [.50DC.0020.0002] # EGYPTIAN HIEROGLYPH R022
132CA ; [.50DD.0020.0002] # EGYPTIAN HIEROGLYPH R023
132CB ; [.50DE.0020.0002] # EGYPTIAN HIEROGLYPH R024
132CC ; [.50DF.0020.0002] # EGYPTIAN HIEROGLYPH R025
132CD ; [.50E0.0020.0002] # EGYPTIAN HIEROGLYPH R026
132CE ; [.50E1.0020.0002] # EGYPTIAN HIEROGLYPH R027
132CF ; [.50E2.0020.0002] # EGYPTIAN HIEROGLYPH R028
132D0 ; [.50E3.0020.0002] # EGYPTIAN HIEROGLYPH R029
132D1 ; [.50E4.0020.0002] # EGYPTIAN HIEROGLYPH S001
132D2 ; [.50E5.0020.0002] # EGYPTIAN HIEROGLYPH S002
132D3 ; [.50E6.0020.0002] # EGYPTIAN HIEROGLYPH S002A
132D4 ; [.50E7.0020.0002] # EGYPTIAN HIEROGLYPH S003
132D5 ; [.50E8.0020.0002] # EGYPTIAN HIEROGLYPH S004
132D6 ; [.50E9.0020.0002] # EGYPTIAN HIEROGLYPH S005
132D7 ; [.50EA.0020.0002] # EGYPTIAN HIEROGLYPH S006
132D8 ; [.50EB.0020.0002] # EGYPTIAN HIEROGLYPH S006A
132D9 ; [.50EC.0020.0002] # EGYPTIAN HIEROGLYPH S007
132DA ; [.50ED.0020.0002] # EGYPTIAN HIEROGLYPH S008
132DB ; [.50EE.0020.0002] # EGYPTIAN HIEROGLYPH S009
132DC ; [.50EF.0020.0002] # EGYPTIAN HIEROGLYPH S010
132DD ; [.50F0.0020.0002] # EGYPTIAN HIEROGLYPH S011
132DE ; [.50F1.0020.0002] # EGYPTIAN HIEROGLYPH S012
132DF ; [.50F2.0020.0002] # EGYPTIAN HIEROGLYPH S013
132E0 ; [.50F3.0020.0002] # EGYPTIAN HIEROGLYPH S014
132E1 ; [.50F4.0020.0002] # EGYPTIAN HIEROGLYPH S014A
132E2 ; [.50F5.0020.0002] # EGYPTIAN HIEROGLYPH S014B
132E3 ; [.50F6.0020.0002] # EGYPTIAN HIEROGLYPH S015
132E4 ; [.50F7.0020.0002] # EGYPTIAN HIEROGLYPH S016
132E5 ; [.50F8.0020.0002] # EGYPTIAN HIEROGLYPH S017
132E6 ; [.50F9.0020.0002] # EGYPTIAN HIEROGLYPH S017A
132E7 ; [.50FA.0020.0002] # EGYPTIAN HIEROGLYPH S018
132E8 ; [.50FB.0020.0002] # EGYPTIAN HIEROGLYPH S019
132E9 ; [.50FC.0020.0002] # EGYPTIAN HIEROGLYPH S020
132EA ; [.50FD.0020.0002] # EGYPTIAN HIEROGLYPH S021
132EB ; [.50FE.0020.0002] # EGYPTIAN HIEROGLYPH S022
132EC ; [.50FF.0020.0002] # EGYPTIAN HIEROGLYPH S023
132ED ; [.5100.0020.0002] # EGYPTIAN HIEROGLYPH S024
132EE ; [.5101.0020.0002] # EGYPTIAN HIEROGLYPH S025
132EF ; [.5102.0020.0002] # EGYPTIAN HIEROGLYPH S026
132F0 ; [.5103.0020.0002] # EGYPTIAN HIEROGLYPH S026A
132F1 ; [.5104.0020.0002] # EGYPTIAN HIEROGLYPH S026B
132F2 ; [.5105.0020.0002] # EGYPTIAN HIEROGLYPH S027
132F3 ; [.5106.0020.0002] # EGYPTIAN HIEROGLYPH S028
132F4 ; [.5107.0020.0002] # EGYPTIAN HIEROGLYPH S029
132F5 ; [.5108.0020.0002] # EGYPTIAN HIEROGLYPH S030
132F6 ; [.5109.0020.0002] # EGYPTIAN HIEROGLYPH S031
132F7 ; [.510A.0020.0002] # EGYPTIAN HIEROGLYPH S032
132F8 ; [.510B.0020.0002] # EGYPTIAN HIEROGLYPH S033
132F9 ; [.510C.0020.0002] # EGYPTIAN HIEROGLYPH S034
132FA ; [.510D.0020.0002] # EGYPTIAN HIEROGLYPH S035
132FB ; [.510E.0020.0002] # EGYPTIAN HIEROGLYPH S035A
132FC ; [.510F.0020.0002] # EGYPTIAN HIEROGLYPH S036
132FD ; [.5110.0020.0002] # EGYPTIAN HIEROGLYPH S037
132FE ; [.5111.0020.0002] # EGYPTIAN HIEROGLYPH S038
132FF ; [.5112.0020.0002] # EGYPTIAN HIEROGLYPH S039
13300 ; [.5113.0020.0002] # EGYPTIAN HIEROGLYPH S040
13301 ; [.5114.0020.0002] # EGYPTIAN HIEROGLYPH S041
13302 ; [.5115.0020.0002] # EGYPTIAN HIEROGLYPH S042
13303 ; [.5116.0020.0002] # EGYPTIAN HIEROGLYPH S043
13304 ; [.5117.0020.0002] # EGYPTIAN HIEROGLYPH S044
13305 ; [.5118.0020.0002] # EGYPTIAN HIEROGLYPH S045
13306 ; [.5119.0020.0002] # EGYPTIAN HIEROGLYPH S046
13307 ; [.511A.0020.0002] # EGYPTIAN HIEROGLYPH T001
13308 ; [.511B.0020.0002] # EGYPTIAN HIEROGLYPH T002
13309 ; [.511C.0020.0002] # EGYPTIAN HIEROGLYPH T003
1330A ; [.511D.0020.0002] # EGYPTIAN HIEROGLYPH T003A
1330B ; [.511E.0020.0002] # EGYPTIAN HIEROGLYPH T004
1330C ; [.511F.0020.0002] # EGYPTIAN HIEROGLYPH T005
1330D ; [.5120.0020.0002] # EGYPTIAN HIEROGLYPH T006
1330E ; [.5121.0020.0002] # EGYPTIAN HIEROGLYPH T007
1330F ; [.5122.0020.0002] # EGYPTIAN HIEROGLYPH T007A
13310 ; [.5123.0020.0002] # EGYPTIAN HIEROGLYPH T008
13311 ; [.5124.0020.0002] # EGYPTIAN HIEROGLYPH T008A
13312 ; [.5125.0020.0002] # EGYPTIAN HIEROGLYPH T009
13313 ; [.5126.0020.0002] # EGYPTIAN HIEROGLYPH T009A
13314 ; [.5127.0020.0002] # EGYPTIAN HIEROGLYPH T010
13315 ; [.5128.0020.0002] # EGYPTIAN HIEROGLYPH T011
13316 ; [.5129.0020.0002] # EGYPTIAN HIEROGLYPH T011A
13317 ; [.512A.0020.0002] # EGYPTIAN HIEROGLYPH T012
13318 ; [.512B.0020.0002] # EGYPTIAN HIEROGLYPH T013
13319 ; [.512C.0020.0002] # EGYPTIAN HIEROGLYPH T014
1331A ; [.512D.0020.0002] # EGYPTIAN HIEROGLYPH T015
1331B ; [.512E.0020.0002] # EGYPTIAN HIEROGLYPH T016
1331C ; [.512F.0020.0002] # EGYPTIAN HIEROGLYPH T016A
1331D ; [.5130.0020.0002] # EGYPTIAN HIEROGLYPH T017
1331E ; [.5131.0020.0002] # EGYPTIAN HIEROGLYPH T018
1331F ; [.5132.0020.0002] # EGYPTIAN HIEROGLYPH T019
13320 ; [.5133.0020.0002] # EGYPTIAN HIEROGLYPH T020
13321 ; [.5134.0020.0002] # EGYPTIAN HIEROGLYPH T021
13322 ; [.5135.0020.0002] # EGYPTIAN HIEROGLYPH T022
13323 ; [.5136.0020.0002] # EGYPTIAN HIEROGLYPH T023
13324 ; [.5137.0020.0002] # EGYPTIAN HIEROGLYPH T024
13325 ; [.5138.0020.0002] # EGYPTIAN HIEROGLYPH T025
13326 ; [.5139.0020.0002] # EGYPTIAN HIEROGLYPH T026
13327 ; [.513A.0020.0002] # EGYPTIAN HIEROGLYPH T027
13328 ; [.513B.0020.0002] # EGYPTIAN HIEROGLYPH T028
13329 ; [.513C.0020.0002] # EGYPTIAN HIEROGLYPH T029
1332A ; [.513D.0020.0002] # EGYPTIAN HIEROGLYPH T030
1332B ; [.513E.0020.0002] # EGYPTIAN HIEROGLYPH T031
1332C ; [.513F.0020.0002] # EGYPTIAN HIEROGLYPH T032
1332D ; [.5140.0020.0002] # EGYPTIAN HIEROGLYPH T032A
1332E ; [.5141.0020.0002] # EGYPTIAN HIEROGLYPH T033
1332F ; [.5142.0020.0002] # EGYPTIAN HIEROGLYPH T033A
13330 ; [.5143.0020.0002] # EGYPTIAN HIEROGLYPH T034
13331 ; [.5144.0020.0002] # EGYPTIAN HIEROGLYPH T035
13332 ; [.5145.0020.0002] # EGYPTIAN HIEROGLYPH T036
13333 ; [.5146.0020.0002] # EGYPTIAN HIEROGLYPH U001
13334 ; [.5147.0020.0002] # EGYPTIAN HIEROGLYPH U002
13335 ; [.5148.0020.0002] # EGYPTIAN HIEROGLYPH U003
13336 ; [.5149.0020.0002] # EGYPTIAN HIEROGLYPH U004
13337 ; [.514A.0020.0002] # EGYPTIAN HIEROGLYPH U005
13338 ; [.514B.0020.0002] # EGYPTIAN HIEROGLYPH U006
13339 ; [.514C.0020.0002] # EGYPTIAN HIEROGLYPH U006A
1333A ; [.514D.0020.0002] # EGYPTIAN HIEROGLYPH U006B
1333B ; [.514E.0020.0002] # EGYPTIAN HIEROGLYPH U007
1333C ; [.514F.0020.0002] # EGYPTIAN HIEROGLYPH U008
1333D ; [.5150.0020.0002] # EGYPTIAN HIEROGLYPH U009
1333E ; [.5151.0020.0002] # EGYPTIAN HIEROGLYPH U010
1333F ; [.5152.0020.0002] # EGYPTIAN HIEROGLYPH U011
13340 ; [.5153.0020.0002] # EGYPTIAN HIEROGLYPH U012
13341 ; [.5154.0020.0002] # EGYPTIAN HIEROGLYPH U013
13342 ; [.5155.0020.0002] # EGYPTIAN HIEROGLYPH U014
13343 ; [.5156.0020.0002] # EGYPTIAN HIEROGLYPH U015
13344 ; [.5157.0020.0002] # EGYPTIAN HIEROGLYPH U016
13345 ; [.5158.0020.0002] # EGYPTIAN HIEROGLYPH U017
13346 ; [.5159.0020.0002] # EGYPTIAN HIEROGLYPH U018
13347 ; [.515A.0020.0002] # EGYPTIAN HIEROGLYPH U019
13348 ; [.515B.0020.0002] # EGYPTIAN HIEROGLYPH U020
13349 ; [.515C.0020.0002] # EGYPTIAN HIEROGLYPH U021
1334A ; [.515D.0020.0002] # EGYPTIAN HIEROGLYPH U022
1334B ; [.515E.0020.0002] # EGYPTIAN HIEROGLYPH U023
1334C ; [.515F.0020.0002] # EGYPTIAN HIEROGLYPH U023A
1334D ; [.5160.0020.0002] # EGYPTIAN HIEROGLYPH U024
1334E ; [.5161.0020.0002] # EGYPTIAN HIEROGLYPH U025
1334F ; [.5162.0020.0002] # EGYPTIAN HIEROGLYPH U026
13350 ; [.5163.0020.0002] # EGYPTIAN HIEROGLYPH U027
13351 ; [.5164.0020.0002] # EGYPTIAN HIEROGLYPH U028
13352 ; [.5165.0020.0002] # EGYPTIAN HIEROGLYPH U029
13353 ; [.5166.0020.0002] # EGYPTIAN HIEROGLYPH U029A
13354 ; [.5167.0020.0002] # EGYPTIAN HIEROGLYPH U030
13355 ; [.5168.0020.0002] # EGYPTIAN HIEROGLYPH U031
13356 ; [.5169.0020.0002] # EGYPTIAN HIEROGLYPH U032
13357 ; [.516A.0020.0002] # EGYPTIAN HIEROGLYPH U032A
13358 ; [.516B.0020.0002] # EGYPTIAN HIEROGLYPH U033
13359 ; [.516C.0020.0002] # EGYPTIAN HIEROGLYPH U034
1335A ; [.516D.0020.0002] # EGYPTIAN HIEROGLYPH U035
1335B ; [.516E.0020.0002] # EGYPTIAN HIEROGLYPH U036
1335C ; [.516F.0020.0002] # EGYPTIAN HIEROGLYPH U037
1335D ; [.5170.0020.0002] # EGYPTIAN HIEROGLYPH U038
1335E ; [.5171.0020.0002] # EGYPTIAN HIEROGLYPH U039
1335F ; [.5172.0020.0002] # EGYPTIAN HIEROGLYPH U040
13360 ; [.5173.0020.0002] # EGYPTIAN HIEROGLYPH U041
13361 ; [.5174.0020.0002] # EGYPTIAN HIEROGLYPH U042
13362 ; [.5175.0020.0002] # EGYPTIAN HIEROGLYPH V001
13363 ; [.5176.0020.0002] # EGYPTIAN HIEROGLYPH V001A
13364 ; [.5177.0020.0002] # EGYPTIAN HIEROGLYPH V001B
13365 ; [.5178.0020.0002] # EGYPTIAN HIEROGLYPH V001C
13366 ; [.5179.0020.0002] # EGYPTIAN HIEROGLYPH V001D
13367 ; [.517A.0020.0002] # EGYPTIAN HIEROGLYPH V001E
13368 ; [.517B.0020.0002] # EGYPTIAN HIEROGLYPH V001F
13369 ; [.517C.0020.0002] # EGYPTIAN HIEROGLYPH V001G
1336A ; [.517D.0020.0002] # EGYPTIAN HIEROGLYPH V001H
1336B ; [.517E.0020.0002] # EGYPTIAN HIEROGLYPH V001I
1336C ; [.517F.0020.0002] # EGYPTIAN HIEROGLYPH V002
1336D ; [.5180.0020.0002] # EGYPTIAN HIEROGLYPH V002A
1336E ; [.5181.0020.0002] # EGYPTIAN HIEROGLYPH V003
1336F ; [.5182.0020.0002] # EGYPTIAN HIEROGLYPH V004
13370 ; [.5183.0020.0002] # EGYPTIAN HIEROGLYPH V005
13371 ; [.5184.0020.0002] # EGYPTIAN HIEROGLYPH V006
13372 ; [.5185.0020.0002] # EGYPTIAN HIEROGLYPH V007
13373 ; [.5186.0020.0002] # EGYPTIAN HIEROGLYPH V007A
13374 ; [.5187.0020.0002] # EGYPTIAN HIEROGLYPH V007B
13375 ; [.5188.0020.0002] # EGYPTIAN HIEROGLYPH V008
13376 ; [.5189.0020.0002] # EGYPTIAN HIEROGLYPH V009
13377 ; [.518A.0020.0002] # EGYPTIAN HIEROGLYPH V010
13378 ; [.518B.0020.0002] # EGYPTIAN HIEROGLYPH V011
13379 ; [.518C.0020.0002] # EGYPTIAN HIEROGLYPH V011A
1337A ; [.518D.0020.0002] # EGYPTIAN HIEROGLYPH V011B
1337B ; [.518E.0020.0002] # EGYPTIAN HIEROGLYPH V011C
1337C ; [.518F.0020.0002] # EGYPTIAN HIEROGLYPH V012
1337D ; [.5190.0020.0002] # EGYPTIAN HIEROGLYPH V012A
1337E ; [.5191.0020.0002] # EGYPTIAN HIEROGLYPH V012B
1337F ; [.5192.0020.0002] # EGYPTIAN HIEROGLYPH V013
13380 ; [.5193.0020.0002] # EGYPTIAN HIEROGLYPH V014
13381 ; [.5194.0020.0002] # EGYPTIAN HIEROGLYPH V015
13382 ; [.5195.0020.0002] # EGYPTIAN HIEROGLYPH V016
13383 ; [.5196.0020.0002] # EGYPTIAN HIEROGLYPH V017
13384 ; [.5197.0020.0002] # EGYPTIAN HIEROGLYPH V018
13385 ; [.5198.0020.0002] # EGYPTIAN HIEROGLYPH V019
13386 ; [.5199.0020.0002] # EGYPTIAN HIEROGLYPH V020
13387 ; [.519A.0020.0002] # EGYPTIAN HIEROGLYPH V020A
13388 ; [.519B.0020.0002] # EGYPTIAN HIEROGLYPH V020B
13389 ; [.519C.0020.0002] # EGYPTIAN HIEROGLYPH V020C
1338A ; [.519D.0020.0002] # EGYPTIAN HIEROGLYPH V020D
1338B ; [.519E.0020.0002] # EGYPTIAN HIEROGLYPH V020E
1338C ; [.519F.0020.0002] # EGYPTIAN HIEROGLYPH V020F
1338D ; [.51A0.0020.0002] # EGYPTIAN HIEROGLYPH V020G
1338E ; [.51A1.0020.0002] # EGYPTIAN HIEROGLYPH V020H
1338F ; [.51A2.0020.0002] # EGYPTIAN HIEROGLYPH V020I
13390 ; [.51A3.0020.0002] # EGYPTIAN HIEROGLYPH V020J
13391 ; [.51A4.0020.0002] # EGYPTIAN HIEROGLYPH V020K
13392 ; [.51A5.0020.0002] # EGYPTIAN HIEROGLYPH V020L
13393 ; [.51A6.0020.0002] # EGYPTIAN HIEROGLYPH V021
13394 ; [.51A7.0020.0002] # EGYPTIAN HIEROGLYPH V022
13395 ; [.51A8.0020.0002] # EGYPTIAN HIEROGLYPH V023
13396 ; [.51A9.0020.0002] # EGYPTIAN HIEROGLYPH V023A
13397 ; [.51AA.0020.0002] # EGYPTIAN HIEROGLYPH V024
13398 ; [.51AB.0020.0002] # EGYPTIAN HIEROGLYPH V025
13399 ; [.51AC.0020.0002] # EGYPTIAN HIEROGLYPH V026
1339A ; [.51AD.0020.0002] # EGYPTIAN HIEROGLYPH V027
1339B ; [.51AE.0020.0002] # EGYPTIAN HIEROGLYPH V028
1339C ; [.51AF.0020.0002] # EGYPTIAN HIEROGLYPH V028A
1339D ; [.51B0.0020.0002] # EGYPTIAN HIEROGLYPH V029
1339E ; [.51B1.0020.0002] # EGYPTIAN HIEROGLYPH V029A
1339F ; [.51B2.0020.0002] # EGYPTIAN HIEROGLYPH V030
133A0 ; [.51B3.0020.0002] # EGYPTIAN HIEROGLYPH V030A
133A1 ; [.51B4.0020.0002] # EGYPTIAN HIEROGLYPH V031
133A2 ; [.51B5.0020.0002] # EGYPTIAN HIEROGLYPH V031A
133A3 ; [.51B6.0020.0002] # EGYPTIAN HIEROGLYPH V032
133A4 ; [.51B7.0020.0002] # EGYPTIAN HIEROGLYPH V033
133A5 ; [.51B8.0020.0002] # EGYPTIAN HIEROGLYPH V033A
133A6 ; [.51B9.0020.0002] # EGYPTIAN HIEROGLYPH V034
133A7 ; [.51BA.0020.0002] # EGYPTIAN HIEROGLYPH V035
133A8 ; [.51BB.0020.0002] # EGYPTIAN HIEROGLYPH V036
133A9 ; [.51BC.0020.0002] # EGYPTIAN HIEROGLYPH V037
133AA ; [.51BD.0020.0002] # EGYPTIAN HIEROGLYPH V037A
133AB ; [.51BE.0020.0002] # EGYPTIAN HIEROGLYPH V038
133AC ; [.51BF.0020.0002] # EGYPTIAN HIEROGLYPH V039
133AD ; [.51C0.0020.0002] # EGYPTIAN HIEROGLYPH V040
133AE ; [.51C1.0020.0002] # EGYPTIAN HIEROGLYPH V040A
133AF ; [.51C2.0020.0002] # EGYPTIAN HIEROGLYPH W001
133B0 ; [.51C3.0020.0002] # EGYPTIAN HIEROGLYPH W002
133B1 ; [.51C4.0020.0002] # EGYPTIAN HIEROGLYPH W003
133B2 ; [.51C5.0020.0002] # EGYPTIAN HIEROGLYPH W003A
133B3 ; [.51C6.0020.0002] # EGYPTIAN HIEROGLYPH W004
133B4 ; [.51C7.0020.0002] # EGYPTIAN HIEROGLYPH W005
133B5 ; [.51C8.0020.0002] # EGYPTIAN HIEROGLYPH W006
133B6 ; [.51C9.0020.0002] # EGYPTIAN HIEROGLYPH W007
133B7 ; [.51CA.0020.0002] # EGYPTIAN HIEROGLYPH W008
133B8 ; [.51CB.0020.0002] # EGYPTIAN HIEROGLYPH W009
133B9 ; [.51CC.0020.0002] # EGYPTIAN HIEROGLYPH W009A
133BA ; [.51CD.0020.0002] # EGYPTIAN HIEROGLYPH W010
133BB ; [.51CE.0020.0002] # EGYPTIAN HIEROGLYPH W010A
133BC ; [.51CF.0020.0002] # EGYPTIAN HIEROGLYPH W011
133BD ; [.51D0.0020.0002] # EGYPTIAN HIEROGLYPH W012
133BE ; [.51D1.0020.0002] # EGYPTIAN HIEROGLYPH W013
133BF ; [.51D2.0020.0002] # EGYPTIAN HIEROGLYPH W014
133C0 ; [.51D3.0020.0002] # EGYPTIAN HIEROGLYPH W014A
133C1 ; [.51D4.0020.0002] # EGYPTIAN HIEROGLYPH W015
133C2 ; [.51D5.0020.0002] # EGYPTIAN HIEROGLYPH W016
133C3 ; [.51D6.0020.0002] # EGYPTIAN HIEROGLYPH W017
133C4 ; [.51D7.0020.0002] # EGYPTIAN HIEROGLYPH W017A
133C5 ; [.51D8.0020.0002] # EGYPTIAN HIEROGLYPH W018
133C6 ; [.51D9.0020.0002] # EGYPTIAN HIEROGLYPH W018A
133C7 ; [.51DA.0020.0002] # EGYPTIAN HIEROGLYPH W019
133C8 ; [.51DB.0020.0002] # EGYPTIAN HIEROGLYPH W020
133C9 ; [.51DC.0020.0002] # EGYPTIAN HIEROGLYPH W021
133CA ; [.51DD.0020.0002] # EGYPTIAN HIEROGLYPH W022
133CB ; [.51DE.0020.0002] # EGYPTIAN HIEROGLYPH W023
133CC ; [.51DF.0020.0002] # EGYPTIAN HIEROGLYPH W024
133CD ; [.51E0.0020.0002] # EGYPTIAN HIEROGLYPH W024A
133CE ; [.51E1.0020.0002] # EGYPTIAN HIEROGLYPH W025
133CF ; [.51E2.0020.0002] # EGYPTIAN HIEROGLYPH X001
133D0 ; [.51E3.0020.0002] # EGYPTIAN HIEROGLYPH X002
133D1 ; [.51E4.0020.0002] # EGYPTIAN HIEROGLYPH X003
133D2 ; [.51E5.0020.0002] # EGYPTIAN HIEROGLYPH X004
133D3 ; [.51E6.0020.0002] # EGYPTIAN HIEROGLYPH X004A
133D4 ; [.51E7.0020.0002] # EGYPTIAN HIEROGLYPH X004B
133D5 ; [.51E8.0020.0002] # EGYPTIAN HIEROGLYPH X005
133D6 ; [.51E9.0020.0002] # EGYPTIAN HIEROGLYPH X006
133D7 ; [.51EA.0020.0002] # EGYPTIAN HIEROGLYPH X006A
133D8 ; [.51EB.0020.0002] # EGYPTIAN HIEROGLYPH X007
133D9 ; [.51EC.0020.0002] # EGYPTIAN HIEROGLYPH X008
133DA ; [.51ED.0020.0002] # EGYPTIAN HIEROGLYPH X008A
133DB ; [.51EE.0020.0002] # EGYPTIAN HIEROGLYPH Y001
133DC ; [.51EF.0020.0002] # EGYPTIAN HIEROGLYPH Y001A
133DD ; [.51F0.0020.0002] # EGYPTIAN HIEROGLYPH Y002
133DE ; [.51F1.0020.0002] # EGYPTIAN HIEROGLYPH Y003
133DF ; [.51F2.0020.0002] # EGYPTIAN HIEROGLYPH Y004
133E0 ; [.51F3.0020.0002] # EGYPTIAN HIEROGLYPH Y005
133E1 ; [.51F4.0020.0002] # EGYPTIAN HIEROGLYPH Y006
133E2 ; [.51F5.0020.0002] # EGYPTIAN HIEROGLYPH Y007
133E3 ; [.51F6.0020.0002] # EGYPTIAN HIEROGLYPH Y008
133E4 ; [.51F7.0020.0002] # EGYPTIAN HIEROGLYPH Z001
133E5 ; [.51F8.0020.0002] # EGYPTIAN HIEROGLYPH Z002
133E6 ; [.51F9.0020.0002] # EGYPTIAN HIEROGLYPH Z002A
133E7 ; [.51FA.0020.0002] # EGYPTIAN HIEROGLYPH Z002B
133E8 ; [.51FB.0020.0002] # EGYPTIAN HIEROGLYPH Z002C
133E9 ; [.51FC.0020.0002] # EGYPTIAN HIEROGLYPH Z002D
133EA ; [.51FD.0020.0002] # EGYPTIAN HIEROGLYPH Z003
133EB ; [.51FE.0020.0002] # EGYPTIAN HIEROGLYPH Z003A
133EC ; [.51FF.0020.0002] # EGYPTIAN HIEROGLYPH Z003B
133ED ; [.5200.0020.0002] # EGYPTIAN HIEROGLYPH Z004
133EE ; [.5201.0020.0002] # EGYPTIAN HIEROGLYPH Z004A
133EF ; [.5202.0020.0002] # EGYPTIAN HIEROGLYPH Z005
133F0 ; [.5203.0020.0002] # EGYPTIAN HIEROGLYPH Z005A
133F1 ; [.5204.0020.0002] # EGYPTIAN HIEROGLYPH Z006
133F2 ; [.5205.0020.0002] # EGYPTIAN HIEROGLYPH Z007
133F3 ; [.5206.0020.0002] # EGYPTIAN HIEROGLYPH Z008
133F4 ; [.5207.0020.0002] # EGYPTIAN HIEROGLYPH Z009
133F5 ; [.5208.0020.0002] # EGYPTIAN HIEROGLYPH Z010
133F6 ; [.5209.0020.0002] # EGYPTIAN HIEROGLYPH Z011
133F7 ; [.520A.0020.0002] # EGYPTIAN HIEROGLYPH Z012
133F8 ; [.520B.0020.0002] # EGYPTIAN HIEROGLYPH Z013
133F9 ; [.520C.0020.0002] # EGYPTIAN HIEROGLYPH Z014
133FA ; [.520D.0020.0002] # EGYPTIAN HIEROGLYPH Z015
133FB ; [.520E.0020.0002] # EGYPTIAN HIEROGLYPH Z015A
133FC ; [.520F.0020.0002] # EGYPTIAN HIEROGLYPH Z015B
133FD ; [.5210.0020.0002] # EGYPTIAN HIEROGLYPH Z015C
133FE ; [.5211.0020.0002] # EGYPTIAN HIEROGLYPH Z015D
133FF ; [.5212.0020.0002] # EGYPTIAN HIEROGLYPH Z015E
13400 ; [.5213.0020.0002] # EGYPTIAN HIEROGLYPH Z015F
13401 ; [.5214.0020.0002] # EGYPTIAN HIEROGLYPH Z015G
13402 ; [.5215.0020.0002] # EGYPTIAN HIEROGLYPH Z015H
13403 ; [.5216.0020.0002] # EGYPTIAN HIEROGLYPH Z015I
13404 ; [.5217.0020.0002] # EGYPTIAN HIEROGLYPH Z016
13405 ; [.5218.0020.0002] # EGYPTIAN HIEROGLYPH Z016A
13406 ; [.5219.0020.0002] # EGYPTIAN HIEROGLYPH Z016B
13407 ; [.521A.0020.0002] # EGYPTIAN HIEROGLYPH Z016C
13408 ; [.521B.0020.0002] # EGYPTIAN HIEROGLYPH Z016D
13409 ; [.521C.0020.0002] # EGYPTIAN HIEROGLYPH Z016E
1340A ; [.521D.0020.0002] # EGYPTIAN HIEROGLYPH Z016F
1340B ; [.521E.0020.0002] # EGYPTIAN HIEROGLYPH Z016G
1340C ; [.521F.0020.0002] # EGYPTIAN HIEROGLYPH Z016H
1340D ; [.5220.0020.0002] # EGYPTIAN HIEROGLYPH AA001
1340E ; [.5221.0020.0002] # EGYPTIAN HIEROGLYPH AA002
1340F ; [.5222.0020.0002] # EGYPTIAN HIEROGLYPH AA003
13410 ; [.5223.0020.0002] # EGYPTIAN HIEROGLYPH AA004
13411 ; [.5224.0020.0002] # EGYPTIAN HIEROGLYPH AA005
13412 ; [.5225.0020.0002] # EGYPTIAN HIEROGLYPH AA006
13413 ; [.5226.0020.0002] # EGYPTIAN HIEROGLYPH AA007
13414 ; [.5227.0020.0002] # EGYPTIAN HIEROGLYPH AA007A
13415 ; [.5228.0020.0002] # EGYPTIAN HIEROGLYPH AA007B
13416 ; [.5229.0020.0002] # EGYPTIAN HIEROGLYPH AA008
13417 ; [.522A.0020.0002] # EGYPTIAN HIEROGLYPH AA009
13418 ; [.522B.0020.0002] # EGYPTIAN HIEROGLYPH AA010
13419 ; [.522C.0020.0002] # EGYPTIAN HIEROGLYPH AA011
1341A ; [.522D.0020.0002] # EGYPTIAN HIEROGLYPH AA012
1341B ; [.522E.0020.0002] # EGYPTIAN HIEROGLYPH AA013
1341C ; [.522F.0020.0002] # EGYPTIAN HIEROGLYPH AA014
1341D ; [.5230.0020.0002] # EGYPTIAN HIEROGLYPH AA015
1341E ; [.5231.0020.0002] # EGYPTIAN HIEROGLYPH AA016
1341F ; [.5232.0020.0002] # EGYPTIAN HIEROGLYPH AA017
13420 ; [.5233.0020.0002] # EGYPTIAN HIEROGLYPH AA018
13421 ; [.5234.0020.0002] # EGYPTIAN HIEROGLYPH AA019
13422 ; [.5235.0020.0002] # EGYPTIAN HIEROGLYPH AA020
13423 ; [.5236.0020.0002] # EGYPTIAN HIEROGLYPH AA021
13424 ; [.5237.0020.0002] # EGYPTIAN HIEROGLYPH AA022
13425 ; [.5238.0020.0002] # EGYPTIAN HIEROGLYPH AA023
13426 ; [.5239.0020.0002] # EGYPTIAN HIEROGLYPH AA024
13427 ; [.523A.0020.0002] # EGYPTIAN HIEROGLYPH AA025
13428 ; [.523B.0020.0002] # EGYPTIAN HIEROGLYPH AA026
13429 ; [.523C.0020.0002] # EGYPTIAN HIEROGLYPH AA027
1342A ; [.523D.0020.0002] # EGYPTIAN HIEROGLYPH AA028
1342B ; [.523E.0020.0002] # EGYPTIAN HIEROGLYPH AA029
1342C ; [.523F.0020.0002] # EGYPTIAN HIEROGLYPH AA030
1342D ; [.5240.0020.0002] # EGYPTIAN HIEROGLYPH AA031
1342E ; [.5241.0020.0002] # EGYPTIAN HIEROGLYPH AA032
109A0 ; [.5242.0020.0002] # MEROITIC CURSIVE LETTER A
10980 ; [.5242.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER A
109A1 ; [.5243.0020.0002] # MEROITIC CURSIVE LETTER E
10981 ; [.5243.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER E
109A2 ; [.5244.0020.0002] # MEROITIC CURSIVE LETTER I
10982 ; [.5244.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER I
109A3 ; [.5245.0020.0002] # MEROITIC CURSIVE LETTER O
10983 ; [.5245.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER O
109A4 ; [.5246.0020.0002] # MEROITIC CURSIVE LETTER YA
10984 ; [.5246.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER YA
109A5 ; [.5247.0020.0002] # MEROITIC CURSIVE LETTER WA
10985 ; [.5247.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER WA
109A6 ; [.5248.0020.0002] # MEROITIC CURSIVE LETTER BA
10986 ; [.5248.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER BA
10987 ; [.5248.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER BA-2
109A7 ; [.5249.0020.0002] # MEROITIC CURSIVE LETTER PA
10988 ; [.5249.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER PA
109A8 ; [.524A.0020.0002] # MEROITIC CURSIVE LETTER MA
10989 ; [.524A.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER MA
109A9 ; [.524B.0020.0002] # MEROITIC CURSIVE LETTER NA
1098A ; [.524B.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER NA
1098B ; [.524B.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER NA-2
109AA ; [.524C.0020.0002] # MEROITIC CURSIVE LETTER NE
1098C ; [.524C.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER NE
1098D ; [.524C.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER NE-2
109AB ; [.524D.0020.0002] # MEROITIC CURSIVE LETTER RA
1098E ; [.524D.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER RA
1098F ; [.524D.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER RA-2
109AC ; [.524E.0020.0002] # MEROITIC CURSIVE LETTER LA
10990 ; [.524E.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER LA
109AD ; [.524F.0020.0002] # MEROITIC CURSIVE LETTER KHA
10991 ; [.524F.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER KHA
109AE ; [.5250.0020.0002] # MEROITIC CURSIVE LETTER HHA
10992 ; [.5250.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER HHA
109AF ; [.5251.0020.0002] # MEROITIC CURSIVE LETTER SA
109B0 ; [.5251.0020.0004][.0000.0110.0004] # MEROITIC CURSIVE LETTER ARCHAIC SA
10993 ; [.5251.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER SA
10994 ; [.5251.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER SA-2
109B1 ; [.5252.0020.0002] # MEROITIC CURSIVE LETTER SE
10995 ; [.5252.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER SE
109B2 ; [.5253.0020.0002] # MEROITIC CURSIVE LETTER KA
10996 ; [.5253.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER KA
109B3 ; [.5254.0020.0002] # MEROITIC CURSIVE LETTER QA
10997 ; [.5254.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER QA
109B4 ; [.5255.0020.0002] # MEROITIC CURSIVE LETTER TA
10998 ; [.5255.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER TA
10999 ; [.5255.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER TA-2
109B5 ; [.5256.0020.0002] # MEROITIC CURSIVE LETTER TE
1099A ; [.5256.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER TE
1099B ; [.5256.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER TE-2
109B6 ; [.5257.0020.0002] # MEROITIC CURSIVE LETTER TO
1099C ; [.5257.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER TO
109B7 ; [.5258.0020.0002] # MEROITIC CURSIVE LETTER DA
1099D ; [.5258.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER DA
109BE ; [.5259.0020.0002] # MEROITIC CURSIVE LOGOGRAM RMT
109BF ; [.525A.0020.0002] # MEROITIC CURSIVE LOGOGRAM IMN
1099E ; [.525B.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ
1099F ; [.525C.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
14400 ; [.525D.0020.0002] # ANATOLIAN HIEROGLYPH A001
14401 ; [.525E.0020.0002] # ANATOLIAN HIEROGLYPH A002
14402 ; [.525F.0020.0002] # ANATOLIAN HIEROGLYPH A003
14403 ; [.5260.0020.0002] # ANATOLIAN HIEROGLYPH A004
14404 ; [.5261.0020.0002] # ANATOLIAN HIEROGLYPH A005
14405 ; [.5262.0020.0002] # ANATOLIAN HIEROGLYPH A006
14406 ; [.5263.0020.0002] # ANATOLIAN HIEROGLYPH A007
14407 ; [.5264.0020.0002] # ANATOLIAN HIEROGLYPH A008
14408 ; [.5265.0020.0002] # ANATOLIAN HIEROGLYPH A009
14409 ; [.5266.0020.0002] # ANATOLIAN HIEROGLYPH A010
1440A ; [.5267.0020.0002] # ANATOLIAN HIEROGLYPH A010A
1440B ; [.5268.0020.0002] # ANATOLIAN HIEROGLYPH A011
1440C ; [.5269.0020.0002] # ANATOLIAN HIEROGLYPH A012
1440D ; [.526A.0020.0002] # ANATOLIAN HIEROGLYPH A013
1440E ; [.526B.0020.0002] # ANATOLIAN HIEROGLYPH A014
1440F ; [.526C.0020.0002] # ANATOLIAN HIEROGLYPH A015
14410 ; [.526D.0020.0002] # ANATOLIAN HIEROGLYPH A016
14411 ; [.526E.0020.0002] # ANATOLIAN HIEROGLYPH A017
14412 ; [.526F.0020.0002] # ANATOLIAN HIEROGLYPH A018
14413 ; [.5270.0020.0002] # ANATOLIAN HIEROGLYPH A019
14414 ; [.5271.0020.0002] # ANATOLIAN HIEROGLYPH A020
14415 ; [.5272.0020.0002] # ANATOLIAN HIEROGLYPH A021
14416 ; [.5273.0020.0002] # ANATOLIAN HIEROGLYPH A022
14417 ; [.5274.0020.0002] # ANATOLIAN HIEROGLYPH A023
14418 ; [.5275.0020.0002] # ANATOLIAN HIEROGLYPH A024
14419 ; [.5276.0020.0002] # ANATOLIAN HIEROGLYPH A025
1441A ; [.5277.0020.0002] # ANATOLIAN HIEROGLYPH A026
1441B ; [.5278.0020.0002] # ANATOLIAN HIEROGLYPH A026A
1441C ; [.5279.0020.0002] # ANATOLIAN HIEROGLYPH A027
1441D ; [.527A.0020.0002] # ANATOLIAN HIEROGLYPH A028
1441E ; [.527B.0020.0002] # ANATOLIAN HIEROGLYPH A029
1441F ; [.527C.0020.0002] # ANATOLIAN HIEROGLYPH A030
14420 ; [.527D.0020.0002] # ANATOLIAN HIEROGLYPH A031
14421 ; [.527E.0020.0002] # ANATOLIAN HIEROGLYPH A032
14422 ; [.527F.0020.0002] # ANATOLIAN HIEROGLYPH A033
14423 ; [.5280.0020.0002] # ANATOLIAN HIEROGLYPH A034
14424 ; [.5281.0020.0002] # ANATOLIAN HIEROGLYPH A035
14425 ; [.5282.0020.0002] # ANATOLIAN HIEROGLYPH A036
14426 ; [.5283.0020.0002] # ANATOLIAN HIEROGLYPH A037
14427 ; [.5284.0020.0002] # ANATOLIAN HIEROGLYPH A038
14428 ; [.5285.0020.0002] # ANATOLIAN HIEROGLYPH A039
14429 ; [.5286.0020.0002] # ANATOLIAN HIEROGLYPH A039A
1442A ; [.5287.0020.0002] # ANATOLIAN HIEROGLYPH A040
1442B ; [.5288.0020.0002] # ANATOLIAN HIEROGLYPH A041
1442C ; [.5289.0020.0002] # ANATOLIAN HIEROGLYPH A041A
1442D ; [.528A.0020.0002] # ANATOLIAN HIEROGLYPH A042
1442E ; [.528B.0020.0002] # ANATOLIAN HIEROGLYPH A043
1442F ; [.528C.0020.0002] # ANATOLIAN HIEROGLYPH A044
14430 ; [.528D.0020.0002] # ANATOLIAN HIEROGLYPH A045
14431 ; [.528E.0020.0002] # ANATOLIAN HIEROGLYPH A045A
14432 ; [.528F.0020.0002] # ANATOLIAN HIEROGLYPH A046
14433 ; [.5290.0020.0002] # ANATOLIAN HIEROGLYPH A046A
14434 ; [.5291.0020.0002] # ANATOLIAN HIEROGLYPH A046B
14435 ; [.5292.0020.0002] # ANATOLIAN HIEROGLYPH A047
14436 ; [.5293.0020.0002] # ANATOLIAN HIEROGLYPH A048
14437 ; [.5294.0020.0002] # ANATOLIAN HIEROGLYPH A049
14438 ; [.5295.0020.0002] # ANATOLIAN HIEROGLYPH A050
14439 ; [.5296.0020.0002] # ANATOLIAN HIEROGLYPH A051
1443A ; [.5297.0020.0002] # ANATOLIAN HIEROGLYPH A052
1443B ; [.5298.0020.0002] # ANATOLIAN HIEROGLYPH A053
1443C ; [.5299.0020.0002] # ANATOLIAN HIEROGLYPH A054
1443D ; [.529A.0020.0002] # ANATOLIAN HIEROGLYPH A055
1443E ; [.529B.0020.0002] # ANATOLIAN HIEROGLYPH A056
1443F ; [.529C.0020.0002] # ANATOLIAN HIEROGLYPH A057
14440 ; [.529D.0020.0002] # ANATOLIAN HIEROGLYPH A058
14441 ; [.529E.0020.0002] # ANATOLIAN HIEROGLYPH A059
14442 ; [.529F.0020.0002] # ANATOLIAN HIEROGLYPH A060
14443 ; [.52A0.0020.0002] # ANATOLIAN HIEROGLYPH A061
14444 ; [.52A1.0020.0002] # ANATOLIAN HIEROGLYPH A062
14445 ; [.52A2.0020.0002] # ANATOLIAN HIEROGLYPH A063
14446 ; [.52A3.0020.0002] # ANATOLIAN HIEROGLYPH A064
14447 ; [.52A4.0020.0002] # ANATOLIAN HIEROGLYPH A065
14448 ; [.52A5.0020.0002] # ANATOLIAN HIEROGLYPH A066
14449 ; [.52A6.0020.0002] # ANATOLIAN HIEROGLYPH A066A
1444A ; [.52A7.0020.0002] # ANATOLIAN HIEROGLYPH A066B
1444B ; [.52A8.0020.0002] # ANATOLIAN HIEROGLYPH A066C
1444C ; [.52A9.0020.0002] # ANATOLIAN HIEROGLYPH A067
1444D ; [.52AA.0020.0002] # ANATOLIAN HIEROGLYPH A068
1444E ; [.52AB.0020.0002] # ANATOLIAN HIEROGLYPH A069
1444F ; [.52AC.0020.0002] # ANATOLIAN HIEROGLYPH A070
14450 ; [.52AD.0020.0002] # ANATOLIAN HIEROGLYPH A071
14451 ; [.52AE.0020.0002] # ANATOLIAN HIEROGLYPH A072
14452 ; [.52AF.0020.0002] # ANATOLIAN HIEROGLYPH A073
14453 ; [.52B0.0020.0002] # ANATOLIAN HIEROGLYPH A074
14454 ; [.52B1.0020.0002] # ANATOLIAN HIEROGLYPH A075
14455 ; [.52B2.0020.0002] # ANATOLIAN HIEROGLYPH A076
14456 ; [.52B3.0020.0002] # ANATOLIAN HIEROGLYPH A077
14457 ; [.52B4.0020.0002] # ANATOLIAN HIEROGLYPH A078
14458 ; [.52B5.0020.0002] # ANATOLIAN HIEROGLYPH A079
14459 ; [.52B6.0020.0002] # ANATOLIAN HIEROGLYPH A080
1445A ; [.52B7.0020.0002] # ANATOLIAN HIEROGLYPH A081
1445B ; [.52B8.0020.0002] # ANATOLIAN HIEROGLYPH A082
1445C ; [.52B9.0020.0002] # ANATOLIAN HIEROGLYPH A083
1445D ; [.52BA.0020.0002] # ANATOLIAN HIEROGLYPH A084
1445E ; [.52BB.0020.0002] # ANATOLIAN HIEROGLYPH A085
1445F ; [.52BC.0020.0002] # ANATOLIAN HIEROGLYPH A086
14460 ; [.52BD.0020.0002] # ANATOLIAN HIEROGLYPH A087
14461 ; [.52BE.0020.0002] # ANATOLIAN HIEROGLYPH A088
14462 ; [.52BF.0020.0002] # ANATOLIAN HIEROGLYPH A089
14463 ; [.52C0.0020.0002] # ANATOLIAN HIEROGLYPH A090
14464 ; [.52C1.0020.0002] # ANATOLIAN HIEROGLYPH A091
14465 ; [.52C2.0020.0002] # ANATOLIAN HIEROGLYPH A092
14466 ; [.52C3.0020.0002] # ANATOLIAN HIEROGLYPH A093
14467 ; [.52C4.0020.0002] # ANATOLIAN HIEROGLYPH A094
14468 ; [.52C5.0020.0002] # ANATOLIAN HIEROGLYPH A095
14469 ; [.52C6.0020.0002] # ANATOLIAN HIEROGLYPH A096
1446A ; [.52C7.0020.0002] # ANATOLIAN HIEROGLYPH A097
1446B ; [.52C8.0020.0002] # ANATOLIAN HIEROGLYPH A097A
1446C ; [.52C9.0020.0002] # ANATOLIAN HIEROGLYPH A098
1446D ; [.52CA.0020.0002] # ANATOLIAN HIEROGLYPH A098A
1446E ; [.52CB.0020.0002] # ANATOLIAN HIEROGLYPH A099
1446F ; [.52CC.0020.0002] # ANATOLIAN HIEROGLYPH A100
14470 ; [.52CD.0020.0002] # ANATOLIAN HIEROGLYPH A100A
14471 ; [.52CE.0020.0002] # ANATOLIAN HIEROGLYPH A101
14472 ; [.52CF.0020.0002] # ANATOLIAN HIEROGLYPH A101A
14473 ; [.52D0.0020.0002] # ANATOLIAN HIEROGLYPH A102
14474 ; [.52D1.0020.0002] # ANATOLIAN HIEROGLYPH A102A
14475 ; [.52D2.0020.0002] # ANATOLIAN HIEROGLYPH A103
14476 ; [.52D3.0020.0002] # ANATOLIAN HIEROGLYPH A104
14477 ; [.52D4.0020.0002] # ANATOLIAN HIEROGLYPH A104A
14478 ; [.52D5.0020.0002] # ANATOLIAN HIEROGLYPH A104B
14479 ; [.52D6.0020.0002] # ANATOLIAN HIEROGLYPH A104C
1447A ; [.52D7.0020.0002] # ANATOLIAN HIEROGLYPH A105
1447B ; [.52D8.0020.0002] # ANATOLIAN HIEROGLYPH A105A
1447C ; [.52D9.0020.0002] # ANATOLIAN HIEROGLYPH A105B
1447D ; [.52DA.0020.0002] # ANATOLIAN HIEROGLYPH A106
1447E ; [.52DB.0020.0002] # ANATOLIAN HIEROGLYPH A107
1447F ; [.52DC.0020.0002] # ANATOLIAN HIEROGLYPH A107A
14480 ; [.52DD.0020.0002] # ANATOLIAN HIEROGLYPH A107B
14481 ; [.52DE.0020.0002] # ANATOLIAN HIEROGLYPH A107C
14482 ; [.52DF.0020.0002] # ANATOLIAN HIEROGLYPH A108
14483 ; [.52E0.0020.0002] # ANATOLIAN HIEROGLYPH A109
14484 ; [.52E1.0020.0002] # ANATOLIAN HIEROGLYPH A110
14485 ; [.52E2.0020.0002] # ANATOLIAN HIEROGLYPH A110A
14486 ; [.52E3.0020.0002] # ANATOLIAN HIEROGLYPH A110B
14487 ; [.52E4.0020.0002] # ANATOLIAN HIEROGLYPH A111
14488 ; [.52E5.0020.0002] # ANATOLIAN HIEROGLYPH A112
14489 ; [.52E6.0020.0002] # ANATOLIAN HIEROGLYPH A113
1448A ; [.52E7.0020.0002] # ANATOLIAN HIEROGLYPH A114
1448B ; [.52E8.0020.0002] # ANATOLIAN HIEROGLYPH A115
1448C ; [.52E9.0020.0002] # ANATOLIAN HIEROGLYPH A115A
1448D ; [.52EA.0020.0002] # ANATOLIAN HIEROGLYPH A116
1448E ; [.52EB.0020.0002] # ANATOLIAN HIEROGLYPH A117
1448F ; [.52EC.0020.0002] # ANATOLIAN HIEROGLYPH A118
14490 ; [.52ED.0020.0002] # ANATOLIAN HIEROGLYPH A119
14491 ; [.52EE.0020.0002] # ANATOLIAN HIEROGLYPH A120
14492 ; [.52EF.0020.0002] # ANATOLIAN HIEROGLYPH A121
14493 ; [.52F0.0020.0002] # ANATOLIAN HIEROGLYPH A122
14494 ; [.52F1.0020.0002] # ANATOLIAN HIEROGLYPH A123
14495 ; [.52F2.0020.0002] # ANATOLIAN HIEROGLYPH A124
14496 ; [.52F3.0020.0002] # ANATOLIAN HIEROGLYPH A125
14497 ; [.52F4.0020.0002] # ANATOLIAN HIEROGLYPH A125A
14498 ; [.52F5.0020.0002] # ANATOLIAN HIEROGLYPH A126
14499 ; [.52F6.0020.0002] # ANATOLIAN HIEROGLYPH A127
1449A ; [.52F7.0020.0002] # ANATOLIAN HIEROGLYPH A128
1449B ; [.52F8.0020.0002] # ANATOLIAN HIEROGLYPH A129
1449C ; [.52F9.0020.0002] # ANATOLIAN HIEROGLYPH A130
1449D ; [.52FA.0020.0002] # ANATOLIAN HIEROGLYPH A131
1449E ; [.52FB.0020.0002] # ANATOLIAN HIEROGLYPH A132
1449F ; [.52FC.0020.0002] # ANATOLIAN HIEROGLYPH A133
144A0 ; [.52FD.0020.0002] # ANATOLIAN HIEROGLYPH A134
144A1 ; [.52FE.0020.0002] # ANATOLIAN HIEROGLYPH A135
144A2 ; [.52FF.0020.0002] # ANATOLIAN HIEROGLYPH A135A
144A3 ; [.5300.0020.0002] # ANATOLIAN HIEROGLYPH A136
144A4 ; [.5301.0020.0002] # ANATOLIAN HIEROGLYPH A137
144A5 ; [.5302.0020.0002] # ANATOLIAN HIEROGLYPH A138
144A6 ; [.5303.0020.0002] # ANATOLIAN HIEROGLYPH A139
144A7 ; [.5304.0020.0002] # ANATOLIAN HIEROGLYPH A140
144A8 ; [.5305.0020.0002] # ANATOLIAN HIEROGLYPH A141
144A9 ; [.5306.0020.0002] # ANATOLIAN HIEROGLYPH A142
144AA ; [.5307.0020.0002] # ANATOLIAN HIEROGLYPH A143
144AB ; [.5308.0020.0002] # ANATOLIAN HIEROGLYPH A144
144AC ; [.5309.0020.0002] # ANATOLIAN HIEROGLYPH A145
144AD ; [.530A.0020.0002] # ANATOLIAN HIEROGLYPH A146
144AE ; [.530B.0020.0002] # ANATOLIAN HIEROGLYPH A147
144AF ; [.530C.0020.0002] # ANATOLIAN HIEROGLYPH A148
144B0 ; [.530D.0020.0002] # ANATOLIAN HIEROGLYPH A149
144B1 ; [.530E.0020.0002] # ANATOLIAN HIEROGLYPH A150
144B2 ; [.530F.0020.0002] # ANATOLIAN HIEROGLYPH A151
144B3 ; [.5310.0020.0002] # ANATOLIAN HIEROGLYPH A152
144B4 ; [.5311.0020.0002] # ANATOLIAN HIEROGLYPH A153
144B5 ; [.5312.0020.0002] # ANATOLIAN HIEROGLYPH A154
144B6 ; [.5313.0020.0002] # ANATOLIAN HIEROGLYPH A155
144B7 ; [.5314.0020.0002] # ANATOLIAN HIEROGLYPH A156
144B8 ; [.5315.0020.0002] # ANATOLIAN HIEROGLYPH A157
144B9 ; [.5316.0020.0002] # ANATOLIAN HIEROGLYPH A158
144BA ; [.5317.0020.0002] # ANATOLIAN HIEROGLYPH A159
144BB ; [.5318.0020.0002] # ANATOLIAN HIEROGLYPH A160
144BC ; [.5319.0020.0002] # ANATOLIAN HIEROGLYPH A161
144BD ; [.531A.0020.0002] # ANATOLIAN HIEROGLYPH A162
144BE ; [.531B.0020.0002] # ANATOLIAN HIEROGLYPH A163
144BF ; [.531C.0020.0002] # ANATOLIAN HIEROGLYPH A164
144C0 ; [.531D.0020.0002] # ANATOLIAN HIEROGLYPH A165
144C1 ; [.531E.0020.0002] # ANATOLIAN HIEROGLYPH A166
144C2 ; [.531F.0020.0002] # ANATOLIAN HIEROGLYPH A167
144C3 ; [.5320.0020.0002] # ANATOLIAN HIEROGLYPH A168
144C4 ; [.5321.0020.0002] # ANATOLIAN HIEROGLYPH A169
144C5 ; [.5322.0020.0002] # ANATOLIAN HIEROGLYPH A170
144C6 ; [.5323.0020.0002] # ANATOLIAN HIEROGLYPH A171
144C7 ; [.5324.0020.0002] # ANATOLIAN HIEROGLYPH A172
144C8 ; [.5325.0020.0002] # ANATOLIAN HIEROGLYPH A173
144C9 ; [.5326.0020.0002] # ANATOLIAN HIEROGLYPH A174
144CA ; [.5327.0020.0002] # ANATOLIAN HIEROGLYPH A175
144CB ; [.5328.0020.0002] # ANATOLIAN HIEROGLYPH A176
144CC ; [.5329.0020.0002] # ANATOLIAN HIEROGLYPH A177
144CD ; [.532A.0020.0002] # ANATOLIAN HIEROGLYPH A178
144CE ; [.532B.0020.0002] # ANATOLIAN HIEROGLYPH A179
144CF ; [.532C.0020.0002] # ANATOLIAN HIEROGLYPH A180
144D0 ; [.532D.0020.0002] # ANATOLIAN HIEROGLYPH A181
144D1 ; [.532E.0020.0002] # ANATOLIAN HIEROGLYPH A182
144D2 ; [.532F.0020.0002] # ANATOLIAN HIEROGLYPH A183
144D3 ; [.5330.0020.0002] # ANATOLIAN HIEROGLYPH A184
144D4 ; [.5331.0020.0002] # ANATOLIAN HIEROGLYPH A185
144D5 ; [.5332.0020.0002] # ANATOLIAN HIEROGLYPH A186
144D6 ; [.5333.0020.0002] # ANATOLIAN HIEROGLYPH A187
144D7 ; [.5334.0020.0002] # ANATOLIAN HIEROGLYPH A188
144D8 ; [.5335.0020.0002] # ANATOLIAN HIEROGLYPH A189
144D9 ; [.5336.0020.0002] # ANATOLIAN HIEROGLYPH A190
144DA ; [.5337.0020.0002] # ANATOLIAN HIEROGLYPH A191
144DB ; [.5338.0020.0002] # ANATOLIAN HIEROGLYPH A192
144DC ; [.5339.0020.0002] # ANATOLIAN HIEROGLYPH A193
144DD ; [.533A.0020.0002] # ANATOLIAN HIEROGLYPH A194
144DE ; [.533B.0020.0002] # ANATOLIAN HIEROGLYPH A195
144DF ; [.533C.0020.0002] # ANATOLIAN HIEROGLYPH A196
144E0 ; [.533D.0020.0002] # ANATOLIAN HIEROGLYPH A197
144E1 ; [.533E.0020.0002] # ANATOLIAN HIEROGLYPH A198
144E2 ; [.533F.0020.0002] # ANATOLIAN HIEROGLYPH A199
144E3 ; [.5340.0020.0002] # ANATOLIAN HIEROGLYPH A200
144E4 ; [.5341.0020.0002] # ANATOLIAN HIEROGLYPH A201
144E5 ; [.5342.0020.0002] # ANATOLIAN HIEROGLYPH A202
144E6 ; [.5343.0020.0002] # ANATOLIAN HIEROGLYPH A202A
144E7 ; [.5344.0020.0002] # ANATOLIAN HIEROGLYPH A202B
144E8 ; [.5345.0020.0002] # ANATOLIAN HIEROGLYPH A203
144E9 ; [.5346.0020.0002] # ANATOLIAN HIEROGLYPH A204
144EA ; [.5347.0020.0002] # ANATOLIAN HIEROGLYPH A205
144EB ; [.5348.0020.0002] # ANATOLIAN HIEROGLYPH A206
144EC ; [.5349.0020.0002] # ANATOLIAN HIEROGLYPH A207
144ED ; [.534A.0020.0002] # ANATOLIAN HIEROGLYPH A207A
144EE ; [.534B.0020.0002] # ANATOLIAN HIEROGLYPH A208
144EF ; [.534C.0020.0002] # ANATOLIAN HIEROGLYPH A209
144F0 ; [.534D.0020.0002] # ANATOLIAN HIEROGLYPH A209A
144F1 ; [.534E.0020.0002] # ANATOLIAN HIEROGLYPH A210
144F2 ; [.534F.0020.0002] # ANATOLIAN HIEROGLYPH A211
144F3 ; [.5350.0020.0002] # ANATOLIAN HIEROGLYPH A212
144F4 ; [.5351.0020.0002] # ANATOLIAN HIEROGLYPH A213
144F5 ; [.5352.0020.0002] # ANATOLIAN HIEROGLYPH A214
144F6 ; [.5353.0020.0002] # ANATOLIAN HIEROGLYPH A215
144F7 ; [.5354.0020.0002] # ANATOLIAN HIEROGLYPH A215A
144F8 ; [.5355.0020.0002] # ANATOLIAN HIEROGLYPH A216
144F9 ; [.5356.0020.0002] # ANATOLIAN HIEROGLYPH A216A
144FA ; [.5357.0020.0002] # ANATOLIAN HIEROGLYPH A217
144FB ; [.5358.0020.0002] # ANATOLIAN HIEROGLYPH A218
144FC ; [.5359.0020.0002] # ANATOLIAN HIEROGLYPH A219
144FD ; [.535A.0020.0002] # ANATOLIAN HIEROGLYPH A220
144FE ; [.535B.0020.0002] # ANATOLIAN HIEROGLYPH A221
144FF ; [.535C.0020.0002] # ANATOLIAN HIEROGLYPH A222
14500 ; [.535D.0020.0002] # ANATOLIAN HIEROGLYPH A223
14501 ; [.535E.0020.0002] # ANATOLIAN HIEROGLYPH A224
14502 ; [.535F.0020.0002] # ANATOLIAN HIEROGLYPH A225
14503 ; [.5360.0020.0002] # ANATOLIAN HIEROGLYPH A226
14504 ; [.5361.0020.0002] # ANATOLIAN HIEROGLYPH A227
14505 ; [.5362.0020.0002] # ANATOLIAN HIEROGLYPH A227A
14506 ; [.5363.0020.0002] # ANATOLIAN HIEROGLYPH A228
14507 ; [.5364.0020.0002] # ANATOLIAN HIEROGLYPH A229
14508 ; [.5365.0020.0002] # ANATOLIAN HIEROGLYPH A230
14509 ; [.5366.0020.0002] # ANATOLIAN HIEROGLYPH A231
1450A ; [.5367.0020.0002] # ANATOLIAN HIEROGLYPH A232
1450B ; [.5368.0020.0002] # ANATOLIAN HIEROGLYPH A233
1450C ; [.5369.0020.0002] # ANATOLIAN HIEROGLYPH A234
1450D ; [.536A.0020.0002] # ANATOLIAN HIEROGLYPH A235
1450E ; [.536B.0020.0002] # ANATOLIAN HIEROGLYPH A236
1450F ; [.536C.0020.0002] # ANATOLIAN HIEROGLYPH A237
14510 ; [.536D.0020.0002] # ANATOLIAN HIEROGLYPH A238
14511 ; [.536E.0020.0002] # ANATOLIAN HIEROGLYPH A239
14512 ; [.536F.0020.0002] # ANATOLIAN HIEROGLYPH A240
14513 ; [.5370.0020.0002] # ANATOLIAN HIEROGLYPH A241
14514 ; [.5371.0020.0002] # ANATOLIAN HIEROGLYPH A242
14515 ; [.5372.0020.0002] # ANATOLIAN HIEROGLYPH A243
14516 ; [.5373.0020.0002] # ANATOLIAN HIEROGLYPH A244
14517 ; [.5374.0020.0002] # ANATOLIAN HIEROGLYPH A245
14518 ; [.5375.0020.0002] # ANATOLIAN HIEROGLYPH A246
14519 ; [.5376.0020.0002] # ANATOLIAN HIEROGLYPH A247
1451A ; [.5377.0020.0002] # ANATOLIAN HIEROGLYPH A248
1451B ; [.5378.0020.0002] # ANATOLIAN HIEROGLYPH A249
1451C ; [.5379.0020.0002] # ANATOLIAN HIEROGLYPH A250
1451D ; [.537A.0020.0002] # ANATOLIAN HIEROGLYPH A251
1451E ; [.537B.0020.0002] # ANATOLIAN HIEROGLYPH A252
1451F ; [.537C.0020.0002] # ANATOLIAN HIEROGLYPH A253
14520 ; [.537D.0020.0002] # ANATOLIAN HIEROGLYPH A254
14521 ; [.537E.0020.0002] # ANATOLIAN HIEROGLYPH A255
14522 ; [.537F.0020.0002] # ANATOLIAN HIEROGLYPH A256
14523 ; [.5380.0020.0002] # ANATOLIAN HIEROGLYPH A257
14524 ; [.5381.0020.0002] # ANATOLIAN HIEROGLYPH A258
14525 ; [.5382.0020.0002] # ANATOLIAN HIEROGLYPH A259
14526 ; [.5383.0020.0002] # ANATOLIAN HIEROGLYPH A260
14527 ; [.5384.0020.0002] # ANATOLIAN HIEROGLYPH A261
14528 ; [.5385.0020.0002] # ANATOLIAN HIEROGLYPH A262
14529 ; [.5386.0020.0002] # ANATOLIAN HIEROGLYPH A263
1452A ; [.5387.0020.0002] # ANATOLIAN HIEROGLYPH A264
1452B ; [.5388.0020.0002] # ANATOLIAN HIEROGLYPH A265
1452C ; [.5389.0020.0002] # ANATOLIAN HIEROGLYPH A266
1452D ; [.538A.0020.0002] # ANATOLIAN HIEROGLYPH A267
1452E ; [.538B.0020.0002] # ANATOLIAN HIEROGLYPH A267A
1452F ; [.538C.0020.0002] # ANATOLIAN HIEROGLYPH A268
14530 ; [.538D.0020.0002] # ANATOLIAN HIEROGLYPH A269
14531 ; [.538E.0020.0002] # ANATOLIAN HIEROGLYPH A270
14532 ; [.538F.0020.0002] # ANATOLIAN HIEROGLYPH A271
14533 ; [.5390.0020.0002] # ANATOLIAN HIEROGLYPH A272
14534 ; [.5391.0020.0002] # ANATOLIAN HIEROGLYPH A273
14535 ; [.5392.0020.0002] # ANATOLIAN HIEROGLYPH A274
14536 ; [.5393.0020.0002] # ANATOLIAN HIEROGLYPH A275
14537 ; [.5394.0020.0002] # ANATOLIAN HIEROGLYPH A276
14538 ; [.5395.0020.0002] # ANATOLIAN HIEROGLYPH A277
14539 ; [.5396.0020.0002] # ANATOLIAN HIEROGLYPH A278
1453A ; [.5397.0020.0002] # ANATOLIAN HIEROGLYPH A279
1453B ; [.5398.0020.0002] # ANATOLIAN HIEROGLYPH A280
1453C ; [.5399.0020.0002] # ANATOLIAN HIEROGLYPH A281
1453D ; [.539A.0020.0002] # ANATOLIAN HIEROGLYPH A282
1453E ; [.539B.0020.0002] # ANATOLIAN HIEROGLYPH A283
1453F ; [.539C.0020.0002] # ANATOLIAN HIEROGLYPH A284
14540 ; [.539D.0020.0002] # ANATOLIAN HIEROGLYPH A285
14541 ; [.539E.0020.0002] # ANATOLIAN HIEROGLYPH A286
14542 ; [.539F.0020.0002] # ANATOLIAN HIEROGLYPH A287
14543 ; [.53A0.0020.0002] # ANATOLIAN HIEROGLYPH A288
14544 ; [.53A1.0020.0002] # ANATOLIAN HIEROGLYPH A289
14545 ; [.53A2.0020.0002] # ANATOLIAN HIEROGLYPH A289A
14546 ; [.53A3.0020.0002] # ANATOLIAN HIEROGLYPH A290
14547 ; [.53A4.0020.0002] # ANATOLIAN HIEROGLYPH A291
14548 ; [.53A5.0020.0002] # ANATOLIAN HIEROGLYPH A292
14549 ; [.53A6.0020.0002] # ANATOLIAN HIEROGLYPH A293
1454A ; [.53A7.0020.0002] # ANATOLIAN HIEROGLYPH A294
1454B ; [.53A8.0020.0002] # ANATOLIAN HIEROGLYPH A294A
1454C ; [.53A9.0020.0002] # ANATOLIAN HIEROGLYPH A295
1454D ; [.53AA.0020.0002] # ANATOLIAN HIEROGLYPH A296
1454E ; [.53AB.0020.0002] # ANATOLIAN HIEROGLYPH A297
1454F ; [.53AC.0020.0002] # ANATOLIAN HIEROGLYPH A298
14550 ; [.53AD.0020.0002] # ANATOLIAN HIEROGLYPH A299
14551 ; [.53AE.0020.0002] # ANATOLIAN HIEROGLYPH A299A
14552 ; [.53AF.0020.0002] # ANATOLIAN HIEROGLYPH A300
14553 ; [.53B0.0020.0002] # ANATOLIAN HIEROGLYPH A301
14554 ; [.53B1.0020.0002] # ANATOLIAN HIEROGLYPH A302
14555 ; [.53B2.0020.0002] # ANATOLIAN HIEROGLYPH A303
14556 ; [.53B3.0020.0002] # ANATOLIAN HIEROGLYPH A304
14557 ; [.53B4.0020.0002] # ANATOLIAN HIEROGLYPH A305
14558 ; [.53B5.0020.0002] # ANATOLIAN HIEROGLYPH A306
14559 ; [.53B6.0020.0002] # ANATOLIAN HIEROGLYPH A307
1455A ; [.53B7.0020.0002] # ANATOLIAN HIEROGLYPH A308
1455B ; [.53B8.0020.0002] # ANATOLIAN HIEROGLYPH A309
1455C ; [.53B9.0020.0002] # ANATOLIAN HIEROGLYPH A309A
1455D ; [.53BA.0020.0002] # ANATOLIAN HIEROGLYPH A310
1455E ; [.53BB.0020.0002] # ANATOLIAN HIEROGLYPH A311
1455F ; [.53BC.0020.0002] # ANATOLIAN HIEROGLYPH A312
14560 ; [.53BD.0020.0002] # ANATOLIAN HIEROGLYPH A313
14561 ; [.53BE.0020.0002] # ANATOLIAN HIEROGLYPH A314
14562 ; [.53BF.0020.0002] # ANATOLIAN HIEROGLYPH A315
14563 ; [.53C0.0020.0002] # ANATOLIAN HIEROGLYPH A316
14564 ; [.53C1.0020.0002] # ANATOLIAN HIEROGLYPH A317
14565 ; [.53C2.0020.0002] # ANATOLIAN HIEROGLYPH A318
14566 ; [.53C3.0020.0002] # ANATOLIAN HIEROGLYPH A319
14567 ; [.53C4.0020.0002] # ANATOLIAN HIEROGLYPH A320
14568 ; [.53C5.0020.0002] # ANATOLIAN HIEROGLYPH A321
14569 ; [.53C6.0020.0002] # ANATOLIAN HIEROGLYPH A322
1456A ; [.53C7.0020.0002] # ANATOLIAN HIEROGLYPH A323
1456B ; [.53C8.0020.0002] # ANATOLIAN HIEROGLYPH A324
1456C ; [.53C9.0020.0002] # ANATOLIAN HIEROGLYPH A325
1456D ; [.53CA.0020.0002] # ANATOLIAN HIEROGLYPH A326
1456E ; [.53CB.0020.0002] # ANATOLIAN HIEROGLYPH A327
1456F ; [.53CC.0020.0002] # ANATOLIAN HIEROGLYPH A328
14570 ; [.53CD.0020.0002] # ANATOLIAN HIEROGLYPH A329
14571 ; [.53CE.0020.0002] # ANATOLIAN HIEROGLYPH A329A
14572 ; [.53CF.0020.0002] # ANATOLIAN HIEROGLYPH A330
14573 ; [.53D0.0020.0002] # ANATOLIAN HIEROGLYPH A331
14574 ; [.53D1.0020.0002] # ANATOLIAN HIEROGLYPH A332A
14575 ; [.53D2.0020.0002] # ANATOLIAN HIEROGLYPH A332B
14576 ; [.53D3.0020.0002] # ANATOLIAN HIEROGLYPH A332C
14577 ; [.53D4.0020.0002] # ANATOLIAN HIEROGLYPH A333
14578 ; [.53D5.0020.0002] # ANATOLIAN HIEROGLYPH A334
14579 ; [.53D6.0020.0002] # ANATOLIAN HIEROGLYPH A335
1457A ; [.53D7.0020.0002] # ANATOLIAN HIEROGLYPH A336
1457B ; [.53D8.0020.0002] # ANATOLIAN HIEROGLYPH A336A
1457C ; [.53D9.0020.0002] # ANATOLIAN HIEROGLYPH A336B
1457D ; [.53DA.0020.0002] # ANATOLIAN HIEROGLYPH A336C
1457E ; [.53DB.0020.0002] # ANATOLIAN HIEROGLYPH A337
1457F ; [.53DC.0020.0002] # ANATOLIAN HIEROGLYPH A338
14580 ; [.53DD.0020.0002] # ANATOLIAN HIEROGLYPH A339
14581 ; [.53DE.0020.0002] # ANATOLIAN HIEROGLYPH A340
14582 ; [.53DF.0020.0002] # ANATOLIAN HIEROGLYPH A341
14583 ; [.53E0.0020.0002] # ANATOLIAN HIEROGLYPH A342
14584 ; [.53E1.0020.0002] # ANATOLIAN HIEROGLYPH A343
14585 ; [.53E2.0020.0002] # ANATOLIAN HIEROGLYPH A344
14586 ; [.53E3.0020.0002] # ANATOLIAN HIEROGLYPH A345
14587 ; [.53E4.0020.0002] # ANATOLIAN HIEROGLYPH A346
14588 ; [.53E5.0020.0002] # ANATOLIAN HIEROGLYPH A347
14589 ; [.53E6.0020.0002] # ANATOLIAN HIEROGLYPH A348
1458A ; [.53E7.0020.0002] # ANATOLIAN HIEROGLYPH A349
1458B ; [.53E8.0020.0002] # ANATOLIAN HIEROGLYPH A350
1458C ; [.53E9.0020.0002] # ANATOLIAN HIEROGLYPH A351
1458D ; [.53EA.0020.0002] # ANATOLIAN HIEROGLYPH A352
1458E ; [.53EB.0020.0002] # ANATOLIAN HIEROGLYPH A353
1458F ; [.53EC.0020.0002] # ANATOLIAN HIEROGLYPH A354
14590 ; [.53ED.0020.0002] # ANATOLIAN HIEROGLYPH A355
14591 ; [.53EE.0020.0002] # ANATOLIAN HIEROGLYPH A356
14592 ; [.53EF.0020.0002] # ANATOLIAN HIEROGLYPH A357
14593 ; [.53F0.0020.0002] # ANATOLIAN HIEROGLYPH A358
14594 ; [.53F1.0020.0002] # ANATOLIAN HIEROGLYPH A359
14595 ; [.53F2.0020.0002] # ANATOLIAN HIEROGLYPH A359A
14596 ; [.53F3.0020.0002] # ANATOLIAN HIEROGLYPH A360
14597 ; [.53F4.0020.0002] # ANATOLIAN HIEROGLYPH A361
14598 ; [.53F5.0020.0002] # ANATOLIAN HIEROGLYPH A362
14599 ; [.53F6.0020.0002] # ANATOLIAN HIEROGLYPH A363
1459A ; [.53F7.0020.0002] # ANATOLIAN HIEROGLYPH A364
1459B ; [.53F8.0020.0002] # ANATOLIAN HIEROGLYPH A364A
1459C ; [.53F9.0020.0002] # ANATOLIAN HIEROGLYPH A365
1459D ; [.53FA.0020.0002] # ANATOLIAN HIEROGLYPH A366
1459E ; [.53FB.0020.0002] # ANATOLIAN HIEROGLYPH A367
1459F ; [.53FC.0020.0002] # ANATOLIAN HIEROGLYPH A368
145A0 ; [.53FD.0020.0002] # ANATOLIAN HIEROGLYPH A368A
145A1 ; [.53FE.0020.0002] # ANATOLIAN HIEROGLYPH A369
145A2 ; [.53FF.0020.0002] # ANATOLIAN HIEROGLYPH A370
145A3 ; [.5400.0020.0002] # ANATOLIAN HIEROGLYPH A371
145A4 ; [.5401.0020.0002] # ANATOLIAN HIEROGLYPH A371A
145A5 ; [.5402.0020.0002] # ANATOLIAN HIEROGLYPH A372
145A6 ; [.5403.0020.0002] # ANATOLIAN HIEROGLYPH A373
145A7 ; [.5404.0020.0002] # ANATOLIAN HIEROGLYPH A374
145A8 ; [.5405.0020.0002] # ANATOLIAN HIEROGLYPH A375
145A9 ; [.5406.0020.0002] # ANATOLIAN HIEROGLYPH A376
145AA ; [.5407.0020.0002] # ANATOLIAN HIEROGLYPH A377
145AB ; [.5408.0020.0002] # ANATOLIAN HIEROGLYPH A378
145AC ; [.5409.0020.0002] # ANATOLIAN HIEROGLYPH A379
145AD ; [.540A.0020.0002] # ANATOLIAN HIEROGLYPH A380
145AE ; [.540B.0020.0002] # ANATOLIAN HIEROGLYPH A381
145AF ; [.540C.0020.0002] # ANATOLIAN HIEROGLYPH A381A
145B0 ; [.540D.0020.0002] # ANATOLIAN HIEROGLYPH A382
145B1 ; [.540E.0020.0002] # ANATOLIAN HIEROGLYPH A383 RA OR RI
145B2 ; [.540F.0020.0002] # ANATOLIAN HIEROGLYPH A383A
145B3 ; [.5410.0020.0002] # ANATOLIAN HIEROGLYPH A384
145B4 ; [.5411.0020.0002] # ANATOLIAN HIEROGLYPH A385
145B5 ; [.5412.0020.0002] # ANATOLIAN HIEROGLYPH A386
145B6 ; [.5413.0020.0002] # ANATOLIAN HIEROGLYPH A386A
145B7 ; [.5414.0020.0002] # ANATOLIAN HIEROGLYPH A387
145B8 ; [.5415.0020.0002] # ANATOLIAN HIEROGLYPH A388
145B9 ; [.5416.0020.0002] # ANATOLIAN HIEROGLYPH A389
145BA ; [.5417.0020.0002] # ANATOLIAN HIEROGLYPH A390
145BB ; [.5418.0020.0002] # ANATOLIAN HIEROGLYPH A391
145BC ; [.5419.0020.0002] # ANATOLIAN HIEROGLYPH A392
145BD ; [.541A.0020.0002] # ANATOLIAN HIEROGLYPH A393 EIGHT
145BE ; [.541B.0020.0002] # ANATOLIAN HIEROGLYPH A394
145BF ; [.541C.0020.0002] # ANATOLIAN HIEROGLYPH A395
145C0 ; [.541D.0020.0002] # ANATOLIAN HIEROGLYPH A396
145C1 ; [.541E.0020.0002] # ANATOLIAN HIEROGLYPH A397
145C2 ; [.541F.0020.0002] # ANATOLIAN HIEROGLYPH A398
145C3 ; [.5420.0020.0002] # ANATOLIAN HIEROGLYPH A399
145C4 ; [.5421.0020.0002] # ANATOLIAN HIEROGLYPH A400
145C5 ; [.5422.0020.0002] # ANATOLIAN HIEROGLYPH A401
145C6 ; [.5423.0020.0002] # ANATOLIAN HIEROGLYPH A402
145C7 ; [.5424.0020.0002] # ANATOLIAN HIEROGLYPH A403
145C8 ; [.5425.0020.0002] # ANATOLIAN HIEROGLYPH A404
145C9 ; [.5426.0020.0002] # ANATOLIAN HIEROGLYPH A405
145CA ; [.5427.0020.0002] # ANATOLIAN HIEROGLYPH A406
145CB ; [.5428.0020.0002] # ANATOLIAN HIEROGLYPH A407
145CC ; [.5429.0020.0002] # ANATOLIAN HIEROGLYPH A408
145CD ; [.542A.0020.0002] # ANATOLIAN HIEROGLYPH A409
145CE ; [.542B.0020.0002] # ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK
145CF ; [.542C.0020.0002] # ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK
145D0 ; [.542D.0020.0002] # ANATOLIAN HIEROGLYPH A411
145D1 ; [.542E.0020.0002] # ANATOLIAN HIEROGLYPH A412
145D2 ; [.542F.0020.0002] # ANATOLIAN HIEROGLYPH A413
145D3 ; [.5430.0020.0002] # ANATOLIAN HIEROGLYPH A414
145D4 ; [.5431.0020.0002] # ANATOLIAN HIEROGLYPH A415
145D5 ; [.5432.0020.0002] # ANATOLIAN HIEROGLYPH A416
145D6 ; [.5433.0020.0002] # ANATOLIAN HIEROGLYPH A417
145D7 ; [.5434.0020.0002] # ANATOLIAN HIEROGLYPH A418
145D8 ; [.5435.0020.0002] # ANATOLIAN HIEROGLYPH A419
145D9 ; [.5436.0020.0002] # ANATOLIAN HIEROGLYPH A420
145DA ; [.5437.0020.0002] # ANATOLIAN HIEROGLYPH A421
145DB ; [.5438.0020.0002] # ANATOLIAN HIEROGLYPH A422
145DC ; [.5439.0020.0002] # ANATOLIAN HIEROGLYPH A423
145DD ; [.543A.0020.0002] # ANATOLIAN HIEROGLYPH A424
145DE ; [.543B.0020.0002] # ANATOLIAN HIEROGLYPH A425
145DF ; [.543C.0020.0002] # ANATOLIAN HIEROGLYPH A426
145E0 ; [.543D.0020.0002] # ANATOLIAN HIEROGLYPH A427
145E1 ; [.543E.0020.0002] # ANATOLIAN HIEROGLYPH A428
145E2 ; [.543F.0020.0002] # ANATOLIAN HIEROGLYPH A429
145E3 ; [.5440.0020.0002] # ANATOLIAN HIEROGLYPH A430
145E4 ; [.5441.0020.0002] # ANATOLIAN HIEROGLYPH A431
145E5 ; [.5442.0020.0002] # ANATOLIAN HIEROGLYPH A432
145E6 ; [.5443.0020.0002] # ANATOLIAN HIEROGLYPH A433
145E7 ; [.5444.0020.0002] # ANATOLIAN HIEROGLYPH A434
145E8 ; [.5445.0020.0002] # ANATOLIAN HIEROGLYPH A435
145E9 ; [.5446.0020.0002] # ANATOLIAN HIEROGLYPH A436
145EA ; [.5447.0020.0002] # ANATOLIAN HIEROGLYPH A437
145EB ; [.5448.0020.0002] # ANATOLIAN HIEROGLYPH A438
145EC ; [.5449.0020.0002] # ANATOLIAN HIEROGLYPH A439
145ED ; [.544A.0020.0002] # ANATOLIAN HIEROGLYPH A440
145EE ; [.544B.0020.0002] # ANATOLIAN HIEROGLYPH A441
145EF ; [.544C.0020.0002] # ANATOLIAN HIEROGLYPH A442
145F0 ; [.544D.0020.0002] # ANATOLIAN HIEROGLYPH A443
145F1 ; [.544E.0020.0002] # ANATOLIAN HIEROGLYPH A444
145F2 ; [.544F.0020.0002] # ANATOLIAN HIEROGLYPH A445
145F3 ; [.5450.0020.0002] # ANATOLIAN HIEROGLYPH A446
145F4 ; [.5451.0020.0002] # ANATOLIAN HIEROGLYPH A447
145F5 ; [.5452.0020.0002] # ANATOLIAN HIEROGLYPH A448
145F6 ; [.5453.0020.0002] # ANATOLIAN HIEROGLYPH A449
145F7 ; [.5454.0020.0002] # ANATOLIAN HIEROGLYPH A450
145F8 ; [.5455.0020.0002] # ANATOLIAN HIEROGLYPH A450A
145F9 ; [.5456.0020.0002] # ANATOLIAN HIEROGLYPH A451
145FA ; [.5457.0020.0002] # ANATOLIAN HIEROGLYPH A452
145FB ; [.5458.0020.0002] # ANATOLIAN HIEROGLYPH A453
145FC ; [.5459.0020.0002] # ANATOLIAN HIEROGLYPH A454
145FD ; [.545A.0020.0002] # ANATOLIAN HIEROGLYPH A455
145FE ; [.545B.0020.0002] # ANATOLIAN HIEROGLYPH A456
145FF ; [.545C.0020.0002] # ANATOLIAN HIEROGLYPH A457
14600 ; [.545D.0020.0002] # ANATOLIAN HIEROGLYPH A457A
14601 ; [.545E.0020.0002] # ANATOLIAN HIEROGLYPH A458
14602 ; [.545F.0020.0002] # ANATOLIAN HIEROGLYPH A459
14603 ; [.5460.0020.0002] # ANATOLIAN HIEROGLYPH A460
14604 ; [.5461.0020.0002] # ANATOLIAN HIEROGLYPH A461
14605 ; [.5462.0020.0002] # ANATOLIAN HIEROGLYPH A462
14606 ; [.5463.0020.0002] # ANATOLIAN HIEROGLYPH A463
14607 ; [.5464.0020.0002] # ANATOLIAN HIEROGLYPH A464
14608 ; [.5465.0020.0002] # ANATOLIAN HIEROGLYPH A465
14609 ; [.5466.0020.0002] # ANATOLIAN HIEROGLYPH A466
1460A ; [.5467.0020.0002] # ANATOLIAN HIEROGLYPH A467
1460B ; [.5468.0020.0002] # ANATOLIAN HIEROGLYPH A468
1460C ; [.5469.0020.0002] # ANATOLIAN HIEROGLYPH A469
1460D ; [.546A.0020.0002] # ANATOLIAN HIEROGLYPH A470
1460E ; [.546B.0020.0002] # ANATOLIAN HIEROGLYPH A471
1460F ; [.546C.0020.0002] # ANATOLIAN HIEROGLYPH A472
14610 ; [.546D.0020.0002] # ANATOLIAN HIEROGLYPH A473
14611 ; [.546E.0020.0002] # ANATOLIAN HIEROGLYPH A474
14612 ; [.546F.0020.0002] # ANATOLIAN HIEROGLYPH A475
14613 ; [.5470.0020.0002] # ANATOLIAN HIEROGLYPH A476
14614 ; [.5471.0020.0002] # ANATOLIAN HIEROGLYPH A477
14615 ; [.5472.0020.0002] # ANATOLIAN HIEROGLYPH A478
14616 ; [.5473.0020.0002] # ANATOLIAN HIEROGLYPH A479
14617 ; [.5474.0020.0002] # ANATOLIAN HIEROGLYPH A480
14618 ; [.5475.0020.0002] # ANATOLIAN HIEROGLYPH A481
14619 ; [.5476.0020.0002] # ANATOLIAN HIEROGLYPH A482
1461A ; [.5477.0020.0002] # ANATOLIAN HIEROGLYPH A483
1461B ; [.5478.0020.0002] # ANATOLIAN HIEROGLYPH A484
1461C ; [.5479.0020.0002] # ANATOLIAN HIEROGLYPH A485
1461D ; [.547A.0020.0002] # ANATOLIAN HIEROGLYPH A486
1461E ; [.547B.0020.0002] # ANATOLIAN HIEROGLYPH A487
1461F ; [.547C.0020.0002] # ANATOLIAN HIEROGLYPH A488
14620 ; [.547D.0020.0002] # ANATOLIAN HIEROGLYPH A489
14621 ; [.547E.0020.0002] # ANATOLIAN HIEROGLYPH A490
14622 ; [.547F.0020.0002] # ANATOLIAN HIEROGLYPH A491
14623 ; [.5480.0020.0002] # ANATOLIAN HIEROGLYPH A492
14624 ; [.5481.0020.0002] # ANATOLIAN HIEROGLYPH A493
14625 ; [.5482.0020.0002] # ANATOLIAN HIEROGLYPH A494
14626 ; [.5483.0020.0002] # ANATOLIAN HIEROGLYPH A495
14627 ; [.5484.0020.0002] # ANATOLIAN HIEROGLYPH A496
14628 ; [.5485.0020.0002] # ANATOLIAN HIEROGLYPH A497
14629 ; [.5486.0020.0002] # ANATOLIAN HIEROGLYPH A501
1462A ; [.5487.0020.0002] # ANATOLIAN HIEROGLYPH A502
1462B ; [.5488.0020.0002] # ANATOLIAN HIEROGLYPH A503
1462C ; [.5489.0020.0002] # ANATOLIAN HIEROGLYPH A504
1462D ; [.548A.0020.0002] # ANATOLIAN HIEROGLYPH A505
1462E ; [.548B.0020.0002] # ANATOLIAN HIEROGLYPH A506
1462F ; [.548C.0020.0002] # ANATOLIAN HIEROGLYPH A507
14630 ; [.548D.0020.0002] # ANATOLIAN HIEROGLYPH A508
14631 ; [.548E.0020.0002] # ANATOLIAN HIEROGLYPH A509
14632 ; [.548F.0020.0002] # ANATOLIAN HIEROGLYPH A510
14633 ; [.5490.0020.0002] # ANATOLIAN HIEROGLYPH A511
14634 ; [.5491.0020.0002] # ANATOLIAN HIEROGLYPH A512
14635 ; [.5492.0020.0002] # ANATOLIAN HIEROGLYPH A513
14636 ; [.5493.0020.0002] # ANATOLIAN HIEROGLYPH A514
14637 ; [.5494.0020.0002] # ANATOLIAN HIEROGLYPH A515
14638 ; [.5495.0020.0002] # ANATOLIAN HIEROGLYPH A516
14639 ; [.5496.0020.0002] # ANATOLIAN HIEROGLYPH A517
1463A ; [.5497.0020.0002] # ANATOLIAN HIEROGLYPH A518
1463B ; [.5498.0020.0002] # ANATOLIAN HIEROGLYPH A519
1463C ; [.5499.0020.0002] # ANATOLIAN HIEROGLYPH A520
1463D ; [.549A.0020.0002] # ANATOLIAN HIEROGLYPH A521
1463E ; [.549B.0020.0002] # ANATOLIAN HIEROGLYPH A522
1463F ; [.549C.0020.0002] # ANATOLIAN HIEROGLYPH A523
14640 ; [.549D.0020.0002] # ANATOLIAN HIEROGLYPH A524
14641 ; [.549E.0020.0002] # ANATOLIAN HIEROGLYPH A525
14642 ; [.549F.0020.0002] # ANATOLIAN HIEROGLYPH A526
14643 ; [.54A0.0020.0002] # ANATOLIAN HIEROGLYPH A527
14644 ; [.54A1.0020.0002] # ANATOLIAN HIEROGLYPH A528
14645 ; [.54A2.0020.0002] # ANATOLIAN HIEROGLYPH A529
14646 ; [.54A3.0020.0002] # ANATOLIAN HIEROGLYPH A530
2F00 ; [.FB40.0020.0004][.CE00.0000.0000] # KANGXI RADICAL ONE
3220 ; [*0317.0020.0004][.FB40.0020.0004][.CE00.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE
3280 ; [.FB40.0020.0006][.CE00.0000.0000] # CIRCLED IDEOGRAPH ONE
3192 ; [.FB40.0020.0014][.CE00.0000.0000] # IDEOGRAPHIC ANNOTATION ONE MARK
1F229 ; [.FB40.0020.001C][.CE00.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E00
319C ; [.FB40.0020.0014][.CE01.0000.0000] # IDEOGRAPHIC ANNOTATION FOURTH MARK
3226 ; [*0317.0020.0004][.FB40.0020.0004][.CE03.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN
3286 ; [.FB40.0020.0006][.CE03.0000.0000] # CIRCLED IDEOGRAPH SEVEN
3222 ; [*0317.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE
1F241 ; [*0379.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
3282 ; [.FB40.0020.0006][.CE09.0000.0000] # CIRCLED IDEOGRAPH THREE
3194 ; [.FB40.0020.0014][.CE09.0000.0000] # IDEOGRAPHIC ANNOTATION THREE MARK
1F22A ; [.FB40.0020.001C][.CE09.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E09
32A4 ; [.FB40.0020.0006][.CE0A.0000.0000] # CIRCLED IDEOGRAPH HIGH
3196 ; [.FB40.0020.0014][.CE0A.0000.0000] # IDEOGRAPHIC ANNOTATION TOP MARK
32A6 ; [.FB40.0020.0006][.CE0B.0000.0000] # CIRCLED IDEOGRAPH LOW
3198 ; [.FB40.0020.0014][.CE0B.0000.0000] # IDEOGRAPHIC ANNOTATION BOTTOM MARK
F967 ; [.FB40.0020.0002][.CE0D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F967
319B ; [.FB40.0020.0014][.CE19.0000.0000] # IDEOGRAPHIC ANNOTATION THIRD MARK
FA70 ; [.FB40.0020.0002][.CE26.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA70
2F01 ; [.FB40.0020.0004][.CE28.0000.0000] # KANGXI RADICAL LINE
2EA6 ; [.FB40.0020.0004][.CE2C.0000.0000] # CJK RADICAL SIMPLIFIED HALF TREE TRUNK
32A5 ; [.FB40.0020.0006][.CE2D.0000.0000] # CIRCLED IDEOGRAPH CENTRE
3197 ; [.FB40.0020.0014][.CE2D.0000.0000] # IDEOGRAPHIC ANNOTATION MIDDLE MARK
1F22D ; [.FB40.0020.001C][.CE2D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D
F905 ; [.FB40.0020.0002][.CE32.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F905
2F02 ; [.FB40.0020.0004][.CE36.0000.0000] # KANGXI RADICAL DOT
2E80 ; [.FB40.0020.0004][.CE36.0000.0000][.0000.0110.0004] # CJK RADICAL REPEAT
2F801 ; [.FB40.0020.0002][.CE38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F801
F95E ; [.FB40.0020.0002][.CE39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95E
2F800 ; [.FB40.0020.0002][.CE3D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F800
2F03 ; [.FB40.0020.0004][.CE3F.0000.0000] # KANGXI RADICAL SLASH
2F802 ; [.FB40.0020.0002][.CE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F802
2F04 ; [.FB40.0020.0004][.CE59.0000.0000] # KANGXI RADICAL SECOND
319A ; [.FB40.0020.0014][.CE59.0000.0000] # IDEOGRAPHIC ANNOTATION SECOND MARK
2E84 ; [.FB40.0020.0004][.CE59.0000.0000][.0000.0110.0004] # CJK RADICAL SECOND THREE
2E83 ; [.FB40.0020.0004][.CE5A.0000.0000] # CJK RADICAL SECOND TWO
2E82 ; [.FB40.0020.0004][.CE5B.0000.0000] # CJK RADICAL SECOND ONE
3228 ; [*0317.0020.0004][.FB40.0020.0004][.CE5D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE
3288 ; [.FB40.0020.0006][.CE5D.0000.0000] # CIRCLED IDEOGRAPH NINE
F91B ; [.FB40.0020.0002][.CE82.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91B
2F05 ; [.FB40.0020.0004][.CE85.0000.0000] # KANGXI RADICAL HOOK
F9BA ; [.FB40.0020.0002][.CE86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BA
2F06 ; [.FB40.0020.0004][.CE8C.0000.0000] # KANGXI RADICAL TWO
3221 ; [*0317.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO
1F242 ; [*0379.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
3281 ; [.FB40.0020.0006][.CE8C.0000.0000] # CIRCLED IDEOGRAPH TWO
3193 ; [.FB40.0020.0014][.CE8C.0000.0000] # IDEOGRAPHIC ANNOTATION TWO MARK
1F214 ; [.FB40.0020.001C][.CE8C.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C
3224 ; [*0317.0020.0004][.FB40.0020.0004][.CE94.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE
3284 ; [.FB40.0020.0006][.CE94.0000.0000] # CIRCLED IDEOGRAPH FIVE
2F07 ; [.FB40.0020.0004][.CEA0.0000.0000] # KANGXI RADICAL LID
1F218 ; [.FB40.0020.001C][.CEA4.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4
F977 ; [.FB40.0020.0002][.CEAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F977
2F08 ; [.FB40.0020.0004][.CEBA.0000.0000] # KANGXI RADICAL MAN
319F ; [.FB40.0020.0014][.CEBA.0000.0000] # IDEOGRAPHIC ANNOTATION MAN MARK
2E85 ; [.FB40.0020.0004][.CEBB.0000.0000] # CJK RADICAL PERSON
F9FD ; [.FB40.0020.0002][.CEC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FD
2F819 ; [.FB40.0020.0002][.CECC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F819
3239 ; [*0317.0020.0004][.FB40.0020.0004][.CEE3.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT
F9A8 ; [.FB40.0020.0002][.CEE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A8
323D ; [*0317.0020.0004][.FB40.0020.0004][.CF01.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE
32AD ; [.FB40.0020.0006][.CF01.0000.0000] # CIRCLED IDEOGRAPH ENTERPRISE
3241 ; [*0317.0020.0004][.FB40.0020.0004][.CF11.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST
32A1 ; [.FB40.0020.0006][.CF11.0000.0000] # CIRCLED IDEOGRAPH REST
2F804 ; [.FB40.0020.0002][.CF60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F804
FA73 ; [.FB40.0020.0002][.CF80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA73
F92D ; [.FB40.0020.0002][.CF86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92D
F9B5 ; [.FB40.0020.0002][.CF8B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B5
FA30 ; [.FB40.0020.0002][.CFAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA30
2F805 ; [.FB40.0020.0002][.CFAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F805
2F806 ; [.FB40.0020.0002][.CFBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F806
F965 ; [.FB40.0020.0002][.CFBF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F965
2F807 ; [.FB40.0020.0002][.D002.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F807
F9D4 ; [.FB40.0020.0002][.D02B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D4
2F808 ; [.FB40.0020.0002][.D07A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F808
2F809 ; [.FB40.0020.0002][.D099.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F809
2F80B ; [.FB40.0020.0002][.D0CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80B
F9BB ; [.FB40.0020.0002][.D0DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BB
FA31 ; [.FB40.0020.0002][.D0E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA31
2F80A ; [.FB40.0020.0002][.D0E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80A
329D ; [.FB40.0020.0006][.D12A.0000.0000] # CIRCLED IDEOGRAPH EXCELLENT
2F09 ; [.FB40.0020.0004][.D13F.0000.0000] # KANGXI RADICAL LEGS
FA0C ; [.FB40.0020.0002][.D140.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0C
FA74 ; [.FB40.0020.0002][.D145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA74
FA32 ; [.FB40.0020.0002][.D14D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA32
2F80E ; [.FB40.0020.0002][.D14D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80E
2F80F ; [.FB40.0020.0002][.D154.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80F
2F810 ; [.FB40.0020.0002][.D164.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F810
2F0A ; [.FB40.0020.0004][.D165.0000.0000] # KANGXI RADICAL ENTER
2F814 ; [.FB40.0020.0002][.D167.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F814
FA72 ; [.FB40.0020.0002][.D168.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA72
F978 ; [.FB40.0020.0002][.D169.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F978
2F0B ; [.FB40.0020.0004][.D16B.0000.0000] # KANGXI RADICAL EIGHT
3227 ; [*0317.0020.0004][.FB40.0020.0004][.D16B.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT
3287 ; [.FB40.0020.0006][.D16B.0000.0000] # CIRCLED IDEOGRAPH EIGHT
F9D1 ; [.FB40.0020.0002][.D16D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D1
3225 ; [*0317.0020.0004][.FB40.0020.0004][.D16D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX
3285 ; [.FB40.0020.0006][.D16D.0000.0000] # CIRCLED IDEOGRAPH SIX
2F811 ; [.FB40.0020.0002][.D177.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F811
FA75 ; [.FB40.0020.0002][.D180.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA75
2F0C ; [.FB40.0020.0004][.D182.0000.0000] # KANGXI RADICAL DOWN BOX
2E86 ; [.FB40.0020.0004][.D182.0000.0000][.0000.0110.0004] # CJK RADICAL BOX
2F815 ; [.FB40.0020.0002][.D18D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F815
1F21E ; [.FB40.0020.001C][.D18D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-518D
2F8D2 ; [.FB40.0020.0002][.D192.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
2F8D3 ; [.FB40.0020.0002][.D195.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
2F0D ; [.FB40.0020.0004][.D196.0000.0000] # KANGXI RADICAL COVER
2F817 ; [.FB40.0020.0002][.D197.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F817
32A2 ; [.FB40.0020.0006][.D199.0000.0000] # CIRCLED IDEOGRAPH COPY
2F818 ; [.FB40.0020.0002][.D1A4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F818
2F0E ; [.FB40.0020.0004][.D1AB.0000.0000] # KANGXI RADICAL ICE
2F81A ; [.FB40.0020.0002][.D1AC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81A
FA71 ; [.FB40.0020.0002][.D1B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA71
2F81B ; [.FB40.0020.0002][.D1B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81B
F92E ; [.FB40.0020.0002][.D1B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92E
F979 ; [.FB40.0020.0002][.D1C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F979
F955 ; [.FB40.0020.0002][.D1CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F955
F954 ; [.FB40.0020.0002][.D1DC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F954
FA15 ; [.FB40.0020.0002][.D1DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA15
2F0F ; [.FB40.0020.0004][.D1E0.0000.0000] # KANGXI RADICAL TABLE
2E87 ; [.FB40.0020.0004][.D1E0.0000.0000][.0000.0110.0004] # CJK RADICAL TABLE
2F81D ; [.FB40.0020.0002][.D1F5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81D
2F10 ; [.FB40.0020.0004][.D1F5.0000.0000] # KANGXI RADICAL OPEN BOX
2F11 ; [.FB40.0020.0004][.D200.0000.0000] # KANGXI RADICAL KNIFE
2E88 ; [.FB40.0020.0004][.D200.0000.0000][.0000.0110.0004] # CJK RADICAL KNIFE ONE
2E89 ; [.FB40.0020.0004][.D202.0000.0000] # CJK RADICAL KNIFE TWO
2F81E ; [.FB40.0020.0002][.D203.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81E
FA00 ; [.FB40.0020.0002][.D207.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA00
2F850 ; [.FB40.0020.0002][.D207.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F850
F99C ; [.FB40.0020.0002][.D217.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99C
1F220 ; [.FB40.0020.001C][.D21D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-521D
F9DD ; [.FB40.0020.0002][.D229.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DD
F9FF ; [.FB40.0020.0002][.D23A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FF
2F820 ; [.FB40.0020.0002][.D23B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F820
2F821 ; [.FB40.0020.0002][.D246.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F821
1F21C ; [.FB40.0020.001C][.D24D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-524D
2F822 ; [.FB40.0020.0002][.D272.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F822
1F239 ; [.FB40.0020.001C][.D272.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5272
2F823 ; [.FB40.0020.0002][.D277.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F823
F9C7 ; [.FB40.0020.0002][.D289.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C7
F98A ; [.FB40.0020.0002][.D29B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98A
2F12 ; [.FB40.0020.0004][.D29B.0000.0000] # KANGXI RADICAL POWER
F99D ; [.FB40.0020.0002][.D2A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99D
2F992 ; [.FB40.0020.0002][.D2B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F992
3238 ; [*0317.0020.0004][.FB40.0020.0004][.D2B4.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR
3298 ; [.FB40.0020.0006][.D2B4.0000.0000] # CIRCLED IDEOGRAPH LABOR
FA76 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA76
2F825 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F825
FA33 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA33
2F826 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F826
F952 ; [.FB40.0020.0002][.D2D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F952
1F247 ; [*0379.0020.0004][.FB40.0020.0004][.D2DD.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
F92F ; [.FB40.0020.0002][.D2DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92F
FA34 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA34
2F827 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F827
F97F ; [.FB40.0020.0002][.D2F5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97F
2F13 ; [.FB40.0020.0004][.D2F9.0000.0000] # KANGXI RADICAL WRAP
FA77 ; [.FB40.0020.0002][.D2FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA77
2F828 ; [.FB40.0020.0002][.D2FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F828
2F829 ; [.FB40.0020.0002][.D305.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F829
2F82A ; [.FB40.0020.0002][.D306.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82A
2F14 ; [.FB40.0020.0004][.D315.0000.0000] # KANGXI RADICAL SPOON
F963 ; [.FB40.0020.0002][.D317.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F963
2F82B ; [.FB40.0020.0002][.D317.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82B
2F15 ; [.FB40.0020.0004][.D31A.0000.0000] # KANGXI RADICAL RIGHT OPEN BOX
2F16 ; [.FB40.0020.0004][.D338.0000.0000] # KANGXI RADICAL HIDING ENCLOSURE
32A9 ; [.FB40.0020.0006][.D33B.0000.0000] # CIRCLED IDEOGRAPH MEDICINE
F9EB ; [.FB40.0020.0002][.D33F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EB
2F17 ; [.FB40.0020.0004][.D341.0000.0000] # KANGXI RADICAL TEN
3038 ; [.FB40.0020.0004][.D341.0000.0000] # HANGZHOU NUMERAL TEN
3229 ; [*0317.0020.0004][.FB40.0020.0004][.D341.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN
3289 ; [.FB40.0020.0006][.D341.0000.0000] # CIRCLED IDEOGRAPH TEN
3039 ; [.FB40.0020.0004][.D344.0000.0000] # HANGZHOU NUMERAL TWENTY
303A ; [.FB40.0020.0004][.D345.0000.0000] # HANGZHOU NUMERAL THIRTY
2F82C ; [.FB40.0020.0002][.D349.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82C
FA35 ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA35
2F82D ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82D
323F ; [*0317.0020.0004][.FB40.0020.0004][.D354.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE
32AF ; [.FB40.0020.0006][.D354.0000.0000] # CIRCLED IDEOGRAPH ALLIANCE
2F82E ; [.FB40.0020.0002][.D35A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82E
2F18 ; [.FB40.0020.0004][.D35C.0000.0000] # KANGXI RADICAL DIVINATION
2E8A ; [.FB40.0020.0004][.D35C.0000.0000][.0000.0110.0004] # CJK RADICAL DIVINATION
2F19 ; [.FB40.0020.0004][.D369.0000.0000] # KANGXI RADICAL SEAL
2E8B ; [.FB40.0020.0004][.D369.0000.0000][.0000.0110.0004] # CJK RADICAL SEAL
329E ; [.FB40.0020.0006][.D370.0000.0000] # CIRCLED IDEOGRAPH PRINT
2F82F ; [.FB40.0020.0002][.D373.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82F
F91C ; [.FB40.0020.0002][.D375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91C
2F830 ; [.FB40.0020.0002][.D37D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F830
2F831 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F831
2F832 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F832
2F833 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F833
2F1A ; [.FB40.0020.0004][.D382.0000.0000] # KANGXI RADICAL CLIFF
2E81 ; [.FB40.0020.0004][.D382.0000.0000][.0000.0110.0004] # CJK RADICAL CLIFF
2F1B ; [.FB40.0020.0004][.D3B6.0000.0000] # KANGXI RADICAL PRIVATE
F96B ; [.FB40.0020.0002][.D3C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96B
2F1C ; [.FB40.0020.0004][.D3C8.0000.0000] # KANGXI RADICAL AGAIN
2F836 ; [.FB40.0020.0002][.D3CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F836
1F212 ; [.FB40.0020.001C][.D3CC.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-53CC
2F837 ; [.FB40.0020.0002][.D3DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F837
2F1D ; [.FB40.0020.0004][.D3E3.0000.0000] # KANGXI RADICAL MOUTH
F906 ; [.FB40.0020.0002][.D3E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F906
2F839 ; [.FB40.0020.0002][.D3EB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F839
1F251 ; [.FB40.0020.0006][.D3EF.0000.0000] # CIRCLED IDEOGRAPH ACCEPT
2F83A ; [.FB40.0020.0002][.D3F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83A
32A8 ; [.FB40.0020.0006][.D3F3.0000.0000] # CIRCLED IDEOGRAPH RIGHT
1F22E ; [.FB40.0020.001C][.D3F3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-53F3
2F83B ; [.FB40.0020.0002][.D406.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83B
1F234 ; [.FB40.0020.001C][.D408.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5408
3234 ; [*0317.0020.0004][.FB40.0020.0004][.D40D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME
3294 ; [.FB40.0020.0006][.D40D.0000.0000] # CIRCLED IDEOGRAPH NAME
F9DE ; [.FB40.0020.0002][.D40F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DE
F9ED ; [.FB40.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9ED
2F83D ; [.FB40.0020.0002][.D438.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83D
1F225 ; [.FB40.0020.001C][.D439.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5439
F980 ; [.FB40.0020.0002][.D442.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F980
2F83E ; [.FB40.0020.0002][.D448.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83E
2F83F ; [.FB40.0020.0002][.D468.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83F
323A ; [*0317.0020.0004][.FB40.0020.0004][.D47C.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL
2F83C ; [.FB40.0020.0002][.D49E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83C
2F840 ; [.FB40.0020.0002][.D4A2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F840
F99E ; [.FB40.0020.0002][.D4BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99E
2F841 ; [.FB40.0020.0002][.D4F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F841
2F842 ; [.FB40.0020.0002][.D510.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F842
3244 ; [.FB40.0020.0006][.D54F.0000.0000] # CIRCLED IDEOGRAPH QUESTION
2F843 ; [.FB40.0020.0002][.D553.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F843
FA79 ; [.FB40.0020.0002][.D555.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA79
2F844 ; [.FB40.0020.0002][.D563.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F844
2F845 ; [.FB40.0020.0002][.D584.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F845
2F846 ; [.FB40.0020.0002][.D584.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F846
F90B ; [.FB40.0020.0002][.D587.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90B
FA7A ; [.FB40.0020.0002][.D599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7A
2F847 ; [.FB40.0020.0002][.D599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F847
FA36 ; [.FB40.0020.0002][.D59D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA36
FA78 ; [.FB40.0020.0002][.D59D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA78
2F848 ; [.FB40.0020.0002][.D5AB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F848
2F849 ; [.FB40.0020.0002][.D5B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F849
1F23A ; [.FB40.0020.001C][.D5B6.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-55B6
FA0D ; [.FB40.0020.0002][.D5C0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0D
2F84A ; [.FB40.0020.0002][.D5C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84A
FA7B ; [.FB40.0020.0002][.D5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7B
FA37 ; [.FB40.0020.0002][.D606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA37
2F84C ; [.FB40.0020.0002][.D606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84C
2F84E ; [.FB40.0020.0002][.D651.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84E
FA38 ; [.FB40.0020.0002][.D668.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA38
2F84F ; [.FB40.0020.0002][.D674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84F
2F1E ; [.FB40.0020.0004][.D6D7.0000.0000] # KANGXI RADICAL ENCLOSURE
3223 ; [*0317.0020.0004][.FB40.0020.0004][.D6DB.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR
3283 ; [.FB40.0020.0006][.D6DB.0000.0000] # CIRCLED IDEOGRAPH FOUR
3195 ; [.FB40.0020.0014][.D6DB.0000.0000] # IDEOGRAPHIC ANNOTATION FOUR MARK
F9A9 ; [.FB40.0020.0002][.D6F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A9
2F84B ; [.FB40.0020.0002][.D716.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84B
2F84D ; [.FB40.0020.0002][.D717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84D
2F1F ; [.FB40.0020.0004][.D71F.0000.0000] # KANGXI RADICAL EARTH
322F ; [*0317.0020.0004][.FB40.0020.0004][.D71F.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH
328F ; [.FB40.0020.0006][.D71F.0000.0000] # CIRCLED IDEOGRAPH EARTH
319E ; [.FB40.0020.0014][.D730.0000.0000] # IDEOGRAPHIC ANNOTATION EARTH MARK
2F855 ; [.FB40.0020.0002][.D78B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F855
2F852 ; [.FB40.0020.0002][.D7CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F852
2F853 ; [.FB40.0020.0002][.D7F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F853
2F854 ; [.FB40.0020.0002][.D80D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F854
2F857 ; [.FB40.0020.0002][.D831.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F857
2F856 ; [.FB40.0020.0002][.D832.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F856
FA39 ; [.FB40.0020.0002][.D840.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA39
FA10 ; [.FB40.0020.0002][.D85A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA10
FA7C ; [.FB40.0020.0002][.D85A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7C
F96C ; [.FB40.0020.0002][.D85E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96C
FA3A ; [.FB40.0020.0002][.D8A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3A
2F858 ; [.FB40.0020.0002][.D8AC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F858
FA7D ; [.FB40.0020.0002][.D8B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7D
F94A ; [.FB40.0020.0002][.D8D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94A
F942 ; [.FB40.0020.0002][.D8DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F942
2F20 ; [.FB40.0020.0004][.D8EB.0000.0000] # KANGXI RADICAL SCHOLAR
2F851 ; [.FB40.0020.0002][.D8EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F851
1F224 ; [.FB40.0020.001C][.D8F0.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-58F0
2F85A ; [.FB40.0020.0002][.D8F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85A
2F85B ; [.FB40.0020.0002][.D8F7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85B
2F21 ; [.FB40.0020.0004][.D902.0000.0000] # KANGXI RADICAL GO
2F85C ; [.FB40.0020.0002][.D906.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85C
2F22 ; [.FB40.0020.0004][.D90A.0000.0000] # KANGXI RADICAL GO SLOWLY
2F23 ; [.FB40.0020.0004][.D915.0000.0000] # KANGXI RADICAL EVENING
2F85D ; [.FB40.0020.0002][.D91A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85D
1F215 ; [.FB40.0020.001C][.D91A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-591A
32B0 ; [.FB40.0020.0006][.D91C.0000.0000] # CIRCLED IDEOGRAPH NIGHT
2F85E ; [.FB40.0020.0002][.D922.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85E
2F24 ; [.FB40.0020.0004][.D927.0000.0000] # KANGXI RADICAL BIG
337D ; [.FB40.0020.001C][.D927.0000.0000][.FB40.0020.001C][.EB63.0000.0000] # SQUARE ERA NAME TAISYOU
319D ; [.FB40.0020.0014][.D929.0000.0000] # IDEOGRAPHIC ANNOTATION HEAVEN MARK
1F217 ; [.FB40.0020.001C][.D929.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5929
FA7E ; [.FB40.0020.0002][.D944.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7E
F90C ; [.FB40.0020.0002][.D948.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90C
F909 ; [.FB40.0020.0002][.D951.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F909
FA7F ; [.FB40.0020.0002][.D954.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7F
2F85F ; [.FB40.0020.0002][.D962.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85F
F981 ; [.FB40.0020.0002][.D973.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F981
2F25 ; [.FB40.0020.0004][.D973.0000.0000] # KANGXI RADICAL WOMAN
329B ; [.FB40.0020.0006][.D973.0000.0000] # CIRCLED IDEOGRAPH FEMALE
2F865 ; [.FB40.0020.0002][.D9D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F865
2F862 ; [.FB40.0020.0002][.D9EC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F862
2F863 ; [.FB40.0020.0002][.DA1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F863
2F864 ; [.FB40.0020.0002][.DA27.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F864
FA80 ; [.FB40.0020.0002][.DA62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA80
2F866 ; [.FB40.0020.0002][.DA66.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F866
2F986 ; [.FB40.0020.0002][.DAB5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F986
2F869 ; [.FB40.0020.0002][.DB08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F869
FA81 ; [.FB40.0020.0002][.DB28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA81
2F86A ; [.FB40.0020.0002][.DB3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86A
2F86B ; [.FB40.0020.0002][.DB3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86B
2F26 ; [.FB40.0020.0004][.DB50.0000.0000] # KANGXI RADICAL CHILD
1F211 ; [.FB40.0020.001C][.DB57.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5B57
323B ; [*0317.0020.0004][.FB40.0020.0004][.DB66.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY
32AB ; [.FB40.0020.0006][.DB66.0000.0000] # CIRCLED IDEOGRAPH STUDY
2F27 ; [.FB40.0020.0004][.DB80.0000.0000] # KANGXI RADICAL ROOF
FA04 ; [.FB40.0020.0002][.DB85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA04
1F243 ; [*0379.0020.0004][.FB40.0020.0004][.DB89.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
32AA ; [.FB40.0020.0006][.DB97.0000.0000] # CIRCLED IDEOGRAPH RELIGION
2F86D ; [.FB40.0020.0002][.DBC3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86D
2F86E ; [.FB40.0020.0002][.DBD8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86E
F95F ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95F
F9AA ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AA
2F86F ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86F
F9BC ; [.FB40.0020.0002][.DBEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BC
2F870 ; [.FB40.0020.0002][.DBF3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F870
2F28 ; [.FB40.0020.0004][.DBF8.0000.0000] # KANGXI RADICAL INCH
2F872 ; [.FB40.0020.0002][.DBFF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F872
2F873 ; [.FB40.0020.0002][.DC06.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F873
2F29 ; [.FB40.0020.0004][.DC0F.0000.0000] # KANGXI RADICAL SMALL
2E8C ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0110.0004] # CJK RADICAL SMALL ONE
2E8D ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0111.0004] # CJK RADICAL SMALL TWO
2F875 ; [.FB40.0020.0002][.DC22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F875
2E90 ; [.FB40.0020.0004][.DC22.0000.0000] # CJK RADICAL LAME THREE
2F2A ; [.FB40.0020.0004][.DC22.0000.0000] # KANGXI RADICAL LAME
2E8E ; [.FB40.0020.0004][.DC22.0000.0000][.0000.0110.0004] # CJK RADICAL LAME ONE
2E8F ; [.FB40.0020.0004][.DC23.0000.0000] # CJK RADICAL LAME TWO
2E91 ; [.FB40.0020.0004][.DC23.0000.0000][.0000.0110.0004] # CJK RADICAL LAME FOUR
2F2B ; [.FB40.0020.0004][.DC38.0000.0000] # KANGXI RADICAL CORPSE
F9BD ; [.FB40.0020.0002][.DC3F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BD
2F877 ; [.FB40.0020.0002][.DC60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F877
F94B ; [.FB40.0020.0002][.DC62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94B
FA3B ; [.FB40.0020.0002][.DC64.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3B
F9DF ; [.FB40.0020.0002][.DC65.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DF
FA3C ; [.FB40.0020.0002][.DC6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3C
2F878 ; [.FB40.0020.0002][.DC6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F878
2F2C ; [.FB40.0020.0004][.DC6E.0000.0000] # KANGXI RADICAL SPROUT
2F2D ; [.FB40.0020.0004][.DC71.0000.0000] # KANGXI RADICAL MOUNTAIN
2F87A ; [.FB40.0020.0002][.DC8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87A
2F879 ; [.FB40.0020.0002][.DCC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F879
F9D5 ; [.FB40.0020.0002][.DD19.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D5
2F87C ; [.FB40.0020.0002][.DD43.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87C
F921 ; [.FB40.0020.0002][.DD50.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F921
2F87F ; [.FB40.0020.0002][.DD6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87F
2F87E ; [.FB40.0020.0002][.DD6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87E
2F880 ; [.FB40.0020.0002][.DD7C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F880
2F9F4 ; [.FB40.0020.0002][.DDB2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F4
F9AB ; [.FB40.0020.0002][.DDBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AB
2F2E ; [.FB40.0020.0004][.DDDB.0000.0000] # KANGXI RADICAL RIVER
2F881 ; [.FB40.0020.0002][.DDE1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F881
2F882 ; [.FB40.0020.0002][.DDE2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F882
2F2F ; [.FB40.0020.0004][.DDE5.0000.0000] # KANGXI RADICAL WORK
32A7 ; [.FB40.0020.0006][.DDE6.0000.0000] # CIRCLED IDEOGRAPH LEFT
1F22C ; [.FB40.0020.001C][.DDE6.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6
2F30 ; [.FB40.0020.0004][.DDF1.0000.0000] # KANGXI RADICAL ONESELF
2E92 ; [.FB40.0020.0004][.DDF3.0000.0000] # CJK RADICAL SNAKE
2F884 ; [.FB40.0020.0002][.DDFD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F884
2F31 ; [.FB40.0020.0004][.DDFE.0000.0000] # KANGXI RADICAL TURBAN
2F885 ; [.FB40.0020.0002][.DE28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F885
2F886 ; [.FB40.0020.0002][.DE3D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F886
2F887 ; [.FB40.0020.0002][.DE69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F887
2F32 ; [.FB40.0020.0004][.DE72.0000.0000] # KANGXI RADICAL DRY
337B ; [.FB40.0020.001C][.DE73.0000.0000][.FB40.0020.001C][.E210.0000.0000] # SQUARE ERA NAME HEISEI
F98E ; [.FB40.0020.0002][.DE74.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98E
2E93 ; [.FB40.0020.0004][.DE7A.0000.0000] # CJK RADICAL THREAD
2F33 ; [.FB40.0020.0004][.DE7A.0000.0000] # KANGXI RADICAL SHORT THREAD
3245 ; [.FB40.0020.0006][.DE7C.0000.0000] # CIRCLED IDEOGRAPH KINDERGARTEN
2F34 ; [.FB40.0020.0004][.DE7F.0000.0000] # KANGXI RADICAL DOTTED CLIFF
FA01 ; [.FB40.0020.0002][.DEA6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA01
2F88B ; [.FB40.0020.0002][.DEB0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88B
2F88C ; [.FB40.0020.0002][.DEB3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88C
2F88D ; [.FB40.0020.0002][.DEB6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88D
F9A2 ; [.FB40.0020.0002][.DEC9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A2
F928 ; [.FB40.0020.0002][.DECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F928
2F88E ; [.FB40.0020.0002][.DECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88E
FA82 ; [.FB40.0020.0002][.DED2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA82
FA0B ; [.FB40.0020.0002][.DED3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0B
FA83 ; [.FB40.0020.0002][.DED9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA83
F982 ; [.FB40.0020.0002][.DEEC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F982
2F35 ; [.FB40.0020.0004][.DEF4.0000.0000] # KANGXI RADICAL LONG STRIDE
2F890 ; [.FB40.0020.0002][.DEFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F890
2F36 ; [.FB40.0020.0004][.DEFE.0000.0000] # KANGXI RADICAL TWO HANDS
F943 ; [.FB40.0020.0002][.DF04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F943
2F37 ; [.FB40.0020.0004][.DF0B.0000.0000] # KANGXI RADICAL SHOOT
2F38 ; [.FB40.0020.0004][.DF13.0000.0000] # KANGXI RADICAL BOW
2F894 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F894
2F895 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F895
2F39 ; [.FB40.0020.0004][.DF50.0000.0000] # KANGXI RADICAL SNOUT
2E95 ; [.FB40.0020.0004][.DF50.0000.0000][.0000.0110.0004] # CJK RADICAL SNOUT TWO
2E94 ; [.FB40.0020.0004][.DF51.0000.0000] # CJK RADICAL SNOUT ONE
2F874 ; [.FB40.0020.0002][.DF53.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F874
2F3A ; [.FB40.0020.0004][.DF61.0000.0000] # KANGXI RADICAL BRISTLE
2F899 ; [.FB40.0020.0002][.DF62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F899
FA84 ; [.FB40.0020.0002][.DF69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA84
2F89A ; [.FB40.0020.0002][.DF6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89A
2F3B ; [.FB40.0020.0004][.DF73.0000.0000] # KANGXI RADICAL STEP
F9D8 ; [.FB40.0020.0002][.DF8B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D8
1F21D ; [.FB40.0020.001C][.DF8C.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C
1F250 ; [.FB40.0020.0006][.DF97.0000.0000] # CIRCLED IDEOGRAPH ADVANTAGE
2F89C ; [.FB40.0020.0002][.DF9A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89C
F966 ; [.FB40.0020.0002][.DFA9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F966
FA85 ; [.FB40.0020.0002][.DFAD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA85
2F3C ; [.FB40.0020.0004][.DFC3.0000.0000] # KANGXI RADICAL HEART
2E97 ; [.FB40.0020.0004][.DFC3.0000.0000][.0000.0110.0004] # CJK RADICAL HEART TWO
2E96 ; [.FB40.0020.0004][.DFC4.0000.0000] # CJK RADICAL HEART ONE
2F89D ; [.FB40.0020.0002][.DFCD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89D
2F89E ; [.FB40.0020.0002][.DFD7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89E
F9A3 ; [.FB40.0020.0002][.DFF5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A3
2F89F ; [.FB40.0020.0002][.DFF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89F
F960 ; [.FB40.0020.0002][.E012.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F960
F9AC ; [.FB40.0020.0002][.E01C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AC
FA6B ; [.FB40.0020.0002][.E075.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6B
2F8A0 ; [.FB40.0020.0002][.E081.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
FA3D ; [.FB40.0020.0002][.E094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3D
2F8A3 ; [.FB40.0020.0002][.E094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
2F8A5 ; [.FB40.0020.0002][.E0C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
FA86 ; [.FB40.0020.0002][.E0D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA86
F9B9 ; [.FB40.0020.0002][.E0E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B9
FA88 ; [.FB40.0020.0002][.E108.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA88
F9D9 ; [.FB40.0020.0002][.E144.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D9
2F8A6 ; [.FB40.0020.0002][.E148.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
2F8A7 ; [.FB40.0020.0002][.E14C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
2F8A9 ; [.FB40.0020.0002][.E14C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
FA87 ; [.FB40.0020.0002][.E14E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA87
2F8A8 ; [.FB40.0020.0002][.E14E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
FA8A ; [.FB40.0020.0002][.E160.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8A
FA3E ; [.FB40.0020.0002][.E168.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3E
2F8AA ; [.FB40.0020.0002][.E17A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
FA3F ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3F
FA89 ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA89
2F8AB ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
F98F ; [.FB40.0020.0002][.E190.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98F
2F8AD ; [.FB40.0020.0002][.E1A4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
2F8AE ; [.FB40.0020.0002][.E1AF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
2F8AC ; [.FB40.0020.0002][.E1B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
2F8AF ; [.FB40.0020.0002][.E1DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
FA40 ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA40
FA8B ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8B
2F8B0 ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
F90D ; [.FB40.0020.0002][.E1F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90D
2F8B1 ; [.FB40.0020.0002][.E1F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
F990 ; [.FB40.0020.0002][.E200.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F990
2F3D ; [.FB40.0020.0004][.E208.0000.0000] # KANGXI RADICAL HALBERD
2F8B2 ; [.FB40.0020.0002][.E210.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
2F8B3 ; [.FB40.0020.0002][.E21B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
F9D2 ; [.FB40.0020.0002][.E22E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D2
FA8C ; [.FB40.0020.0002][.E234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8C
2F3E ; [.FB40.0020.0004][.E236.0000.0000] # KANGXI RADICAL DOOR
2F3F ; [.FB40.0020.0004][.E24B.0000.0000] # KANGXI RADICAL HAND
1F210 ; [.FB40.0020.001C][.E24B.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-624B
2E98 ; [.FB40.0020.0004][.E24C.0000.0000] # CJK RADICAL HAND
1F245 ; [*0379.0020.0004][.FB40.0020.0004][.E253.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
1F231 ; [.FB40.0020.001C][.E253.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6253
2F8B4 ; [.FB40.0020.0002][.E25D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B4
1F227 ; [.FB40.0020.001C][.E295.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6295
2F8B5 ; [.FB40.0020.0002][.E2B1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
F925 ; [.FB40.0020.0002][.E2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F925
F95B ; [.FB40.0020.0002][.E2CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95B
FA02 ; [.FB40.0020.0002][.E2D3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA02
2F8B6 ; [.FB40.0020.0002][.E2D4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
2F8BA ; [.FB40.0020.0002][.E2FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
F973 ; [.FB40.0020.0002][.E2FE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F973
1F22F ; [.FB40.0020.001C][.E307.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6307
2F8B9 ; [.FB40.0020.0002][.E33D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
2F8B7 ; [.FB40.0020.0002][.E350.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
1F228 ; [.FB40.0020.001C][.E355.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6355
2F8BB ; [.FB40.0020.0002][.E368.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
F9A4 ; [.FB40.0020.0002][.E37B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A4
2F8BC ; [.FB40.0020.0002][.E383.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
F975 ; [.FB40.0020.0002][.E3A0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F975
2F8C1 ; [.FB40.0020.0002][.E3A9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
FA8D ; [.FB40.0020.0002][.E3C4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8D
2F8C0 ; [.FB40.0020.0002][.E3C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C0
2F8BD ; [.FB40.0020.0002][.E3E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BD
FA8E ; [.FB40.0020.0002][.E41C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8E
2F8BF ; [.FB40.0020.0002][.E422.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
FA8F ; [.FB40.0020.0002][.E452.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8F
2F8C3 ; [.FB40.0020.0002][.E469.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
2F8C6 ; [.FB40.0020.0002][.E477.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C6
2F8C4 ; [.FB40.0020.0002][.E47E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C4
F991 ; [.FB40.0020.0002][.E49A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F991
2F8C5 ; [.FB40.0020.0002][.E49D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
F930 ; [.FB40.0020.0002][.E4C4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F930
2F40 ; [.FB40.0020.0004][.E52F.0000.0000] # KANGXI RADICAL BRANCH
2F41 ; [.FB40.0020.0004][.E534.0000.0000] # KANGXI RADICAL RAP
2E99 ; [.FB40.0020.0004][.E535.0000.0000] # CJK RADICAL RAP
FA41 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA41
2F8C8 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
FA90 ; [.FB40.0020.0002][.E556.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA90
1F248 ; [*0379.0020.0004][.FB40.0020.0004][.E557.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
2F8C9 ; [.FB40.0020.0002][.E56C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
F969 ; [.FB40.0020.0002][.E578.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F969
2F42 ; [.FB40.0020.0004][.E587.0000.0000] # KANGXI RADICAL SCRIPT
3246 ; [.FB40.0020.0006][.E587.0000.0000] # CIRCLED IDEOGRAPH SCHOOL
2F43 ; [.FB40.0020.0004][.E597.0000.0000] # KANGXI RADICAL DIPPER
F9BE ; [.FB40.0020.0002][.E599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BE
1F21B ; [.FB40.0020.001C][.E599.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6599
2F44 ; [.FB40.0020.0004][.E5A4.0000.0000] # KANGXI RADICAL AXE
1F21F ; [.FB40.0020.001C][.E5B0.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-65B0
2F45 ; [.FB40.0020.0004][.E5B9.0000.0000] # KANGXI RADICAL SQUARE
F983 ; [.FB40.0020.0002][.E5C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F983
2F46 ; [.FB40.0020.0004][.E5E0.0000.0000] # KANGXI RADICAL NOT
2E9B ; [.FB40.0020.0004][.E5E1.0000.0000] # CJK RADICAL CHOKE
FA42 ; [.FB40.0020.0002][.E5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA42
2F8CB ; [.FB40.0020.0002][.E5E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CB
2F47 ; [.FB40.0020.0004][.E5E5.0000.0000] # KANGXI RADICAL SUN
3230 ; [*0317.0020.0004][.FB40.0020.0004][.E5E5.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN
3290 ; [.FB40.0020.0006][.E5E5.0000.0000] # CIRCLED IDEOGRAPH SUN
2E9C ; [.FB40.0020.0004][.E5E5.0000.0000][.0000.0110.0004] # CJK RADICAL SUN
337E ; [.FB40.0020.001C][.E60E.0000.0000][.FB40.0020.001C][.ECBB.0000.0000] # SQUARE ERA NAME MEIZI
F9E0 ; [.FB40.0020.0002][.E613.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E0
1F219 ; [.FB40.0020.001C][.E620.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6620
337C ; [.FB40.0020.001C][.E62D.0000.0000][.FB40.0020.001C][.D48C.0000.0000] # SQUARE ERA NAME SYOUWA
2F8CD ; [.FB40.0020.0002][.E649.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
FA12 ; [.FB40.0020.0002][.E674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA12
FA91 ; [.FB40.0020.0002][.E674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA91
F9C5 ; [.FB40.0020.0002][.E688.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C5
FA43 ; [.FB40.0020.0002][.E691.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA43
2F8CF ; [.FB40.0020.0002][.E691.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
2F8D5 ; [.FB40.0020.0002][.E69C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D5
FA06 ; [.FB40.0020.0002][.E6B4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA06
F98B ; [.FB40.0020.0002][.E6C6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98B
2F48 ; [.FB40.0020.0004][.E6F0.0000.0000] # KANGXI RADICAL SAY
F901 ; [.FB40.0020.0002][.E6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F901
2F8CC ; [.FB40.0020.0002][.E6F8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
2F8D4 ; [.FB40.0020.0002][.E700.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
2F49 ; [.FB40.0020.0004][.E708.0000.0000] # KANGXI RADICAL MOON
322A ; [*0317.0020.0004][.FB40.0020.0004][.E708.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON
328A ; [.FB40.0020.0006][.E708.0000.0000] # CIRCLED IDEOGRAPH MOON
1F237 ; [.FB40.0020.001C][.E708.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6708
2E9D ; [.FB40.0020.0004][.E708.0000.0000][.0000.0110.0004] # CJK RADICAL MOON
3232 ; [*0317.0020.0004][.FB40.0020.0004][.E709.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE
3292 ; [.FB40.0020.0006][.E709.0000.0000] # CIRCLED IDEOGRAPH HAVE
1F236 ; [.FB40.0020.001C][.E709.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6709
F929 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F929
FA92 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA92
2F8D8 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
FA93 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA93
2F8D9 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
2F8DA ; [.FB40.0020.0002][.E721.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DA
2F4A ; [.FB40.0020.0004][.E728.0000.0000] # KANGXI RADICAL TREE
322D ; [*0317.0020.0004][.FB40.0020.0004][.E728.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD
328D ; [.FB40.0020.0006][.E728.0000.0000] # CIRCLED IDEOGRAPH WOOD
1F240 ; [*0379.0020.0004][.FB40.0020.0004][.E72C.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
F9E1 ; [.FB40.0020.0002][.E74E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E1
2F8DC ; [.FB40.0020.0002][.E753.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
FA94 ; [.FB40.0020.0002][.E756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA94
2F8DB ; [.FB40.0020.0002][.E75E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
F9C8 ; [.FB40.0020.0002][.E77B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C8
2F8E0 ; [.FB40.0020.0002][.E785.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
F9F4 ; [.FB40.0020.0002][.E797.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F4
F9C9 ; [.FB40.0020.0002][.E7F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C9
2F8DF ; [.FB40.0020.0002][.E7FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DF
F9DA ; [.FB40.0020.0002][.E817.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DA
2F8E5 ; [.FB40.0020.0002][.E81F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E5
3231 ; [*0317.0020.0004][.FB40.0020.0004][.E82A.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK
3291 ; [.FB40.0020.0006][.E82A.0000.0000] # CIRCLED IDEOGRAPH STOCK
337F ; [.FB40.0020.001C][.E82A.0000.0000][.FB40.0020.001C][.DF0F.0000.0000][.FB40.0020.001C][.CF1A.0000.0000][.FB40.0020.001C][.F93E.0000.0000] # SQUARE CORPORATION
2F8E1 ; [.FB40.0020.0002][.E852.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E1
F97A ; [.FB40.0020.0002][.E881.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97A
FA44 ; [.FB40.0020.0002][.E885.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA44
2F8E2 ; [.FB40.0020.0002][.E885.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
2F8E4 ; [.FB40.0020.0002][.E88E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E4
F9E2 ; [.FB40.0020.0002][.E8A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E2
2F8E6 ; [.FB40.0020.0002][.E914.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E6
2F8E8 ; [.FB40.0020.0002][.E942.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
2F8E9 ; [.FB40.0020.0002][.E9A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E9
2F8EA ; [.FB40.0020.0002][.E9EA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EA
F914 ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F914
F95C ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95C
F9BF ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BF
F94C ; [.FB40.0020.0002][.EA13.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94C
2F8EB ; [.FB40.0020.0002][.EAA8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EB
F931 ; [.FB40.0020.0002][.EAD3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F931
2F8ED ; [.FB40.0020.0002][.EADB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
F91D ; [.FB40.0020.0002][.EB04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91D
2F4B ; [.FB40.0020.0004][.EB20.0000.0000] # KANGXI RADICAL LACK
2F8EF ; [.FB40.0020.0002][.EB21.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
2F8F1 ; [.FB40.0020.0002][.EB54.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
2F4C ; [.FB40.0020.0004][.EB62.0000.0000] # KANGXI RADICAL STOP
32A3 ; [.FB40.0020.0006][.EB63.0000.0000] # CIRCLED IDEOGRAPH CORRECT
2F8F3 ; [.FB40.0020.0002][.EB72.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
F98C ; [.FB40.0020.0002][.EB77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98C
FA95 ; [.FB40.0020.0002][.EB79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA95
2F4D ; [.FB40.0020.0004][.EB79.0000.0000] # KANGXI RADICAL DEATH
2E9E ; [.FB40.0020.0004][.EB7A.0000.0000][.0000.0110.0004] # CJK RADICAL DEATH
2F8F4 ; [.FB40.0020.0002][.EB9F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F4
F9A5 ; [.FB40.0020.0002][.EBAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A5
2F4E ; [.FB40.0020.0004][.EBB3.0000.0000] # KANGXI RADICAL WEAPON
F970 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F970
FA96 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA96
2F8F5 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
2F8F6 ; [.FB40.0020.0002][.EBBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F6
2F4F ; [.FB40.0020.0004][.EBCB.0000.0000] # KANGXI RADICAL DO NOT
2E9F ; [.FB40.0020.0004][.EBCD.0000.0000] # CJK RADICAL MOTHER
2F50 ; [.FB40.0020.0004][.EBD4.0000.0000] # KANGXI RADICAL COMPARE
2F51 ; [.FB40.0020.0004][.EBDB.0000.0000] # KANGXI RADICAL FUR
2F52 ; [.FB40.0020.0004][.EC0F.0000.0000] # KANGXI RADICAL CLAN
2EA0 ; [.FB40.0020.0004][.EC11.0000.0000] # CJK RADICAL CIVILIAN
2F53 ; [.FB40.0020.0004][.EC14.0000.0000] # KANGXI RADICAL STEAM
2F54 ; [.FB40.0020.0004][.EC34.0000.0000] # KANGXI RADICAL WATER
322C ; [*0317.0020.0004][.FB40.0020.0004][.EC34.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER
328C ; [.FB40.0020.0006][.EC34.0000.0000] # CIRCLED IDEOGRAPH WATER
2EA1 ; [.FB40.0020.0004][.EC35.0000.0000] # CJK RADICAL WATER ONE
2EA2 ; [.FB40.0020.0004][.EC3A.0000.0000] # CJK RADICAL WATER TWO
2F8FA ; [.FB40.0020.0002][.EC4E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
2F8FE ; [.FB40.0020.0002][.EC67.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FE
F972 ; [.FB40.0020.0002][.EC88.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F972
2F8FC ; [.FB40.0020.0002][.ECBF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
F968 ; [.FB40.0020.0002][.ECCC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F968
2F8FD ; [.FB40.0020.0002][.ECCD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FD
F9E3 ; [.FB40.0020.0002][.ECE5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E3
329F ; [.FB40.0020.0006][.ECE8.0000.0000] # CIRCLED IDEOGRAPH ATTENTION
2F8FF ; [.FB40.0020.0002][.ED16.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FF
F915 ; [.FB40.0020.0002][.ED1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F915
FA05 ; [.FB40.0020.0002][.ED1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA05
2F907 ; [.FB40.0020.0002][.ED34.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F907
2F900 ; [.FB40.0020.0002][.ED3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F900
F9CA ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CA
FA97 ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA97
2F902 ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F902
2F903 ; [.FB40.0020.0002][.ED69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F903
F92A ; [.FB40.0020.0002][.ED6A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92A
FA45 ; [.FB40.0020.0002][.ED77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA45
2F901 ; [.FB40.0020.0002][.ED77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F901
2F904 ; [.FB40.0020.0002][.ED78.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F904
2F905 ; [.FB40.0020.0002][.ED85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F905
F9F5 ; [.FB40.0020.0002][.EDCB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F5
F94D ; [.FB40.0020.0002][.EDDA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94D
F9D6 ; [.FB40.0020.0002][.EDEA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D6
2F90E ; [.FB40.0020.0002][.EDF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90E
FA46 ; [.FB40.0020.0002][.EE1A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA46
2F908 ; [.FB40.0020.0002][.EE2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F908
2F909 ; [.FB40.0020.0002][.EE6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F909
1F235 ; [.FB40.0020.001C][.EE80.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6E80
F9CB ; [.FB40.0020.0002][.EE9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CB
F9EC ; [.FB40.0020.0002][.EEBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EC
2F90C ; [.FB40.0020.0002][.EEC7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90C
FA99 ; [.FB40.0020.0002][.EECB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA99
2F90B ; [.FB40.0020.0002][.EECB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90B
F904 ; [.FB40.0020.0002][.EED1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F904
FA98 ; [.FB40.0020.0002][.EEDB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA98
F94E ; [.FB40.0020.0002][.EF0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94E
1F226 ; [.FB40.0020.001C][.EF14.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6F14
FA47 ; [.FB40.0020.0002][.EF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA47
FA9A ; [.FB40.0020.0002][.EF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9A
F992 ; [.FB40.0020.0002][.EF23.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F992
2F90F ; [.FB40.0020.0002][.EF6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90F
2F912 ; [.FB40.0020.0002][.EFC6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F912
F922 ; [.FB40.0020.0002][.EFEB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F922
F984 ; [.FB40.0020.0002][.EFFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F984
2F915 ; [.FB40.0020.0002][.F01B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F915
FA9B ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9B
2F914 ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F914
2F913 ; [.FB40.0020.0002][.F039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F913
2F917 ; [.FB40.0020.0002][.F04A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F917
2F55 ; [.FB40.0020.0004][.F06B.0000.0000] # KANGXI RADICAL FIRE
322B ; [*0317.0020.0004][.FB40.0020.0004][.F06B.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE
328B ; [.FB40.0020.0006][.F06B.0000.0000] # CIRCLED IDEOGRAPH FIRE
2EA3 ; [.FB40.0020.0004][.F06C.0000.0000] # CJK RADICAL FIRE
2F835 ; [.FB40.0020.0002][.F070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F835
2F919 ; [.FB40.0020.0002][.F077.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F919
2F918 ; [.FB40.0020.0002][.F07D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F918
F9FB ; [.FB40.0020.0002][.F099.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FB
2F91A ; [.FB40.0020.0002][.F0AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91A
1F244 ; [*0379.0020.0004][.FB40.0020.0004][.F0B9.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
F99F ; [.FB40.0020.0002][.F0C8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99F
F916 ; [.FB40.0020.0002][.F0D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F916
1F21A ; [.FB40.0020.001C][.F121.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7121
2F91C ; [.FB40.0020.0002][.F145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91C
F993 ; [.FB40.0020.0002][.F149.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F993
FA48 ; [.FB40.0020.0002][.F16E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA48
FA9C ; [.FB40.0020.0002][.F16E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9C
2F91E ; [.FB40.0020.0002][.F19C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91E
F9C0 ; [.FB40.0020.0002][.F1CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C0
F9EE ; [.FB40.0020.0002][.F1D0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EE
F932 ; [.FB40.0020.0002][.F210.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F932
F91E ; [.FB40.0020.0002][.F21B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91E
2F920 ; [.FB40.0020.0002][.F228.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F920
2F56 ; [.FB40.0020.0004][.F22A.0000.0000] # KANGXI RADICAL CLAW
FA49 ; [.FB40.0020.0002][.F22B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA49
2EA4 ; [.FB40.0020.0004][.F22B.0000.0000] # CJK RADICAL PAW ONE
2EA5 ; [.FB40.0020.0004][.F22B.0000.0000][.0000.0110.0004] # CJK RADICAL PAW TWO
FA9E ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9E
2F921 ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F921
2F57 ; [.FB40.0020.0004][.F236.0000.0000] # KANGXI RADICAL FATHER
2F58 ; [.FB40.0020.0004][.F23B.0000.0000] # KANGXI RADICAL DOUBLE X
2F59 ; [.FB40.0020.0004][.F23F.0000.0000] # KANGXI RADICAL HALF TREE TRUNK
2F5A ; [.FB40.0020.0004][.F247.0000.0000] # KANGXI RADICAL SLICE
2F922 ; [.FB40.0020.0002][.F250.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F922
2F5B ; [.FB40.0020.0004][.F259.0000.0000] # KANGXI RADICAL FANG
2F5C ; [.FB40.0020.0004][.F25B.0000.0000] # KANGXI RADICAL COW
2EA7 ; [.FB40.0020.0004][.F25B.0000.0000][.0000.0110.0004] # CJK RADICAL COW
F946 ; [.FB40.0020.0002][.F262.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F946
3235 ; [*0317.0020.0004][.FB40.0020.0004][.F279.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL
3295 ; [.FB40.0020.0006][.F279.0000.0000] # CIRCLED IDEOGRAPH SPECIAL
2F924 ; [.FB40.0020.0002][.F280.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F924
2F925 ; [.FB40.0020.0002][.F295.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F925
2F5D ; [.FB40.0020.0004][.F2AC.0000.0000] # KANGXI RADICAL DOG
2EA8 ; [.FB40.0020.0004][.F2AD.0000.0000] # CJK RADICAL DOG
FA9F ; [.FB40.0020.0002][.F2AF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9F
F9FA ; [.FB40.0020.0002][.F2C0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FA
F92B ; [.FB40.0020.0002][.F2FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92B
FA16 ; [.FB40.0020.0002][.F32A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA16
FAA0 ; [.FB40.0020.0002][.F32A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA0
F9A7 ; [.FB40.0020.0002][.F375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A7
2F928 ; [.FB40.0020.0002][.F37A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F928
2F5E ; [.FB40.0020.0004][.F384.0000.0000] # KANGXI RADICAL PROFOUND
F961 ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F961
F9DB ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DB
2F5F ; [.FB40.0020.0004][.F389.0000.0000] # KANGXI RADICAL JADE
2F929 ; [.FB40.0020.0002][.F38B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F929
2EA9 ; [.FB40.0020.0004][.F38B.0000.0000][.0000.0110.0004] # CJK RADICAL JADE
2F92B ; [.FB40.0020.0002][.F3A5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92B
F9AD ; [.FB40.0020.0002][.F3B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AD
F917 ; [.FB40.0020.0002][.F3DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F917
F9E4 ; [.FB40.0020.0002][.F406.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E4
F9CC ; [.FB40.0020.0002][.F409.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CC
FA4A ; [.FB40.0020.0002][.F422.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4A
2F92E ; [.FB40.0020.0002][.F447.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92E
2F92F ; [.FB40.0020.0002][.F45C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92F
F9AE ; [.FB40.0020.0002][.F469.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AE
FAA1 ; [.FB40.0020.0002][.F471.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA1
2F930 ; [.FB40.0020.0002][.F471.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F930
2F931 ; [.FB40.0020.0002][.F485.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F931
F994 ; [.FB40.0020.0002][.F489.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F994
F9EF ; [.FB40.0020.0002][.F498.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EF
2F932 ; [.FB40.0020.0002][.F4CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F932
2F60 ; [.FB40.0020.0004][.F4DC.0000.0000] # KANGXI RADICAL MELON
2F61 ; [.FB40.0020.0004][.F4E6.0000.0000] # KANGXI RADICAL TILE
FAA2 ; [.FB40.0020.0002][.F506.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA2
2F62 ; [.FB40.0020.0004][.F518.0000.0000] # KANGXI RADICAL SWEET
2F63 ; [.FB40.0020.0004][.F51F.0000.0000] # KANGXI RADICAL LIFE
1F222 ; [.FB40.0020.001C][.F51F.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-751F
2F934 ; [.FB40.0020.0002][.F524.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F934
2F64 ; [.FB40.0020.0004][.F528.0000.0000] # KANGXI RADICAL USE
2F65 ; [.FB40.0020.0004][.F530.0000.0000] # KANGXI RADICAL FIELD
3199 ; [.FB40.0020.0014][.F532.0000.0000] # IDEOGRAPHIC ANNOTATION FIRST MARK
1F238 ; [.FB40.0020.001C][.F533.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7533
329A ; [.FB40.0020.0006][.F537.0000.0000] # CIRCLED IDEOGRAPH MALE
FAA3 ; [.FB40.0020.0002][.F53B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA3
2F936 ; [.FB40.0020.0002][.F53E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F936
F9CD ; [.FB40.0020.0002][.F559.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CD
F976 ; [.FB40.0020.0002][.F565.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F976
F962 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F962
2F938 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F938
2F66 ; [.FB40.0020.0004][.F58B.0000.0000] # KANGXI RADICAL BOLT OF CLOTH
2EAA ; [.FB40.0020.0004][.F58B.0000.0000][.0000.0110.0004] # CJK RADICAL BOLT OF CLOTH
2F67 ; [.FB40.0020.0004][.F592.0000.0000] # KANGXI RADICAL SICKNESS
F9E5 ; [.FB40.0020.0002][.F5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E5
2F93A ; [.FB40.0020.0002][.F610.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93A
FAA4 ; [.FB40.0020.0002][.F61D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA4
FAA5 ; [.FB40.0020.0002][.F61F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA5
F9C1 ; [.FB40.0020.0002][.F642.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C1
F90E ; [.FB40.0020.0002][.F669.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90E
2F68 ; [.FB40.0020.0004][.F676.0000.0000] # KANGXI RADICAL DOTTED TENT
2F69 ; [.FB40.0020.0004][.F67D.0000.0000] # KANGXI RADICAL WHITE
2F6A ; [.FB40.0020.0004][.F6AE.0000.0000] # KANGXI RADICAL SKIN
2F6B ; [.FB40.0020.0004][.F6BF.0000.0000] # KANGXI RADICAL DISH
FA17 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA17
FAA6 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA6
1F246 ; [*0379.0020.0004][.FB40.0020.0004][.F6D7.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
FAA7 ; [.FB40.0020.0002][.F6DB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA7
323C ; [*0317.0020.0004][.FB40.0020.0004][.F6E3.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE
32AC ; [.FB40.0020.0006][.F6E3.0000.0000] # CIRCLED IDEOGRAPH SUPERVISE
F933 ; [.FB40.0020.0002][.F6E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F933
2F6C ; [.FB40.0020.0004][.F6EE.0000.0000] # KANGXI RADICAL EYE
2EAB ; [.FB40.0020.0004][.F6EE.0000.0000][.0000.0110.0004] # CJK RADICAL EYE
FAA8 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA8
2F940 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F940
F96D ; [.FB40.0020.0002][.F701.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96D
2F945 ; [.FB40.0020.0002][.F71E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F945
2F946 ; [.FB40.0020.0002][.F71F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F946
2F947 ; [.FB40.0020.0002][.F71F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F947
FAAA ; [.FB40.0020.0002][.F740.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAA
FAA9 ; [.FB40.0020.0002][.F74A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA9
2F948 ; [.FB40.0020.0002][.F74A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F948
2F94A ; [.FB40.0020.0002][.F78B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94A
FA9D ; [.FB40.0020.0002][.F7A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9D
2F6D ; [.FB40.0020.0004][.F7DB.0000.0000] # KANGXI RADICAL SPEAR
2F6E ; [.FB40.0020.0004][.F7E2.0000.0000] # KANGXI RADICAL ARROW
2F6F ; [.FB40.0020.0004][.F7F3.0000.0000] # KANGXI RADICAL STONE
2F94E ; [.FB40.0020.0002][.F84E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94E
F9CE ; [.FB40.0020.0002][.F86B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CE
F93B ; [.FB40.0020.0002][.F88C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93B
2F94F ; [.FB40.0020.0002][.F88C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94F
FA4B ; [.FB40.0020.0002][.F891.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4B
F947 ; [.FB40.0020.0002][.F8CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F947
FAAB ; [.FB40.0020.0002][.F8CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAB
2F950 ; [.FB40.0020.0002][.F8CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F950
F964 ; [.FB40.0020.0002][.F8FB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F964
F985 ; [.FB40.0020.0002][.F92A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F985
2F70 ; [.FB40.0020.0004][.F93A.0000.0000] # KANGXI RADICAL SPIRIT
2EAC ; [.FB40.0020.0004][.F93A.0000.0000][.0000.0110.0004] # CJK RADICAL SPIRIT ONE
2EAD ; [.FB40.0020.0004][.F93B.0000.0000] # CJK RADICAL SPIRIT TWO
FA18 ; [.FB40.0020.0002][.F93C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA18
FA4C ; [.FB40.0020.0002][.F93E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4C
3233 ; [*0317.0020.0004][.FB40.0020.0004][.F93E.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY
3293 ; [.FB40.0020.0006][.F93E.0000.0000] # CIRCLED IDEOGRAPH SOCIETY
FA4E ; [.FB40.0020.0002][.F948.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4E
FA4D ; [.FB40.0020.0002][.F949.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4D
FA4F ; [.FB40.0020.0002][.F950.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4F
FA50 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA50
2F953 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F953
FA51 ; [.FB40.0020.0002][.F95D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA51
3237 ; [*0317.0020.0004][.FB40.0020.0004][.F95D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION
3297 ; [.FB40.0020.0006][.F95D.0000.0000] # CIRCLED IDEOGRAPH CONGRATULATION
FA19 ; [.FB40.0020.0002][.F95E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA19
FA1A ; [.FB40.0020.0002][.F965.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1A
3240 ; [*0317.0020.0004][.FB40.0020.0004][.F96D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL
F93C ; [.FB40.0020.0002][.F97F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93C
1F232 ; [.FB40.0020.001C][.F981.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7981
FA52 ; [.FB40.0020.0002][.F98D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA52
FA53 ; [.FB40.0020.0002][.F98E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA53
FA1B ; [.FB40.0020.0002][.F98F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1B
2F956 ; [.FB40.0020.0002][.F98F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F956
F9B6 ; [.FB40.0020.0002][.F9AE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B6
2F71 ; [.FB40.0020.0004][.F9B8.0000.0000] # KANGXI RADICAL TRACK
2F72 ; [.FB40.0020.0004][.F9BE.0000.0000] # KANGXI RADICAL GRAIN
F995 ; [.FB40.0020.0002][.F9CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F995
3299 ; [.FB40.0020.0006][.F9D8.0000.0000] # CIRCLED IDEOGRAPH SECRET
2F957 ; [.FB40.0020.0002][.F9EB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F957
F956 ; [.FB40.0020.0002][.FA1C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F956
FA54 ; [.FB40.0020.0002][.FA40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA54
2F959 ; [.FB40.0020.0002][.FA40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F959
2F95A ; [.FB40.0020.0002][.FA4A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95A
2F95B ; [.FB40.0020.0002][.FA4F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95B
2F73 ; [.FB40.0020.0004][.FA74.0000.0000] # KANGXI RADICAL CAVE
1F233 ; [.FB40.0020.001C][.FA7A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A
FA55 ; [.FB40.0020.0002][.FA81.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA55
FAAC ; [.FB40.0020.0002][.FAB1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAC
F9F7 ; [.FB40.0020.0002][.FACB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F7
2F74 ; [.FB40.0020.0004][.FACB.0000.0000] # KANGXI RADICAL STAND
2F95F ; [.FB40.0020.0002][.FAEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95F
2F75 ; [.FB40.0020.0004][.FAF9.0000.0000] # KANGXI RADICAL BAMBOO
2EAE ; [.FB40.0020.0004][.FAF9.0000.0000][.0000.0110.0004] # CJK RADICAL BAMBOO
F9F8 ; [.FB40.0020.0002][.FB20.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F8
3247 ; [.FB40.0020.0006][.FB8F.0000.0000] # CIRCLED IDEOGRAPH KOTO
FA56 ; [.FB40.0020.0002][.FBC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA56
FAAD ; [.FB40.0020.0002][.FBC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAD
2F962 ; [.FB40.0020.0002][.FBC6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F962
2F963 ; [.FB40.0020.0002][.FBC9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F963
F9A6 ; [.FB40.0020.0002][.FC3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A6
F944 ; [.FB40.0020.0002][.FC60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F944
2F76 ; [.FB40.0020.0004][.FC73.0000.0000] # KANGXI RADICAL RICE
FAAE ; [.FB40.0020.0002][.FC7B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAE
F9F9 ; [.FB40.0020.0002][.FC92.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F9
FA1D ; [.FB40.0020.0002][.FCBE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1D
2F966 ; [.FB40.0020.0002][.FCD2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F966
FA03 ; [.FB40.0020.0002][.FCD6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA03
2F969 ; [.FB40.0020.0002][.FCE3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F969
F97B ; [.FB40.0020.0002][.FCE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97B
2F968 ; [.FB40.0020.0002][.FCE8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F968
2F77 ; [.FB40.0020.0004][.FCF8.0000.0000] # KANGXI RADICAL SILK
2EAF ; [.FB40.0020.0004][.FCF9.0000.0000] # CJK RADICAL SILK
2F96A ; [.FB40.0020.0002][.FD00.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96A
F9CF ; [.FB40.0020.0002][.FD10.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CF
F96A ; [.FB40.0020.0002][.FD22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96A
F94F ; [.FB40.0020.0002][.FD2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94F
1F221 ; [.FB40.0020.001C][.FD42.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7D42
FAAF ; [.FB40.0020.0002][.FD5B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAF
2F96C ; [.FB40.0020.0002][.FD63.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96C
F93D ; [.FB40.0020.0002][.FDA0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93D
F957 ; [.FB40.0020.0002][.FDBE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F957
2F96E ; [.FB40.0020.0002][.FDC7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96E
F996 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F996
FA57 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA57
FAB0 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB0
2F96F ; [.FB40.0020.0002][.FE02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96F
FA58 ; [.FB40.0020.0002][.FE09.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA58
F950 ; [.FB40.0020.0002][.FE37.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F950
FA59 ; [.FB40.0020.0002][.FE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA59
2F970 ; [.FB40.0020.0002][.FE45.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F970
2EB0 ; [.FB40.0020.0004][.FE9F.0000.0000] # CJK RADICAL C-SIMPLIFIED SILK
2F78 ; [.FB40.0020.0004][.FF36.0000.0000] # KANGXI RADICAL JAR
FAB1 ; [.FB40.0020.0002][.FF3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB1
2F79 ; [.FB40.0020.0004][.FF51.0000.0000] # KANGXI RADICAL NET
2EB2 ; [.FB40.0020.0004][.FF52.0000.0000] # CJK RADICAL NET TWO
2EB5 ; [.FB40.0020.0004][.FF52.0000.0000][.0000.0110.0004] # CJK RADICAL MESH
2EB1 ; [.FB40.0020.0004][.FF53.0000.0000] # CJK RADICAL NET ONE
2EB3 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0110.0004] # CJK RADICAL NET THREE
2EB4 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0111.0004] # CJK RADICAL NET FOUR
FA5A ; [.FB40.0020.0002][.FF72.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5A
F9E6 ; [.FB40.0020.0002][.FF79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E6
2F976 ; [.FB40.0020.0002][.FF7A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F976
F90F ; [.FB40.0020.0002][.FF85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90F
2F7A ; [.FB40.0020.0004][.FF8A.0000.0000] # KANGXI RADICAL SHEEP
2EB6 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0110.0004] # CJK RADICAL SHEEP
2EB7 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0111.0004] # CJK RADICAL RAM
2EB8 ; [.FB40.0020.0004][.FF8B.0000.0000] # CJK RADICAL EWE
2F978 ; [.FB40.0020.0002][.FF95.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F978
F9AF ; [.FB40.0020.0002][.FF9A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AF
FA1E ; [.FB40.0020.0002][.FFBD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1E
2F7B ; [.FB40.0020.0004][.FFBD.0000.0000] # KANGXI RADICAL FEATHER
2F979 ; [.FB40.0020.0002][.FFFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F979
F934 ; [.FB41.0020.0002][.8001.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F934
2F7C ; [.FB41.0020.0004][.8001.0000.0000] # KANGXI RADICAL OLD
2EB9 ; [.FB41.0020.0004][.8002.0000.0000] # CJK RADICAL OLD
FA5B ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5B
FAB2 ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB2
2F97A ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97A
2F7D ; [.FB41.0020.0004][.800C.0000.0000] # KANGXI RADICAL AND
2F7E ; [.FB41.0020.0004][.8012.0000.0000] # KANGXI RADICAL PLOW
2F7F ; [.FB41.0020.0004][.8033.0000.0000] # KANGXI RADICAL EAR
F9B0 ; [.FB41.0020.0002][.8046.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B0
2F97D ; [.FB41.0020.0002][.8060.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97D
F997 ; [.FB41.0020.0002][.806F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F997
2F97F ; [.FB41.0020.0002][.8070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97F
F945 ; [.FB41.0020.0002][.807E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F945
2F80 ; [.FB41.0020.0004][.807F.0000.0000] # KANGXI RADICAL BRUSH
2EBB ; [.FB41.0020.0004][.807F.0000.0000][.0000.0110.0004] # CJK RADICAL BRUSH TWO
2EBA ; [.FB41.0020.0004][.8080.0000.0000] # CJK RADICAL BRUSH ONE
2F81 ; [.FB41.0020.0004][.8089.0000.0000] # KANGXI RADICAL MEAT
2EBC ; [.FB41.0020.0004][.8089.0000.0000][.0000.0110.0004] # CJK RADICAL MEAT
F953 ; [.FB41.0020.0002][.808B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F953
2F8D6 ; [.FB41.0020.0002][.80AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
2F982 ; [.FB41.0020.0002][.80B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F982
2F983 ; [.FB41.0020.0002][.8103.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F983
2F985 ; [.FB41.0020.0002][.813E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F985
F926 ; [.FB41.0020.0002][.81D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F926
2F82 ; [.FB41.0020.0004][.81E3.0000.0000] # KANGXI RADICAL MINISTER
F9F6 ; [.FB41.0020.0002][.81E8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F6
2F83 ; [.FB41.0020.0004][.81EA.0000.0000] # KANGXI RADICAL SELF
3242 ; [*0317.0020.0004][.FB41.0020.0004][.81EA.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF
FA5C ; [.FB41.0020.0002][.81ED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5C
2F84 ; [.FB41.0020.0004][.81F3.0000.0000] # KANGXI RADICAL ARRIVE
3243 ; [*0317.0020.0004][.FB41.0020.0004][.81F3.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH
2F85 ; [.FB41.0020.0004][.81FC.0000.0000] # KANGXI RADICAL MORTAR
2EBD ; [.FB41.0020.0004][.81FC.0000.0000][.0000.0110.0004] # CJK RADICAL MORTAR
2F893 ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F893
2F98B ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98B
2F98C ; [.FB41.0020.0002][.8204.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98C
2F86 ; [.FB41.0020.0004][.820C.0000.0000] # KANGXI RADICAL TONGUE
FA6D ; [.FB41.0020.0002][.8218.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6D
2F87 ; [.FB41.0020.0004][.821B.0000.0000] # KANGXI RADICAL OPPOSE
2F88 ; [.FB41.0020.0004][.821F.0000.0000] # KANGXI RADICAL BOAT
2F89 ; [.FB41.0020.0004][.826E.0000.0000] # KANGXI RADICAL STOPPING
F97C ; [.FB41.0020.0002][.826F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97C
2F8A ; [.FB41.0020.0004][.8272.0000.0000] # KANGXI RADICAL COLOR
2F8B ; [.FB41.0020.0004][.8278.0000.0000] # KANGXI RADICAL GRASS
FA5D ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5D
FA5E ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5E
2EBE ; [.FB41.0020.0004][.8279.0000.0000] # CJK RADICAL GRASS ONE
2EBF ; [.FB41.0020.0004][.8279.0000.0000][.0000.0110.0004] # CJK RADICAL GRASS TWO
2EC0 ; [.FB41.0020.0004][.8279.0000.0000][.0000.0111.0004] # CJK RADICAL GRASS THREE
2F990 ; [.FB41.0020.0002][.828B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F990
2F98F ; [.FB41.0020.0002][.8291.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98F
2F991 ; [.FB41.0020.0002][.829D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F991
2F993 ; [.FB41.0020.0002][.82B1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F993
2F994 ; [.FB41.0020.0002][.82B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F994
2F995 ; [.FB41.0020.0002][.82BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F995
F974 ; [.FB41.0020.0002][.82E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F974
2F998 ; [.FB41.0020.0002][.82E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F998
2F996 ; [.FB41.0020.0002][.82E6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F996
2F999 ; [.FB41.0020.0002][.831D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F999
2F99C ; [.FB41.0020.0002][.8323.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99C
F9FE ; [.FB41.0020.0002][.8336.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FE
FAB3 ; [.FB41.0020.0002][.8352.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB3
2F9A0 ; [.FB41.0020.0002][.8353.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A0
2F99A ; [.FB41.0020.0002][.8363.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99A
2F99B ; [.FB41.0020.0002][.83AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99B
2F99D ; [.FB41.0020.0002][.83BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99D
F93E ; [.FB41.0020.0002][.83C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93E
2F9A1 ; [.FB41.0020.0002][.83CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
2F9A2 ; [.FB41.0020.0002][.83CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
2F9A3 ; [.FB41.0020.0002][.83DC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
2F99E ; [.FB41.0020.0002][.83E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99E
FAB4 ; [.FB41.0020.0002][.83EF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB4
F958 ; [.FB41.0020.0002][.83F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F958
F918 ; [.FB41.0020.0002][.843D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F918
F96E ; [.FB41.0020.0002][.8449.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96E
FA5F ; [.FB41.0020.0002][.8457.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5F
2F99F ; [.FB41.0020.0002][.8457.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99F
F999 ; [.FB41.0020.0002][.84EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F999
2F9A8 ; [.FB41.0020.0002][.84F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
2F9A9 ; [.FB41.0020.0002][.84F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A9
F9C2 ; [.FB41.0020.0002][.84FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C2
2F9AA ; [.FB41.0020.0002][.8516.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AA
2F9AC ; [.FB41.0020.0002][.8564.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
F923 ; [.FB41.0020.0002][.85CD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F923
F9F0 ; [.FB41.0020.0002][.85FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F0
F935 ; [.FB41.0020.0002][.8606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F935
FA20 ; [.FB41.0020.0002][.8612.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA20
F91F ; [.FB41.0020.0002][.862D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91F
F910 ; [.FB41.0020.0002][.863F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F910
2F8C ; [.FB41.0020.0004][.864D.0000.0000] # KANGXI RADICAL TIGER
2EC1 ; [.FB41.0020.0004][.864E.0000.0000] # CJK RADICAL TIGER
2F9B3 ; [.FB41.0020.0002][.8650.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
F936 ; [.FB41.0020.0002][.865C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F936
2F9B4 ; [.FB41.0020.0002][.865C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
2F9B5 ; [.FB41.0020.0002][.8667.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
2F9B6 ; [.FB41.0020.0002][.8669.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B6
2F8D ; [.FB41.0020.0004][.866B.0000.0000] # KANGXI RADICAL INSECT
2F9B8 ; [.FB41.0020.0002][.8688.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B8
2F9B7 ; [.FB41.0020.0002][.86A9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
2F9BA ; [.FB41.0020.0002][.86E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BA
2F9B9 ; [.FB41.0020.0002][.870E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B9
2F9BC ; [.FB41.0020.0002][.8728.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
2F9BD ; [.FB41.0020.0002][.876B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BD
FAB5 ; [.FB41.0020.0002][.8779.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB5
2F9BB ; [.FB41.0020.0002][.8779.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BB
2F9BE ; [.FB41.0020.0002][.8786.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BE
F911 ; [.FB41.0020.0002][.87BA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F911
2F9C0 ; [.FB41.0020.0002][.87E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C0
2F9C1 ; [.FB41.0020.0002][.8801.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C1
F927 ; [.FB41.0020.0002][.881F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F927
2F8E ; [.FB41.0020.0004][.8840.0000.0000] # KANGXI RADICAL BLOOD
FA08 ; [.FB41.0020.0002][.884C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA08
2F8F ; [.FB41.0020.0004][.884C.0000.0000] # KANGXI RADICAL WALK ENCLOSURE
2F9C3 ; [.FB41.0020.0002][.8860.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C3
2F9C4 ; [.FB41.0020.0002][.8863.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
2F90 ; [.FB41.0020.0004][.8863.0000.0000] # KANGXI RADICAL CLOTHES
2EC2 ; [.FB41.0020.0004][.8864.0000.0000] # CJK RADICAL CLOTHES
F9A0 ; [.FB41.0020.0002][.88C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A0
F9E7 ; [.FB41.0020.0002][.88CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E7
2F9C6 ; [.FB41.0020.0002][.88D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C6
2F9C7 ; [.FB41.0020.0002][.88DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C7
F9E8 ; [.FB41.0020.0002][.88E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E8
F912 ; [.FB41.0020.0002][.88F8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F912
2F9C9 ; [.FB41.0020.0002][.88FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C9
FA60 ; [.FB41.0020.0002][.8910.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA60
FAB6 ; [.FB41.0020.0002][.8941.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB6
F924 ; [.FB41.0020.0002][.8964.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F924
2F91 ; [.FB41.0020.0004][.897E.0000.0000] # KANGXI RADICAL WEST
2EC4 ; [.FB41.0020.0004][.897F.0000.0000] # CJK RADICAL WEST TWO
2EC3 ; [.FB41.0020.0004][.8980.0000.0000] # CJK RADICAL WEST ONE
FAB7 ; [.FB41.0020.0002][.8986.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB7
FA0A ; [.FB41.0020.0002][.898B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0A
2F92 ; [.FB41.0020.0004][.898B.0000.0000] # KANGXI RADICAL SEE
FA61 ; [.FB41.0020.0002][.8996.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA61
FAB8 ; [.FB41.0020.0002][.8996.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB8
2EC5 ; [.FB41.0020.0004][.89C1.0000.0000] # CJK RADICAL C-SIMPLIFIED SEE
2EC6 ; [.FB41.0020.0004][.89D2.0000.0000] # CJK RADICAL SIMPLIFIED HORN
2F93 ; [.FB41.0020.0004][.89D2.0000.0000] # KANGXI RADICAL HORN
2EC7 ; [.FB41.0020.0004][.89D2.0000.0000][.0000.0110.0004] # CJK RADICAL HORN
1F216 ; [.FB41.0020.001C][.89E3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-89E3
2F94 ; [.FB41.0020.0004][.8A00.0000.0000] # KANGXI RADICAL SPEECH
2F9CF ; [.FB41.0020.0002][.8AA0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
F96F ; [.FB41.0020.0002][.8AAA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96F
F9A1 ; [.FB41.0020.0002][.8AAA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A1
FAB9 ; [.FB41.0020.0002][.8ABF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB9
FABB ; [.FB41.0020.0002][.8ACB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABB
F97D ; [.FB41.0020.0002][.8AD2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97D
F941 ; [.FB41.0020.0002][.8AD6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F941
FABE ; [.FB41.0020.0002][.8AED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABE
2F9D0 ; [.FB41.0020.0002][.8AED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
FA22 ; [.FB41.0020.0002][.8AF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA22
FABA ; [.FB41.0020.0002][.8AF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABA
F95D ; [.FB41.0020.0002][.8AFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95D
FABD ; [.FB41.0020.0002][.8AFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABD
FA62 ; [.FB41.0020.0002][.8B01.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA62
FABC ; [.FB41.0020.0002][.8B01.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABC
FA63 ; [.FB41.0020.0002][.8B39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA63
FABF ; [.FB41.0020.0002][.8B39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABF
F9FC ; [.FB41.0020.0002][.8B58.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FC
F95A ; [.FB41.0020.0002][.8B80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95A
FAC0 ; [.FB41.0020.0002][.8B8A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC0
2F9D1 ; [.FB41.0020.0002][.8B8A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
2EC8 ; [.FB41.0020.0004][.8BA0.0000.0000] # CJK RADICAL C-SIMPLIFIED SPEECH
2F95 ; [.FB41.0020.0004][.8C37.0000.0000] # KANGXI RADICAL VALLEY
2F96 ; [.FB41.0020.0004][.8C46.0000.0000] # KANGXI RADICAL BEAN
F900 ; [.FB41.0020.0002][.8C48.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F900
2F9D2 ; [.FB41.0020.0002][.8C55.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
2F97 ; [.FB41.0020.0004][.8C55.0000.0000] # KANGXI RADICAL PIG
2F98 ; [.FB41.0020.0004][.8C78.0000.0000] # KANGXI RADICAL BADGER
2F99 ; [.FB41.0020.0004][.8C9D.0000.0000] # KANGXI RADICAL SHELL
3236 ; [*0317.0020.0004][.FB41.0020.0004][.8CA1.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL
3296 ; [.FB41.0020.0006][.8CA1.0000.0000] # CIRCLED IDEOGRAPH FINANCIAL
1F223 ; [.FB41.0020.001C][.8CA9.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9
2F9D4 ; [.FB41.0020.0002][.8CAB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
2F9D5 ; [.FB41.0020.0002][.8CC1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
F948 ; [.FB41.0020.0002][.8CC2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F948
323E ; [*0317.0020.0004][.FB41.0020.0004][.8CC7.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE
32AE ; [.FB41.0020.0006][.8CC7.0000.0000] # CIRCLED IDEOGRAPH RESOURCE
F903 ; [.FB41.0020.0002][.8CC8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F903
FA64 ; [.FB41.0020.0002][.8CD3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA64
FA65 ; [.FB41.0020.0002][.8D08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA65
FAC1 ; [.FB41.0020.0002][.8D08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC1
2F9D6 ; [.FB41.0020.0002][.8D1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
2EC9 ; [.FB41.0020.0004][.8D1D.0000.0000] # CJK RADICAL C-SIMPLIFIED SHELL
2F9A ; [.FB41.0020.0004][.8D64.0000.0000] # KANGXI RADICAL RED
2F9B ; [.FB41.0020.0004][.8D70.0000.0000] # KANGXI RADICAL RUN
1F230 ; [.FB41.0020.001C][.8D70.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8D70
2F9D7 ; [.FB41.0020.0002][.8D77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
2F9C ; [.FB41.0020.0004][.8DB3.0000.0000] # KANGXI RADICAL FOOT
2ECA ; [.FB41.0020.0004][.8DB3.0000.0000][.0000.0110.0004] # CJK RADICAL FOOT
2F9DB ; [.FB41.0020.0002][.8DBC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
2F9DA ; [.FB41.0020.0002][.8DCB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
F937 ; [.FB41.0020.0002][.8DEF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F937
2F9DC ; [.FB41.0020.0002][.8DF0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DC
2F9D ; [.FB41.0020.0004][.8EAB.0000.0000] # KANGXI RADICAL BODY
F902 ; [.FB41.0020.0002][.8ECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F902
2F9E ; [.FB41.0020.0004][.8ECA.0000.0000] # KANGXI RADICAL CART
2F9DE ; [.FB41.0020.0002][.8ED4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DE
F998 ; [.FB41.0020.0002][.8F26.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F998
F9D7 ; [.FB41.0020.0002][.8F2A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D7
FAC2 ; [.FB41.0020.0002][.8F38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC2
2F9DF ; [.FB41.0020.0002][.8F38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
FA07 ; [.FB41.0020.0002][.8F3B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA07
F98D ; [.FB41.0020.0002][.8F62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98D
2ECB ; [.FB41.0020.0004][.8F66.0000.0000] # CJK RADICAL C-SIMPLIFIED CART
2F9F ; [.FB41.0020.0004][.8F9B.0000.0000] # KANGXI RADICAL BITTER
2F98D ; [.FB41.0020.0002][.8F9E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98D
F971 ; [.FB41.0020.0002][.8FB0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F971
2FA0 ; [.FB41.0020.0004][.8FB0.0000.0000] # KANGXI RADICAL MORNING
2FA1 ; [.FB41.0020.0004][.8FB5.0000.0000] # KANGXI RADICAL WALK
FA66 ; [.FB41.0020.0002][.8FB6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA66
2ECC ; [.FB41.0020.0004][.8FB6.0000.0000] # CJK RADICAL SIMPLIFIED WALK
2ECD ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0110.0004] # CJK RADICAL WALK ONE
2ECE ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0111.0004] # CJK RADICAL WALK TWO
F99A ; [.FB41.0020.0002][.9023.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99A
FA25 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA25
FA67 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA67
1F22B ; [.FB41.0020.001C][.904A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-904A
329C ; [.FB41.0020.0006][.9069.0000.0000] # CIRCLED IDEOGRAPH SUITABLE
FAC3 ; [.FB41.0020.0002][.9072.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC3
F9C3 ; [.FB41.0020.0002][.907C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C3
F913 ; [.FB41.0020.0002][.908F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F913
2FA2 ; [.FB41.0020.0004][.9091.0000.0000] # KANGXI RADICAL CITY
2ECF ; [.FB41.0020.0004][.9091.0000.0000][.0000.0110.0004] # CJK RADICAL CITY
2F9E2 ; [.FB41.0020.0002][.9094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E2
F92C ; [.FB41.0020.0002][.90CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92C
FA2E ; [.FB41.0020.0002][.90DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2E
2F9E3 ; [.FB41.0020.0002][.90F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E3
FA26 ; [.FB41.0020.0002][.90FD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA26
2F9E4 ; [.FB41.0020.0002][.9111.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E4
2F9E6 ; [.FB41.0020.0002][.911B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E6
2FA3 ; [.FB41.0020.0004][.9149.0000.0000] # KANGXI RADICAL WINE
1F23B ; [.FB41.0020.001C][.914D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-914D
F919 ; [.FB41.0020.0002][.916A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F919
FAC4 ; [.FB41.0020.0002][.9199.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC4
F9B7 ; [.FB41.0020.0002][.91B4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B7
2FA4 ; [.FB41.0020.0004][.91C6.0000.0000] # KANGXI RADICAL DISTINGUISH
F9E9 ; [.FB41.0020.0002][.91CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E9
2FA5 ; [.FB41.0020.0004][.91CC.0000.0000] # KANGXI RADICAL VILLAGE
F97E ; [.FB41.0020.0002][.91CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97E
F90A ; [.FB41.0020.0002][.91D1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90A
2FA6 ; [.FB41.0020.0004][.91D1.0000.0000] # KANGXI RADICAL GOLD
322E ; [*0317.0020.0004][.FB41.0020.0004][.91D1.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL
328E ; [.FB41.0020.0006][.91D1.0000.0000] # CIRCLED IDEOGRAPH METAL
F9B1 ; [.FB41.0020.0002][.9234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B1
2F9E7 ; [.FB41.0020.0002][.9238.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
FAC5 ; [.FB41.0020.0002][.9276.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC5
2F9EA ; [.FB41.0020.0002][.927C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
2F9E8 ; [.FB41.0020.0002][.92D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
2F9E9 ; [.FB41.0020.0002][.92D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E9
F93F ; [.FB41.0020.0002][.9304.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93F
F99B ; [.FB41.0020.0002][.934A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99B
2F9EB ; [.FB41.0020.0002][.93F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EB
2F9EC ; [.FB41.0020.0002][.9415.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EC
2ED0 ; [.FB41.0020.0004][.9485.0000.0000] # CJK RADICAL C-SIMPLIFIED GOLD
2ED1 ; [.FB41.0020.0004][.9577.0000.0000] # CJK RADICAL LONG ONE
2FA7 ; [.FB41.0020.0004][.9577.0000.0000] # KANGXI RADICAL LONG
2ED2 ; [.FB41.0020.0004][.9578.0000.0000] # CJK RADICAL LONG TWO
2ED3 ; [.FB41.0020.0004][.957F.0000.0000] # CJK RADICAL C-SIMPLIFIED LONG
2FA8 ; [.FB41.0020.0004][.9580.0000.0000] # KANGXI RADICAL GATE
2F9EE ; [.FB41.0020.0002][.958B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
F986 ; [.FB41.0020.0002][.95AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F986
2F9F0 ; [.FB41.0020.0002][.95B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F0
2ED4 ; [.FB41.0020.0004][.95E8.0000.0000] # CJK RADICAL C-SIMPLIFIED GATE
2FA9 ; [.FB41.0020.0004][.961C.0000.0000] # KANGXI RADICAL MOUND
2ED5 ; [.FB41.0020.0004][.961C.0000.0000][.0000.0110.0004] # CJK RADICAL MOUND ONE
2ED6 ; [.FB41.0020.0004][.961D.0000.0000] # CJK RADICAL MOUND TWO
F9C6 ; [.FB41.0020.0002][.962E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C6
F951 ; [.FB41.0020.0002][.964B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F951
FA09 ; [.FB41.0020.0002][.964D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA09
F959 ; [.FB41.0020.0002][.9675.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F959
F9D3 ; [.FB41.0020.0002][.9678.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D3
FAC6 ; [.FB41.0020.0002][.967C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC6
F9DC ; [.FB41.0020.0002][.9686.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DC
F9F1 ; [.FB41.0020.0002][.96A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F1
2FAA ; [.FB41.0020.0004][.96B6.0000.0000] # KANGXI RADICAL SLAVE
FA2F ; [.FB41.0020.0002][.96B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2F
F9B8 ; [.FB41.0020.0002][.96B8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B8
2FAB ; [.FB41.0020.0004][.96B9.0000.0000] # KANGXI RADICAL SHORT TAILED BIRD
2F9F3 ; [.FB41.0020.0002][.96C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F3
F9EA ; [.FB41.0020.0002][.96E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EA
FA68 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA68
FAC7 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC7
2FAC ; [.FB41.0020.0004][.96E8.0000.0000] # KANGXI RADICAL RAIN
2ED7 ; [.FB41.0020.0004][.96E8.0000.0000][.0000.0110.0004] # CJK RADICAL RAIN
F9B2 ; [.FB41.0020.0002][.96F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B2
F949 ; [.FB41.0020.0002][.96F7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F949
2F9F5 ; [.FB41.0020.0002][.9723.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
F938 ; [.FB41.0020.0002][.9732.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F938
F9B3 ; [.FB41.0020.0002][.9748.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B3
2FAD ; [.FB41.0020.0004][.9751.0000.0000] # KANGXI RADICAL BLUE
2ED8 ; [.FB41.0020.0004][.9752.0000.0000] # CJK RADICAL BLUE
FA1C ; [.FB41.0020.0002][.9756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1C
FAC8 ; [.FB41.0020.0002][.9756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC8
2FAE ; [.FB41.0020.0004][.975E.0000.0000] # KANGXI RADICAL WRONG
2FAF ; [.FB41.0020.0004][.9762.0000.0000] # KANGXI RADICAL FACE
2FB0 ; [.FB41.0020.0004][.9769.0000.0000] # KANGXI RADICAL LEATHER
2FB1 ; [.FB41.0020.0004][.97CB.0000.0000] # KANGXI RADICAL TANNED LEATHER
FAC9 ; [.FB41.0020.0002][.97DB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC9
2F9FA ; [.FB41.0020.0002][.97E0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FA
2ED9 ; [.FB41.0020.0004][.97E6.0000.0000] # CJK RADICAL C-SIMPLIFIED TANNED LEATHER
2FB2 ; [.FB41.0020.0004][.97ED.0000.0000] # KANGXI RADICAL LEEK
2FB3 ; [.FB41.0020.0004][.97F3.0000.0000] # KANGXI RADICAL SOUND
FA69 ; [.FB41.0020.0002][.97FF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA69
FACA ; [.FB41.0020.0002][.97FF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACA
2FB4 ; [.FB41.0020.0004][.9801.0000.0000] # KANGXI RADICAL LEAF
32A0 ; [.FB41.0020.0006][.9805.0000.0000] # CIRCLED IDEOGRAPH ITEM
FACB ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACB
2F9FE ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FE
2F9FF ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FF
F9B4 ; [.FB41.0020.0002][.9818.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B4
2FA00 ; [.FB41.0020.0002][.9829.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA00
FA6A ; [.FB41.0020.0002][.983B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6A
FACC ; [.FB41.0020.0002][.983B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACC
F9D0 ; [.FB41.0020.0002][.985E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D0
2EDA ; [.FB41.0020.0004][.9875.0000.0000] # CJK RADICAL C-SIMPLIFIED LEAF
2FB5 ; [.FB41.0020.0004][.98A8.0000.0000] # KANGXI RADICAL WIND
2EDB ; [.FB41.0020.0004][.98CE.0000.0000] # CJK RADICAL C-SIMPLIFIED WIND
2FB6 ; [.FB41.0020.0004][.98DB.0000.0000] # KANGXI RADICAL FLY
2EDC ; [.FB41.0020.0004][.98DE.0000.0000] # CJK RADICAL C-SIMPLIFIED FLY
2EDD ; [.FB41.0020.0004][.98DF.0000.0000] # CJK RADICAL EAT ONE
2FB7 ; [.FB41.0020.0004][.98DF.0000.0000] # KANGXI RADICAL EAT
2EDF ; [.FB41.0020.0004][.98E0.0000.0000] # CJK RADICAL EAT THREE
2EDE ; [.FB41.0020.0004][.98E0.0000.0000][.0000.0110.0004] # CJK RADICAL EAT TWO
2FA02 ; [.FB41.0020.0002][.98E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA02
FA2A ; [.FB41.0020.0002][.98EF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2A
FA2B ; [.FB41.0020.0002][.98FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2B
FA2C ; [.FB41.0020.0002][.9928.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2C
2FA04 ; [.FB41.0020.0002][.9929.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA04
2EE0 ; [.FB41.0020.0004][.9963.0000.0000] # CJK RADICAL C-SIMPLIFIED EAT
2FB8 ; [.FB41.0020.0004][.9996.0000.0000] # KANGXI RADICAL HEAD
2EE1 ; [.FB41.0020.0004][.9996.0000.0000][.0000.0110.0004] # CJK RADICAL HEAD
2FB9 ; [.FB41.0020.0004][.9999.0000.0000] # KANGXI RADICAL FRAGRANT
2FA05 ; [.FB41.0020.0002][.99A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA05
2FBA ; [.FB41.0020.0004][.99AC.0000.0000] # KANGXI RADICAL HORSE
2FA06 ; [.FB41.0020.0002][.99C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA06
F91A ; [.FB41.0020.0002][.99F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91A
2FA07 ; [.FB41.0020.0002][.99FE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA07
F987 ; [.FB41.0020.0002][.9A6A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F987
2EE2 ; [.FB41.0020.0004][.9A6C.0000.0000] # CJK RADICAL C-SIMPLIFIED HORSE
2FBB ; [.FB41.0020.0004][.9AA8.0000.0000] # KANGXI RADICAL BONE
2EE3 ; [.FB41.0020.0004][.9AA8.0000.0000][.0000.0110.0004] # CJK RADICAL BONE
2FBC ; [.FB41.0020.0004][.9AD8.0000.0000] # KANGXI RADICAL TALL
2FBD ; [.FB41.0020.0004][.9ADF.0000.0000] # KANGXI RADICAL HAIR
FACD ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACD
2FA0A ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
2FBE ; [.FB41.0020.0004][.9B25.0000.0000] # KANGXI RADICAL FIGHT
2FBF ; [.FB41.0020.0004][.9B2F.0000.0000] # KANGXI RADICAL SACRIFICIAL WINE
2FC0 ; [.FB41.0020.0004][.9B32.0000.0000] # KANGXI RADICAL CAULDRON
2FC1 ; [.FB41.0020.0004][.9B3C.0000.0000] # KANGXI RADICAL GHOST
2EE4 ; [.FB41.0020.0004][.9B3C.0000.0000][.0000.0110.0004] # CJK RADICAL GHOST
2FC2 ; [.FB41.0020.0004][.9B5A.0000.0000] # KANGXI RADICAL FISH
F939 ; [.FB41.0020.0002][.9B6F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F939
2FA0B ; [.FB41.0020.0002][.9C40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0B
F9F2 ; [.FB41.0020.0002][.9C57.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F2
2EE5 ; [.FB41.0020.0004][.9C7C.0000.0000] # CJK RADICAL C-SIMPLIFIED FISH
2FC3 ; [.FB41.0020.0004][.9CE5.0000.0000] # KANGXI RADICAL BIRD
2FA0C ; [.FB41.0020.0002][.9CFD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0C
2FA0F ; [.FB41.0020.0002][.9D67.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0F
FA2D ; [.FB41.0020.0002][.9DB4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2D
F93A ; [.FB41.0020.0002][.9DFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93A
F920 ; [.FB41.0020.0002][.9E1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F920
2EE6 ; [.FB41.0020.0004][.9E1F.0000.0000] # CJK RADICAL C-SIMPLIFIED BIRD
2FC4 ; [.FB41.0020.0004][.9E75.0000.0000] # KANGXI RADICAL SALT
2EE7 ; [.FB41.0020.0004][.9E75.0000.0000][.0000.0110.0004] # CJK RADICAL C-SIMPLIFIED SALT
F940 ; [.FB41.0020.0002][.9E7F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F940
2FC5 ; [.FB41.0020.0004][.9E7F.0000.0000] # KANGXI RADICAL DEER
F988 ; [.FB41.0020.0002][.9E97.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F988
F9F3 ; [.FB41.0020.0002][.9E9F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F3
2FC6 ; [.FB41.0020.0004][.9EA5.0000.0000] # KANGXI RADICAL WHEAT
2EE8 ; [.FB41.0020.0004][.9EA6.0000.0000] # CJK RADICAL SIMPLIFIED WHEAT
2FA15 ; [.FB41.0020.0002][.9EBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA15
2FC7 ; [.FB41.0020.0004][.9EBB.0000.0000] # KANGXI RADICAL HEMP
2FC8 ; [.FB41.0020.0004][.9EC3.0000.0000] # KANGXI RADICAL YELLOW
2EE9 ; [.FB41.0020.0004][.9EC4.0000.0000] # CJK RADICAL SIMPLIFIED YELLOW
2FC9 ; [.FB41.0020.0004][.9ECD.0000.0000] # KANGXI RADICAL MILLET
F989 ; [.FB41.0020.0002][.9ECE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F989
2FCA ; [.FB41.0020.0004][.9ED1.0000.0000] # KANGXI RADICAL BLACK
2FA17 ; [.FB41.0020.0002][.9EF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA17
2FCB ; [.FB41.0020.0004][.9EF9.0000.0000] # KANGXI RADICAL EMBROIDERY
2FCC ; [.FB41.0020.0004][.9EFD.0000.0000] # KANGXI RADICAL FROG
2FA18 ; [.FB41.0020.0002][.9EFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA18
2EEA ; [.FB41.0020.0004][.9EFE.0000.0000] # CJK RADICAL C-SIMPLIFIED FROG
2FA19 ; [.FB41.0020.0002][.9F05.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA19
2FCD ; [.FB41.0020.0004][.9F0E.0000.0000] # KANGXI RADICAL TRIPOD
2FA1A ; [.FB41.0020.0002][.9F0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1A
2FCE ; [.FB41.0020.0004][.9F13.0000.0000] # KANGXI RADICAL DRUM
2FA1B ; [.FB41.0020.0002][.9F16.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1B
2FCF ; [.FB41.0020.0004][.9F20.0000.0000] # KANGXI RADICAL RAT
2FA1C ; [.FB41.0020.0002][.9F3B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
2FD0 ; [.FB41.0020.0004][.9F3B.0000.0000] # KANGXI RADICAL NOSE
FAD8 ; [.FB41.0020.0002][.9F43.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD8
2FD1 ; [.FB41.0020.0004][.9F4A.0000.0000] # KANGXI RADICAL EVEN
2EEB ; [.FB41.0020.0004][.9F4A.0000.0000][.0000.0110.0004] # CJK RADICAL J-SIMPLIFIED EVEN
2EEC ; [.FB41.0020.0004][.9F50.0000.0000] # CJK RADICAL C-SIMPLIFIED EVEN
2FD2 ; [.FB41.0020.0004][.9F52.0000.0000] # KANGXI RADICAL TOOTH
2EED ; [.FB41.0020.0004][.9F52.0000.0000][.0000.0110.0004] # CJK RADICAL J-SIMPLIFIED TOOTH
2EEE ; [.FB41.0020.0004][.9F7F.0000.0000] # CJK RADICAL C-SIMPLIFIED TOOTH
F9C4 ; [.FB41.0020.0002][.9F8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C4
2FD3 ; [.FB41.0020.0004][.9F8D.0000.0000] # KANGXI RADICAL DRAGON
2EEF ; [.FB41.0020.0004][.9F8D.0000.0000][.0000.0110.0004] # CJK RADICAL J-SIMPLIFIED DRAGON
FAD9 ; [.FB41.0020.0002][.9F8E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD9
2EF0 ; [.FB41.0020.0004][.9F99.0000.0000] # CJK RADICAL C-SIMPLIFIED DRAGON
F907 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F907
F908 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F908
FACE ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACE
2FD4 ; [.FB41.0020.0004][.9F9C.0000.0000] # KANGXI RADICAL TURTLE
2EF1 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0110.0004] # CJK RADICAL TURTLE
2EF2 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0111.0004] # CJK RADICAL J-SIMPLIFIED TURTLE
2EF3 ; [.FB41.0020.0004][.9F9F.0000.0000] # CJK RADICAL C-SIMPLIFIED TURTLE
2FD5 ; [.FB41.0020.0004][.9FA0.0000.0000] # KANGXI RADICAL FLUTE
FA0E ; [.FB41.0020.0002][.FA0E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0E
FA0F ; [.FB41.0020.0002][.FA0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; [.FB41.0020.0002][.FA11.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA11
FA13 ; [.FB41.0020.0002][.FA13.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA13
FA14 ; [.FB41.0020.0002][.FA14.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA14
FA1F ; [.FB41.0020.0002][.FA1F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1F
FA21 ; [.FB41.0020.0002][.FA21.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA21
FA23 ; [.FB41.0020.0002][.FA23.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA23
FA24 ; [.FB41.0020.0002][.FA24.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA24
FA27 ; [.FB41.0020.0002][.FA27.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA27
FA28 ; [.FB41.0020.0002][.FA28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA28
FA29 ; [.FB41.0020.0002][.FA29.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA29
2F80C ; [.FB80.0020.0002][.B49E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80C
2F813 ; [.FB80.0020.0002][.B4B9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F813
2F9CA ; [.FB80.0020.0002][.B4BB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CA
2F81F ; [.FB80.0020.0002][.B4DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81F
2F824 ; [.FB80.0020.0002][.B515.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F824
2F867 ; [.FB80.0020.0002][.B6EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F867
2F868 ; [.FB80.0020.0002][.B6FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F868
2F876 ; [.FB80.0020.0002][.B781.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F876
2F883 ; [.FB80.0020.0002][.B82F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F883
2F888 ; [.FB80.0020.0002][.B862.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F888
2F88A ; [.FB80.0020.0002][.B87C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88A
2F896 ; [.FB80.0020.0002][.B8C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F896
2F89B ; [.FB80.0020.0002][.B8E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89B
2F8A2 ; [.FB80.0020.0002][.B91C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A2
2F8A1 ; [.FB80.0020.0002][.B93A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A1
2F8C2 ; [.FB80.0020.0002][.BA2E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C2
2F8C7 ; [.FB80.0020.0002][.BA6C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C7
2F8D1 ; [.FB80.0020.0002][.BAE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D1
2F8D0 ; [.FB80.0020.0002][.BB08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D0
2F8CE ; [.FB80.0020.0002][.BB19.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CE
2F8DE ; [.FB80.0020.0002][.BB49.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DE
FAD2 ; [.FB80.0020.0002][.BB9D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD2
2F8E7 ; [.FB80.0020.0002][.BB9D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E7
2F8EE ; [.FB80.0020.0002][.BC18.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EE
2F8F2 ; [.FB80.0020.0002][.BC4E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F2
2F90A ; [.FB80.0020.0002][.BD33.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90A
2F916 ; [.FB80.0020.0002][.BD96.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F916
2F92A ; [.FB80.0020.0002][.BEAC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92A
2F92C ; [.FB80.0020.0002][.BEB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92C
2F92D ; [.FB80.0020.0002][.BEB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92D
2F933 ; [.FB80.0020.0002][.BF1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F933
2F93E ; [.FB80.0020.0002][.BFFC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93E
2F93F ; [.FB80.0020.0002][.C008.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93F
FAD3 ; [.FB80.0020.0002][.C018.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD3
FAD4 ; [.FB80.0020.0002][.C039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD4
2F949 ; [.FB80.0020.0002][.C039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F949
2F94B ; [.FB80.0020.0002][.C046.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94B
2F94C ; [.FB80.0020.0002][.C096.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94C
2F951 ; [.FB80.0020.0002][.C0E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F951
2F958 ; [.FB80.0020.0002][.C12F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F958
2F960 ; [.FB80.0020.0002][.C202.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F960
2F964 ; [.FB80.0020.0002][.C227.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F964
2F967 ; [.FB80.0020.0002][.C2A0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F967
2F96D ; [.FB80.0020.0002][.C301.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96D
2F971 ; [.FB80.0020.0002][.C334.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F971
2F974 ; [.FB80.0020.0002][.C359.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F974
2F981 ; [.FB80.0020.0002][.C3D5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F981
2F8D7 ; [.FB80.0020.0002][.C3D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D7
2F984 ; [.FB80.0020.0002][.C40B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F984
2F98E ; [.FB80.0020.0002][.C46B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98E
2F9A7 ; [.FB80.0020.0002][.C52B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A7
2F9AE ; [.FB80.0020.0002][.C55D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AE
2F9AF ; [.FB80.0020.0002][.C561.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AF
2F9B2 ; [.FB80.0020.0002][.C56B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B2
2F9BF ; [.FB80.0020.0002][.C5D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BF
2F9C2 ; [.FB80.0020.0002][.C5F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C2
2F9C8 ; [.FB80.0020.0002][.C635.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C8
2F9CD ; [.FB80.0020.0002][.C6BE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CD
2F9CE ; [.FB80.0020.0002][.C6C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CE
2F9EF ; [.FB80.0020.0002][.C995.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EF
2F9F2 ; [.FB80.0020.0002][.C9E6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F2
2F9F8 ; [.FB80.0020.0002][.CA6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F8
2F9F9 ; [.FB80.0020.0002][.CA76.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F9
2F9FC ; [.FB80.0020.0002][.CAB2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FC
2FA03 ; [.FB80.0020.0002][.CB33.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA03
2FA08 ; [.FB80.0020.0002][.CBCE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA08
2FA0D ; [.FB80.0020.0002][.CCCE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0D
2FA0E ; [.FB80.0020.0002][.CCED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0E
2FA11 ; [.FB80.0020.0002][.CCF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA11
2FA16 ; [.FB80.0020.0002][.CD56.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA16
2F803 ; [.FB84.0020.0002][.8122.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F803
2F812 ; [.FB84.0020.0002][.851C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F812
2F91B ; [.FB84.0020.0002][.8525.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91B
2F816 ; [.FB84.0020.0002][.854B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F816
2F80D ; [.FB84.0020.0002][.863A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80D
2F9D9 ; [.FB84.0020.0002][.8804.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D9
2F9DD ; [.FB84.0020.0002][.88DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DD
2F834 ; [.FB84.0020.0002][.8A2C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F834
2F838 ; [.FB84.0020.0002][.8B63.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F838
2F859 ; [.FB84.0020.0002][.94E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F859
2F860 ; [.FB84.0020.0002][.96A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F860
2F861 ; [.FB84.0020.0002][.96EA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F861
2F86C ; [.FB84.0020.0002][.99C8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86C
2F871 ; [.FB84.0020.0002][.9B18.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F871
2F8F8 ; [.FB84.0020.0002][.9D0B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F8
2F87B ; [.FB84.0020.0002][.9DE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87B
2F87D ; [.FB84.0020.0002][.9DE6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87D
2F889 ; [.FB84.0020.0002][.A183.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F889
2F939 ; [.FB84.0020.0002][.A19F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F939
2F891 ; [.FB84.0020.0002][.A331.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F891
2F892 ; [.FB84.0020.0002][.A331.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F892
2F8A4 ; [.FB84.0020.0002][.A6D4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A4
FAD0 ; [.FB84.0020.0002][.A844.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD0
FACF ; [.FB84.0020.0002][.A84A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACF
2F8B8 ; [.FB84.0020.0002][.AB0C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B8
2F8BE ; [.FB84.0020.0002][.ABF1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BE
2F8CA ; [.FB84.0020.0002][.B00A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CA
2F897 ; [.FB84.0020.0002][.B2B8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F897
2F980 ; [.FB84.0020.0002][.B35F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F980
2F989 ; [.FB84.0020.0002][.B393.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F989
2F98A ; [.FB84.0020.0002][.B39C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98A
2F8DD ; [.FB84.0020.0002][.B3C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DD
FAD1 ; [.FB84.0020.0002][.B3D5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD1
2F8E3 ; [.FB84.0020.0002][.B46D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E3
2F8EC ; [.FB84.0020.0002][.B6A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EC
2F8F0 ; [.FB84.0020.0002][.B8A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F0
2F8F7 ; [.FB84.0020.0002][.BA8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F7
2F8F9 ; [.FB84.0020.0002][.BAFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F9
2F8FB ; [.FB84.0020.0002][.BCBC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FB
2F906 ; [.FB84.0020.0002][.BD1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F906
2F90D ; [.FB84.0020.0002][.BED1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90D
2F910 ; [.FB84.0020.0002][.BF5E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F910
2F911 ; [.FB84.0020.0002][.BF8E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F911
2F91D ; [.FB84.0020.0002][.C263.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91D
FA6C ; [.FB84.0020.0002][.C2EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6C
2F91F ; [.FB84.0020.0002][.C3AB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91F
2F923 ; [.FB84.0020.0002][.C608.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F923
2F926 ; [.FB84.0020.0002][.C735.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F926
2F927 ; [.FB84.0020.0002][.C814.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F927
2F935 ; [.FB84.0020.0002][.CC36.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F935
2F937 ; [.FB84.0020.0002][.CC92.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F937
2F93B ; [.FB84.0020.0002][.CFA1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93B
2F93C ; [.FB84.0020.0002][.CFB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93C
2F93D ; [.FB84.0020.0002][.D044.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93D
2F942 ; [.FB84.0020.0002][.D0F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F942
2F941 ; [.FB84.0020.0002][.D0F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F941
2F943 ; [.FB84.0020.0002][.D119.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F943
2F944 ; [.FB84.0020.0002][.D133.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F944
FAD5 ; [.FB84.0020.0002][.D249.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD5
2F94D ; [.FB84.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94D
2F952 ; [.FB84.0020.0002][.D626.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F952
2F954 ; [.FB84.0020.0002][.D69A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F954
2F955 ; [.FB84.0020.0002][.D6C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F955
2F95C ; [.FB84.0020.0002][.D97C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95C
2F95D ; [.FB84.0020.0002][.DAA7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95D
2F95E ; [.FB84.0020.0002][.DAA7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95E
2F961 ; [.FB84.0020.0002][.DBAB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F961
2F965 ; [.FB84.0020.0002][.DC80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F965
FAD6 ; [.FB84.0020.0002][.DCD0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD6
2F96B ; [.FB84.0020.0002][.DF86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96B
2F898 ; [.FB84.0020.0002][.E1DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F898
2F972 ; [.FB84.0020.0002][.E228.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F972
2F973 ; [.FB84.0020.0002][.E247.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F973
2F975 ; [.FB84.0020.0002][.E2D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F975
2F977 ; [.FB84.0020.0002][.E33E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F977
2F97B ; [.FB84.0020.0002][.E4DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97B
2F97C ; [.FB84.0020.0002][.E523.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97C
2F97E ; [.FB84.0020.0002][.E5A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97E
2F987 ; [.FB84.0020.0002][.E7A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F987
2F988 ; [.FB84.0020.0002][.E7B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F988
2F997 ; [.FB84.0020.0002][.EB3C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F997
2F9A4 ; [.FB84.0020.0002][.EC36.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A4
2F9A6 ; [.FB84.0020.0002][.ECD5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A6
2F9A5 ; [.FB84.0020.0002][.ED6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A5
2F9AD ; [.FB84.0020.0002][.EF2C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AD
2F9B0 ; [.FB84.0020.0002][.EFB1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B0
2F9B1 ; [.FB84.0020.0002][.F0D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B1
2F9AB ; [.FB84.0020.0002][.F3CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AB
2F9C5 ; [.FB84.0020.0002][.F667.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C5
2F9CB ; [.FB84.0020.0002][.F8AE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CB
2F9CC ; [.FB84.0020.0002][.F966.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CC
2F9D3 ; [.FB84.0020.0002][.FCA8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D3
FAD7 ; [.FB84.0020.0002][.FED3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD7
2F9D8 ; [.FB84.0020.0002][.FF2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D8
2F9E0 ; [.FB85.0020.0002][.85D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E0
2F9E1 ; [.FB85.0020.0002][.85ED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E1
2F9E5 ; [.FB85.0020.0002][.872E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E5
2F9ED ; [.FB85.0020.0002][.8BFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9ED
2F9F1 ; [.FB85.0020.0002][.8D77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F1
2F9F6 ; [.FB85.0020.0002][.9145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F6
2F81C ; [.FB85.0020.0002][.91DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81C
2F9F7 ; [.FB85.0020.0002][.921A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F7
2F9FB ; [.FB85.0020.0002][.940A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FB
2F9FD ; [.FB85.0020.0002][.9496.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FD
2FA01 ; [.FB85.0020.0002][.95B6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA01
2FA09 ; [.FB85.0020.0002][.9B30.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA09
2FA10 ; [.FB85.0020.0002][.A0CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA10
2FA12 ; [.FB85.0020.0002][.A105.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA12
2FA13 ; [.FB85.0020.0002][.A20E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA13
2FA14 ; [.FB85.0020.0002][.A291.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA14
2F88F ; [.FB85.0020.0002][.A392.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88F
2FA1D ; [.FB85.0020.0002][.A600.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1D
FFFD ; [.FFFD.0020.0002] # REPLACEMENT CHARACTER
# EOF
Unicode/Collate/Locale.pm 0000644 00000044712 15033552504 0011264 0 ustar 00 package Unicode::Collate::Locale;
use strict;
use warnings;
use Carp;
use base qw(Unicode::Collate);
our $VERSION = '1.25';
my $PL_EXT = '.pl';
my %LocaleFile = map { ($_, $_) } qw(
af ar as az be bn ca cs cy da dsb ee eo es et fa fi fil fo gu
ha haw he hi hr hu hy ig is ja kk kl kn ko kok lkt ln lt lv
mk ml mr mt nb nn nso om or pa pl ro sa se si sk sl sq sr sv
ta te th tn to tr uk ur vi vo wae wo yo zh
);
$LocaleFile{'default'} = '';
# aliases
$LocaleFile{'bs'} = 'hr';
$LocaleFile{'bs_Cyrl'} = 'sr';
$LocaleFile{'sr_Latn'} = 'hr';
# short file names
$LocaleFile{'de__phonebook'} = 'de_phone';
$LocaleFile{'de_AT_phonebook'} = 'de_at_ph';
$LocaleFile{'es__traditional'} = 'es_trad';
$LocaleFile{'fr_CA'} = 'fr_ca';
$LocaleFile{'fi__phonebook'} = 'fi_phone';
$LocaleFile{'si__dictionary'} = 'si_dict';
$LocaleFile{'sv__reformed'} = 'sv_refo';
$LocaleFile{'ug_Cyrl'} = 'ug_cyrl';
$LocaleFile{'zh__big5han'} = 'zh_big5';
$LocaleFile{'zh__gb2312han'} = 'zh_gb';
$LocaleFile{'zh__pinyin'} = 'zh_pin';
$LocaleFile{'zh__stroke'} = 'zh_strk';
$LocaleFile{'zh__zhuyin'} = 'zh_zhu';
my %TypeAlias = qw(
phone phonebook
phonebk phonebook
dict dictionary
reform reformed
trad traditional
big5 big5han
gb2312 gb2312han
);
sub _locale {
my $locale = shift;
if ($locale) {
$locale = lc $locale;
$locale =~ tr/\-\ \./_/;
$locale =~ s/_([0-9a-z]+)\z/$TypeAlias{$1} ?
"_$TypeAlias{$1}" : "_$1"/e;
$LocaleFile{$locale} and return $locale;
my @code = split /_/, $locale;
my $lan = shift @code;
my $scr = @code && length $code[0] == 4 ? ucfirst shift @code : '';
my $reg = @code && length $code[0] < 4 ? uc shift @code : '';
my $var = @code ? shift @code : '';
my @list;
push @list, (
"${lan}_${scr}_${reg}_$var",
"${lan}_${scr}__$var", # empty $scr should not be ${lan}__$var.
"${lan}_${reg}_$var", # empty $reg may be ${lan}__$var.
"${lan}__$var",
) if $var ne '';
push @list, (
"${lan}_${scr}_${reg}",
"${lan}_${scr}",
"${lan}_${reg}",
${lan},
);
for my $loc (@list) {
$LocaleFile{$loc} and return $loc;
}
}
return 'default';
}
sub getlocale {
return shift->{accepted_locale};
}
sub locale_version {
return shift->{locale_version};
}
sub _fetchpl {
my $accepted = shift;
my $f = $LocaleFile{$accepted};
return if !$f;
$f .= $PL_EXT;
# allow to search @INC
# use File::Spec;
# my $path = File::Spec->catfile('Unicode', 'Collate', 'Locale', $f);
my $path = "Unicode/Collate/Locale/$f";
my $h = do $path;
croak "Unicode/Collate/Locale/$f can't be found" if !$h;
return $h;
}
sub new {
my $class = shift;
my %hash = @_;
$hash{accepted_locale} = _locale($hash{locale});
if (exists $hash{table}) {
croak "your table can't be used with Unicode::Collate::Locale";
}
my $href = _fetchpl($hash{accepted_locale});
while (my($k,$v) = each %$href) {
if (!exists $hash{$k}) {
$hash{$k} = $v;
} elsif ($k eq 'entry') {
$hash{$k} = $v.$hash{$k};
} else {
croak "$k is reserved by $hash{locale}, can't be overwritten";
}
}
return $class->SUPER::new(%hash);
}
1;
__END__
=head1 NAME
Unicode::Collate::Locale - Linguistic tailoring for DUCET via Unicode::Collate
=head1 SYNOPSIS
use Unicode::Collate::Locale;
#construct
$Collator = Unicode::Collate::Locale->
new(locale => $locale_name, %tailoring);
#sort
@sorted = $Collator->sort(@not_sorted);
#compare
$result = $Collator->cmp($a, $b); # returns 1, 0, or -1.
B<Note:> Strings in C<@not_sorted>, C<$a> and C<$b> are interpreted
according to Perl's Unicode support. See L<perlunicode>,
L<perluniintro>, L<perlunitut>, L<perlunifaq>, L<utf8>.
Otherwise you can use C<preprocess> (cf. C<Unicode::Collate>)
or should decode them before.
=head1 DESCRIPTION
This module provides linguistic tailoring for it
taking advantage of C<Unicode::Collate>.
=head2 Constructor
The C<new> method returns a collator object.
A parameter list for the constructor is a hash, which can include
a special key C<locale> and its value (case-insensitive) standing
for a Unicode base language code (two or three-letter).
For example, C<Unicode::Collate::Locale-E<gt>new(locale =E<gt> 'ES')>
returns a collator tailored for Spanish.
C<$locale_name> may be suffixed with a Unicode script code (four-letter),
a Unicode region (territory) code, a Unicode language variant code.
These codes are case-insensitive, and separated with C<'_'> or C<'-'>.
E.g. C<en_US> for English in USA,
C<az_Cyrl> for Azerbaijani in the Cyrillic script,
C<es_ES_traditional> for Spanish in Spain (Traditional).
If C<$locale_name> is not available,
fallback is selected in the following order:
1. language with a variant code
2. language with a script code
3. language with a region code
4. language
5. default
Tailoring tags provided by C<Unicode::Collate> are allowed as long as
they are not used for C<locale> support. Esp. the C<table> tag
is always untailorable, since it is reserved for DUCET.
However C<entry> is allowed, even if it is used for C<locale> support,
to add or override mappings.
E.g. a collator for Spanish, which ignores diacritics and case difference
(i.e. level 1), with reversed case ordering and no normalization.
Unicode::Collate::Locale->new(
level => 1,
locale => 'es',
upper_before_lower => 1,
normalization => undef
)
Overriding a behavior already tailored by C<locale> is disallowed
if such a tailoring is passed to C<new()>.
Unicode::Collate::Locale->new(
locale => 'da',
upper_before_lower => 0, # causes error as reserved by 'da'
)
However C<change()> inherited from C<Unicode::Collate> allows
such a tailoring that is reserved by C<locale>. Examples:
new(locale => 'fr_ca')->change(backwards => undef)
new(locale => 'da')->change(upper_before_lower => 0)
new(locale => 'ja')->change(overrideCJK => undef)
=head2 Methods
C<Unicode::Collate::Locale> is a subclass of C<Unicode::Collate>
and methods other than C<new> are inherited from C<Unicode::Collate>.
Here is a list of additional methods:
=over 4
=item C<$Collator-E<gt>getlocale>
Returns a language code accepted and used actually on collation.
If linguistic tailoring is not provided for a language code you passed
(intensionally for some languages, or due to the incomplete implementation),
this method returns a string C<'default'> meaning no special tailoring.
=item C<$Collator-E<gt>locale_version>
(Since Unicode::Collate::Locale 0.87)
Returns the version number (perhaps C</\d\.\d\d/>) of the locale, as that
of F<Locale/*.pl>.
B<Note:> F<Locale/*.pl> that a collator uses should be identified by
a combination of return values from C<getlocale> and C<locale_version>.
=back
=head2 A list of tailorable locales
locale name description
--------------------------------------------------------------
af Afrikaans
ar Arabic
as Assamese
az Azerbaijani (Azeri)
be Belarusian
bn Bengali
bs Bosnian (tailored as Croatian)
bs_Cyrl Bosnian in Cyrillic (tailored as Serbian)
ca Catalan
cs Czech
cy Welsh
da Danish
de__phonebook German (umlaut as 'ae', 'oe', 'ue')
de_AT_phonebook Austrian German (umlaut primary greater)
dsb Lower Sorbian
ee Ewe
eo Esperanto
es Spanish
es__traditional Spanish ('ch' and 'll' as a grapheme)
et Estonian
fa Persian
fi Finnish (v and w are primary equal)
fi__phonebook Finnish (v and w as separate characters)
fil Filipino
fo Faroese
fr_CA Canadian French
gu Gujarati
ha Hausa
haw Hawaiian
he Hebrew
hi Hindi
hr Croatian
hu Hungarian
hy Armenian
ig Igbo
is Icelandic
ja Japanese [1]
kk Kazakh
kl Kalaallisut
kn Kannada
ko Korean [2]
kok Konkani
lkt Lakota
ln Lingala
lt Lithuanian
lv Latvian
mk Macedonian
ml Malayalam
mr Marathi
mt Maltese
nb Norwegian Bokmal
nn Norwegian Nynorsk
nso Northern Sotho
om Oromo
or Oriya
pa Punjabi
pl Polish
ro Romanian
sa Sanskrit
se Northern Sami
si Sinhala
si__dictionary Sinhala (U+0DA5 = U+0DA2,0DCA,0DA4)
sk Slovak
sl Slovenian
sq Albanian
sr Serbian
sr_Latn Serbian in Latin (tailored as Croatian)
sv Swedish (v and w are primary equal)
sv__reformed Swedish (v and w as separate characters)
ta Tamil
te Telugu
th Thai
tn Tswana
to Tonga
tr Turkish
ug_Cyrl Uyghur in Cyrillic
uk Ukrainian
ur Urdu
vi Vietnamese
vo Volapu"k
wae Walser
wo Wolof
yo Yoruba
zh Chinese
zh__big5han Chinese (ideographs: big5 order)
zh__gb2312han Chinese (ideographs: GB-2312 order)
zh__pinyin Chinese (ideographs: pinyin order) [3]
zh__stroke Chinese (ideographs: stroke order) [3]
zh__zhuyin Chinese (ideographs: zhuyin order) [3]
--------------------------------------------------------------
Locales according to the default UCA rules include
am (Amharic) without C<[reorder Ethi]>,
bg (Bulgarian) without C<[reorder Cyrl]>,
chr (Cherokee) without C<[reorder Cher]>,
de (German),
en (English),
fr (French),
ga (Irish),
id (Indonesian),
it (Italian),
ka (Georgian) without C<[reorder Geor]>,
mn (Mongolian) without C<[reorder Cyrl Mong]>,
ms (Malay),
nl (Dutch),
pt (Portuguese),
ru (Russian) without C<[reorder Cyrl]>,
sw (Swahili),
zu (Zulu).
B<Note>
[1] ja: Ideographs are sorted in JIS X 0208 order.
Fullwidth and halfwidth forms are identical to their regular form.
The difference between hiragana and katakana is at the 4th level,
the comparison also requires C<(variable =E<gt> 'Non-ignorable')>,
and then C<katakana_before_hiragana> has no effect.
[2] ko: Plenty of ideographs are sorted by their reading. Such
an ideograph is primary (level 1) equal to, and secondary (level 2)
greater than, the corresponding hangul syllable.
[3] zh__pinyin, zh__stroke and zh__zhuyin: implemented alt='short',
where a smaller number of ideographs are tailored.
=head2 A list of variant codes and their aliases
variant code alias
------------------------------------------
dictionary dict
phonebook phone phonebk
reformed reform
traditional trad
------------------------------------------
big5han big5
gb2312han gb2312
pinyin
stroke
zhuyin
------------------------------------------
Note: 'pinyin' is Han in Latin, 'zhuyin' is Han in Bopomofo.
=head1 INSTALL
Installation of C<Unicode::Collate::Locale> requires F<Collate/Locale.pm>,
F<Collate/Locale/*.pm>, F<Collate/CJK/*.pm> and F<Collate/allkeys.txt>.
On building, C<Unicode::Collate::Locale> doesn't require
any of F<data/*.txt>, F<gendata/*>, and F<mklocale>.
Tests for C<Unicode::Collate::Locale> are named F<t/loc_*.t>.
=head1 CAVEAT
=over 4
=item Tailoring is not maximum
Even if a certain letter is tailored, its equivalent would not always
tailored as well as it. For example, even though W is tailored,
fullwidth W (C<U+FF37>), W with acute (C<U+1E82>), etc. are not
tailored. The result may depend on whether source strings are
normalized or not, and whether decomposed or composed.
Thus C<(normalization =E<gt> undef)> is less preferred.
=item Collation reordering is not supported
The order of any groups including scripts is not changed.
=back
=head2 Reference
locale based CLDR or other reference
--------------------------------------------------------------------
af 30 = 1.8.1
ar 30 = 28 ("compat" wo [reorder Arab]) = 1.9.0
as 30 = 28 (without [reorder Beng..]) = 23
az 30 = 24 ("standard" wo [reorder Latn Cyrl])
be 30 = 28 (without [reorder Cyrl])
bn 30 = 28 ("standard" wo [reorder Beng..]) = 2.0.1
bs 30 = 28 (type="standard": [import hr])
bs_Cyrl 30 = 28 (type="standard": [import sr])
ca 30 = 23 (alt="proposed" type="standard")
cs 30 = 1.8.1 (type="standard")
cy 30 = 1.8.1
da 22.1 = 1.8.1 (type="standard")
de__phonebook 30 = 2.0 (type="phonebook")
de_AT_phonebook 30 = 27 (type="phonebook")
dsb 30 = 26
ee 30 = 21
eo 30 = 1.8.1
es 30 = 1.9.0 (type="standard")
es__traditional 30 = 1.8.1 (type="traditional")
et 30 = 26
fa 22.1 = 1.8.1
fi 22.1 = 1.8.1 (type="standard" alt="proposed")
fi__phonebook 22.1 = 1.8.1 (type="phonebook")
fil 30 = 1.9.0 (type="standard") = 1.8.1
fo 22.1 = 1.8.1 (alt="proposed" type="standard")
fr_CA 30 = 1.9.0
gu 30 = 28 ("standard" wo [reorder Gujr..]) = 1.9.0
ha 30 = 1.9.0
haw 30 = 24
he 30 = 28 (without [reorder Hebr]) = 23
hi 30 = 28 (without [reorder Deva..]) = 1.9.0
hr 30 = 28 ("standard" wo [reorder Latn Cyrl]) = 1.9.0
hu 22.1 = 1.8.1 (alt="proposed" type="standard")
hy 30 = 28 (without [reorder Armn]) = 1.8.1
ig 30 = 1.8.1
is 22.1 = 1.8.1 (type="standard")
ja 22.1 = 1.8.1 (type="standard")
kk 30 = 28 (without [reorder Cyrl])
kl 22.1 = 1.8.1 (type="standard")
kn 30 = 28 ("standard" wo [reorder Knda..]) = 1.9.0
ko 22.1 = 1.8.1 (type="standard")
kok 30 = 28 (without [reorder Deva..]) = 1.8.1
lkt 30 = 25
ln 30 = 2.0 (type="standard") = 1.8.1
lt 22.1 = 1.9.0
lv 22.1 = 1.9.0 (type="standard") = 1.8.1
mk 30 = 28 (without [reorder Cyrl])
ml 22.1 = 1.9.0
mr 30 = 28 (without [reorder Deva..]) = 1.8.1
mt 22.1 = 1.9.0
nb 22.1 = 2.0 (type="standard")
nn 22.1 = 2.0 (type="standard")
nso [*] 26 = 1.8.1
om 22.1 = 1.8.1
or 30 = 28 (without [reorder Orya..]) = 1.9.0
pa 22.1 = 1.8.1
pl 30 = 1.8.1
ro 30 = 1.9.0 (type="standard")
sa [*] 1.9.1 = 1.8.1 (type="standard" alt="proposed")
se 22.1 = 1.8.1 (type="standard")
si 30 = 28 ("standard" wo [reorder Sinh..]) = 1.9.0
si__dictionary 30 = 28 ("dictionary" wo [reorder Sinh..]) = 1.9.0
sk 22.1 = 1.9.0 (type="standard")
sl 22.1 = 1.8.1 (type="standard" alt="proposed")
sq 22.1 = 1.8.1 (alt="proposed" type="standard")
sr 30 = 28 (without [reorder Cyrl])
sr_Latn 30 = 28 (type="standard": [import hr])
sv 22.1 = 1.9.0 (type="standard")
sv__reformed 22.1 = 1.8.1 (type="reformed")
ta 22.1 = 1.9.0
te 30 = 28 (without [reorder Telu..]) = 1.9.0
th 22.1 = 22
tn [*] 26 = 1.8.1
to 22.1 = 22
tr 22.1 = 1.8.1 (type="standard")
uk 30 = 28 (without [reorder Cyrl])
ug_Cyrl https://en.wikipedia.org/wiki/Uyghur_Cyrillic_alphabet
ur 22.1 = 1.9.0
vi 22.1 = 1.8.1
vo 30 = 25
wae 30 = 2.0
wo [*] 1.9.1 = 1.8.1
yo 30 = 1.8.1
zh 22.1 = 1.8.1 (type="standard")
zh__big5han 22.1 = 1.8.1 (type="big5han")
zh__gb2312han 22.1 = 1.8.1 (type="gb2312han")
zh__pinyin 22.1 = 2.0 (type='pinyin' alt='short')
zh__stroke 22.1 = 1.9.1 (type='stroke' alt='short')
zh__zhuyin 22.1 = 22 (type='zhuyin' alt='short')
--------------------------------------------------------------------
[*] http://www.unicode.org/repos/cldr/tags/latest/seed/collation/
=head1 AUTHOR
The Unicode::Collate::Locale module for perl was written
by SADAHIRO Tomoyuki, <SADAHIRO@cpan.org>.
This module is Copyright(C) 2004-2017, SADAHIRO Tomoyuki. Japan.
All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=head1 SEE ALSO
=over 4
=item Unicode Collation Algorithm - UTS #10
L<http://www.unicode.org/reports/tr10/>
=item The Default Unicode Collation Element Table (DUCET)
L<http://www.unicode.org/Public/UCA/latest/allkeys.txt>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=item CLDR - Unicode Common Locale Data Repository
L<http://cldr.unicode.org/>
=item L<Unicode::Collate>
=item L<Unicode::Normalize>
=back
=cut
Unicode/Normalize.pm 0000644 00000044654 15033552504 0010447 0 ustar 00 package Unicode::Normalize;
BEGIN {
unless ('A' eq pack('U', 0x41)) {
die "Unicode::Normalize cannot stringify a Unicode code point\n";
}
unless (0x41 == unpack('U', 'A')) {
die "Unicode::Normalize cannot get Unicode code point\n";
}
}
use 5.006;
use strict;
use warnings;
use Carp;
no warnings 'utf8';
our $VERSION = '1.25';
our $PACKAGE = __PACKAGE__;
our @EXPORT = qw( NFC NFD NFKC NFKD );
our @EXPORT_OK = qw(
normalize decompose reorder compose
checkNFD checkNFKD checkNFC checkNFKC check
getCanon getCompat getComposite getCombinClass
isExclusion isSingleton isNonStDecomp isComp2nd isComp_Ex
isNFD_NO isNFC_NO isNFC_MAYBE isNFKD_NO isNFKC_NO isNFKC_MAYBE
FCD checkFCD FCC checkFCC composeContiguous splitOnLastStarter
normalize_partial NFC_partial NFD_partial NFKC_partial NFKD_partial
);
our %EXPORT_TAGS = (
all => [ @EXPORT, @EXPORT_OK ],
normalize => [ @EXPORT, qw/normalize decompose reorder compose/ ],
check => [ qw/checkNFD checkNFKD checkNFC checkNFKC check/ ],
fast => [ qw/FCD checkFCD FCC checkFCC composeContiguous/ ],
);
##
## utilities for tests
##
sub pack_U {
return pack('U*', @_);
}
sub unpack_U {
# The empty pack returns an empty UTF-8 string, so the effect is to force
# the shifted parameter into being UTF-8. This allows this to work on
# Perl 5.6, where there is no utf8::upgrade().
return unpack('U*', shift(@_).pack('U*'));
}
require Exporter;
##### The above part is common to XS and PP #####
our @ISA = qw(Exporter DynaLoader);
require DynaLoader;
bootstrap Unicode::Normalize $VERSION;
##### The below part is common to XS and PP #####
##
## normalize
##
sub FCD ($) {
my $str = shift;
return checkFCD($str) ? $str : NFD($str);
}
our %formNorm = (
NFC => \&NFC, C => \&NFC,
NFD => \&NFD, D => \&NFD,
NFKC => \&NFKC, KC => \&NFKC,
NFKD => \&NFKD, KD => \&NFKD,
FCD => \&FCD, FCC => \&FCC,
);
sub normalize($$)
{
my $form = shift;
my $str = shift;
if (exists $formNorm{$form}) {
return $formNorm{$form}->($str);
}
croak($PACKAGE."::normalize: invalid form name: $form");
}
##
## partial
##
sub normalize_partial ($$) {
if (exists $formNorm{$_[0]}) {
my $n = normalize($_[0], $_[1]);
my($p, $u) = splitOnLastStarter($n);
$_[1] = $u;
return $p;
}
croak($PACKAGE."::normalize_partial: invalid form name: $_[0]");
}
sub NFD_partial ($) { return normalize_partial('NFD', $_[0]) }
sub NFC_partial ($) { return normalize_partial('NFC', $_[0]) }
sub NFKD_partial($) { return normalize_partial('NFKD',$_[0]) }
sub NFKC_partial($) { return normalize_partial('NFKC',$_[0]) }
##
## check
##
our %formCheck = (
NFC => \&checkNFC, C => \&checkNFC,
NFD => \&checkNFD, D => \&checkNFD,
NFKC => \&checkNFKC, KC => \&checkNFKC,
NFKD => \&checkNFKD, KD => \&checkNFKD,
FCD => \&checkFCD, FCC => \&checkFCC,
);
sub check($$)
{
my $form = shift;
my $str = shift;
if (exists $formCheck{$form}) {
return $formCheck{$form}->($str);
}
croak($PACKAGE."::check: invalid form name: $form");
}
1;
__END__
=head1 NAME
Unicode::Normalize - Unicode Normalization Forms
=head1 SYNOPSIS
(1) using function names exported by default:
use Unicode::Normalize;
$NFD_string = NFD($string); # Normalization Form D
$NFC_string = NFC($string); # Normalization Form C
$NFKD_string = NFKD($string); # Normalization Form KD
$NFKC_string = NFKC($string); # Normalization Form KC
(2) using function names exported on request:
use Unicode::Normalize 'normalize';
$NFD_string = normalize('D', $string); # Normalization Form D
$NFC_string = normalize('C', $string); # Normalization Form C
$NFKD_string = normalize('KD', $string); # Normalization Form KD
$NFKC_string = normalize('KC', $string); # Normalization Form KC
=head1 DESCRIPTION
Parameters:
C<$string> is used as a string under character semantics (see F<perlunicode>).
C<$code_point> should be an unsigned integer representing a Unicode code point.
Note: Between XSUB and pure Perl, there is an incompatibility
about the interpretation of C<$code_point> as a decimal number.
XSUB converts C<$code_point> to an unsigned integer, but pure Perl does not.
Do not use a floating point nor a negative sign in C<$code_point>.
=head2 Normalization Forms
=over 4
=item C<$NFD_string = NFD($string)>
It returns the Normalization Form D (formed by canonical decomposition).
=item C<$NFC_string = NFC($string)>
It returns the Normalization Form C (formed by canonical decomposition
followed by canonical composition).
=item C<$NFKD_string = NFKD($string)>
It returns the Normalization Form KD (formed by compatibility decomposition).
=item C<$NFKC_string = NFKC($string)>
It returns the Normalization Form KC (formed by compatibility decomposition
followed by B<canonical> composition).
=item C<$FCD_string = FCD($string)>
If the given string is in FCD ("Fast C or D" form; cf. UTN #5),
it returns the string without modification; otherwise it returns an FCD string.
Note: FCD is not always unique, then plural forms may be equivalent
each other. C<FCD()> will return one of these equivalent forms.
=item C<$FCC_string = FCC($string)>
It returns the FCC form ("Fast C Contiguous"; cf. UTN #5).
Note: FCC is unique, as well as four normalization forms (NF*).
=item C<$normalized_string = normalize($form_name, $string)>
It returns the normalization form of C<$form_name>.
As C<$form_name>, one of the following names must be given.
'C' or 'NFC' for Normalization Form C (UAX #15)
'D' or 'NFD' for Normalization Form D (UAX #15)
'KC' or 'NFKC' for Normalization Form KC (UAX #15)
'KD' or 'NFKD' for Normalization Form KD (UAX #15)
'FCD' for "Fast C or D" Form (UTN #5)
'FCC' for "Fast C Contiguous" (UTN #5)
=back
=head2 Decomposition and Composition
=over 4
=item C<$decomposed_string = decompose($string [, $useCompatMapping])>
It returns the concatenation of the decomposition of each character
in the string.
If the second parameter (a boolean) is omitted or false,
the decomposition is canonical decomposition;
if the second parameter (a boolean) is true,
the decomposition is compatibility decomposition.
The string returned is not always in NFD/NFKD. Reordering may be required.
$NFD_string = reorder(decompose($string)); # eq. to NFD()
$NFKD_string = reorder(decompose($string, TRUE)); # eq. to NFKD()
=item C<$reordered_string = reorder($string)>
It returns the result of reordering the combining characters
according to Canonical Ordering Behavior.
For example, when you have a list of NFD/NFKD strings,
you can get the concatenated NFD/NFKD string from them, by saying
$concat_NFD = reorder(join '', @NFD_strings);
$concat_NFKD = reorder(join '', @NFKD_strings);
=item C<$composed_string = compose($string)>
It returns the result of canonical composition
without applying any decomposition.
For example, when you have a NFD/NFKD string,
you can get its NFC/NFKC string, by saying
$NFC_string = compose($NFD_string);
$NFKC_string = compose($NFKD_string);
=item C<($processed, $unprocessed) = splitOnLastStarter($normalized)>
It returns two strings: the first one, C<$processed>, is a part
before the last starter, and the second one, C<$unprocessed> is
another part after the first part. A starter is a character having
a combining class of zero (see UAX #15).
Note that C<$processed> may be empty (when C<$normalized> contains no
starter or starts with the last starter), and then C<$unprocessed>
should be equal to the entire C<$normalized>.
When you have a C<$normalized> string and an C<$unnormalized> string
following it, a simple concatenation is wrong:
$concat = $normalized . normalize($form, $unnormalized); # wrong!
Instead of it, do like this:
($processed, $unprocessed) = splitOnLastStarter($normalized);
$concat = $processed . normalize($form, $unprocessed.$unnormalized);
C<splitOnLastStarter()> should be called with a pre-normalized parameter
C<$normalized>, that is in the same form as C<$form> you want.
If you have an array of C<@string> that should be concatenated and then
normalized, you can do like this:
my $result = "";
my $unproc = "";
foreach my $str (@string) {
$unproc .= $str;
my $n = normalize($form, $unproc);
my($p, $u) = splitOnLastStarter($n);
$result .= $p;
$unproc = $u;
}
$result .= $unproc;
# instead of normalize($form, join('', @string))
=item C<$processed = normalize_partial($form, $unprocessed)>
A wrapper for the combination of C<normalize()> and C<splitOnLastStarter()>.
Note that C<$unprocessed> will be modified as a side-effect.
If you have an array of C<@string> that should be concatenated and then
normalized, you can do like this:
my $result = "";
my $unproc = "";
foreach my $str (@string) {
$unproc .= $str;
$result .= normalize_partial($form, $unproc);
}
$result .= $unproc;
# instead of normalize($form, join('', @string))
=item C<$processed = NFD_partial($unprocessed)>
It does like C<normalize_partial('NFD', $unprocessed)>.
Note that C<$unprocessed> will be modified as a side-effect.
=item C<$processed = NFC_partial($unprocessed)>
It does like C<normalize_partial('NFC', $unprocessed)>.
Note that C<$unprocessed> will be modified as a side-effect.
=item C<$processed = NFKD_partial($unprocessed)>
It does like C<normalize_partial('NFKD', $unprocessed)>.
Note that C<$unprocessed> will be modified as a side-effect.
=item C<$processed = NFKC_partial($unprocessed)>
It does like C<normalize_partial('NFKC', $unprocessed)>.
Note that C<$unprocessed> will be modified as a side-effect.
=back
=head2 Quick Check
(see Annex 8, UAX #15; and F<DerivedNormalizationProps.txt>)
The following functions check whether the string is in that normalization form.
The result returned will be one of the following:
YES The string is in that normalization form.
NO The string is not in that normalization form.
MAYBE Dubious. Maybe yes, maybe no.
=over 4
=item C<$result = checkNFD($string)>
It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>.
=item C<$result = checkNFC($string)>
It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>;
C<undef> if C<MAYBE>.
=item C<$result = checkNFKD($string)>
It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>.
=item C<$result = checkNFKC($string)>
It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>;
C<undef> if C<MAYBE>.
=item C<$result = checkFCD($string)>
It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>.
=item C<$result = checkFCC($string)>
It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>;
C<undef> if C<MAYBE>.
Note: If a string is not in FCD, it must not be in FCC.
So C<checkFCC($not_FCD_string)> should return C<NO>.
=item C<$result = check($form_name, $string)>
It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>;
C<undef> if C<MAYBE>.
As C<$form_name>, one of the following names must be given.
'C' or 'NFC' for Normalization Form C (UAX #15)
'D' or 'NFD' for Normalization Form D (UAX #15)
'KC' or 'NFKC' for Normalization Form KC (UAX #15)
'KD' or 'NFKD' for Normalization Form KD (UAX #15)
'FCD' for "Fast C or D" Form (UTN #5)
'FCC' for "Fast C Contiguous" (UTN #5)
=back
B<Note>
In the cases of NFD, NFKD, and FCD, the answer must be
either C<YES> or C<NO>. The answer C<MAYBE> may be returned
in the cases of NFC, NFKC, and FCC.
A C<MAYBE> string should contain at least one combining character
or the like. For example, C<COMBINING ACUTE ACCENT> has
the MAYBE_NFC/MAYBE_NFKC property.
Both C<checkNFC("A\N{COMBINING ACUTE ACCENT}")>
and C<checkNFC("B\N{COMBINING ACUTE ACCENT}")> will return C<MAYBE>.
C<"A\N{COMBINING ACUTE ACCENT}"> is not in NFC
(its NFC is C<"\N{LATIN CAPITAL LETTER A WITH ACUTE}">),
while C<"B\N{COMBINING ACUTE ACCENT}"> is in NFC.
If you want to check exactly, compare the string with its NFC/NFKC/FCC.
if ($string eq NFC($string)) {
# $string is exactly normalized in NFC;
} else {
# $string is not normalized in NFC;
}
if ($string eq NFKC($string)) {
# $string is exactly normalized in NFKC;
} else {
# $string is not normalized in NFKC;
}
=head2 Character Data
These functions are interface of character data used internally.
If you want only to get Unicode normalization forms, you don't need
call them yourself.
=over 4
=item C<$canonical_decomposition = getCanon($code_point)>
If the character is canonically decomposable (including Hangul Syllables),
it returns the (full) canonical decomposition as a string.
Otherwise it returns C<undef>.
B<Note:> According to the Unicode standard, the canonical decomposition
of the character that is not canonically decomposable is same as
the character itself.
=item C<$compatibility_decomposition = getCompat($code_point)>
If the character is compatibility decomposable (including Hangul Syllables),
it returns the (full) compatibility decomposition as a string.
Otherwise it returns C<undef>.
B<Note:> According to the Unicode standard, the compatibility decomposition
of the character that is not compatibility decomposable is same as
the character itself.
=item C<$code_point_composite = getComposite($code_point_here, $code_point_next)>
If two characters here and next (as code points) are composable
(including Hangul Jamo/Syllables and Composition Exclusions),
it returns the code point of the composite.
If they are not composable, it returns C<undef>.
=item C<$combining_class = getCombinClass($code_point)>
It returns the combining class (as an integer) of the character.
=item C<$may_be_composed_with_prev_char = isComp2nd($code_point)>
It returns a boolean whether the character of the specified codepoint
may be composed with the previous one in a certain composition
(including Hangul Compositions, but excluding
Composition Exclusions and Non-Starter Decompositions).
=item C<$is_exclusion = isExclusion($code_point)>
It returns a boolean whether the code point is a composition exclusion.
=item C<$is_singleton = isSingleton($code_point)>
It returns a boolean whether the code point is a singleton
=item C<$is_non_starter_decomposition = isNonStDecomp($code_point)>
It returns a boolean whether the code point has Non-Starter Decomposition.
=item C<$is_Full_Composition_Exclusion = isComp_Ex($code_point)>
It returns a boolean of the derived property Comp_Ex
(Full_Composition_Exclusion). This property is generated from
Composition Exclusions + Singletons + Non-Starter Decompositions.
=item C<$NFD_is_NO = isNFD_NO($code_point)>
It returns a boolean of the derived property NFD_NO
(NFD_Quick_Check=No).
=item C<$NFC_is_NO = isNFC_NO($code_point)>
It returns a boolean of the derived property NFC_NO
(NFC_Quick_Check=No).
=item C<$NFC_is_MAYBE = isNFC_MAYBE($code_point)>
It returns a boolean of the derived property NFC_MAYBE
(NFC_Quick_Check=Maybe).
=item C<$NFKD_is_NO = isNFKD_NO($code_point)>
It returns a boolean of the derived property NFKD_NO
(NFKD_Quick_Check=No).
=item C<$NFKC_is_NO = isNFKC_NO($code_point)>
It returns a boolean of the derived property NFKC_NO
(NFKC_Quick_Check=No).
=item C<$NFKC_is_MAYBE = isNFKC_MAYBE($code_point)>
It returns a boolean of the derived property NFKC_MAYBE
(NFKC_Quick_Check=Maybe).
=back
=head1 EXPORT
C<NFC>, C<NFD>, C<NFKC>, C<NFKD>: by default.
C<normalize> and other some functions: on request.
=head1 CAVEATS
=over 4
=item Perl's version vs. Unicode version
Since this module refers to perl core's Unicode database in the directory
F</lib/unicore> (or formerly F</lib/unicode>), the Unicode version of
normalization implemented by this module depends on what has been
compiled into your perl. The following table lists the default Unicode
version that comes with various perl versions. (It is possible to change
the Unicode version in any perl version to be any earlier Unicode version,
so one could cause Unicode 3.2 to be used in any perl version starting with
5.8.0. See C<$Config{privlib}>/F<unicore/README.perl>.
perl's version implemented Unicode version
5.6.1 3.0.1
5.7.2 3.1.0
5.7.3 3.1.1 (normalization is same as 3.1.0)
5.8.0 3.2.0
5.8.1-5.8.3 4.0.0
5.8.4-5.8.6 4.0.1 (normalization is same as 4.0.0)
5.8.7-5.8.8 4.1.0
5.10.0 5.0.0
5.8.9, 5.10.1 5.1.0
5.12.x 5.2.0
5.14.x 6.0.0
5.16.x 6.1.0
5.18.x 6.2.0
5.20.x 6.3.0
5.22.x 7.0.0
=item Correction of decomposition mapping
In older Unicode versions, a small number of characters (all of which are
CJK compatibility ideographs as far as they have been found) may have
an erroneous decomposition mapping (see F<NormalizationCorrections.txt>).
Anyhow, this module will neither refer to F<NormalizationCorrections.txt>
nor provide any specific version of normalization. Therefore this module
running on an older perl with an older Unicode database may use
the erroneous decomposition mapping blindly conforming to the Unicode database.
=item Revised definition of canonical composition
In Unicode 4.1.0, the definition D2 of canonical composition (which
affects NFC and NFKC) has been changed (see Public Review Issue #29
and recent UAX #15). This module has used the newer definition
since the version 0.07 (Oct 31, 2001).
This module will not support the normalization according to the older
definition, even if the Unicode version implemented by perl is
lower than 4.1.0.
=back
=head1 AUTHOR
SADAHIRO Tomoyuki <SADAHIRO@cpan.org>
Currently maintained by <perl5-porters@perl.org>
Copyright(C) 2001-2012, SADAHIRO Tomoyuki. Japan. All rights reserved.
=head1 LICENSE
This module is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.
=head1 SEE ALSO
=over 4
=item http://www.unicode.org/reports/tr15/
Unicode Normalization Forms - UAX #15
=item http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt
Composition Exclusion Table
=item http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt
Derived Normalization Properties
=item http://www.unicode.org/Public/UNIDATA/NormalizationCorrections.txt
Normalization Corrections
=item http://www.unicode.org/review/pr-29.html
Public Review Issue #29: Normalization Issue
=item http://www.unicode.org/notes/tn5/
Canonical Equivalence in Applications - UTN #5
=back
=cut
Unicode/Collate.pm 0000644 00000177264 15033552504 0010076 0 ustar 00 package Unicode::Collate;
BEGIN {
unless ("A" eq pack('U', 0x41)) {
die "Unicode::Collate cannot stringify a Unicode code point\n";
}
unless (0x41 == unpack('U', 'A')) {
die "Unicode::Collate cannot get a Unicode code point\n";
}
}
use 5.006;
use strict;
use warnings;
use Carp;
use File::Spec;
no warnings 'utf8';
our $VERSION = '1.25';
our $PACKAGE = __PACKAGE__;
### begin XS only ###
use XSLoader ();
XSLoader::load('Unicode::Collate', $VERSION);
### end XS only ###
my @Path = qw(Unicode Collate);
my $KeyFile = 'allkeys.txt';
# Perl's boolean
use constant TRUE => 1;
use constant FALSE => "";
use constant NOMATCHPOS => -1;
# A coderef to get combining class imported from Unicode::Normalize
# (i.e. \&Unicode::Normalize::getCombinClass).
# This is also used as a HAS_UNICODE_NORMALIZE flag.
my $CVgetCombinClass;
# Supported Levels
use constant MinLevel => 1;
use constant MaxLevel => 4;
# Minimum weights at level 2 and 3, respectively
use constant Min2Wt => 0x20;
use constant Min3Wt => 0x02;
# Shifted weight at 4th level
use constant Shift4Wt => 0xFFFF;
# A boolean for Variable and 16-bit weights at 4 levels of Collation Element
use constant VCE_TEMPLATE => 'Cn4';
# A sort key: 16-bit weights
use constant KEY_TEMPLATE => 'n*';
# The tie-breaking: 32-bit weights
use constant TIE_TEMPLATE => 'N*';
# Level separator in a sort key:
# i.e. pack(KEY_TEMPLATE, 0)
use constant LEVEL_SEP => "\0\0";
# As Unicode code point separator for hash keys.
# A joined code point string (denoted by JCPS below)
# like "65;768" is used for internal processing
# instead of Perl's Unicode string like "\x41\x{300}",
# as the native code point is different from the Unicode code point
# on EBCDIC platform.
# This character must not be included in any stringified
# representation of an integer.
use constant CODE_SEP => ';';
# NOTE: in regex /;/ is used for $jcps!
# boolean values of variable weights
use constant NON_VAR => 0; # Non-Variable character
use constant VAR => 1; # Variable character
# specific code points
use constant Hangul_SIni => 0xAC00;
use constant Hangul_SFin => 0xD7A3;
# Logical_Order_Exception in PropList.txt
my $DefaultRearrange = [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ];
# for highestFFFF and minimalFFFE
my $HighestVCE = pack(VCE_TEMPLATE, 0, 0xFFFE, 0x20, 0x5, 0xFFFF);
my $minimalVCE = pack(VCE_TEMPLATE, 0, 1, 0x20, 0x5, 0xFFFE);
sub UCA_Version { '34' }
sub Base_Unicode_Version { '9.0.0' }
######
sub pack_U {
return pack('U*', @_);
}
sub unpack_U {
return unpack('U*', shift(@_).pack('U*'));
}
######
my (%VariableOK);
@VariableOK{ qw/
blanked non-ignorable shifted shift-trimmed
/ } = (); # keys lowercased
our @ChangeOK = qw/
alternate backwards level normalization rearrange
katakana_before_hiragana upper_before_lower ignore_level2
overrideCJK overrideHangul overrideOut preprocess UCA_Version
hangul_terminator variable identical highestFFFF minimalFFFE
long_contraction
/;
our @ChangeNG = qw/
entry mapping table maxlength contraction
ignoreChar ignoreName undefChar undefName rewrite
versionTable alternateTable backwardsTable forwardsTable
rearrangeTable variableTable
derivCode normCode rearrangeHash backwardsFlag
suppress suppressHash
__useXS /; ### XS only
# The hash key 'ignored' was deleted at v 0.21.
# The hash key 'isShift' was deleted at v 0.23.
# The hash key 'combining' was deleted at v 0.24.
# The hash key 'entries' was deleted at v 0.30.
# The hash key 'L3_ignorable' was deleted at v 0.40.
sub version {
my $self = shift;
return $self->{versionTable} || 'unknown';
}
my (%ChangeOK, %ChangeNG);
@ChangeOK{ @ChangeOK } = ();
@ChangeNG{ @ChangeNG } = ();
sub change {
my $self = shift;
my %hash = @_;
my %old;
if (exists $hash{alternate}) {
if (exists $hash{variable}) {
delete $hash{alternate};
} else {
$hash{variable} = $hash{alternate};
}
}
foreach my $k (keys %hash) {
if (exists $ChangeOK{$k}) {
$old{$k} = $self->{$k};
$self->{$k} = $hash{$k};
} elsif (exists $ChangeNG{$k}) {
croak "change of $k via change() is not allowed!";
}
# else => ignored
}
$self->checkCollator();
return wantarray ? %old : $self;
}
sub _checkLevel {
my $level = shift;
my $key = shift; # 'level' or 'backwards'
MinLevel <= $level or croak sprintf
"Illegal level %d (in value for key '%s') lower than %d.",
$level, $key, MinLevel;
$level <= MaxLevel or croak sprintf
"Unsupported level %d (in value for key '%s') higher than %d.",
$level, $key, MaxLevel;
}
my %DerivCode = (
8 => \&_derivCE_8,
9 => \&_derivCE_9,
11 => \&_derivCE_9, # 11 == 9
14 => \&_derivCE_14,
16 => \&_derivCE_14, # 16 == 14
18 => \&_derivCE_18,
20 => \&_derivCE_20,
22 => \&_derivCE_22,
24 => \&_derivCE_24,
26 => \&_derivCE_24, # 26 == 24
28 => \&_derivCE_24, # 28 == 24
30 => \&_derivCE_24, # 30 == 24
32 => \&_derivCE_32,
34 => \&_derivCE_34,
36 => \&_derivCE_36,
);
sub checkCollator {
my $self = shift;
_checkLevel($self->{level}, 'level');
$self->{derivCode} = $DerivCode{ $self->{UCA_Version} }
or croak "Illegal UCA version (passed $self->{UCA_Version}).";
$self->{variable} ||= $self->{alternate} || $self->{variableTable} ||
$self->{alternateTable} || 'shifted';
$self->{variable} = $self->{alternate} = lc($self->{variable});
exists $VariableOK{ $self->{variable} }
or croak "$PACKAGE unknown variable parameter name: $self->{variable}";
if (! defined $self->{backwards}) {
$self->{backwardsFlag} = 0;
} elsif (! ref $self->{backwards}) {
_checkLevel($self->{backwards}, 'backwards');
$self->{backwardsFlag} = 1 << $self->{backwards};
} else {
my %level;
$self->{backwardsFlag} = 0;
for my $b (@{ $self->{backwards} }) {
_checkLevel($b, 'backwards');
$level{$b} = 1;
}
for my $v (sort keys %level) {
$self->{backwardsFlag} += 1 << $v;
}
}
defined $self->{rearrange} or $self->{rearrange} = [];
ref $self->{rearrange}
or croak "$PACKAGE: list for rearrangement must be store in ARRAYREF";
# keys of $self->{rearrangeHash} are $self->{rearrange}.
$self->{rearrangeHash} = undef;
if (@{ $self->{rearrange} }) {
@{ $self->{rearrangeHash} }{ @{ $self->{rearrange} } } = ();
}
$self->{normCode} = undef;
if (defined $self->{normalization}) {
eval { require Unicode::Normalize };
$@ and croak "Unicode::Normalize is required to normalize strings";
$CVgetCombinClass ||= \&Unicode::Normalize::getCombinClass;
if ($self->{normalization} =~ /^(?:NF)D\z/) { # tweak for default
$self->{normCode} = \&Unicode::Normalize::NFD;
}
elsif ($self->{normalization} ne 'prenormalized') {
my $norm = $self->{normalization};
$self->{normCode} = sub {
Unicode::Normalize::normalize($norm, shift);
};
eval { $self->{normCode}->("") }; # try
$@ and croak "$PACKAGE unknown normalization form name: $norm";
}
}
return;
}
sub new
{
my $class = shift;
my $self = bless { @_ }, $class;
### begin XS only ###
if (! exists $self->{table} && !defined $self->{rewrite} &&
!defined $self->{undefName} && !defined $self->{ignoreName} &&
!defined $self->{undefChar} && !defined $self->{ignoreChar}) {
$self->{__useXS} = \&_fetch_simple;
} else {
$self->{__useXS} = undef;
}
### end XS only ###
# keys of $self->{suppressHash} are $self->{suppress}.
if ($self->{suppress} && @{ $self->{suppress} }) {
@{ $self->{suppressHash} }{ @{ $self->{suppress} } } = ();
} # before read_table()
# If undef is passed explicitly, no file is read.
$self->{table} = $KeyFile if ! exists $self->{table};
$self->read_table() if defined $self->{table};
if ($self->{entry}) {
while ($self->{entry} =~ /([^\n]+)/g) {
$self->parseEntry($1, TRUE);
}
}
# only in new(), not in change()
$self->{level} ||= MaxLevel;
$self->{UCA_Version} ||= UCA_Version();
$self->{overrideHangul} = FALSE
if ! exists $self->{overrideHangul};
$self->{overrideCJK} = FALSE
if ! exists $self->{overrideCJK};
$self->{normalization} = 'NFD'
if ! exists $self->{normalization};
$self->{rearrange} = $self->{rearrangeTable} ||
($self->{UCA_Version} <= 11 ? $DefaultRearrange : [])
if ! exists $self->{rearrange};
$self->{backwards} = $self->{backwardsTable}
if ! exists $self->{backwards};
exists $self->{long_contraction} or $self->{long_contraction}
= 22 <= $self->{UCA_Version} && $self->{UCA_Version} <= 24;
# checkCollator() will be called in change()
$self->checkCollator();
return $self;
}
sub parseAtmark {
my $self = shift;
my $line = shift; # after s/^\s*\@//
if ($line =~ /^version\s*(\S*)/) {
$self->{versionTable} ||= $1;
}
elsif ($line =~ /^variable\s+(\S*)/) { # since UTS #10-9
$self->{variableTable} ||= $1;
}
elsif ($line =~ /^alternate\s+(\S*)/) { # till UTS #10-8
$self->{alternateTable} ||= $1;
}
elsif ($line =~ /^backwards\s+(\S*)/) {
push @{ $self->{backwardsTable} }, $1;
}
elsif ($line =~ /^forwards\s+(\S*)/) { # perhaps no use
push @{ $self->{forwardsTable} }, $1;
}
elsif ($line =~ /^rearrange\s+(.*)/) { # (\S*) is NG
push @{ $self->{rearrangeTable} }, _getHexArray($1);
}
}
sub read_table {
my $self = shift;
### begin XS only ###
if ($self->{__useXS}) {
my @rest = _fetch_rest(); # complex matter need to parse
for my $line (@rest) {
next if $line =~ /^\s*#/;
if ($line =~ s/^\s*\@//) {
$self->parseAtmark($line);
} else {
$self->parseEntry($line);
}
}
return;
}
### end XS only ###
my($f, $fh);
foreach my $d (@INC) {
$f = File::Spec->catfile($d, @Path, $self->{table});
last if open($fh, $f);
$f = undef;
}
if (!defined $f) {
$f = File::Spec->catfile(@Path, $self->{table});
croak("$PACKAGE: Can't locate $f in \@INC (\@INC contains: @INC)");
}
while (my $line = <$fh>) {
next if $line =~ /^\s*#/;
if ($line =~ s/^\s*\@//) {
$self->parseAtmark($line);
} else {
$self->parseEntry($line);
}
}
close $fh;
}
##
## get $line, parse it, and write an entry in $self
##
sub parseEntry
{
my $self = shift;
my $line = shift;
my $tailoring = shift;
my($name, $entry, @uv, @key);
if (defined $self->{rewrite}) {
$line = $self->{rewrite}->($line);
}
return if $line !~ /^\s*[0-9A-Fa-f]/;
# removes comment and gets name
$name = $1
if $line =~ s/[#%]\s*(.*)//;
return if defined $self->{undefName} && $name =~ /$self->{undefName}/;
# gets element
my($e, $k) = split /;/, $line;
croak "Wrong Entry: <charList> must be separated by ';' from <collElement>"
if ! $k;
@uv = _getHexArray($e);
return if !@uv;
return if @uv > 1 && $self->{suppressHash} && !$tailoring &&
exists $self->{suppressHash}{$uv[0]};
$entry = join(CODE_SEP, @uv); # in JCPS
if (defined $self->{undefChar} || defined $self->{ignoreChar}) {
my $ele = pack_U(@uv);
# regarded as if it were not stored in the table
return
if defined $self->{undefChar} && $ele =~ /$self->{undefChar}/;
# replaced as completely ignorable
$k = '[.0000.0000.0000.0000]'
if defined $self->{ignoreChar} && $ele =~ /$self->{ignoreChar}/;
}
# replaced as completely ignorable
$k = '[.0000.0000.0000.0000]'
if defined $self->{ignoreName} && $name =~ /$self->{ignoreName}/;
my $is_L3_ignorable = TRUE;
foreach my $arr ($k =~ /\[([^\[\]]+)\]/g) { # SPACEs allowed
my $var = $arr =~ /\*/; # exactly /^\*/ but be lenient.
my @wt = _getHexArray($arr);
push @key, pack(VCE_TEMPLATE, $var, @wt);
$is_L3_ignorable = FALSE
if $wt[0] || $wt[1] || $wt[2];
# Conformance Test for 3.1.1 and 4.0.0 shows Level 3 ignorable
# is completely ignorable.
# For expansion, an entry $is_L3_ignorable
# if and only if "all" CEs are [.0000.0000.0000].
}
# mapping: be an array ref or not exists (any false value is disallowed)
$self->{mapping}{$entry} = $is_L3_ignorable ? [] : \@key;
# maxlength: be more than 1 or not exists (any false value is disallowed)
if (@uv > 1) {
if (!$self->{maxlength}{$uv[0]} || $self->{maxlength}{$uv[0]} < @uv) {
$self->{maxlength}{$uv[0]} = @uv;
}
}
# contraction: be 1 or not exists (any false value is disallowed)
while (@uv > 2) {
pop @uv;
my $fake_entry = join(CODE_SEP, @uv); # in JCPS
$self->{contraction}{$fake_entry} = 1;
}
}
sub viewSortKey
{
my $self = shift;
my $str = shift;
$self->visualizeSortKey($self->getSortKey($str));
}
sub process
{
my $self = shift;
my $str = shift;
my $prep = $self->{preprocess};
my $norm = $self->{normCode};
$str = &$prep($str) if ref $prep;
$str = &$norm($str) if ref $norm;
return $str;
}
##
## arrayref of JCPS = splitEnt(string to be collated)
## arrayref of arrayref[JCPS, ini_pos, fin_pos] = splitEnt(string, TRUE)
##
sub splitEnt
{
my $self = shift;
my $str = shift;
my $wLen = shift; # with Length
my $map = $self->{mapping};
my $max = $self->{maxlength};
my $reH = $self->{rearrangeHash};
my $vers = $self->{UCA_Version};
my $ver9 = $vers >= 9 && $vers <= 11;
my $long = $self->{long_contraction};
my $uXS = $self->{__useXS}; ### XS only
my @buf;
# get array of Unicode code point of string.
my @src = unpack_U($str);
# rearrangement:
# Character positions are not kept if rearranged,
# then neglected if $wLen is true.
if ($reH && ! $wLen) {
for (my $i = 0; $i < @src; $i++) {
if (exists $reH->{ $src[$i] } && $i + 1 < @src) {
($src[$i], $src[$i+1]) = ($src[$i+1], $src[$i]);
$i++;
}
}
}
# remove a code point marked as a completely ignorable.
for (my $i = 0; $i < @src; $i++) {
if ($vers <= 20 && _isIllegal($src[$i])) {
$src[$i] = undef;
} elsif ($ver9) {
$src[$i] = undef if exists $map->{ $src[$i] }
? @{ $map->{ $src[$i] } } == 0
: $uXS && _ignorable_simple($src[$i]); ### XS only
}
}
for (my $i = 0; $i < @src; $i++) {
my $jcps = $src[$i];
# skip removed code point
if (! defined $jcps) {
if ($wLen && @buf) {
$buf[-1][2] = $i + 1;
}
next;
}
my $i_orig = $i;
# find contraction
if (exists $max->{$jcps}) {
my $temp_jcps = $jcps;
my $jcpsLen = 1;
my $maxLen = $max->{$jcps};
for (my $p = $i + 1; $jcpsLen < $maxLen && $p < @src; $p++) {
next if ! defined $src[$p];
$temp_jcps .= CODE_SEP . $src[$p];
$jcpsLen++;
if (exists $map->{$temp_jcps}) {
$jcps = $temp_jcps;
$i = $p;
}
}
# discontiguous contraction with Combining Char (cf. UTS#10, S2.1).
# This process requires Unicode::Normalize.
# If "normalization" is undef, here should be skipped *always*
# (in spite of bool value of $CVgetCombinClass),
# since canonical ordering cannot be expected.
# Blocked combining character should not be contracted.
# $self->{normCode} is false in the case of "prenormalized".
if ($self->{normalization}) {
my $cont = $self->{contraction};
my $preCC = 0;
my $preCC_uc = 0;
my $jcps_uc = $jcps;
my(@out, @out_uc);
for (my $p = $i + 1; $p < @src; $p++) {
next if ! defined $src[$p];
my $curCC = $CVgetCombinClass->($src[$p]);
last unless $curCC;
my $tail = CODE_SEP . $src[$p];
if ($preCC != $curCC && exists $map->{$jcps.$tail}) {
$jcps .= $tail;
push @out, $p;
} else {
$preCC = $curCC;
}
next if !$long;
if ($preCC_uc != $curCC &&
(exists $map->{$jcps_uc.$tail} ||
exists $cont->{$jcps_uc.$tail})) {
$jcps_uc .= $tail;
push @out_uc, $p;
} else {
$preCC_uc = $curCC;
}
}
if (@out_uc && exists $map->{$jcps_uc}) {
$jcps = $jcps_uc;
$src[$_] = undef for @out_uc;
} else {
$src[$_] = undef for @out;
}
}
}
# skip completely ignorable
if (exists $map->{$jcps} ? @{ $map->{$jcps} } == 0 :
$uXS && $jcps !~ /;/ && _ignorable_simple($jcps)) { ### XS only
if ($wLen && @buf) {
$buf[-1][2] = $i + 1;
}
next;
}
push @buf, $wLen ? [$jcps, $i_orig, $i + 1] : $jcps;
}
return \@buf;
}
##
## VCE = _pack_override(input, codepoint, derivCode)
##
sub _pack_override ($$$) {
my $r = shift;
my $u = shift;
my $der = shift;
if (ref $r) {
return pack(VCE_TEMPLATE, NON_VAR, @$r);
} elsif (defined $r) {
return pack(VCE_TEMPLATE, NON_VAR, $r, Min2Wt, Min3Wt, $u);
} else {
$u = 0xFFFD if 0x10FFFF < $u;
return $der->($u);
}
}
##
## list of VCE = getWt(JCPS)
##
sub getWt
{
my $self = shift;
my $u = shift;
my $map = $self->{mapping};
my $der = $self->{derivCode};
my $out = $self->{overrideOut};
my $uXS = $self->{__useXS}; ### XS only
return if !defined $u;
return $self->varCE($HighestVCE) if $u eq 0xFFFF && $self->{highestFFFF};
return $self->varCE($minimalVCE) if $u eq 0xFFFE && $self->{minimalFFFE};
$u = 0xFFFD if $u !~ /;/ && 0x10FFFF < $u && !$out;
my @ce;
if (exists $map->{$u}) {
@ce = @{ $map->{$u} }; # $u may be a contraction
### begin XS only ###
} elsif ($uXS && _exists_simple($u)) {
@ce = _fetch_simple($u);
### end XS only ###
} elsif (Hangul_SIni <= $u && $u <= Hangul_SFin) {
my $hang = $self->{overrideHangul};
if ($hang) {
@ce = map _pack_override($_, $u, $der), $hang->($u);
} elsif (!defined $hang) {
@ce = $der->($u);
} else {
my $max = $self->{maxlength};
my @decH = _decompHangul($u);
if (@decH == 2) {
my $contract = join(CODE_SEP, @decH);
@decH = ($contract) if exists $map->{$contract};
} else { # must be <@decH == 3>
if (exists $max->{$decH[0]}) {
my $contract = join(CODE_SEP, @decH);
if (exists $map->{$contract}) {
@decH = ($contract);
} else {
$contract = join(CODE_SEP, @decH[0,1]);
exists $map->{$contract} and @decH = ($contract, $decH[2]);
}
# even if V's ignorable, LT contraction is not supported.
# If such a situation were required, NFD should be used.
}
if (@decH == 3 && exists $max->{$decH[1]}) {
my $contract = join(CODE_SEP, @decH[1,2]);
exists $map->{$contract} and @decH = ($decH[0], $contract);
}
}
@ce = map({
exists $map->{$_} ? @{ $map->{$_} } :
$uXS && _exists_simple($_) ? _fetch_simple($_) : ### XS only
$der->($_);
} @decH);
}
} elsif ($out && 0x10FFFF < $u) {
@ce = map _pack_override($_, $u, $der), $out->($u);
} else {
my $cjk = $self->{overrideCJK};
my $vers = $self->{UCA_Version};
if ($cjk && _isUIdeo($u, $vers)) {
@ce = map _pack_override($_, $u, $der), $cjk->($u);
} elsif ($vers == 8 && defined $cjk && _isUIdeo($u, 0)) {
@ce = _uideoCE_8($u);
} else {
@ce = $der->($u);
}
}
return map $self->varCE($_), @ce;
}
##
## string sortkey = getSortKey(string arg)
##
sub getSortKey
{
my $self = shift;
my $orig = shift;
my $str = $self->process($orig);
my $rEnt = $self->splitEnt($str); # get an arrayref of JCPS
my $vers = $self->{UCA_Version};
my $term = $self->{hangul_terminator};
my $lev = $self->{level};
my $iden = $self->{identical};
my @buf; # weight arrays
if ($term) {
my $preHST = '';
my $termCE = $self->varCE(pack(VCE_TEMPLATE, NON_VAR, $term, 0,0,0));
foreach my $jcps (@$rEnt) {
# weird things like VL, TL-contraction are not considered!
my $curHST = join '', map getHST($_, $vers), split /;/, $jcps;
if ($preHST && !$curHST || # hangul before non-hangul
$preHST =~ /L\z/ && $curHST =~ /^T/ ||
$preHST =~ /V\z/ && $curHST =~ /^L/ ||
$preHST =~ /T\z/ && $curHST =~ /^[LV]/) {
push @buf, $termCE;
}
$preHST = $curHST;
push @buf, $self->getWt($jcps);
}
push @buf, $termCE if $preHST; # end at hangul
} else {
foreach my $jcps (@$rEnt) {
push @buf, $self->getWt($jcps);
}
}
my $rkey = $self->mk_SortKey(\@buf); ### XS only
if ($iden || $vers >= 26 && $lev == MaxLevel) {
$rkey .= LEVEL_SEP;
$rkey .= pack(TIE_TEMPLATE, unpack_U($str)) if $iden;
}
return $rkey;
}
##
## int compare = cmp(string a, string b)
##
sub cmp { $_[0]->getSortKey($_[1]) cmp $_[0]->getSortKey($_[2]) }
sub eq { $_[0]->getSortKey($_[1]) eq $_[0]->getSortKey($_[2]) }
sub ne { $_[0]->getSortKey($_[1]) ne $_[0]->getSortKey($_[2]) }
sub lt { $_[0]->getSortKey($_[1]) lt $_[0]->getSortKey($_[2]) }
sub le { $_[0]->getSortKey($_[1]) le $_[0]->getSortKey($_[2]) }
sub gt { $_[0]->getSortKey($_[1]) gt $_[0]->getSortKey($_[2]) }
sub ge { $_[0]->getSortKey($_[1]) ge $_[0]->getSortKey($_[2]) }
##
## list[strings] sorted = sort(list[strings] arg)
##
sub sort {
my $obj = shift;
return
map { $_->[1] }
sort{ $a->[0] cmp $b->[0] }
map [ $obj->getSortKey($_), $_ ], @_;
}
##
## bool _nonIgnorAtLevel(arrayref weights, int level)
##
sub _nonIgnorAtLevel($$)
{
my $wt = shift;
return if ! defined $wt;
my $lv = shift;
return grep($wt->[$_-1] != 0, MinLevel..$lv) ? TRUE : FALSE;
}
##
## bool _eqArray(
## arrayref of arrayref[weights] source,
## arrayref of arrayref[weights] substr,
## int level)
## * comparison of graphemes vs graphemes.
## @$source >= @$substr must be true (check it before call this);
##
sub _eqArray($$$)
{
my $source = shift;
my $substr = shift;
my $lev = shift;
for my $g (0..@$substr-1){
# Do the $g'th graphemes have the same number of AV weights?
return if @{ $source->[$g] } != @{ $substr->[$g] };
for my $w (0..@{ $substr->[$g] }-1) {
for my $v (0..$lev-1) {
return if $source->[$g][$w][$v] != $substr->[$g][$w][$v];
}
}
}
return 1;
}
##
## (int position, int length)
## int position = index(string, substring, position, [undoc'ed global])
##
## With "global" (only for the list context),
## returns list of arrayref[position, length].
##
sub index
{
my $self = shift;
$self->{preprocess} and
croak "Don't use Preprocess with index(), match(), etc.";
$self->{normCode} and
croak "Don't use Normalization with index(), match(), etc.";
my $str = shift;
my $len = length($str);
my $sub = shift;
my $subE = $self->splitEnt($sub);
my $pos = @_ ? shift : 0;
$pos = 0 if $pos < 0;
my $glob = shift;
my $lev = $self->{level};
my $v2i = $self->{UCA_Version} >= 9 &&
$self->{variable} ne 'non-ignorable';
if (! @$subE) {
my $temp = $pos <= 0 ? 0 : $len <= $pos ? $len : $pos;
return $glob
? map([$_, 0], $temp..$len)
: wantarray ? ($temp,0) : $temp;
}
$len < $pos
and return wantarray ? () : NOMATCHPOS;
my $strE = $self->splitEnt($pos ? substr($str, $pos) : $str, TRUE);
@$strE
or return wantarray ? () : NOMATCHPOS;
my(@strWt, @iniPos, @finPos, @subWt, @g_ret);
my $last_is_variable;
for my $vwt (map $self->getWt($_), @$subE) {
my($var, @wt) = unpack(VCE_TEMPLATE, $vwt);
my $to_be_pushed = _nonIgnorAtLevel(\@wt,$lev);
# "Ignorable (L1, L2) after Variable" since track. v. 9
if ($v2i) {
if ($var) {
$last_is_variable = TRUE;
}
elsif (!$wt[0]) { # ignorable
$to_be_pushed = FALSE if $last_is_variable;
}
else {
$last_is_variable = FALSE;
}
}
if (@subWt && !$var && !$wt[0]) {
push @{ $subWt[-1] }, \@wt if $to_be_pushed;
} elsif ($to_be_pushed) {
push @subWt, [ \@wt ];
}
# else ===> skipped
}
my $count = 0;
my $end = @$strE - 1;
$last_is_variable = FALSE; # reuse
for (my $i = 0; $i <= $end; ) { # no $i++
my $found_base = 0;
# fetch a grapheme
while ($i <= $end && $found_base == 0) {
for my $vwt ($self->getWt($strE->[$i][0])) {
my($var, @wt) = unpack(VCE_TEMPLATE, $vwt);
my $to_be_pushed = _nonIgnorAtLevel(\@wt,$lev);
# "Ignorable (L1, L2) after Variable" since track. v. 9
if ($v2i) {
if ($var) {
$last_is_variable = TRUE;
}
elsif (!$wt[0]) { # ignorable
$to_be_pushed = FALSE if $last_is_variable;
}
else {
$last_is_variable = FALSE;
}
}
if (@strWt && !$var && !$wt[0]) {
push @{ $strWt[-1] }, \@wt if $to_be_pushed;
$finPos[-1] = $strE->[$i][2];
} elsif ($to_be_pushed) {
push @strWt, [ \@wt ];
push @iniPos, $found_base ? NOMATCHPOS : $strE->[$i][1];
$finPos[-1] = NOMATCHPOS if $found_base;
push @finPos, $strE->[$i][2];
$found_base++;
}
# else ===> no-op
}
$i++;
}
# try to match
while ( @strWt > @subWt || (@strWt == @subWt && $i > $end) ) {
if ($iniPos[0] != NOMATCHPOS &&
$finPos[$#subWt] != NOMATCHPOS &&
_eqArray(\@strWt, \@subWt, $lev)) {
my $temp = $iniPos[0] + $pos;
if ($glob) {
push @g_ret, [$temp, $finPos[$#subWt] - $iniPos[0]];
splice @strWt, 0, $#subWt;
splice @iniPos, 0, $#subWt;
splice @finPos, 0, $#subWt;
}
else {
return wantarray
? ($temp, $finPos[$#subWt] - $iniPos[0])
: $temp;
}
}
shift @strWt;
shift @iniPos;
shift @finPos;
}
}
return $glob
? @g_ret
: wantarray ? () : NOMATCHPOS;
}
##
## scalarref to matching part = match(string, substring)
##
sub match
{
my $self = shift;
if (my($pos,$len) = $self->index($_[0], $_[1])) {
my $temp = substr($_[0], $pos, $len);
return wantarray ? $temp : \$temp;
# An lvalue ref \substr should be avoided,
# since its value is affected by modification of its referent.
}
else {
return;
}
}
##
## arrayref matching parts = gmatch(string, substring)
##
sub gmatch
{
my $self = shift;
my $str = shift;
my $sub = shift;
return map substr($str, $_->[0], $_->[1]),
$self->index($str, $sub, 0, 'g');
}
##
## bool subst'ed = subst(string, substring, replace)
##
sub subst
{
my $self = shift;
my $code = ref $_[2] eq 'CODE' ? $_[2] : FALSE;
if (my($pos,$len) = $self->index($_[0], $_[1])) {
if ($code) {
my $mat = substr($_[0], $pos, $len);
substr($_[0], $pos, $len, $code->($mat));
} else {
substr($_[0], $pos, $len, $_[2]);
}
return TRUE;
}
else {
return FALSE;
}
}
##
## int count = gsubst(string, substring, replace)
##
sub gsubst
{
my $self = shift;
my $code = ref $_[2] eq 'CODE' ? $_[2] : FALSE;
my $cnt = 0;
# Replacement is carried out from the end, then use reverse.
for my $pos_len (reverse $self->index($_[0], $_[1], 0, 'g')) {
if ($code) {
my $mat = substr($_[0], $pos_len->[0], $pos_len->[1]);
substr($_[0], $pos_len->[0], $pos_len->[1], $code->($mat));
} else {
substr($_[0], $pos_len->[0], $pos_len->[1], $_[2]);
}
$cnt++;
}
return $cnt;
}
1;
__END__
=head1 NAME
Unicode::Collate - Unicode Collation Algorithm
=head1 SYNOPSIS
use Unicode::Collate;
#construct
$Collator = Unicode::Collate->new(%tailoring);
#sort
@sorted = $Collator->sort(@not_sorted);
#compare
$result = $Collator->cmp($a, $b); # returns 1, 0, or -1.
B<Note:> Strings in C<@not_sorted>, C<$a> and C<$b> are interpreted
according to Perl's Unicode support. See L<perlunicode>,
L<perluniintro>, L<perlunitut>, L<perlunifaq>, L<utf8>.
Otherwise you can use C<preprocess> or should decode them before.
=head1 DESCRIPTION
This module is an implementation of Unicode Technical Standard #10
(a.k.a. UTS #10) - Unicode Collation Algorithm (a.k.a. UCA).
=head2 Constructor and Tailoring
The C<new> method returns a collator object. If new() is called
with no parameters, the collator should do the default collation.
$Collator = Unicode::Collate->new(
UCA_Version => $UCA_Version,
alternate => $alternate, # alias for 'variable'
backwards => $levelNumber, # or \@levelNumbers
entry => $element,
hangul_terminator => $term_primary_weight,
highestFFFF => $bool,
identical => $bool,
ignoreName => qr/$ignoreName/,
ignoreChar => qr/$ignoreChar/,
ignore_level2 => $bool,
katakana_before_hiragana => $bool,
level => $collationLevel,
long_contraction => $bool,
minimalFFFE => $bool,
normalization => $normalization_form,
overrideCJK => \&overrideCJK,
overrideHangul => \&overrideHangul,
preprocess => \&preprocess,
rearrange => \@charList,
rewrite => \&rewrite,
suppress => \@charList,
table => $filename,
undefName => qr/$undefName/,
undefChar => qr/$undefChar/,
upper_before_lower => $bool,
variable => $variable,
);
=over 4
=item UCA_Version
If the revision (previously "tracking version") number of UCA is given,
behavior of that revision is emulated on collating.
If omitted, the return value of C<UCA_Version()> is used.
The following revisions are supported. The default is 34.
UCA Unicode Standard DUCET (@version)
-------------------------------------------------------
8 3.1 3.0.1 (3.0.1d9)
9 3.1 with Corrigendum 3 3.1.1 (3.1.1)
11 4.0 4.0.0 (4.0.0)
14 4.1.0 4.1.0 (4.1.0)
16 5.0 5.0.0 (5.0.0)
18 5.1.0 5.1.0 (5.1.0)
20 5.2.0 5.2.0 (5.2.0)
22 6.0.0 6.0.0 (6.0.0)
24 6.1.0 6.1.0 (6.1.0)
26 6.2.0 6.2.0 (6.2.0)
28 6.3.0 6.3.0 (6.3.0)
30 7.0.0 7.0.0 (7.0.0)
32 8.0.0 8.0.0 (8.0.0)
34 9.0.0 9.0.0 (9.0.0)
36 10.0.0 10.0.0(10.0.0)
* See below for C<long_contraction> with C<UCA_Version> 22 and 24.
* Noncharacters (e.g. U+FFFF) are not ignored, and can be overridden
since C<UCA_Version> 22.
* Out-of-range codepoints (greater than U+10FFFF) are not ignored,
and can be overridden since C<UCA_Version> 22.
* Fully ignorable characters were ignored, and would not interrupt
contractions with C<UCA_Version> 9 and 11.
* Treatment of ignorables after variables and some behaviors
were changed at C<UCA_Version> 9.
* Characters regarded as CJK unified ideographs (cf. C<overrideCJK>)
depend on C<UCA_Version>.
* Many hangul jamo are assigned at C<UCA_Version> 20, that will affect
C<hangul_terminator>.
=item alternate
-- see 3.2.2 Alternate Weighting, version 8 of UTS #10
For backward compatibility, C<alternate> (old name) can be used
as an alias for C<variable>.
=item backwards
-- see 3.4 Backward Accents, UTS #10.
backwards => $levelNumber or \@levelNumbers
Weights in reverse order; ex. level 2 (diacritic ordering) in French.
If omitted (or C<$levelNumber> is C<undef> or C<\@levelNumbers> is C<[]>),
forwards at all the levels.
=item entry
-- see 5 Tailoring; 9.1 Allkeys File Format, UTS #10.
If the same character (or a sequence of characters) exists
in the collation element table through C<table>,
mapping to collation elements is overridden.
If it does not exist, the mapping is defined additionally.
entry => <<'ENTRY', # for DUCET v4.0.0 (allkeys-4.0.0.txt)
0063 0068 ; [.0E6A.0020.0002.0063] # ch
0043 0068 ; [.0E6A.0020.0007.0043] # Ch
0043 0048 ; [.0E6A.0020.0008.0043] # CH
006C 006C ; [.0F4C.0020.0002.006C] # ll
004C 006C ; [.0F4C.0020.0007.004C] # Ll
004C 004C ; [.0F4C.0020.0008.004C] # LL
00F1 ; [.0F7B.0020.0002.00F1] # n-tilde
006E 0303 ; [.0F7B.0020.0002.00F1] # n-tilde
00D1 ; [.0F7B.0020.0008.00D1] # N-tilde
004E 0303 ; [.0F7B.0020.0008.00D1] # N-tilde
ENTRY
entry => <<'ENTRY', # for DUCET v4.0.0 (allkeys-4.0.0.txt)
00E6 ; [.0E33.0020.0002.00E6][.0E8B.0020.0002.00E6] # ae ligature as <a><e>
00C6 ; [.0E33.0020.0008.00C6][.0E8B.0020.0008.00C6] # AE ligature as <A><E>
ENTRY
B<NOTE:> The code point in the UCA file format (before C<';'>)
B<must> be a Unicode code point (defined as hexadecimal),
but not a native code point.
So C<0063> must always denote C<U+0063>,
but not a character of C<"\x63">.
Weighting may vary depending on collation element table.
So ensure the weights defined in C<entry> will be consistent with
those in the collation element table loaded via C<table>.
In DUCET v4.0.0, primary weight of C<C> is C<0E60>
and that of C<D> is C<0E6D>. So setting primary weight of C<CH> to C<0E6A>
(as a value between C<0E60> and C<0E6D>)
makes ordering as C<C E<lt> CH E<lt> D>.
Exactly speaking DUCET already has some characters between C<C> and C<D>:
C<small capital C> (C<U+1D04>) with primary weight C<0E64>,
C<c-hook/C-hook> (C<U+0188/U+0187>) with C<0E65>,
and C<c-curl> (C<U+0255>) with C<0E69>.
Then primary weight C<0E6A> for C<CH> makes C<CH>
ordered between C<c-curl> and C<D>.
=item hangul_terminator
-- see 7.1.4 Trailing Weights, UTS #10.
If a true value is given (non-zero but should be positive),
it will be added as a terminator primary weight to the end of
every standard Hangul syllable. Secondary and any higher weights
for terminator are set to zero.
If the value is false or C<hangul_terminator> key does not exist,
insertion of terminator weights will not be performed.
Boundaries of Hangul syllables are determined
according to conjoining Jamo behavior in F<the Unicode Standard>
and F<HangulSyllableType.txt>.
B<Implementation Note:>
(1) For expansion mapping (Unicode character mapped
to a sequence of collation elements), a terminator will not be added
between collation elements, even if Hangul syllable boundary exists there.
Addition of terminator is restricted to the next position
to the last collation element.
(2) Non-conjoining Hangul letters
(Compatibility Jamo, halfwidth Jamo, and enclosed letters) are not
automatically terminated with a terminator primary weight.
These characters may need terminator included in a collation element
table beforehand.
=item highestFFFF
-- see 2.4 Tailored noncharacter weights, UTS #35 (LDML) Part 5: Collation.
If the parameter is made true, C<U+FFFF> has a highest primary weight.
When a boolean of C<$coll-E<gt>ge($str, "abc")> and
C<$coll-E<gt>le($str, "abc\x{FFFF}")> is true, it is expected that C<$str>
begins with C<"abc">, or another primary equivalent.
C<$str> may be C<"abcd">, C<"abc012">, but should not include C<U+FFFF>
such as C<"abc\x{FFFF}xyz">.
C<$coll-E<gt>le($str, "abc\x{FFFF}")> works like C<$coll-E<gt>lt($str, "abd")>
almost, but the latter has a problem that you should know which letter is
next to C<c>. For a certain language where C<ch> as the next letter,
C<"abch"> is greater than C<"abc\x{FFFF}">, but less than C<"abd">.
Note:
This is equivalent to C<(entry =E<gt> 'FFFF ; [.FFFE.0020.0005.FFFF]')>.
Any other character than C<U+FFFF> can be tailored by C<entry>.
=item identical
-- see A.3 Deterministic Comparison, UTS #10.
By default, strings whose weights are equal should be equal,
even though their code points are not equal.
Completely ignorable characters are ignored.
If the parameter is made true, a final, tie-breaking level is used.
If no difference of weights is found after the comparison through
all the level specified by C<level>, the comparison with code points
will be performed.
For the tie-breaking comparison, the sort key has code points
of the original string appended.
Completely ignorable characters are not ignored.
If C<preprocess> and/or C<normalization> is applied, the code points
of the string after them (in NFD by default) are used.
=item ignoreChar
=item ignoreName
-- see 3.6 Variable Weighting, UTS #10.
Makes the entry in the table completely ignorable;
i.e. as if the weights were zero at all level.
Through C<ignoreChar>, any character matching C<qr/$ignoreChar/>
will be ignored. Through C<ignoreName>, any character whose name
(given in the C<table> file as a comment) matches C<qr/$ignoreName/>
will be ignored.
E.g. when 'a' and 'e' are ignorable,
'element' is equal to 'lament' (or 'lmnt').
=item ignore_level2
-- see 5.1 Parametric Tailoring, UTS #10.
By default, case-sensitive comparison (that is level 3 difference)
won't ignore accents (that is level 2 difference).
If the parameter is made true, accents (and other primary ignorable
characters) are ignored, even though cases are taken into account.
B<NOTE>: C<level> should be 3 or greater.
=item katakana_before_hiragana
-- see 7.2 Tertiary Weight Table, UTS #10.
By default, hiragana is before katakana.
If the parameter is made true, this is reversed.
B<NOTE>: This parameter simplemindedly assumes that any hiragana/katakana
distinctions must occur in level 3, and their weights at level 3 must be
same as those mentioned in 7.3.1, UTS #10.
If you define your collation elements which violate this requirement,
this parameter does not work validly.
=item level
-- see 4.3 Form Sort Key, UTS #10.
Set the maximum level.
Any higher levels than the specified one are ignored.
Level 1: alphabetic ordering
Level 2: diacritic ordering
Level 3: case ordering
Level 4: tie-breaking (e.g. in the case when variable is 'shifted')
ex.level => 2,
If omitted, the maximum is the 4th.
B<NOTE:> The DUCET includes weights over 0xFFFF at the 4th level.
But this module only uses weights within 0xFFFF.
When C<variable> is 'blanked' or 'non-ignorable' (other than 'shifted'
and 'shift-trimmed'), the level 4 may be unreliable.
See also C<identical>.
=item long_contraction
-- see 3.8.2 Well-Formedness of the DUCET, 4.2 Produce Array, UTS #10.
If the parameter is made true, for a contraction with three or more
characters (here nicknamed "long contraction"), initial substrings
will be handled.
For example, a contraction ABC, where A is a starter, and B and C
are non-starters (character with non-zero combining character class),
will be detected even if there is not AB as a contraction.
B<Default:> Usually false.
If C<UCA_Version> is 22 or 24, and the value of C<long_contraction>
is not specified in C<new()>, a true value is set implicitly.
This is a workaround to pass Conformance Tests for Unicode 6.0.0 and 6.1.0.
C<change()> handles C<long_contraction> explicitly only.
If C<long_contraction> is not specified in C<change()>, even though
C<UCA_Version> is changed, C<long_contraction> will not be changed.
B<Limitation:> Scanning non-starters is one-way (no back tracking).
If AB is found but not ABC is not found, other long contraction where
the first character is A and the second is not B may not be found.
Under C<(normalization =E<gt> undef)>, detection step of discontiguous
contractions will be skipped.
B<Note:> The following contractions in DUCET are not considered
in steps S2.1.1 to S2.1.3, where they are discontiguous.
0FB2 0F71 0F80 (TIBETAN VOWEL SIGN VOCALIC RR)
0FB3 0F71 0F80 (TIBETAN VOWEL SIGN VOCALIC LL)
For example C<TIBETAN VOWEL SIGN VOCALIC RR> with C<COMBINING TILDE OVERLAY>
(C<U+0344>) is C<0FB2 0344 0F71 0F80> in NFD.
In this case C<0FB2 0F80> (C<TIBETAN VOWEL SIGN VOCALIC R>) is detected,
instead of C<0FB2 0F71 0F80>.
Inserted C<0344> makes C<0FB2 0F71 0F80> discontiguous and lack of
contraction C<0FB2 0F71> prohibits C<0FB2 0F71 0F80> from being detected.
=item minimalFFFE
-- see 1.1.1 U+FFFE, UTS #35 (LDML) Part 5: Collation.
If the parameter is made true, C<U+FFFE> has a minimal primary weight.
The comparison between C<"$a1\x{FFFE}$a2"> and C<"$b1\x{FFFE}$b2">
first compares C<$a1> and C<$b1> at level 1, and
then C<$a2> and C<$b2> at level 1, as followed.
"ab\x{FFFE}a"
"Ab\x{FFFE}a"
"ab\x{FFFE}c"
"Ab\x{FFFE}c"
"ab\x{FFFE}xyz"
"abc\x{FFFE}def"
"abc\x{FFFE}xYz"
"aBc\x{FFFE}xyz"
"abcX\x{FFFE}def"
"abcx\x{FFFE}xyz"
"b\x{FFFE}aaa"
"bbb\x{FFFE}a"
Note:
This is equivalent to C<(entry =E<gt> 'FFFE ; [.0001.0020.0005.FFFE]')>.
Any other character than C<U+FFFE> can be tailored by C<entry>.
=item normalization
-- see 4.1 Normalize, UTS #10.
If specified, strings are normalized before preparation of sort keys
(the normalization is executed after preprocess).
A form name C<Unicode::Normalize::normalize()> accepts will be applied
as C<$normalization_form>.
Acceptable names include C<'NFD'>, C<'NFC'>, C<'NFKD'>, and C<'NFKC'>.
See C<Unicode::Normalize::normalize()> for detail.
If omitted, C<'NFD'> is used.
C<normalization> is performed after C<preprocess> (if defined).
Furthermore, special values, C<undef> and C<"prenormalized">, can be used,
though they are not concerned with C<Unicode::Normalize::normalize()>.
If C<undef> (not a string C<"undef">) is passed explicitly
as the value for this key,
any normalization is not carried out (this may make tailoring easier
if any normalization is not desired). Under C<(normalization =E<gt> undef)>,
only contiguous contractions are resolved;
e.g. even if C<A-ring> (and C<A-ring-cedilla>) is ordered after C<Z>,
C<A-cedilla-ring> would be primary equal to C<A>.
In this point,
C<(normalization =E<gt> undef, preprocess =E<gt> sub { NFD(shift) })>
B<is not> equivalent to C<(normalization =E<gt> 'NFD')>.
In the case of C<(normalization =E<gt> "prenormalized")>,
any normalization is not performed, but
discontiguous contractions with combining characters are performed.
Therefore
C<(normalization =E<gt> 'prenormalized', preprocess =E<gt> sub { NFD(shift) })>
B<is> equivalent to C<(normalization =E<gt> 'NFD')>.
If source strings are finely prenormalized,
C<(normalization =E<gt> 'prenormalized')> may save time for normalization.
Except C<(normalization =E<gt> undef)>,
B<Unicode::Normalize> is required (see also B<CAVEAT>).
=item overrideCJK
-- see 7.1 Derived Collation Elements, UTS #10.
By default, CJK unified ideographs are ordered in Unicode codepoint
order, but those in the CJK Unified Ideographs block are less than
those in the CJK Unified Ideographs Extension A etc.
In the CJK Unified Ideographs block:
U+4E00..U+9FA5 if UCA_Version is 8, 9 or 11.
U+4E00..U+9FBB if UCA_Version is 14 or 16.
U+4E00..U+9FC3 if UCA_Version is 18.
U+4E00..U+9FCB if UCA_Version is 20 or 22.
U+4E00..U+9FCC if UCA_Version is 24 to 30.
U+4E00..U+9FD5 if UCA_Version is 32 or 34.
U+4E00..U+9FEA if UCA_Version is 36.
In the CJK Unified Ideographs Extension blocks:
Ext.A (U+3400..U+4DB5) and Ext.B (U+20000..U+2A6D6) in any UCA_Version.
Ext.C (U+2A700..U+2B734) if UCA_Version is 20 or later.
Ext.D (U+2B740..U+2B81D) if UCA_Version is 22 or later.
Ext.E (U+2B820..U+2CEA1) if UCA_Version is 32 or later.
Ext.F (U+2CEB0..U+2EBE0) if UCA_Version is 36.
Through C<overrideCJK>, ordering of CJK unified ideographs (including
extensions) can be overridden.
ex. CJK unified ideographs in the JIS code point order.
overrideCJK => sub {
my $u = shift; # get a Unicode codepoint
my $b = pack('n', $u); # to UTF-16BE
my $s = your_unicode_to_sjis_converter($b); # convert
my $n = unpack('n', $s); # convert sjis to short
[ $n, 0x20, 0x2, $u ]; # return the collation element
},
The return value may be an arrayref of 1st to 4th weights as shown
above. The return value may be an integer as the primary weight
as shown below. If C<undef> is returned, the default derived
collation element will be used.
overrideCJK => sub {
my $u = shift; # get a Unicode codepoint
my $b = pack('n', $u); # to UTF-16BE
my $s = your_unicode_to_sjis_converter($b); # convert
my $n = unpack('n', $s); # convert sjis to short
return $n; # return the primary weight
},
The return value may be a list containing zero or more of
an arrayref, an integer, or C<undef>.
ex. ignores all CJK unified ideographs.
overrideCJK => sub {()}, # CODEREF returning empty list
# where ->eq("Pe\x{4E00}rl", "Perl") is true
# as U+4E00 is a CJK unified ideograph and to be ignorable.
If a false value (including C<undef>) is passed, C<overrideCJK>
has no effect.
C<$Collator-E<gt>change(overrideCJK =E<gt> 0)> resets the old one.
But assignment of weight for CJK unified ideographs
in C<table> or C<entry> is still valid.
If C<undef> is passed explicitly as the value for this key,
weights for CJK unified ideographs are treated as undefined.
However when C<UCA_Version> E<gt> 8, C<(overrideCJK =E<gt> undef)>
has no special meaning.
B<Note:> In addition to them, 12 CJK compatibility ideographs (C<U+FA0E>,
C<U+FA0F>, C<U+FA11>, C<U+FA13>, C<U+FA14>, C<U+FA1F>, C<U+FA21>, C<U+FA23>,
C<U+FA24>, C<U+FA27>, C<U+FA28>, C<U+FA29>) are also treated as CJK unified
ideographs. But they can't be overridden via C<overrideCJK> when you use
DUCET, as the table includes weights for them. C<table> or C<entry> has
priority over C<overrideCJK>.
=item overrideHangul
-- see 7.1 Derived Collation Elements, UTS #10.
By default, Hangul syllables are decomposed into Hangul Jamo,
even if C<(normalization =E<gt> undef)>.
But the mapping of Hangul syllables may be overridden.
This parameter works like C<overrideCJK>, so see there for examples.
If you want to override the mapping of Hangul syllables,
NFD and NFKD are not appropriate, since NFD and NFKD will decompose
Hangul syllables before overriding. FCD may decompose Hangul syllables
as the case may be.
If a false value (but not C<undef>) is passed, C<overrideHangul>
has no effect.
C<$Collator-E<gt>change(overrideHangul =E<gt> 0)> resets the old one.
If C<undef> is passed explicitly as the value for this key,
weight for Hangul syllables is treated as undefined
without decomposition into Hangul Jamo.
But definition of weight for Hangul syllables
in C<table> or C<entry> is still valid.
=item overrideOut
-- see 7.1.1 Handling Ill-Formed Code Unit Sequences, UTS #10.
Perl seems to allow out-of-range values (greater than 0x10FFFF).
By default, out-of-range values are replaced with C<U+FFFD>
(REPLACEMENT CHARACTER) when C<UCA_Version> E<gt>= 22,
or ignored when C<UCA_Version> E<lt>= 20.
When C<UCA_Version> E<gt>= 22, the weights of out-of-range values
can be overridden. Though C<table> or C<entry> are available for them,
out-of-range values are too many.
C<overrideOut> can perform it algorithmically.
This parameter works like C<overrideCJK>, so see there for examples.
ex. ignores all out-of-range values.
overrideOut => sub {()}, # CODEREF returning empty list
If a false value (including C<undef>) is passed, C<overrideOut>
has no effect.
C<$Collator-E<gt>change(overrideOut =E<gt> 0)> resets the old one.
B<NOTE ABOUT U+FFFD:>
UCA recommends that out-of-range values should not be ignored for security
reasons. Say, C<"pe\x{110000}rl"> should not be equal to C<"perl">.
However, C<U+FFFD> is wrongly mapped to a variable collation element
in DUCET for Unicode 6.0.0 to 6.2.0, that means out-of-range values will be
ignored when C<variable> isn't C<Non-ignorable>.
The mapping of C<U+FFFD> is corrected in Unicode 6.3.0.
see L<http://www.unicode.org/reports/tr10/tr10-28.html#Trailing_Weights>
(7.1.4 Trailing Weights). Such a correction is reproduced by this.
overrideOut => sub { 0xFFFD }, # CODEREF returning a very large integer
This workaround is unnecessary since Unicode 6.3.0.
=item preprocess
-- see 5.4 Preprocessing, UTS #10.
If specified, the coderef is used to preprocess each string
before the formation of sort keys.
ex. dropping English articles, such as "a" or "the".
Then, "the pen" is before "a pencil".
preprocess => sub {
my $str = shift;
$str =~ s/\b(?:an?|the)\s+//gi;
return $str;
},
C<preprocess> is performed before C<normalization> (if defined).
ex. decoding strings in a legacy encoding such as shift-jis:
$sjis_collator = Unicode::Collate->new(
preprocess => \&your_shiftjis_to_unicode_decoder,
);
@result = $sjis_collator->sort(@shiftjis_strings);
B<Note:> Strings returned from the coderef will be interpreted
according to Perl's Unicode support. See L<perlunicode>,
L<perluniintro>, L<perlunitut>, L<perlunifaq>, L<utf8>.
=item rearrange
-- see 3.5 Rearrangement, UTS #10.
Characters that are not coded in logical order and to be rearranged.
If C<UCA_Version> is equal to or less than 11, default is:
rearrange => [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ],
If you want to disallow any rearrangement, pass C<undef> or C<[]>
(a reference to empty list) as the value for this key.
If C<UCA_Version> is equal to or greater than 14, default is C<[]>
(i.e. no rearrangement).
B<According to the version 9 of UCA, this parameter shall not be used;
but it is not warned at present.>
=item rewrite
If specified, the coderef is used to rewrite lines in C<table> or C<entry>.
The coderef will get each line, and then should return a rewritten line
according to the UCA file format.
If the coderef returns an empty line, the line will be skipped.
e.g. any primary ignorable characters into tertiary ignorable:
rewrite => sub {
my $line = shift;
$line =~ s/\[\.0000\..{4}\..{4}\./[.0000.0000.0000./g;
return $line;
},
This example shows rewriting weights. C<rewrite> is allowed to
affect code points, weights, and the name.
B<NOTE>: C<table> is available to use another table file;
preparing a modified table once would be more efficient than
rewriting lines on reading an unmodified table every time.
=item suppress
-- see 3.12 Special-Purpose Commands, UTS #35 (LDML) Part 5: Collation.
Contractions beginning with the specified characters are suppressed,
even if those contractions are defined in C<table>.
An example for Russian and some languages using the Cyrillic script:
suppress => [0x0400..0x0417, 0x041A..0x0437, 0x043A..0x045F],
where 0x0400 stands for C<U+0400>, CYRILLIC CAPITAL LETTER IE WITH GRAVE.
B<NOTE>: Contractions via C<entry> will not be suppressed.
=item table
-- see 3.8 Default Unicode Collation Element Table, UTS #10.
You can use another collation element table if desired.
The table file should locate in the F<Unicode/Collate> directory
on C<@INC>. Say, if the filename is F<Foo.txt>,
the table file is searched as F<Unicode/Collate/Foo.txt> in C<@INC>.
By default, F<allkeys.txt> (as the filename of DUCET) is used.
If you will prepare your own table file, any name other than F<allkeys.txt>
may be better to avoid namespace conflict.
B<NOTE>: When XSUB is used, the DUCET is compiled on building this
module, and it may save time at the run time.
Explicit saying C<(table =E<gt> 'allkeys.txt')>, or using another table,
or using C<ignoreChar>, C<ignoreName>, C<undefChar>, C<undefName> or
C<rewrite> will prevent this module from using the compiled DUCET.
If C<undef> is passed explicitly as the value for this key,
no file is read (but you can define collation elements via C<entry>).
A typical way to define a collation element table
without any file of table:
$onlyABC = Unicode::Collate->new(
table => undef,
entry => << 'ENTRIES',
0061 ; [.0101.0020.0002.0061] # LATIN SMALL LETTER A
0041 ; [.0101.0020.0008.0041] # LATIN CAPITAL LETTER A
0062 ; [.0102.0020.0002.0062] # LATIN SMALL LETTER B
0042 ; [.0102.0020.0008.0042] # LATIN CAPITAL LETTER B
0063 ; [.0103.0020.0002.0063] # LATIN SMALL LETTER C
0043 ; [.0103.0020.0008.0043] # LATIN CAPITAL LETTER C
ENTRIES
);
If C<ignoreName> or C<undefName> is used, character names should be
specified as a comment (following C<#>) on each line.
=item undefChar
=item undefName
-- see 6.3.3 Reducing the Repertoire, UTS #10.
Undefines the collation element as if it were unassigned in the C<table>.
This reduces the size of the table.
If an unassigned character appears in the string to be collated,
the sort key is made from its codepoint
as a single-character collation element,
as it is greater than any other assigned collation elements
(in the codepoint order among the unassigned characters).
But, it'd be better to ignore characters
unfamiliar to you and maybe never used.
Through C<undefChar>, any character matching C<qr/$undefChar/>
will be undefined. Through C<undefName>, any character whose name
(given in the C<table> file as a comment) matches C<qr/$undefName/>
will be undefined.
ex. Collation weights for beyond-BMP characters are not stored in object:
undefChar => qr/[^\0-\x{fffd}]/,
=item upper_before_lower
-- see 6.6 Case Comparisons, UTS #10.
By default, lowercase is before uppercase.
If the parameter is made true, this is reversed.
B<NOTE>: This parameter simplemindedly assumes that any lowercase/uppercase
distinctions must occur in level 3, and their weights at level 3 must be
same as those mentioned in 7.3.1, UTS #10.
If you define your collation elements which differs from this requirement,
this parameter doesn't work validly.
=item variable
-- see 3.6 Variable Weighting, UTS #10.
This key allows for variable weighting of variable collation elements,
which are marked with an ASTERISK in the table
(NOTE: Many punctuation marks and symbols are variable in F<allkeys.txt>).
variable => 'blanked', 'non-ignorable', 'shifted', or 'shift-trimmed'.
These names are case-insensitive.
By default (if specification is omitted), 'shifted' is adopted.
'Blanked' Variable elements are made ignorable at levels 1 through 3;
considered at the 4th level.
'Non-Ignorable' Variable elements are not reset to ignorable.
'Shifted' Variable elements are made ignorable at levels 1 through 3
their level 4 weight is replaced by the old level 1 weight.
Level 4 weight for Non-Variable elements is 0xFFFF.
'Shift-Trimmed' Same as 'shifted', but all FFFF's at the 4th level
are trimmed.
=back
=head2 Methods for Collation
=over 4
=item C<@sorted = $Collator-E<gt>sort(@not_sorted)>
Sorts a list of strings.
=item C<$result = $Collator-E<gt>cmp($a, $b)>
Returns 1 (when C<$a> is greater than C<$b>)
or 0 (when C<$a> is equal to C<$b>)
or -1 (when C<$a> is less than C<$b>).
=item C<$result = $Collator-E<gt>eq($a, $b)>
=item C<$result = $Collator-E<gt>ne($a, $b)>
=item C<$result = $Collator-E<gt>lt($a, $b)>
=item C<$result = $Collator-E<gt>le($a, $b)>
=item C<$result = $Collator-E<gt>gt($a, $b)>
=item C<$result = $Collator-E<gt>ge($a, $b)>
They works like the same name operators as theirs.
eq : whether $a is equal to $b.
ne : whether $a is not equal to $b.
lt : whether $a is less than $b.
le : whether $a is less than $b or equal to $b.
gt : whether $a is greater than $b.
ge : whether $a is greater than $b or equal to $b.
=item C<$sortKey = $Collator-E<gt>getSortKey($string)>
-- see 4.3 Form Sort Key, UTS #10.
Returns a sort key.
You compare the sort keys using a binary comparison
and get the result of the comparison of the strings using UCA.
$Collator->getSortKey($a) cmp $Collator->getSortKey($b)
is equivalent to
$Collator->cmp($a, $b)
=item C<$sortKeyForm = $Collator-E<gt>viewSortKey($string)>
Converts a sorting key into its representation form.
If C<UCA_Version> is 8, the output is slightly different.
use Unicode::Collate;
my $c = Unicode::Collate->new();
print $c->viewSortKey("Perl"),"\n";
# output:
# [0B67 0A65 0B7F 0B03 | 0020 0020 0020 0020 | 0008 0002 0002 0002 | FFFF FFFF FFFF FFFF]
# Level 1 Level 2 Level 3 Level 4
=back
=head2 Methods for Searching
The C<match>, C<gmatch>, C<subst>, C<gsubst> methods work
like C<m//>, C<m//g>, C<s///>, C<s///g>, respectively,
but they are not aware of any pattern, but only a literal substring.
B<DISCLAIMER:> If C<preprocess> or C<normalization> parameter is true
for C<$Collator>, calling these methods (C<index>, C<match>, C<gmatch>,
C<subst>, C<gsubst>) is croaked, as the position and the length might
differ from those on the specified string.
C<rearrange> and C<hangul_terminator> parameters are neglected.
C<katakana_before_hiragana> and C<upper_before_lower> don't affect
matching and searching, as it doesn't matter whether greater or less.
=over 4
=item C<$position = $Collator-E<gt>index($string, $substring[, $position])>
=item C<($position, $length) = $Collator-E<gt>index($string, $substring[, $position])>
If C<$substring> matches a part of C<$string>, returns
the position of the first occurrence of the matching part in scalar context;
in list context, returns a two-element list of
the position and the length of the matching part.
If C<$substring> does not match any part of C<$string>,
returns C<-1> in scalar context and
an empty list in list context.
e.g. when the content of C<$str> is C<"Ich mu>E<szlig>C< studieren Perl.">,
you say the following where C<$sub> is C<"M>E<uuml>C<SS">,
my $Collator = Unicode::Collate->new( normalization => undef, level => 1 );
# (normalization => undef) is REQUIRED.
my $match;
if (my($pos,$len) = $Collator->index($str, $sub)) {
$match = substr($str, $pos, $len);
}
and get C<"mu>E<szlig>C<"> in C<$match>, since C<"mu>E<szlig>C<">
is primary equal to C<"M>E<uuml>C<SS">.
=item C<$match_ref = $Collator-E<gt>match($string, $substring)>
=item C<($match) = $Collator-E<gt>match($string, $substring)>
If C<$substring> matches a part of C<$string>, in scalar context, returns
B<a reference to> the first occurrence of the matching part
(C<$match_ref> is always true if matches,
since every reference is B<true>);
in list context, returns the first occurrence of the matching part.
If C<$substring> does not match any part of C<$string>,
returns C<undef> in scalar context and
an empty list in list context.
e.g.
if ($match_ref = $Collator->match($str, $sub)) { # scalar context
print "matches [$$match_ref].\n";
} else {
print "doesn't match.\n";
}
or
if (($match) = $Collator->match($str, $sub)) { # list context
print "matches [$match].\n";
} else {
print "doesn't match.\n";
}
=item C<@match = $Collator-E<gt>gmatch($string, $substring)>
If C<$substring> matches a part of C<$string>, returns
all the matching parts (or matching count in scalar context).
If C<$substring> does not match any part of C<$string>,
returns an empty list.
=item C<$count = $Collator-E<gt>subst($string, $substring, $replacement)>
If C<$substring> matches a part of C<$string>,
the first occurrence of the matching part is replaced by C<$replacement>
(C<$string> is modified) and C<$count> (always equals to C<1>) is returned.
C<$replacement> can be a C<CODEREF>,
taking the matching part as an argument,
and returning a string to replace the matching part
(a bit similar to C<s/(..)/$coderef-E<gt>($1)/e>).
=item C<$count = $Collator-E<gt>gsubst($string, $substring, $replacement)>
If C<$substring> matches a part of C<$string>,
all the occurrences of the matching part are replaced by C<$replacement>
(C<$string> is modified) and C<$count> is returned.
C<$replacement> can be a C<CODEREF>,
taking the matching part as an argument,
and returning a string to replace the matching part
(a bit similar to C<s/(..)/$coderef-E<gt>($1)/eg>).
e.g.
my $Collator = Unicode::Collate->new( normalization => undef, level => 1 );
# (normalization => undef) is REQUIRED.
my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
$Collator->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
# now $str is "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>...";
# i.e., all the camels are made bold-faced.
Examples: levels and ignore_level2 - what does camel match?
---------------------------------------------------------------------------
level ignore_level2 | camel Camel came\x{301}l c-a-m-e-l cam\0e\0l
-----------------------|---------------------------------------------------
1 false | yes yes yes yes yes
2 false | yes yes no yes yes
3 false | yes no no yes yes
4 false | yes no no no yes
-----------------------|---------------------------------------------------
1 true | yes yes yes yes yes
2 true | yes yes yes yes yes
3 true | yes no yes yes yes
4 true | yes no yes no yes
---------------------------------------------------------------------------
note: if variable => non-ignorable, camel doesn't match c-a-m-e-l
at any level.
=back
=head2 Other Methods
=over 4
=item C<%old_tailoring = $Collator-E<gt>change(%new_tailoring)>
=item C<$modified_collator = $Collator-E<gt>change(%new_tailoring)>
Changes the value of specified keys and returns the changed part.
$Collator = Unicode::Collate->new(level => 4);
$Collator->eq("perl", "PERL"); # false
%old = $Collator->change(level => 2); # returns (level => 4).
$Collator->eq("perl", "PERL"); # true
$Collator->change(%old); # returns (level => 2).
$Collator->eq("perl", "PERL"); # false
Not all C<(key,value)>s are allowed to be changed.
See also C<@Unicode::Collate::ChangeOK> and C<@Unicode::Collate::ChangeNG>.
In the scalar context, returns the modified collator
(but it is B<not> a clone from the original).
$Collator->change(level => 2)->eq("perl", "PERL"); # true
$Collator->eq("perl", "PERL"); # true; now max level is 2nd.
$Collator->change(level => 4)->eq("perl", "PERL"); # false
=item C<$version = $Collator-E<gt>version()>
Returns the version number (a string) of the Unicode Standard
which the C<table> file used by the collator object is based on.
If the table does not include a version line (starting with C<@version>),
returns C<"unknown">.
=item C<UCA_Version()>
Returns the revision number of UTS #10 this module consults,
that should correspond with the DUCET incorporated.
=item C<Base_Unicode_Version()>
Returns the version number of UTS #10 this module consults,
that should correspond with the DUCET incorporated.
=back
=head1 EXPORT
No method will be exported.
=head1 INSTALL
Though this module can be used without any C<table> file,
to use this module easily, it is recommended to install a table file
in the UCA format, by copying it under the directory
<a place in @INC>/Unicode/Collate.
The most preferable one is "The Default Unicode Collation Element Table"
(aka DUCET), available from the Unicode Consortium's website:
http://www.unicode.org/Public/UCA/
http://www.unicode.org/Public/UCA/latest/allkeys.txt
(latest version)
If DUCET is not installed, it is recommended to copy the file
from http://www.unicode.org/Public/UCA/latest/allkeys.txt
to <a place in @INC>/Unicode/Collate/allkeys.txt
manually.
=head1 CAVEATS
=over 4
=item Normalization
Use of the C<normalization> parameter requires the B<Unicode::Normalize>
module (see L<Unicode::Normalize>).
If you need not it (say, in the case when you need not
handle any combining characters),
assign C<(normalization =E<gt> undef)> explicitly.
-- see 6.5 Avoiding Normalization, UTS #10.
=item Conformance Test
The Conformance Test for the UCA is available
under L<http://www.unicode.org/Public/UCA/>.
For F<CollationTest_SHIFTED.txt>,
a collator via C<Unicode::Collate-E<gt>new( )> should be used;
for F<CollationTest_NON_IGNORABLE.txt>, a collator via
C<Unicode::Collate-E<gt>new(variable =E<gt> "non-ignorable", level =E<gt> 3)>.
If C<UCA_Version> is 26 or later, the C<identical> level is preferred;
C<Unicode::Collate-E<gt>new(identical =E<gt> 1)> and
C<Unicode::Collate-E<gt>new(identical =E<gt> 1,>
C<variable =E<gt> "non-ignorable", level =E<gt> 3)> should be used.
B<Unicode::Normalize is required to try The Conformance Test.>
=back
=head1 AUTHOR, COPYRIGHT AND LICENSE
The Unicode::Collate module for perl was written by SADAHIRO Tomoyuki,
<SADAHIRO@cpan.org>. This module is Copyright(C) 2001-2017,
SADAHIRO Tomoyuki. Japan. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
The file Unicode/Collate/allkeys.txt was copied verbatim
from L<http://www.unicode.org/Public/UCA/9.0.0/allkeys.txt>.
For this file, Copyright (c) 2016 Unicode, Inc.; distributed
under the Terms of Use in L<http://www.unicode.org/terms_of_use.html>
=head1 SEE ALSO
=over 4
=item Unicode Collation Algorithm - UTS #10
L<http://www.unicode.org/reports/tr10/>
=item The Default Unicode Collation Element Table (DUCET)
L<http://www.unicode.org/Public/UCA/latest/allkeys.txt>
=item The conformance test for the UCA
L<http://www.unicode.org/Public/UCA/latest/CollationTest.html>
L<http://www.unicode.org/Public/UCA/latest/CollationTest.zip>
=item Hangul Syllable Type
L<http://www.unicode.org/Public/UNIDATA/HangulSyllableType.txt>
=item Unicode Normalization Forms - UAX #15
L<http://www.unicode.org/reports/tr15/>
=item Unicode Locale Data Markup Language (LDML) - UTS #35
L<http://www.unicode.org/reports/tr35/>
=back
=cut
version.pm 0000644 00000006735 15033552504 0006604 0 ustar 00 #!perl -w
package version;
use 5.006002;
use strict;
use warnings::register;
if ($] >= 5.015) {
warnings::register_categories(qw/version/);
}
our $VERSION = 0.9924;
our $CLASS = 'version';
our (@ISA, $STRICT, $LAX);
# !!!!Delete this next block completely when adding to Perl core!!!!
{
local $SIG{'__DIE__'};
eval "use version::vxs $VERSION";
if ( $@ ) { # don't have the XS version installed
eval "use version::vpp $VERSION"; # don't tempt fate
die "$@" if ( $@ );
push @ISA, "version::vpp";
local $^W;
*version::qv = \&version::vpp::qv;
*version::declare = \&version::vpp::declare;
*version::_VERSION = \&version::vpp::_VERSION;
*version::vcmp = \&version::vpp::vcmp;
*version::new = \&version::vpp::new;
*version::numify = \&version::vpp::numify;
*version::normal = \&version::vpp::normal;
if ($] >= 5.009000) {
no strict 'refs';
*version::stringify = \&version::vpp::stringify;
*{'version::(""'} = \&version::vpp::stringify;
*{'version::(<=>'} = \&version::vpp::vcmp;
*{'version::(cmp'} = \&version::vpp::vcmp;
*version::parse = \&version::vpp::parse;
}
}
else { # use XS module
push @ISA, "version::vxs";
local $^W;
*version::declare = \&version::vxs::declare;
*version::qv = \&version::vxs::qv;
*version::_VERSION = \&version::vxs::_VERSION;
*version::vcmp = \&version::vxs::VCMP;
*version::new = \&version::vxs::new;
*version::numify = \&version::vxs::numify;
*version::normal = \&version::vxs::normal;
if ($] >= 5.009000) {
no strict 'refs';
*version::stringify = \&version::vxs::stringify;
*{'version::(""'} = \&version::vxs::stringify;
*{'version::(<=>'} = \&version::vxs::VCMP;
*{'version::(cmp'} = \&version::vxs::VCMP;
*version::parse = \&version::vxs::parse;
}
}
}
# avoid using Exporter
require version::regex;
*version::is_lax = \&version::regex::is_lax;
*version::is_strict = \&version::regex::is_strict;
*LAX = \$version::regex::LAX;
*LAX_DECIMAL_VERSION = \$version::regex::LAX_DECIMAL_VERSION;
*LAX_DOTTED_DECIMAL_VERSION = \$version::regex::LAX_DOTTED_DECIMAL_VERSION;
*STRICT = \$version::regex::STRICT;
*STRICT_DECIMAL_VERSION = \$version::regex::STRICT_DECIMAL_VERSION;
*STRICT_DOTTED_DECIMAL_VERSION = \$version::regex::STRICT_DOTTED_DECIMAL_VERSION;
sub import {
no strict 'refs';
my ($class) = shift;
# Set up any derived class
unless ($class eq $CLASS) {
local $^W;
*{$class.'::declare'} = \&{$CLASS.'::declare'};
*{$class.'::qv'} = \&{$CLASS.'::qv'};
}
my %args;
if (@_) { # any remaining terms are arguments
map { $args{$_} = 1 } @_
}
else { # no parameters at all on use line
%args =
(
qv => 1,
'UNIVERSAL::VERSION' => 1,
);
}
my $callpkg = caller();
if (exists($args{declare})) {
*{$callpkg.'::declare'} =
sub {return $class->declare(shift) }
unless defined(&{$callpkg.'::declare'});
}
if (exists($args{qv})) {
*{$callpkg.'::qv'} =
sub {return $class->qv(shift) }
unless defined(&{$callpkg.'::qv'});
}
if (exists($args{'UNIVERSAL::VERSION'})) {
local $^W;
*UNIVERSAL::VERSION
= \&{$CLASS.'::_VERSION'};
}
if (exists($args{'VERSION'})) {
*{$callpkg.'::VERSION'} = \&{$CLASS.'::_VERSION'};
}
if (exists($args{'is_strict'})) {
*{$callpkg.'::is_strict'} = \&{$CLASS.'::is_strict'}
unless defined(&{$callpkg.'::is_strict'});
}
if (exists($args{'is_lax'})) {
*{$callpkg.'::is_lax'} = \&{$CLASS.'::is_lax'}
unless defined(&{$callpkg.'::is_lax'});
}
}
1;
Sub/Util.pm 0000644 00000010642 15033552504 0006555 0 ustar 00 # Copyright (c) 2014 Paul Evans <leonerd@leonerd.org.uk>. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
package Sub::Util;
use strict;
use warnings;
require Exporter;
our @ISA = qw( Exporter );
our @EXPORT_OK = qw(
prototype set_prototype
subname set_subname
);
our $VERSION = "1.49";
$VERSION = eval $VERSION;
require List::Util; # as it has the XS
List::Util->VERSION( $VERSION ); # Ensure we got the right XS version (RT#100863)
=head1 NAME
Sub::Util - A selection of utility subroutines for subs and CODE references
=head1 SYNOPSIS
use Sub::Util qw( prototype set_prototype subname set_subname );
=head1 DESCRIPTION
C<Sub::Util> contains a selection of utility subroutines that are useful for
operating on subs and CODE references.
The rationale for inclusion in this module is that the function performs some
work for which an XS implementation is essential because it cannot be
implemented in Pure Perl, and which is sufficiently-widely used across CPAN
that its popularity warrants inclusion in a core module, which this is.
=cut
=head1 FUNCTIONS
=cut
=head2 prototype
my $proto = prototype( $code )
I<Since version 1.40.>
Returns the prototype of the given C<$code> reference, if it has one, as a
string. This is the same as the C<CORE::prototype> operator; it is included
here simply for symmetry and completeness with the other functions.
=cut
sub prototype
{
my ( $code ) = @_;
return CORE::prototype( $code );
}
=head2 set_prototype
my $code = set_prototype $prototype, $code;
I<Since version 1.40.>
Sets the prototype of the function given by the C<$code> reference, or deletes
it if C<$prototype> is C<undef>. Returns the C<$code> reference itself.
I<Caution>: This function takes arguments in a different order to the previous
copy of the code from C<Scalar::Util>. This is to match the order of
C<set_subname>, and other potential additions in this file. This order has
been chosen as it allows a neat and simple chaining of other
C<Sub::Util::set_*> functions as might become available, such as:
my $code =
set_subname name_here =>
set_prototype '&@' =>
set_attribute ':lvalue' =>
sub { ...... };
=cut
=head2 subname
my $name = subname( $code )
I<Since version 1.40.>
Returns the name of the given C<$code> reference, if it has one. Normal named
subs will give a fully-qualified name consisting of the package and the
localname separated by C<::>. Anonymous code references will give C<__ANON__>
as the localname. If a name has been set using L</set_subname>, this name will
be returned instead.
This function was inspired by C<sub_fullname> from L<Sub::Identify>. The
remaining functions that C<Sub::Identify> implements can easily be emulated
using regexp operations, such as
sub get_code_info { return (subname $_[0]) =~ m/^(.+)::(.+?)$/ }
sub sub_name { return (get_code_info $_[0])[0] }
sub stash_name { return (get_code_info $_[0])[1] }
I<Users of Sub::Name beware>: This function is B<not> the same as
C<Sub::Name::subname>; it returns the existing name of the sub rather than
changing it. To set or change a name, see instead L</set_subname>.
=cut
=head2 set_subname
my $code = set_subname $name, $code;
I<Since version 1.40.>
Sets the name of the function given by the C<$code> reference. Returns the
C<$code> reference itself. If the C<$name> is unqualified, the package of the
caller is used to qualify it.
This is useful for applying names to anonymous CODE references so that stack
traces and similar situations, to give a useful name rather than having the
default of C<__ANON__>. Note that this name is only used for this situation;
the C<set_subname> will not install it into the symbol table; you will have to
do that yourself if required.
However, since the name is not used by perl except as the return value of
C<caller>, for stack traces or similar, there is no actual requirement that
the name be syntactically valid as a perl function name. This could be used to
attach extra information that could be useful in debugging stack traces.
This function was copied from C<Sub::Name::subname> and renamed to the naming
convention of this module.
=cut
=head1 AUTHOR
The general structure of this module was written by Paul Evans
<leonerd@leonerd.org.uk>.
The XS implementation of L</set_subname> was copied from L<Sub::Name> by
Matthijs van Duin <xmath@cpan.org>
=cut
1;
Params/Util.pm 0000644 00000053547 15033552504 0007262 0 ustar 00 package Params::Util;
=pod
=head1 NAME
Params::Util - Simple, compact and correct param-checking functions
=head1 SYNOPSIS
# Import some functions
use Params::Util qw{_SCALAR _HASH _INSTANCE};
# If you are lazy, or need a lot of them...
use Params::Util ':ALL';
sub foo {
my $object = _INSTANCE(shift, 'Foo') or return undef;
my $image = _SCALAR(shift) or return undef;
my $options = _HASH(shift) or return undef;
# etc...
}
=head1 DESCRIPTION
C<Params::Util> provides a basic set of importable functions that makes
checking parameters a hell of a lot easier
While they can be (and are) used in other contexts, the main point
behind this module is that the functions B<both> Do What You Mean,
and Do The Right Thing, so they are most useful when you are getting
params passed into your code from someone and/or somewhere else
and you can't really trust the quality.
Thus, C<Params::Util> is of most use at the edges of your API, where
params and data are coming in from outside your code.
The functions provided by C<Params::Util> check in the most strictly
correct manner known, are documented as thoroughly as possible so their
exact behaviour is clear, and heavily tested so make sure they are not
fooled by weird data and Really Bad Things.
To use, simply load the module providing the functions you want to use
as arguments (as shown in the SYNOPSIS).
To aid in maintainability, C<Params::Util> will B<never> export by
default.
You must explicitly name the functions you want to export, or use the
C<:ALL> param to just have it export everything (although this is not
recommended if you have any _FOO functions yourself with which future
additions to C<Params::Util> may clash)
=head1 FUNCTIONS
=cut
use 5.00503;
use strict;
require overload;
require Exporter;
require Scalar::Util;
require DynaLoader;
use vars qw{$VERSION @ISA @EXPORT_OK %EXPORT_TAGS};
$VERSION = '1.07';
@ISA = qw{
Exporter
DynaLoader
};
@EXPORT_OK = qw{
_STRING _IDENTIFIER
_CLASS _CLASSISA _SUBCLASS _DRIVER _CLASSDOES
_NUMBER _POSINT _NONNEGINT
_SCALAR _SCALAR0
_ARRAY _ARRAY0 _ARRAYLIKE
_HASH _HASH0 _HASHLIKE
_CODE _CODELIKE
_INVOCANT _REGEX _INSTANCE _INSTANCEDOES
_SET _SET0
_HANDLE
};
%EXPORT_TAGS = ( ALL => \@EXPORT_OK );
eval {
local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY};
bootstrap Params::Util $VERSION;
1;
} unless $ENV{PERL_PARAMS_UTIL_PP};
# Use a private pure-perl copy of looks_like_number if the version of
# Scalar::Util is old (for whatever reason).
my $SU = eval "$Scalar::Util::VERSION" || 0;
if ( $SU >= 1.18 ) {
Scalar::Util->import('looks_like_number');
} else {
eval <<'END_PERL';
sub looks_like_number {
local $_ = shift;
# checks from perlfaq4
return 0 if !defined($_);
if (ref($_)) {
return overload::Overloaded($_) ? defined(0 + $_) : 0;
}
return 1 if (/^[+-]?[0-9]+$/); # is a +/- integer
return 1 if (/^([+-]?)(?=[0-9]|\.[0-9])[0-9]*(\.[0-9]*)?([Ee]([+-]?[0-9]+))?$/); # a C float
return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) or ($] >= 5.006001 and /^Inf$/i);
0;
}
END_PERL
}
#####################################################################
# Param Checking Functions
=pod
=head2 _STRING $string
The C<_STRING> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a normal non-false string of non-zero length.
Note that this will NOT do anything magic to deal with the special
C<'0'> false negative case, but will return it.
# '0' not considered valid data
my $name = _STRING(shift) or die "Bad name";
# '0' is considered valid data
my $string = _STRING($_[0]) ? shift : die "Bad string";
Please also note that this function expects a normal string. It does
not support overloading or other magic techniques to get a string.
Returns the string as a conveince if it is a valid string, or
C<undef> if not.
=cut
eval <<'END_PERL' unless defined &_STRING;
sub _STRING ($) {
(defined $_[0] and ! ref $_[0] and length($_[0])) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _IDENTIFIER $string
The C<_IDENTIFIER> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a string that is a valid Perl identifier.
Returns the string as a convenience if it is a valid identifier, or
C<undef> if not.
=cut
eval <<'END_PERL' unless defined &_IDENTIFIER;
sub _IDENTIFIER ($) {
(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*\z/s) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _CLASS $string
The C<_CLASS> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a string that is a valid Perl class.
This function only checks that the format is valid, not that the
class is actually loaded. It also assumes "normalised" form, and does
not accept class names such as C<::Foo> or C<D'Oh>.
Returns the string as a convenience if it is a valid class name, or
C<undef> if not.
=cut
eval <<'END_PERL' unless defined &_CLASS;
sub _CLASS ($) {
(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _CLASSISA $string, $class
The C<_CLASSISA> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a string that is a particularly class, or a subclass of it.
This function checks that the format is valid and calls the -E<gt>isa
method on the class name. It does not check that the class is actually
loaded.
It also assumes "normalised" form, and does
not accept class names such as C<::Foo> or C<D'Oh>.
Returns the string as a convenience if it is a valid class name, or
C<undef> if not.
=cut
eval <<'END_PERL' unless defined &_CLASSISA;
sub _CLASSISA ($$) {
(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0]->isa($_[1])) ? $_[0] : undef;
}
END_PERL
=head2 _CLASSDOES $string, $role
This routine behaves exactly like C<L</_CLASSISA>>, but checks with C<< ->DOES
>> rather than C<< ->isa >>. This is probably only a good idea to use on Perl
5.10 or later, when L<UNIVERSAL::DOES|UNIVERSAL::DOES/DOES> has been
implemented.
=cut
eval <<'END_PERL' unless defined &_CLASSDOES;
sub _CLASSDOES ($$) {
(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0]->DOES($_[1])) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _SUBCLASS $string, $class
The C<_SUBCLASS> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a string that is a subclass of a specified class.
This function checks that the format is valid and calls the -E<gt>isa
method on the class name. It does not check that the class is actually
loaded.
It also assumes "normalised" form, and does
not accept class names such as C<::Foo> or C<D'Oh>.
Returns the string as a convenience if it is a valid class name, or
C<undef> if not.
=cut
eval <<'END_PERL' unless defined &_SUBCLASS;
sub _SUBCLASS ($$) {
(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0] ne $_[1] and $_[0]->isa($_[1])) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _NUMBER $scalar
The C<_NUMBER> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a number. That is, it is defined and perl thinks it's a number.
This function is basically a Params::Util-style wrapper around the
L<Scalar::Util> C<looks_like_number> function.
Returns the value as a convience, or C<undef> if the value is not a
number.
=cut
eval <<'END_PERL' unless defined &_NUMBER;
sub _NUMBER ($) {
( defined $_[0] and ! ref $_[0] and looks_like_number($_[0]) )
? $_[0]
: undef;
}
END_PERL
=pod
=head2 _POSINT $integer
The C<_POSINT> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a positive integer (of any length).
Returns the value as a convience, or C<undef> if the value is not a
positive integer.
The name itself is derived from the XML schema constraint of the same
name.
=cut
eval <<'END_PERL' unless defined &_POSINT;
sub _POSINT ($) {
(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[1-9]\d*$/) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _NONNEGINT $integer
The C<_NONNEGINT> function is intended to be imported into your
package, and provides a convenient way to test to see if a value is
a non-negative integer (of any length). That is, a positive integer,
or zero.
Returns the value as a convience, or C<undef> if the value is not a
non-negative integer.
As with other tests that may return false values, care should be taken
to test via "defined" in boolean validy contexts.
unless ( defined _NONNEGINT($value) ) {
die "Invalid value";
}
The name itself is derived from the XML schema constraint of the same
name.
=cut
eval <<'END_PERL' unless defined &_NONNEGINT;
sub _NONNEGINT ($) {
(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^(?:0|[1-9]\d*)$/) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _SCALAR \$scalar
The C<_SCALAR> function is intended to be imported into your package,
and provides a convenient way to test for a raw and unblessed
C<SCALAR> reference, with content of non-zero length.
For a version that allows zero length C<SCALAR> references, see
the C<_SCALAR0> function.
Returns the C<SCALAR> reference itself as a convenience, or C<undef>
if the value provided is not a C<SCALAR> reference.
=cut
eval <<'END_PERL' unless defined &_SCALAR;
sub _SCALAR ($) {
(ref $_[0] eq 'SCALAR' and defined ${$_[0]} and ${$_[0]} ne '') ? $_[0] : undef;
}
END_PERL
=pod
=head2 _SCALAR0 \$scalar
The C<_SCALAR0> function is intended to be imported into your package,
and provides a convenient way to test for a raw and unblessed
C<SCALAR0> reference, allowing content of zero-length.
For a simpler "give me some content" version that requires non-zero
length, C<_SCALAR> function.
Returns the C<SCALAR> reference itself as a convenience, or C<undef>
if the value provided is not a C<SCALAR> reference.
=cut
eval <<'END_PERL' unless defined &_SCALAR0;
sub _SCALAR0 ($) {
ref $_[0] eq 'SCALAR' ? $_[0] : undef;
}
END_PERL
=pod
=head2 _ARRAY $value
The C<_ARRAY> function is intended to be imported into your package,
and provides a convenient way to test for a raw and unblessed
C<ARRAY> reference containing B<at least> one element of any kind.
For a more basic form that allows zero length ARRAY references, see
the C<_ARRAY0> function.
Returns the C<ARRAY> reference itself as a convenience, or C<undef>
if the value provided is not an C<ARRAY> reference.
=cut
eval <<'END_PERL' unless defined &_ARRAY;
sub _ARRAY ($) {
(ref $_[0] eq 'ARRAY' and @{$_[0]}) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _ARRAY0 $value
The C<_ARRAY0> function is intended to be imported into your package,
and provides a convenient way to test for a raw and unblessed
C<ARRAY> reference, allowing C<ARRAY> references that contain no
elements.
For a more basic "An array of something" form that also requires at
least one element, see the C<_ARRAY> function.
Returns the C<ARRAY> reference itself as a convenience, or C<undef>
if the value provided is not an C<ARRAY> reference.
=cut
eval <<'END_PERL' unless defined &_ARRAY0;
sub _ARRAY0 ($) {
ref $_[0] eq 'ARRAY' ? $_[0] : undef;
}
END_PERL
=pod
=head2 _ARRAYLIKE $value
The C<_ARRAYLIKE> function tests whether a given scalar value can respond to
array dereferencing. If it can, the value is returned. If it cannot,
C<_ARRAYLIKE> returns C<undef>.
=cut
eval <<'END_PERL' unless defined &_ARRAYLIKE;
sub _ARRAYLIKE {
(defined $_[0] and ref $_[0] and (
(Scalar::Util::reftype($_[0]) eq 'ARRAY')
or
overload::Method($_[0], '@{}')
)) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _HASH $value
The C<_HASH> function is intended to be imported into your package,
and provides a convenient way to test for a raw and unblessed
C<HASH> reference with at least one entry.
For a version of this function that allows the C<HASH> to be empty,
see the C<_HASH0> function.
Returns the C<HASH> reference itself as a convenience, or C<undef>
if the value provided is not an C<HASH> reference.
=cut
eval <<'END_PERL' unless defined &_HASH;
sub _HASH ($) {
(ref $_[0] eq 'HASH' and scalar %{$_[0]}) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _HASH0 $value
The C<_HASH0> function is intended to be imported into your package,
and provides a convenient way to test for a raw and unblessed
C<HASH> reference, regardless of the C<HASH> content.
For a simpler "A hash of something" version that requires at least one
element, see the C<_HASH> function.
Returns the C<HASH> reference itself as a convenience, or C<undef>
if the value provided is not an C<HASH> reference.
=cut
eval <<'END_PERL' unless defined &_HASH0;
sub _HASH0 ($) {
ref $_[0] eq 'HASH' ? $_[0] : undef;
}
END_PERL
=pod
=head2 _HASHLIKE $value
The C<_HASHLIKE> function tests whether a given scalar value can respond to
hash dereferencing. If it can, the value is returned. If it cannot,
C<_HASHLIKE> returns C<undef>.
=cut
eval <<'END_PERL' unless defined &_HASHLIKE;
sub _HASHLIKE {
(defined $_[0] and ref $_[0] and (
(Scalar::Util::reftype($_[0]) eq 'HASH')
or
overload::Method($_[0], '%{}')
)) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _CODE $value
The C<_CODE> function is intended to be imported into your package,
and provides a convenient way to test for a raw and unblessed
C<CODE> reference.
Returns the C<CODE> reference itself as a convenience, or C<undef>
if the value provided is not an C<CODE> reference.
=cut
eval <<'END_PERL' unless defined &_CODE;
sub _CODE ($) {
ref $_[0] eq 'CODE' ? $_[0] : undef;
}
END_PERL
=pod
=head2 _CODELIKE $value
The C<_CODELIKE> is the more generic version of C<_CODE>. Unlike C<_CODE>,
which checks for an explicit C<CODE> reference, the C<_CODELIKE> function
also includes things that act like them, such as blessed objects that
overload C<'&{}'>.
Please note that in the case of objects overloaded with '&{}', you will
almost always end up also testing it in 'bool' context at some stage.
For example:
sub foo {
my $code1 = _CODELIKE(shift) or die "No code param provided";
my $code2 = _CODELIKE(shift);
if ( $code2 ) {
print "Got optional second code param";
}
}
As such, you will most likely always want to make sure your class has
at least the following to allow it to evaluate to true in boolean
context.
# Always evaluate to true in boolean context
use overload 'bool' => sub () { 1 };
Returns the callable value as a convenience, or C<undef> if the
value provided is not callable.
Note - This function was formerly known as _CALLABLE but has been renamed
for greater symmetry with the other _XXXXLIKE functions.
The use of _CALLABLE has been deprecated. It will continue to work, but
with a warning, until end-2006, then will be removed.
I apologise for any inconvenience caused.
=cut
eval <<'END_PERL' unless defined &_CODELIKE;
sub _CODELIKE($) {
(
(Scalar::Util::reftype($_[0])||'') eq 'CODE'
or
Scalar::Util::blessed($_[0]) and overload::Method($_[0],'&{}')
)
? $_[0] : undef;
}
END_PERL
=pod
=head2 _INVOCANT $value
This routine tests whether the given value is a valid method invocant.
This can be either an instance of an object, or a class name.
If so, the value itself is returned. Otherwise, C<_INVOCANT>
returns C<undef>.
=cut
eval <<'END_PERL' unless defined &_INVOCANT;
sub _INVOCANT($) {
(defined $_[0] and
(defined Scalar::Util::blessed($_[0])
or
# We used to check for stash definedness, but any class-like name is a
# valid invocant for UNIVERSAL methods, so we stopped. -- rjbs, 2006-07-02
Params::Util::_CLASS($_[0]))
) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _INSTANCE $object, $class
The C<_INSTANCE> function is intended to be imported into your package,
and provides a convenient way to test for an object of a particular class
in a strictly correct manner.
Returns the object itself as a convenience, or C<undef> if the value
provided is not an object of that type.
=cut
eval <<'END_PERL' unless defined &_INSTANCE;
sub _INSTANCE ($$) {
(Scalar::Util::blessed($_[0]) and $_[0]->isa($_[1])) ? $_[0] : undef;
}
END_PERL
=head2 _INSTANCEDOES $object, $role
This routine behaves exactly like C<L</_INSTANCE>>, but checks with C<< ->DOES
>> rather than C<< ->isa >>. This is probably only a good idea to use on Perl
5.10 or later, when L<UNIVERSAL::DOES|UNIVERSAL::DOES/DOES> has been
implemented.
=cut
eval <<'END_PERL' unless defined &_INSTANCEDOES;
sub _INSTANCEDOES ($$) {
(Scalar::Util::blessed($_[0]) and $_[0]->DOES($_[1])) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _REGEX $value
The C<_REGEX> function is intended to be imported into your package,
and provides a convenient way to test for a regular expression.
Returns the value itself as a convenience, or C<undef> if the value
provided is not a regular expression.
=cut
eval <<'END_PERL' unless defined &_REGEX;
sub _REGEX ($) {
(defined $_[0] and 'Regexp' eq ref($_[0])) ? $_[0] : undef;
}
END_PERL
=pod
=head2 _SET \@array, $class
The C<_SET> function is intended to be imported into your package,
and provides a convenient way to test for set of at least one object of
a particular class in a strictly correct manner.
The set is provided as a reference to an C<ARRAY> of objects of the
class provided.
For an alternative function that allows zero-length sets, see the
C<_SET0> function.
Returns the C<ARRAY> reference itself as a convenience, or C<undef> if
the value provided is not a set of that class.
=cut
eval <<'END_PERL' unless defined &_SET;
sub _SET ($$) {
my $set = shift;
_ARRAY($set) or return undef;
foreach my $item ( @$set ) {
_INSTANCE($item,$_[0]) or return undef;
}
$set;
}
END_PERL
=pod
=head2 _SET0 \@array, $class
The C<_SET0> function is intended to be imported into your package,
and provides a convenient way to test for a set of objects of a
particular class in a strictly correct manner, allowing for zero objects.
The set is provided as a reference to an C<ARRAY> of objects of the
class provided.
For an alternative function that requires at least one object, see the
C<_SET> function.
Returns the C<ARRAY> reference itself as a convenience, or C<undef> if
the value provided is not a set of that class.
=cut
eval <<'END_PERL' unless defined &_SET0;
sub _SET0 ($$) {
my $set = shift;
_ARRAY0($set) or return undef;
foreach my $item ( @$set ) {
_INSTANCE($item,$_[0]) or return undef;
}
$set;
}
END_PERL
=pod
=head2 _HANDLE
The C<_HANDLE> function is intended to be imported into your package,
and provides a convenient way to test whether or not a single scalar
value is a file handle.
Unfortunately, in Perl the definition of a file handle can be a little
bit fuzzy, so this function is likely to be somewhat imperfect (at first
anyway).
That said, it is implement as well or better than the other file handle
detectors in existance (and we stole from the best of them).
=cut
# We're doing this longhand for now. Once everything is perfect,
# we'll compress this into something that compiles more efficiently.
# Further, testing file handles is not something that is generally
# done millions of times, so doing it slowly is not a big speed hit.
eval <<'END_PERL' unless defined &_HANDLE;
sub _HANDLE {
my $it = shift;
# It has to be defined, of course
unless ( defined $it ) {
return undef;
}
# Normal globs are considered to be file handles
if ( ref $it eq 'GLOB' ) {
return $it;
}
# Check for a normal tied filehandle
# Side Note: 5.5.4's tied() and can() doesn't like getting undef
if ( tied($it) and tied($it)->can('TIEHANDLE') ) {
return $it;
}
# There are no other non-object handles that we support
unless ( Scalar::Util::blessed($it) ) {
return undef;
}
# Check for a common base classes for conventional IO::Handle object
if ( $it->isa('IO::Handle') ) {
return $it;
}
# Check for tied file handles using Tie::Handle
if ( $it->isa('Tie::Handle') ) {
return $it;
}
# IO::Scalar is not a proper seekable, but it is valid is a
# regular file handle
if ( $it->isa('IO::Scalar') ) {
return $it;
}
# Yet another special case for IO::String, which refuses (for now
# anyway) to become a subclass of IO::Handle.
if ( $it->isa('IO::String') ) {
return $it;
}
# This is not any sort of object we know about
return undef;
}
END_PERL
=pod
=head2 _DRIVER $string
sub foo {
my $class = _DRIVER(shift, 'My::Driver::Base') or die "Bad driver";
...
}
The C<_DRIVER> function is intended to be imported into your
package, and provides a convenient way to load and validate
a driver class.
The most common pattern when taking a driver class as a parameter
is to check that the name is a class (i.e. check against _CLASS)
and then to load the class (if it exists) and then ensure that
the class returns true for the isa method on some base driver name.
Return the value as a convenience, or C<undef> if the value is not
a class name, the module does not exist, the module does not load,
or the class fails the isa test.
=cut
eval <<'END_PERL' unless defined &_DRIVER;
sub _DRIVER ($$) {
(defined _CLASS($_[0]) and eval "require $_[0];" and ! $@ and $_[0]->isa($_[1]) and $_[0] ne $_[1]) ? $_[0] : undef;
}
END_PERL
1;
=pod
=head1 TO DO
- Add _CAN to help resolve the UNIVERSAL::can debacle
- Would be even nicer if someone would demonstrate how the hell to
build a Module::Install dist of the ::Util dual Perl/XS type. :/
- Implement an assertion-like version of this module, that dies on
error.
- Implement a Test:: version of this module, for use in testing
=head1 SUPPORT
Bugs should be reported via the CPAN bug tracker at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Params-Util>
For other issues, contact the author.
=head1 AUTHOR
Adam Kennedy E<lt>adamk@cpan.orgE<gt>
=head1 SEE ALSO
L<Params::Validate>
=head1 COPYRIGHT
Copyright 2005 - 2012 Adam Kennedy.
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the
LICENSE file included with this module.
=cut
DB_File.pm 0000644 00000177124 15033552504 0006344 0 ustar 00 # DB_File.pm -- Perl 5 interface to Berkeley DB
#
# Written by Paul Marquess (pmqs@cpan.org)
#
# Copyright (c) 1995-2018 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
package DB_File::HASHINFO ;
require 5.008003;
use warnings;
use strict;
use Carp;
require Tie::Hash;
@DB_File::HASHINFO::ISA = qw(Tie::Hash);
sub new
{
my $pkg = shift ;
my %x ;
tie %x, $pkg ;
bless \%x, $pkg ;
}
sub TIEHASH
{
my $pkg = shift ;
bless { VALID => {
bsize => 1,
ffactor => 1,
nelem => 1,
cachesize => 1,
hash => 2,
lorder => 1,
},
GOT => {}
}, $pkg ;
}
sub FETCH
{
my $self = shift ;
my $key = shift ;
return $self->{GOT}{$key} if exists $self->{VALID}{$key} ;
my $pkg = ref $self ;
croak "${pkg}::FETCH - Unknown element '$key'" ;
}
sub STORE
{
my $self = shift ;
my $key = shift ;
my $value = shift ;
my $type = $self->{VALID}{$key};
if ( $type )
{
croak "Key '$key' not associated with a code reference"
if $type == 2 && !ref $value && ref $value ne 'CODE';
$self->{GOT}{$key} = $value ;
return ;
}
my $pkg = ref $self ;
croak "${pkg}::STORE - Unknown element '$key'" ;
}
sub DELETE
{
my $self = shift ;
my $key = shift ;
if ( exists $self->{VALID}{$key} )
{
delete $self->{GOT}{$key} ;
return ;
}
my $pkg = ref $self ;
croak "DB_File::HASHINFO::DELETE - Unknown element '$key'" ;
}
sub EXISTS
{
my $self = shift ;
my $key = shift ;
exists $self->{VALID}{$key} ;
}
sub NotHere
{
my $self = shift ;
my $method = shift ;
croak ref($self) . " does not define the method ${method}" ;
}
sub FIRSTKEY { my $self = shift ; $self->NotHere("FIRSTKEY") }
sub NEXTKEY { my $self = shift ; $self->NotHere("NEXTKEY") }
sub CLEAR { my $self = shift ; $self->NotHere("CLEAR") }
package DB_File::RECNOINFO ;
use warnings;
use strict ;
@DB_File::RECNOINFO::ISA = qw(DB_File::HASHINFO) ;
sub TIEHASH
{
my $pkg = shift ;
bless { VALID => { map {$_, 1}
qw( bval cachesize psize flags lorder reclen bfname )
},
GOT => {},
}, $pkg ;
}
package DB_File::BTREEINFO ;
use warnings;
use strict ;
@DB_File::BTREEINFO::ISA = qw(DB_File::HASHINFO) ;
sub TIEHASH
{
my $pkg = shift ;
bless { VALID => {
flags => 1,
cachesize => 1,
maxkeypage => 1,
minkeypage => 1,
psize => 1,
compare => 2,
prefix => 2,
lorder => 1,
},
GOT => {},
}, $pkg ;
}
package DB_File ;
use warnings;
use strict;
our ($VERSION, @ISA, @EXPORT, $AUTOLOAD, $DB_BTREE, $DB_HASH, $DB_RECNO);
our ($db_version, $use_XSLoader, $splice_end_array_no_length, $splice_end_array, $Error);
use Carp;
# Module not thread safe, so don't clone
sub CLONE_SKIP { 1 }
$VERSION = "1.842" ;
$VERSION = eval $VERSION; # needed for dev releases
{
local $SIG{__WARN__} = sub {$splice_end_array_no_length = join(" ",@_);};
my @a =(1); splice(@a, 3);
$splice_end_array_no_length =
($splice_end_array_no_length =~ /^splice\(\) offset past end of array at /);
}
{
local $SIG{__WARN__} = sub {$splice_end_array = join(" ", @_);};
my @a =(1); splice(@a, 3, 1);
$splice_end_array =
($splice_end_array =~ /^splice\(\) offset past end of array at /);
}
#typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
$DB_BTREE = new DB_File::BTREEINFO ;
$DB_HASH = new DB_File::HASHINFO ;
$DB_RECNO = new DB_File::RECNOINFO ;
require Tie::Hash;
require Exporter;
BEGIN {
$use_XSLoader = 1 ;
{ local $SIG{__DIE__} ; eval { require XSLoader } ; }
if ($@) {
$use_XSLoader = 0 ;
require DynaLoader;
@ISA = qw(DynaLoader);
}
}
push @ISA, qw(Tie::Hash Exporter);
@EXPORT = qw(
$DB_BTREE $DB_HASH $DB_RECNO
BTREEMAGIC
BTREEVERSION
DB_LOCK
DB_SHMEM
DB_TXN
HASHMAGIC
HASHVERSION
MAX_PAGE_NUMBER
MAX_PAGE_OFFSET
MAX_REC_NUMBER
RET_ERROR
RET_SPECIAL
RET_SUCCESS
R_CURSOR
R_DUP
R_FIRST
R_FIXEDLEN
R_IAFTER
R_IBEFORE
R_LAST
R_NEXT
R_NOKEY
R_NOOVERWRITE
R_PREV
R_RECNOSYNC
R_SETCURSOR
R_SNAPSHOT
__R_UNUSED
);
sub AUTOLOAD {
my($constname);
($constname = $AUTOLOAD) =~ s/.*:://;
my ($error, $val) = constant($constname);
Carp::croak $error if $error;
no strict 'refs';
*{$AUTOLOAD} = sub { $val };
goto &{$AUTOLOAD};
}
eval {
# Make all Fcntl O_XXX constants available for importing
require Fcntl;
my @O = grep /^O_/, @Fcntl::EXPORT;
Fcntl->import(@O); # first we import what we want to export
push(@EXPORT, @O);
};
if ($use_XSLoader)
{ XSLoader::load("DB_File", $VERSION)}
else
{ bootstrap DB_File $VERSION }
sub tie_hash_or_array
{
my (@arg) = @_ ;
my $tieHASH = ( (caller(1))[3] =~ /TIEHASH/ ) ;
use File::Spec;
$arg[1] = File::Spec->rel2abs($arg[1])
if defined $arg[1] ;
$arg[4] = tied %{ $arg[4] }
if @arg >= 5 && ref $arg[4] && $arg[4] =~ /=HASH/ && tied %{ $arg[4] } ;
$arg[2] = O_CREAT()|O_RDWR() if @arg >=3 && ! defined $arg[2];
$arg[3] = 0666 if @arg >=4 && ! defined $arg[3];
# make recno in Berkeley DB version 2 (or better) work like
# recno in version 1.
if ($db_version >= 4 and ! $tieHASH) {
$arg[2] |= O_CREAT();
}
if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and
$arg[1] and ! -e $arg[1]) {
open(FH, ">$arg[1]") or return undef ;
close FH ;
chmod $arg[3] ? $arg[3] : 0666 , $arg[1] ;
}
DoTie_($tieHASH, @arg) ;
}
sub TIEHASH
{
tie_hash_or_array(@_) ;
}
sub TIEARRAY
{
tie_hash_or_array(@_) ;
}
sub CLEAR
{
my $self = shift;
my $key = 0 ;
my $value = "" ;
my $status = $self->seq($key, $value, R_FIRST());
my @keys;
while ($status == 0) {
push @keys, $key;
$status = $self->seq($key, $value, R_NEXT());
}
foreach $key (reverse @keys) {
my $s = $self->del($key);
}
}
sub EXTEND { }
sub STORESIZE
{
my $self = shift;
my $length = shift ;
my $current_length = $self->length() ;
if ($length < $current_length) {
my $key ;
for ($key = $current_length - 1 ; $key >= $length ; -- $key)
{ $self->del($key) }
}
elsif ($length > $current_length) {
$self->put($length-1, "") ;
}
}
sub SPLICE
{
my $self = shift;
my $offset = shift;
if (not defined $offset) {
warnings::warnif('uninitialized', 'Use of uninitialized value in splice');
$offset = 0;
}
my $has_length = @_;
my $length = @_ ? shift : 0;
# Carping about definedness comes _after_ the OFFSET sanity check.
# This is so we get the same error messages as Perl's splice().
#
my @list = @_;
my $size = $self->FETCHSIZE();
# 'If OFFSET is negative then it start that far from the end of
# the array.'
#
if ($offset < 0) {
my $new_offset = $size + $offset;
if ($new_offset < 0) {
die "Modification of non-creatable array value attempted, "
. "subscript $offset";
}
$offset = $new_offset;
}
if (not defined $length) {
warnings::warnif('uninitialized', 'Use of uninitialized value in splice');
$length = 0;
}
if ($offset > $size) {
$offset = $size;
warnings::warnif('misc', 'splice() offset past end of array')
if $has_length ? $splice_end_array : $splice_end_array_no_length;
}
# 'If LENGTH is omitted, removes everything from OFFSET onward.'
if (not defined $length) {
$length = $size - $offset;
}
# 'If LENGTH is negative, leave that many elements off the end of
# the array.'
#
if ($length < 0) {
$length = $size - $offset + $length;
if ($length < 0) {
# The user must have specified a length bigger than the
# length of the array passed in. But perl's splice()
# doesn't catch this, it just behaves as for length=0.
#
$length = 0;
}
}
if ($length > $size - $offset) {
$length = $size - $offset;
}
# $num_elems holds the current number of elements in the database.
my $num_elems = $size;
# 'Removes the elements designated by OFFSET and LENGTH from an
# array,'...
#
my @removed = ();
foreach (0 .. $length - 1) {
my $old;
my $status = $self->get($offset, $old);
if ($status != 0) {
my $msg = "error from Berkeley DB on get($offset, \$old)";
if ($status == 1) {
$msg .= ' (no such element?)';
}
else {
$msg .= ": error status $status";
if (defined $! and $! ne '') {
$msg .= ", message $!";
}
}
die $msg;
}
push @removed, $old;
$status = $self->del($offset);
if ($status != 0) {
my $msg = "error from Berkeley DB on del($offset)";
if ($status == 1) {
$msg .= ' (no such element?)';
}
else {
$msg .= ": error status $status";
if (defined $! and $! ne '') {
$msg .= ", message $!";
}
}
die $msg;
}
-- $num_elems;
}
# ...'and replaces them with the elements of LIST, if any.'
my $pos = $offset;
while (defined (my $elem = shift @list)) {
my $old_pos = $pos;
my $status;
if ($pos >= $num_elems) {
$status = $self->put($pos, $elem);
}
else {
$status = $self->put($pos, $elem, $self->R_IBEFORE);
}
if ($status != 0) {
my $msg = "error from Berkeley DB on put($pos, $elem, ...)";
if ($status == 1) {
$msg .= ' (no such element?)';
}
else {
$msg .= ", error status $status";
if (defined $! and $! ne '') {
$msg .= ", message $!";
}
}
die $msg;
}
die "pos unexpectedly changed from $old_pos to $pos with R_IBEFORE"
if $old_pos != $pos;
++ $pos;
++ $num_elems;
}
if (wantarray) {
# 'In list context, returns the elements removed from the
# array.'
#
return @removed;
}
elsif (defined wantarray and not wantarray) {
# 'In scalar context, returns the last element removed, or
# undef if no elements are removed.'
#
if (@removed) {
my $last = pop @removed;
return "$last";
}
else {
return undef;
}
}
elsif (not defined wantarray) {
# Void context
}
else { die }
}
sub ::DB_File::splice { &SPLICE }
sub find_dup
{
croak "Usage: \$db->find_dup(key,value)\n"
unless @_ == 3 ;
my $db = shift ;
my ($origkey, $value_wanted) = @_ ;
my ($key, $value) = ($origkey, 0);
my ($status) = 0 ;
for ($status = $db->seq($key, $value, R_CURSOR() ) ;
$status == 0 ;
$status = $db->seq($key, $value, R_NEXT() ) ) {
return 0 if $key eq $origkey and $value eq $value_wanted ;
}
return $status ;
}
sub del_dup
{
croak "Usage: \$db->del_dup(key,value)\n"
unless @_ == 3 ;
my $db = shift ;
my ($key, $value) = @_ ;
my ($status) = $db->find_dup($key, $value) ;
return $status if $status != 0 ;
$status = $db->del($key, R_CURSOR() ) ;
return $status ;
}
sub get_dup
{
croak "Usage: \$db->get_dup(key [,flag])\n"
unless @_ == 2 or @_ == 3 ;
my $db = shift ;
my $key = shift ;
my $flag = shift ;
my $value = 0 ;
my $origkey = $key ;
my $wantarray = wantarray ;
my %values = () ;
my @values = () ;
my $counter = 0 ;
my $status = 0 ;
# iterate through the database until either EOF ($status == 0)
# or a different key is encountered ($key ne $origkey).
for ($status = $db->seq($key, $value, R_CURSOR()) ;
$status == 0 and $key eq $origkey ;
$status = $db->seq($key, $value, R_NEXT()) ) {
# save the value or count number of matches
if ($wantarray) {
if ($flag)
{ ++ $values{$value} }
else
{ push (@values, $value) }
}
else
{ ++ $counter }
}
return ($wantarray ? ($flag ? %values : @values) : $counter) ;
}
sub STORABLE_freeze
{
my $type = ref shift;
croak "Cannot freeze $type object\n";
}
sub STORABLE_thaw
{
my $type = ref shift;
croak "Cannot thaw $type object\n";
}
1;
__END__
=head1 NAME
DB_File - Perl5 access to Berkeley DB version 1.x
=head1 SYNOPSIS
use DB_File;
[$X =] tie %hash, 'DB_File', [$filename, $flags, $mode, $DB_HASH] ;
[$X =] tie %hash, 'DB_File', $filename, $flags, $mode, $DB_BTREE ;
[$X =] tie @array, 'DB_File', $filename, $flags, $mode, $DB_RECNO ;
$status = $X->del($key [, $flags]) ;
$status = $X->put($key, $value [, $flags]) ;
$status = $X->get($key, $value [, $flags]) ;
$status = $X->seq($key, $value, $flags) ;
$status = $X->sync([$flags]) ;
$status = $X->fd ;
# BTREE only
$count = $X->get_dup($key) ;
@list = $X->get_dup($key) ;
%list = $X->get_dup($key, 1) ;
$status = $X->find_dup($key, $value) ;
$status = $X->del_dup($key, $value) ;
# RECNO only
$a = $X->length;
$a = $X->pop ;
$X->push(list);
$a = $X->shift;
$X->unshift(list);
@r = $X->splice(offset, length, elements);
# DBM Filters
$old_filter = $db->filter_store_key ( sub { ... } ) ;
$old_filter = $db->filter_store_value( sub { ... } ) ;
$old_filter = $db->filter_fetch_key ( sub { ... } ) ;
$old_filter = $db->filter_fetch_value( sub { ... } ) ;
untie %hash ;
untie @array ;
=head1 DESCRIPTION
B<DB_File> is a module which allows Perl programs to make use of the
facilities provided by Berkeley DB version 1.x (if you have a newer
version of DB, see L<Using DB_File with Berkeley DB version 2 or greater>).
It is assumed that you have a copy of the Berkeley DB manual pages at
hand when reading this documentation. The interface defined here
mirrors the Berkeley DB interface closely.
Berkeley DB is a C library which provides a consistent interface to a
number of database formats. B<DB_File> provides an interface to all
three of the database types currently supported by Berkeley DB.
The file types are:
=over 5
=item B<DB_HASH>
This database type allows arbitrary key/value pairs to be stored in data
files. This is equivalent to the functionality provided by other
hashing packages like DBM, NDBM, ODBM, GDBM, and SDBM. Remember though,
the files created using DB_HASH are not compatible with any of the
other packages mentioned.
A default hashing algorithm, which will be adequate for most
applications, is built into Berkeley DB. If you do need to use your own
hashing algorithm it is possible to write your own in Perl and have
B<DB_File> use it instead.
=item B<DB_BTREE>
The btree format allows arbitrary key/value pairs to be stored in a
sorted, balanced binary tree.
As with the DB_HASH format, it is possible to provide a user defined
Perl routine to perform the comparison of keys. By default, though, the
keys are stored in lexical order.
=item B<DB_RECNO>
DB_RECNO allows both fixed-length and variable-length flat text files
to be manipulated using the same key/value pair interface as in DB_HASH
and DB_BTREE. In this case the key will consist of a record (line)
number.
=back
=head2 Using DB_File with Berkeley DB version 2 or greater
Although B<DB_File> is intended to be used with Berkeley DB version 1,
it can also be used with version 2, 3 or 4. In this case the interface is
limited to the functionality provided by Berkeley DB 1.x. Anywhere the
version 2 or greater interface differs, B<DB_File> arranges for it to work
like version 1. This feature allows B<DB_File> scripts that were built
with version 1 to be migrated to version 2 or greater without any changes.
If you want to make use of the new features available in Berkeley DB
2.x or greater, use the Perl module B<BerkeleyDB> instead.
B<Note:> The database file format has changed multiple times in Berkeley
DB version 2, 3 and 4. If you cannot recreate your databases, you
must dump any existing databases with either the C<db_dump> or the
C<db_dump185> utility that comes with Berkeley DB.
Once you have rebuilt DB_File to use Berkeley DB version 2 or greater,
your databases can be recreated using C<db_load>. Refer to the Berkeley DB
documentation for further details.
Please read L<"COPYRIGHT"> before using version 2.x or greater of Berkeley
DB with DB_File.
=head2 Interface to Berkeley DB
B<DB_File> allows access to Berkeley DB files using the tie() mechanism
in Perl 5 (for full details, see L<perlfunc/tie()>). This facility
allows B<DB_File> to access Berkeley DB files using either an
associative array (for DB_HASH & DB_BTREE file types) or an ordinary
array (for the DB_RECNO file type).
In addition to the tie() interface, it is also possible to access most
of the functions provided in the Berkeley DB API directly.
See L<THE API INTERFACE>.
=head2 Opening a Berkeley DB Database File
Berkeley DB uses the function dbopen() to open or create a database.
Here is the C prototype for dbopen():
DB*
dbopen (const char * file, int flags, int mode,
DBTYPE type, const void * openinfo)
The parameter C<type> is an enumeration which specifies which of the 3
interface methods (DB_HASH, DB_BTREE or DB_RECNO) is to be used.
Depending on which of these is actually chosen, the final parameter,
I<openinfo> points to a data structure which allows tailoring of the
specific interface method.
This interface is handled slightly differently in B<DB_File>. Here is
an equivalent call using B<DB_File>:
tie %array, 'DB_File', $filename, $flags, $mode, $DB_HASH ;
The C<filename>, C<flags> and C<mode> parameters are the direct
equivalent of their dbopen() counterparts. The final parameter $DB_HASH
performs the function of both the C<type> and C<openinfo> parameters in
dbopen().
In the example above $DB_HASH is actually a pre-defined reference to a
hash object. B<DB_File> has three of these pre-defined references.
Apart from $DB_HASH, there is also $DB_BTREE and $DB_RECNO.
The keys allowed in each of these pre-defined references is limited to
the names used in the equivalent C structure. So, for example, the
$DB_HASH reference will only allow keys called C<bsize>, C<cachesize>,
C<ffactor>, C<hash>, C<lorder> and C<nelem>.
To change one of these elements, just assign to it like this:
$DB_HASH->{'cachesize'} = 10000 ;
The three predefined variables $DB_HASH, $DB_BTREE and $DB_RECNO are
usually adequate for most applications. If you do need to create extra
instances of these objects, constructors are available for each file
type.
Here are examples of the constructors and the valid options available
for DB_HASH, DB_BTREE and DB_RECNO respectively.
$a = new DB_File::HASHINFO ;
$a->{'bsize'} ;
$a->{'cachesize'} ;
$a->{'ffactor'};
$a->{'hash'} ;
$a->{'lorder'} ;
$a->{'nelem'} ;
$b = new DB_File::BTREEINFO ;
$b->{'flags'} ;
$b->{'cachesize'} ;
$b->{'maxkeypage'} ;
$b->{'minkeypage'} ;
$b->{'psize'} ;
$b->{'compare'} ;
$b->{'prefix'} ;
$b->{'lorder'} ;
$c = new DB_File::RECNOINFO ;
$c->{'bval'} ;
$c->{'cachesize'} ;
$c->{'psize'} ;
$c->{'flags'} ;
$c->{'lorder'} ;
$c->{'reclen'} ;
$c->{'bfname'} ;
The values stored in the hashes above are mostly the direct equivalent
of their C counterpart. Like their C counterparts, all are set to a
default values - that means you don't have to set I<all> of the
values when you only want to change one. Here is an example:
$a = new DB_File::HASHINFO ;
$a->{'cachesize'} = 12345 ;
tie %y, 'DB_File', "filename", $flags, 0777, $a ;
A few of the options need extra discussion here. When used, the C
equivalent of the keys C<hash>, C<compare> and C<prefix> store pointers
to C functions. In B<DB_File> these keys are used to store references
to Perl subs. Below are templates for each of the subs:
sub hash
{
my ($data) = @_ ;
...
# return the hash value for $data
return $hash ;
}
sub compare
{
my ($key, $key2) = @_ ;
...
# return 0 if $key1 eq $key2
# -1 if $key1 lt $key2
# 1 if $key1 gt $key2
return (-1 , 0 or 1) ;
}
sub prefix
{
my ($key, $key2) = @_ ;
...
# return number of bytes of $key2 which are
# necessary to determine that it is greater than $key1
return $bytes ;
}
See L<Changing the BTREE sort order> for an example of using the
C<compare> template.
If you are using the DB_RECNO interface and you intend making use of
C<bval>, you should check out L<The 'bval' Option>.
=head2 Default Parameters
It is possible to omit some or all of the final 4 parameters in the
call to C<tie> and let them take default values. As DB_HASH is the most
common file format used, the call:
tie %A, "DB_File", "filename" ;
is equivalent to:
tie %A, "DB_File", "filename", O_CREAT|O_RDWR, 0666, $DB_HASH ;
It is also possible to omit the filename parameter as well, so the
call:
tie %A, "DB_File" ;
is equivalent to:
tie %A, "DB_File", undef, O_CREAT|O_RDWR, 0666, $DB_HASH ;
See L<In Memory Databases> for a discussion on the use of C<undef>
in place of a filename.
=head2 In Memory Databases
Berkeley DB allows the creation of in-memory databases by using NULL
(that is, a C<(char *)0> in C) in place of the filename. B<DB_File>
uses C<undef> instead of NULL to provide this functionality.
=head1 DB_HASH
The DB_HASH file format is probably the most commonly used of the three
file formats that B<DB_File> supports. It is also very straightforward
to use.
=head2 A Simple Example
This example shows how to create a database, add key/value pairs to the
database, delete keys/value pairs and finally how to enumerate the
contents of the database.
use warnings ;
use strict ;
use DB_File ;
our (%h, $k, $v) ;
unlink "fruit" ;
tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0666, $DB_HASH
or die "Cannot open file 'fruit': $!\n";
# Add a few key/value pairs to the file
$h{"apple"} = "red" ;
$h{"orange"} = "orange" ;
$h{"banana"} = "yellow" ;
$h{"tomato"} = "red" ;
# Check for existence of a key
print "Banana Exists\n\n" if $h{"banana"} ;
# Delete a key/value pair.
delete $h{"apple"} ;
# print the contents of the file
while (($k, $v) = each %h)
{ print "$k -> $v\n" }
untie %h ;
here is the output:
Banana Exists
orange -> orange
tomato -> red
banana -> yellow
Note that the like ordinary associative arrays, the order of the keys
retrieved is in an apparently random order.
=head1 DB_BTREE
The DB_BTREE format is useful when you want to store data in a given
order. By default the keys will be stored in lexical order, but as you
will see from the example shown in the next section, it is very easy to
define your own sorting function.
=head2 Changing the BTREE sort order
This script shows how to override the default sorting algorithm that
BTREE uses. Instead of using the normal lexical ordering, a case
insensitive compare function will be used.
use warnings ;
use strict ;
use DB_File ;
my %h ;
sub Compare
{
my ($key1, $key2) = @_ ;
"\L$key1" cmp "\L$key2" ;
}
# specify the Perl sub that will do the comparison
$DB_BTREE->{'compare'} = \&Compare ;
unlink "tree" ;
tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0666, $DB_BTREE
or die "Cannot open file 'tree': $!\n" ;
# Add a key/value pair to the file
$h{'Wall'} = 'Larry' ;
$h{'Smith'} = 'John' ;
$h{'mouse'} = 'mickey' ;
$h{'duck'} = 'donald' ;
# Delete
delete $h{"duck"} ;
# Cycle through the keys printing them in order.
# Note it is not necessary to sort the keys as
# the btree will have kept them in order automatically.
foreach (keys %h)
{ print "$_\n" }
untie %h ;
Here is the output from the code above.
mouse
Smith
Wall
There are a few point to bear in mind if you want to change the
ordering in a BTREE database:
=over 5
=item 1.
The new compare function must be specified when you create the database.
=item 2.
You cannot change the ordering once the database has been created. Thus
you must use the same compare function every time you access the
database.
=item 3
Duplicate keys are entirely defined by the comparison function.
In the case-insensitive example above, the keys: 'KEY' and 'key'
would be considered duplicates, and assigning to the second one
would overwrite the first. If duplicates are allowed for (with the
R_DUP flag discussed below), only a single copy of duplicate keys
is stored in the database --- so (again with example above) assigning
three values to the keys: 'KEY', 'Key', and 'key' would leave just
the first key: 'KEY' in the database with three values. For some
situations this results in information loss, so care should be taken
to provide fully qualified comparison functions when necessary.
For example, the above comparison routine could be modified to
additionally compare case-sensitively if two keys are equal in the
case insensitive comparison:
sub compare {
my($key1, $key2) = @_;
lc $key1 cmp lc $key2 ||
$key1 cmp $key2;
}
And now you will only have duplicates when the keys themselves
are truly the same. (note: in versions of the db library prior to
about November 1996, such duplicate keys were retained so it was
possible to recover the original keys in sets of keys that
compared as equal).
=back
=head2 Handling Duplicate Keys
The BTREE file type optionally allows a single key to be associated
with an arbitrary number of values. This option is enabled by setting
the flags element of C<$DB_BTREE> to R_DUP when creating the database.
There are some difficulties in using the tied hash interface if you
want to manipulate a BTREE database with duplicate keys. Consider this
code:
use warnings ;
use strict ;
use DB_File ;
my ($filename, %h) ;
$filename = "tree" ;
unlink $filename ;
# Enable duplicate records
$DB_BTREE->{'flags'} = R_DUP ;
tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
or die "Cannot open $filename: $!\n";
# Add some key/value pairs to the file
$h{'Wall'} = 'Larry' ;
$h{'Wall'} = 'Brick' ; # Note the duplicate key
$h{'Wall'} = 'Brick' ; # Note the duplicate key and value
$h{'Smith'} = 'John' ;
$h{'mouse'} = 'mickey' ;
# iterate through the associative array
# and print each key/value pair.
foreach (sort keys %h)
{ print "$_ -> $h{$_}\n" }
untie %h ;
Here is the output:
Smith -> John
Wall -> Larry
Wall -> Larry
Wall -> Larry
mouse -> mickey
As you can see 3 records have been successfully created with key C<Wall>
- the only thing is, when they are retrieved from the database they
I<seem> to have the same value, namely C<Larry>. The problem is caused
by the way that the associative array interface works. Basically, when
the associative array interface is used to fetch the value associated
with a given key, it will only ever retrieve the first value.
Although it may not be immediately obvious from the code above, the
associative array interface can be used to write values with duplicate
keys, but it cannot be used to read them back from the database.
The way to get around this problem is to use the Berkeley DB API method
called C<seq>. This method allows sequential access to key/value
pairs. See L<THE API INTERFACE> for details of both the C<seq> method
and the API in general.
Here is the script above rewritten using the C<seq> API method.
use warnings ;
use strict ;
use DB_File ;
my ($filename, $x, %h, $status, $key, $value) ;
$filename = "tree" ;
unlink $filename ;
# Enable duplicate records
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
or die "Cannot open $filename: $!\n";
# Add some key/value pairs to the file
$h{'Wall'} = 'Larry' ;
$h{'Wall'} = 'Brick' ; # Note the duplicate key
$h{'Wall'} = 'Brick' ; # Note the duplicate key and value
$h{'Smith'} = 'John' ;
$h{'mouse'} = 'mickey' ;
# iterate through the btree using seq
# and print each key/value pair.
$key = $value = 0 ;
for ($status = $x->seq($key, $value, R_FIRST) ;
$status == 0 ;
$status = $x->seq($key, $value, R_NEXT) )
{ print "$key -> $value\n" }
undef $x ;
untie %h ;
that prints:
Smith -> John
Wall -> Brick
Wall -> Brick
Wall -> Larry
mouse -> mickey
This time we have got all the key/value pairs, including the multiple
values associated with the key C<Wall>.
To make life easier when dealing with duplicate keys, B<DB_File> comes with
a few utility methods.
=head2 The get_dup() Method
The C<get_dup> method assists in
reading duplicate values from BTREE databases. The method can take the
following forms:
$count = $x->get_dup($key) ;
@list = $x->get_dup($key) ;
%list = $x->get_dup($key, 1) ;
In a scalar context the method returns the number of values associated
with the key, C<$key>.
In list context, it returns all the values which match C<$key>. Note
that the values will be returned in an apparently random order.
In list context, if the second parameter is present and evaluates
TRUE, the method returns an associative array. The keys of the
associative array correspond to the values that matched in the BTREE
and the values of the array are a count of the number of times that
particular value occurred in the BTREE.
So assuming the database created above, we can use C<get_dup> like
this:
use warnings ;
use strict ;
use DB_File ;
my ($filename, $x, %h) ;
$filename = "tree" ;
# Enable duplicate records
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
or die "Cannot open $filename: $!\n";
my $cnt = $x->get_dup("Wall") ;
print "Wall occurred $cnt times\n" ;
my %hash = $x->get_dup("Wall", 1) ;
print "Larry is there\n" if $hash{'Larry'} ;
print "There are $hash{'Brick'} Brick Walls\n" ;
my @list = sort $x->get_dup("Wall") ;
print "Wall => [@list]\n" ;
@list = $x->get_dup("Smith") ;
print "Smith => [@list]\n" ;
@list = $x->get_dup("Dog") ;
print "Dog => [@list]\n" ;
and it will print:
Wall occurred 3 times
Larry is there
There are 2 Brick Walls
Wall => [Brick Brick Larry]
Smith => [John]
Dog => []
=head2 The find_dup() Method
$status = $X->find_dup($key, $value) ;
This method checks for the existence of a specific key/value pair. If the
pair exists, the cursor is left pointing to the pair and the method
returns 0. Otherwise the method returns a non-zero value.
Assuming the database from the previous example:
use warnings ;
use strict ;
use DB_File ;
my ($filename, $x, %h, $found) ;
$filename = "tree" ;
# Enable duplicate records
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
or die "Cannot open $filename: $!\n";
$found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ;
print "Larry Wall is $found there\n" ;
$found = ( $x->find_dup("Wall", "Harry") == 0 ? "" : "not") ;
print "Harry Wall is $found there\n" ;
undef $x ;
untie %h ;
prints this
Larry Wall is there
Harry Wall is not there
=head2 The del_dup() Method
$status = $X->del_dup($key, $value) ;
This method deletes a specific key/value pair. It returns
0 if they exist and have been deleted successfully.
Otherwise the method returns a non-zero value.
Again assuming the existence of the C<tree> database
use warnings ;
use strict ;
use DB_File ;
my ($filename, $x, %h, $found) ;
$filename = "tree" ;
# Enable duplicate records
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
or die "Cannot open $filename: $!\n";
$x->del_dup("Wall", "Larry") ;
$found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ;
print "Larry Wall is $found there\n" ;
undef $x ;
untie %h ;
prints this
Larry Wall is not there
=head2 Matching Partial Keys
The BTREE interface has a feature which allows partial keys to be
matched. This functionality is I<only> available when the C<seq> method
is used along with the R_CURSOR flag.
$x->seq($key, $value, R_CURSOR) ;
Here is the relevant quote from the dbopen man page where it defines
the use of the R_CURSOR flag with seq:
Note, for the DB_BTREE access method, the returned key is not
necessarily an exact match for the specified key. The returned key
is the smallest key greater than or equal to the specified key,
permitting partial key matches and range searches.
In the example script below, the C<match> sub uses this feature to find
and print the first matching key/value pair given a partial key.
use warnings ;
use strict ;
use DB_File ;
use Fcntl ;
my ($filename, $x, %h, $st, $key, $value) ;
sub match
{
my $key = shift ;
my $value = 0;
my $orig_key = $key ;
$x->seq($key, $value, R_CURSOR) ;
print "$orig_key\t-> $key\t-> $value\n" ;
}
$filename = "tree" ;
unlink $filename ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
or die "Cannot open $filename: $!\n";
# Add some key/value pairs to the file
$h{'mouse'} = 'mickey' ;
$h{'Wall'} = 'Larry' ;
$h{'Walls'} = 'Brick' ;
$h{'Smith'} = 'John' ;
$key = $value = 0 ;
print "IN ORDER\n" ;
for ($st = $x->seq($key, $value, R_FIRST) ;
$st == 0 ;
$st = $x->seq($key, $value, R_NEXT) )
{ print "$key -> $value\n" }
print "\nPARTIAL MATCH\n" ;
match "Wa" ;
match "A" ;
match "a" ;
undef $x ;
untie %h ;
Here is the output:
IN ORDER
Smith -> John
Wall -> Larry
Walls -> Brick
mouse -> mickey
PARTIAL MATCH
Wa -> Wall -> Larry
A -> Smith -> John
a -> mouse -> mickey
=head1 DB_RECNO
DB_RECNO provides an interface to flat text files. Both variable and
fixed length records are supported.
In order to make RECNO more compatible with Perl, the array offset for
all RECNO arrays begins at 0 rather than 1 as in Berkeley DB.
As with normal Perl arrays, a RECNO array can be accessed using
negative indexes. The index -1 refers to the last element of the array,
-2 the second last, and so on. Attempting to access an element before
the start of the array will raise a fatal run-time error.
=head2 The 'bval' Option
The operation of the bval option warrants some discussion. Here is the
definition of bval from the Berkeley DB 1.85 recno manual page:
The delimiting byte to be used to mark the end of a
record for variable-length records, and the pad charac-
ter for fixed-length records. If no value is speci-
fied, newlines (``\n'') are used to mark the end of
variable-length records and fixed-length records are
padded with spaces.
The second sentence is wrong. In actual fact bval will only default to
C<"\n"> when the openinfo parameter in dbopen is NULL. If a non-NULL
openinfo parameter is used at all, the value that happens to be in bval
will be used. That means you always have to specify bval when making
use of any of the options in the openinfo parameter. This documentation
error will be fixed in the next release of Berkeley DB.
That clarifies the situation with regards Berkeley DB itself. What
about B<DB_File>? Well, the behavior defined in the quote above is
quite useful, so B<DB_File> conforms to it.
That means that you can specify other options (e.g. cachesize) and
still have bval default to C<"\n"> for variable length records, and
space for fixed length records.
Also note that the bval option only allows you to specify a single byte
as a delimiter.
=head2 A Simple Example
Here is a simple example that uses RECNO (if you are using a version
of Perl earlier than 5.004_57 this example won't work -- see
L<Extra RECNO Methods> for a workaround).
use warnings ;
use strict ;
use DB_File ;
my $filename = "text" ;
unlink $filename ;
my @h ;
tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_RECNO
or die "Cannot open file 'text': $!\n" ;
# Add a few key/value pairs to the file
$h[0] = "orange" ;
$h[1] = "blue" ;
$h[2] = "yellow" ;
push @h, "green", "black" ;
my $elements = scalar @h ;
print "The array contains $elements entries\n" ;
my $last = pop @h ;
print "popped $last\n" ;
unshift @h, "white" ;
my $first = shift @h ;
print "shifted $first\n" ;
# Check for existence of a key
print "Element 1 Exists with value $h[1]\n" if $h[1] ;
# use a negative index
print "The last element is $h[-1]\n" ;
print "The 2nd last element is $h[-2]\n" ;
untie @h ;
Here is the output from the script:
The array contains 5 entries
popped black
shifted white
Element 1 Exists with value blue
The last element is green
The 2nd last element is yellow
=head2 Extra RECNO Methods
If you are using a version of Perl earlier than 5.004_57, the tied
array interface is quite limited. In the example script above
C<push>, C<pop>, C<shift>, C<unshift>
or determining the array length will not work with a tied array.
To make the interface more useful for older versions of Perl, a number
of methods are supplied with B<DB_File> to simulate the missing array
operations. All these methods are accessed via the object returned from
the tie call.
Here are the methods:
=over 5
=item B<$X-E<gt>push(list) ;>
Pushes the elements of C<list> to the end of the array.
=item B<$value = $X-E<gt>pop ;>
Removes and returns the last element of the array.
=item B<$X-E<gt>shift>
Removes and returns the first element of the array.
=item B<$X-E<gt>unshift(list) ;>
Pushes the elements of C<list> to the start of the array.
=item B<$X-E<gt>length>
Returns the number of elements in the array.
=item B<$X-E<gt>splice(offset, length, elements);>
Returns a splice of the array.
=back
=head2 Another Example
Here is a more complete example that makes use of some of the methods
described above. It also makes use of the API interface directly (see
L<THE API INTERFACE>).
use warnings ;
use strict ;
my (@h, $H, $file, $i) ;
use DB_File ;
use Fcntl ;
$file = "text" ;
unlink $file ;
$H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0666, $DB_RECNO
or die "Cannot open file $file: $!\n" ;
# first create a text file to play with
$h[0] = "zero" ;
$h[1] = "one" ;
$h[2] = "two" ;
$h[3] = "three" ;
$h[4] = "four" ;
# Print the records in order.
#
# The length method is needed here because evaluating a tied
# array in a scalar context does not return the number of
# elements in the array.
print "\nORIGINAL\n" ;
foreach $i (0 .. $H->length - 1) {
print "$i: $h[$i]\n" ;
}
# use the push & pop methods
$a = $H->pop ;
$H->push("last") ;
print "\nThe last record was [$a]\n" ;
# and the shift & unshift methods
$a = $H->shift ;
$H->unshift("first") ;
print "The first record was [$a]\n" ;
# Use the API to add a new record after record 2.
$i = 2 ;
$H->put($i, "Newbie", R_IAFTER) ;
# and a new record before record 1.
$i = 1 ;
$H->put($i, "New One", R_IBEFORE) ;
# delete record 3
$H->del(3) ;
# now print the records in reverse order
print "\nREVERSE\n" ;
for ($i = $H->length - 1 ; $i >= 0 ; -- $i)
{ print "$i: $h[$i]\n" }
# same again, but use the API functions instead
print "\nREVERSE again\n" ;
my ($s, $k, $v) = (0, 0, 0) ;
for ($s = $H->seq($k, $v, R_LAST) ;
$s == 0 ;
$s = $H->seq($k, $v, R_PREV))
{ print "$k: $v\n" }
undef $H ;
untie @h ;
and this is what it outputs:
ORIGINAL
0: zero
1: one
2: two
3: three
4: four
The last record was [four]
The first record was [zero]
REVERSE
5: last
4: three
3: Newbie
2: one
1: New One
0: first
REVERSE again
5: last
4: three
3: Newbie
2: one
1: New One
0: first
Notes:
=over 5
=item 1.
Rather than iterating through the array, C<@h> like this:
foreach $i (@h)
it is necessary to use either this:
foreach $i (0 .. $H->length - 1)
or this:
for ($a = $H->get($k, $v, R_FIRST) ;
$a == 0 ;
$a = $H->get($k, $v, R_NEXT) )
=item 2.
Notice that both times the C<put> method was used the record index was
specified using a variable, C<$i>, rather than the literal value
itself. This is because C<put> will return the record number of the
inserted line via that parameter.
=back
=head1 THE API INTERFACE
As well as accessing Berkeley DB using a tied hash or array, it is also
possible to make direct use of most of the API functions defined in the
Berkeley DB documentation.
To do this you need to store a copy of the object returned from the tie.
$db = tie %hash, "DB_File", "filename" ;
Once you have done that, you can access the Berkeley DB API functions
as B<DB_File> methods directly like this:
$db->put($key, $value, R_NOOVERWRITE) ;
B<Important:> If you have saved a copy of the object returned from
C<tie>, the underlying database file will I<not> be closed until both
the tied variable is untied and all copies of the saved object are
destroyed.
use DB_File ;
$db = tie %hash, "DB_File", "filename"
or die "Cannot tie filename: $!" ;
...
undef $db ;
untie %hash ;
See L<The untie() Gotcha> for more details.
All the functions defined in L<dbopen> are available except for
close() and dbopen() itself. The B<DB_File> method interface to the
supported functions have been implemented to mirror the way Berkeley DB
works whenever possible. In particular note that:
=over 5
=item *
The methods return a status value. All return 0 on success.
All return -1 to signify an error and set C<$!> to the exact
error code. The return code 1 generally (but not always) means that the
key specified did not exist in the database.
Other return codes are defined. See below and in the Berkeley DB
documentation for details. The Berkeley DB documentation should be used
as the definitive source.
=item *
Whenever a Berkeley DB function returns data via one of its parameters,
the equivalent B<DB_File> method does exactly the same.
=item *
If you are careful, it is possible to mix API calls with the tied
hash/array interface in the same piece of code. Although only a few of
the methods used to implement the tied interface currently make use of
the cursor, you should always assume that the cursor has been changed
any time the tied hash/array interface is used. As an example, this
code will probably not do what you expect:
$X = tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0777, $DB_BTREE
or die "Cannot tie $filename: $!" ;
# Get the first key/value pair and set the cursor
$X->seq($key, $value, R_FIRST) ;
# this line will modify the cursor
$count = scalar keys %x ;
# Get the second key/value pair.
# oops, it didn't, it got the last key/value pair!
$X->seq($key, $value, R_NEXT) ;
The code above can be rearranged to get around the problem, like this:
$X = tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0777, $DB_BTREE
or die "Cannot tie $filename: $!" ;
# this line will modify the cursor
$count = scalar keys %x ;
# Get the first key/value pair and set the cursor
$X->seq($key, $value, R_FIRST) ;
# Get the second key/value pair.
# worked this time.
$X->seq($key, $value, R_NEXT) ;
=back
All the constants defined in L<dbopen> for use in the flags parameters
in the methods defined below are also available. Refer to the Berkeley
DB documentation for the precise meaning of the flags values.
Below is a list of the methods available.
=over 5
=item B<$status = $X-E<gt>get($key, $value [, $flags]) ;>
Given a key (C<$key>) this method reads the value associated with it
from the database. The value read from the database is returned in the
C<$value> parameter.
If the key does not exist the method returns 1.
No flags are currently defined for this method.
=item B<$status = $X-E<gt>put($key, $value [, $flags]) ;>
Stores the key/value pair in the database.
If you use either the R_IAFTER or R_IBEFORE flags, the C<$key> parameter
will have the record number of the inserted key/value pair set.
Valid flags are R_CURSOR, R_IAFTER, R_IBEFORE, R_NOOVERWRITE and
R_SETCURSOR.
=item B<$status = $X-E<gt>del($key [, $flags]) ;>
Removes all key/value pairs with key C<$key> from the database.
A return code of 1 means that the requested key was not in the
database.
R_CURSOR is the only valid flag at present.
=item B<$status = $X-E<gt>fd ;>
Returns the file descriptor for the underlying database.
See L<Locking: The Trouble with fd> for an explanation for why you should
not use C<fd> to lock your database.
=item B<$status = $X-E<gt>seq($key, $value, $flags) ;>
This interface allows sequential retrieval from the database. See
L<dbopen> for full details.
Both the C<$key> and C<$value> parameters will be set to the key/value
pair read from the database.
The flags parameter is mandatory. The valid flag values are R_CURSOR,
R_FIRST, R_LAST, R_NEXT and R_PREV.
=item B<$status = $X-E<gt>sync([$flags]) ;>
Flushes any cached buffers to disk.
R_RECNOSYNC is the only valid flag at present.
=back
=head1 DBM FILTERS
A DBM Filter is a piece of code that is be used when you I<always> want to
make the same transformation to all keys and/or values in a DBM database.
An example is when you need to encode your data in UTF-8 before writing to
the database and then decode the UTF-8 when reading from the database file.
There are two ways to use a DBM Filter.
=over 5
=item 1.
Using the low-level API defined below.
=item 2.
Using the L<DBM_Filter> module.
This module hides the complexity of the API defined below and comes
with a number of "canned" filters that cover some of the common use-cases.
=back
Use of the L<DBM_Filter> module is recommended.
=head2 DBM Filter Low-level API
There are four methods associated with DBM Filters. All work identically,
and each is used to install (or uninstall) a single DBM Filter. Each
expects a single parameter, namely a reference to a sub. The only
difference between them is the place that the filter is installed.
To summarise:
=over 5
=item B<filter_store_key>
If a filter has been installed with this method, it will be invoked
every time you write a key to a DBM database.
=item B<filter_store_value>
If a filter has been installed with this method, it will be invoked
every time you write a value to a DBM database.
=item B<filter_fetch_key>
If a filter has been installed with this method, it will be invoked
every time you read a key from a DBM database.
=item B<filter_fetch_value>
If a filter has been installed with this method, it will be invoked
every time you read a value from a DBM database.
=back
You can use any combination of the methods, from none, to all four.
All filter methods return the existing filter, if present, or C<undef>
in not.
To delete a filter pass C<undef> to it.
=head2 The Filter
When each filter is called by Perl, a local copy of C<$_> will contain
the key or value to be filtered. Filtering is achieved by modifying
the contents of C<$_>. The return code from the filter is ignored.
=head2 An Example -- the NULL termination problem.
Consider the following scenario. You have a DBM database
that you need to share with a third-party C application. The C application
assumes that I<all> keys and values are NULL terminated. Unfortunately
when Perl writes to DBM databases it doesn't use NULL termination, so
your Perl application will have to manage NULL termination itself. When
you write to the database you will have to use something like this:
$hash{"$key\0"} = "$value\0" ;
Similarly the NULL needs to be taken into account when you are considering
the length of existing keys/values.
It would be much better if you could ignore the NULL terminations issue
in the main application code and have a mechanism that automatically
added the terminating NULL to all keys and values whenever you write to
the database and have them removed when you read from the database. As I'm
sure you have already guessed, this is a problem that DBM Filters can
fix very easily.
use warnings ;
use strict ;
use DB_File ;
my %hash ;
my $filename = "filt" ;
unlink $filename ;
my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH
or die "Cannot open $filename: $!\n" ;
# Install DBM Filters
$db->filter_fetch_key ( sub { s/\0$// } ) ;
$db->filter_store_key ( sub { $_ .= "\0" } ) ;
$db->filter_fetch_value( sub { s/\0$// } ) ;
$db->filter_store_value( sub { $_ .= "\0" } ) ;
$hash{"abc"} = "def" ;
my $a = $hash{"ABC"} ;
# ...
undef $db ;
untie %hash ;
Hopefully the contents of each of the filters should be
self-explanatory. Both "fetch" filters remove the terminating NULL,
and both "store" filters add a terminating NULL.
=head2 Another Example -- Key is a C int.
Here is another real-life example. By default, whenever Perl writes to
a DBM database it always writes the key and value as strings. So when
you use this:
$hash{12345} = "something" ;
the key 12345 will get stored in the DBM database as the 5 byte string
"12345". If you actually want the key to be stored in the DBM database
as a C int, you will have to use C<pack> when writing, and C<unpack>
when reading.
Here is a DBM Filter that does it:
use warnings ;
use strict ;
use DB_File ;
my %hash ;
my $filename = "filt" ;
unlink $filename ;
my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH
or die "Cannot open $filename: $!\n" ;
$db->filter_fetch_key ( sub { $_ = unpack("i", $_) } ) ;
$db->filter_store_key ( sub { $_ = pack ("i", $_) } ) ;
$hash{123} = "def" ;
# ...
undef $db ;
untie %hash ;
This time only two filters have been used -- we only need to manipulate
the contents of the key, so it wasn't necessary to install any value
filters.
=head1 HINTS AND TIPS
=head2 Locking: The Trouble with fd
Until version 1.72 of this module, the recommended technique for locking
B<DB_File> databases was to flock the filehandle returned from the "fd"
function. Unfortunately this technique has been shown to be fundamentally
flawed (Kudos to David Harris for tracking this down). Use it at your own
peril!
The locking technique went like this.
$db = tie(%db, 'DB_File', 'foo.db', O_CREAT|O_RDWR, 0644)
|| die "dbcreat foo.db $!";
$fd = $db->fd;
open(DB_FH, "+<&=$fd") || die "dup $!";
flock (DB_FH, LOCK_EX) || die "flock: $!";
...
$db{"Tom"} = "Jerry" ;
...
flock(DB_FH, LOCK_UN);
undef $db;
untie %db;
close(DB_FH);
In simple terms, this is what happens:
=over 5
=item 1.
Use "tie" to open the database.
=item 2.
Lock the database with fd & flock.
=item 3.
Read & Write to the database.
=item 4.
Unlock and close the database.
=back
Here is the crux of the problem. A side-effect of opening the B<DB_File>
database in step 2 is that an initial block from the database will get
read from disk and cached in memory.
To see why this is a problem, consider what can happen when two processes,
say "A" and "B", both want to update the same B<DB_File> database
using the locking steps outlined above. Assume process "A" has already
opened the database and has a write lock, but it hasn't actually updated
the database yet (it has finished step 2, but not started step 3 yet). Now
process "B" tries to open the same database - step 1 will succeed,
but it will block on step 2 until process "A" releases the lock. The
important thing to notice here is that at this point in time both
processes will have cached identical initial blocks from the database.
Now process "A" updates the database and happens to change some of the
data held in the initial buffer. Process "A" terminates, flushing
all cached data to disk and releasing the database lock. At this point
the database on disk will correctly reflect the changes made by process
"A".
With the lock released, process "B" can now continue. It also updates the
database and unfortunately it too modifies the data that was in its
initial buffer. Once that data gets flushed to disk it will overwrite
some/all of the changes process "A" made to the database.
The result of this scenario is at best a database that doesn't contain
what you expect. At worst the database will corrupt.
The above won't happen every time competing process update the same
B<DB_File> database, but it does illustrate why the technique should
not be used.
=head2 Safe ways to lock a database
Starting with version 2.x, Berkeley DB has internal support for locking.
The companion module to this one, B<BerkeleyDB>, provides an interface
to this locking functionality. If you are serious about locking
Berkeley DB databases, I strongly recommend using B<BerkeleyDB>.
If using B<BerkeleyDB> isn't an option, there are a number of modules
available on CPAN that can be used to implement locking. Each one
implements locking differently and has different goals in mind. It is
therefore worth knowing the difference, so that you can pick the right
one for your application. Here are the three locking wrappers:
=over 5
=item B<Tie::DB_Lock>
A B<DB_File> wrapper which creates copies of the database file for
read access, so that you have a kind of a multiversioning concurrent read
system. However, updates are still serial. Use for databases where reads
may be lengthy and consistency problems may occur.
=item B<Tie::DB_LockFile>
A B<DB_File> wrapper that has the ability to lock and unlock the database
while it is being used. Avoids the tie-before-flock problem by simply
re-tie-ing the database when you get or drop a lock. Because of the
flexibility in dropping and re-acquiring the lock in the middle of a
session, this can be massaged into a system that will work with long
updates and/or reads if the application follows the hints in the POD
documentation.
=item B<DB_File::Lock>
An extremely lightweight B<DB_File> wrapper that simply flocks a lockfile
before tie-ing the database and drops the lock after the untie. Allows
one to use the same lockfile for multiple databases to avoid deadlock
problems, if desired. Use for databases where updates are reads are
quick and simple flock locking semantics are enough.
=back
=head2 Sharing Databases With C Applications
There is no technical reason why a Berkeley DB database cannot be
shared by both a Perl and a C application.
The vast majority of problems that are reported in this area boil down
to the fact that C strings are NULL terminated, whilst Perl strings are
not. See L<DBM FILTERS> for a generic way to work around this problem.
Here is a real example. Netscape 2.0 keeps a record of the locations you
visit along with the time you last visited them in a DB_HASH database.
This is usually stored in the file F<~/.netscape/history.db>. The key
field in the database is the location string and the value field is the
time the location was last visited stored as a 4 byte binary value.
If you haven't already guessed, the location string is stored with a
terminating NULL. This means you need to be careful when accessing the
database.
Here is a snippet of code that is loosely based on Tom Christiansen's
I<ggh> script (available from your nearest CPAN archive in
F<authors/id/TOMC/scripts/nshist.gz>).
use warnings ;
use strict ;
use DB_File ;
use Fcntl ;
my ($dotdir, $HISTORY, %hist_db, $href, $binary_time, $date) ;
$dotdir = $ENV{HOME} || $ENV{LOGNAME};
$HISTORY = "$dotdir/.netscape/history.db";
tie %hist_db, 'DB_File', $HISTORY
or die "Cannot open $HISTORY: $!\n" ;;
# Dump the complete database
while ( ($href, $binary_time) = each %hist_db ) {
# remove the terminating NULL
$href =~ s/\x00$// ;
# convert the binary time into a user friendly string
$date = localtime unpack("V", $binary_time);
print "$date $href\n" ;
}
# check for the existence of a specific key
# remember to add the NULL
if ( $binary_time = $hist_db{"http://mox.perl.com/\x00"} ) {
$date = localtime unpack("V", $binary_time) ;
print "Last visited mox.perl.com on $date\n" ;
}
else {
print "Never visited mox.perl.com\n"
}
untie %hist_db ;
=head2 The untie() Gotcha
If you make use of the Berkeley DB API, it is I<very> strongly
recommended that you read L<perltie/The untie Gotcha>.
Even if you don't currently make use of the API interface, it is still
worth reading it.
Here is an example which illustrates the problem from a B<DB_File>
perspective:
use DB_File ;
use Fcntl ;
my %x ;
my $X ;
$X = tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_TRUNC
or die "Cannot tie first time: $!" ;
$x{123} = 456 ;
untie %x ;
tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_CREAT
or die "Cannot tie second time: $!" ;
untie %x ;
When run, the script will produce this error message:
Cannot tie second time: Invalid argument at bad.file line 14.
Although the error message above refers to the second tie() statement
in the script, the source of the problem is really with the untie()
statement that precedes it.
Having read L<perltie> you will probably have already guessed that the
error is caused by the extra copy of the tied object stored in C<$X>.
If you haven't, then the problem boils down to the fact that the
B<DB_File> destructor, DESTROY, will not be called until I<all>
references to the tied object are destroyed. Both the tied variable,
C<%x>, and C<$X> above hold a reference to the object. The call to
untie() will destroy the first, but C<$X> still holds a valid
reference, so the destructor will not get called and the database file
F<tst.fil> will remain open. The fact that Berkeley DB then reports the
attempt to open a database that is already open via the catch-all
"Invalid argument" doesn't help.
If you run the script with the C<-w> flag the error message becomes:
untie attempted while 1 inner references still exist at bad.file line 12.
Cannot tie second time: Invalid argument at bad.file line 14.
which pinpoints the real problem. Finally the script can now be
modified to fix the original problem by destroying the API object
before the untie:
...
$x{123} = 456 ;
undef $X ;
untie %x ;
$X = tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_CREAT
...
=head1 COMMON QUESTIONS
=head2 Why is there Perl source in my database?
If you look at the contents of a database file created by DB_File,
there can sometimes be part of a Perl script included in it.
This happens because Berkeley DB uses dynamic memory to allocate
buffers which will subsequently be written to the database file. Being
dynamic, the memory could have been used for anything before DB
malloced it. As Berkeley DB doesn't clear the memory once it has been
allocated, the unused portions will contain random junk. In the case
where a Perl script gets written to the database, the random junk will
correspond to an area of dynamic memory that happened to be used during
the compilation of the script.
Unless you don't like the possibility of there being part of your Perl
scripts embedded in a database file, this is nothing to worry about.
=head2 How do I store complex data structures with DB_File?
Although B<DB_File> cannot do this directly, there is a module which
can layer transparently over B<DB_File> to accomplish this feat.
Check out the MLDBM module, available on CPAN in the directory
F<modules/by-module/MLDBM>.
=head2 What does "wide character in subroutine entry" mean?
You will usually get this message if you are working with UTF-8 data and
want to read/write it from/to a Berkeley DB database file.
The easist way to deal with this issue is to use the pre-defined "utf8"
B<DBM_Filter> (see L<DBM_Filter>) that was designed to deal with this
situation.
The example below shows what you need if I<both> the key and value are
expected to be in UTF-8.
use DB_File;
use DBM_Filter;
my $db = tie %h, 'DB_File', '/tmp/try.db', O_CREAT|O_RDWR, 0666, $DB_BTREE;
$db->Filter_Key_Push('utf8');
$db->Filter_Value_Push('utf8');
my $key = "\N{LATIN SMALL LETTER A WITH ACUTE}";
my $value = "\N{LATIN SMALL LETTER E WITH ACUTE}";
$h{ $key } = $value;
=head2 What does "Invalid Argument" mean?
You will get this error message when one of the parameters in the
C<tie> call is wrong. Unfortunately there are quite a few parameters to
get wrong, so it can be difficult to figure out which one it is.
Here are a couple of possibilities:
=over 5
=item 1.
Attempting to reopen a database without closing it.
=item 2.
Using the O_WRONLY flag.
=back
=head2 What does "Bareword 'DB_File' not allowed" mean?
You will encounter this particular error message when you have the
C<strict 'subs'> pragma (or the full strict pragma) in your script.
Consider this script:
use warnings ;
use strict ;
use DB_File ;
my %x ;
tie %x, DB_File, "filename" ;
Running it produces the error in question:
Bareword "DB_File" not allowed while "strict subs" in use
To get around the error, place the word C<DB_File> in either single or
double quotes, like this:
tie %x, "DB_File", "filename" ;
Although it might seem like a real pain, it is really worth the effort
of having a C<use strict> in all your scripts.
=head1 REFERENCES
Articles that are either about B<DB_File> or make use of it.
=over 5
=item 1.
I<Full-Text Searching in Perl>, Tim Kientzle (tkientzle@ddj.com),
Dr. Dobb's Journal, Issue 295, January 1999, pp 34-41
=back
=head1 HISTORY
Moved to the Changes file.
=head1 BUGS
Some older versions of Berkeley DB had problems with fixed length
records using the RECNO file format. This problem has been fixed since
version 1.85 of Berkeley DB.
I am sure there are bugs in the code. If you do find any, or can
suggest any enhancements, I would welcome your comments.
=head1 AVAILABILITY
B<DB_File> comes with the standard Perl source distribution. Look in
the directory F<ext/DB_File>. Given the amount of time between releases
of Perl the version that ships with Perl is quite likely to be out of
date, so the most recent version can always be found on CPAN (see
L<perlmodlib/CPAN> for details), in the directory
F<modules/by-module/DB_File>.
This version of B<DB_File> will work with either version 1.x, 2.x or
3.x of Berkeley DB, but is limited to the functionality provided by
version 1.
The official web site for Berkeley DB is F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>.
All versions of Berkeley DB are available there.
Alternatively, Berkeley DB version 1 is available at your nearest CPAN
archive in F<src/misc/db.1.85.tar.gz>.
=head1 COPYRIGHT
Copyright (c) 1995-2016 Paul Marquess. All rights reserved. This program
is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.
Although B<DB_File> is covered by the Perl license, the library it
makes use of, namely Berkeley DB, is not. Berkeley DB has its own
copyright and its own license. Please take the time to read it.
Here are a few words taken from the Berkeley DB FAQ (at
F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>) regarding the license:
Do I have to license DB to use it in Perl scripts?
No. The Berkeley DB license requires that software that uses
Berkeley DB be freely redistributable. In the case of Perl, that
software is Perl, and not your scripts. Any Perl scripts that you
write are your property, including scripts that make use of
Berkeley DB. Neither the Perl license nor the Berkeley DB license
place any restriction on what you may do with them.
If you are in any doubt about the license situation, contact either the
Berkeley DB authors or the author of DB_File. See L<"AUTHOR"> for details.
=head1 SEE ALSO
L<perl>, L<dbopen(3)>, L<hash(3)>, L<recno(3)>, L<btree(3)>,
L<perldbmfilter>, L<DBM_Filter>
=head1 AUTHOR
The DB_File interface was written by Paul Marquess
E<lt>pmqs@cpan.orgE<gt>.
=cut
Math/BigInt/FastCalc.pm 0000644 00000010017 15033552504 0010630 0 ustar 00 package Math::BigInt::FastCalc;
use 5.006;
use strict;
use warnings;
use Math::BigInt::Calc 1.999801;
our @ISA = qw< Math::BigInt::Calc >;
our $VERSION = '0.5006';
##############################################################################
# global constants, flags and accessory
# announce that we are compatible with MBI v1.83 and up
sub api_version () { 2; }
# use Calc to override the methods that we do not provide in XS
require XSLoader;
XSLoader::load(__PACKAGE__, $VERSION, Math::BigInt::Calc->_base_len());
##############################################################################
##############################################################################
1;
__END__
=pod
=head1 NAME
Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed
=head1 SYNOPSIS
# to use it with Math::BigInt
use Math::BigInt lib => 'FastCalc';
# to use it with Math::BigFloat
use Math::BigFloat lib => 'FastCalc';
# to use it with Math::BigRat
use Math::BigRat lib => 'FastCalc';
=head1 DESCRIPTION
Math::BigInt::FastCalc inherits from Math::BigInt::Calc.
Provides support for big integer calculations. Not intended to be used by
other modules. Other modules which sport the same functions can also be used
to support Math::BigInt, like L<Math::BigInt::GMP> or L<Math::BigInt::Pari>.
In order to allow for multiple big integer libraries, Math::BigInt was
rewritten to use library modules for core math routines. Any module which
follows the same API as this can be used instead by using the following:
use Math::BigInt lib => 'libname';
'libname' is either the long name ('Math::BigInt::Pari'), or only the short
version like 'Pari'. To use this library:
use Math::BigInt lib => 'FastCalc';
=head1 STORAGE
Math::BigInt::FastCalc works exactly like Math::BigInt::Calc. Numbers are
stored in decimal form chopped into parts.
=head1 METHODS
The following functions are now implemented in FastCalc.xs:
_is_odd _is_even _is_one _is_zero
_is_two _is_ten
_zero _one _two _ten
_acmp _len
_inc _dec
__strip_zeros _copy
=head1 BUGS
Please report any bugs or feature requests to
C<bug-math-bigint-fastcalc at rt.cpan.org>, or through the web interface at
L<https://rt.cpan.org/Ticket/Create.html?Queue=Math-BigInt-FastCalc>
(requires login).
We will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Math::BigInt::FastCalc
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker
L<https://rt.cpan.org/Public/Dist/Display.html?Name=Math-BigInt-FastCalc>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/Math-BigInt-FastCalc>
=item * CPAN Ratings
L<http://cpanratings.perl.org/dist/Math-BigInt-FastCalc>
=item * Search CPAN
L<http://search.cpan.org/dist/Math-BigInt-FastCalc/>
=item * CPAN Testers Matrix
L<http://matrix.cpantesters.org/?dist=Math-BigInt-FastCalc>
=item * The Bignum mailing list
=over 4
=item * Post to mailing list
C<bignum at lists.scsys.co.uk>
=item * View mailing list
L<http://lists.scsys.co.uk/pipermail/bignum/>
=item * Subscribe/Unsubscribe
L<http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/bignum>
=back
=back
=head1 LICENSE
This program is free software; you may redistribute it and/or modify it under
the same terms as Perl itself.
=head1 AUTHORS
Original math code by Mark Biggar, rewritten by Tels L<http://bloodgate.com/>
in late 2000.
Separated from BigInt and shaped API with the help of John Peacock.
Fixed, sped-up and enhanced by Tels http://bloodgate.com 2001-2003.
Further streamlining (api_version 1 etc.) by Tels 2004-2007.
Bug-fixing by Peter John Acklam E<lt>pjacklam@online.noE<gt> 2010-2016.
=head1 SEE ALSO
L<Math::BigInt::Lib> for a description of the API.
Alternative libraries L<Math::BigInt::Calc>, L<Math::BigInt::GMP>, and
L<Math::BigInt::Pari>.
Some of the modules that use these libraries L<Math::BigInt>,
L<Math::BigFloat>, and L<Math::BigRat>.
=cut
Sys/Syslog.pm 0000644 00000135431 15033552504 0007151 0 ustar 00 package Sys::Syslog;
use strict;
use warnings;
use warnings::register;
use Carp;
use Config;
use Exporter ();
use File::Basename;
use POSIX qw< strftime setlocale LC_TIME >;
use Socket qw< :all >;
require 5.005;
*import = \&Exporter::import;
{ no strict 'vars';
$VERSION = '0.35';
%EXPORT_TAGS = (
standard => [qw(openlog syslog closelog setlogmask)],
extended => [qw(setlogsock)],
macros => [
# levels
qw(
LOG_ALERT LOG_CRIT LOG_DEBUG LOG_EMERG LOG_ERR
LOG_INFO LOG_NOTICE LOG_WARNING
),
# standard facilities
qw(
LOG_AUTH LOG_AUTHPRIV LOG_CRON LOG_DAEMON LOG_FTP LOG_KERN
LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4
LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR LOG_MAIL LOG_NEWS
LOG_SYSLOG LOG_USER LOG_UUCP
),
# Mac OS X specific facilities
qw( LOG_INSTALL LOG_LAUNCHD LOG_NETINFO LOG_RAS LOG_REMOTEAUTH ),
# modern BSD specific facilities
qw( LOG_CONSOLE LOG_NTP LOG_SECURITY ),
# IRIX specific facilities
qw( LOG_AUDIT LOG_LFMT ),
# options
qw(
LOG_CONS LOG_PID LOG_NDELAY LOG_NOWAIT LOG_ODELAY LOG_PERROR
),
# others macros
qw(
LOG_FACMASK LOG_NFACILITIES LOG_PRIMASK
LOG_MASK LOG_UPTO
),
],
);
@EXPORT = (
@{$EXPORT_TAGS{standard}},
);
@EXPORT_OK = (
@{$EXPORT_TAGS{extended}},
@{$EXPORT_TAGS{macros}},
);
eval {
require XSLoader;
XSLoader::load('Sys::Syslog', $VERSION);
1
} or do {
require DynaLoader;
push @ISA, 'DynaLoader';
bootstrap Sys::Syslog $VERSION;
};
}
#
# Constants
#
use constant HAVE_GETPROTOBYNAME => $Config::Config{d_getpbyname};
use constant HAVE_GETPROTOBYNUMBER => $Config::Config{d_getpbynumber};
use constant HAVE_SETLOCALE => $Config::Config{d_setlocale};
use constant HAVE_IPPROTO_TCP => defined &Socket::IPPROTO_TCP ? 1 : 0;
use constant HAVE_IPPROTO_UDP => defined &Socket::IPPROTO_UDP ? 1 : 0;
use constant HAVE_TCP_NODELAY => defined &Socket::TCP_NODELAY ? 1 : 0;
use constant SOCKET_IPPROTO_TCP =>
HAVE_IPPROTO_TCP ? Socket::IPPROTO_TCP
: HAVE_GETPROTOBYNAME ? scalar getprotobyname("tcp")
: 6;
use constant SOCKET_IPPROTO_UDP =>
HAVE_IPPROTO_UDP ? Socket::IPPROTO_UDP
: HAVE_GETPROTOBYNAME ? scalar getprotobyname("udp")
: 17;
use constant SOCKET_TCP_NODELAY => HAVE_TCP_NODELAY ? Socket::TCP_NODELAY : 1;
#
# Public variables
#
use vars qw($host); # host to send syslog messages to (see notes at end)
#
# Prototypes
#
sub silent_eval (&);
#
# Global variables
#
use vars qw($facility);
my $connected = 0; # flag to indicate if we're connected or not
my $syslog_send; # coderef of the function used to send messages
my $syslog_path = undef; # syslog path for "stream" and "unix" mechanisms
my $syslog_xobj = undef; # if defined, holds the external object used to send messages
my $transmit_ok = 0; # flag to indicate if the last message was transmitted
my $sock_port = undef; # socket port
my $sock_timeout = 0; # socket timeout, see below
my $current_proto = undef; # current mechanism used to transmit messages
my $ident = ''; # identifiant prepended to each message
$facility = ''; # current facility
my $maskpri = LOG_UPTO(&LOG_DEBUG); # current log mask
my %options = (
ndelay => 0,
noeol => 0,
nofatal => 0,
nonul => 0,
nowait => 0,
perror => 0,
pid => 0,
);
# Default is now to first use the native mechanism, so Perl programs
# behave like other normal Unix programs, then try other mechanisms.
my @connectMethods = qw(native tcp udp unix pipe stream console);
if ($^O eq "freebsd" or $^O eq "linux") {
@connectMethods = grep { $_ ne 'udp' } @connectMethods;
}
# And on Win32 systems, we try to use the native mechanism for this
# platform, the events logger, available through Win32::EventLog.
EVENTLOG: {
my $verbose_if_Win32 = $^O =~ /Win32/i;
if (can_load_sys_syslog_win32($verbose_if_Win32)) {
unshift @connectMethods, 'eventlog';
}
}
my @defaultMethods = @connectMethods;
my @fallbackMethods = ();
# The timeout in connection_ok() was pushed up to 0.25 sec in
# Sys::Syslog v0.19 in order to address a heisenbug on MacOSX:
# http://london.pm.org/pipermail/london.pm/Week-of-Mon-20061211/005961.html
#
# However, this also had the effect of slowing this test for
# all other operating systems, which apparently impacted some
# users (cf. CPAN-RT #34753). So, in order to make everybody
# happy, the timeout is now zero by default on all systems
# except on OSX where it is set to 250 msec, and can be set
# with the infamous setlogsock() function.
#
# Update 2011-08: this issue is also been seen on multiprocessor
# Debian GNU/kFreeBSD systems. See http://bugs.debian.org/627821
# and https://rt.cpan.org/Ticket/Display.html?id=69997
# Also, lowering the delay to 1 ms, which should be enough.
$sock_timeout = 0.001 if $^O =~ /darwin|gnukfreebsd/;
# Perl 5.6.0's warnings.pm doesn't have warnings::warnif()
if (not defined &warnings::warnif) {
*warnings::warnif = sub {
goto &warnings::warn if warnings::enabled(__PACKAGE__)
}
}
# coderef for a nicer handling of errors
my $err_sub = $options{nofatal} ? \&warnings::warnif : \&croak;
sub AUTOLOAD {
# This AUTOLOAD is used to 'autoload' constants from the constant()
# XS function.
no strict 'vars';
my $constname;
($constname = $AUTOLOAD) =~ s/.*:://;
croak "Sys::Syslog::constant() not defined" if $constname eq 'constant';
my ($error, $val) = constant($constname);
croak $error if $error;
no strict 'refs';
*$AUTOLOAD = sub { $val };
goto &$AUTOLOAD;
}
sub openlog {
($ident, my $logopt, $facility) = @_;
# default values
$ident ||= basename($0) || getlogin() || getpwuid($<) || 'syslog';
$logopt ||= '';
$facility ||= LOG_USER();
for my $opt (split /\b/, $logopt) {
$options{$opt} = 1 if exists $options{$opt}
}
$err_sub = delete $options{nofatal} ? \&warnings::warnif : \&croak;
return 1 unless $options{ndelay};
connect_log();
}
sub closelog {
disconnect_log() if $connected;
$options{$_} = 0 for keys %options;
$facility = $ident = "";
$connected = 0;
return 1
}
sub setlogmask {
my $oldmask = $maskpri;
$maskpri = shift unless $_[0] == 0;
$oldmask;
}
my %mechanism = (
console => {
check => sub { 1 },
},
eventlog => {
check => sub { return can_load_sys_syslog_win32() },
err_msg => "no Win32 API available",
},
inet => {
check => sub { 1 },
},
native => {
check => sub { 1 },
},
pipe => {
check => sub {
($syslog_path) = grep { defined && length && -p && -w _ }
$syslog_path, &_PATH_LOG, "/dev/log";
return $syslog_path ? 1 : 0
},
err_msg => "path not available",
},
stream => {
check => sub {
if (not defined $syslog_path) {
my @try = qw(/dev/log /dev/conslog);
unshift @try, &_PATH_LOG if length &_PATH_LOG;
($syslog_path) = grep { -w } @try;
}
return defined $syslog_path && -w $syslog_path
},
err_msg => "could not find any writable device",
},
tcp => {
check => sub {
return 1 if defined $sock_port;
if (eval { local $SIG{__DIE__};
getservbyname('syslog','tcp') || getservbyname('syslogng','tcp')
}) {
$host = $syslog_path;
return 1
}
else {
return
}
},
err_msg => "TCP service unavailable",
},
udp => {
check => sub {
return 1 if defined $sock_port;
if (eval { local $SIG{__DIE__}; getservbyname('syslog', 'udp') }) {
$host = $syslog_path;
return 1
}
else {
return
}
},
err_msg => "UDP service unavailable",
},
unix => {
check => sub {
my @try = ($syslog_path, &_PATH_LOG);
($syslog_path) = grep { defined && length && -w } @try;
return defined $syslog_path && -w $syslog_path
},
err_msg => "path not available",
},
);
sub setlogsock {
my %opt;
# handle arguments
# - old API: setlogsock($sock_type, $sock_path, $sock_timeout)
# - new API: setlogsock(\%options)
croak "setlogsock(): Invalid number of arguments"
unless @_ >= 1 and @_ <= 3;
if (my $ref = ref $_[0]) {
if ($ref eq "HASH") {
%opt = %{ $_[0] };
croak "setlogsock(): No argument given" unless keys %opt;
}
elsif ($ref eq "ARRAY") {
@opt{qw< type path timeout >} = @_;
}
else {
croak "setlogsock(): Unexpected \L$ref\E reference"
}
}
else {
@opt{qw< type path timeout >} = @_;
}
# check socket type, remove invalid ones
my $diag_invalid_type = "setlogsock(): Invalid type%s; must be one of "
. join ", ", map { "'$_'" } sort keys %mechanism;
croak sprintf $diag_invalid_type, "" unless defined $opt{type};
my @sock_types = ref $opt{type} eq "ARRAY" ? @{$opt{type}} : ($opt{type});
my @tmp;
for my $sock_type (@sock_types) {
carp sprintf $diag_invalid_type, " '$sock_type'" and next
unless exists $mechanism{$sock_type};
push @tmp, "tcp", "udp" and next if $sock_type eq "inet";
push @tmp, $sock_type;
}
@sock_types = @tmp;
# set global options
$syslog_path = $opt{path} if defined $opt{path};
$host = $opt{host} if defined $opt{host};
$sock_timeout = $opt{timeout} if defined $opt{timeout};
$sock_port = $opt{port} if defined $opt{port};
disconnect_log() if $connected;
$transmit_ok = 0;
@fallbackMethods = ();
@connectMethods = ();
my $found = 0;
# check each given mechanism and test if it can be used on the current system
for my $sock_type (@sock_types) {
if ( $mechanism{$sock_type}{check}->() ) {
push @connectMethods, $sock_type;
$found = 1;
}
else {
warnings::warnif("setlogsock(): type='$sock_type': "
. $mechanism{$sock_type}{err_msg});
}
}
# if no mechanism worked from the given ones, use the default ones
@connectMethods = @defaultMethods unless @connectMethods;
return $found;
}
sub syslog {
my ($priority, $mask, @args) = @_;
my ($message, $buf);
my (@words, $num, $numpri, $numfac, $sum);
my $failed = undef;
my $fail_time = undef;
my $error = $!;
# if $ident is undefined, it means openlog() wasn't previously called
# so do it now in order to have sensible defaults
openlog() unless $ident;
local $facility = $facility; # may need to change temporarily.
croak "syslog: expecting argument \$priority" unless defined $priority;
croak "syslog: expecting argument \$format" unless defined $mask;
if ($priority =~ /^\d+$/) {
$numpri = LOG_PRI($priority);
$numfac = LOG_FAC($priority) << 3;
undef $numfac if $numfac == 0; # no facility given => use default
}
elsif ($priority =~ /^\w+/) {
# Allow "level" or "level|facility".
@words = split /\W+/, $priority, 2;
undef $numpri;
undef $numfac;
for my $word (@words) {
next if length $word == 0;
# Translate word to number.
$num = xlate($word);
if ($num < 0) {
croak "syslog: invalid level/facility: $word"
}
elsif ($num <= LOG_PRIMASK() and $word ne "kern") {
croak "syslog: too many levels given: $word"
if defined $numpri;
$numpri = $num;
}
else {
croak "syslog: too many facilities given: $word"
if defined $numfac;
$facility = $word if $word =~ /^[A-Za-z]/;
$numfac = $num;
}
}
}
else {
croak "syslog: invalid level/facility: $priority"
}
croak "syslog: level must be given" unless defined $numpri;
# don't log if priority is below mask level
return 0 unless LOG_MASK($numpri) & $maskpri;
if (not defined $numfac) { # Facility not specified in this call.
$facility = 'user' unless $facility;
$numfac = xlate($facility);
}
connect_log() unless $connected;
if ($mask =~ /%m/) {
# escape percent signs for sprintf()
$error =~ s/%/%%/g if @args;
# replace %m with $error, if preceded by an even number of percent signs
$mask =~ s/(?<!%)((?:%%)*)%m/$1$error/g;
}
# add (or not) a newline
$mask .= "\n" if !$options{noeol} and rindex($mask, "\n") == -1;
$message = @args ? sprintf($mask, @args) : $mask;
if ($current_proto eq 'native') {
$buf = $message;
}
elsif ($current_proto eq 'eventlog') {
$buf = $message;
}
else {
my $whoami = $ident;
$whoami .= "[$$]" if $options{pid};
$sum = $numpri + $numfac;
my $oldlocale;
if (HAVE_SETLOCALE) {
$oldlocale = setlocale(LC_TIME);
setlocale(LC_TIME, 'C');
}
# %e format isn't available on all systems (Win32, cf. CPAN RT #69310)
my $day = strftime "%e", localtime;
if (index($day, "%") == 0) {
$day = strftime "%d", localtime;
$day =~ s/^0/ /;
}
my $timestamp = strftime "%b $day %H:%M:%S", localtime;
setlocale(LC_TIME, $oldlocale) if HAVE_SETLOCALE;
# construct the stream that will be transmitted
$buf = "<$sum>$timestamp $whoami: $message";
# add (or not) a NUL character
$buf .= "\0" if !$options{nonul};
}
# handle PERROR option
# "native" mechanism already handles it by itself
if ($options{perror} and $current_proto ne 'native') {
my $whoami = $ident;
$whoami .= "[$$]" if $options{pid};
print STDERR "$whoami: $message";
print STDERR "\n" if rindex($message, "\n") == -1;
}
# it's possible that we'll get an error from sending
# (e.g. if method is UDP and there is no UDP listener,
# then we'll get ECONNREFUSED on the send). So what we
# want to do at this point is to fallback onto a different
# connection method.
while (scalar @fallbackMethods || $syslog_send) {
if ($failed && (time - $fail_time) > 60) {
# it's been a while... maybe things have been fixed
@fallbackMethods = ();
disconnect_log();
$transmit_ok = 0; # make it look like a fresh attempt
connect_log();
}
if ($connected && !connection_ok()) {
# Something was OK, but has now broken. Remember coz we'll
# want to go back to what used to be OK.
$failed = $current_proto unless $failed;
$fail_time = time;
disconnect_log();
}
connect_log() unless $connected;
$failed = undef if ($current_proto && $failed && $current_proto eq $failed);
if ($syslog_send) {
if ($syslog_send->($buf, $numpri, $numfac)) {
$transmit_ok++;
return 1;
}
# typically doesn't happen, since errors are rare from write().
disconnect_log();
}
}
# could not send, could not fallback onto a working
# connection method. Lose.
return 0;
}
sub _syslog_send_console {
my ($buf) = @_;
# The console print is a method which could block
# so we do it in a child process and always return success
# to the caller.
if (my $pid = fork) {
if ($options{nowait}) {
return 1;
} else {
if (waitpid($pid, 0) >= 0) {
return ($? >> 8);
} else {
# it's possible that the caller has other
# plans for SIGCHLD, so let's not interfere
return 1;
}
}
} else {
if (open(CONS, ">/dev/console")) {
my $ret = print CONS $buf . "\r"; # XXX: should this be \x0A ?
POSIX::_exit($ret) if defined $pid;
close CONS;
}
POSIX::_exit(0) if defined $pid;
}
}
sub _syslog_send_stream {
my ($buf) = @_;
# XXX: this only works if the OS stream implementation makes a write
# look like a putmsg() with simple header. For instance it works on
# Solaris 8 but not Solaris 7.
# To be correct, it should use a STREAMS API, but perl doesn't have one.
return syswrite(SYSLOG, $buf, length($buf));
}
sub _syslog_send_pipe {
my ($buf) = @_;
return print SYSLOG $buf;
}
sub _syslog_send_socket {
my ($buf) = @_;
return syswrite(SYSLOG, $buf, length($buf));
#return send(SYSLOG, $buf, 0);
}
sub _syslog_send_native {
my ($buf, $numpri, $numfac) = @_;
syslog_xs($numpri|$numfac, $buf);
return 1;
}
# xlate()
# -----
# private function to translate names to numeric values
#
sub xlate {
my ($name) = @_;
return $name+0 if $name =~ /^\s*\d+\s*$/;
$name = uc $name;
$name = "LOG_$name" unless $name =~ /^LOG_/;
# ExtUtils::Constant 0.20 introduced a new way to implement
# constants, called ProxySubs. When it was used to generate
# the C code, the constant() function no longer returns the
# correct value. Therefore, we first try a direct call to
# constant(), and if the value is an error we try to call the
# constant by its full name.
my $value = constant($name);
if (index($value, "not a valid") >= 0) {
$name = "Sys::Syslog::$name";
$value = eval { no strict "refs"; &$name };
$value = $@ unless defined $value;
}
$value = -1 if index($value, "not a valid") >= 0;
return defined $value ? $value : -1;
}
# connect_log()
# -----------
# This function acts as a kind of front-end: it tries to connect to
# a syslog service using the selected methods, trying each one in the
# selected order.
#
sub connect_log {
@fallbackMethods = @connectMethods unless scalar @fallbackMethods;
if ($transmit_ok && $current_proto) {
# Retry what we were on, because it has worked in the past.
unshift(@fallbackMethods, $current_proto);
}
$connected = 0;
my @errs = ();
my $proto = undef;
while ($proto = shift @fallbackMethods) {
no strict 'refs';
my $fn = "connect_$proto";
$connected = &$fn(\@errs) if defined &$fn;
last if $connected;
}
$transmit_ok = 0;
if ($connected) {
$current_proto = $proto;
my ($old) = select(SYSLOG); $| = 1; select($old);
} else {
@fallbackMethods = ();
$err_sub->(join "\n\t- ", "no connection to syslog available", @errs);
return undef;
}
}
sub connect_tcp {
my ($errs) = @_;
my $port = $sock_port
|| eval { local $SIG{__DIE__}; getservbyname('syslog', 'tcp') }
|| eval { local $SIG{__DIE__}; getservbyname('syslogng', 'tcp') };
if (!defined $port) {
push @$errs, "getservbyname failed for syslog/tcp and syslogng/tcp";
return 0;
}
my $addr;
if (defined $host) {
$addr = inet_aton($host);
if (!$addr) {
push @$errs, "can't lookup $host";
return 0;
}
} else {
$addr = INADDR_LOOPBACK;
}
$addr = sockaddr_in($port, $addr);
if (!socket(SYSLOG, AF_INET, SOCK_STREAM, SOCKET_IPPROTO_TCP)) {
push @$errs, "tcp socket: $!";
return 0;
}
setsockopt(SYSLOG, SOL_SOCKET, SO_KEEPALIVE, 1);
setsockopt(SYSLOG, SOCKET_IPPROTO_TCP, SOCKET_TCP_NODELAY, 1);
if (!connect(SYSLOG, $addr)) {
push @$errs, "tcp connect: $!";
return 0;
}
$syslog_send = \&_syslog_send_socket;
return 1;
}
sub connect_udp {
my ($errs) = @_;
my $port = $sock_port
|| eval { local $SIG{__DIE__}; getservbyname('syslog', 'udp') };
if (!defined $port) {
push @$errs, "getservbyname failed for syslog/udp";
return 0;
}
my $addr;
if (defined $host) {
$addr = inet_aton($host);
if (!$addr) {
push @$errs, "can't lookup $host";
return 0;
}
} else {
$addr = INADDR_LOOPBACK;
}
$addr = sockaddr_in($port, $addr);
if (!socket(SYSLOG, AF_INET, SOCK_DGRAM, SOCKET_IPPROTO_UDP)) {
push @$errs, "udp socket: $!";
return 0;
}
if (!connect(SYSLOG, $addr)) {
push @$errs, "udp connect: $!";
return 0;
}
# We want to check that the UDP connect worked. However the only
# way to do that is to send a message and see if an ICMP is returned
_syslog_send_socket("");
if (!connection_ok()) {
push @$errs, "udp connect: nobody listening";
return 0;
}
$syslog_send = \&_syslog_send_socket;
return 1;
}
sub connect_stream {
my ($errs) = @_;
# might want syslog_path to be variable based on syslog.h (if only
# it were in there!)
$syslog_path = '/dev/conslog' unless defined $syslog_path;
if (!-w $syslog_path) {
push @$errs, "stream $syslog_path is not writable";
return 0;
}
require Fcntl;
if (!sysopen(SYSLOG, $syslog_path, Fcntl::O_WRONLY(), 0400)) {
push @$errs, "stream can't open $syslog_path: $!";
return 0;
}
$syslog_send = \&_syslog_send_stream;
return 1;
}
sub connect_pipe {
my ($errs) = @_;
$syslog_path ||= &_PATH_LOG || "/dev/log";
if (not -w $syslog_path) {
push @$errs, "$syslog_path is not writable";
return 0;
}
if (not open(SYSLOG, ">$syslog_path")) {
push @$errs, "can't write to $syslog_path: $!";
return 0;
}
$syslog_send = \&_syslog_send_pipe;
return 1;
}
sub connect_unix {
my ($errs) = @_;
$syslog_path ||= _PATH_LOG() if length _PATH_LOG();
if (not defined $syslog_path) {
push @$errs, "_PATH_LOG not available in syslog.h and no user-supplied socket path";
return 0;
}
if (not (-S $syslog_path or -c _)) {
push @$errs, "$syslog_path is not a socket";
return 0;
}
my $addr = sockaddr_un($syslog_path);
if (!$addr) {
push @$errs, "can't locate $syslog_path";
return 0;
}
if (!socket(SYSLOG, AF_UNIX, SOCK_STREAM, 0)) {
push @$errs, "unix stream socket: $!";
return 0;
}
if (!connect(SYSLOG, $addr)) {
if (!socket(SYSLOG, AF_UNIX, SOCK_DGRAM, 0)) {
push @$errs, "unix dgram socket: $!";
return 0;
}
if (!connect(SYSLOG, $addr)) {
push @$errs, "unix dgram connect: $!";
return 0;
}
}
$syslog_send = \&_syslog_send_socket;
return 1;
}
sub connect_native {
my ($errs) = @_;
my $logopt = 0;
# reconstruct the numeric equivalent of the options
for my $opt (keys %options) {
$logopt += xlate($opt) if $options{$opt}
}
openlog_xs($ident, $logopt, xlate($facility));
$syslog_send = \&_syslog_send_native;
return 1;
}
sub connect_eventlog {
my ($errs) = @_;
$syslog_xobj = Sys::Syslog::Win32::_install();
$syslog_send = \&Sys::Syslog::Win32::_syslog_send;
return 1;
}
sub connect_console {
my ($errs) = @_;
if (!-w '/dev/console') {
push @$errs, "console is not writable";
return 0;
}
$syslog_send = \&_syslog_send_console;
return 1;
}
# To test if the connection is still good, we need to check if any
# errors are present on the connection. The errors will not be raised
# by a write. Instead, sockets are made readable and the next read
# would cause the error to be returned. Unfortunately the syslog
# 'protocol' never provides anything for us to read. But with
# judicious use of select(), we can see if it would be readable...
sub connection_ok {
return 1 if defined $current_proto and (
$current_proto eq 'native' or $current_proto eq 'console'
or $current_proto eq 'eventlog'
);
my $rin = '';
vec($rin, fileno(SYSLOG), 1) = 1;
my $ret = select $rin, undef, $rin, $sock_timeout;
return ($ret ? 0 : 1);
}
sub disconnect_log {
$connected = 0;
$syslog_send = undef;
if (defined $current_proto and $current_proto eq 'native') {
closelog_xs();
unshift @fallbackMethods, $current_proto;
$current_proto = undef;
return 1;
}
elsif (defined $current_proto and $current_proto eq 'eventlog') {
$syslog_xobj->Close();
unshift @fallbackMethods, $current_proto;
$current_proto = undef;
return 1;
}
return close SYSLOG;
}
#
# Wrappers around eval() that makes sure that nobody, ever knows that
# we wanted to poke & test if something was here or not. This is needed
# because some applications are trying to be too smart, install their
# own __DIE__ handler, and mysteriously, things are starting to fail
# when they shouldn't. SpamAssassin among them.
#
sub silent_eval (&) {
local($SIG{__DIE__}, $SIG{__WARN__}, $@);
return eval { $_[0]->() }
}
sub can_load_sys_syslog_win32 {
my ($verbose) = @_;
local($SIG{__DIE__}, $SIG{__WARN__}, $@);
(my $module_path = __FILE__) =~ s:Syslog.pm$:Syslog/Win32.pm:;
my $loaded = eval { require $module_path } ? 1 : 0;
warn $@ if not $loaded and $verbose;
return $loaded
}
"Eighth Rule: read the documentation."
__END__
=head1 NAME
Sys::Syslog - Perl interface to the UNIX syslog(3) calls
=head1 VERSION
This is the documentation of version 0.35
=head1 SYNOPSIS
use Sys::Syslog; # all except setlogsock()
use Sys::Syslog qw(:standard :macros); # standard functions & macros
openlog($ident, $logopt, $facility); # don't forget this
syslog($priority, $format, @args);
$oldmask = setlogmask($mask_priority);
closelog();
=head1 DESCRIPTION
C<Sys::Syslog> is an interface to the UNIX C<syslog(3)> program.
Call C<syslog()> with a string priority and a list of C<printf()> args
just like C<syslog(3)>.
=head1 EXPORTS
C<Sys::Syslog> exports the following C<Exporter> tags:
=over 4
=item *
C<:standard> exports the standard C<syslog(3)> functions:
openlog closelog setlogmask syslog
=item *
C<:extended> exports the Perl specific functions for C<syslog(3)>:
setlogsock
=item *
C<:macros> exports the symbols corresponding to most of your C<syslog(3)>
macros and the C<LOG_UPTO()> and C<LOG_MASK()> functions.
See L<"CONSTANTS"> for the supported constants and their meaning.
=back
By default, C<Sys::Syslog> exports the symbols from the C<:standard> tag.
=head1 FUNCTIONS
=over 4
=item B<openlog($ident, $logopt, $facility)>
Opens the syslog.
C<$ident> is prepended to every message. C<$logopt> contains zero or
more of the options detailed below. C<$facility> specifies the part
of the system to report about, for example C<LOG_USER> or C<LOG_LOCAL0>:
see L<"Facilities"> for a list of well-known facilities, and your
C<syslog(3)> documentation for the facilities available in your system.
Check L<"SEE ALSO"> for useful links. Facility can be given as a string
or a numeric macro.
This function will croak if it can't connect to the syslog daemon.
Note that C<openlog()> now takes three arguments, just like C<openlog(3)>.
B<You should use C<openlog()> before calling C<syslog()>.>
B<Options>
=over 4
=item *
C<cons> - This option is ignored, since the failover mechanism will drop
down to the console automatically if all other media fail.
=item *
C<ndelay> - Open the connection immediately (normally, the connection is
opened when the first message is logged).
=item *
C<noeol> - When set to true, no end of line character (C<\n>) will be
appended to the message. This can be useful for some syslog daemons.
Added in C<Sys::Syslog> 0.29.
=item *
C<nofatal> - When set to true, C<openlog()> and C<syslog()> will only
emit warnings instead of dying if the connection to the syslog can't
be established. Added in C<Sys::Syslog> 0.15.
=item *
C<nonul> - When set to true, no C<NUL> character (C<\0>) will be
appended to the message. This can be useful for some syslog daemons.
Added in C<Sys::Syslog> 0.29.
=item *
C<nowait> - Don't wait for child processes that may have been created
while logging the message. (The GNU C library does not create a child
process, so this option has no effect on Linux.)
=item *
C<perror> - Write the message to standard error output as well to the
system log. Added in C<Sys::Syslog> 0.22.
=item *
C<pid> - Include PID with each message.
=back
B<Examples>
Open the syslog with options C<ndelay> and C<pid>, and with facility C<LOCAL0>:
openlog($name, "ndelay,pid", "local0");
Same thing, but this time using the macro corresponding to C<LOCAL0>:
openlog($name, "ndelay,pid", LOG_LOCAL0);
=item B<syslog($priority, $message)>
=item B<syslog($priority, $format, @args)>
If C<$priority> permits, logs C<$message> or C<sprintf($format, @args)>
with the addition that C<%m> in $message or C<$format> is replaced with
C<"$!"> (the latest error message).
C<$priority> can specify a level, or a level and a facility. Levels and
facilities can be given as strings or as macros. When using the C<eventlog>
mechanism, priorities C<DEBUG> and C<INFO> are mapped to event type
C<informational>, C<NOTICE> and C<WARNING> to C<warning> and C<ERR> to
C<EMERG> to C<error>.
If you didn't use C<openlog()> before using C<syslog()>, C<syslog()> will
try to guess the C<$ident> by extracting the shortest prefix of
C<$format> that ends in a C<":">.
B<Examples>
# informational level
syslog("info", $message);
syslog(LOG_INFO, $message);
# information level, Local0 facility
syslog("info|local0", $message);
syslog(LOG_INFO|LOG_LOCAL0, $message);
=over 4
=item B<Note>
C<Sys::Syslog> version v0.07 and older passed the C<$message> as the
formatting string to C<sprintf()> even when no formatting arguments
were provided. If the code calling C<syslog()> might execute with
older versions of this module, make sure to call the function as
C<syslog($priority, "%s", $message)> instead of C<syslog($priority,
$message)>. This protects against hostile formatting sequences that
might show up if $message contains tainted data.
=back
=item B<setlogmask($mask_priority)>
Sets the log mask for the current process to C<$mask_priority> and
returns the old mask. If the mask argument is 0, the current log mask
is not modified. See L<"Levels"> for the list of available levels.
You can use the C<LOG_UPTO()> function to allow all levels up to a
given priority (but it only accept the numeric macros as arguments).
B<Examples>
Only log errors:
setlogmask( LOG_MASK(LOG_ERR) );
Log everything except informational messages:
setlogmask( ~(LOG_MASK(LOG_INFO)) );
Log critical messages, errors and warnings:
setlogmask( LOG_MASK(LOG_CRIT)
| LOG_MASK(LOG_ERR)
| LOG_MASK(LOG_WARNING) );
Log all messages up to debug:
setlogmask( LOG_UPTO(LOG_DEBUG) );
=item B<setlogsock()>
Sets the socket type and options to be used for the next call to C<openlog()>
or C<syslog()>. Returns true on success, C<undef> on failure.
Being Perl-specific, this function has evolved along time. It can currently
be called as follow:
=over
=item *
C<setlogsock($sock_type)>
=item *
C<setlogsock($sock_type, $stream_location)> (added in Perl 5.004_02)
=item *
C<setlogsock($sock_type, $stream_location, $sock_timeout)> (added in
C<Sys::Syslog> 0.25)
=item *
C<setlogsock(\%options)> (added in C<Sys::Syslog> 0.28)
=back
The available options are:
=over
=item *
C<type> - equivalent to C<$sock_type>, selects the socket type (or
"mechanism"). An array reference can be passed to specify several
mechanisms to try, in the given order.
=item *
C<path> - equivalent to C<$stream_location>, sets the stream location.
Defaults to standard Unix location, or C<_PATH_LOG>.
=item *
C<timeout> - equivalent to C<$sock_timeout>, sets the socket timeout
in seconds. Defaults to 0 on all systems except S<Mac OS X> where it
is set to 0.25 sec.
=item *
C<host> - sets the hostname to send the messages to. Defaults to
the local host.
=item *
C<port> - sets the TCP or UDP port to connect to. Defaults to the
first standard syslog port available on the system.
=back
The available mechanisms are:
=over
=item *
C<"native"> - use the native C functions from your C<syslog(3)> library
(added in C<Sys::Syslog> 0.15).
=item *
C<"eventlog"> - send messages to the Win32 events logger (Win32 only;
added in C<Sys::Syslog> 0.19).
=item *
C<"tcp"> - connect to a TCP socket, on the C<syslog/tcp> or C<syslogng/tcp>
service. See also the C<host>, C<port> and C<timeout> options.
=item *
C<"udp"> - connect to a UDP socket, on the C<syslog/udp> service.
See also the C<host>, C<port> and C<timeout> options.
=item *
C<"inet"> - connect to an INET socket, either TCP or UDP, tried in that
order. See also the C<host>, C<port> and C<timeout> options.
=item *
C<"unix"> - connect to a UNIX domain socket (in some systems a character
special device). The name of that socket is given by the C<path> option
or, if omitted, the value returned by the C<_PATH_LOG> macro (if your
system defines it), F</dev/log> or F</dev/conslog>, whichever is writable.
=item *
C<"stream"> - connect to the stream indicated by the C<path> option, or,
if omitted, the value returned by the C<_PATH_LOG> macro (if your system
defines it), F</dev/log> or F</dev/conslog>, whichever is writable. For
example Solaris and IRIX system may prefer C<"stream"> instead of C<"unix">.
=item *
C<"pipe"> - connect to the named pipe indicated by the C<path> option,
or, if omitted, to the value returned by the C<_PATH_LOG> macro (if your
system defines it), or F</dev/log> (added in C<Sys::Syslog> 0.21).
HP-UX is a system which uses such a named pipe.
=item *
C<"console"> - send messages directly to the console, as for the C<"cons">
option of C<openlog()>.
=back
The default is to try C<native>, C<tcp>, C<udp>, C<unix>, C<pipe>, C<stream>,
C<console>.
Under systems with the Win32 API, C<eventlog> will be added as the first
mechanism to try if C<Win32::EventLog> is available.
Giving an invalid value for C<$sock_type> will C<croak>.
B<Examples>
Select the UDP socket mechanism:
setlogsock("udp");
Send messages using the TCP socket mechanism on a custom port:
setlogsock({ type => "tcp", port => 2486 });
Send messages to a remote host using the TCP socket mechanism:
setlogsock({ type => "tcp", host => $loghost });
Try the native, UDP socket then UNIX domain socket mechanisms:
setlogsock(["native", "udp", "unix"]);
=over
=item B<Note>
Now that the "native" mechanism is supported by C<Sys::Syslog> and selected
by default, the use of the C<setlogsock()> function is discouraged because
other mechanisms are less portable across operating systems. Authors of
modules and programs that use this function, especially its cargo-cult form
C<setlogsock("unix")>, are advised to remove any occurrence of it unless they
specifically want to use a given mechanism (like TCP or UDP to connect to
a remote host).
=back
=item B<closelog()>
Closes the log file and returns true on success.
=back
=head1 THE RULES OF SYS::SYSLOG
I<The First Rule of Sys::Syslog is:>
You do not call C<setlogsock>.
I<The Second Rule of Sys::Syslog is:>
You B<do not> call C<setlogsock>.
I<The Third Rule of Sys::Syslog is:>
The program crashes, C<die>s, calls C<closelog>, the log is over.
I<The Fourth Rule of Sys::Syslog is:>
One facility, one priority.
I<The Fifth Rule of Sys::Syslog is:>
One log at a time.
I<The Sixth Rule of Sys::Syslog is:>
No C<syslog> before C<openlog>.
I<The Seventh Rule of Sys::Syslog is:>
Logs will go on as long as they have to.
I<The Eighth, and Final Rule of Sys::Syslog is:>
If this is your first use of Sys::Syslog, you must read the doc.
=head1 EXAMPLES
An example:
openlog($program, 'cons,pid', 'user');
syslog('info', '%s', 'this is another test');
syslog('mail|warning', 'this is a better test: %d', time);
closelog();
syslog('debug', 'this is the last test');
Another example:
openlog("$program $$", 'ndelay', 'user');
syslog('notice', 'fooprogram: this is really done');
Example of use of C<%m>:
$! = 55;
syslog('info', 'problem was %m'); # %m == $! in syslog(3)
Log to UDP port on C<$remotehost> instead of logging locally:
setlogsock("udp", $remotehost);
openlog($program, 'ndelay', 'user');
syslog('info', 'something happened over here');
=head1 CONSTANTS
=head2 Facilities
=over 4
=item *
C<LOG_AUDIT> - audit daemon (IRIX); falls back to C<LOG_AUTH>
=item *
C<LOG_AUTH> - security/authorization messages
=item *
C<LOG_AUTHPRIV> - security/authorization messages (private)
=item *
C<LOG_CONSOLE> - C</dev/console> output (FreeBSD); falls back to C<LOG_USER>
=item *
C<LOG_CRON> - clock daemons (B<cron> and B<at>)
=item *
C<LOG_DAEMON> - system daemons without separate facility value
=item *
C<LOG_FTP> - FTP daemon
=item *
C<LOG_KERN> - kernel messages
=item *
C<LOG_INSTALL> - installer subsystem (Mac OS X); falls back to C<LOG_USER>
=item *
C<LOG_LAUNCHD> - launchd - general bootstrap daemon (Mac OS X);
falls back to C<LOG_DAEMON>
=item *
C<LOG_LFMT> - logalert facility; falls back to C<LOG_USER>
=item *
C<LOG_LOCAL0> through C<LOG_LOCAL7> - reserved for local use
=item *
C<LOG_LPR> - line printer subsystem
=item *
C<LOG_MAIL> - mail subsystem
=item *
C<LOG_NETINFO> - NetInfo subsystem (Mac OS X); falls back to C<LOG_DAEMON>
=item *
C<LOG_NEWS> - USENET news subsystem
=item *
C<LOG_NTP> - NTP subsystem (FreeBSD, NetBSD); falls back to C<LOG_DAEMON>
=item *
C<LOG_RAS> - Remote Access Service (VPN / PPP) (Mac OS X);
falls back to C<LOG_AUTH>
=item *
C<LOG_REMOTEAUTH> - remote authentication/authorization (Mac OS X);
falls back to C<LOG_AUTH>
=item *
C<LOG_SECURITY> - security subsystems (firewalling, etc.) (FreeBSD);
falls back to C<LOG_AUTH>
=item *
C<LOG_SYSLOG> - messages generated internally by B<syslogd>
=item *
C<LOG_USER> (default) - generic user-level messages
=item *
C<LOG_UUCP> - UUCP subsystem
=back
=head2 Levels
=over 4
=item *
C<LOG_EMERG> - system is unusable
=item *
C<LOG_ALERT> - action must be taken immediately
=item *
C<LOG_CRIT> - critical conditions
=item *
C<LOG_ERR> - error conditions
=item *
C<LOG_WARNING> - warning conditions
=item *
C<LOG_NOTICE> - normal, but significant, condition
=item *
C<LOG_INFO> - informational message
=item *
C<LOG_DEBUG> - debug-level message
=back
=head1 DIAGNOSTICS
=over
=item C<Invalid argument passed to setlogsock>
B<(F)> You gave C<setlogsock()> an invalid value for C<$sock_type>.
=item C<eventlog passed to setlogsock, but no Win32 API available>
B<(W)> You asked C<setlogsock()> to use the Win32 event logger but the
operating system running the program isn't Win32 or does not provides Win32
compatible facilities.
=item C<no connection to syslog available>
B<(F)> C<syslog()> failed to connect to the specified socket.
=item C<stream passed to setlogsock, but %s is not writable>
B<(W)> You asked C<setlogsock()> to use a stream socket, but the given
path is not writable.
=item C<stream passed to setlogsock, but could not find any device>
B<(W)> You asked C<setlogsock()> to use a stream socket, but didn't
provide a path, and C<Sys::Syslog> was unable to find an appropriate one.
=item C<tcp passed to setlogsock, but tcp service unavailable>
B<(W)> You asked C<setlogsock()> to use a TCP socket, but the service
is not available on the system.
=item C<syslog: expecting argument %s>
B<(F)> You forgot to give C<syslog()> the indicated argument.
=item C<syslog: invalid level/facility: %s>
B<(F)> You specified an invalid level or facility.
=item C<syslog: too many levels given: %s>
B<(F)> You specified too many levels.
=item C<syslog: too many facilities given: %s>
B<(F)> You specified too many facilities.
=item C<syslog: level must be given>
B<(F)> You forgot to specify a level.
=item C<udp passed to setlogsock, but udp service unavailable>
B<(W)> You asked C<setlogsock()> to use a UDP socket, but the service
is not available on the system.
=item C<unix passed to setlogsock, but path not available>
B<(W)> You asked C<setlogsock()> to use a UNIX socket, but C<Sys::Syslog>
was unable to find an appropriate an appropriate device.
=back
=head1 HISTORY
C<Sys::Syslog> is a core module, part of the standard Perl distribution
since 1990. At this time, modules as we know them didn't exist, the
Perl library was a collection of F<.pl> files, and the one for sending
syslog messages with was simply F<lib/syslog.pl>, included with Perl 3.0.
It was converted as a module with Perl 5.0, but had a version number
only starting with Perl 5.6. Here is a small table with the matching
Perl and C<Sys::Syslog> versions.
Sys::Syslog Perl
----------- ----
undef 5.0.0 ~ 5.5.4
0.01 5.6.*
0.03 5.8.0
0.04 5.8.1, 5.8.2, 5.8.3
0.05 5.8.4, 5.8.5, 5.8.6
0.06 5.8.7
0.13 5.8.8
0.22 5.10.0
0.27 5.8.9, 5.10.1 ~ 5.14.*
0.29 5.16.*
0.32 5.18.*
0.33 5.20.*
0.33 5.22.*
=head1 SEE ALSO
=head2 Other modules
L<Log::Log4perl> - Perl implementation of the Log4j API
L<Log::Dispatch> - Dispatches messages to one or more outputs
L<Log::Report> - Report a problem, with exceptions and language support
=head2 Manual Pages
L<syslog(3)>
SUSv3 issue 6, IEEE Std 1003.1, 2004 edition,
L<http://www.opengroup.org/onlinepubs/000095399/basedefs/syslog.h.html>
GNU C Library documentation on syslog,
L<http://www.gnu.org/software/libc/manual/html_node/Syslog.html>
FreeBSD documentation on syslog,
L<https://www.freebsd.org/cgi/man.cgi?query=syslog>
Solaris 11 documentation on syslog,
L<https://docs.oracle.com/cd/E53394_01/html/E54766/syslog-3c.html>
Mac OS X documentation on syslog,
L<http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/syslog.3.html>
IRIX documentation on syslog,
L<http://nixdoc.net/man-pages/IRIX/man3/syslog.3c.html>
AIX 5L 5.3 documentation on syslog,
L<http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf2/syslog.htm>
HP-UX 11i documentation on syslog,
L<http://docs.hp.com/en/B2355-60130/syslog.3C.html>
Tru64 documentation on syslog,
L<http://nixdoc.net/man-pages/Tru64/man3/syslog.3.html>
Stratus VOS 15.1,
L<http://stratadoc.stratus.com/vos/15.1.1/r502-01/wwhelp/wwhimpl/js/html/wwhelp.htm?context=r502-01&file=ch5r502-01bi.html>
=head2 RFCs
I<RFC 3164 - The BSD syslog Protocol>, L<http://www.faqs.org/rfcs/rfc3164.html>
-- Please note that this is an informational RFC, and therefore does not
specify a standard of any kind.
I<RFC 3195 - Reliable Delivery for syslog>, L<http://www.faqs.org/rfcs/rfc3195.html>
=head2 Articles
I<Syslogging with Perl>, L<http://lexington.pm.org/meetings/022001.html>
=head2 Event Log
Windows Event Log,
L<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wes/wes/windows_event_log.asp>
=head1 AUTHORS & ACKNOWLEDGEMENTS
Tom Christiansen E<lt>F<tchrist (at) perl.com>E<gt> and Larry Wall
E<lt>F<larry (at) wall.org>E<gt>.
UNIX domain sockets added by Sean Robinson
E<lt>F<robinson_s (at) sc.maricopa.edu>E<gt> with support from Tim Bunce
E<lt>F<Tim.Bunce (at) ig.co.uk>E<gt> and the C<perl5-porters> mailing list.
Dependency on F<syslog.ph> replaced with XS code by Tom Hughes
E<lt>F<tom (at) compton.nu>E<gt>.
Code for C<constant()>s regenerated by Nicholas Clark E<lt>F<nick (at) ccl4.org>E<gt>.
Failover to different communication modes by Nick Williams
E<lt>F<Nick.Williams (at) morganstanley.com>E<gt>.
Extracted from core distribution for publishing on the CPAN by
SE<eacute>bastien Aperghis-Tramoni E<lt>sebastien (at) aperghis.netE<gt>.
XS code for using native C functions borrowed from C<L<Unix::Syslog>>,
written by Marcus Harnisch E<lt>F<marcus.harnisch (at) gmx.net>E<gt>.
Yves Orton suggested and helped for making C<Sys::Syslog> use the native
event logger under Win32 systems.
Jerry D. Hedden and Reini Urban provided greatly appreciated help to
debug and polish C<Sys::Syslog> under Cygwin.
=head1 BUGS
Please report any bugs or feature requests to
C<bug-sys-syslog (at) rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org/Public/Dist/Display.html?Name=Sys-Syslog>.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Sys::Syslog
You can also look for information at:
=over
=item * Perl Documentation
L<http://perldoc.perl.org/Sys/Syslog.html>
=item * MetaCPAN
L<https://metacpan.org/module/Sys::Syslog>
=item * Search CPAN
L<http://search.cpan.org/dist/Sys-Syslog/>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/Sys-Syslog>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/Sys-Syslog>
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/Dist/Display.html?Queue=Sys-Syslog>
=back
The source code is available on Git Hub:
L<https://github.com/maddingue/Sys-Syslog/>
=head1 COPYRIGHT
Copyright (C) 1990-2012 by Larry Wall and others.
=head1 LICENSE
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
=begin comment
Notes for the future maintainer (even if it's still me..)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Using Google Code Search, I search who on Earth was relying on $host being
public. It found 5 hits:
* First was inside Indigo Star Perl2exe documentation. Just an old version
of Sys::Syslog.
* One real hit was inside DalWeathDB, a weather related program. It simply
does a
$Sys::Syslog::host = '127.0.0.1';
- L<http://www.gallistel.net/nparker/weather/code/>
* Two hits were in TPC, a fax server thingy. It does a
$Sys::Syslog::host = $TPC::LOGHOST;
but also has this strange piece of code:
# work around perl5.003 bug
sub Sys::Syslog::hostname {}
I don't know what bug the author referred to.
- L<http://www.tpc.int/>
- L<ftp://ftp-usa.tpc.int/pub/tpc/server/UNIX/>
* Last hit was in Filefix, which seems to be a FIDOnet mail program (!).
This one does not use $host, but has the following piece of code:
sub Sys::Syslog::hostname
{
use Sys::Hostname;
return hostname;
}
I guess this was a more elaborate form of the previous bit, maybe because
of a bug in Sys::Syslog back then?
- L<ftp://ftp.kiae.su/pub/unix/fido/>
Links
-----
Linux Fast-STREAMS
- L<http://www.openss7.org/streams.html>
II12021: SYSLOGD HOWTO TCPIPINFO (z/OS, OS/390, MVS)
- L<http://www-1.ibm.com/support/docview.wss?uid=isg1II12021>
Getting the most out of the Event Viewer
- L<http://www.codeproject.com/dotnet/evtvwr.asp?print=true>
Log events to the Windows NT Event Log with JNI
- L<http://www.javaworld.com/javaworld/jw-09-2001/jw-0928-ntmessages.html>
=end comment
Net/SSL.pm 0000644 00000040771 15033552504 0006304 0 ustar 00 package Net::SSL;
use strict;
use MIME::Base64;
use Socket;
use Carp;
use vars qw(@ISA $VERSION $NEW_ARGS);
$VERSION = '2.86';
$VERSION = eval $VERSION;
require IO::Socket;
@ISA=qw(IO::Socket::INET);
my %REAL; # private to this package only
my $DEFAULT_VERSION = '23';
my $CRLF = "\015\012";
my $SEND_USERAGENT_TO_PROXY = 0;
require Crypt::SSLeay;
sub _default_context {
require Crypt::SSLeay::MainContext;
Crypt::SSLeay::MainContext::main_ctx(@_);
}
sub _alarm_set {
return if $^O eq 'MSWin32' or $^O eq 'NetWare';
alarm(shift);
}
sub new {
my($class, %arg) = @_;
local $NEW_ARGS = \%arg;
$class->SUPER::new(%arg);
}
sub DESTROY {
my $self = shift;
delete $REAL{$self};
local $@;
eval { $self->SUPER::DESTROY; };
}
sub configure {
my($self, $arg) = @_;
my $ssl_version = delete $arg->{SSL_Version} ||
$ENV{HTTPS_VERSION} || $DEFAULT_VERSION;
my $ssl_debug = delete $arg->{SSL_Debug} || $ENV{HTTPS_DEBUG} || 0;
my $ctx = delete $arg->{SSL_Context} || _default_context($ssl_version);
*$self->{ssl_ctx} = $ctx;
*$self->{ssl_version} = $ssl_version;
*$self->{ssl_debug} = $ssl_debug;
*$self->{ssl_arg} = $arg;
*$self->{ssl_peer_addr} = $arg->{PeerAddr};
*$self->{ssl_peer_port} = $arg->{PeerPort};
*$self->{ssl_new_arg} = $NEW_ARGS;
*$self->{ssl_peer_verify} = 0;
## Crypt::SSLeay must also aware the SSL Proxy before calling
## $socket->configure($args). Because the $sock->configure() will
## die when failed to resolve the destination server IP address,
## whether the SSL proxy is used or not!
## - dqbai, 2003-05-10
if (my $proxy = $self->proxy) {
($arg->{PeerAddr}, $arg->{PeerPort}) = split(':',$proxy);
$arg->{PeerPort} || croak("no port given for proxy server $proxy");
}
$self->SUPER::configure($arg);
}
# override to make sure there is really a timeout
sub timeout {
shift->SUPER::timeout || 60;
}
sub blocking {
my $self = shift;
$self->SUPER::blocking(@_);
}
sub connect {
my $self = shift;
# configure certs on connect() time, so we can throw an undef
# and have LWP understand the error
eval { $self->configure_certs() };
if($@) {
$@ = "configure certs failed: $@; $!";
$self->die_with_error($@);
}
# finished, update set_verify status
if(my $rv = *$self->{ssl_ctx}->set_verify()) {
*$self->{ssl_peer_verify} = $rv;
}
if ($self->proxy) {
# don't die() in connect, just return undef and set $@
my $proxy_connect = eval { $self->proxy_connect_helper(@_) };
if(! $proxy_connect || $@) {
$@ = "proxy connect failed: $@; $!";
croak($@);
}
}
else {
*$self->{io_socket_peername}=@_ == 1 ? $_[0] : IO::Socket::sockaddr_in(@_);
if(!$self->SUPER::connect(@_)) {
# better to die than return here
$@ = "Connect failed: $@; $!";
croak($@);
}
}
my $debug = *$self->{ssl_debug} || 0;
my $ssl = Crypt::SSLeay::Conn->new(*$self->{ssl_ctx}, $debug, $self);
my $arg = *$self->{ssl_arg};
my $new_arg = *$self->{ssl_new_arg};
$arg->{SSL_Debug} = $debug;
# setup SNI if available
$ssl->can("set_tlsext_host_name") and
$ssl->set_tlsext_host_name(*$self->{ssl_peer_addr});
eval {
local $SIG{ALRM} = sub { $self->die_with_error("SSL connect timeout") };
# timeout / 2 because we have 3 possible connects here
_alarm_set($self->timeout / 2);
my $rv;
{
local $SIG{PIPE} = \¨
$rv = eval { $ssl->connect; };
}
if (not defined $rv or $rv <= 0) {
_alarm_set(0);
$ssl = undef;
# See RT #59312
my %args = (%$arg, %$new_arg);
if(*$self->{ssl_version} == 23) {
$args{SSL_Version} = 3;
# the new connect might itself be overridden with a REAL SSL
my $new_ssl = Net::SSL->new(%args);
$REAL{$self} = $REAL{$new_ssl} || $new_ssl;
return $REAL{$self};
}
elsif(*$self->{ssl_version} == 3) {
# $self->die_with_error("SSL negotiation failed");
$args{SSL_Version} = 2;
my $new_ssl = Net::SSL->new(%args);
$REAL{$self} = $new_ssl;
return $new_ssl;
}
else {
# don't die, but do set $@, and return undef
eval { $self->die_with_error("SSL negotiation failed") };
croak($@);
}
}
_alarm_set(0);
};
# odd error in eval {} block, maybe alarm outside the evals
if($@) {
$@ = "$@; $!";
croak($@);
}
# successful SSL connection gets stored
*$self->{ssl_ssl} = $ssl;
$self;
}
# Delegate these calls to the Crypt::SSLeay::Conn object
sub get_peer_certificate {
my $self = shift;
$self = $REAL{$self} || $self;
*$self->{ssl_ssl}->get_peer_certificate(@_);
}
sub get_peer_verify {
my $self = shift;
$self = $REAL{$self} || $self;
*$self->{ssl_peer_verify};
}
sub get_shared_ciphers {
my $self = shift;
$self = $REAL{$self} || $self;
*$self->{ssl_ssl}->get_shared_ciphers(@_);
}
sub get_cipher {
my $self = shift;
$self = $REAL{$self} || $self;
*$self->{ssl_ssl}->get_cipher(@_);
}
sub pending {
my $self = shift;
$self = $REAL{$self} || $self;
*$self->{ssl_ssl}->pending(@_);
}
sub ssl_context {
my $self = shift;
$self = $REAL{$self} || $self;
*$self->{ssl_ctx};
}
sub die_with_error {
my $self=shift;
my $reason=shift;
my @err;
while(my $err=Crypt::SSLeay::Err::get_error_string()) {
push @err, $err;
}
croak("$reason: " . join( ' | ', @err ));
}
sub read {
my $self = shift;
$self = $REAL{$self} || $self;
local $SIG{__DIE__} = \&Carp::confess;
local $SIG{ALRM} = sub { $self->die_with_error("SSL read timeout") };
_alarm_set($self->timeout);
my $n = *$self->{ssl_ssl}->read(@_);
_alarm_set(0);
$self->die_with_error("read failed") if !defined $n;
$n;
}
sub write {
my $self = shift;
$self = $REAL{$self} || $self;
my $n = *$self->{ssl_ssl}->write(@_);
$self->die_with_error("write failed") if !defined $n;
$n;
}
*sysread = \&read;
*syswrite = \&write;
sub print {
my $self = shift;
$self = $REAL{$self} || $self;
# should we care about $, and $\??
# I think it is too expensive...
$self->write(join("", @_));
}
sub printf {
my $self = shift;
$self = $REAL{$self} || $self;
my $fmt = shift;
$self->write(sprintf($fmt, @_));
}
sub getchunk {
my $self = shift;
$self = $REAL{$self} || $self;
my $buf = ''; # warnings
my $n = $self->read($buf, 32768);
return unless defined $n;
$buf;
}
# This is really inefficient, but we only use it for reading the proxy response
# so that does not really matter.
sub getline {
my $self = shift;
$self = $REAL{$self} || $self;
my $val="";
my $buf;
do {
$self->SUPER::recv($buf, 1);
$val .= $buf;
} until ($buf eq "\n");
$val;
}
# XXX: no way to disable <$sock>?? (tied handle perhaps?)
sub get_lwp_object {
my $self = shift;
my $lwp_object;
my $i = 0;
while(1) {
package DB;
my @stack = caller($i++);
last unless @stack;
my @stack_args = @DB::args;
my $stack_object = $stack_args[0] || next;
return $stack_object
if ref($stack_object)
and $stack_object->isa('LWP::UserAgent');
}
return undef;
}
sub send_useragent_to_proxy {
if (my $val = shift) {
$SEND_USERAGENT_TO_PROXY = $val;
}
return $SEND_USERAGENT_TO_PROXY;
}
sub proxy_connect_helper {
my $self = shift;
my $proxy = $self->proxy;
my ($proxy_host, $proxy_port) = split(':',$proxy);
$proxy_port || croak("no port given for proxy server $proxy");
my $proxy_addr = gethostbyname($proxy_host);
$proxy_addr || croak("can't resolve proxy server name: $proxy_host, $!");
my($peer_port, $peer_addr) = (*$self->{ssl_peer_port}, *$self->{ssl_peer_addr});
$peer_addr || croak("no peer addr given");
$peer_port || croak("no peer port given");
# see if the proxy should be bypassed
my @no_proxy = split( /\s*,\s*/, $ENV{NO_PROXY} || $ENV{no_proxy} || '');
my $is_proxied = 1;
my $domain;
for $domain (@no_proxy) {
if ($peer_addr =~ /\Q$domain\E$/) {
$is_proxied = 0;
last;
}
}
if ($is_proxied) {
$self->SUPER::connect($proxy_port, $proxy_addr)
|| croak("proxy connect to $proxy_host:$proxy_port failed: $!");
}
else {
# see RT #57836
my $peer_addr_packed = gethostbyname($peer_addr);
$self->SUPER::connect($peer_port, $peer_addr_packed)
|| croak("proxy bypass to $peer_addr:$peer_addr failed: $!");
}
my $connect_string;
if ($ENV{"HTTPS_PROXY_USERNAME"} || $ENV{"HTTPS_PROXY_PASSWORD"}) {
my $user = $ENV{"HTTPS_PROXY_USERNAME"};
my $pass = $ENV{"HTTPS_PROXY_PASSWORD"};
my $credentials = encode_base64("$user:$pass", "");
$connect_string = join($CRLF,
"CONNECT $peer_addr:$peer_port HTTP/1.0",
"Proxy-authorization: Basic $credentials"
);
}
else {
$connect_string = "CONNECT $peer_addr:$peer_port HTTP/1.0";
}
$connect_string .= $CRLF;
if (send_useragent_to_proxy()) {
my $lwp_object = $self->get_lwp_object;
if($lwp_object && $lwp_object->agent) {
$connect_string .= "User-Agent: ".$lwp_object->agent.$CRLF;
}
}
$connect_string .= $CRLF;
$self->SUPER::send($connect_string);
my $timeout;
my $header = '';
# See RT #33954
# See also RT #64054
# Handling incomplete reads and writes better (for some values of
# better) may actually make this problem go away, but either way,
# there is no good reason to use \d when checking for 0-9
while ($header !~ m{HTTP/[0-9][.][0-9]\s+200\s+.*$CRLF$CRLF}s) {
$timeout = $self->timeout(5) unless length $header;
my $n = $self->SUPER::sysread($header, 8192, length $header);
last if $n <= 0;
}
$self->timeout($timeout) if defined $timeout;
my $conn_ok = ($header =~ m{HTTP/[0-9]+[.][0-9]+\s+200\s+}is) ? 1 : 0;
if (not $conn_ok) {
croak("PROXY ERROR HEADER, could be non-SSL URL:\n$header");
}
$conn_ok;
}
# code adapted from LWP::UserAgent, with $ua->env_proxy API
# see also RT #57836
sub proxy {
my $self = shift;
my $proxy_server = $ENV{HTTPS_PROXY} || $ENV{https_proxy};
return unless $proxy_server;
my($peer_port, $peer_addr) = (
*$self->{ssl_peer_port},
*$self->{ssl_peer_addr}
);
$peer_addr || croak("no peer addr given");
$peer_port || croak("no peer port given");
# see if the proxy should be bypassed
my @no_proxy = split( /\s*,\s*/,
$ENV{NO_PROXY} || $ENV{no_proxy} || ''
);
my $is_proxied = 1;
for my $domain (@no_proxy) {
if ($peer_addr =~ /\Q$domain\E\z/) {
return;
}
}
$proxy_server =~ s|\Ahttps?://||i;
# sanitize the end of the string too
# see also http://www.nntp.perl.org/group/perl.libwww/2012/10/msg7629.html
# and https://github.com/nanis/Crypt-SSLeay/pull/1
# Thank you Mark Allen and YigangX Wen
$proxy_server =~ s|(:[1-9][0-9]{0,4})/\z|$1|;
$proxy_server;
}
sub configure_certs {
my $self = shift;
my $ctx = *$self->{ssl_ctx};
my $count = 0;
for (qw(HTTPS_PKCS12_FILE HTTPS_CERT_FILE HTTPS_KEY_FILE)) {
my $file = $ENV{$_};
if ($file) {
(-e $file) or croak("$file file does not exist: $!");
(-r $file) or croak("$file file is not readable");
$count++;
if (/PKCS12/) {
$count++;
$ctx->use_pkcs12_file($file ,$ENV{'HTTPS_PKCS12_PASSWORD'}) || croak("failed to load $file: $!");
last;
}
elsif (/CERT/) {
$ctx->use_certificate_file($file ,1) || croak("failed to load $file: $!");
}
elsif (/KEY/) {
$ctx->use_PrivateKey_file($file, 1) || croak("failed to load $file: $!");
}
else {
croak("setting $_ not supported");
}
}
}
# if both configs are set, then verify them
if ($count == 2) {
if (! $ctx->check_private_key) {
croak("Private key and certificate do not match");
}
}
$count; # number of successful cert loads/checks
}
sub accept { shift->_unimpl("accept") }
sub getc { shift->_unimpl("getc") }
sub ungetc { shift->_unimpl("ungetc") }
sub getlines { shift->_unimpl("getlines"); }
sub _unimpl {
my($self, $meth) = @_;
croak("$meth not implemented for Net::SSL sockets");
}
1;
__END__
=head1 NAME
Net::SSL - support for Secure Sockets Layer
=head1 METHODS
=over 4
=item new
Creates a new C<Net::SSL> object.
=item configure
Configures a C<Net::SSL> socket for operation.
=item configure_certs
Sets up a certificate file to use for communicating with on
the socket.
=item connect
=item die_with_error
=item get_cipher
=item get_lwp_object
Walks up the caller stack and looks for something blessed into
the C<LWP::UserAgent> namespace and returns it. Vaguely deprecated.
=item get_peer_certificate
Gets the peer certificate from the underlying C<Crypt::SSLeay::Conn>
object.
=item get_peer_verify
=item get_shared_ciphers
=item getchunk
Attempts to read up to 32KiB of data from the socket. Returns
C<undef> if nothing was read, otherwise returns the data as
a scalar.
=item pending
Provides access to OpenSSL's C<pending> attribute on the SSL connection
object.
=item getline
Reads one character at a time until a newline is encountered,
and returns the line, including the newline. Grossly
inefficient.
=item print
Concatenates the input parameters and writes them to the socket.
Does not honour C<$,> nor C<$/>. Returns the number of bytes written.
=item printf
Performs a C<sprintf> of the input parameters (thus, the first
parameter must be the format), and writes the result to the socket.
Returns the number of bytes written.
=item proxy
Returns the hostname of an https proxy server, as specified by the
C<HTTPS_PROXY> environment variable.
=item proxy_connect_helper
Helps set up a connection through a proxy.
=item read
Performs a read on the socket and returns the result.
=item ssl_context
=item sysread
Is an alias of C<read>.
=item timeout
Returns the timeout value of the socket as defined by the implementing
class or 60 seconds by default.
=item blocking
Returns a boolean indicating whether the underlying socket is in
blocking mode. By default, Net::SSL sockets are in blocking mode.
$sock->blocking(0); # set to non-blocking mode
This method simply calls the underlying C<blocking> method of the
IO::Socket object.
=item write
Writes the parameters passed in (thus, a list) to the socket. Returns
the number of bytes written.
=item syswrite
Is an alias of C<write>.
=item accept
Not yet implemented. Will die if called.
=item getc
Not yet implemented. Will die if called.
=item getlines
Not yet implemented. Will die if called.
=item ungetc
Not yet implemented. Will die if called.
=item send_useragent_to_proxy
By default (as of version 2.80 of C<Net::SSL> in the 0.54 distribution
of Crypt::SSLeay), the user agent string is no longer sent to the
proxy (but will continue to be sent to the remote host).
The previous behaviour was of marginal benefit, and could cause
fatal errors in certain scenarios (see CPAN bug #4759) and so no
longer happens by default.
To reinstate the old behaviour, call C<Net::SSL::send_useragent_to_proxy>
with a true value (usually 1).
=back
=head1 DIAGNOSTICS
"no port given for proxy server <proxy>"
A proxy was specified for configuring a socket, but no port number
was given. Ensure that the proxy is specified as a host:port pair,
such as C<proxy.example.com:8086>.
"configure certs failed: <contents of $@>; <contents of $!>"
"proxy connect failed: <contents of $@>; <contents of $!>"
"Connect failed: <contents of $@>; <contents of $!>"
During connect().
=head2 SEE ALSO
=over 4
=item IO::Socket::INET
C<Net::SSL> is implemented by subclassing C<IO::Socket::INET>, hence
methods not specifically overridden are defined by that package.
=item Net::SSLeay
A package that provides a Perl-level interface to the C<openssl>
secure sockets layer library.
=back
=cut
Net/SSLeay.pod 0000644 00001275724 15033552504 0007162 0 ustar 00 =encoding utf-8
=head1 NAME
Net::SSLeay - Perl extension for using OpenSSL
=head1 SYNOPSIS
use Net::SSLeay qw(get_https post_https sslcat make_headers make_form);
($page) = get_https('www.bacus.pt', 443, '/'); # Case 1
($page, $response, %reply_headers)
= get_https('www.bacus.pt', 443, '/', # Case 2
make_headers(User-Agent => 'Cryptozilla/5.0b1',
Referer => 'https://www.bacus.pt'
));
($page, $result, %headers) = # Case 2b
= get_https('www.bacus.pt', 443, '/protected.html',
make_headers(Authorization =>
'Basic ' . MIME::Base64::encode("$user:$pass",''))
);
($page, $response, %reply_headers)
= post_https('www.bacus.pt', 443, '/foo.cgi', '', # Case 3
make_form(OK => '1',
name => 'Sampo'
));
$reply = sslcat($host, $port, $request); # Case 4
($reply, $err, $server_cert) = sslcat($host, $port, $request); # Case 5
$Net::SSLeay::trace = 2; # 0=no debugging, 1=ciphers, 2=trace, 3=dump data
Net::SSLeay::initialize(); # Initialize ssl library once
=head1 DESCRIPTION
L<Net::SSLeay> module contains perl bindings to openssl (L<http://www.openssl.org|http://www.openssl.org>) library.
B<COMPATIBILITY NOTE:> L<Net::SSLeay> cannot be built with pre-0.9.3 openssl. It is strongly recommended
to use at least 0.9.7 (as older versions are not tested during development). Some low level API functions
may be available with certain openssl versions.
It is compatible with OpenSSL 1.0 and 1.1. Some functions are not available under OpenSSL 1.1.
L<Net::SSLeay> module basically comprise of:
=over
=item * High level functions for accessing web servers (by using HTTP/HTTPS)
=item * Low level API (mostly mapped 1:1 to openssl's C functions)
=item * Convenience functions (related to low level API but with more perl friendly interface)
=back
There is also a related module called L<Net::SSLeay::Handle> included in this
distribution that you might want to use instead. It has its own pod
documentation.
=head2 High level functions for accessing web servers
This module offers some high level convenience functions for accessing
web pages on SSL servers (for symmetry, the same API is offered for
accessing http servers, too), an C<sslcat()> function for writing your own
clients, and finally access to the SSL api of the SSLeay/OpenSSL package
so you can write servers or clients for more complicated applications.
For high level functions it is most convenient to import them into your
main namespace as indicated in the synopsis.
=head3 Basic set of functions
=over
=item * get_https
=item * post_https
=item * put_https
=item * head_https
=item * do_https
=item * sslcat
=item * https_cat
=item * make_form
=item * make_headers
=back
B<Case 1 (in SYNOPSIS)> demonstrates the typical invocation of get_https() to fetch an HTML
page from secure server. The first argument provides the hostname or IP
in dotted decimal notation of the remote server to contact. The second
argument is the TCP port at the remote end (your own port is picked
arbitrarily from high numbered ports as usual for TCP). The third
argument is the URL of the page without the host name part. If in
doubt consult the HTTP specifications at L<http://www.w3c.org>.
B<Case 2 (in SYNOPSIS)> demonstrates full fledged use of C<get_https()>. As can be seen,
C<get_https()> parses the response and response headers and returns them as
a list, which can be captured in a hash for later reference. Also a
fourth argument to C<get_https()> is used to insert some additional headers
in the request. C<make_headers()> is a function that will convert a list or
hash to such headers. By default C<get_https()> supplies C<Host> (to make
virtual hosting easy) and C<Accept> (reportedly needed by IIS) headers.
B<Case 2b (in SYNOPSIS)> demonstrates how to get a password protected page. Refer to
the HTTP protocol specifications for further details (e.g. RFC-2617).
B<Case 3 (in SYNOPSIS)> invokes C<post_https()> to submit a HTML/CGI form to a secure
server. The first four arguments are equal to C<get_https()> (note that
the empty string (C<''>) is passed as header argument).
The fifth argument is the
contents of the form formatted according to CGI specification.
Do not post UTF-8 data as content: use utf8::downgrade first. In this
case the helper function C<make_https()> is used to do the formatting,
but you could pass any string. C<post_https()> automatically adds
C<Content-Type> and C<Content-Length> headers to the request.
B<Case 4 (in SYNOPSIS)> shows the fundamental C<sslcat()> function (inspired in spirit by
the C<netcat> utility :-). It's your swiss army knife that allows you to
easily contact servers, send some data, and then get the response. You
are responsible for formatting the data and parsing the response -
C<sslcat()> is just a transport.
B<Case 5 (in SYNOPSIS)> is a full invocation of C<sslcat()> which allows the return of errors
as well as the server (peer) certificate.
The C<$trace> global variable can be used to control the verbosity of the
high level functions. Level 0 guarantees silence, level 1 (the default)
only emits error messages.
=head3 Alternate versions of high-level API
=over
=item * get_https3
=item * post_https3
=item * put_https3
=item * get_https4
=item * post_https4
=item * put_https4
=back
The above mentioned functions actually return the response headers as
a list, which only gets converted to hash upon assignment (this
assignment looses information if the same header occurs twice, as may
be the case with cookies). There are also other variants of the
functions that return unprocessed headers and that return a reference
to a hash.
($page, $response, @headers) = get_https('www.bacus.pt', 443, '/');
for ($i = 0; $i < $#headers; $i+=2) {
print "$headers[$i] = " . $headers[$i+1] . "\n";
}
($page, $response, $headers, $server_cert)
= get_https3('www.bacus.pt', 443, '/');
print "$headers\n";
($page, $response, $headers_ref)
= get_https4('www.bacus.pt', 443, '/');
for $k (sort keys %{$headers_ref}) {
for $v (@{$$headers_ref{$k}}) {
print "$k = $v\n";
}
}
All of the above code fragments accomplish the same thing: display all
values of all headers. The API functions ending in "3" return the
headers simply as a scalar string and it is up to the application to
split them up. The functions ending in "4" return a reference to
a hash of arrays (see L<perlref> and L<perllol> if you are
not familiar with complex perl data structures). To access a single value
of such a header hash you would do something like
print $$headers_ref{COOKIE}[0];
Variants 3 and 4 also allow you to discover the server certificate
in case you would like to store or display it, e.g.
($p, $resp, $hdrs, $server_cert) = get_https3('www.bacus.pt', 443, '/');
if (!defined($server_cert) || ($server_cert == 0)) {
warn "Subject Name: undefined, Issuer Name: undefined";
} else {
warn 'Subject Name: '
. Net::SSLeay::X509_NAME_oneline(
Net::SSLeay::X509_get_subject_name($server_cert))
. 'Issuer Name: '
. Net::SSLeay::X509_NAME_oneline(
Net::SSLeay::X509_get_issuer_name($server_cert));
}
Beware that this method only allows after the fact verification of
the certificate: by the time C<get_https3()> has returned the https
request has already been sent to the server, whether you decide to
trust it or not. To do the verification correctly you must either
employ the OpenSSL certificate verification framework or use
the lower level API to first connect and verify the certificate
and only then send the http data. See the implementation of C<ds_https3()>
for guidance on how to do this.
=head3 Using client certificates
Secure web communications are encrypted using symmetric crypto keys
exchanged using encryption based on the certificate of the
server. Therefore in all SSL connections the server must have a
certificate. This serves both to authenticate the server to the
clients and to perform the key exchange.
Sometimes it is necessary to authenticate the client as well. Two
options are available: HTTP basic authentication and a client side
certificate. The basic authentication over HTTPS is actually quite
safe because HTTPS guarantees that the password will not travel in
the clear. Never-the-less, problems like easily guessable passwords
remain. The client certificate method involves authentication of the
client at the SSL level using a certificate. For this to work, both the
client and the server have certificates (which typically are
different) and private keys.
The API functions outlined above accept additional arguments that
allow one to supply the client side certificate and key files. The
format of these files is the same as used for server certificates and
the caveat about encrypting private keys applies.
($page, $result, %headers) = # 2c
= get_https('www.bacus.pt', 443, '/protected.html',
make_headers(Authorization =>
'Basic ' . MIME::Base64::encode("$user:$pass",'')),
'', $mime_type6, $path_to_crt7, $path_to_key8);
($page, $response, %reply_headers)
= post_https('www.bacus.pt', 443, '/foo.cgi', # 3b
make_headers('Authorization' =>
'Basic ' . MIME::Base64::encode("$user:$pass",'')),
make_form(OK => '1', name => 'Sampo'),
$mime_type6, $path_to_crt7, $path_to_key8);
B<Case 2c (in SYNOPSIS)> demonstrates getting a password protected page that also requires
a client certificate, i.e. it is possible to use both authentication
methods simultaneously.
B<Case 3b (in SYNOPSIS)> is a full blown POST to a secure server that requires both password
authentication and a client certificate, just like in case 2c.
Note: The client will not send a certificate unless the server requests one.
This is typically achieved by setting the verify mode to C<VERIFY_PEER> on the
server:
Net::SSLeay::set_verify(ssl, Net::SSLeay::VERIFY_PEER, 0);
See C<perldoc ~openssl/doc/ssl/SSL_CTX_set_verify.pod> for a full description.
=head3 Working through a web proxy
=over
=item * set_proxy
=back
C<Net::SSLeay> can use a web proxy to make its connections. You need to
first set the proxy host and port using C<set_proxy()> and then just
use the normal API functions, e.g:
Net::SSLeay::set_proxy('gateway.myorg.com', 8080);
($page) = get_https('www.bacus.pt', 443, '/');
If your proxy requires authentication, you can supply a username and
password as well
Net::SSLeay::set_proxy('gateway.myorg.com', 8080, 'joe', 'salainen');
($page, $result, %headers) =
= get_https('www.bacus.pt', 443, '/protected.html',
make_headers(Authorization =>
'Basic ' . MIME::Base64::encode("susie:pass",''))
);
This example demonstrates the case where we authenticate to the proxy as
C<"joe"> and to the final web server as C<"susie">. Proxy authentication
requires the C<MIME::Base64> module to work.
=head3 HTTP (without S) API
=over
=item * get_http
=item * post_http
=item * tcpcat
=item * get_httpx
=item * post_httpx
=item * tcpxcat
=back
Over the years it has become clear that it would be convenient to use
the light-weight flavour API of C<Net::SSLeay> for normal HTTP as well (see
C<LWP> for the heavy-weight object-oriented approach). In fact it would be
nice to be able to flip https on and off on the fly. Thus regular HTTP
support was evolved.
use Net::SSLeay qw(get_http post_http tcpcat
get_httpx post_httpx tcpxcat
make_headers make_form);
($page, $result, %headers)
= get_http('www.bacus.pt', 443, '/protected.html',
make_headers(Authorization =>
'Basic ' . MIME::Base64::encode("$user:$pass",''))
);
($page, $response, %reply_headers)
= post_http('www.bacus.pt', 443, '/foo.cgi', '',
make_form(OK => '1',
name => 'Sampo'
));
($reply, $err) = tcpcat($host, $port, $request);
($page, $result, %headers)
= get_httpx($usessl, 'www.bacus.pt', 443, '/protected.html',
make_headers(Authorization =>
'Basic ' . MIME::Base64::encode("$user:$pass",''))
);
($page, $response, %reply_headers)
= post_httpx($usessl, 'www.bacus.pt', 443, '/foo.cgi', '',
make_form(OK => '1', name => 'Sampo' ));
($reply, $err, $server_cert) = tcpxcat($usessl, $host, $port, $request);
As can be seen, the C<"x"> family of APIs takes as the first argument a flag
which indicates whether SSL is used or not.
=head2 Certificate verification and Certificate Revocation Lists (CRLs)
OpenSSL supports the ability to verify peer certificates. It can also
optionally check the peer certificate against a Certificate Revocation
List (CRL) from the certificates issuer. A CRL is a file, created by
the certificate issuer that lists all the certificates that it
previously signed, but which it now revokes. CRLs are in PEM format.
You can enable C<Net::SSLeay CRL> checking like this:
&Net::SSLeay::X509_STORE_set_flags
(&Net::SSLeay::CTX_get_cert_store($ssl),
&Net::SSLeay::X509_V_FLAG_CRL_CHECK);
After setting this flag, if OpenSSL checks a peer's certificate, then
it will attempt to find a CRL for the issuer. It does this by looking
for a specially named file in the search directory specified by
CTX_load_verify_locations. CRL files are named with the hash of the
issuer's subject name, followed by C<.r0>, C<.r1> etc. For example
C<ab1331b2.r0>, C<ab1331b2.r1>. It will read all the .r files for the
issuer, and then check for a revocation of the peer certificate in all
of them. (You can also force it to look in a specific named CRL
file., see below). You can find out the hash of the issuer subject
name in a CRL with
openssl crl -in crl.pem -hash -noout
If the peer certificate does not pass the revocation list, or if no
CRL is found, then the handshaking fails with an error.
You can also force OpenSSL to look for CRLs in one or more arbitrarily
named files.
my $bio = Net::SSLeay::BIO_new_file($crlfilename, 'r');
my $crl = Net::SSLeay::PEM_read_bio_X509_CRL($bio);
if ($crl) {
Net::SSLeay::X509_STORE_add_crl(
Net::SSLeay::CTX_get_cert_store($ssl, $crl)
);
} else {
error reading CRL....
}
Usually the URLs where you can download the CRLs is contained in the certificate
itself and you can extract them with
my @url = Net::SSLeay::P_X509_get_crl_distribution_points($cert)
But there is no automatic downloading of the CRLs and often these CRLs are too
huge to just download them to verify a single certificate.
Also, these CRLs are often in DER format which you need to convert to PEM before
you can use it:
openssl crl -in crl.der -inform der -out crl.pem
So as an alternative for faster and timely revocation checks you better use
the Online Status Revocation Protocol (OCSP).
=head2 Certificate verification and Online Status Revocation Protocol (OCSP)
While checking for revoked certificates is possible and fast with Certificate
Revocation Lists, you need to download the complete and often huge list before
you can verify a single certificate.
A faster way is to ask the CA to check the revocation of just a single or a few
certificates using OCSP. Basically you generate for each certificate an
OCSP_CERTID based on the certificate itself and its issuer, put the ids
togetether into an OCSP_REQUEST and send the request to the URL given in the
certificate.
As a result you get back an OCSP_RESPONSE and need to check the status of the
response, check that it is valid (e.g. signed by the CA) and finally extract the
information about each OCSP_CERTID to find out if the certificate is still valid
or got revoked.
With Net::SSLeay this can be done like this:
# get id(s) for given certs, like from get_peer_certificate
# or get_peer_cert_chain. This will croak if
# - one tries to make an OCSP_CERTID for a self-signed certificate
# - the issuer of the certificate cannot be found in the SSL objects
# store, nor in the current certificate chain
my $cert = Net::SSLeay::get_peer_certificate($ssl);
my $id = eval { Net::SSLeay::OCSP_cert2ids($ssl,$cert) };
die "failed to make OCSP_CERTID: $@" if $@;
# create OCSP_REQUEST from id(s)
# Multiple can be put into the same request, if the same OCSP responder
# is responsible for them.
my $req = Net::SSLeay::OCSP_ids2req($id);
# determine URI of OCSP responder
my $uri = Net::SSLeay::P_X509_get_ocsp_uri($cert);
# Send stringified OCSP_REQUEST with POST to $uri.
# We can ignore certificate verification for https, because the OCSP
# response itself is signed.
my $ua = HTTP::Tiny->new(verify_SSL => 0);
my $res = $ua->request( 'POST',$uri, {
headers => { 'Content-type' => 'application/ocsp-request' },
content => Net::SSLeay::i2d_OCSP_REQUEST($req)
});
my $content = $res && $res->{success} && $res->{content}
or die "query failed";
# Extract OCSP_RESPONSE.
# this will croak if the string is not an OCSP_RESPONSE
my $resp = eval { Net::SSLeay::d2i_OCSP_RESPONSE($content) };
# Check status of response.
my $status = Net::SSLeay::OCSP_response_status($resp);
if ($status != Net::SSLeay::OCSP_RESPONSE_STATUS_SUCCESSFUL())
die "OCSP response failed: ".
Net::SSLeay::OCSP_response_status_str($status);
}
# Verify signature of response and if nonce matches request.
# This will croak if there is a nonce in the response, but it does not match
# the request. It will return false if the signature could not be verified,
# in which case details can be retrieved with Net::SSLeay::ERR_get_error.
# It will not complain if the response does not contain a nonce, which is
# usually the case with pre-signed responses.
if ( ! eval { Net::SSLeay::OCSP_response_verify($ssl,$resp,$req) }) {
die "OCSP response verification failed";
}
# Extract information from OCSP_RESPONSE for each of the ids.
# If called in scalar context it will return the time (as time_t), when the
# next update is due (minimum of all successful responses inside $resp). It
# will croak on the following problems:
# - response is expired or not yet valid
# - no response for given OCSP_CERTID
# - certificate status is not good (e.g. revoked or unknown)
if ( my $nextupd = eval { Net::SSLeay::OCSP_response_results($resp,$id) }) {
warn "certificate is valid, next update in ".
($nextupd-time())." seconds\n";
} else {
die "certificate is not valid: $@";
}
# But in array context it will return detailed information about each given
# OCSP_CERTID instead croaking on errors:
# if no @ids are given it will return information about all single responses
# in the OCSP_RESPONSE
my @results = Net::SSLeay::OCSP_response_results($resp,@ids);
for my $r (@results) {
print Dumper($r);
# @results are in the same order as the @ids and contain:
# $r->[0] - OCSP_CERTID
# $r->[1] - undef if no error (certificate good) OR error message as string
# $r->[2] - hash with details:
# thisUpdate - time_t of this single response
# nextUpdate - time_t when update is expected
# statusType - integer:
# V_OCSP_CERTSTATUS_GOOD(0)
# V_OCSP_CERTSTATUS_REVOKED(1)
# V_OCSP_CERTSTATUS_UNKNOWN(2)
# revocationTime - time_t (only if revoked)
# revocationReason - integer (only if revoked)
# revocationReason_str - reason as string (only if revoked)
}
To further speed up certificate revocation checking one can use a TLS extension
to instruct the server to staple the OCSP response:
# set TLS extension before doing SSL_connect
Net::SSLeay::set_tlsext_status_type($ssl,
Net::SSLeay::TLSEXT_STATUSTYPE_ocsp());
# setup callback to verify OCSP response
my $cert_valid = undef;
Net::SSLeay::CTX_set_tlsext_status_cb($context,sub {
my ($ssl,$resp) = @_;
if (!$resp) {
# Lots of servers don't return an OCSP response.
# In this case we must check the OCSP status outside the SSL
# handshake.
warn "server did not return stapled OCSP response\n";
return 1;
}
# verify status
my $status = Net::SSLeay::OCSP_response_status($resp);
if ($status != Net::SSLeay::OCSP_RESPONSE_STATUS_SUCCESSFUL()) {
warn "OCSP response failure: $status\n";
return 1;
}
# verify signature - we have no OCSP_REQUEST here to check nonce
if (!eval { Net::SSLeay::OCSP_response_verify($ssl,$resp) }) {
warn "OCSP response verify failed\n";
return 1;
}
# check if the certificate is valid
# we should check here against the peer_certificate
my $cert = Net::SSLeay::get_peer_certificate();
my $certid = eval { Net::SSLeay::OCSP_cert2ids($ssl,$cert) } or do {
warn "cannot get certid from cert: $@";
$cert_valid = -1;
return 1;
};
if ( $nextupd = eval {
Net::SSLeay::OCSP_response_results($resp,$certid) }) {
warn "certificate not revoked\n";
$cert_valid = 1;
} else {
warn "certificate not valid: $@";
$cert_valid = 0;
}
});
# do SSL handshake here
....
# check if certificate revocation was checked already
if ( ! defined $cert_valid) {
# check revocation outside of SSL handshake by asking OCSP responder
...
} elsif ( ! $cert_valid ) {
die "certificate not valid - closing SSL connection";
} elsif ( $cert_valid<0 ) {
die "cannot verify certificate revocation - self-signed ?";
} else {
# everything fine
...
}
=head2 Using Net::SSLeay in multi-threaded applications
B<IMPORTANT: versions 1.42 or earlier are not thread-safe!>
Net::SSLeay module implements all necessary stuff to be ready for multi-threaded
environment - it requires openssl-0.9.7 or newer. The implementation fully follows thread safety related requirements
of openssl library(see L<http://www.openssl.org/docs/crypto/threads.html|http://www.openssl.org/docs/crypto/threads.html>).
If you are about to use Net::SSLeay (or any other module based on Net::SSLeay) in multi-threaded
perl application it is recommended to follow this best-practice:
=head3 Initialization
Load and initialize Net::SSLeay module in the main thread:
use threads;
use Net::SSLeay;
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
sub do_master_job {
#... call whatever from Net::SSLeay
}
sub do_worker_job {
#... call whatever from Net::SSLeay
}
#start threads
my $master = threads->new(\&do_master_job, 'param1', 'param2');
my @workers = threads->new(\&do_worker_job, 'arg1', 'arg2') for (1..10);
#waiting for all threads to finish
$_->join() for (threads->list);
NOTE: Openssl's C<int SSL_library_init(void)> function (which is also aliased as
C<SSLeay_add_ssl_algorithms>, C<OpenSSL_add_ssl_algorithms> and C<add_ssl_algorithms>)
is not re-entrant and multiple calls can cause a crash in threaded application.
Net::SSLeay implements flags preventing repeated calls to this function,
therefore even multiple initialization via Net::SSLeay::SSLeay_add_ssl_algorithms()
should work without trouble.
=head3 Using callbacks
Do not use callbacks across threads (the module blocks cross-thread callback operations
and throws a warning). Always do the callback setup, callback use and callback destruction
within the same thread.
=head3 Using openssl elements
All openssl elements (X509, SSL_CTX, ...) can be directly passed between threads.
use threads;
use Net::SSLeay;
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
sub do_job {
my $context = shift;
Net::SSLeay::CTX_set_default_passwd_cb($context, sub { "secret" });
#...
}
my $c = Net::SSLeay::CTX_new();
threads->create(\&do_job, $c);
Or:
use threads;
use Net::SSLeay;
my $context; #does not need to be 'shared'
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
sub do_job {
Net::SSLeay::CTX_set_default_passwd_cb($context, sub { "secret" });
#...
}
$context = Net::SSLeay::CTX_new();
threads->create(\&do_job);
=head3 Using other perl modules based on Net::SSLeay
It should be fine to use any other module based on L<Net::SSLeay> (like L<IO::Socket::SSL>)
in multi-threaded applications. It is generally recommended to do any global initialization
of such a module in the main thread before calling C<< threads->new(..) >> or
C<< threads->create(..) >> but it might differ module by module.
To be safe you can load and init Net::SSLeay explicitly in the main thread:
use Net::SSLeay;
use Other::SSLeay::Based::Module;
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
Or even safer:
use Net::SSLeay;
use Other::SSLeay::Based::Module;
BEGIN {
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
}
=head3 Combining Net::SSLeay with other modules linked with openssl
B<BEWARE: This might be a big trouble! This is not guaranteed be thread-safe!>
There are many other (XS) modules linked directly to openssl library (like L<Crypt::SSLeay>).
As it is expected that also "another" module will call C<SSLeay_add_ssl_algorithms> at some point
we have again a trouble with multiple openssl initialization by Net::SSLeay and "another" module.
As you can expect Net::SSLeay is not able to avoid multiple initialization of openssl library
called by "another" module, thus you have to handle this on your own (in some cases it might
not be possible at all to avoid this).
=head3 Threading with get_https and friends
The convenience functions get_https, post_https etc all initialize the SSL library by calling
Net::SSLeay::initialize which does the conventional library initialization:
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
Net::SSLeay::initialize initializes the SSL library at most once.
You can override the Net::SSLeay::initialize function if you desire
some other type of initialization behaviour by get_https and friends.
You can call Net::SSLeay::initialize from your own code if you desire this conventional library initialization.
=head2 Convenience routines
To be used with Low level API
Net::SSLeay::randomize($rn_seed_file,$additional_seed);
Net::SSLeay::set_cert_and_key($ctx, $cert_path, $key_path);
$cert = Net::SSLeay::dump_peer_certificate($ssl);
Net::SSLeay::ssl_write_all($ssl, $message) or die "ssl write failure";
$got = Net::SSLeay::ssl_read_all($ssl) or die "ssl read failure";
$got = Net::SSLeay::ssl_read_CRLF($ssl [, $max_length]);
$got = Net::SSLeay::ssl_read_until($ssl [, $delimit [, $max_length]]);
Net::SSLeay::ssl_write_CRLF($ssl, $message);
=over
=item * randomize
seeds the openssl PRNG with C</dev/urandom> (see the top of C<SSLeay.pm>
for how to change or configure this) and optionally with user provided
data. It is very important to properly seed your random numbers, so
do not forget to call this. The high level API functions automatically
call C<randomize()> so it is not needed with them. See also caveats.
=item * set_cert_and_key
takes two file names as arguments and sets
the certificate and private key to those. This can be used to
set either server certificates or client certificates.
=item * dump_peer_certificate
allows you to get a plaintext description of the
certificate the peer (usually the server) presented to us.
=item * ssl_read_all
see ssl_write_all (below)
=item * ssl_write_all
C<ssl_read_all()> and C<ssl_write_all()> provide true blocking semantics for
these operations (see limitation, below, for explanation). These are
much preferred to the low level API equivalents (which implement BSD
blocking semantics). The message argument to C<ssl_write_all()> can be
a reference. This is helpful to avoid unnecessary copying when writing
something big, e.g:
$data = 'A' x 1000000000;
Net::SSLeay::ssl_write_all($ssl, \$data) or die "ssl write failed";
=item * ssl_read_CRLF
uses C<ssl_read_all()> to read in a line terminated with a
carriage return followed by a linefeed (CRLF). The CRLF is included in
the returned scalar.
=item * ssl_read_until
uses C<ssl_read_all()> to read from the SSL input
stream until it encounters a programmer specified delimiter.
If the delimiter is undefined, C<$/> is used. If C<$/> is undefined,
C<\n> is used. One can optionally set a maximum length of bytes to read
from the SSL input stream.
=item * ssl_write_CRLF
writes C<$message> and appends CRLF to the SSL output stream.
=back
=head2 Initialization
In order to use the low level API you should start your programs with
the following incantation:
use Net::SSLeay qw(die_now die_if_ssl_error);
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms(); # Important!
Net::SSLeay::ENGINE_load_builtin_engines(); # If you want built-in engines
Net::SSLeay::ENGINE_register_all_complete(); # If you want built-in engines
Net::SSLeay::randomize();
=head2 Error handling functions
I can not emphasize the need to check for error enough. Use these
functions even in the most simple programs, they will reduce debugging
time greatly. Do not ask questions on the mailing list without having
first sprinkled these in your code.
=over
=item * die_now
=item * die_if_ssl_error
C<die_now()> and C<die_if_ssl_error()> are used to conveniently print the SSLeay error
stack when something goes wrong:
Net::SSLeay::connect($ssl) or die_now("Failed SSL connect ($!)");
Net::SSLeay::write($ssl, "foo") or die_if_ssl_error("SSL write ($!)");
=item * print_errs
You can also use C<Net::SSLeay::print_errs()> to dump the error stack without
exiting the program. As can be seen, your code becomes much more readable
if you import the error reporting functions into your main name space.
=back
=head2 Sockets
Perl uses file handles for all I/O. While SSLeay has a quite flexible BIO
mechanism and perl has an evolved PerlIO mechanism, this module still
sticks to using file descriptors. Thus to attach SSLeay to a socket you
should use C<fileno()> to extract the underlying file descriptor:
Net::SSLeay::set_fd($ssl, fileno(S)); # Must use fileno
You should also set C<$|> to 1 to eliminate STDIO buffering so you do not
get confused if you use perl I/O functions to manipulate your socket
handle.
If you need to C<select(2)> on the socket, go right ahead, but be warned
that OpenSSL does some internal buffering so SSL_read does not always
return data even if the socket selected for reading (just keep on
selecting and trying to read). C<Net::SSLeay> is no different from the
C language OpenSSL in this respect.
=head2 Callbacks
You can establish a per-context verify callback function something like this:
sub verify {
my ($ok, $x509_store_ctx) = @_;
print "Verifying certificate...\n";
...
return $ok;
}
It is used like this:
Net::SSLeay::set_verify ($ssl, Net::SSLeay::VERIFY_PEER, \&verify);
Per-context callbacks for decrypting private keys are implemented.
Net::SSLeay::CTX_set_default_passwd_cb($ctx, sub { "top-secret" });
Net::SSLeay::CTX_use_PrivateKey_file($ctx, "key.pem",
Net::SSLeay::FILETYPE_PEM)
or die "Error reading private key";
Net::SSLeay::CTX_set_default_passwd_cb($ctx, undef);
If Hello Extensions are supported by your OpenSSL,
a session secret callback can be set up to be called when a session secret is set
by openssl.
Establish it like this:
Net::SSLeay::set_session_secret_cb($ssl, \&session_secret_cb, $somedata);
It will be called like this:
sub session_secret_cb
{
my ($secret, \@cipherlist, \$preferredcipher, $somedata) = @_;
}
No other callbacks are implemented. You do not need to use any
callback for simple (i.e. normal) cases where the SSLeay built-in
verify mechanism satisfies your needs.
It is required to reset these callbacks to undef immediately after use to prevent
memory leaks, thread safety problems and crashes on exit that
can occur if different threads set different callbacks.
If you want to use callback stuff, see examples/callback.pl! It's the
only one I am able to make work reliably.
=head2 Low level API
In addition to the high level functions outlined above, this module
contains straight-forward access to CRYPTO and SSL parts of OpenSSL C API.
See the C<*.h> headers from OpenSSL C distribution for a list of low level
SSLeay functions to call (check SSLeay.xs to see if some function has been
implemented). The module strips the initial C<"SSL_"> off of the SSLeay names.
Generally you should use C<Net::SSLeay::> in its place.
Note that some functions are prefixed with C<"P_"> - these are very close to
the original API however contain some kind of a wrapper making its interface
more perl friendly.
For example:
In C:
#include <ssl.h>
err = SSL_set_verify (ssl, SSL_VERIFY_CLIENT_ONCE,
&your_call_back_here);
In Perl:
use Net::SSLeay;
$err = Net::SSLeay::set_verify ($ssl,
Net::SSLeay::VERIFY_CLIENT_ONCE,
\&your_call_back_here);
If the function does not start with C<SSL_> you should use the full
function name, e.g.:
$err = Net::SSLeay::ERR_get_error;
The following new functions behave in perlish way:
$got = Net::SSLeay::read($ssl);
# Performs SSL_read, but returns $got
# resized according to data received.
# Returns undef on failure.
Net::SSLeay::write($ssl, $foo) || die;
# Performs SSL_write, but automatically
# figures out the size of $foo
=head3 Low level API: Version related functions
=over
=item * SSLeay
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
Gives version number (numeric) of underlaying openssl library.
my $ver_number = Net::SSLeay::SSLeay();
# returns: the number identifying the openssl release
#
# 0x00903100 => openssl-0.9.3
# 0x00904100 => openssl-0.9.4
# 0x00905100 => openssl-0.9.5
# 0x0090600f => openssl-0.9.6
# 0x0090601f => openssl-0.9.6a
# 0x0090602f => openssl-0.9.6b
# ...
# 0x009060df => openssl-0.9.6m
# 0x0090700f => openssl-0.9.7
# 0x0090701f => openssl-0.9.7a
# 0x0090702f => openssl-0.9.7b
# ...
# 0x009070df => openssl-0.9.7m
# 0x0090800f => openssl-0.9.8
# 0x0090801f => openssl-0.9.8a
# 0x0090802f => openssl-0.9.8b
# ...
# 0x0090814f => openssl-0.9.8t
# 0x1000000f => openssl-1.0.0
# 0x1000004f => openssl-1.0.0d
# 0x1000007f => openssl-1.0.0g
You can use it like this:
if (Net::SSLeay::SSLeay() < 0x0090800f) {
die "you need openssl-0.9.8 or higher";
}
=item * SSLeay_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
Gives version number (string) of underlaying openssl library.
my $ver_string = Net::SSLeay::SSLeay_version($type);
# $type
# SSLEAY_VERSION - e.g. 'OpenSSL 1.0.0d 8 Feb 2011'
# SSLEAY_CFLAGS - e.g. 'compiler: gcc -D_WINDLL -DOPENSSL_USE_APPLINK .....'
# SSLEAY_BUILT_ON - e.g. 'built on: Fri May 6 00:00:46 GMT 2011'
# SSLEAY_PLATFORM - e.g. 'platform: mingw'
# SSLEAY_DIR - e.g. 'OPENSSLDIR: "z:/...."'
#
# returns: string
Net::SSLeay::SSLeay_version();
#is equivalent to
Net::SSLeay::SSLeay_version(SSLEAY_VERSION);
Check openssl doc L<https://www.openssl.org/docs/man1.0.2/crypto/SSLeay_version.html|https://www.openssl.org/docs/man1.0.2/crypto/SSLeay_version.html>
=item * OpenSSL_version_num
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0
Gives version number (numeric) of underlaying openssl library. See L</SSLeay> for interpreting the result.
my $ver_number = Net::SSLeay::OpenSSL_version_num();
# returns: the number identifying the openssl release
=item * OpenSSL_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0
Gives version number (string) of underlaying openssl library.
my $ver_string = Net::SSLeay::OpenSSL_version($t);
# $t
# OPENSSL_VERSION - e.g. 'OpenSSL 1.1.0g 2 Nov 2017'
# OPENSSL_CFLAGS - e.g. 'compiler: cc -DDSO_DLFCN -DHAVE_DLFCN_H .....'
# OPENSSL_BUILT_ON - e.g. 'built on: reproducible build, date unspecified'
# OPENSSL_PLATFORM - e.g. 'platform: darwin64-x86_64-cc'
# OPENSSL_DIR - e.g. 'OPENSSLDIR: "/opt/openssl-1.1.0g"'
# OPENSSL_ENGINES_DIR - e.g. 'ENGINESDIR: "/opt/openssl-1.1.0g/lib/engines-1.1"'
#
# returns: string
Net::SSLeay::OpenSSL_version();
#is equivalent to
Net::SSLeay::OpenSSL_version(OPENSSL_VERSION);
Check openssl doc L<https://www.openssl.org/docs/crypto/OpenSSL_version.html|https://www.openssl.org/docs/crypto/OpenSSL_version.html>
=back
=head3 Low level API: Initialization related functions
=over
=item * library_init
Initialize SSL library by registering algorithms.
my $rv = Net::SSLeay::library_init();
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_library_init.html|http://www.openssl.org/docs/ssl/SSL_library_init.html>
While the original function from OpenSSL always returns 1, Net::SSLeay adds a
wrapper around it to make sure that the OpenSSL function is only called once.
Thus the function will return 1 if initialization was done and 0 if not, i.e. if
initialization was done already before.
=item * add_ssl_algorithms
The alias for L</library_init>
Net::SSLeay::add_ssl_algorithms();
=item * OpenSSL_add_ssl_algorithms
The alias for L</library_init>
Net::SSLeay::OpenSSL_add_ssl_algorithms();
=item * SSLeay_add_ssl_algorithms
The alias for L</library_init>
Net::SSLeay::SSLeay_add_ssl_algorithms();
=item * load_error_strings
Registers the error strings for all libcrypto + libssl related functions.
Net::SSLeay::load_error_strings();
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html|http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html>
=item * ERR_load_crypto_strings
Registers the error strings for all libcrypto functions. No need to call this function if you have already called L</load_error_strings>.
Net::SSLeay::ERR_load_crypto_strings();
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html|http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html>
=item * ERR_load_RAND_strings
Registers the error strings for RAND related functions. No need to call this function if you have already called L</load_error_strings>.
Net::SSLeay::ERR_load_RAND_strings();
#
# returns: no return value
=item * ERR_load_SSL_strings
Registers the error strings for SSL related functions. No need to call this function if you have already called L</load_error_strings>.
Net::SSLeay::ERR_load_SSL_strings();
#
# returns: no return value
=item * OpenSSL_add_all_algorithms
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Add algorithms to internal table.
Net::SSLeay::OpenSSL_add_all_algorithms();
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html|http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html>
=item * OPENSSL_add_all_algorithms_conf
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Similar to L</OpenSSL_add_all_algorithms> - will ALWAYS load the config file
Net::SSLeay::OPENSSL_add_all_algorithms_conf();
#
# returns: no return value
=item * OPENSSL_add_all_algorithms_noconf
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Similar to L</OpenSSL_add_all_algorithms> - will NEVER load the config file
Net::SSLeay::OPENSSL_add_all_algorithms_noconf();
#
# returns: no return value
=back
=head3 Low level API: ERR_* and SSL_alert_* related functions
B<NOTE:> Please note that SSL_alert_* function have "SSL_" part stripped from their names.
=over
=item * ERR_clear_error
Clear the error queue.
Net::SSLeay::ERR_clear_error();
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_clear_error.html|http://www.openssl.org/docs/crypto/ERR_clear_error.html>
=item * ERR_error_string
Generates a human-readable string representing the error code $error.
my $rv = Net::SSLeay::ERR_error_string($error);
# $error - (unsigned integer) error code
#
# returns: string
Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_error_string.html|http://www.openssl.org/docs/crypto/ERR_error_string.html>
=item * ERR_get_error
Returns the earliest error code from the thread's error queue and removes the entry.
This function can be called repeatedly until there are no more error codes to return.
my $rv = Net::SSLeay::ERR_get_error();
#
# returns: (unsigned integer) error code
Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_get_error.html|http://www.openssl.org/docs/crypto/ERR_get_error.html>
=item * ERR_peek_error
Returns the earliest error code from the thread's error queue without modifying it.
my $rv = Net::SSLeay::ERR_peek_error();
#
# returns: (unsigned integer) error code
Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_get_error.html|http://www.openssl.org/docs/crypto/ERR_get_error.html>
=item * ERR_put_error
Adds an error code to the thread's error queue. It signals that the error of $reason
code reason occurred in function $func of library $lib, in line number $line of $file.
Net::SSLeay::ERR_put_error($lib, $func, $reason, $file, $line);
# $lib - (integer) library id (check openssl/err.h for constants e.g. ERR_LIB_SSL)
# $func - (integer) function id (check openssl/ssl.h for constants e.g. SSL_F_SSL23_READ)
# $reason - (integer) reason id (check openssl/ssl.h for constants e.g. SSL_R_SSL_HANDSHAKE_FAILURE)
# $file - (string) file name
# $line - (integer) line number in $file
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_put_error.html|http://www.openssl.org/docs/crypto/ERR_put_error.html>
and L<http://www.openssl.org/docs/crypto/err.html|http://www.openssl.org/docs/crypto/err.html>
=item * alert_desc_string
Returns a two letter string as a short form describing the reason of the alert specified by value.
my $rv = Net::SSLeay::alert_desc_string($value);
# $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
#
# returns: description string (2 letters)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
=item * alert_desc_string_long
Returns a string describing the reason of the alert specified by value.
my $rv = Net::SSLeay::alert_desc_string_long($value);
# $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
#
# returns: description string
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
=item * alert_type_string
Returns a one letter string indicating the type of the alert specified by value.
my $rv = Net::SSLeay::alert_type_string($value);
# $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
#
# returns: string (1 letter)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
=item * alert_type_string_long
Returns a string indicating the type of the alert specified by value.
my $rv = Net::SSLeay::alert_type_string_long($value);
# $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
#
# returns: string
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
=back
=head3 Low level API: SSL_METHOD_* related functions
=over
=item * SSLv23_method, SSLv23_server_method and SSLv23_client_method
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before.
Returns SSL_METHOD structure corresponding to general-purpose version-flexible TLS method, the return value can be later used as a param of L</CTX_new_with_method>.
B<NOTE:> Consider using TLS_method, TLS_server_method or TLS_client_method with new code.
my $rv = Net::SSLeay::SSLv2_method();
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
=item * SSLv2_method
Returns SSL_METHOD structure corresponding to SSLv2 method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl.
my $rv = Net::SSLeay::SSLv2_method();
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
=item * SSLv3_method
Returns SSL_METHOD structure corresponding to SSLv3 method, the return value can be later used as a param of L</CTX_new_with_method>.
my $rv = Net::SSLeay::SSLv3_method();
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
=item * TLSv1_method, TLSv1_server_method and TLSv1_client_method
B<COMPATIBILITY:> Server and client methods not available in Net-SSLeay-1.82 and before.
Returns SSL_METHOD structure corresponding to TLSv1 method, the return value can be later used as a param of L</CTX_new_with_method>.
my $rv = Net::SSLeay::TLSv1_method();
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
=item * TLSv1_1_method, TLSv1_1_server_method and TLSv1_1_client_method
B<COMPATIBILITY:> Server and client methods not available in Net-SSLeay-1.82 and before.
Returns SSL_METHOD structure corresponding to TLSv1_1 method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl.
my $rv = Net::SSLeay::TLSv1_1_method();
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
=item * TLSv1_2_method, TLSv1_2_server_method and TLSv1_2_client_method
B<COMPATIBILITY:> Server and client methods not available in Net-SSLeay-1.82 and before.
Returns SSL_METHOD structure corresponding to TLSv1_2 method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl.
my $rv = Net::SSLeay::TLSv1_2_method();
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
=item * TLS_method, TLS_server_method and TLS_client_method
B<COMPATIBILITY:> Not available in Net-SSLeay-1.82 and before.
Returns SSL_METHOD structure corresponding to general-purpose version-flexible TLS method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl.
my $rv = Net::SSLeay::TLS_method();
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
=back
=head3 Low level API: ENGINE_* related functions
=over
=item * ENGINE_load_builtin_engines
B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support.
Load all bundled ENGINEs into memory and make them visible.
Net::SSLeay::ENGINE_load_builtin_engines();
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html>
=item * ENGINE_register_all_complete
B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support.
Register all loaded ENGINEs for every algorithm they collectively implement.
Net::SSLeay::ENGINE_register_all_complete();
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html>
=item * ENGINE_set_default
B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support.
Set default engine to $e + set its flags to $flags.
my $rv = Net::SSLeay::ENGINE_set_default($e, $flags);
# $e - value corresponding to openssl's ENGINE structure
# $flags - (integer) engine flags
# flags value can be made by bitwise "OR"ing:
# 0x0001 - ENGINE_METHOD_RSA
# 0x0002 - ENGINE_METHOD_DSA
# 0x0004 - ENGINE_METHOD_DH
# 0x0008 - ENGINE_METHOD_RAND
# 0x0010 - ENGINE_METHOD_ECDH
# 0x0020 - ENGINE_METHOD_ECDSA
# 0x0040 - ENGINE_METHOD_CIPHERS
# 0x0080 - ENGINE_METHOD_DIGESTS
# 0x0100 - ENGINE_METHOD_STORE
# 0x0200 - ENGINE_METHOD_PKEY_METHS
# 0x0400 - ENGINE_METHOD_PKEY_ASN1_METHS
# Obvious all-or-nothing cases:
# 0xFFFF - ENGINE_METHOD_ALL
# 0x0000 - ENGINE_METHOD_NONE
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html>
=item * ENGINE_by_id
Get ENGINE by its identification $id.
B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support.
my $rv = Net::SSLeay::ENGINE_by_id($id);
# $id - (string) engine identification e.g. "dynamic"
#
# returns: value corresponding to openssl's ENGINE structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html>
=back
=head3 Low level API: EVP_PKEY_* related functions
=over
=item * EVP_PKEY_copy_parameters
Copies the parameters from key $from to key $to.
my $rv = Net::SSLeay::EVP_PKEY_copy_parameters($to, $from);
# $to - value corresponding to openssl's EVP_PKEY structure
# $from - value corresponding to openssl's EVP_PKEY structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_cmp.html|http://www.openssl.org/docs/crypto/EVP_PKEY_cmp.html>
=item * EVP_PKEY_new
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Creates a new EVP_PKEY structure.
my $rv = Net::SSLeay::EVP_PKEY_new();
#
# returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_new.html|http://www.openssl.org/docs/crypto/EVP_PKEY_new.html>
=item * EVP_PKEY_free
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Free an allocated EVP_PKEY structure.
Net::SSLeay::EVP_PKEY_free($pkey);
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_new.html|http://www.openssl.org/docs/crypto/EVP_PKEY_new.html>
=item * EVP_PKEY_assign_RSA
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Set the key referenced by $pkey to $key
B<NOTE:> No reference counter will be increased, i.e. $key will be freed if
$pkey is freed.
my $rv = Net::SSLeay::EVP_PKEY_assign_RSA($pkey, $key);
# $pkey - value corresponding to openssl's EVP_PKEY structure
# $key - value corresponding to openssl's RSA structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_assign_RSA.html|http://www.openssl.org/docs/crypto/EVP_PKEY_assign_RSA.html>
=item * EVP_PKEY_assign_EC_KEY
B<COMPATIBILITY:> not available in Net-SSLeay-1.74 and before
Set the key referenced by $pkey to $key
B<NOTE:> No reference counter will be increased, i.e. $key will be freed if
$pkey is freed.
my $rv = Net::SSLeay::EVP_PKEY_assign_EC_KEY($pkey, $key);
# $pkey - value corresponding to openssl's EVP_PKEY structure
# $key - value corresponding to openssl's EC_KEY structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_assign_EC_KEY.html|http://www.openssl.org/docs/crypto/EVP_PKEY_assign_EC_KEY.html>
=item * EVP_PKEY_bits
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns the size of the key $pkey in bits.
my $rv = Net::SSLeay::EVP_PKEY_bits($pkey);
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: size in bits
=item * EVP_PKEY_size
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns the maximum size of a signature in bytes. The actual signature may be smaller.
my $rv = Net::SSLeay::EVP_PKEY_size($pkey);
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: the maximum size in bytes
Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_SignInit.html|http://www.openssl.org/docs/crypto/EVP_SignInit.html>
=item * EVP_PKEY_id
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.0
Returns $pkey type (integer value of corresponding NID).
my $rv = Net::SSLeay::EVP_PKEY_id($pkey);
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: (integer) key type
Example:
my $pubkey = Net::SSLeay::X509_get_pubkey($x509);
my $type = Net::SSLeay::EVP_PKEY_id($pubkey);
print Net::SSLeay::OBJ_nid2sn($type); #prints e.g. 'rsaEncryption'
=back
=head3 Low level API: PEM_* related functions
Check openssl doc L<http://www.openssl.org/docs/crypto/pem.html|http://www.openssl.org/docs/crypto/pem.html>
=over
=item * PEM_read_bio_X509
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Loads PEM formatted X509 certificate via given BIO structure.
my $rv = Net::SSLeay::PEM_read_bio_X509($bio);
# $bio - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's X509 structure (0 on failure)
Example:
my $bio = Net::SSLeay::BIO_new_file($filename, 'r');
my $x509 = Net::SSLeay::PEM_read_bio_X509($bio);
Net::SSLeay::BIO_free($bio);
=item * PEM_read_bio_X509_REQ
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Loads PEM formatted X509_REQ object via given BIO structure.
my $rv = Net::SSLeay::PEM_read_bio_X509_REQ($bio, $x=NULL, $cb=NULL, $u=NULL);
# $bio - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's X509_REQ structure (0 on failure)
Example:
my $bio = Net::SSLeay::BIO_new_file($filename, 'r');
my $x509_req = Net::SSLeay::PEM_read_bio_X509_REQ($bio);
Net::SSLeay::BIO_free($bio);
=item * PEM_read_bio_DHparams
Reads DH structure from BIO.
my $rv = Net::SSLeay::PEM_read_bio_DHparams($bio);
# $bio - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's DH structure (0 on failure)
=item * PEM_read_bio_X509_CRL
Reads X509_CRL structure from BIO.
my $rv = Net::SSLeay::PEM_read_bio_X509_CRL($bio);
# $bio - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's X509_CRL structure (0 on failure)
=item * PEM_read_bio_PrivateKey
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Loads PEM formatted private key via given BIO structure.
my $rv = Net::SSLeay::PEM_read_bio_PrivateKey($bio, $cb, $data);
# $bio - value corresponding to openssl's BIO structure
# $cb - reference to perl callback function
# $data - data that will be passed to callback function (see examples below)
#
# returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
Example:
my $bio = Net::SSLeay::BIO_new_file($filename, 'r');
my $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio); #ask for password if needed
Net::SSLeay::BIO_free($bio);
To use password you have the following options:
$privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, \&callback_func); # use callback func for getting password
$privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, \&callback_func, $data); # use callback_func + pass $data to callback_func
$privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, undef, "secret"); # use password "secret"
$privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, undef, ""); # use empty password
Callback function signature:
sub callback_func {
my ($max_passwd_size, $rwflag, $data) = @_;
# $max_passwd_size - maximum size of returned password (longer values will be discarded)
# $rwflag - indicates whether we are loading (0) or storing (1) - for PEM_read_bio_PrivateKey always 0
# $data - the data passed to PEM_read_bio_PrivateKey as 3rd parameter
return "secret";
}
=item * PEM_X509_INFO_read_bio
Reads a BIO containing a PEM formatted file into a STACK_OF(X509_INFO) structure.
my $rv = Net::SSLeay::PEM_X509_INFO_read_bio($bio);
# $bio - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's STACK_OF(X509_INFO) structure.
Example:
my $bio = Net::SSLeay::BIO_new_file($filename, 'r');
my $sk_x509_info = Net::SSLeay::PEM_X509_INFO_read_bio($bio);
Net::SSLeay::BIO_free($bio);
=item * PEM_get_string_X509
B<NOTE:> Does not exactly correspond to any low level API function
Converts/exports X509 certificate to string (PEM format).
Net::SSLeay::PEM_get_string_X509($x509);
# $x509 - value corresponding to openssl's X509 structure
#
# returns: string with $x509 in PEM format
=item * PEM_get_string_PrivateKey
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Converts public key $pk into PEM formatted string (optionally protected with password).
my $rv = Net::SSLeay::PEM_get_string_PrivateKey($pk, $passwd, $enc_alg);
# $pk - value corresponding to openssl's EVP_PKEY structure
# $passwd - [optional] (string) password to use for key encryption
# $enc_alg - [optional] algorithm to use for key encryption (default: DES_CBC) - value corresponding to openssl's EVP_CIPHER structure
#
# returns: PEM formatted string
Examples:
$pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk);
$pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk, "secret");
$pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk, "secret", Net::SSLeay::EVP_get_cipherbyname("DES-EDE3-CBC"));
=item * PEM_get_string_X509_CRL
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Converts X509_CRL object $x509_crl into PEM formatted string.
Net::SSLeay::PEM_get_string_X509_CRL($x509_crl);
# $x509_crl - value corresponding to openssl's X509_CRL structure
#
# returns: no return value
=item * PEM_get_string_X509_REQ
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Converts X509_REQ object $x509_crl into PEM formatted string.
Net::SSLeay::PEM_get_string_X509_REQ($x509_req);
# $x509_req - value corresponding to openssl's X509_REQ structure
#
# returns: no return value
=back
=head3 Low level API: d2i_* (DER format) related functions
=over
=item * d2i_X509_bio
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Loads DER formatted X509 certificate via given BIO structure.
my $rv = Net::SSLeay::d2i_X509_bio($bp);
# $bp - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's X509 structure (0 on failure)
Example:
my $bio = Net::SSLeay::BIO_new_file($filename, 'rb');
my $x509 = Net::SSLeay::d2i_X509_bio($bio);
Net::SSLeay::BIO_free($bio);
Check openssl doc L<http://www.openssl.org/docs/crypto/d2i_X509.html|http://www.openssl.org/docs/crypto/d2i_X509.html>
=item * d2i_X509_CRL_bio
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Loads DER formatted X509_CRL object via given BIO structure.
my $rv = Net::SSLeay::d2i_X509_CRL_bio($bp);
# $bp - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's X509_CRL structure (0 on failure)
Example:
my $bio = Net::SSLeay::BIO_new_file($filename, 'rb');
my $x509_crl = Net::SSLeay::d2i_X509_CRL_bio($bio);
Net::SSLeay::BIO_free($bio);
=item * d2i_X509_REQ_bio
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Loads DER formatted X509_REQ object via given BIO structure.
my $rv = Net::SSLeay::d2i_X509_REQ_bio($bp);
# $bp - value corresponding to openssl's BIO structure
#
# returns: value corresponding to openssl's X509_REQ structure (0 on failure)
Example:
my $bio = Net::SSLeay::BIO_new_file($filename, 'rb');
my $x509_req = Net::SSLeay::d2i_X509_REQ_bio($bio);
Net::SSLeay::BIO_free($bio);
=back
=head3 Low level API: PKCS12 related functions
=over
=item * P_PKCS12_load_file
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Loads X509 certificate + private key + certificates of CA chain (if present in PKCS12 file).
my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, $load_chain, $password);
# $filename - name of PKCS12 file
# $load_chain - [optional] whether load (1) or not(0) CA chain (default: 0)
# $password - [optional] password for private key
#
# returns: triplet ($privkey, $cert, @cachain)
# $privkey - value corresponding to openssl's EVP_PKEY structure
# $cert - value corresponding to openssl's X509 structure
# @cachain - array of values corresponding to openssl's X509 structure (empty if no CA chain in PKCS12)
B<IMPORTANT NOTE:> after you do the job you need to call X509_free() on $privkey + all members
of @cachain and EVP_PKEY_free() on $privkey.
Examples:
my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename);
#or
my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename, 0, $password);
#or
my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, 1);
#or
my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, 1, $password);
#BEWARE: THIS IS WRONG - MEMORY LEAKS! (you cannot free @cachain items)
my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename, 1, $password);
B<NOTE> With some combinations of Windows, perl, compiler and compiler options, you
may see a runtime error "no OPENSSL_Applink", when calling
Net::SSLeay::P_PKCS12_load_file. See README.Win32 for more details.
=back
=head3 Low level API: SESSION_* related functions
=over
=item * d2i_SSL_SESSION
B<COMPATIBILITY:> does not work in Net-SSLeay-1.85 and before
Transforms the binary ASN1 representation string of an SSL/TLS session into an
SSL_SESSION object.
my $ses = Net::SSLeay::d2i_SSL_SESSION($data);
# $data - the session as ASN1 representation string
#
# returns: $ses - the new SSL_SESSION
Check openssl doc L<https://www.openssl.org/docs/ssl/i2d_SSL_SESSION.html|https://www.openssl.org/docs/ssl/i2d_SSL_SESSION.html>
=item * i2d_SSL_SESSION
B<COMPATIBILITY:> does not work in Net-SSLeay-1.85 and before
Transforms the SSL_SESSION object in into the ASN1 representation and returns
it as string.
my $data = Net::SSLeay::i2d_SSL_SESSION($ses);
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: $data - session as string
Check openssl doc L<https://www.openssl.org/docs/ssl/d2i_SSL_SESSION.html|https://www.openssl.org/docs/ssl/d2i_SSL_SESSION.html>
=item * SESSION_new
Creates a new SSL_SESSION structure.
my $rv = Net::SSLeay::SESSION_new();
#
# returns: value corresponding to openssl's SSL_SESSION structure (0 on failure)
=item * SESSION_free
Free an allocated SSL_SESSION structure.
Net::SSLeay::SESSION_free($ses);
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_free.html|http://www.openssl.org/docs/ssl/SSL_SESSION_free.html>
=item * SESSION_up_ref
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0 or LibreSSL 2.7.0
Increases the reference counter on a SSL_SESSION structure.
Net::SSLeay::SESSION_up_ref($ses);
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: 1 on success else 0
Check openssl doc
L<https://www.openssl.org/docs/ssl/SSL_SESSION_up_ref.html|https://www.openssl.org/docs/ssl/SSL_SESSION_up_ref.html>
=item * SESSION_dup
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Duplicates a SSL_SESSION structure.
Net::SSLeay::SESSION_dup($ses);
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: the duplicated session
Check openssl doc
L<https://www.openssl.org/docs/ssl/SSL_SESSION_dup.html|https://www.openssl.org/docs/ssl/SSL_SESSION_dup.html>
=item * SESSION_is_resumable
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Determine whether an SSL_SESSION object can be used for resumption.
Net::SSLeay::SESSION_is_resumable($ses);
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: (integer) 1 if it can or 0 if not
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_SESSION_is_resumable.html|https://www.openssl.org/docs/manmaster/man3/SSL_SESSION_is_resumable.html>
=item * SESSION_cmp
Compare two SSL_SESSION structures.
my $rv = Net::SSLeay::SESSION_cmp($sesa, $sesb);
# $sesa - value corresponding to openssl's SSL_SESSION structure
# $sesb - value corresponding to openssl's SSL_SESSION structure
#
# returns: 0 if the two structures are the same
B<NOTE:> Not available in openssl 1.0 or later
=item * SESSION_get_app_data
Can be used to get application defined value/data.
my $rv = Net::SSLeay::SESSION_get_app_data($ses);
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: string/buffer/pointer ???
=item * SESSION_set_app_data
Can be used to set some application defined value/data.
my $rv = Net::SSLeay::SESSION_set_app_data($s, $a);
# $s - value corresponding to openssl's SSL_SESSION structure
# $a - (string/buffer/pointer ???) data
#
# returns: ???
=item * SESSION_get_ex_data
Is used to retrieve the information for $idx from session $ses.
my $rv = Net::SSLeay::SESSION_get_ex_data($ses, $idx);
# $ses - value corresponding to openssl's SSL_SESSION structure
# $idx - (integer) index for application specific data
#
# returns: pointer to ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html>
=item * SESSION_set_ex_data
Is used to store application data at arg for idx into the session object.
my $rv = Net::SSLeay::SESSION_set_ex_data($ss, $idx, $data);
# $ss - value corresponding to openssl's SSL_SESSION structure
# $idx - (integer) ???
# $data - (pointer) ???
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html>
=item * SESSION_get_ex_new_index
Is used to register a new index for application specific data.
my $rv = Net::SSLeay::SESSION_get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func);
# $argl - (long) ???
# $argp - (pointer) ???
# $new_func - function pointer ??? (CRYPTO_EX_new *)
# $dup_func - function pointer ??? (CRYPTO_EX_dup *)
# $free_func - function pointer ??? (CRYPTO_EX_free *)
#
# returns: (integer) ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html>
=item * SESSION_get_master_key
B<NOTE:> Does not exactly correspond to any low level API function
Returns 'master_key' value from SSL_SESSION structure $s
Net::SSLeay::SESSION_get_master_key($s);
# $s - value corresponding to openssl's SSL_SESSION structure
#
# returns: master key (binary data)
=item * SESSION_set_master_key
Sets 'master_key' value for SSL_SESSION structure $s
Net::SSLeay::SESSION_set_master_key($s, $key);
# $s - value corresponding to openssl's SSL_SESSION structure
# $key - master key (binary data)
#
# returns: no return value
Not available with OpenSSL 1.1 and later.
Code that previously used
SESSION_set_master_key must now set $secret in the session_secret
callback set with SSL_set_session_secret_cb.
=item * SESSION_get_time
Returns the time at which the session s was established.
The time is given in seconds since 1.1.1970.
my $rv = Net::SSLeay::SESSION_get_time($s);
# $s - value corresponding to openssl's SSL_SESSION structure
#
# returns: timestamp (seconds since 1.1.1970)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
=item * get_time
Technically the same functionality as L</SESSION_get_time>.
my $rv = Net::SSLeay::get_time($s);
=item * SESSION_get_timeout
Returns the timeout value set for session $s in seconds.
my $rv = Net::SSLeay::SESSION_get_timeout($s);
# $s - value corresponding to openssl's SSL_SESSION structure
#
# returns: timeout (in seconds)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
=item * get_timeout
Technically the same functionality as L</SESSION_get_timeout>.
my $rv = Net::SSLeay::get_timeout($s);
=item * SESSION_print
B<NOTE:> Does not exactly correspond to any low level API function
Prints session details (e.g. protocol version, cipher, session-id ...) to BIO.
my $rv = Net::SSLeay::SESSION_print($fp, $ses);
# $fp - value corresponding to openssl's BIO structure
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: 1 on success, 0 on failure
You have to use necessary BIO functions like this:
# let us have $ssl corresponding to openssl's SSL structure
my $ses = Net::SSLeay::get_session($ssl);
my $bio = Net::SSLeay::BIO_new(&Net::SSLeay::BIO_s_mem);
Net::SSLeay::SESSION_print($bio, $ses);
print Net::SSLeay::BIO_read($bio);
=item * SESSION_print_fp
Prints session details (e.g. protocol version, cipher, session-id ...) to file handle.
my $rv = Net::SSLeay::SESSION_print_fp($fp, $ses);
# $fp - perl file handle
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: 1 on success, 0 on failure
Example:
# let us have $ssl corresponding to openssl's SSL structure
my $ses = Net::SSLeay::get_session($ssl);
open my $fh, ">", "output.txt";
Net::SSLeay::SESSION_print_fp($fh,$ses);
=item * SESSION_set_time
Replaces the creation time of the session s with the chosen value $t (seconds since 1.1.1970).
my $rv = Net::SSLeay::SESSION_set_time($ses, $t);
# $ses - value corresponding to openssl's SSL_SESSION structure
# $t - time value
#
# returns: 1 on success
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
=item * set_time
Technically the same functionality as L</SESSION_set_time>.
my $rv = Net::SSLeay::set_time($ses, $t);
=item * SESSION_set_timeout
Sets the timeout value for session s in seconds to $t.
my $rv = Net::SSLeay::SESSION_set_timeout($s, $t);
# $s - value corresponding to openssl's SSL_SESSION structure
# $t - timeout (in seconds)
#
# returns: 1 on success
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
=item * set_timeout
Technically the same functionality as L</SESSION_set_timeout>.
my $rv = Net::SSLeay::set_timeout($ses, $t);
=back
=head3 Low level API: SSL_CTX_* related functions
B<NOTE:> Please note that the function described in this chapter have "SSL_" part stripped from their original openssl names.
=over
=item * CTX_add_client_CA
Adds the CA name extracted from $cacert to the list of CAs sent to the client when requesting a client certificate for $ctx.
my $rv = Net::SSLeay::CTX_add_client_CA($ctx, $cacert);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $cacert - value corresponding to openssl's X509 structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
=item * CTX_add_extra_chain_cert
Adds the certificate $x509 to the certificate chain presented together with the certificate. Several certificates can be added one after the other.
my $rv = Net::SSLeay::CTX_add_extra_chain_cert($ctx, $x509);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $x509 - value corresponding to openssl's X509 structure
#
# returns: 1 on success, check out the error stack to find out the reason for failure otherwise
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_add_extra_chain_cert.html|http://www.openssl.org/docs/ssl/SSL_CTX_add_extra_chain_cert.html>
=item * CTX_add_session
Adds the session $ses to the context $ctx.
my $rv = Net::SSLeay::CTX_add_session($ctx, $ses);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html|http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html>
=item * CTX_callback_ctrl
??? (more info needed)
my $rv = Net::SSLeay::CTX_callback_ctrl($ctx, $cmd, $fp);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $cmd - (integer) command id
# $fp - (function pointer) ???
#
# returns: ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
=item * CTX_check_private_key
Checks the consistency of a private key with the corresponding certificate loaded into $ctx.
my $rv = Net::SSLeay::CTX_check_private_key($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * CTX_ctrl
Internal handling function for SSL_CTX objects.
B<BEWARE:> openssl doc says: This function should never be called directly!
my $rv = Net::SSLeay::CTX_ctrl($ctx, $cmd, $larg, $parg);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $cmd - (integer) command id
# $larg - (integer) long ???
# $parg - (string/pointer) ???
#
# returns: (long) result of given command ???
#valid $cmd values
1 - SSL_CTRL_NEED_TMP_RSA
2 - SSL_CTRL_SET_TMP_RSA
3 - SSL_CTRL_SET_TMP_DH
4 - SSL_CTRL_SET_TMP_ECDH
5 - SSL_CTRL_SET_TMP_RSA_CB
6 - SSL_CTRL_SET_TMP_DH_CB
7 - SSL_CTRL_SET_TMP_ECDH_CB
8 - SSL_CTRL_GET_SESSION_REUSED
9 - SSL_CTRL_GET_CLIENT_CERT_REQUEST
10 - SSL_CTRL_GET_NUM_RENEGOTIATIONS
11 - SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS
12 - SSL_CTRL_GET_TOTAL_RENEGOTIATIONS
13 - SSL_CTRL_GET_FLAGS
14 - SSL_CTRL_EXTRA_CHAIN_CERT
15 - SSL_CTRL_SET_MSG_CALLBACK
16 - SSL_CTRL_SET_MSG_CALLBACK_ARG
17 - SSL_CTRL_SET_MTU
20 - SSL_CTRL_SESS_NUMBER
21 - SSL_CTRL_SESS_CONNECT
22 - SSL_CTRL_SESS_CONNECT_GOOD
23 - SSL_CTRL_SESS_CONNECT_RENEGOTIATE
24 - SSL_CTRL_SESS_ACCEPT
25 - SSL_CTRL_SESS_ACCEPT_GOOD
26 - SSL_CTRL_SESS_ACCEPT_RENEGOTIATE
27 - SSL_CTRL_SESS_HIT
28 - SSL_CTRL_SESS_CB_HIT
29 - SSL_CTRL_SESS_MISSES
30 - SSL_CTRL_SESS_TIMEOUTS
31 - SSL_CTRL_SESS_CACHE_FULL
32 - SSL_CTRL_OPTIONS
33 - SSL_CTRL_MODE
40 - SSL_CTRL_GET_READ_AHEAD
41 - SSL_CTRL_SET_READ_AHEAD
42 - SSL_CTRL_SET_SESS_CACHE_SIZE
43 - SSL_CTRL_GET_SESS_CACHE_SIZE
44 - SSL_CTRL_SET_SESS_CACHE_MODE
45 - SSL_CTRL_GET_SESS_CACHE_MODE
50 - SSL_CTRL_GET_MAX_CERT_LIST
51 - SSL_CTRL_SET_MAX_CERT_LIST
52 - SSL_CTRL_SET_MAX_SEND_FRAGMENT
53 - SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
54 - SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG
55 - SSL_CTRL_SET_TLSEXT_HOSTNAME
56 - SSL_CTRL_SET_TLSEXT_DEBUG_CB
57 - SSL_CTRL_SET_TLSEXT_DEBUG_ARG
58 - SSL_CTRL_GET_TLSEXT_TICKET_KEYS
59 - SSL_CTRL_SET_TLSEXT_TICKET_KEYS
60 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT
61 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB
62 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG
63 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB
64 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG
65 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE
66 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS
67 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS
68 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS
69 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS
70 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP
71 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP
72 - SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB
73 - DTLS_CTRL_GET_TIMEOUT
74 - DTLS_CTRL_HANDLE_TIMEOUT
75 - DTLS_CTRL_LISTEN
76 - SSL_CTRL_GET_RI_SUPPORT
77 - SSL_CTRL_CLEAR_OPTIONS
78 - SSL_CTRL_CLEAR_MODE
82 - SSL_CTRL_GET_EXTRA_CHAIN_CERTS
83 - SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS
88 - SSL_CTRL_CHAIN
89 - SSL_CTRL_CHAIN_CERT
90 - SSL_CTRL_GET_CURVES
91 - SSL_CTRL_SET_CURVES
92 - SSL_CTRL_SET_CURVES_LIST
93 - SSL_CTRL_GET_SHARED_CURVE
94 - SSL_CTRL_SET_ECDH_AUTO
97 - SSL_CTRL_SET_SIGALGS
98 - SSL_CTRL_SET_SIGALGS_LIST
99 - SSL_CTRL_CERT_FLAGS
100 - SSL_CTRL_CLEAR_CERT_FLAGS
101 - SSL_CTRL_SET_CLIENT_SIGALGS
102 - SSL_CTRL_SET_CLIENT_SIGALGS_LIST
103 - SSL_CTRL_GET_CLIENT_CERT_TYPES
104 - SSL_CTRL_SET_CLIENT_CERT_TYPES
105 - SSL_CTRL_BUILD_CERT_CHAIN
106 - SSL_CTRL_SET_VERIFY_CERT_STORE
107 - SSL_CTRL_SET_CHAIN_CERT_STORE
108 - SSL_CTRL_GET_PEER_SIGNATURE_NID
109 - SSL_CTRL_GET_SERVER_TMP_KEY
110 - SSL_CTRL_GET_RAW_CIPHERLIST
111 - SSL_CTRL_GET_EC_POINT_FORMATS
112 - SSL_CTRL_GET_TLSA_RECORD
113 - SSL_CTRL_SET_TLSA_RECORD
114 - SSL_CTRL_PULL_TLSA_RECORD
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
=item * CTX_flush_sessions
Causes a run through the session cache of $ctx to remove sessions expired at time $tm.
Net::SSLeay::CTX_flush_sessions($ctx, $tm);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $tm - specifies the time which should be used for the expiration test (seconds since 1.1.1970)
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_flush_sessions.html|http://www.openssl.org/docs/ssl/SSL_CTX_flush_sessions.html>
=item * CTX_free
Free an allocated SSL_CTX object.
Net::SSLeay::CTX_free($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_free.html|http://www.openssl.org/docs/ssl/SSL_CTX_free.html>
=item * CTX_get_app_data
Can be used to get application defined value/data.
my $rv = Net::SSLeay::CTX_get_app_data($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: string/buffer/pointer ???
=item * CTX_set_app_data
Can be used to set some application defined value/data.
my $rv = Net::SSLeay::CTX_set_app_data($ctx, $arg);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $arg - (string/buffer/pointer ???) data
#
# returns: ???
=item * CTX_get0_param
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Returns the current verification parameters.
my $vpm = Net::SSLeay::CTX_get0_param($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: value corresponding to openssl's X509_VERIFY_PARAM structure
Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html|https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html>
=item * CTX_get_cert_store
Returns the current certificate verification storage.
my $rv = Net::SSLeay::CTX_get_cert_store($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: value corresponding to openssl's X509_STORE structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html>
=item * CTX_get_client_CA_list
Returns the list of client CAs explicitly set for $ctx using L</CTX_set_client_CA_list>.
my $rv = Net::SSLeay::CTX_get_client_CA_list($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: value corresponding to openssl's X509_NAME_STACK structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html>
=item * CTX_get_ex_data
Is used to retrieve the information for index $idx from $ctx.
my $rv = Net::SSLeay::CTX_get_ex_data($ssl, $idx);
# $ssl - value corresponding to openssl's SSL_CTX structure
# $idx - (integer) index for application specific data
#
# returns: pointer to ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html>
=item * CTX_get_ex_new_index
Is used to register a new index for application specific data.
my $rv = Net::SSLeay::CTX_get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func);
# $argl - (long) ???
# $argp - (pointer) ???
# $new_func - function pointer ??? (CRYPTO_EX_new *)
# $dup_func - function pointer ??? (CRYPTO_EX_dup *)
# $free_func - function pointer ??? (CRYPTO_EX_free *)
#
# returns: (integer) ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html>
=item * CTX_get_mode
Returns the mode set for ctx.
my $rv = Net::SSLeay::CTX_get_mode($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: mode (bitmask)
#to decode the return value (bitmask) use:
0x00000001 corresponds to SSL_MODE_ENABLE_PARTIAL_WRITE
0x00000002 corresponds to SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER
0x00000004 corresponds to SSL_MODE_AUTO_RETRY
0x00000008 corresponds to SSL_MODE_NO_AUTO_CHAIN
0x00000010 corresponds to SSL_MODE_RELEASE_BUFFERS
(note: some of the bits might not be supported by older openssl versions)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
=item * CTX_set_mode
Adds the mode set via bitmask in $mode to $ctx. Options already set before are not cleared.
my $rv = Net::SSLeay::CTX_set_mode($ctx, $mode);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $mode - mode bitmask
#
# returns: the new mode bitmask after adding $mode
For bitmask details see L</CTX_get_mode> (above).
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
=item * CTX_get_options
Returns the options (bitmask) set for $ctx.
my $rv = Net::SSLeay::CTX_get_options($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: options (bitmask)
B<BEWARE:> The available constants and their values in bitmask depend
on the TLS library. For example, SSL_OP_NO_TLSv1_3 became available
much later than SSL_OP_NO_COMPRESS which is already deprecated by some
libraries. Also, some previously used option values have been recycled
and are now used for newer options. See the list of constants in this
document for options Net::SSLeay currently supports.
You are strongly encouraged to B<check your TLS library> if you need
to use numeric values directly. The following is a sample of historic
values. It may not be correct anymore.
#to decode the return value (bitmask) use:
0x00000004 corresponds to SSL_OP_LEGACY_SERVER_CONNECT
0x00000800 corresponds to SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
0x00004000 corresponds to SSL_OP_NO_TICKET
0x00010000 corresponds to SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
0x00400000 corresponds to SSL_OP_CIPHER_SERVER_PREFERENCE
0x04000000 corresponds to SSL_OP_NO_TLSv1
Check openssl doc L<https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html|https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html>
=item * CTX_set_options
Adds the options set via bitmask in $options to ctx. Options already set before are not cleared.
Net::SSLeay::CTX_set_options($ctx, $options);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $options - options bitmask
#
# returns: the new options bitmask after adding $options
For bitmask details see L</CTX_get_options> (above).
Check openssl doc L<https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html|https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html>
=item * CTX_get_quiet_shutdown
Returns the 'quiet shutdown' setting of $ctx.
my $rv = Net::SSLeay::CTX_get_quiet_shutdown($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: (integer) the current setting
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
=item * CTX_get_read_ahead
my $rv = Net::SSLeay::CTX_get_read_ahead($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: (integer) read_ahead value
=item * CTX_get_session_cache_mode
Returns the currently used cache mode (bitmask).
my $rv = Net::SSLeay::CTX_get_session_cache_mode($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: mode (bitmask)
B<BEWARE:> SESS_CACHE_OFF and other constants are not available in
Net-SSLeay-1.82 and before. If the constants are not available, the
following values have historically been correct. You are strongly
encouraged to B<check your TLS library> for the current values.
#to decode the return value (bitmask) use:
0x0000 corresponds to SSL_SESS_CACHE_OFF
0x0001 corresponds to SSL_SESS_CACHE_CLIENT
0x0002 corresponds to SSL_SESS_CACHE_SERVER
0x0080 corresponds to SSL_SESS_CACHE_NO_AUTO_CLEAR
0x0100 corresponds to SSL_SESS_CACHE_NO_INTERNAL_LOOKUP
0x0200 corresponds to SSL_SESS_CACHE_NO_INTERNAL_STORE
(note: some of the bits might not be supported by older openssl versions)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html>
=item * CTX_set_session_cache_mode
Enables/disables session caching by setting the operational mode for $ctx to $mode.
my $rv = Net::SSLeay::CTX_set_session_cache_mode($ctx, $mode);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $mode - mode (bitmask)
#
# returns: previously set cache mode
For bitmask details see L</CTX_get_session_cache_mode> (above).
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html>
=item * CTX_get_timeout
Returns the currently set timeout value for $ctx.
my $rv = Net::SSLeay::CTX_get_timeout($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: timeout in seconds
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html>
=item * CTX_get_verify_depth
Returns the verification depth limit currently set in $ctx. If no limit has been explicitly set, -1 is returned and the default value will be used.",
my $rv = Net::SSLeay::CTX_get_verify_depth($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: depth limit currently set in $ctx, -1 if no limit has been explicitly set
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html>
=item * CTX_get_verify_mode
Returns the verification mode (bitmask) currently set in $ctx.
my $rv = Net::SSLeay::CTX_get_verify_mode($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: mode (bitmask)
For bitmask details see L</"CTX_set_verify">.
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_verify_mode.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_verify_mode.html>
=item * CTX_set_verify
Sets the verification flags for $ctx to be $mode and specifies the verify_callback function to be used.
Net::SSLeay::CTX_set_verify($ctx, $mode, $callback);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $mode - mode (bitmask), see OpenSSL manual
# $callback - [optional] reference to perl callback function
#
# returns: no return value
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_verify.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_verify.html>
=item * CTX_set_post_handshake_auth
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Enable the Post-Handshake Authentication extension to be added to the ClientHello such that post-handshake authentication can be requested by the server.
Net::SSLeay::CTX_set_posthandshake_auth($ctx, $val);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $val - 0 then the extension is not sent, otherwise it is
#
# returns: no return value
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_post_handshake_auth|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_post_handshake_auth.html>
=item * CTX_load_verify_locations
Specifies the locations for $ctx, at which CA certificates for verification purposes are located. The certificates available via $CAfile and $CApath are trusted.
my $rv = Net::SSLeay::CTX_load_verify_locations($ctx, $CAfile, $CApath);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $CAfile - (string) file of CA certificates in PEM format, the file can contain several CA certificates (or '')
# $CApath - (string) directory containing CA certificates in PEM format (or '')
#
# returns: 1 on success, 0 on failure (check the error stack to find out the reason)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html|http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>
=item * CTX_need_tmp_RSA
Return the result of C<SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)>
my $rv = Net::SSLeay::CTX_need_tmp_RSA($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: result of SSL_CTRL_NEED_TMP_RSA command
Not available with OpenSSL 1.1 and later.
=item * CTX_new
The same as L</CTX_v23_new>
my $rv = Net::SSLeay::CTX_new();
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
Not available with OpenSSL 1.1 and later.
=item * CTX_v2_new
Creates a new SSL_CTX object - based on SSLv2_method() - as framework to establish TLS/SSL enabled connections.
my $rv = Net::SSLeay::CTX_v2_new();
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
=item * CTX_v23_new
Creates a new SSL_CTX object - based on SSLv23_method() - as framework to establish TLS/SSL enabled connections.
my $rv = Net::SSLeay::CTX_v23_new();
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
=item * CTX_v3_new
Creates a new SSL_CTX object - based on SSLv3_method() - as framework to establish TLS/SSL enabled connections.
my $rv = Net::SSLeay::CTX_v3_new();
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
=item * CTX_tlsv1_new
Creates a new SSL_CTX object - based on TLSv1_method() - as framework to establish TLS/SSL enabled connections.
my $rv = Net::SSLeay::CTX_tlsv1_new();
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
=item * CTX_tlsv1_1_new
Creates a new SSL_CTX object - based on TLSv1_1_method() - as framework to establish TLS/SSL
enabled connections. Only available where supported by the underlying openssl.
my $rv = Net::SSLeay::CTX_tlsv1_1_new();
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
=item * CTX_tlsv1_2_new
Creates a new SSL_CTX object - based on TLSv1_2_method() - as framework to establish TLS/SSL
enabled connections. Only available where supported by the underlying openssl.
my $rv = Net::SSLeay::CTX_tlsv1_2_new();
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
=item * CTX_new_with_method
Creates a new SSL_CTX object based on $meth method
my $rv = Net::SSLeay::CTX_new_with_method($meth);
# $meth - value corresponding to openssl's SSL_METHOD structure
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
#example
my $ctx = Net::SSLeay::CTX_new_with_method(&Net::SSLeay::TLSv1_method);
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
=item * CTX_set_min_proto_version, CTX_set_max_proto_version, set_min_proto_version and set_max_proto_version,
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0 or LibreSSL 2.6.0
Set the minimum and maximum supported protocol for $ctx or $ssl.
my $rv = Net::SSLeay::CTX_set_min_proto_version($ctx, $version)
# $ctx - value corresponding to openssl's SSL_CTX structure
# $version - (integer) constat version value or 0 for automatic lowest or highest value
#
# returns: 1 on success, 0 on failure
#example: allow only TLS 1.2 for a SSL_CTX
my $rv_min = Net::SSLeay::CTX_set_min_proto_version($ctx, Net::SSLeay::TLS1_2_VERSION());
my $rv_max = Net::SSLeay::CTX_set_max_proto_version($ctx, Net::SSLeay::TLS1_2_VERSION());
#example: allow only TLS 1.1 for a SSL
my $rv_min = Net::SSLeay::set_min_proto_version($ssl, Net::SSLeay::TLS1_1_VERSION());
my $rv_max = Net::SSLeay::set_max_proto_version($ssl, Net::SSLeay::TLS1_1_VERSION());
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html>
=item * CTX_get_min_proto_version, CTX_get_max_proto_version, get_min_proto_version and get_max_proto_version,
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0g
Get the minimum and maximum supported protocol for $ctx or $ssl.
my $version = Net::SSLeay::CTX_get_min_proto_version($ctx)
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: 0 automatic lowest or highest value, configured value otherwise
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html>
=item * CTX_remove_session
Removes the session $ses from the context $ctx.
my $rv = Net::SSLeay::CTX_remove_session($ctx, $ses);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html|http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html>
=item * CTX_sess_accept
my $rv = Net::SSLeay::CTX_sess_accept($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of started SSL/TLS handshakes in server mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_accept_good
my $rv = Net::SSLeay::CTX_sess_accept_good($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of successfully established SSL/TLS sessions in server mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_accept_renegotiate
my $rv = Net::SSLeay::CTX_sess_accept_renegotiate($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of start renegotiations in server mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_cache_full
my $rv = Net::SSLeay::CTX_sess_cache_full($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of sessions that were removed because the maximum session cache size was exceeded
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_cb_hits
my $rv = Net::SSLeay::CTX_sess_cb_hits($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of successfully retrieved sessions from the external session cache in server mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_connect
my $rv = Net::SSLeay::CTX_sess_connect($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of started SSL/TLS handshakes in client mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_connect_good
my $rv = Net::SSLeay::CTX_sess_connect_good($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of successfully established SSL/TLS sessions in client mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_connect_renegotiate
my $rv = Net::SSLeay::CTX_sess_connect_renegotiate($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of start renegotiations in client mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_get_cache_size
Returns the currently valid session cache size.
my $rv = Net::SSLeay::CTX_sess_get_cache_size($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: current size
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html>
=item * CTX_sess_hits
my $rv = Net::SSLeay::CTX_sess_hits($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of successfully reused sessions
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_misses
my $rv = Net::SSLeay::CTX_sess_misses($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of sessions proposed by clients that were not found in the internal session cache in server mode
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_number
my $rv = Net::SSLeay::CTX_sess_number($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: current number of sessions in the internal session cache
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_set_cache_size
Sets the size of the internal session cache of context $ctx to $size.
Net::SSLeay::CTX_sess_set_cache_size($ctx, $size);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $size - cache size (0 = unlimited)
#
# returns: previously valid size
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html>
=item * CTX_sess_timeouts
Returns the number of sessions proposed by clients and either found in the internal or external session cache in
server mode, but that were invalid due to timeout. These sessions are not included in the SSL_CTX_sess_hits count.
my $rv = Net::SSLeay::CTX_sess_timeouts($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: number of sessions
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
=item * CTX_sess_set_new_cb
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before
Sets the callback function, which is automatically called whenever a new session was negotiated.
Net::SSLeay::CTX_sess_set_new_cb($ctx, $func);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $func - perl reference to callback function
#
# returns: no return value
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_new_cb.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_new_cb.html>
=item * CTX_sess_set_remove_cb
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before
Sets the callback function, which is automatically called whenever a session is removed by the SSL engine.
Net::SSLeay::CTX_sess_set_remove_cb($ctx, $func);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $func - perl reference to callback function
#
# returns: no return value
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_remove_cb.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_remove_cb.html>
=item * CTX_sessions
Returns a pointer to the lhash databases containing the internal session cache for ctx.
my $rv = Net::SSLeay::CTX_sessions($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: value corresponding to openssl's LHASH structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sessions.html|http://www.openssl.org/docs/ssl/SSL_CTX_sessions.html>
=item * CTX_set1_param
Applies X509 verification parameters $vpm on $ctx
my $rv = Net::SSLeay::CTX_set1_param($ctx, $vpm);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $vpm - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html|https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html>
=item * CTX_set_cert_store
Sets/replaces the certificate verification storage of $ctx to/with $store.
Net::SSLeay::CTX_set_cert_store($ctx, $store);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $store - value corresponding to openssl's X509_STORE structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html>
=item * CTX_set_cert_verify_callback
Sets the verification callback function for $ctx. SSL objects that are created from $ctx
inherit the setting valid at the time when C<Net::SSLeay::new($ctx)> is called.
Net::SSLeay::CTX_set_cert_verify_callback($ctx, $func, $data);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $func - perl reference to callback function
# $data - [optional] data that will be passed to callback function when invoked
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_verify_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_verify_callback.html>
=item * CTX_set_cipher_list
Sets the list of available ciphers for $ctx using the control string $str.
The list of ciphers is inherited by all ssl objects created from $ctx.
my $rv = Net::SSLeay::CTX_set_cipher_list($s, $str);
# $s - value corresponding to openssl's SSL_CTX structure
# $str - (string) cipher list e.g. '3DES:+RSA'
#
# returns: 1 if any cipher could be selected and 0 on complete failure
The format of $str is described in L<http://www.openssl.org/docs/apps/ciphers.html|http://www.openssl.org/docs/apps/ciphers.html>
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html>
=item * CTX_set_ciphersuites
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Configure the available TLSv1.3 ciphersuites.
my $rv = Net::SSLeay::CTX_set_ciphersuites($ctx, $str);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $str - colon (":") separated list of TLSv1.3 ciphersuite names in order of preference
#
# returns: (integer) 1 if the requested ciphersuite list was configured, and 0 otherwise
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_ciphersuites.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_ciphersuites.html>
=item * CTX_set_client_CA_list
Sets the list of CAs sent to the client when requesting a client certificate for $ctx.
Net::SSLeay::CTX_set_client_CA_list($ctx, $list);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $list - value corresponding to openssl's X509_NAME_STACK structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
=item * CTX_set_default_passwd_cb
Sets the default password callback called when loading/storing a PEM certificate with encryption.
Net::SSLeay::CTX_set_default_passwd_cb($ctx, $func);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $func - perl reference to callback function
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
=item * CTX_set_default_passwd_cb_userdata
Sets a pointer to userdata which will be provided to the password callback on invocation.
Net::SSLeay::CTX_set_default_passwd_cb_userdata($ctx, $userdata);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $userdata - data that will be passed to callback function when invoked
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
=item * CTX_set_default_verify_paths
??? (more info needed)
my $rv = Net::SSLeay::CTX_set_default_verify_paths($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: 1 on success, 0 on failure
=item * CTX_set_ex_data
Is used to store application data at $data for $idx into the $ctx object.
my $rv = Net::SSLeay::CTX_set_ex_data($ssl, $idx, $data);
# $ssl - value corresponding to openssl's SSL_CTX structure
# $idx - (integer) ???
# $data - (pointer) ???
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html>
=item * CTX_set_purpose
my $rv = Net::SSLeay::CTX_set_purpose($s, $purpose);
# $s - value corresponding to openssl's SSL_CTX structure
# $purpose - (integer) purpose identifier
#
# returns: 1 on success, 0 on failure
#avainable purpose identifier
1 - X509_PURPOSE_SSL_CLIENT
2 - X509_PURPOSE_SSL_SERVER
3 - X509_PURPOSE_NS_SSL_SERVER
4 - X509_PURPOSE_SMIME_SIGN
5 - X509_PURPOSE_SMIME_ENCRYPT
6 - X509_PURPOSE_CRL_SIGN
7 - X509_PURPOSE_ANY
8 - X509_PURPOSE_OCSP_HELPER
9 - X509_PURPOSE_TIMESTAMP_SIGN
#or use corresponding constants
$purpose = &Net::SSLeay::X509_PURPOSE_SSL_CLIENT;
...
$purpose = &Net::SSLeay::X509_PURPOSE_TIMESTAMP_SIGN;
=item * CTX_set_quiet_shutdown
Sets the 'quiet shutdown' flag for $ctx to be mode. SSL objects created from $ctx inherit the mode valid at the time C<Net::SSLeay::new($ctx)> is called.
Net::SSLeay::CTX_set_quiet_shutdown($ctx, $mode);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $mode - 0 or 1
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
=item * CTX_set_read_ahead
my $rv = Net::SSLeay::CTX_set_read_ahead($ctx, $val);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $val - read_ahead value to be set
#
# returns: the original read_ahead value
=item * CTX_set_session_id_context
Sets the context $sid_ctx of length $sid_ctx_len within which a session can be reused for the $ctx object.
my $rv = Net::SSLeay::CTX_set_session_id_context($ctx, $sid_ctx, $sid_ctx_len);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $sid_ctx - data buffer
# $sid_ctx_len - length of data in $sid_ctx
#
# returns: 1 on success, 0 on failure (the error is logged to the error stack)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html>
=item * CTX_set_ssl_version
Sets a new default TLS/SSL method for SSL objects newly created from this $ctx.
SSL objects already created with C<Net::SSLeay::new($ctx)> are not
affected, except when C<Net::SSLeay:clear($ssl)> is being called.
my $rv = Net::SSLeay::CTX_set_ssl_version($ctx, $meth);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $meth - value corresponding to openssl's SSL_METHOD structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html>
=item * CTX_set_timeout
Sets the timeout for newly created sessions for $ctx to $t. The timeout value $t must be given in seconds.
my $rv = Net::SSLeay::CTX_set_timeout($ctx, $t);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $t - timeout in seconds
#
# returns: previously set timeout value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html>
=item * CTX_set_tmp_dh
Sets DH parameters to be used to be $dh. The key is inherited by all ssl objects created from $ctx.
my $rv = Net::SSLeay::CTX_set_tmp_dh($ctx, $dh);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $dh - value corresponding to openssl's DH structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
=item * CTX_set_tmp_dh_callback
Sets the callback function for $ctx to be used when a DH parameters are required to $tmp_dh_callback.
Net::SSLeay::CTX_set_tmp_dh_callback($ctx, $tmp_dh_callback);
# $ctx - value corresponding to openssl's SSL_CTX structure
# tmp_dh_callback - (function pointer) ???
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
=item * CTX_set_tmp_rsa
Sets the temporary/ephemeral RSA key to be used to be $rsa.
my $rv = Net::SSLeay::CTX_set_tmp_rsa($ctx, $rsa);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $rsa - value corresponding to openssl's RSA structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
Not available with OpenSSL 1.1 and later.
=item * CTX_set_tmp_rsa_callback
Sets the callback function for ctx to be used when a temporary/ephemeral RSA key is required to $tmp_rsa_callback.
??? (does this function really work?)
Net::SSLeay::CTX_set_tmp_rsa_callback($ctx, $tmp_rsa_callback);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $tmp_rsa_callback - (function pointer) ???
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
Not available with OpenSSL 1.1 and later.
=item * CTX_set_trust
my $rv = Net::SSLeay::CTX_set_trust($s, $trust);
# $s - value corresponding to openssl's SSL_CTX structure
# $trust - (integer) trust identifier
#
# returns: the original value
#available trust identifiers
1 - X509_TRUST_COMPAT
2 - X509_TRUST_SSL_CLIENT
3 - X509_TRUST_SSL_SERVER
4 - X509_TRUST_EMAIL
5 - X509_TRUST_OBJECT_SIGN
6 - X509_TRUST_OCSP_SIGN
7 - X509_TRUST_OCSP_REQUEST
8 - X509_TRUST_TSA
#or use corresponding constants
$trust = &Net::SSLeay::X509_TRUST_COMPAT;
...
$trust = &Net::SSLeay::X509_TRUST_TSA;
=item * CTX_set_verify_depth
Sets the maximum depth for the certificate chain verification that shall be allowed for ctx.
Net::SSLeay::CTX_set_verify_depth($ctx, $depth);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $depth - max. depth
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html>
=item * CTX_use_PKCS12_file
Adds the certificate and private key from PKCS12 file $p12filename to $ctx.
my $rv = Net::SSLeay::CTX_use_PKCS12_file($ctx, $p12filename, $password);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $p12filename - (string) filename
# $password - (string) password to decrypt private key
#
# returns: 1 on success, 0 on failure
=item * CTX_use_PrivateKey
Adds the private key $pkey to $ctx.
my $rv = Net::SSLeay::CTX_use_PrivateKey($ctx, $pkey);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * CTX_use_PrivateKey_file
Adds the first private key found in $file to $ctx.
my $rv = Net::SSLeay::CTX_use_PrivateKey_file($ctx, $file, $type);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * CTX_use_RSAPrivateKey
Adds the RSA private key $rsa to $ctx.
my $rv = Net::SSLeay::CTX_use_RSAPrivateKey($ctx, $rsa);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $rsa - value corresponding to openssl's RSA structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * CTX_use_RSAPrivateKey_file
Adds the first RSA private key found in $file to $ctx.
my $rv = Net::SSLeay::CTX_use_RSAPrivateKey_file($ctx, $file, $type);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
=item * CTX_use_certificate
Loads the certificate $x into $ctx
my $rv = Net::SSLeay::CTX_use_certificate($ctx, $x);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $x - value corresponding to openssl's X509 structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * CTX_use_certificate_chain_file
Loads a certificate chain from $file into $ctx. The certificates must be in PEM format and must be sorted
starting with the subject's certificate (actual client or server certificate), followed by intermediate
CA certificates if applicable, and ending at the highest level (root) CA.
my $rv = Net::SSLeay::CTX_use_certificate_chain_file($ctx, $file);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $file - (string) file name
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * CTX_use_certificate_file
Loads the first certificate stored in $file into $ctx.
my $rv = Net::SSLeay::CTX_use_certificate_file($ctx, $file, $type);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * CTX_get_security_level
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL
Returns the security level associated with $ctx.
my $level = Net::SSLeay::CTX_get_security_level($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: (integer) current security level
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_security_level.html>
=item * CTX_set_security_level
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL
Sets the security level associated with $ctx to $level.
Net::SSLeay::CTX_set_security_level($ctx, $level);
# $ssl - value corresponding to openssl's SSL_CTX structure
# $level - new security level
#
# returns: no return value
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_security_level.html>
=item * CTX_set_num_tickets
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Set number of TLSv1.3 session tickets that will be sent to a client.
my $rv = Net::SSLeay::CTX_set_num_tickets($ctx, $number_of_tickets);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $number_of_tickets - number of tickets to send
#
# returns: 1 on success, 0 on failure
Set to zero if you do not no want to support a session resumption.
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_num_tickets.html>
=item * CTX_get_num_tickets
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Get number of TLSv1.3 session tickets that will be sent to a client.
my $number_of_tickets = Net::SSLeay::CTX_get_num_tickets($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: (integer) number of tickets to send
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_num_tickets.html>
=back
=head3 Low level API: SSL_* related functions
B<NOTE:> Please note that the function described in this chapter have "SSL_" part stripped from their original openssl names.
=over
=item * new
Creates a new SSL structure which is needed to hold the data for a TLS/SSL connection.
The new structure inherits the settings of the underlying context $ctx: connection
method (SSLv2/v3/TLSv1), options, verification settings, timeout settings.
my $rv = Net::SSLeay::new($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: value corresponding to openssl's SSL structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_new.html|http://www.openssl.org/docs/ssl/SSL_new.html>
=item * accept
Waits for a TLS/SSL client to initiate the TLS/SSL handshake. The communication
channel must already have been set and assigned to the ssl by setting an underlying BIO.
my $rv = Net::SSLeay::accept($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_accept.html|http://www.openssl.org/docs/ssl/SSL_accept.html>
=item * add_client_CA
Adds the CA name extracted from cacert to the list of CAs sent to the client
when requesting a client certificate for the chosen ssl, overriding the setting
valid for ssl's SSL_CTX object.
my $rv = Net::SSLeay::add_client_CA($ssl, $x);
# $ssl - value corresponding to openssl's SSL structure
# $x - value corresponding to openssl's X509 structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
=item * callback_ctrl
??? (more info needed)
my $rv = Net::SSLeay::callback_ctrl($ssl, $cmd, $fp);
# $ssl - value corresponding to openssl's SSL structure
# $cmd - (integer) command id
# $fp - (function pointer) ???
#
# returns: ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
=item * check_private_key
Checks the consistency of a private key with the corresponding certificate loaded into $ssl
my $rv = Net::SSLeay::check_private_key($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * clear
Reset SSL object to allow another connection.
Net::SSLeay::clear($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_clear.html|http://www.openssl.org/docs/ssl/SSL_clear.html>
=item * connect
Initiate the TLS/SSL handshake with an TLS/SSL server.
my $rv = Net::SSLeay::connect($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_connect.html|http://www.openssl.org/docs/ssl/SSL_connect.html>
=item * copy_session_id
Copies the session structure fro $from to $to (+ also the private key and certificate associated with $from).
Net::SSLeay::copy_session_id($to, $from);
# $to - value corresponding to openssl's SSL structure
# $from - value corresponding to openssl's SSL structure
#
# returns: no return value
=item * ctrl
Internal handling function for SSL objects.
B<BEWARE:> openssl doc says: This function should never be called directly!
my $rv = Net::SSLeay::ctrl($ssl, $cmd, $larg, $parg);
# $ssl - value corresponding to openssl's SSL structure
# $cmd - (integer) command id
# $larg - (integer) long ???
# $parg - (string/pointer) ???
#
# returns: (long) result of given command ???
For more details about valid $cmd values check L</CTX_ctrl>.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
=item * do_handshake
Will wait for a SSL/TLS handshake to take place. If the connection is in client
mode, the handshake will be started. The handshake routines may have to be
explicitly set in advance using either SSL_set_connect_state or SSL_set_accept_state(3).
my $rv = Net::SSLeay::do_handshake($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_do_handshake.html|http://www.openssl.org/docs/ssl/SSL_do_handshake.html>
=item * dup
Returns a duplicate of $ssl.
my $rv = Net::SSLeay::dup($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's SSL structure (0 on failure)
=item * free
Free an allocated SSL structure.
Net::SSLeay::free($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_free.html|http://www.openssl.org/docs/ssl/SSL_free.html>
=item * get0_param
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Returns the current verification parameters.
my $vpm = Net::SSLeay::get0_param($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's X509_VERIFY_PARAM structure
Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html|https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html>
=item * get_SSL_CTX
Returns a pointer to the SSL_CTX object, from which $ssl was created with Net::SSLeay::new.
my $rv = Net::SSLeay::get_SSL_CTX($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_SSL_CTX.html|http://www.openssl.org/docs/ssl/SSL_get_SSL_CTX.html>
=item * set_SSL_CTX
Sets the SSL_CTX the corresponds to an SSL session.
my $the_ssl_ctx = Net::SSLeay::set_SSL_CTX($ssl, $ssl_ctx);
# $ssl - value corresponding to openssl's SSL structure
# $ssl_ctx - Change the ssl object to the given ssl_ctx
#
# returns - the ssl_ctx
=item * get_app_data
Can be used to get application defined value/data.
my $rv = Net::SSLeay::get_app_data($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: string/buffer/pointer ???
=item * set_app_data
Can be used to set some application defined value/data.
my $rv = Net::SSLeay::set_app_data($ssl, $arg);
# $ssl - value corresponding to openssl's SSL structure
# $arg - (string/buffer/pointer ???) data
#
# returns: ???
=item * get_certificate
Gets X509 certificate from an established SSL connection.
my $rv = Net::SSLeay::get_certificate($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's X509 structure (0 on failure)
=item * get_cipher
Obtains the name of the currently used cipher.
my $rv = Net::SSLeay::get_cipher($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (string) cipher name e.g. 'DHE-RSA-AES256-SHA' or '', when no session has been established.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html|http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html>
=item * get_cipher_bits
Obtain the number of secret/algorithm bits used.
my $rv = Net::SSLeay::get_cipher_bits($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: number of secret bits used by current cipher
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html|http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html>
and L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
=item * get_cipher_list
Returns the name (string) of the SSL_CIPHER listed for $ssl with priority $n.
my $rv = Net::SSLeay::get_cipher_list($ssl, $n);
# $ssl - value corresponding to openssl's SSL structure
# $n - (integer) priority
#
# returns: (string) cipher name e.g. 'EDH-DSS-DES-CBC3-SHA' or '' in case of error
Call Net::SSLeay::get_cipher_list with priority starting from 0 to obtain
the sorted list of available ciphers, until '' is returned:
my $priority = 0;
while (my $c = Net::SSLeay::get_cipher_list($ssl, $priority)) {
print "cipher[$priority] = $c\n";
$priority++;
}
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ciphers.html|http://www.openssl.org/docs/ssl/SSL_get_ciphers.html>
=item * get_client_CA_list
Returns the list of client CAs explicitly set for $ssl using C<Net::SSleay::set_client_CA_list>
or $ssl's SSL_CTX object with C<Net::SSLeay::CTX_set_client_CA_list>, when in server mode.
In client mode, returns the list of client CAs sent from the server, if any.
my $rv = Net::SSLeay::get_client_CA_list($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's STACK_OF(X509_NAME) structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html>
=item * get_current_cipher
Returns the cipher actually used.
my $rv = Net::SSLeay::get_current_cipher($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's SSL_CIPHER structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html|http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html>
=item * get_default_timeout
Returns the default timeout value assigned to SSL_SESSION objects negotiated for the protocol valid for $ssl.
my $rv = Net::SSLeay::get_default_timeout($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (long) timeout in seconds
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_default_timeout.html|http://www.openssl.org/docs/ssl/SSL_get_default_timeout.html>
=item * get_error
Returns a result code for a preceding call to C<connect>, C<accept>, C<do_handshake>, C<read>, C<peek> or C<write> on $ssl.
my $rv = Net::SSLeay::get_error($ssl, $ret);
# $ssl - value corresponding to openssl's SSL structure
# $ret - return value of preceding TLS/SSL I/O operation
#
# returns: result code, which is one of the following values:
# 0 - SSL_ERROR_NONE
# 1 - SSL_ERROR_SSL
# 2 - SSL_ERROR_WANT_READ
# 3 - SSL_ERROR_WANT_WRITE
# 4 - SSL_ERROR_WANT_X509_LOOKUP
# 5 - SSL_ERROR_SYSCALL
# 6 - SSL_ERROR_ZERO_RETURN
# 7 - SSL_ERROR_WANT_CONNECT
# 8 - SSL_ERROR_WANT_ACCEPT
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_error.html|http://www.openssl.org/docs/ssl/SSL_get_error.html>
=item * get_ex_data
Is used to retrieve the information for $idx from $ssl.
my $rv = Net::SSLeay::get_ex_data($ssl, $idx);
# $ssl - value corresponding to openssl's SSL structure
# $idx - (integer) index for application specific data
#
# returns: pointer to ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html>
=item * set_ex_data
Is used to store application data at $data for $idx into the $ssl object.
my $rv = Net::SSLeay::set_ex_data($ssl, $idx, $data);
# $ssl - value corresponding to openssl's SSL structure
# $idx - (integer) ???
# $data - (pointer) ???
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html>
=item * get_ex_new_index
Is used to register a new index for application specific data.
my $rv = Net::SSLeay::get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func);
# $argl - (long) ???
# $argp - (pointer) ???
# $new_func - function pointer ??? (CRYPTO_EX_new *)
# $dup_func - function pointer ??? (CRYPTO_EX_dup *)
# $free_func - function pointer ??? (CRYPTO_EX_free *)
#
# returns: (integer) ???
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html>
=item * get_fd
Returns the file descriptor which is linked to $ssl.
my $rv = Net::SSLeay::get_fd($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: file descriptor (>=0) or -1 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_fd.html|http://www.openssl.org/docs/ssl/SSL_get_fd.html>
=item * get_finished
Obtains the latest 'Finished' message sent to the peer. Return value
is zero if there's been no Finished message yet. Default count is
2*EVP_MAX_MD_SIZE that is long enough for all possible Finish
messages. If you supply a non-default count, the resulting return
value may be longer than returned buf's length.
my $rv = Net::SSLeay::get_finished($ssl, $buf, $count);
# $ssl - value corresponding to openssl's SSL structure
# $buf - buffer where the returned data will be stored
# $count - [optional] max size of return data - default is 2*EVP_MAX_MD_SIZE
#
# returns: length of latest Finished message
=item * get_peer_finished
Obtains the latest 'Finished' message expected from the
peer. Parameters and return value are similar to get_finished().
my $rv = Net::SSLeay::get_peer_finished($ssl, $buf, $count);
# $ssl - value corresponding to openssl's SSL structure
# $buf - buffer where the returned data will be stored
# $count - [optional] max size of return data - default is 2*EVP_MAX_MD_SIZE
#
# returns: length of latest Finished message
=item * get_keyblock_size
Gets the length of the TLS keyblock.
B<NOTE:> Does not exactly correspond to any low level API function.
my $rv = Net::SSLeay::get_keyblock_size($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: keyblock size, -1 on error
=item * get_mode
Returns the mode (bitmask) set for $ssl.
my $rv = Net::SSLeay::get_mode($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: mode (bitmask)
To decode the return value (bitmask) see documentation for L</CTX_get_mode>.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
=item * set_mode
Adds the mode set via bitmask in $mode to $ssl. Options already set before are not cleared.
my $rv = Net::SSLeay::set_mode($ssl, $mode);
# $ssl - value corresponding to openssl's SSL structure
# $mode - mode (bitmask)
#
# returns: the new mode bitmask after adding $mode
For $mode bitmask details see L</CTX_get_mode>.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
=item * get_options
Returns the options (bitmask) set for $ssl.
my $rv = Net::SSLeay::get_options($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: options (bitmask)
To decode the return value (bitmask) see documentation for L</CTX_get_options>.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html>
=item * set_options
Adds the options set via bitmask in $options to $ssl. Options already set before are not cleared!
Net::SSLeay::set_options($ssl, $options);
# $ssl - value corresponding to openssl's SSL structure
# $options - options (bitmask)
#
# returns: the new options bitmask after adding $options
For $options bitmask details see L</CTX_get_options>.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html>
=item * get_peer_certificate
Get the X509 certificate of the peer.
my $rv = Net::SSLeay::get_peer_certificate($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's X509 structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html|http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html>
=item * get_peer_cert_chain
Get the certificate chain of the peer as an array of X509 structures.
my @rv = Net::SSLeay::get_peer_cert_chain($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: list of X509 structures
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html|http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html>
=item * get_quiet_shutdown
Returns the 'quiet shutdown' setting of ssl.
my $rv = Net::SSLeay::get_quiet_shutdown($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) current 'quiet shutdown' value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
=item * get_rbio
Get 'read' BIO linked to an SSL object $ssl.
my $rv = Net::SSLeay::get_rbio($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's BIO structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_rbio.html|http://www.openssl.org/docs/ssl/SSL_get_rbio.html>
=item * get_read_ahead
my $rv = Net::SSLeay::get_read_ahead($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) read_ahead value
=item * set_read_ahead
Net::SSLeay::set_read_ahead($ssl, $val);
# $ssl - value corresponding to openssl's SSL structure
# $val - read_ahead value to be set
#
# returns: the original read_ahead value
=item * get_security_level
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL
Returns the security level associated with $ssl.
my $level = Net::SSLeay::get_security_level($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) current security level
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_get_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_get_security_level.html>
=item * set_security_level
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL
Sets the security level associated with $ssl to $level.
Net::SSLeay::set_security_level($ssl, $level);
# $ssl - value corresponding to openssl's SSL structure
# $level - new security level
#
# returns: no return value
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_set_security_level.html>
=item * set_num_tickets
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Set number of TLSv1.3 session tickets that will be sent to a client.
my $rv = Net::SSLeay::set_num_tickets($ssl, $number_of_tickets);
# $ssl - value corresponding to openssl's SSL structure
# $number_of_tickets - number of tickets to send
#
# returns: 1 on success, 0 on failure
Set to zero if you do not no want to support a session resumption.
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_set_num_tickets.html>
=item * get_num_tickets
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Get number of TLSv1.3 session tickets that will be sent to a client.
my $number_of_tickets = Net::SSLeay::get_num_tickets($ctx);
# $ctx - value corresponding to openssl's SSL structure
#
# returns: number of tickets to send
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_get_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_get_num_tickets.html>
=item * get_server_random
Returns internal SSLv3 server_random value.
Net::SSLeay::get_server_random($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: server_random value (binary data)
=item * get_client_random
B<NOTE:> Does not exactly correspond to any low level API function
Returns internal SSLv3 client_random value.
Net::SSLeay::get_client_random($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: client_random value (binary data)
=item * export_keying_material
Returns keying material based on the string $label and optional
$context. Note that with TLSv1.2 and lower, empty context (empty
string) and undefined context (no value or 'undef') will return
different values.
my $out = Net::SSLeay::export_keying_material($ssl, $olen, $label, $context);
# $ssl - value corresponding to openssl's SSL structure
# $olen - number of bytes to return
# $label - application specific label
# $context - [optional] context - default is undef for no context
#
# returns: keying material (binary data) or undef on error
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_export_keying_material.html|https://www.openssl.org/docs/manmaster/man3/SSL_export_keying_material.html>
=item * get_session
Retrieve TLS/SSL session data used in $ssl. The reference count of the SSL_SESSION is NOT incremented.
my $rv = Net::SSLeay::get_session($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's SSL_SESSION structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_session.html|http://www.openssl.org/docs/ssl/SSL_get_session.html>
=item * SSL_get0_session
The alias for L</get_session> (note that the name is C<SSL_get0_session> NOT C<get0_session>).
my $rv = Net::SSLeay::SSL_get0_session();
=item * get1_session
Returns a pointer to the SSL_SESSION actually used in $ssl. The reference count of the SSL_SESSION is incremented by 1.
my $rv = Net::SSLeay::get1_session($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's SSL_SESSION structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_session.html|http://www.openssl.org/docs/ssl/SSL_get_session.html>
=item * get_shared_ciphers
Returns string with a list (colon ':' separated) of ciphers shared between client and server
within SSL session $ssl.
my $rv = Net::SSLeay::get_shared_ciphers()
#
# returns: string like 'ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:...'
=item * get_shutdown
Returns the shutdown mode of $ssl.
my $rv = Net::SSLeay::get_shutdown($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: shutdown mode (bitmask) of ssl
#to decode the return value (bitmask) use:
0 - No shutdown setting, yet
1 - SSL_SENT_SHUTDOWN
2 - SSL_RECEIVED_SHUTDOWN
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_shutdown.html|http://www.openssl.org/docs/ssl/SSL_set_shutdown.html>
=item * get_ssl_method
Returns a function pointer to the TLS/SSL method set in $ssl.
my $rv = Net::SSLeay::get_ssl_method($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html>
=item * in_init, in_before, is_init_finished, in_connect_init, in_accept_init
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before.
Retrieve information about the handshake state machine. All functions take $ssl as the only argument and return 0 or 1. These functions are recommended over get_state() and state().
my $rv = Net::SSLeay::is_init_finished($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: All functions return 1 or 0
Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_in_init.html|http://www.openssl.org/docs/ssl/SSL_in_init.html>
=item * get_state
B<COMPATIBILITY:> OpenSSL 1.1.0 and later use different constants which are not made available. Use is_init_finished() and related functions instead.
Returns the SSL connection state.
my $rv = Net::SSLeay::get_state($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) state value
# to decode the returned state check:
# SSL_ST_* constants in openssl/ssl.h
# SSL2_ST_* constants in openssl/ssl2.h
# SSL23_ST_* constants in openssl/ssl23.h
# SSL3_ST_* + DTLS1_ST_* constants in openssl/ssl3.h
=item * state
Exactly the same as L</get_state>.
my $rv = Net::SSLeay::state($ssl);
=item * set_state
Sets the SSL connection state.
Net::SSLeay::set_state($ssl,Net::SSLeay::SSL_ST_ACCEPT());
Not available with OpenSSL 1.1 and later.
=item * get_verify_depth
Returns the verification depth limit currently set in $ssl.
my $rv = Net::SSLeay::get_verify_depth($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: current depth or -1 if no limit has been explicitly set
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html>
=item * set_verify_depth
Sets the maximum depth for the certificate chain verification that shall be allowed for $ssl.
Net::SSLeay::set_verify_depth($ssl, $depth);
# $ssl - value corresponding to openssl's SSL structure
# $depth - (integer) depth
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html>
=item * get_verify_mode
Returns the verification mode (bitmask) currently set in $ssl.
my $rv = Net::SSLeay::get_verify_mode($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: mode (bitmask)
To decode the return value (bitmask) see documentation for L</CTX_get_verify_mode>.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html>
=item * set_verify
Sets the verification flags for $ssl to be $mode and specifies the $verify_callback function to be used.
Net::SSLeay::set_verify($ssl, $mode, $callback);
# $ssl - value corresponding to openssl's SSL structure
# $mode - mode (bitmask)
# $callback - [optional] reference to perl callback function
#
# returns: no return value
For $mode bitmask details see L</CTX_get_verify_mode>.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html>
=item * set_post_handshake_auth
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Enable the Post-Handshake Authentication extension to be added to the ClientHello such that post-handshake authentication can be requested by the server.
Net::SSLeay::set_posthandshake_auth($ssl, $val);
# $ssl - value corresponding to openssl's SSL structure
# $val - 0 then the extension is not sent, otherwise it is
#
# returns: no return value
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_post_handshake_auth|https://www.openssl.org/docs/manmaster/man3/SSL_set_post_handshake_auth.html>
=item * verify_client_post_handshake
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
verify_client_post_handshake causes a CertificateRequest message to be sent by a server on the given ssl connection.
my $rv = Net::SSLeay::verify_client_post_handshake($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 1 if the request succeeded, and 0 if the request failed. The error stack can be examined to determine the failure reason.
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_verify_client_post_handshake.html|https://www.openssl.org/docs/manmaster/man3/SSL_verify_client_post_handshake.html>
=item * get_verify_result
Returns the result of the verification of the X509 certificate presented by the peer, if any.
my $rv = Net::SSLeay::get_verify_result($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer)
# 0 - X509_V_OK: ok
# 2 - X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate
# 3 - X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL
# 4 - X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature
# 5 - X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature
# 6 - X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key
# 7 - X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure
# 8 - X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure
# 9 - X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid
# 10 - X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired
# 11 - X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid
# 12 - X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired
# 13 - X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field
# 14 - X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field
# 15 - X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field
# 16 - X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field
# 17 - X509_V_ERR_OUT_OF_MEM: out of memory
# 18 - X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate
# 19 - X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain
# 20 - X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate
# 21 - X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate
# 22 - X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long
# 23 - X509_V_ERR_CERT_REVOKED: certificate revoked
# 24 - X509_V_ERR_INVALID_CA: invalid CA certificate
# 25 - X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded
# 26 - X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose
# 27 - X509_V_ERR_CERT_UNTRUSTED: certificate not trusted
# 28 - X509_V_ERR_CERT_REJECTED: certificate rejected
# 29 - X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch
# 30 - X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch
# 31 - X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch
# 32 - X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing
# 50 - X509_V_ERR_APPLICATION_VERIFICATION: application verification failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_verify_result.html|http://www.openssl.org/docs/ssl/SSL_get_verify_result.html>
=item * set_verify_result
Override result of peer certificate verification.
Net::SSLeay::set_verify_result($ssl, $v);
# $ssl - value corresponding to openssl's SSL structure
# $v - (integer) result value
#
# returns: no return value
For more info about valid return values see L</get_verify_result>
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_verify_result.html|http://www.openssl.org/docs/ssl/SSL_set_verify_result.html>
=item * get_wbio
Get 'write' BIO linked to an SSL object $ssl.
my $rv = Net::SSLeay::get_wbio($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: value corresponding to openssl's BIO structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_rbio.html|http://www.openssl.org/docs/ssl/SSL_get_rbio.html>
=item * load_client_CA_file
Load X509 certificates from file (PEM formatted).
my $rv = Net::SSLeay::load_client_CA_file($file);
# $file - (string) file name
#
# returns: value corresponding to openssl's STACK_OF(X509_NAME) structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_load_client_CA_file.html|http://www.openssl.org/docs/ssl/SSL_load_client_CA_file.html>
=item * clear_num_renegotiations
Executes SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS command on $ssl.
my $rv = Net::SSLeay::clear_num_renegotiations($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: command result
=item * need_tmp_RSA
Executes SSL_CTRL_NEED_TMP_RSA command on $ssl.
my $rv = Net::SSLeay::need_tmp_RSA($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: command result
Not available with OpenSSL 1.1 and later.
=item * num_renegotiations
Executes SSL_CTRL_GET_NUM_RENEGOTIATIONS command on $ssl.
my $rv = Net::SSLeay::num_renegotiations($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: command result
=item * total_renegotiations
Executes SSL_CTRL_GET_TOTAL_RENEGOTIATIONS command on $ssl.
my $rv = Net::SSLeay::total_renegotiations($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: command result
=item * peek
Copies $max bytes from the specified $ssl into the returned value.
In contrast to the C<Net::SSLeay::read()> function, the data in the SSL
buffer is unmodified after the SSL_peek() operation.
Net::SSLeay::peek($ssl, $max);
# $ssl - value corresponding to openssl's SSL structure
# $max - [optional] max bytes to peek (integer) - default is 32768
#
# in scalar context: data read from the TLS/SSL connection, undef on error
# in list context: two-item array consisting of data read (undef on error),
# and return code from SSL_peek().
=item * peek_ex
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Copies $max bytes from the specified $ssl into the returned value.
In contrast to the C<Net::SSLeay::read_ex()> function, the data in the SSL
buffer is unmodified after the SSL_peek_ex() operation.
my($got, $rv) = Net::SSLeay::peek_ex($ssl, $max);
# $ssl - value corresponding to openssl's SSL structure
# $max - [optional] max bytes to peek (integer) - default is 32768
#
# returns a list: two-item list consisting of data read (undef on error),
# and return code from SSL_peek_ex().
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_peek_ex.html|https://www.openssl.org/docs/manmaster/man3/SSL_peek_ex.html>
=item * pending
Obtain number of readable bytes buffered in $ssl object.
my $rv = Net::SSLeay::pending($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: the number of bytes pending
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_pending.html|http://www.openssl.org/docs/ssl/SSL_pending.html>
=item * has_pending
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL
Returns 1 if $ssl has buffered data (whether processed or unprocessed) and 0 otherwise.
my $rv = Net::SSLeay::has_pending($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) 1 or 0
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_has_pending.html|https://www.openssl.org/docs/manmaster/man3/SSL_has_pending.html>
=item * read
Tries to read $max bytes from the specified $ssl.
my $got = Net::SSLeay::read($ssl, $max);
my($got, $rv) = Net::SSLeay::read($ssl, $max);
# $ssl - value corresponding to openssl's SSL structure
# $max - [optional] max bytes to read (integer) - default is 32768
#
# returns:
# in scalar context: data read from the TLS/SSL connection, undef on error
# in list context: two-item array consisting of data read (undef on error),
# and return code from SSL_read().
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_read.html|http://www.openssl.org/docs/ssl/SSL_read.html>
=item * read_ex
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Tries to read $max bytes from the specified $ssl.
my($got, $rv) = Net::SSLeay::read_ex($ssl, $max);
# $ssl - value corresponding to openssl's SSL structure
# $max - [optional] max bytes to read (integer) - default is 32768
#
# returns a list: two-item list consisting of data read (undef on error),
# and return code from SSL_read_ex().
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_read_ex.html|https://www.openssl.org/docs/manmaster/man3/SSL_read_ex.html>
=item * renegotiate
Turn on flags for renegotiation so that renegotiation will happen
my $rv = Net::SSLeay::renegotiate($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 1 on success, 0 on failure
=item * rstate_string
Returns a 2 letter string indicating the current read state of the SSL object $ssl.
my $rv = Net::SSLeay::rstate_string($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 2-letter string
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_rstate_string.html|http://www.openssl.org/docs/ssl/SSL_rstate_string.html>
=item * rstate_string_long
Returns a string indicating the current read state of the SSL object ssl.
my $rv = Net::SSLeay::rstate_string_long($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: string with current state
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_rstate_string.html|http://www.openssl.org/docs/ssl/SSL_rstate_string.html>
=item * session_reused
Query whether a reused session was negotiated during handshake.
my $rv = Net::SSLeay::session_reused($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 0 - new session was negotiated; 1 - session was reused.
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_session_reused.html|http://www.openssl.org/docs/ssl/SSL_session_reused.html>
=item * set1_param
Applies X509 verification parameters $vpm on $ssl
my $rv = Net::SSLeay::set1_param($ssl, $vpm);
# $ssl - value corresponding to openssl's SSL structure
# $vpm - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: 1 on success, 0 on failure
=item * set_accept_state
Sets $ssl to work in server mode.
Net::SSLeay::set_accept_state($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_connect_state.html|http://www.openssl.org/docs/ssl/SSL_set_connect_state.html>
=item * set_bio
Connects the BIOs $rbio and $wbio for the read and write operations of the TLS/SSL (encrypted) side of $ssl.
Net::SSLeay::set_bio($ssl, $rbio, $wbio);
# $ssl - value corresponding to openssl's SSL structure
# $rbio - value corresponding to openssl's BIO structure
# $wbio - value corresponding to openssl's BIO structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_bio.html|http://www.openssl.org/docs/ssl/SSL_set_bio.html>
=item * set_cipher_list
Sets the list of ciphers only for ssl.
my $rv = Net::SSLeay::set_cipher_list($ssl, $str);
# $ssl - value corresponding to openssl's SSL structure
# $str - (string) cipher list e.g. '3DES:+RSA'
#
# returns: 1 if any cipher could be selected and 0 on complete failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html>
=item * set_ciphersuites
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Configure the available TLSv1.3 ciphersuites.
my $rv = Net::SSLeay::set_ciphersuites($ssl, $str);
# $ssl - value corresponding to openssl's SSL structure
# $str - colon (":") separated list of TLSv1.3 ciphersuite names in order of preference
#
# returns: (integer) 1 if the requested ciphersuite list was configured, and 0 otherwise
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_ciphersuites.html|https://www.openssl.org/docs/manmaster/man3/SSL_set_ciphersuites.html>
=item * set_client_CA_list
Sets the list of CAs sent to the client when requesting a client certificate
for the chosen $ssl, overriding the setting valid for $ssl's SSL_CTX object.
my $rv = Net::SSLeay::set_client_CA_list($ssl, $list);
# $ssl - value corresponding to openssl's SSL structure
# $list - value corresponding to openssl's STACK_OF(X509_NAME) structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
=item * set_connect_state
Sets $ssl to work in client mode.
Net::SSLeay::set_connect_state($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_connect_state.html|http://www.openssl.org/docs/ssl/SSL_set_connect_state.html>
=item * set_fd
Sets the file descriptor $fd as the input/output facility for the TLS/SSL (encrypted)
side of $ssl, $fd will typically be the socket file descriptor of a network connection.
my $rv = Net::SSLeay::set_fd($ssl, $fd);
# $ssl - value corresponding to openssl's SSL structure
# $fd - (integer) file handle (got via perl's fileno)
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_fd.html|http://www.openssl.org/docs/ssl/SSL_set_fd.html>
=item * set_psk_client_callback
Sets the psk client callback.
Net::SSLeay::set_psk_client_callback($ssl, sub { my $hint = shift; return ($identity, $key) } );
# $ssl - value corresponding to openssl's SSL structure
# $hint - PSK identity hint send by the server
# $identity - PSK identity
# $key - PSK key, hex string without the leading '0x', e.g. 'deadbeef'
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_psk_client_callback.html|http://www.openssl.org/docs/ssl/SSL_set_psk_client_callback.html>
=item * set_rfd
Sets the file descriptor $fd as the input (read) facility for the TLS/SSL (encrypted) side of $ssl.
my $rv = Net::SSLeay::set_rfd($ssl, $fd);
# $ssl - value corresponding to openssl's SSL structure
# $fd - (integer) file handle (got via perl's fileno)
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_fd.html|http://www.openssl.org/docs/ssl/SSL_set_fd.html>
=item * set_wfd
my $rv = Net::SSLeay::set_wfd($ssl, $fd);
# $ssl - value corresponding to openssl's SSL structure
# $fd - (integer) file handle (got via perl's fileno)
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_fd.html|http://www.openssl.org/docs/ssl/SSL_set_fd.html>
=item * set_info_callback
Sets the callback function, that can be used to obtain state information for $ssl during connection setup and use.
When callback is undef, the callback setting currently valid for ctx is used.
Net::SSLeay::set_info_callback($ssl, $cb, [$data]);
# $ssl - value corresponding to openssl's SSL structure
# $cb - sub { my ($ssl,$where,$ret,$data) = @_; ... }
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html>
=item * CTX_set_info_callback
Sets the callback function on ctx, that can be used to obtain state information during ssl connection setup and use.
When callback is undef, an existing callback will be disabled.
Net::SSLeay::CTX_set_info_callback($ssl, $cb, [$data]);
# $ssl - value corresponding to openssl's SSL structure
# $cb - sub { my ($ssl,$where,$ret,$data) = @_; ... }
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html>
=item * set_pref_cipher
Sets the list of available ciphers for $ssl using the control string $str.
my $rv = Net::SSLeay::set_pref_cipher($ssl, $str);
# $ssl - value corresponding to openssl's SSL structure
# $str - (string) cipher list e.g. '3DES:+RSA'
#
# returns: 1 if any cipher could be selected and 0 on complete failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html>
=item * CTX_set_psk_client_callback
Sets the psk client callback.
Net::SSLeay::CTX_set_psk_client_callback($ssl, sub { my $hint = shift; return ($identity, $key) } );
# $ssl - value corresponding to openssl's SSL structure
# $hint - PSK identity hint send by the server
# $identity - PSK identity
# $key - PSK key, hex string without the leading '0x', e.g. 'deadbeef'
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_psk_client_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_psk_client_callback.html>
=item * set_purpose
my $rv = Net::SSLeay::set_purpose($ssl, $purpose);
# $ssl - value corresponding to openssl's SSL structure
# $purpose - (integer) purpose identifier
#
# returns: 1 on success, 0 on failure
For more info about available $purpose identifiers see L</CTX_set_purpose>.
=item * set_quiet_shutdown
Sets the 'quiet shutdown' flag for $ssl to be $mode.
Net::SSLeay::set_quiet_shutdown($ssl, $mode);
# $ssl - value corresponding to openssl's SSL structure
# $mode - 0 or 1
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
=item * set_session
Set a TLS/SSL session to be used during TLS/SSL connect.
my $rv = Net::SSLeay::set_session($to, $ses);
# $to - value corresponding to openssl's SSL structure
# $ses - value corresponding to openssl's SSL_SESSION structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_session.html|http://www.openssl.org/docs/ssl/SSL_set_session.html>
=item * set_session_id_context
Sets the context $sid_ctx of length $sid_ctx_len within which a session can be reused for the $ssl object.
my $rv = Net::SSLeay::set_session_id_context($ssl, $sid_ctx, $sid_ctx_len);
# $ssl - value corresponding to openssl's SSL structure
# $sid_ctx - data buffer
# $sid_ctx_len - length of data in $sid_ctx
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html>
=item * set_session_secret_cb
Setup pre-shared secret session resumption function.
Net::SSLeay::set_session_secret_cb($ssl, $func, $data);
# $ssl - value corresponding to openssl's SSL structure
# $func - perl reference to callback function
# $data - [optional] data that will be passed to callback function when invoked
#
# returns: no return value
The callback function will be called like:
callback_function($secret, $ciphers, $pref_cipher, $data);
# $secret is the current master session key, usually all 0s at the beginning of a session
# $ciphers is ref to an array of peer cipher names
# $pref_cipher is a ref to an index into the list of cipher names of
# the preferred cipher. Set it if you want to specify a preferred cipher
# $data is the data passed to set_session_secret_cb
The callback function should return 1 if it likes the suggested cipher (or has selected an alternative
by setting pref_cipher), else it should return 0 (in which case OpenSSL will select its own preferred cipher).
With OpenSSL 1.1 and later, callback_function can change the master key for the session by
altering $secret and returning 1.
=item * CTX_set_tlsext_ticket_getkey_cb
Setup encryption for TLS session tickets (stateless session reuse).
Net::SSLeay::CTX_set_tlsext_ticket_getkey_cb($ctx, $func, $data);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $func - perl reference to callback function
# $data - [optional] data that will be passed to callback function when invoked
#
# returns: no return value
The callback function will be called like:
getkey($data,[$key_name]) -> ($key,$current_key_name)
# $data is the data passed to set_session_secret_cb
# $key_name is the name of the key OpenSSL has extracted from the session ticket
# $key is the requested key for ticket encryption + HMAC
# $current_key_name is the name for the currently valid key
OpenSSL will call the function without a key name if it generates a new ticket.
It then needs the callback to return the encryption+HMAC key and an identifier
(key name) for this key.
When OpenSSL gets a session ticket from the client it extracts the key name and
calls the callback with this name as argument. It then expects the callback to
return the encryption+HMAC key matching the requested key name and and also the
key name which should be used at the moment. If the requested key name and the
returned key name differ it means that this session ticket was created with an
expired key and need to be renewed. In this case OpenSSL will call the callback
again with no key name to create a new session ticket based on the old one.
The key must be at least 32 byte of random data which can be created with
RAND_bytes. Internally the first 16 byte are used as key in AES-128 encryption
while the next 16 byte are used for the SHA-256 HMAC.
The key name are binary data and must be exactly 16 byte long.
Example:
Net::SSLeay::RAND_bytes(my $oldkey,32);
Net::SSLeay::RAND_bytes(my $newkey,32);
my $oldkey_name = pack("a16",'oldsecret');
my $newkey_name = pack("a16",'newsecret');
my @keys = (
[ $newkey_name, $newkey ], # current active key
[ $oldkey_name, $oldkey ], # already expired
);
Net::SSLeay::CTX_set_tlsext_ticket_getkey_cb($server2->_ctx, sub {
my ($mykeys,$name) = @_;
# return (current_key, current_key_name) if no name given
return ($mykeys->[0][1],$mykeys->[0][0]) if ! $name;
# return (matching_key, current_key_name) if we find a key matching
# the given name
for(my $i = 0; $i<@$mykeys; $i++) {
next if $name ne $mykeys->[$i][0];
return ($mykeys->[$i][1],$mykeys->[0][0]);
}
# no matching key found
return;
},\@keys);
This function is based on the OpenSSL function SSL_CTX_set_tlsext_ticket_key_cb
but provides a simpler to use interface. For more information see
L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tlsext_ticket_key_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tlsext_ticket_key_cb.html>
=item * set_session_ticket_ext_cb
Setup callback for TLS session tickets (stateless session reuse).
Net::SSLeay::set_session_ticket_ext_cb($ssl, $func, $data);
# $ssl - value corresponding to openssl's SSL structure
# $func - perl reference to callback function
# $data - [optional] data that will be passed to callback function when invoked
#
# returns: no return value
The callback function will be called like:
getticket($ssl,$ticket,$data) -> $return_value
# $ssl is a value corresponding to openssl's SSL structure
# $ticket is a value of received TLS session ticket (can also be empty)
# $data is the data passed to set_session_ticket_ext_cb
# $return_value is either 0 (failure) or 1 (success)
This function is based on the OpenSSL function SSL_set_session_ticket_ext_cb.
=item * set_session_ticket_ext
Set TLS session ticket (stateless session reuse).
Net::SSLeay::set_session_ticket_ext($ssl, $ticket);
# $ssl - value corresponding to openssl's SSL structure
# $ticket - is a value of TLS session ticket which client will send (can also be empty string)
#
# returns: no return value
The callback function will be called like:
getticket($ssl,$ticket,$data) -> $return_value
# $ssl is a value corresponding to openssl's SSL structure
# $ticket is a value of received TLS session ticket (can also be empty)
# $data is the data passed to set_session_ticket_ext_cb
# $return_value is either 0 (failure) or 1 (success)
This function is based on the OpenSSL function SSL_set_session_ticket_ext_cb.
=item * set_shutdown
Sets the shutdown state of $ssl to $mode.
Net::SSLeay::set_shutdown($ssl, $mode);
# $ssl - value corresponding to openssl's SSL structure
# $mode - (integer) shutdown mode:
# 0 - No shutdown
# 1 - SSL_SENT_SHUTDOWN
# 2 - SSL_RECEIVED_SHUTDOWN
# 3 - SSL_RECEIVED_SHUTDOWN+SSL_SENT_SHUTDOWN
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_shutdown.html|http://www.openssl.org/docs/ssl/SSL_set_shutdown.html>
=item * set_ssl_method
Sets a new TLS/SSL method for a particular $ssl object.
my $rv = Net::SSLeay::set_ssl_method($ssl, $method);
# $ssl - value corresponding to openssl's SSL structure
# $method - value corresponding to openssl's SSL_METHOD structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html>
=item * set_tmp_dh
Sets DH parameters to be used to be $dh.
my $rv = Net::SSLeay::set_tmp_dh($ssl, $dh);
# $ssl - value corresponding to openssl's SSL structure
# $dh - value corresponding to openssl's DH structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
=item * set_tmp_dh_callback
Sets the callback function for $ssl to be used when a DH parameters are required to $dh_cb.
??? (does this function really work?)
Net::SSLeay::set_tmp_dh_callback($ssl, $dh);
# $ssl - value corresponding to openssl's SSL structure
# $dh_cb - pointer to function ???
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
=item * set_tmp_rsa
Sets the temporary/ephemeral RSA key to be used in $ssl to be $rsa.
my $rv = Net::SSLeay::set_tmp_rsa($ssl, $rsa);
# $ssl - value corresponding to openssl's SSL structure
# $rsa - value corresponding to openssl's RSA structure
#
# returns: 1 on success, 0 on failure
Example:
$rsakey = Net::SSLeay::RSA_generate_key();
Net::SSLeay::set_tmp_rsa($ssl, $rsakey);
Net::SSLeay::RSA_free($rsakey);
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
=item * set_tmp_rsa_callback
Sets the callback function for $ssl to be used when a temporary/ephemeral RSA key is required to $tmp_rsa_callback.
??? (does this function really work?)
Net::SSLeay::set_tmp_rsa_callback($ssl, $tmp_rsa_callback);
# $ssl - value corresponding to openssl's SSL structure
# $tmp_rsa_callback - (function pointer) ???
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
=item * set_trust
my $rv = Net::SSLeay::set_trust($ssl, $trust);
# $ssl - value corresponding to openssl's SSL structure
# $trust - (integer) trust identifier
#
# returns: the original value
For more details about $trust values see L</CTX_set_trust>.
=item * shutdown
Shuts down an active TLS/SSL connection. It sends the 'close notify' shutdown alert to the peer.
my $rv = Net::SSLeay::shutdown($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 1 - shutdown was successfully completed
# 0 - shutdown is not yet finished,
# -1 - shutdown was not successful
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_shutdown.html|http://www.openssl.org/docs/ssl/SSL_shutdown.html>
=item * state_string
Returns a 6 letter string indicating the current state of the SSL object $ssl.
my $rv = Net::SSLeay::state_string($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: 6-letter string
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_state_string.html|http://www.openssl.org/docs/ssl/SSL_state_string.html>
=item * state_string_long
Returns a string indicating the current state of the SSL object $ssl.
my $rv = Net::SSLeay::state_string_long($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: state strings
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_state_string.html|http://www.openssl.org/docs/ssl/SSL_state_string.html>
=item * set_default_passwd_cb
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0f. Not needed with LibreSSL.
Sets the default password callback called when loading/storing a PEM certificate with encryption for $ssl.
Net::SSLeay::set_default_passwd_cb($ssl, $func);
# $ssl - value corresponding to openssl's SSL structure
# $func - perl reference to callback function
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
=item * set_default_passwd_cb_userdata
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0f. Not needed with LibreSSL.
Sets a pointer to userdata which will be provided to the password callback of $ssl on invocation.
Net::SSLeay::set_default_passwd_cb_userdata($ssl, $userdata);
# $ssl - value corresponding to openssl's SSL structure
# $userdata - data that will be passed to callback function when invoked
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
=item * use_PrivateKey
Adds $pkey as private key to $ssl.
my $rv = Net::SSLeay::use_PrivateKey($ssl, $pkey);
# $ssl - value corresponding to openssl's SSL structure
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_PrivateKey_ASN1
Adds the private key of type $pk stored in $data to $ssl.
my $rv = Net::SSLeay::use_PrivateKey_ASN1($pk, $ssl, $d, $len);
# $pk - (integer) key type, NID of corresponding algorithm
# $ssl - value corresponding to openssl's SSL structure
# $data - key data (binary)
# $len - length of $data
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_PrivateKey_file
Adds the first private key found in $file to $ssl.
my $rv = Net::SSLeay::use_PrivateKey_file($ssl, $file, $type);
# $ssl - value corresponding to openssl's SSL structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_RSAPrivateKey
Adds $rsa as RSA private key to $ssl.
my $rv = Net::SSLeay::use_RSAPrivateKey($ssl, $rsa);
# $ssl - value corresponding to openssl's SSL structure
# $rsa - value corresponding to openssl's RSA structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_RSAPrivateKey_ASN1
Adds RSA private key stored in $data to $ssl.
my $rv = Net::SSLeay::use_RSAPrivateKey_ASN1($ssl, $data, $len);
# $ssl - value corresponding to openssl's SSL structure
# $data - key data (binary)
# $len - length of $data
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_RSAPrivateKey_file
Adds the first RSA private key found in $file to $ssl.
my $rv = Net::SSLeay::use_RSAPrivateKey_file($ssl, $file, $type);
# $ssl - value corresponding to openssl's SSL structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_certificate
Loads the certificate $x into $ssl.
my $rv = Net::SSLeay::use_certificate($ssl, $x);
# $ssl - value corresponding to openssl's SSL structure
# $x - value corresponding to openssl's X509 structure
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_certificate_ASN1
Loads the ASN1 encoded certificate from $data to $ssl.
my $rv = Net::SSLeay::use_certificate_ASN1($ssl, $data, $len);
# $ssl - value corresponding to openssl's SSL structure
# $data - certificate data (binary)
# $len - length of $data
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_certificate_chain_file
B<COMPATIBILITY>: not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0
Loads a certificate chain from $file into $ssl. The certificates must be in PEM format and must be sorted
starting with the subject's certificate (actual client or server certificate), followed by intermediate
CA certificates if applicable, and ending at the highest level (root) CA.
my $rv = Net::SSLeay::use_certificate_chain_file($ssl, $file);
# $ssl - value corresponding to openssl's SSL structure
# $file - (string) file name
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * use_certificate_file
Loads the first certificate stored in $file into $ssl.
my $rv = Net::SSLeay::use_certificate_file($ssl, $file, $type);
# $ssl - value corresponding to openssl's SSL structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, otherwise check out the error stack to find out the reason
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
=item * get_version
Returns SSL/TLS protocol name
my $rv = Net::SSLeay::get_version($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (string) protocol name, see OpenSSL manual for the full list
# TLSv1
# TLSv1.3
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_get_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_get_version.html>
=item * version
Returns SSL/TLS protocol version
my $rv = Net::SSLeay::version($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) protocol version, see OpenSSL manual for the full list
# 0x0301 - TLS1_VERSION (TLSv1)
# 0xFEFF - DTLS1_VERSION (DTLSv1)
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_version.html>
=item * client_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL
Returns TLS protocol version used by the client when initiating the connection
my $rv = Net::SSLeay::client_version($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) protocol version, see OpenSSL manual for the full list
# 0x0301 - TLS1_VERSION (TLSv1)
# 0xFEFF - DTLS1_VERSION (DTLSv1)
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_client_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_client_version.html>
=item * is_dtls
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL
my $rv = Net::SSLeay::is_dtls($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) zero or one
# 0 - connection is not using DTLS
# 1 - connection is using DTLS
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_is_dtls.html|https://www.openssl.org/docs/manmaster/man3/SSL_is_dtls.html>
=item * want
Returns state information for the SSL object $ssl.
my $rv = Net::SSLeay::want($ssl);
# $ssl - value corresponding to openssl's SSL structure
#
# returns: state
# 1 - SSL_NOTHING
# 2 - SSL_WRITING
# 3 - SSL_READING
# 4 - SSL_X509_LOOKUP
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_want.html|http://www.openssl.org/docs/ssl/SSL_want.html>
=item * write
Writes data from the buffer $data into the specified $ssl connection.
my $rv = Net::SSLeay::write($ssl, $data);
# $ssl - value corresponding to openssl's SSL structure
# $data - data to be written
#
# returns: >0 - (success) number of bytes actually written to the TLS/SSL connection
# 0 - write not successful, probably the underlying connection was closed
# <0 - error
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_write.html|http://www.openssl.org/docs/ssl/SSL_write.html>
=item * write_ex
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Writes data from the buffer $data into the specified $ssl connection.
my ($len, $rv) = Net::SSLeay::write_ex($ssl, $data);
# $ssl - value corresponding to openssl's SSL structure
# $data - data to be written
#
# returns a list: two-item list consisting of number of bytes written,
# and return code from SSL_write_ex()
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_write_ex.html|https://www.openssl.org/docs/manmaster/man3/SSL_write_ex.html>
=item * write_partial
B<NOTE:> Does not exactly correspond to any low level API function
Writes a fragment of data in $data from the buffer $data into the specified
$ssl connection. This is a non-blocking function like L<Net::SSLeay::write()>.
my $rv = Net::SSLeay::write_partial($ssl, $from, $count, $data);
# $ssl - value corresponding to openssl's SSL structure
# $from - (integer) offset from the beginning of $data
# $count - (integer) length of data to be written
# $data - data buffer
#
# returns: >0 - (success) number of bytes actually written to the TLS/SSL connection
# 0 - write not successful, probably the underlying connection was closed
# <0 - error
=item * set_tlsext_host_name
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.8f
Sets TLS servername extension on SLL object $ssl to value $name.
my $rv = set_tlsext_host_name($ssl, $name);
# $ssl - value corresponding to openssl's SSL structure
# $name - (string) name to be set
#
# returns: 1 on success, 0 on failure
=back
=head3 Low level API: RAND_* related functions
Check openssl doc related to RAND stuff L<http://www.openssl.org/docs/crypto/rand.html|http://www.openssl.org/docs/crypto/rand.html>
=over
=item * RAND_add
Mixes the $num bytes at $buf into the PRNG state.
Net::SSLeay::RAND_add($buf, $num, $entropy);
# $buf - buffer with data to be mixed into the PRNG state
# $num - number of bytes in $buf
# $entropy - estimate of how much randomness is contained in $buf (in bytes)
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_add.html|http://www.openssl.org/docs/crypto/RAND_add.html>
=item * RAND_seed
Equivalent to L</RAND_add> when $num == $entropy.
Net::SSLeay::RAND_seed($buf); # Perlishly figures out buf size
# $buf - buffer with data to be mixed into the PRNG state
# $num - number of bytes in $buf
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_add.html|http://www.openssl.org/docs/crypto/RAND_add.html>
=item * RAND_status
Gives PRNG status (seeded enough or not).
my $rv = Net::SSLeay::RAND_status();
#returns: 1 if the PRNG has been seeded with enough data, 0 otherwise
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_add.html|http://www.openssl.org/docs/crypto/RAND_add.html>
=item * RAND_bytes
Puts $num cryptographically strong pseudo-random bytes into $buf.
my $rv = Net::SSLeay::RAND_bytes($buf, $num);
# $buf - buffer where the random data will be stored
# $num - the size (in bytes) of requested random data
#
# returns: 1 on success, -1 if not supported by the current RAND method, or 0 on other failure
Check openssl doc L<http://www.openssl.org/docs/manmaster/man3/RAND_bytes.html|http://www.openssl.org/docs/manmaster/man3/RAND_bytes.html>
=item * RAND_priv_bytes
B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL
Puts $num cryptographically strong pseudo-random bytes into $buf.
my $rv = Net::SSLeay::RAND_priv_bytes($buf, $num);
# $buf - buffer where the random data will be stored
# $num - the size (in bytes) of requested random data
#
# returns: 1 on success, -1 if not supported by the current RAND method, or 0 on other failure
RAND_priv_bytes has the same semantics as RAND_bytes, but see see the documentation for more information.
Check openssl doc L<http://www.openssl.org/docs/manmaster/man3/RAND_priv_bytes.html|http://www.openssl.org/docs/manmaster/man3/RAND_priv_bytes.html>
=item * RAND_pseudo_bytes
Puts $num pseudo-random (not necessarily unpredictable) bytes into $buf.
my $rv = Net::SSLeay::RAND_pseudo_bytes($buf, $num);
# $buf - buffer where the random data will be stored
# $num - the size (in bytes) of requested random data
#
# returns: 1 if the bytes generated are cryptographically strong, 0 otherwise
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_bytes.html|http://www.openssl.org/docs/crypto/RAND_bytes.html>
=item * RAND_cleanup
Erase the PRNG state.
Net::SSLeay::RAND_cleanup();
# no args, no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_cleanup.html|http://www.openssl.org/docs/crypto/RAND_cleanup.html>
=item * RAND_egd_bytes
Queries the entropy gathering daemon EGD on socket $path for $bytes bytes.
my $rv = Net::SSLeay::RAND_egd_bytes($path, $bytes);
# $path - path to a socket of entropy gathering daemon EGD
# $bytes - number of bytes we want from EGD
#
# returns: the number of bytes read from the daemon on success, and -1 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_egd.html|http://www.openssl.org/docs/crypto/RAND_egd.html>
=item * RAND_file_name
Generates a default path for the random seed file.
my $file = Net::SSLeay::RAND_file_name($num);
# $num - maximum size of returned file name
#
# returns: string with file name on success, '' (empty string) on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_load_file.html|http://www.openssl.org/docs/crypto/RAND_load_file.html>
=item * RAND_load_file
B<COMPATIBILITY:> Is no longer functional on LibreSSL
Reads $max_bytes of bytes from $file_name and adds them to the PRNG.
my $rv = Net::SSLeay::RAND_load_file($file_name, $max_bytes);
# $file_name - the name of file
# $max_bytes - bytes to read from $file_name; -1 => the complete file is read
#
# returns: the number of bytes read
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_load_file.html|http://www.openssl.org/docs/crypto/RAND_load_file.html>
=item * RAND_write_file
Writes 1024 random bytes to $file_name which can be used to initialize the PRNG by calling L</RAND_load_file> in a later session.
my $rv = Net::SSLeay::RAND_write_file($file_name);
# $file_name - the name of file
#
# returns: the number of bytes written, and -1 if the bytes written were generated without appropriate seed
Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_load_file.html|http://www.openssl.org/docs/crypto/RAND_load_file.html>
=item * RAND_poll
Collects some entropy from operating system and adds it to the PRNG.
my $rv = Net::SSLeay::RAND_poll();
# returns: 1 on success, 0 on failure (unable to gather reasonable entropy)
=back
=head3 Low level API: OBJ_* related functions
=over
=item * OBJ_cmp
Compares ASN1_OBJECT $a to ASN1_OBJECT $b.
my $rv = Net::SSLeay::OBJ_cmp($a, $b);
# $a - value corresponding to openssl's ASN1_OBJECT structure
# $b - value corresponding to openssl's ASN1_OBJECT structure
#
# returns: if the two are identical 0 is returned
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=item * OBJ_dup
Returns a copy/duplicate of $o.
my $rv = Net::SSLeay::OBJ_dup($o);
# $o - value corresponding to openssl's ASN1_OBJECT structure
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=item * OBJ_nid2ln
Returns long name for given NID $n.
my $rv = Net::SSLeay::OBJ_nid2ln($n);
# $n - (integer) NID
#
# returns: (string) long name e.g. 'commonName'
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=item * OBJ_ln2nid
Returns NID corresponding to given long name $n.
my $rv = Net::SSLeay::OBJ_ln2nid($s);
# $s - (string) long name e.g. 'commonName'
#
# returns: (integer) NID
=item * OBJ_nid2sn
Returns short name for given NID $n.
my $rv = Net::SSLeay::OBJ_nid2sn($n);
# $n - (integer) NID
#
# returns: (string) short name e.g. 'CN'
Example:
print Net::SSLeay::OBJ_nid2sn(&Net::SSLeay::NID_commonName);
=item * OBJ_sn2nid
Returns NID corresponding to given short name $s.
my $rv = Net::SSLeay::OBJ_sn2nid($s);
# $s - (string) short name e.g. 'CN'
#
# returns: (integer) NID
Example:
print "NID_commonName constant=", &Net::SSLeay::NID_commonName;
print "OBJ_sn2nid('CN')=", Net::SSLeay::OBJ_sn2nid('CN');
=item * OBJ_nid2obj
Returns ASN1_OBJECT for given NID $n.
my $rv = Net::SSLeay::OBJ_nid2obj($n);
# $n - (integer) NID
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=item * OBJ_obj2nid
Returns NID corresponding to given ASN1_OBJECT $o.
my $rv = Net::SSLeay::OBJ_obj2nid($o);
# $o - value corresponding to openssl's ASN1_OBJECT structure
#
# returns: (integer) NID
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=item * OBJ_txt2obj
Converts the text string s into an ASN1_OBJECT structure. If $no_name is 0 then
long names (e.g. 'commonName') and short names (e.g. 'CN') will be interpreted
as well as numerical forms (e.g. '2.5.4.3'). If $no_name is 1 only the numerical
form is acceptable.
my $rv = Net::SSLeay::OBJ_txt2obj($s, $no_name);
# $s - text string to be converted
# $no_name - (integer) 0 or 1
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=item * OBJ_obj2txt
Converts the ASN1_OBJECT a into a textual representation.
Net::SSLeay::OBJ_obj2txt($a, $no_name);
# $a - value corresponding to openssl's ASN1_OBJECT structure
# $no_name - (integer) 0 or 1
#
# returns: textual representation e.g. 'commonName' ($no_name=0), '2.5.4.3' ($no_name=1)
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=item * OBJ_txt2nid
Returns NID corresponding to text string $s which can be a long name, a short name or the numerical representation of an object.
my $rv = Net::SSLeay::OBJ_txt2nid($s);
# $s - (string) e.g. 'commonName' or 'CN' or '2.5.4.3'
#
# returns: (integer) NID
Example:
my $nid = Net::SSLeay::OBJ_txt2nid('2.5.4.3');
Net::SSLeay::OBJ_nid2sn($n);
Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
=back
=head3 Low level API: ASN1_INTEGER_* related functions
=over
=item * ASN1_INTEGER_new
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Creates a new ASN1_INTEGER structure.
my $rv = Net::SSLeay::ASN1_INTEGER_new();
#
# returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure)
=item * ASN1_INTEGER_free
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Free an allocated ASN1_INTEGER structure.
Net::SSLeay::ASN1_INTEGER_free($i);
# $i - value corresponding to openssl's ASN1_INTEGER structure
#
# returns: no return value
=item * ASN1_INTEGER_get
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns integer value of given ASN1_INTEGER object.
B<BEWARE:> If the value stored in ASN1_INTEGER is greater than max. integer that can be stored
in 'long' type (usually 32bit but may vary according to platform) then this function will return -1.
For getting large ASN1_INTEGER values consider using L</P_ASN1_INTEGER_get_dec> or L</P_ASN1_INTEGER_get_hex>.
my $rv = Net::SSLeay::ASN1_INTEGER_get($a);
# $a - value corresponding to openssl's ASN1_INTEGER structure
#
# returns: integer value of ASN1_INTEGER object in $a
=item * ASN1_INTEGER_set
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets value of given ASN1_INTEGER object to value $val
B<BEWARE:> $val has max. limit (= max. integer that can be stored in 'long' type).
For setting large ASN1_INTEGER values consider using L</P_ASN1_INTEGER_set_dec> or L</P_ASN1_INTEGER_set_hex>.
my $rv = Net::SSLeay::ASN1_INTEGER_set($i, $val);
# $i - value corresponding to openssl's ASN1_INTEGER structure
# $val - integer value
#
# returns: 1 on success, 0 on failure
=item * P_ASN1_INTEGER_get_dec
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns string with decimal representation of integer value of given ASN1_INTEGER object.
Net::SSLeay::P_ASN1_INTEGER_get_dec($i);
# $i - value corresponding to openssl's ASN1_INTEGER structure
#
# returns: string with decimal representation
=item * P_ASN1_INTEGER_get_hex
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns string with hexadecimal representation of integer value of given ASN1_INTEGER object.
Net::SSLeay::P_ASN1_INTEGER_get_hex($i);
# $i - value corresponding to openssl's ASN1_INTEGER structure
#
# returns: string with hexadecimal representation
=item * P_ASN1_INTEGER_set_dec
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets value of given ASN1_INTEGER object to value $val (decimal string, suitable for large integers)
Net::SSLeay::P_ASN1_INTEGER_set_dec($i, $str);
# $i - value corresponding to openssl's ASN1_INTEGER structure
# $str - string with decimal representation
#
# returns: 1 on success, 0 on failure
=item * P_ASN1_INTEGER_set_hex
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets value of given ASN1_INTEGER object to value $val (hexadecimal string, suitable for large integers)
Net::SSLeay::P_ASN1_INTEGER_set_hex($i, $str);
# $i - value corresponding to openssl's ASN1_INTEGER structure
# $str - string with hexadecimal representation
#
# returns: 1 on success, 0 on failure
=back
=head3 Low level API: ASN1_STRING_* related functions
=over
=item * P_ASN1_STRING_get
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns string value of given ASN1_STRING object.
Net::SSLeay::P_ASN1_STRING_get($s, $utf8_decode);
# $s - value corresponding to openssl's ASN1_STRING structure
# $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0)
#
# returns: string
$string = Net::SSLeay::P_ASN1_STRING_get($s);
#is the same as:
$string = Net::SSLeay::P_ASN1_STRING_get($s, 0);
=back
=head3 Low level API: ASN1_TIME_* related functions
=over
=item * ASN1_TIME_new
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
my $time = ASN1_TIME_new();
# returns: value corresponding to openssl's ASN1_TIME structure
=item * ASN1_TIME_free
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
ASN1_TIME_free($time);
# $time - value corresponding to openssl's ASN1_TIME structure
=item * ASN1_TIME_set
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
ASN1_TIME_set($time, $t);
# $time - value corresponding to openssl's ASN1_TIME structure
# $t - time value in seconds since 1.1.1970
B<BEWARE:> It is platform dependent how this function will handle dates after 2038.
Although perl's integer is large enough the internal implementation of this function
is dependent on the size of time_t structure (32bit time_t has problem with 2038).
If you want to safely set date and time after 2038 use function L</P_ASN1_TIME_set_isotime>.
=item * P_ASN1_TIME_get_isotime
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7e
B<NOTE:> Does not exactly correspond to any low level API function
Gives ISO-8601 string representation of ASN1_TIME structure.
my $datetime_string = P_ASN1_TIME_get_isotime($time);
# $time - value corresponding to openssl's ASN1_TIME structure
#
# returns: datetime string like '2033-05-16T20:39:37Z' or '' on failure
The output format is compatible with module L<DateTime::Format::RFC3339>
=item * P_ASN1_TIME_set_isotime
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7e
B<NOTE:> Does not exactly correspond to any low level API function
Sets time and date value of ANS1_time structure.
my $rv = P_ASN1_TIME_set_isotime($time, $string);
# $time - value corresponding to openssl's ASN1_TIME structure
# $string - ISO-8601 timedate string like '2033-05-16T20:39:37Z'
#
# returns: 1 on success, 0 on failure
The C<$string> parameter has to be in full form like C<"2012-03-22T23:55:33"> or
C<"2012-03-22T23:55:33Z"> or C<"2012-03-22T23:55:33CET">. Short forms like
C<"2012-03-22T23:55"> or C<"2012-03-22"> are not supported.
=item * P_ASN1_TIME_put2string
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before, has bugs with openssl-0.9.8i
B<NOTE:> Does not exactly correspond to any low level API function
Gives string representation of ASN1_TIME structure.
my $str = P_ASN1_TIME_put2string($time);
# $time - value corresponding to openssl's ASN1_TIME structure
#
# returns: datetime string like 'May 16 20:39:37 2033 GMT'
=item * P_ASN1_UTCTIME_put2string
B<NOTE:> deprecated function, only for backward compatibility, just an alias
for L</P_ASN1_TIME_put2string>
=back
=head3 Low level API: X509_* related functions
=over
=item * X509_new
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Allocates and initializes a X509 structure.
my $rv = Net::SSLeay::X509_new();
#
# returns: value corresponding to openssl's X509 structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_new.html|http://www.openssl.org/docs/crypto/X509_new.html>
=item * X509_free
Frees up the X509 structure.
Net::SSLeay::X509_free($a);
# $a - value corresponding to openssl's X509 structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_new.html|http://www.openssl.org/docs/crypto/X509_new.html>
=item * X509_check_host
B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at
least OpenSSL 1.0.2. X509_CHECK_FLAG_NEVER_CHECK_SUBJECT requires OpenSSL 1.1.0.
Checks f the certificate Subject Alternative Name (SAN) or Subject CommonName
(CN) matches the specified host name.
my $rv = Net::SSLeay::X509_check_host($cert, $name, $flags, $peername);
# $cert - value corresponding to openssl's X509 structure
# $name - host name to check
# $flags (optional, default: 0) - can be the bitwise OR of:
# &Net::SSLeay::X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
# &Net::SSLeay::X509_CHECK_FLAG_NO_WILDCARDS
# &Net::SSLeay::X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
# &Net::SSLeay::X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
# &Net::SSLeay::X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
# &Net::SSLeay::X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
# $peername (optional) - If not omitted and $host matches $cert,
# a copy of the matching SAN or CN from
# the peer certificate is stored in $peername.
#
# returns:
# 1 for a successful match
# 0 for a failed match
# -1 for an internal error
# -2 if the input is malformed
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_host.html>.
=item * X509_check_email
B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at least OpenSSL 1.0.2.
Checks if the certificate matches the specified email address.
my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags);
# $cert - value corresponding to openssl's X509 structure
# $address - email address to check
# $flags (optional, default: 0) - see X509_check_host()
#
# returns: see X509_check_host()
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_email.html>.
=item * X509_check_ip
B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at least OpenSSL 1.0.2.
Checks if the certificate matches the specified IPv4 or IPv6 address.
my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags);
# $cert - value corresponding to openssl's X509 structure
# $address - IP address to check in binary format, in network byte order
# $flags (optional, default: 0) - see X509_check_host()
#
# returns: see X509_check_host()
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_ip.html>.
=item * X509_check_ip_asc
B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at least OpenSSL 1.0.2.
Checks if the certificate matches the specified IPv4 or IPv6 address.
my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags);
# $cert - value corresponding to openssl's X509 structure
# $address - IP address to check in text representation
# $flags (optional, default: 0) - see X509_check_host()
#
# returns: see X509_check_host()
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_ip_asc.html>.
=item * X509_certificate_type
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns bitmask with type of certificate $x.
my $rv = Net::SSLeay::X509_certificate_type($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: (integer) bitmask with certificate type
#to decode bitmask returned by this function use these constants:
&Net::SSLeay::EVP_PKS_DSA
&Net::SSLeay::EVP_PKS_EC
&Net::SSLeay::EVP_PKS_RSA
&Net::SSLeay::EVP_PKT_ENC
&Net::SSLeay::EVP_PKT_EXCH
&Net::SSLeay::EVP_PKT_EXP
&Net::SSLeay::EVP_PKT_SIGN
&Net::SSLeay::EVP_PK_DH
&Net::SSLeay::EVP_PK_DSA
&Net::SSLeay::EVP_PK_EC
&Net::SSLeay::EVP_PK_RSA
=item * X509_digest
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Computes digest/fingerprint of X509 $data using $type hash function.
my $digest_value = Net::SSLeay::X509_digest($data, $type);
# $data - value corresponding to openssl's X509 structure
# $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
#
# returns: hash value (binary)
#to get printable (hex) value of digest use:
print unpack('H*', $digest_value);
=item * X509_issuer_and_serial_hash
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sort of a checksum of issuer name and serial number of X509 certificate $x.
The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits).
The resulting value might differ across different openssl versions for the same X509 certificate.
my $rv = Net::SSLeay::X509_issuer_and_serial_hash($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: number representing checksum
=item * X509_issuer_name_hash
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sort of a checksum of issuer name of X509 certificate $x.
The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits).
The resulting value might differ across different openssl versions for the same X509 certificate.
my $rv = Net::SSLeay::X509_issuer_name_hash($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: number representing checksum
=item * X509_subject_name_hash
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sort of a checksum of subject name of X509 certificate $x.
The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits).
The resulting value might differ across different openssl versions for the same X509 certificate.
my $rv = Net::SSLeay::X509_subject_name_hash($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: number representing checksum
=item * X509_pubkey_digest
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Computes digest/fingerprint of public key from X509 certificate $data using $type hash function.
my $digest_value = Net::SSLeay::X509_pubkey_digest($data, $type);
# $data - value corresponding to openssl's X509 structure
# $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
#
# returns: hash value (binary)
#to get printable (hex) value of digest use:
print unpack('H*', $digest_value);
=item * X509_set_issuer_name
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets issuer of X509 certificate $x to $name.
my $rv = Net::SSLeay::X509_set_issuer_name($x, $name);
# $x - value corresponding to openssl's X509 structure
# $name - value corresponding to openssl's X509_NAME structure
#
# returns: 1 on success, 0 on failure
=item * X509_set_pubkey
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets public key of X509 certificate $x to $pkey.
my $rv = Net::SSLeay::X509_set_pubkey($x, $pkey);
# $x - value corresponding to openssl's X509 structure
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: 1 on success, 0 on failure
=item * X509_set_serialNumber
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets serial number of X509 certificate $x to $serial.
my $rv = Net::SSLeay::X509_set_serialNumber($x, $serial);
# $x - value corresponding to openssl's X509 structure
# $serial - value corresponding to openssl's ASN1_INTEGER structure
#
# returns: 1 on success, 0 on failure
#to create $serial value use one of these:
$serial = Net::SSLeay::P_ASN1_INTEGER_set_hex('45ad6f');
$serial = Net::SSLeay::P_ASN1_INTEGER_set_dec('7896541238529631478');
$serial = Net::SSLeay::ASN1_INTEGER_set(45896);
=item * X509_set_subject_name
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets subject of X509 certificate $x to $name.
my $rv = Net::SSLeay::X509_set_subject_name($x, $name);
# $x - value corresponding to openssl's X509 structure
# $name - value corresponding to openssl's X509_NAME structure
#
# returns: 1 on success, 0 on failure
=item * X509_set_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Set 'version' value for X509 certificate $ to $version.
my $rv = Net::SSLeay::X509_set_version($x, $version);
# $x - value corresponding to openssl's X509 structure
# $version - (integer) version number
#
# returns: 1 on success, 0 on failure
=item * X509_sign
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sign X509 certificate $x with private key $pkey (using digest algorithm $md).
my $rv = Net::SSLeay::X509_sign($x, $pkey, $md);
# $x - value corresponding to openssl's X509 structure
# $pkey - value corresponding to openssl's EVP_PKEY structure
# $md - value corresponding to openssl's EVP_MD structure
#
# returns: 1 on success, 0 on failure
=item * X509_verify
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Verifies X509 object $a using public key $r (pubkey of issuing CA).
my $rv = Net::SSLeay::X509_verify($x, $r);
# $x - value corresponding to openssl's X509 structure
# $r - value corresponding to openssl's EVP_PKEY structure
#
# returns: 0 - verify failure, 1 - verify OK, <0 - error
=item * X509_get_ext_count
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns the total number of extensions in X509 object $x.
my $rv = Net::SSLeay::X509_get_ext_count($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: count of extensions
=item * X509_get_pubkey
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns public key corresponding to given X509 object $x.
my $rv = Net::SSLeay::X509_get_pubkey($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
B<NOTE:> This method returns only the public key's key bits, without the
algorithm or parameters. Use C<X509_get_X509_PUBKEY()> to return the full
public key (SPKI) instead.
=item * X509_get_X509_PUBKEY
B<COMPATIBILITY:> not available in Net-SSLeay-1.72 and before
Returns the full public key (SPKI) of given X509 certificate $x.
Net::SSLeay::X509_get_X509_PUBKEY($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: public key data in DER format (binary)
=item * X509_get_serialNumber
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns serial number of X509 certificate $x.
my $rv = Net::SSLeay::X509_get_serialNumber($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure)
See L</P_ASN1_INTEGER_get_dec>, L</P_ASN1_INTEGER_get_hex> or L</ASN1_INTEGER_get> to decode ASN1_INTEGER object.
=item * X509_get0_serialNumber
B<COMPATIBILITY:> available in Net-SSLeay-1.86 onwards
X509_get0_serialNumber() is the same as X509_get_serialNumber() except it accepts a const parameter and returns a const result.
=item * X509_get_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns 'version' value of given X509 certificate $x.
my $rv = Net::SSLeay::X509_get_version($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: (integer) version
=item * X509_get_ext
Returns X509_EXTENSION from $x509 based on given position/index.
my $rv = Net::SSLeay::X509_get_ext($x509, $index);
# $x509 - value corresponding to openssl's X509 structure
# $index - (integer) position/index of extension within $x509
#
# returns: value corresponding to openssl's X509_EXTENSION structure (0 on failure)
=item * X509_get_ext_by_NID
Returns X509_EXTENSION from $x509 based on given NID.
my $rv = Net::SSLeay::X509_get_ext_by_NID($x509, $nid, $loc);
# $x509 - value corresponding to openssl's X509 structure
# $nid - (integer) NID value
# $loc - (integer) position to start lookup at
#
# returns: position/index of extension, negative value on error
# call Net::SSLeay::X509_get_ext($x509, $rv) to get the actual extension
=item * X509_get_fingerprint
Returns fingerprint of certificate $cert.
B<NOTE:> Does not exactly correspond to any low level API function. The implementation
is basen on openssl's C<X509_digest()>.
Net::SSLeay::X509_get_fingerprint($x509, $type);
# $x509 - value corresponding to openssl's X509 structure
# $type - (string) digest type, currently supported values:
# "md5"
# "sha1"
# "sha256"
# "ripemd160"
#
# returns: certificate digest - hexadecimal string (NOT binary data!)
=item * X509_get_issuer_name
Return an X509_NAME object representing the issuer of the certificate $cert.
my $rv = Net::SSLeay::X509_get_issuer_name($cert);
# $cert - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's X509_NAME structure (0 on failure)
=item * X509_get_notAfter
Return an object giving the time after which the certificate $cert is not valid.
my $rv = Net::SSLeay::X509_get_notAfter($cert);
# $cert - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
To get human readable/printable form the return value you can use:
my $time = Net::SSLeay::X509_get_notAfter($cert);
print "notAfter=", Net::SSLeay::P_ASN1_TIME_get_isotime($time), "\n";
=item * X509_get_notBefore
Return an object giving the time before which the certificate $cert is not valid
my $rv = Net::SSLeay::X509_get_notBefore($cert);
# $cert - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
To get human readable/printable form the return value you can use:
my $time = Net::SSLeay::X509_get_notBefore($cert);
print "notBefore=", Net::SSLeay::P_ASN1_TIME_get_isotime($time), "\n";
=item * X509_get_subjectAltNames
B<NOTE:> Does not exactly correspond to any low level API function.
Returns the list of alternative subject names from X509 certificate $cert.
my @rv = Net::SSLeay::X509_get_subjectAltNames($cert);
# $cert - value corresponding to openssl's X509 structure
#
# returns: list containing pairs - name_type (integer), name_value (string)
# where name_type can be:
# 0 - GEN_OTHERNAME
# 1 - GEN_EMAIL
# 2 - GEN_DNS
# 3 - GEN_X400
# 4 - GEN_DIRNAME
# 5 - GEN_EDIPARTY
# 6 - GEN_URI
# 7 - GEN_IPADD
# 8 - GEN_RID
Note: type 7 - GEN_IPADD contains the IP address as a packed binary address.
=item * X509_get_subject_name
Returns the subject of the certificate $cert.
my $rv = Net::SSLeay::X509_get_subject_name($cert);
# $cert - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's X509_NAME structure (0 on failure)
=item * X509_gmtime_adj
Adjust th ASN1_TIME object to the timestamp (in GMT).
my $rv = Net::SSLeay::X509_gmtime_adj($s, $adj);
# $s - value corresponding to openssl's ASN1_TIME structure
# $adj - timestamp (seconds since 1.1.1970)
#
# returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
B<BEWARE:> this function may fail for dates after 2038 as it is dependent on time_t size on your
system (32bit time_t does not work after 2038). Consider using L</P_ASN1_TIME_set_isotime> instead).
=item * X509_load_cert_crl_file
Takes PEM file and loads all X509 certificates and X509 CRLs from that file into X509_LOOKUP structure.
my $rv = Net::SSLeay::X509_load_cert_crl_file($ctx, $file, $type);
# $ctx - value corresponding to openssl's X509_LOOKUP structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
# if not FILETYPE_PEM then behaves as Net::SSLeay::X509_load_cert_file()
#
# returns: 1 on success, 0 on failure
=item * X509_load_cert_file
Loads/adds X509 certificate from $file to X509_LOOKUP structure
my $rv = Net::SSLeay::X509_load_cert_file($ctx, $file, $type);
# $ctx - value corresponding to openssl's X509_LOOKUP structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, 0 on failure
=item * X509_load_crl_file
Loads/adds X509 CRL from $file to X509_LOOKUP structure
my $rv = Net::SSLeay::X509_load_crl_file($ctx, $file, $type);
# $ctx - value corresponding to openssl's X509_LOOKUP structure
# $file - (string) file name
# $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
#
# returns: 1 on success, 0 on failure
=item * X509_policy_level_get0_node
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_level_get0_node($level, $i);
# $level - value corresponding to openssl's X509_POLICY_LEVEL structure
# $i - (integer) index/position
#
# returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
=item * X509_policy_level_node_count
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_level_node_count($level);
# $level - value corresponding to openssl's X509_POLICY_LEVEL structure
#
# returns: (integer) node count
=item * X509_policy_node_get0_parent
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_node_get0_parent($node);
# $node - value corresponding to openssl's X509_POLICY_NODE structure
#
# returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
=item * X509_policy_node_get0_policy
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_node_get0_policy($node);
# $node - value corresponding to openssl's X509_POLICY_NODE structure
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
=item * X509_policy_node_get0_qualifiers
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_node_get0_qualifiers($node);
# $node - value corresponding to openssl's X509_POLICY_NODE structure
#
# returns: value corresponding to openssl's STACK_OF(POLICYQUALINFO) structure (0 on failure)
=item * X509_policy_tree_free
??? (more info needed)
Net::SSLeay::X509_policy_tree_free($tree);
# $tree - value corresponding to openssl's X509_POLICY_TREE structure
#
# returns: no return value
=item * X509_policy_tree_get0_level
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_tree_get0_level($tree, $i);
# $tree - value corresponding to openssl's X509_POLICY_TREE structure
# $i - (integer) level index
#
# returns: value corresponding to openssl's X509_POLICY_LEVEL structure (0 on failure)
=item * X509_policy_tree_get0_policies
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_tree_get0_policies($tree);
# $tree - value corresponding to openssl's X509_POLICY_TREE structure
#
# returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
=item * X509_policy_tree_get0_user_policies
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_tree_get0_user_policies($tree);
# $tree - value corresponding to openssl's X509_POLICY_TREE structure
#
# returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
=item * X509_policy_tree_level_count
??? (more info needed)
my $rv = Net::SSLeay::X509_policy_tree_level_count($tree);
# $tree - value corresponding to openssl's X509_POLICY_TREE structure
#
# returns: (integer) count
=item * X509_verify_cert_error_string
Returns a human readable error string for verification error $n.
my $rv = Net::SSLeay::X509_verify_cert_error_string($n);
# $n - (long) numeric error code
#
# returns: error string
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
=item * P_X509_add_extensions
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Adds one or more X509 extensions to X509 object $x.
my $rv = Net::SSLeay::P_X509_add_extensions($x, $ca_cert, $nid, $value);
# $x - value corresponding to openssl's X509 structure
# $ca_cert - value corresponding to openssl's X509 structure (issuer's cert - necessary for sertting NID_authority_key_identifier)
# $nid - NID identifying extension to be set
# $value - extension value
#
# returns: 1 on success, 0 on failure
You can set more extensions at once:
my $rv = Net::SSLeay::P_X509_add_extensions($x509, $ca_cert,
&Net::SSLeay::NID_key_usage => 'digitalSignature,keyEncipherment',
&Net::SSLeay::NID_subject_key_identifier => 'hash',
&Net::SSLeay::NID_authority_key_identifier => 'keyid',
&Net::SSLeay::NID_authority_key_identifier => 'issuer',
&Net::SSLeay::NID_basic_constraints => 'CA:FALSE',
&Net::SSLeay::NID_ext_key_usage => 'serverAuth,clientAuth',
&Net::SSLeay::NID_netscape_cert_type => 'server',
&Net::SSLeay::NID_subject_alt_name => 'DNS:s1.dom.com,DNS:s2.dom.com,DNS:s3.dom.com',
);
=item * P_X509_copy_extensions
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Copies X509 extensions from X509_REQ object to X509 object - handy when you need to turn X509_REQ into X509 certificate.
Net::SSLeay::P_X509_copy_extensions($x509_req, $x509, $override);
# $x509_req - value corresponding to openssl's X509_REQ structure
# $x509 - value corresponding to openssl's X509 structure
# $override - (integer) flag indication whether to override already existing items in $x509 (default 1)
#
# returns: 1 on success, 0 on failure
=item * P_X509_get_crl_distribution_points
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Get the list of CRL distribution points from X509 certificate.
my @cdp = Net::SSLeay::P_X509_get_crl_distribution_points($x509);
# $x509 - value corresponding to openssl's X509 structure
#
# returns: list of distribution points (usually URLs)
=item * P_X509_get_ext_key_usage
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Gets the list of extended key usage of given X509 certificate $cert.
my @ext_usage = Net::SSLeay::P_X509_get_ext_key_usage($cert, $format);
# $cert - value corresponding to openssl's X509 structure
# $format - choose type of return values: 0=OIDs, 1=NIDs, 2=shortnames, 3=longnames
#
# returns: list of values
Examples:
my @extkeyusage_oid = Net::SSLeay::P_X509_get_ext_key_usage($x509,0);
# returns for example: ("1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2")
my @extkeyusage_nid = Net::SSLeay::P_X509_get_ext_key_usage($x509,1);
# returns for example: (129, 130)
my @extkeyusage_sn = Net::SSLeay::P_X509_get_ext_key_usage($x509,2);
# returns for example: ("serverAuth", "clientAuth")
my @extkeyusage_ln = Net::SSLeay::P_X509_get_ext_key_usage($x509,3);
# returns for example: ("TLS Web Server Authentication", "TLS Web Client Authentication")
=item * P_X509_get_key_usage
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Gets the list of key usage of given X509 certificate $cert.
my @keyusage = Net::SSLeay::P_X509_get_key_usage($cert);
# $cert - value corresponding to openssl's X509 structure
#
# returns: list of key usage values which can be none, one or more from the following list:
# "digitalSignature"
# "nonRepudiation"
# "keyEncipherment"
# "dataEncipherment"
# "keyAgreement"
# "keyCertSign"
# "cRLSign"
# "encipherOnly"
# "decipherOnly"
=item * P_X509_get_netscape_cert_type
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Gets the list of Netscape cert types of given X509 certificate $cert.
Net::SSLeay::P_X509_get_netscape_cert_type($cert);
# $cert - value corresponding to openssl's X509 structure
#
# returns: list of Netscape type values which can be none, one or more from the following list:
# "client"
# "server"
# "email"
# "objsign"
# "reserved"
# "sslCA"
# "emailCA"
# "objCA"
=item * P_X509_get_pubkey_alg
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns ASN1_OBJECT corresponding to X509 certificate public key algorithm.
my $rv = Net::SSLeay::P_X509_get_pubkey_alg($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
To get textual representation use:
my $alg = Net::SSLeay::OBJ_obj2txt(Net::SSLeay::P_X509_get_pubkey_alg($x509));
# returns for example: "rsaEncryption"
=item * P_X509_get_signature_alg
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns ASN1_OBJECT corresponding to X509 signarite key algorithm.
my $rv = Net::SSLeay::P_X509_get_signature_alg($x);
# $x - value corresponding to openssl's X509 structure
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
To get textual representation use:
my $alg = Net::SSLeay::OBJ_obj2txt(Net::SSLeay::P_X509_get_signature_alg($x509))
# returns for example: "sha1WithRSAEncryption"
=item * sk_X509_new_null
Returns a new, empty, STACK_OF(X509) structure.
my $rv = Net::SSLeay::sk_X509_new_null();
#
# returns: value corresponding to openssl's STACK_OF(X509) structure
=item * sk_X509_push
Pushes an X509 structure onto a STACK_OF(X509) structure.
my $rv = Net::SSLeay::sk_X509_push($sk_x509, $x509);
# $sk_x509 - value corresponding to openssl's STACK_OF(X509) structure
# $x509 - value corresponding to openssl's X509 structure
#
# returns: 1 if successful, 0 if unsuccessful
=back
=head3 Low level API: X509_REQ_* related functions
=over
=item * X509_REQ_new
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Creates a new X509_REQ structure.
my $rv = Net::SSLeay::X509_REQ_new();
#
# returns: value corresponding to openssl's X509_REQ structure (0 on failure)
=item * X509_REQ_free
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Free an allocated X509_REQ structure.
Net::SSLeay::X509_REQ_free($x);
# $x - value corresponding to openssl's X509_REQ structure
#
# returns: no return value
=item * X509_REQ_add1_attr_by_NID
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Adds an attribute whose name is defined by a NID $nid. The field value to be added is in $bytes.
my $rv = Net::SSLeay::X509_REQ_add1_attr_by_NID($req, $nid, $type, $bytes);
# $req - value corresponding to openssl's X509_REQ structure
# $nid - (integer) NID value
# $type - (integer) type of data in $bytes (see below)
# $bytes - data to be set
#
# returns: 1 on success, 0 on failure
# values for $type - use constants:
&Net::SSLeay::MBSTRING_UTF8 - $bytes contains utf8 encoded data
&Net::SSLeay::MBSTRING_ASC - $bytes contains ASCII data
=item * X509_REQ_digest
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Computes digest/fingerprint of X509_REQ $data using $type hash function.
my $digest_value = Net::SSLeay::X509_REQ_digest($data, $type);
# $data - value corresponding to openssl's X509_REQ structure
# $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
#
# returns: hash value (binary)
#to get printable (hex) value of digest use:
print unpack('H*', $digest_value);
=item * X509_REQ_get_attr_by_NID
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Retrieve the next index matching $nid after $lastpos ($lastpos should initially be set to -1).
my $rv = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid, $lastpos=-1);
# $req - value corresponding to openssl's X509_REQ structure
# $nid - (integer) NID value
# $lastpos - [optional] (integer) index where to start search (default -1)
#
# returns: index (-1 if there are no more entries)
Note: use L</P_X509_REQ_get_attr> to get the actual attribute value - e.g.
my $index = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid);
my @attr_values = Net::SSLeay::P_X509_REQ_get_attr($req, $index);
=item * X509_REQ_get_attr_by_OBJ
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Retrieve the next index matching $obj after $lastpos ($lastpos should initially be set to -1).
my $rv = Net::SSLeay::X509_REQ_get_attr_by_OBJ($req, $obj, $lastpos=-1);
# $req - value corresponding to openssl's X509_REQ structure
# $obj - value corresponding to openssl's ASN1_OBJECT structure
# $lastpos - [optional] (integer) index where to start search (default -1)
#
# returns: index (-1 if there are no more entries)
Note: use L</P_X509_REQ_get_attr> to get the actual attribute value - e.g.
my $index = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid);
my @attr_values = Net::SSLeay::P_X509_REQ_get_attr($req, $index);
=item * X509_REQ_get_attr_count
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns the total number of attributes in $req.
my $rv = Net::SSLeay::X509_REQ_get_attr_count($req);
# $req - value corresponding to openssl's X509_REQ structure
#
# returns: (integer) items count
=item * X509_REQ_get_pubkey
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns public key corresponding to given X509_REQ object $x.
my $rv = Net::SSLeay::X509_REQ_get_pubkey($x);
# $x - value corresponding to openssl's X509_REQ structure
#
# returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
=item * X509_REQ_get_subject_name
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns X509_NAME object corresponding to subject name of given X509_REQ object $x.
my $rv = Net::SSLeay::X509_REQ_get_subject_name($x);
# $x - value corresponding to openssl's X509_REQ structure
#
# returns: value corresponding to openssl's X509_NAME structure (0 on failure)
=item * X509_REQ_get_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns 'version' value for given X509_REQ object $x.
my $rv = Net::SSLeay::X509_REQ_get_version($x);
# $x - value corresponding to openssl's X509_REQ structure
#
# returns: (integer) version e.g. 0 = "version 1"
=item * X509_REQ_set_pubkey
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets public key of given X509_REQ object $x to $pkey.
my $rv = Net::SSLeay::X509_REQ_set_pubkey($x, $pkey);
# $x - value corresponding to openssl's X509_REQ structure
# $pkey - value corresponding to openssl's EVP_PKEY structure
#
# returns: 1 on success, 0 on failure
=item * X509_REQ_set_subject_name
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets subject name of given X509_REQ object $x to X509_NAME object $name.
my $rv = Net::SSLeay::X509_REQ_set_subject_name($x, $name);
# $x - value corresponding to openssl's X509_REQ structure
# $name - value corresponding to openssl's X509_NAME structure
#
# returns: 1 on success, 0 on failure
=item * X509_REQ_set_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sets 'version' of given X509_REQ object $x to $version.
my $rv = Net::SSLeay::X509_REQ_set_version($x, $version);
# $x - value corresponding to openssl's X509_REQ structure
# $version - (integer) e.g. 0 = "version 1"
#
# returns: 1 on success, 0 on failure
=item * X509_REQ_sign
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sign X509_REQ object $x with private key $pk (using digest algorithm $md).
my $rv = Net::SSLeay::X509_REQ_sign($x, $pk, $md);
# $x - value corresponding to openssl's X509_REQ structure
# $pk - value corresponding to openssl's EVP_PKEY structure (requestor's private key)
# $md - value corresponding to openssl's EVP_MD structure
#
# returns: 1 on success, 0 on failure
=item * X509_REQ_verify
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Verifies X509_REQ object $x using public key $r (pubkey of requesting party).
my $rv = Net::SSLeay::X509_REQ_verify($x, $r);
# $x - value corresponding to openssl's X509_REQ structure
# $r - value corresponding to openssl's EVP_PKEY structure
#
# returns: 0 - verify failure, 1 - verify OK, <0 - error
=item * P_X509_REQ_add_extensions
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Adds one or more X509 extensions to X509_REQ object $x.
my $rv = Net::SSLeay::P_X509_REQ_add_extensions($x, $nid, $value);
# $x - value corresponding to openssl's X509_REQ structure
# $nid - NID identifying extension to be set
# $value - extension value
#
# returns: 1 on success, 0 on failure
You can set more extensions at once:
my $rv = Net::SSLeay::P_X509_REQ_add_extensions($x509_req,
&Net::SSLeay::NID_key_usage => 'digitalSignature,keyEncipherment',
&Net::SSLeay::NID_basic_constraints => 'CA:FALSE',
&Net::SSLeay::NID_ext_key_usage => 'serverAuth,clientAuth',
&Net::SSLeay::NID_netscape_cert_type => 'server',
&Net::SSLeay::NID_subject_alt_name => 'DNS:s1.com,DNS:s2.com',
&Net::SSLeay::NID_crl_distribution_points => 'URI:http://pki.com/crl1,URI:http://pki.com/crl2',
);
=item * P_X509_REQ_get_attr
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Returns attribute value for X509_REQ's attribute at index $n.
Net::SSLeay::P_X509_REQ_get_attr($req, $n);
# $req - value corresponding to openssl's X509_REQ structure
# $n - (integer) attribute index
#
# returns: value corresponding to openssl's ASN1_STRING structure
=back
=head3 Low level API: X509_CRL_* related functions
=over
=item * X509_CRL_new
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Creates a new X509_CRL structure.
my $rv = Net::SSLeay::X509_CRL_new();
#
# returns: value corresponding to openssl's X509_CRL structure (0 on failure)
=item * X509_CRL_free
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Free an allocated X509_CRL structure.
Net::SSLeay::X509_CRL_free($x);
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: no return value
=item * X509_CRL_digest
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Computes digest/fingerprint of X509_CRL $data using $type hash function.
my $digest_value = Net::SSLeay::X509_CRL_digest($data, $type);
# $data - value corresponding to openssl's X509_CRL structure
# $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
#
# returns: hash value (binary)
Example:
my $x509_crl
my $md = Net::SSLeay::EVP_get_digestbyname("sha1");
my $digest_value = Net::SSLeay::X509_CRL_digest($x509_crl, $md);
#to get printable (hex) value of digest use:
print "digest=", unpack('H*', $digest_value), "\n";
=item * X509_CRL_get_ext
B<COMPATIBILITY:> not available in Net-SSLeay-1.54 and before
Returns X509_EXTENSION from $x509 based on given position/index.
my $rv = Net::SSLeay::X509_CRL_get_ext($x509, $index);
# $x509 - value corresponding to openssl's X509_CRL structure
# $index - (integer) position/index of extension within $x509
#
# returns: value corresponding to openssl's X509_EXTENSION structure (0 on failure)
=item * X509_CRL_get_ext_by_NID
B<COMPATIBILITY:> not available in Net-SSLeay-1.54 and before
Returns X509_EXTENSION from $x509 based on given NID.
my $rv = Net::SSLeay::X509_CRL_get_ext_by_NID($x509, $nid, $loc);
# $x509 - value corresponding to openssl's X509_CRL structure
# $nid - (integer) NID value
# $loc - (integer) position to start lookup at
#
# returns: position/index of extension, negative value on error
# call Net::SSLeay::X509_CRL_get_ext($x509, $rv) to get the actual extension
=item * X509_CRL_get_ext_count
B<COMPATIBILITY:> not available in Net-SSLeay-1.54 and before
Returns the total number of extensions in X509_CRL object $x.
my $rv = Net::SSLeay::X509_CRL_get_ext_count($x);
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: count of extensions
=item * X509_CRL_get_issuer
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns X509_NAME object corresponding to the issuer of X509_CRL $x.
my $rv = Net::SSLeay::X509_CRL_get_issuer($x);
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: value corresponding to openssl's X509_NAME structure (0 on failure)
See other C<X509_NAME_*> functions to get more info from X509_NAME structure.
=item * X509_CRL_get_lastUpdate
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns 'lastUpdate' date-time value of X509_CRL object $x.
my $rv = Net::SSLeay::X509_CRL_get_lastUpdate($x);
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
=item * X509_CRL_get_nextUpdate
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns 'nextUpdate' date-time value of X509_CRL object $x.
my $rv = Net::SSLeay::X509_CRL_get_nextUpdate($x);
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
=item * X509_CRL_get_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns 'version' value of given X509_CRL structure $x.
my $rv = Net::SSLeay::X509_CRL_get_version($x);
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: (integer) version
=item * X509_CRL_set_issuer_name
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Sets the issuer of X509_CRL object $x to X509_NAME object $name.
my $rv = Net::SSLeay::X509_CRL_set_issuer_name($x, $name);
# $x - value corresponding to openssl's X509_CRL structure
# $name - value corresponding to openssl's X509_NAME structure
#
# returns: 1 on success, 0 on failure
=item * X509_CRL_set_lastUpdate
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Sets 'lastUpdate' value of X509_CRL object $x to $tm.
my $rv = Net::SSLeay::X509_CRL_set_lastUpdate($x, $tm);
# $x - value corresponding to openssl's X509_CRL structure
# $tm - value corresponding to openssl's ASN1_TIME structure
#
# returns: 1 on success, 0 on failure
=item * X509_CRL_set_nextUpdate
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Sets 'nextUpdate' value of X509_CRL object $x to $tm.
my $rv = Net::SSLeay::X509_CRL_set_nextUpdate($x, $tm);
# $x - value corresponding to openssl's X509_CRL structure
# $tm - value corresponding to openssl's ASN1_TIME structure
#
# returns: 1 on success, 0 on failure
=item * X509_CRL_set_version
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Sets 'version' value of given X509_CRL structure $x to $version.
my $rv = Net::SSLeay::X509_CRL_set_version($x, $version);
# $x - value corresponding to openssl's X509_CRL structure
# $version - (integer) version number (1 = version 2 CRL)
#
# returns: 1 on success, 0 on failure
Note that if you want to use any X509_CRL extension you need to set "version 2 CRL" - C<Net::SSLeay::X509_CRL_set_version($x, 1)>.
=item * X509_CRL_sign
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Sign X509_CRL object $x with private key $pkey (using digest algorithm $md).
my $rv = Net::SSLeay::X509_CRL_sign($x, $pkey, $md);
# $x - value corresponding to openssl's X509_CRL structure
# $pkey - value corresponding to openssl's EVP_PKEY structure
# $md - value corresponding to openssl's EVP_MD structure
#
# returns: 1 on success, 0 on failure
=item * X509_CRL_sort
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Sorts the data of X509_CRL object so it will be written in serial number order.
my $rv = Net::SSLeay::X509_CRL_sort($x);
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: 1 on success, 0 on failure
=item * X509_CRL_verify
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Verifies X509_CRL object $a using public key $r (pubkey of issuing CA).
my $rv = Net::SSLeay::X509_CRL_verify($a, $r);
# $a - value corresponding to openssl's X509_CRL structure
# $r - value corresponding to openssl's EVP_PKEY structure
#
# returns: 0 - verify failure, 1 - verify OK, <0 - error
=item * P_X509_CRL_add_revoked_serial_hex
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Adds given serial number $serial_hex to X509_CRL object $crl.
Net::SSLeay::P_X509_CRL_add_revoked_serial_hex($crl, $serial_hex, $rev_time, $reason_code, $comp_time);
# $crl - value corresponding to openssl's X509_CRL structure
# $serial_hex - string (hexadecimal) representation of serial number
# $rev_time - (revocation time) value corresponding to openssl's ASN1_TIME structure
# $reason_code - [optional] (integer) reason code (see below) - default 0
# $comp_time - [optional] (compromise time) value corresponding to openssl's ASN1_TIME structure
#
# returns: no return value
reason codes:
0 - unspecified
1 - keyCompromise
2 - CACompromise
3 - affiliationChanged
4 - superseded
5 - cessationOfOperation
6 - certificateHold
7 - removeFromCRL
=item * P_X509_CRL_get_serial
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Returns serial number of X509_CRL object.
my $rv = Net::SSLeay::P_X509_CRL_get_serial($crl);
# $crl - value corresponding to openssl's X509_CRL structure
#
# returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure)
=item * P_X509_CRL_set_serial
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7
Sets serial number of X509_CRL object to $crl_number.
my $rv = Net::SSLeay::P_X509_CRL_set_serial($crl, $crl_number);
# $crl - value corresponding to openssl's X509_CRL structure
# $crl_number - value corresponding to openssl's ASN1_INTEGER structure
#
# returns: 1 on success, 0 on failure
=back
=head3 Low level API: X509_EXTENSION_* related functions
=over
=item * X509_EXTENSION_get_critical
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns 'critical' flag of given X509_EXTENSION object $ex.
my $rv = Net::SSLeay::X509_EXTENSION_get_critical($ex);
# $ex - value corresponding to openssl's X509_EXTENSION structure
#
# returns: (integer) 1 - critical, 0 - noncritical
=item * X509_EXTENSION_get_data
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns value (raw data) of X509_EXTENSION object $ne.
my $rv = Net::SSLeay::X509_EXTENSION_get_data($ne);
# $ne - value corresponding to openssl's X509_EXTENSION structure
#
# returns: value corresponding to openssl's ASN1_OCTET_STRING structure (0 on failure)
Note: you can use L</P_ASN1_STRING_get> to convert ASN1_OCTET_STRING into perl scalar variable.
=item * X509_EXTENSION_get_object
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns OID (ASN1_OBJECT) of X509_EXTENSION object $ne.
my $rv = Net::SSLeay::X509_EXTENSION_get_object($ex);
# $ex - value corresponding to openssl's X509_EXTENSION structure
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
=item * X509V3_EXT_print
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns string representation of given X509_EXTENSION object $ext.
Net::SSLeay::X509V3_EXT_print($ext, $flags, $utf8_decode);
# $ext - value corresponding to openssl's X509_EXTENSION structure
# $flags - [optional] (integer) Currently the flag argument is unused and should be set to 0
# $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0)
#
# returns: no return value
=item * X509V3_EXT_d2i
Parses an extension and returns its internal structure.
my $rv = Net::SSLeay::X509V3_EXT_d2i($ext);
# $ext - value corresponding to openssl's X509_EXTENSION structure
#
# returns: pointer ???
=back
=head3 Low level API: X509_NAME_* related functions
=over
=item * X509_NAME_ENTRY_get_data
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Retrieves the field value of $ne in and ASN1_STRING structure.
my $rv = Net::SSLeay::X509_NAME_ENTRY_get_data($ne);
# $ne - value corresponding to openssl's X509_NAME_ENTRY structure
#
# returns: value corresponding to openssl's ASN1_STRING structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html|http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html>
=item * X509_NAME_ENTRY_get_object
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Retrieves the field name of $ne in and ASN1_OBJECT structure.
my $rv = Net::SSLeay::X509_NAME_ENTRY_get_object($ne);
# $ne - value corresponding to openssl's X509_NAME_ENTRY structure
#
# returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html|http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html>
=item * X509_NAME_new
B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-0.9.5
Creates a new X509_NAME structure.
Adds a field whose name is defined by a string $field. The field value to be added is in $bytes.
my $rv = Net::SSLeay::X509_NAME_new();
#
# returns: value corresponding to openssl's X509_NAME structure (0 on failure)
=item * X509_NAME_hash
B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-0.9.5
Sort of a checksum of issuer name $name.
The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits).
The resulting value might differ across different openssl versions for the same X509 certificate.
my $rv = Net::SSLeay::X509_NAME_hash($name);
# $name - value corresponding to openssl's X509_NAME structure
#
# returns: number representing checksum
=item * X509_NAME_add_entry_by_txt
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.5
Adds a field whose name is defined by a string $field. The field value to be added is in $bytes.
my $rv = Net::SSLeay::X509_NAME_add_entry_by_txt($name, $field, $type, $bytes, $len, $loc, $set);
# $name - value corresponding to openssl's X509_NAME structure
# $field - (string) field definition (name) - e.g. "organizationName"
# $type - (integer) type of data in $bytes (see below)
# $bytes - data to be set
# $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended
# $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created
#
# returns: 1 on success, 0 on failure
# values for $type - use constants:
&Net::SSLeay::MBSTRING_UTF8 - $bytes contains utf8 encoded data
&Net::SSLeay::MBSTRING_ASC - $bytes contains ASCII data
Unicode note: when passing non-ascii (unicode) string in $bytes do not forget to set C<$flags = &Net::SSLeay::MBSTRING_UTF8> and encode the perl $string via C<$bytes = encode('utf-8', $string)>.
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html|http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html>
=item * X509_NAME_add_entry_by_NID
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.5
Adds a field whose name is defined by a NID $nid. The field value to be added is in $bytes.
my $rv = Net::SSLeay::X509_NAME_add_entry_by_NID($name, $nid, $type, $bytes, $len, $loc, $set);
# $name - value corresponding to openssl's X509_NAME structure
# $nid - (integer) field definition - NID value
# $type - (integer) type of data in $bytes (see below)
# $bytes - data to be set
# $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended
# $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html|http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html>
=item * X509_NAME_add_entry_by_OBJ
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.5
Adds a field whose name is defined by a object (OID) $obj . The field value to be added is in $bytes.
my $rv = Net::SSLeay::X509_NAME_add_entry_by_OBJ($name, $obj, $type, $bytes, $len, $loc, $set);
# $name - value corresponding to openssl's X509_NAME structure
# $obj - field definition - value corresponding to openssl's ASN1_OBJECT structure
# $type - (integer) type of data in $bytes (see below)
# $bytes - data to be set
# $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended
# $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html|http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html>
=item * X509_NAME_cmp
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Compares two X509_NAME obejcts.
my $rv = Net::SSLeay::X509_NAME_cmp($a, $b);
# $a - value corresponding to openssl's X509_NAME structure
# $b - value corresponding to openssl's X509_NAME structure
#
# returns: 0 if $a matches $b; non zero otherwise
=item * X509_NAME_digest
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Computes digest/fingerprint of X509_NAME $data using $type hash function.
my $digest_value = Net::SSLeay::X509_NAME_digest($data, $type);
# $data - value corresponding to openssl's X509_NAME structure
# $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
#
# returns: hash value (binary)
#to get printable (hex) value of digest use:
print unpack('H*', $digest_value);
=item * X509_NAME_entry_count
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns the total number of entries in $name.
my $rv = Net::SSLeay::X509_NAME_entry_count($name);
# $name - value corresponding to openssl's X509_NAME structure
#
# returns: (integer) entries count
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html|http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html>
=item * X509_NAME_get_entry
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Retrieves the X509_NAME_ENTRY from $name corresponding to index $loc. Acceptable values for $loc run
from 0 to C<Net::SSLeay::X509_NAME_entry_count($name)- 1>. The value returned is an internal pointer which must not be freed.
my $rv = Net::SSLeay::X509_NAME_get_entry($name, $loc);
# $name - value corresponding to openssl's X509_NAME structure
# $loc - (integer) index of wanted entry
#
# returns: value corresponding to openssl's X509_NAME_ENTRY structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html|http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html>
=item * X509_NAME_print_ex
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns a string with human readable version of $name.
Net::SSLeay::X509_NAME_print_ex($name, $flags, $utf8_decode);
# $name - value corresponding to openssl's X509_NAME structure
# $flags - [optional] conversion flags (default XN_FLAG_RFC2253) - see below
# $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0)
#
# returns: string representation of $name
#available conversion flags - use constants:
&Net::SSLeay::XN_FLAG_COMPAT
&Net::SSLeay::XN_FLAG_DN_REV
&Net::SSLeay::XN_FLAG_DUMP_UNKNOWN_FIELDS
&Net::SSLeay::XN_FLAG_FN_ALIGN
&Net::SSLeay::XN_FLAG_FN_LN
&Net::SSLeay::XN_FLAG_FN_MASK
&Net::SSLeay::XN_FLAG_FN_NONE
&Net::SSLeay::XN_FLAG_FN_OID
&Net::SSLeay::XN_FLAG_FN_SN
&Net::SSLeay::XN_FLAG_MULTILINE
&Net::SSLeay::XN_FLAG_ONELINE
&Net::SSLeay::XN_FLAG_RFC2253
&Net::SSLeay::XN_FLAG_SEP_COMMA_PLUS
&Net::SSLeay::XN_FLAG_SEP_CPLUS_SPC
&Net::SSLeay::XN_FLAG_SEP_MASK
&Net::SSLeay::XN_FLAG_SEP_MULTILINE
&Net::SSLeay::XN_FLAG_SEP_SPLUS_SPC
&Net::SSLeay::XN_FLAG_SPC_EQ
Most likely you will be fine with default:
Net::SSLeay::X509_NAME_print_ex($name, &Net::SSLeay::XN_FLAG_RFC2253);
Or you might want RFC2253-like output without utf8 chars escaping:
use Net::SSLeay qw/XN_FLAG_RFC2253 ASN1_STRFLGS_ESC_MSB/;
my $flag_rfc22536_utf8 = (XN_FLAG_RFC2253) & (~ ASN1_STRFLGS_ESC_MSB);
my $result = Net::SSLeay::X509_NAME_print_ex($name, $flag_rfc22536_utf8, 1);
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html|http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html>
=item * X509_NAME_get_text_by_NID
Retrieves the text from the first entry in name which matches $nid, if no
such entry exists -1 is returned.
B<openssl note:> this is a legacy function which has various limitations which
makes it of minimal use in practice. It can only find the first matching
entry and will copy the contents of the field verbatim: this can be highly
confusing if the target is a multicharacter string type like a BMPString or a UTF8String.
Net::SSLeay::X509_NAME_get_text_by_NID($name, $nid);
# $name - value corresponding to openssl's X509_NAME structure
# $nid - NID value (integer)
#
# returns: text value
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html|http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html>
=item * X509_NAME_oneline
Return an ASCII version of $name.
Net::SSLeay::X509_NAME_oneline($name);
# $name - value corresponding to openssl's X509_NAME structure
#
# returns: (string) ASCII version of $name
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html|http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html>
=item * sk_X509_NAME_free
Free an allocated STACK_OF(X509_NAME) structure.
Net::SSLeay::sk_X509_NAME_free($sk);
# $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure
#
# returns: no return value
=item * sk_X509_NAME_num
Return number of items in STACK_OF(X509_NAME)
my $rv = Net::SSLeay::sk_X509_NAME_num($sk);
# $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure
#
# returns: number of items
=item * sk_X509_NAME_value
Returns X509_NAME from position $index in STACK_OF(X509_NAME)
my $rv = Net::SSLeay::sk_X509_NAME_value($sk, $i);
# $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure
# $i - (integer) index/position
#
# returns: value corresponding to openssl's X509_NAME structure (0 on failure)
=item * add_file_cert_subjects_to_stack
Add a file of certs to a stack. All certs in $file that are not already in the $stackCAs will be added.
my $rv = Net::SSLeay::add_file_cert_subjects_to_stack($stackCAs, $file);
# $stackCAs - value corresponding to openssl's STACK_OF(X509_NAME) structure
# $file - (string) filename
#
# returns: 1 on success, 0 on failure
=item * add_dir_cert_subjects_to_stack
Add a directory of certs to a stack. All certs in $dir that are not already in the $stackCAs will be added.
my $rv = Net::SSLeay::add_dir_cert_subjects_to_stack($stackCAs, $dir);
# $stackCAs - value corresponding to openssl's STACK_OF(X509_NAME) structure
# $dir - (string) the directory to append from. All files in this directory will be examined as potential certs. Any that are acceptable to SSL_add_dir_cert_subjects_to_stack() that are not already in the stack will be included.
#
# returns: 1 on success, 0 on failure
=back
=head3 Low level API: X509_STORE_* related functions
=over
=item * X509_STORE_CTX_new
returns a newly initialised X509_STORE_CTX structure.
=item * X509_STORE_CTX_init
X509_STORE_CTX_init() sets up an X509_STORE_CTX for a subsequent verification operation.
It must be called before each call to X509_verify_cert().
Net::SSLeay::X509_STORE_CTX_init($x509_store_ctx, $x509_store, $x509, $chain);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure (required)
# $x509_store - value corresponding to openssl's X509_STORE structure (optional)
# $x509 - value corresponding to openssl's X509 structure (optional)
# $chain - value corresponding to openssl's STACK_OF(X509) structure (optional)
Check openssl doc L<https://www.openssl.org/docs/man1.0.2/crypto/X509_STORE_CTX_init.html|https://www.openssl.org/docs/man1.0.2/crypto/X509_STORE_CTX_init.html>
=item * X509_STORE_CTX_free
Frees an X509_STORE_CTX structure.
Net::SSLeay::X509_STORE_CTX_free($x509_store_ctx);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
=item * X509_verify_cert
The X509_verify_cert() function attempts to discover and validate a
certificate chain based on parameters in ctx. A complete description
of the process is contained in the verify(1) manual page.
If this function returns 0, use X509_STORE_CTX_get_error to get additional error
information.
my $rv = Net::SSLeay::X509_verify_cert($x509_store_ctx);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
#
# returns: 1 if a complete chain can be built and validated, otherwise 0
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/X509_verify_cert.html|https://www.openssl.org/docs/manmaster/man3/X509_verify_cert.html>
=item * X509_STORE_CTX_get_current_cert
Returns the certificate in ctx which caused the error or 0 if no certificate is relevant.
my $rv = Net::SSLeay::X509_STORE_CTX_get_current_cert($x509_store_ctx);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
#
# returns: value corresponding to openssl's X509 structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
=item * X509_STORE_CTX_get_error
Returns the error code of $ctx.
my $rv = Net::SSLeay::X509_STORE_CTX_get_error($x509_store_ctx);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
#
# returns: (integer) error code
For more info about erro code values check function L</get_verify_result>.
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
=item * X509_STORE_CTX_get_error_depth
Returns the depth of the error. This is a non-negative integer representing
where in the certificate chain the error occurred. If it is zero it occurred
in the end entity certificate, one if it is the certificate which signed
the end entity certificate and so on.
my $rv = Net::SSLeay::X509_STORE_CTX_get_error_depth($x509_store_ctx);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
#
# returns: (integer) depth
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
=item * X509_STORE_CTX_get_ex_data
Is used to retrieve the information for $idx from $x509_store_ctx.
my $rv = Net::SSLeay::X509_STORE_CTX_get_ex_data($x509_store_ctx, $idx);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
# $idx - (integer) index for application specific data
#
# returns: pointer to ???
=item * X509_STORE_CTX_set_ex_data
Is used to store application data at arg for idx into $x509_store_ctx.
my $rv = Net::SSLeay::X509_STORE_CTX_set_ex_data($x509_store_ctx, $idx, $data);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
# $idx - (integer) ???
# $data - (pointer) ???
#
# returns: 1 on success, 0 on failure
=item * X509_STORE_CTX_set_cert
Sets the certificate to be verified in $x509_store_ctx to $x.
Net::SSLeay::X509_STORE_CTX_set_cert($x509_store_ctx, $x);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
# $x - value corresponding to openssl's X509 structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_new.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_new.html>
=item * X509_STORE_new
Returns a newly initialized X509_STORE structure.
my $rv = Net::SSLeay::X509_STORE_new();
#
# returns: value corresponding to openssl's X509_STORE structure (0 on failure)
=item * X509_STORE_free
Frees an X509_STORE structure
Net::SSLeay::X509_STORE_free($x509_store);
# $x509_store - value corresponding to openssl's X509_STORE structure
=item * X509_STORE_add_lookup
Adds a lookup to an X509_STORE for a given lookup method.
my $method = &Net::SSLeay::X509_LOOKUP_hash_dir;
my $rv = Net::SSLeay::X509_STORE_add_lookup($x509_store, $method);
# $method - value corresponding to openssl's X509_LOOKUP_METHOD structure
# $x509_store - value corresponding to openssl's X509_STORE structure
#
# returns: value corresponding to openssl's X509_LOOKUP structure
Check openssl doc L<https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html|https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html>
=item * X509_STORE_CTX_set_error
Sets the error code of $ctx to $s. For example it might be used in a verification callback to set an error based on additional checks.
Net::SSLeay::X509_STORE_CTX_set_error($x509_store_ctx, $s);
# $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
# $s - (integer) error id
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
=item * X509_STORE_add_cert
Adds X509 certificate $x into the X509_STORE $store.
my $rv = Net::SSLeay::X509_STORE_add_cert($store, $x);
# $store - value corresponding to openssl's X509_STORE structure
# $x - value corresponding to openssl's X509 structure
#
# returns: 1 on success, 0 on failure
=item * X509_STORE_add_crl
Adds X509 CRL $x into the X509_STORE $store.
my $rv = Net::SSLeay::X509_STORE_add_crl($store, $x);
# $store - value corresponding to openssl's X509_STORE structure
# $x - value corresponding to openssl's X509_CRL structure
#
# returns: 1 on success, 0 on failure
=item * X509_STORE_set1_param
??? (more info needed)
my $rv = Net::SSLeay::X509_STORE_set1_param($store, $pm);
# $store - value corresponding to openssl's X509_STORE structure
# $pm - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: 1 on success, 0 on failure
=item * X509_LOOKUP_hash_dir
Returns an X509_LOOKUP structure that instructs an X509_STORE to
load files from a directory containing certificates with filenames
in the format I<hash.N> or crls with filenames in the format I<hash.>B<r>I<N>
my $rv = Net::SSLeay::X509_LOOKUP_hash_dir();
#
# returns: value corresponding to openssl's X509_LOOKUP_METHOD structure, with the hashed directory method
Check openssl doc L<https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html|https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html>
=item * X509_LOOKUP_add_dir
Add a directory to an X509_LOOKUP structure, usually obtained from
X509_STORE_add_lookup.
my $method = &Net::SSLeay::X509_LOOKUP_hash_dir;
my $lookup = Net::SSLeay::X509_STORE_add_lookup($x509_store, $method);
my $type = &Net::SSLeay::X509_FILETYPE_PEM;
Net::SSLeay::X509_LOOKUP_add_dir($lookup, $dir, $type);
# $lookup - value corresponding to openssl's X509_LOOKUP structure
# $dir - string path to a directory
s# $type - constant corresponding to the type of file in the directory - can be X509_FILETYPE_PEM, X509_FILETYPE_DEFAULT, or X509_FILETYPE_ASN1
=item * X509_STORE_set_flags
Net::SSLeay::X509_STORE_set_flags($ctx, $flags);
# $ctx - value corresponding to openssl's X509_STORE structure
# $flags - (unsigned long) flags to be set (bitmask)
#
# returns: no return value
#to create $flags value use corresponding constants like
$flags = Net::SSLeay::X509_V_FLAG_CRL_CHECK();
For more details about $flags bitmask see L</X509_VERIFY_PARAM_set_flags>.
=item * X509_STORE_set_purpose
Net::SSLeay::X509_STORE_set_purpose($ctx, $purpose);
# $ctx - value corresponding to openssl's X509_STORE structure
# $purpose - (integer) purpose identifier
#
# returns: no return value
For more details about $purpose identifier check L</CTX_set_purpose>.
=item * X509_STORE_set_trust
Net::SSLeay::X509_STORE_set_trust($ctx, $trust);
# $ctx - value corresponding to openssl's X509_STORE structure
# $trust - (integer) trust identifier
#
# returns: no return value
For more details about $trust identifier check L</CTX_set_trust>.
=back
=head3 Low Level API: X509_INFO related functions
=over
=item * sk_X509_INFO_num
Returns the number of values in a STACK_OF(X509_INFO) structure.
my $rv = Net::SSLeay::sk_X509_INFO_num($sk_x509_info);
# $sk_x509_info - value corresponding to openssl's STACK_OF(X509_INFO) structure
#
# returns: number of values in $sk_X509_info
=item * sk_X509_INFO_value
Returns the value of a STACK_OF(X509_INFO) structure at a given index.
my $rv = Net::SSLeay::sk_X509_INFO_value($sk_x509_info, $index);
# $sk_x509_info - value corresponding to openssl's STACK_OF(X509_INFO) structure
# $index - index into the stack
#
# returns: value corresponding to openssl's X509_INFO structure at the given index
=item * P_X509_INFO_get_x509
Returns the X509 structure stored in an X509_INFO structure.
my $rv = Net::SSLeay::P_X509_INFO_get_x509($x509_info);
# $x509_info - value corresponding to openssl's X509_INFO structure
#
# returns: value corresponding to openssl's X509 structure
=back
=head3 Low level API: X509_VERIFY_PARAM_* related functions
=over
=item * X509_VERIFY_PARAM_add0_policy
Enables policy checking (it is disabled by default) and adds $policy to the acceptable policy set.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_add0_policy($param, $policy);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $policy - value corresponding to openssl's ASN1_OBJECT structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_add0_table
??? (more info needed)
my $rv = Net::SSLeay::X509_VERIFY_PARAM_add0_table($param);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: 1 on success, 0 on failure
=item * X509_VERIFY_PARAM_add1_host
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Adds an additional reference identifier that can match the peer's certificate.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_add1_host($param, $name);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $name - (string) name to be set
#
# returns: 1 on success, 0 on failure
See also OpenSSL docs, L</X509_VERIFY_PARAM_set1_host> and
L</X509_VERIFY_PARAM_set_hostflags> for more information, including
wildcard matching.
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_clear_flags
Clears the flags $flags in param.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_clear_flags($param, $flags);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $flags - (unsigned long) flags to be set (bitmask)
#
# returns: 1 on success, 0 on failure
For more details about $flags bitmask see L</X509_VERIFY_PARAM_set_flags>.
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_free
Frees up the X509_VERIFY_PARAM structure.
Net::SSLeay::X509_VERIFY_PARAM_free($param);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: no return value
=item * X509_VERIFY_PARAM_get0_peername
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Returns the DNS hostname or subject CommonName from the peer certificate that matched one of the reference identifiers.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_get0_peername($param);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: (string) name e.g. '*.example.com' or undef
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_get_depth
Returns the current verification depth.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_get_depth($param);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: (ineger) depth
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_get_flags
Returns the current verification flags.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_get_flags($param);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: (unsigned long) flags to be set (bitmask)
For more details about returned flags bitmask see L</X509_VERIFY_PARAM_set_flags>.
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set_flags
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_flags($param, $flags);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $flags - (unsigned long) flags to be set (bitmask)
#
# returns: 1 on success, 0 on failure
#to create $flags value use corresponding constants like
$flags = Net::SSLeay::X509_V_FLAG_CRL_CHECK();
For more details about $flags bitmask, see the OpenSSL docs below.
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_inherit
??? (more info needed)
my $rv = Net::SSLeay::X509_VERIFY_PARAM_inherit($to, $from);
# $to - value corresponding to openssl's X509_VERIFY_PARAM structure
# $from - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: 1 on success, 0 on failure
=item * X509_VERIFY_PARAM_lookup
Finds X509_VERIFY_PARAM by name.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_lookup($name);
# $name - (string) name we want to find
#
# returns: value corresponding to openssl's X509_VERIFY_PARAM structure (0 on failure)
=item * X509_VERIFY_PARAM_new
Creates a new X509_VERIFY_PARAM structure.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_new();
#
# returns: value corresponding to openssl's X509_VERIFY_PARAM structure (0 on failure)
=item * X509_VERIFY_PARAM_set1
Sets the name of X509_VERIFY_PARAM structure $to to the same value
as the name of X509_VERIFY_PARAM structure $from.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1($to, $from);
# $to - value corresponding to openssl's X509_VERIFY_PARAM structure
# $from - value corresponding to openssl's X509_VERIFY_PARAM structure
#
# returns: 1 on success, 0 on failure
=item * X509_VERIFY_PARAM_set1_email
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Sets the expected RFC822 email address to email.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_email($param, $email);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $email - (string) email to be set
#
# returns: 1 on success, 0 on failure
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set1_host
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Sets the expected DNS hostname to name clearing any previously specified host name or names.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_host($param, $name);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $name - (string) name to be set
#
# returns: 1 on success, 0 on failure
See also OpenSSL docs, L</X509_VERIFY_PARAM_add1_host> and
L</X509_VERIFY_PARAM_set_hostflags> for more information, including
wildcard matching.
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set1_ip
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Sets the expected IP address to ip.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_ip($param, $ip);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $ip - (binary) 4 octet IPv4 or 16 octet IPv6 address
#
# returns: 1 on success, 0 on failure
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set1_ip_asc
B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2
Sets the expected IP address to ipasc.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_asc($param, $ipasc);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $ip - (string) IPv4 or IPv6 address
#
# returns: 1 on success, 0 on failure
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set1_name
Sets the name of X509_VERIFY_PARAM structure $param to $name.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_name($param, $name);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $name - (string) name to be set
#
# returns: 1 on success, 0 on failure
=item * X509_VERIFY_PARAM_set1_policies
Enables policy checking (it is disabled by default) and sets the acceptable policy set to policies.
Any existing policy set is cleared. The policies parameter can be 0 to clear an existing policy set.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_policies($param, $policies);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $policies - value corresponding to openssl's STACK_OF(ASN1_OBJECT) structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set_depth
Sets the maximum verification depth to depth. That is the maximum number of untrusted CA certificates that can appear in a chain.
Net::SSLeay::X509_VERIFY_PARAM_set_depth($param, $depth);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $depth - (integer) depth to be set
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set_hostflags
Net::SSLeay::X509_VERIFY_PARAM_set_hostflags($param, $flags);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $flags - (unsigned int) flags to be set (bitmask)
#
# returns: no return value
See also OpenSSL docs, L</X509_VERIFY_PARAM_add1_host> and L</X509_VERIFY_PARAM_set1_host> for more information.
The flags for controlling wildcard checks and other features are defined in OpenSSL docs.
Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set_purpose
Sets the verification purpose in $param to $purpose. This determines the acceptable purpose
of the certificate chain, for example SSL client or SSL server.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_purpose($param, $purpose);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $purpose - (integer) purpose identifier
#
# returns: 1 on success, 0 on failure
For more details about $purpose identifier check L</CTX_set_purpose>.
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set_time
Sets the verification time in $param to $t. Normally the current time is used.
Net::SSLeay::X509_VERIFY_PARAM_set_time($param, $t);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $t - (time_t) time in seconds since 1.1.1970
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_set_trust
Sets the trust setting in $param to $trust.
my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_trust($param, $trust);
# $param - value corresponding to openssl's X509_VERIFY_PARAM structure
# $trust - (integer) trust identifier
#
# returns: 1 on success, 0 on failure
For more details about $trust identifier check L</CTX_set_trust>.
Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
=item * X509_VERIFY_PARAM_table_cleanup
??? (more info needed)
Net::SSLeay::X509_VERIFY_PARAM_table_cleanup();
#
# returns: no return value
=back
=head3 Low level API: Cipher (EVP_CIPHER_*) related functions
=over
=item * EVP_get_cipherbyname
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before
Returns an EVP_CIPHER structure when passed a cipher name.
my $rv = Net::SSLeay::EVP_get_cipherbyname($name);
# $name - (string) cipher name e.g. 'aes-128-cbc', 'camellia-256-ecb', 'des-ede', ...
#
# returns: value corresponding to openssl's EVP_CIPHER structure
Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_EncryptInit.html|http://www.openssl.org/docs/crypto/EVP_EncryptInit.html>
=back
=head3 Low level API: Digest (EVP_MD_*) related functions
=over
=item * OpenSSL_add_all_digests
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
Net::SSLeay::OpenSSL_add_all_digests();
# no args, no return value
http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html
=item * P_EVP_MD_list_all
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-1.0.0
B<NOTE:> Does not exactly correspond to any low level API function
my $rv = Net::SSLeay::P_EVP_MD_list_all();
#
# returns: arrayref - list of available digest names
The returned digest names correspond to values expected by L</EVP_get_digestbyname>.
Note that some of the digests are available by default and some only after calling L</OpenSSL_add_all_digests>.
=item * EVP_get_digestbyname
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
my $rv = Net::SSLeay::EVP_get_digestbyname($name);
# $name - string with digest name
#
# returns: value corresponding to openssl's EVP_MD structure
The $name param can be:
md2
md4
md5
mdc2
ripemd160
sha
sha1
sha224
sha256
sha512
whirlpool
Or better check the supported digests by calling L</P_EVP_MD_list_all>.
=item * EVP_MD_type
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
my $rv = Net::SSLeay::EVP_MD_type($md);
# $md - value corresponding to openssl's EVP_MD structure
#
# returns: the NID (integer) of the OBJECT IDENTIFIER representing the given message digest
=item * EVP_MD_size
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
my $rv = Net::SSLeay::EVP_MD_size($md);
# $md - value corresponding to openssl's EVP_MD structure
#
# returns: the size of the message digest in bytes (e.g. 20 for SHA1)
=item * EVP_MD_CTX_md
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Net::SSLeay::EVP_MD_CTX_md($ctx);
# $ctx - value corresponding to openssl's EVP_MD_CTX structure
#
# returns: value corresponding to openssl's EVP_MD structure
=item * EVP_MD_CTX_create
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Allocates, initializes and returns a digest context.
my $rv = Net::SSLeay::EVP_MD_CTX_create();
#
# returns: value corresponding to openssl's EVP_MD_CTX structure
The complete idea behind EVP_MD_CTX looks like this example:
Net::SSLeay::OpenSSL_add_all_digests();
my $md = Net::SSLeay::EVP_get_digestbyname("sha1");
my $ctx = Net::SSLeay::EVP_MD_CTX_create();
Net::SSLeay::EVP_DigestInit($ctx, $md);
while(my $chunk = get_piece_of_data()) {
Net::SSLeay::EVP_DigestUpdate($ctx,$chunk);
}
my $result = Net::SSLeay::EVP_DigestFinal($ctx);
Net::SSLeay::EVP_MD_CTX_destroy($ctx);
print "digest=", unpack('H*', $result), "\n"; #print hex value
=item * EVP_DigestInit_ex
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Sets up digest context $ctx to use a digest $type from ENGINE $impl, $ctx must be
initialized before calling this function, type will typically be supplied by a function
such as L</EVP_get_digestbyname>. If $impl is 0 then the default implementation of digest $type is used.
my $rv = Net::SSLeay::EVP_DigestInit_ex($ctx, $type, $impl);
# $ctx - value corresponding to openssl's EVP_MD_CTX structure
# $type - value corresponding to openssl's EVP_MD structure
# $impl - value corresponding to openssl's ENGINE structure
#
# returns: 1 for success and 0 for failure
=item * EVP_DigestInit
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Behaves in the same way as L</EVP_DigestInit_ex> except the passed context $ctx does not have
to be initialized, and it always uses the default digest implementation.
my $rv = Net::SSLeay::EVP_DigestInit($ctx, $type);
# $ctx - value corresponding to openssl's EVP_MD_CTX structure
# $type - value corresponding to openssl's EVP_MD structure
#
# returns: 1 for success and 0 for failure
=item * EVP_MD_CTX_destroy
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Cleans up digest context $ctx and frees up the space allocated to it, it should be
called only on a context created using L</EVP_MD_CTX_create>.
Net::SSLeay::EVP_MD_CTX_destroy($ctx);
# $ctx - value corresponding to openssl's EVP_MD_CTX structure
#
# returns: no return value
=item * EVP_DigestUpdate
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
my $rv = Net::SSLeay::EVP_DigestUpdate($ctx, $data);
# $ctx - value corresponding to openssl's EVP_MD_CTX structure
# $data - data to be hashed
#
# returns: 1 for success and 0 for failure
=item * EVP_DigestFinal_ex
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Retrieves the digest value from $ctx. After calling L</EVP_DigestFinal_ex> no
additional calls to L</EVP_DigestUpdate> can be made, but
L</EVP_DigestInit_ex> can be called to initialize a new digest operation.
my $digest_value = Net::SSLeay::EVP_DigestFinal_ex($ctx);
# $ctx - value corresponding to openssl's EVP_MD_CTX structure
#
# returns: hash value (binary)
#to get printable (hex) value of digest use:
print unpack('H*', $digest_value);
=item * EVP_DigestFinal
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Similar to L</EVP_DigestFinal_ex> except the digest context ctx is automatically cleaned up.
my $rv = Net::SSLeay::EVP_DigestFinal($ctx);
# $ctx - value corresponding to openssl's EVP_MD_CTX structure
#
# returns: hash value (binary)
#to get printable (hex) value of digest use:
print unpack('H*', $digest_value);
=item * MD2
B<COMPATIBILITY:> no supported by default in openssl-1.0.0
Computes MD2 from given $data (all data needs to be loaded into memory)
my $digest = Net::SSLeay::MD2($data);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * MD4
Computes MD4 from given $data (all data needs to be loaded into memory)
my $digest = Net::SSLeay::MD4($data);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * MD5
Computes MD5 from given $data (all data needs to be loaded into memory)
my $digest = Net::SSLeay::MD5($data);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * RIPEMD160
Computes RIPEMD160 from given $data (all data needs to be loaded into memory)
my $digest = Net::SSLeay::RIPEMD160($data);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * SHA1
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
Computes SHA1 from given $data (all data needs to be loaded into memory)
my $digest = Net::SSLeay::SHA1($data);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * SHA256
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.8
Computes SHA256 from given $data (all data needs to be loaded into memory)
my $digest = Net::SSLeay::SHA256($data);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * SHA512
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.8
Computes SHA512 from given $data (all data needs to be loaded into memory)
my $digest = Net::SSLeay::SHA512($data);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * EVP_Digest
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
Computes "any" digest from given $data (all data needs to be loaded into memory)
my $md = Net::SSLeay::EVP_get_digestbyname("sha1"); #or any other algorithm
my $digest = Net::SSLeay::EVP_Digest($data, $md);
print "digest(hexadecimal)=", unpack('H*', $digest);
=item * EVP_sha1
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
my $md = Net::SSLeay::EVP_sha1();
#
# returns: value corresponding to openssl's EVP_MD structure
=item * EVP_sha256
B<COMPATIBILITY:> requires at least openssl-0.9.8
my $md = Net::SSLeay::EVP_sha256();
#
# returns: value corresponding to openssl's EVP_MD structure
=item * EVP_sha512
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.8
my $md = Net::SSLeay::EVP_sha512();
#
# returns: value corresponding to openssl's EVP_MD structure
=item * EVP_add_digest
my $rv = Net::SSLeay::EVP_add_digest($digest);
# $digest - value corresponding to openssl's EVP_MD structure
#
# returns: 1 on success, 0 otherwise
=back
=head3 Low level API: CIPHER_* related functions
=over
=item * CIPHER_get_name
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
Returns name of the cipher used.
my $rv = Net::SSLeay::CIPHER_description($cipher);
# $cipher - value corresponding to openssl's SSL_CIPHER structure
#
# returns: (string) cipher name e.g. 'DHE-RSA-AES256-SHA'
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
Example:
my $ssl_cipher = Net::SSLeay::get_current_cipher($ssl);
my $cipher_name = Net::SSLeay::CIPHER_get_name($ssl_cipher);
=item * CIPHER_description
Returns a textual description of the cipher used.
??? (does this function really work?)
my $rv = Net::SSLeay::CIPHER_description($cipher, $buf, $size);
# $cipher - value corresponding to openssl's SSL_CIPHER structure
# $bufer - (string/buffer) ???
# $size - (integer) ???
#
# returns: (string) cipher description e.g. 'DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1'
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
=item * CIPHER_get_bits
Returns the number of secret bits used for cipher.
my $rv = Net::SSLeay::CIPHER_get_bits($c);
# $c - value corresponding to openssl's SSL_CIPHER structure
#
# returns: (integert) number of secret bits, 0 on error
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
=back
=head3 Low level API: RSA_* related functions
=over
=item * RSA_generate_key
Generates a key pair and returns it in a newly allocated RSA structure.
The pseudo-random number generator must be seeded prior to calling RSA_generate_key.
my $rv = Net::SSLeay::RSA_generate_key($bits, $e, $perl_cb, $perl_cb_arg);
# $bits - (integer) modulus size in bits e.g. 512, 1024, 2048
# $e - (integer) public exponent, an odd number, typically 3, 17 or 65537
# $perl_cb - [optional] reference to perl callback function
# $perl_cb_arg - [optional] data that will be passed to callback function when invoked
#
# returns: value corresponding to openssl's RSA structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/RSA_generate_key.html|http://www.openssl.org/docs/crypto/RSA_generate_key.html>
=item * RSA_free
Frees the RSA structure and its components. The key is erased before the memory is returned to the system.
Net::SSLeay::RSA_free($r);
# $r - value corresponding to openssl's RSA structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/RSA_new.html|http://www.openssl.org/docs/crypto/RSA_new.html>
=item * RSA_get_key_parameters
Returns a list of pointers to BIGNUMs representing the parameters of the key in
this order:
(n, e, d, p, q, dmp1, dmq1, iqmp)
Caution: returned list consists of SV pointers to BIGNUMs, which would need to be blessed as Crypt::OpenSSL::Bignum for further use
my (@params) = RSA_get_key_parameters($r);
=back
=head3 Low level API: BIO_* related functions
=over
=item * BIO_eof
Returns 1 if the BIO has read EOF, the precise meaning of 'EOF' varies according to the BIO type.
my $rv = Net::SSLeay::BIO_eof($s);
# $s - value corresponding to openssl's BIO structure
#
# returns: 1 if EOF has been reached 0 otherwise
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_ctrl.html|http://www.openssl.org/docs/crypto/BIO_ctrl.html>
=item * BIO_f_ssl
Returns the SSL BIO method. This is a filter BIO which is a wrapper
round the OpenSSL SSL routines adding a BIO 'flavour' to SSL I/O.
my $rv = Net::SSLeay::BIO_f_ssl();
#
# returns: value corresponding to openssl's BIO_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
=item * BIO_free
Frees up a single BIO.
my $rv = Net::SSLeay::BIO_free($bio;);
# $bio; - value corresponding to openssl's BIO structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_new.html|http://www.openssl.org/docs/crypto/BIO_new.html>
=item * BIO_new
Returns a new BIO using method $type
my $rv = Net::SSLeay::BIO_new($type);
# $type - value corresponding to openssl's BIO_METHOD structure
#
# returns: value corresponding to openssl's BIO structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_new.html|http://www.openssl.org/docs/crypto/BIO_new.html>
=item * BIO_new_buffer_ssl_connect
Creates a new BIO chain consisting of a buffering BIO, an SSL BIO (using ctx) and a connect BIO.
my $rv = Net::SSLeay::BIO_new_buffer_ssl_connect($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: value corresponding to openssl's BIO structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
=item * BIO_new_file
Creates a new file BIO with mode $mode the meaning of mode is the same
as the stdio function fopen(). The BIO_CLOSE flag is set on the returned BIO.
my $rv = Net::SSLeay::BIO_new_file($filename, $mode);
# $filename - (string) filename
# $mode - (string) opening mode (as mode by stdio function fopen)
#
# returns: value corresponding to openssl's BIO structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_s_file.html|http://www.openssl.org/docs/crypto/BIO_s_file.html>
=item * BIO_new_ssl
Allocates an SSL BIO using SSL_CTX ctx and using client mode if client is non zero.
my $rv = Net::SSLeay::BIO_new_ssl($ctx, $client);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $client - (integer) 0 or 1 - indicates ssl client mode
#
# returns: value corresponding to openssl's BIO structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
=item * BIO_new_ssl_connect
Creates a new BIO chain consisting of an SSL BIO (using ctx) followed by a connect BIO.
my $rv = Net::SSLeay::BIO_new_ssl_connect($ctx);
# $ctx - value corresponding to openssl's SSL_CTX structure
#
# returns: value corresponding to openssl's BIO structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
=item * BIO_pending
Return the number of pending characters in the BIOs read buffers.
my $rv = Net::SSLeay::BIO_pending($s);
# $s - value corresponding to openssl's BIO structure
#
# returns: the amount of pending data
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_ctrl.html|http://www.openssl.org/docs/crypto/BIO_ctrl.html>
=item * BIO_wpending
Return the number of pending characters in the BIOs write buffers.
my $rv = Net::SSLeay::BIO_wpending($s);
# $s - value corresponding to openssl's BIO structure
#
# returns: the amount of pending data
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_ctrl.html|http://www.openssl.org/docs/crypto/BIO_ctrl.html>
=item * BIO_read
Read the underlying descriptor.
Net::SSLeay::BIO_read($s, $max);
# $s - value corresponding to openssl's BIO structure
# $max - [optional] max. bytes to read (if not specified, the value 32768 is used)
#
# returns: data
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_read.html|http://www.openssl.org/docs/crypto/BIO_read.html>
=item * BIO_write
Attempts to write data from $buffer to BIO $b.
my $rv = Net::SSLeay::BIO_write($b, $buffer);
# $b - value corresponding to openssl's BIO structure
# $buffer - data
#
# returns: amount of data successfully written
# or that no data was successfully read or written if the result is 0 or -1
# or -2 when the operation is not implemented in the specific BIO type
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_read.html|http://www.openssl.org/docs/crypto/BIO_read.html>
=item * BIO_s_mem
Return the memory BIO method function.
my $rv = Net::SSLeay::BIO_s_mem();
#
# returns: value corresponding to openssl's BIO_METHOD structure (0 on failure)
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_s_mem.html|http://www.openssl.org/docs/crypto/BIO_s_mem.html>
=item * BIO_ssl_copy_session_id
Copies an SSL session id between BIO chains from and to. It does this by locating
the SSL BIOs in each chain and calling SSL_copy_session_id() on the internal SSL pointer.
my $rv = Net::SSLeay::BIO_ssl_copy_session_id($to, $from);
# $to - value corresponding to openssl's BIO structure
# $from - value corresponding to openssl's BIO structure
#
# returns: 1 on success, 0 on failure
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
=item * BIO_ssl_shutdown
Closes down an SSL connection on BIO chain bio. It does this by locating the
SSL BIO in the chain and calling SSL_shutdown() on its internal SSL pointer.
Net::SSLeay::BIO_ssl_shutdown($ssl_bio);
# $ssl_bio - value corresponding to openssl's BIO structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
=back
=head3 Low level API: Server side Server Name Indication (SNI) support
=over
=item * set_tlsext_host_name
TBA
=item * get_servername
TBA
=item * get_servername_type
TBA
=item * CTX_set_tlsext_servername_callback
B<COMPATIBILITY:> requires at least OpenSSL 0.9.8f
This function is used in a server to support Server side Server Name Indication (SNI).
Net::SSLeay::CTX_set_tlsext_servername_callback($ctx, $code)
# $ctx - SSL context
# $code - reference to a subroutine that will be called when a new connection is being initiated
#
# returns: no return value
On the client side:
use set_tlsext_host_name($ssl, $servername) before initiating the SSL connection.
On the server side:
Set up an additional SSL_CTX() for each different certificate;
Add a servername callback to each SSL_CTX() using CTX_set_tlsext_servername_callback();
The callback function is required to retrieve the client-supplied servername
with get_servername(ssl). Figure out the right
SSL_CTX to go with that host name, then switch the SSL object to that SSL_CTX
with set_SSL_CTX().
Example:
# set callback
Net::SSLeay::CTX_set_tlsext_servername_callback($ctx,
sub {
my $ssl = shift;
my $h = Net::SSLeay::get_servername($ssl);
Net::SSLeay::set_SSL_CTX($ssl, $hostnames{$h}->{ctx}) if exists $hostnames{$h};
} );
More complete example:
# ... initialize Net::SSLeay
my %hostnames = (
'sni1' => { cert=>'sni1.pem', key=>'sni1.key' },
'sni2' => { cert=>'sni2.pem', key=>'sni2.key' },
);
# create a new context for each certificate/key pair
for my $name (keys %hostnames) {
$hostnames{$name}->{ctx} = Net::SSLeay::CTX_new or die;
Net::SSLeay::CTX_set_cipher_list($hostnames{$name}->{ctx}, 'ALL');
Net::SSLeay::set_cert_and_key($hostnames{$name}->{ctx},
$hostnames{$name}->{cert}, $hostnames{$name}->{key}) or die;
}
# create default context
my $ctx = Net::SSLeay::CTX_new or die;
Net::SSLeay::CTX_set_cipher_list($ctx, 'ALL');
Net::SSLeay::set_cert_and_key($ctx, 'cert.pem','key.pem') or die;
# set callback
Net::SSLeay::CTX_set_tlsext_servername_callback($ctx, sub {
my $ssl = shift;
my $h = Net::SSLeay::get_servername($ssl);
Net::SSLeay::set_SSL_CTX($ssl, $hostnames{$h}->{ctx}) if exists $hostnames{$h};
} );
# ... later
$s = Net::SSLeay::new($ctx);
Net::SSLeay::set_fd($s, fileno($accepted_socket));
Net::SSLeay::accept($s);
=back
=head3 Low level API: NPN (next protocol negotiation) related functions
NPN is being replaced with ALPN, a more recent TLS extension for application
protocol negotiation that's in process of being adopted by IETF. Please look
below for APLN API description.
Simple approach for using NPN support looks like this:
### client side
use Net::SSLeay;
use IO::Socket::INET;
Net::SSLeay::initialize();
my $sock = IO::Socket::INET->new(PeerAddr=>'encrypted.google.com:443') or die;
my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
Net::SSLeay::CTX_set_next_proto_select_cb($ctx, ['http1.1','spdy/2']);
my $ssl = Net::SSLeay::new($ctx) or die;
Net::SSLeay::set_fd($ssl, fileno($sock)) or die;
Net::SSLeay::connect($ssl);
warn "client:negotiated=",Net::SSLeay::P_next_proto_negotiated($ssl), "\n";
warn "client:last_status=", Net::SSLeay::P_next_proto_last_status($ssl), "\n";
### server side
use Net::SSLeay;
use IO::Socket::INET;
Net::SSLeay::initialize();
my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
Net::SSLeay::set_cert_and_key($ctx, "cert.pem", "key.pem");
Net::SSLeay::CTX_set_next_protos_advertised_cb($ctx, ['spdy/2','http1.1']);
my $sock = IO::Socket::INET->new(LocalAddr=>'localhost', LocalPort=>5443, Proto=>'tcp', Listen=>20) or die;
while (1) {
my $ssl = Net::SSLeay::new($ctx);
warn("server:waiting for incoming connection...\n");
my $fd = $sock->accept();
Net::SSLeay::set_fd($ssl, $fd->fileno);
Net::SSLeay::accept($ssl);
warn "server:negotiated=",Net::SSLeay::P_next_proto_negotiated($ssl),"\n";
my $got = Net::SSLeay::read($ssl);
Net::SSLeay::ssl_write_all($ssl, "length=".length($got));
Net::SSLeay::free($ssl);
$fd->close();
}
# check with: openssl s_client -connect localhost:5443 -nextprotoneg http/1.1,spdy/2
Please note that the selection (negotiation) is performed by client side, the server side simply advertise the list of supported protocols.
Advanced approach allows you to implement your own negotiation algorithm.
#see below documentation for:
Net::SSleay::CTX_set_next_proto_select_cb($ctx, $perl_callback_function, $callback_data);
Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $perl_callback_function, $callback_data);
Detection of NPN support (works even in older Net::SSLeay versions):
use Net::SSLeay;
if (exists &Net::SSLeay::P_next_proto_negotiated) {
# do NPN stuff
}
=over
=item * CTX_set_next_proto_select_cb
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1
B<NOTE:> You need CTX_set_next_proto_select_cb on B<client side> of SSL connection.
Simple usage - in this case a "common" negotiation algorithm (as implemented by openssl's function SSL_select_next_proto) is used.
$rv = Net::SSleay::CTX_set_next_proto_select_cb($ctx, $arrayref);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $arrayref - list of accepted protocols - e.g. ['http1.0', 'http1.1']
#
# returns: 0 on success, 1 on failure
Advanced usage (you probably do not need this):
$rv = Net::SSleay::CTX_set_next_proto_select_cb($ctx, $perl_callback_function, $callback_data);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $perl_callback_function - reference to perl function
# $callback_data - [optional] data to passed to callback function when invoked
#
# returns: 0 on success, 1 on failure
# where callback function looks like
sub npn_advertised_cb_invoke {
my ($ssl, $arrayref_proto_list_advertised_by_server, $callback_data) = @_;
my $status;
# ...
$status = 1; #status can be:
# 0 - OPENSSL_NPN_UNSUPPORTED
# 1 - OPENSSL_NPN_NEGOTIATED
# 2 - OPENSSL_NPN_NO_OVERLAP
return $status, ['http1.1','spdy/2']; # the callback has to return 2 values
}
To undefine/clear this callback use:
Net::SSleay::CTX_set_next_proto_select_cb($ctx, undef);
=item * CTX_set_next_protos_advertised_cb
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1
B<NOTE:> You need CTX_set_next_proto_select_cb on B<server side> of SSL connection.
Simple usage:
$rv = Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $arrayref);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $arrayref - list of advertised protocols - e.g. ['http1.0', 'http1.1']
#
# returns: 0 on success, 1 on failure
Advanced usage (you probably do not need this):
$rv = Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $perl_callback_function, $callback_data);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $perl_callback_function - reference to perl function
# $callback_data - [optional] data to passed to callback function when invoked
#
# returns: 0 on success, 1 on failure
# where callback function looks like
sub npn_advertised_cb_invoke {
my ($ssl, $callback_data) = @_;
# ...
return ['http1.1','spdy/2']; # the callback has to return arrayref
}
To undefine/clear this callback use:
Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, undef);
=item * P_next_proto_negotiated
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1
Returns the name of negotiated protocol for given SSL connection $ssl.
$rv = Net::SSLeay::P_next_proto_negotiated($ssl)
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (string) negotiated protocol name (or undef if no negotiation was done or failed with fatal error)
=item * P_next_proto_last_status
B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1
Returns the result of the last negotiation for given SSL connection $ssl.
$rv = Net::SSLeay::P_next_proto_last_status($ssl)
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (integer) negotiation status
# 0 - OPENSSL_NPN_UNSUPPORTED
# 1 - OPENSSL_NPN_NEGOTIATED
# 2 - OPENSSL_NPN_NO_OVERLAP
=back
=head3 Low level API: ALPN (application layer protocol negotiation) related functions
Application protocol can be negotiated via two different mechanisms employing
two different TLS extensions: NPN (obsolete) and ALPN (recommended).
The API is rather similar, with slight differences reflecting protocol
specifics. In particular, with ALPN the protocol negotiation takes place on
server, while with NPN the client implements the protocol negotiation logic.
With ALPN, the most basic implementation looks like this:
### client side
use Net::SSLeay;
use IO::Socket::INET;
Net::SSLeay::initialize();
my $sock = IO::Socket::INET->new(PeerAddr=>'encrypted.google.com:443') or die;
my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
Net::SSLeay::CTX_set_alpn_protos($ctx, ['http/1.1', 'http/2.0', 'spdy/3]);
my $ssl = Net::SSLeay::new($ctx) or die;
Net::SSLeay::set_fd($ssl, fileno($sock)) or die;
Net::SSLeay::connect($ssl);
warn "client:selected=",Net::SSLeay::P_alpn_selected($ssl), "\n";
### server side
use Net::SSLeay;
use IO::Socket::INET;
Net::SSLeay::initialize();
my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
Net::SSLeay::set_cert_and_key($ctx, "cert.pem", "key.pem");
Net::SSLeay::CTX_set_alpn_select_cb($ctx, ['http/1.1', 'http/2.0', 'spdy/3]);
my $sock = IO::Socket::INET->new(LocalAddr=>'localhost', LocalPort=>5443, Proto=>'tcp', Listen=>20) or die;
while (1) {
my $ssl = Net::SSLeay::new($ctx);
warn("server:waiting for incoming connection...\n");
my $fd = $sock->accept();
Net::SSLeay::set_fd($ssl, $fd->fileno);
Net::SSLeay::accept($ssl);
warn "server:selected=",Net::SSLeay::P_alpn_selected($ssl),"\n";
my $got = Net::SSLeay::read($ssl);
Net::SSLeay::ssl_write_all($ssl, "length=".length($got));
Net::SSLeay::free($ssl);
$fd->close();
}
# check with: openssl s_client -connect localhost:5443 -alpn spdy/3,http/1.1
Advanced approach allows you to implement your own negotiation algorithm.
#see below documentation for:
Net::SSleay::CTX_set_alpn_select_cb($ctx, $perl_callback_function, $callback_data);
Detection of ALPN support (works even in older Net::SSLeay versions):
use Net::SSLeay;
if (exists &Net::SSLeay::P_alpn_selected) {
# do ALPN stuff
}
=over
=item * CTX_set_alpn_select_cb
B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2
B<NOTE:> You need CTX_set_alpn_select_cb on B<server side> of TLS connection.
Simple usage - in this case a "common" negotiation algorithm (as implemented by openssl's function SSL_select_next_proto) is used.
$rv = Net::SSleay::CTX_set_alpn_select_cb($ctx, $arrayref);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $arrayref - list of accepted protocols - e.g. ['http/2.0', 'http/1.1', 'spdy/3']
#
# returns: 0 on success, 1 on failure
Advanced usage (you probably do not need this):
$rv = Net::SSleay::CTX_set_alpn_select_cb($ctx, $perl_callback_function, $callback_data);
# $ctx - value corresponding to openssl's SSL_CTX structure
# $perl_callback_function - reference to perl function
# $callback_data - [optional] data to passed to callback function when invoked
#
# returns: 0 on success, 1 on failure
# where callback function looks like
sub alpn_select_cb_invoke {
my ($ssl, $arrayref_proto_list_advertised_by_client, $callback_data) = @_;
# ...
if ($negotiated) {
return 'http/2.0';
} else {
return undef;
}
}
To undefine/clear this callback use:
Net::SSleay::CTX_set_alpn_select_cb($ctx, undef);
=item * set_alpn_protos
B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2
B<NOTE:> You need set_alpn_protos on B<client side> of TLS connection.
This adds list of supported application layer protocols to ClientHello message sent by a client.
It advertises the enumeration of supported protocols:
Net::SSLeay::set_alpn_protos($ssl, ['http/1.1', 'http/2.0', 'spdy/3]);
# returns 0 on success
=item * CTX_set_alpn_protos
B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2
B<NOTE:> You need CTX_set_alpn_protos on B<client side> of TLS connection.
This adds list of supported application layer protocols to ClientHello message sent by a client.
It advertises the enumeration of supported protocols:
Net::SSLeay::CTX_set_alpn_protos($ctx, ['http/1.1', 'http/2.0', 'spdy/3]);
# returns 0 on success
=item * P_alpn_selected
B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2
Returns the name of negotiated protocol for given TLS connection $ssl.
$rv = Net::SSLeay::P_alpn_selected($ssl)
# $ssl - value corresponding to openssl's SSL structure
#
# returns: (string) negotiated protocol name (or undef if no negotiation was done or failed with fatal error)
=back
=head3 Low level API: DANE Support
OpenSSL version 1.0.2 adds preliminary support RFC6698 Domain Authentication of
Named Entities (DANE) Transport Layer Association within OpenSSL
=over
=item * SSL_get_tlsa_record_byname
B<COMPATIBILITY:> DELETED from net-ssleay, since it is not supported by OpenSSL
In order to facilitate DANE there is additional interface,
SSL_get_tlsa_record_byname, accepting hostname, port and socket type
that returns packed TLSA record. In order to make it even easier there
is additional SSL_ctrl function that calls SSL_get_tlsa_record_byname
for you. Latter is recommended for programmers that wish to maintain
broader binary compatibility, e.g. make application work with both 1.0.2
and prior version (in which case call to SSL_ctrl with new code
returning error would have to be ignored when running with prior version).
Net::SSLeay::get_tlsa_record_byname($name, $port, $type);
=back
=head3 Low level API: Other functions
=over
=item * COMP_add_compression_method
Adds the compression method cm with the identifier id to the list of available compression methods.
This list is globally maintained for all SSL operations within this application.
It cannot be set for specific SSL_CTX or SSL objects.
my $rv = Net::SSLeay::COMP_add_compression_method($id, $cm);
# $id - (integer) compression method id
# 0 to 63: methods defined by the IETF
# 64 to 192: external party methods assigned by IANA
# 193 to 255: reserved for private use
#
# $cm - value corresponding to openssl's COMP_METHOD structure
#
# returns: 0 on success, 1 on failure (check the error queue to find out the reason)
Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html|http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html>
=item * DH_free
Frees the DH structure and its components. The values are erased before the memory is returned to the system.
Net::SSLeay::DH_free($dh);
# $dh - value corresponding to openssl's DH structure
#
# returns: no return value
Check openssl doc L<http://www.openssl.org/docs/crypto/DH_new.html|http://www.openssl.org/docs/crypto/DH_new.html>
=item * FIPS_mode_set
Enable or disable FIPS mode in a FIPS capable OpenSSL.
Net::SSLeay:: FIPS_mode_set($enable);
# $enable - (integer) 1 to enable, 0 to disable
=back
=head3 Low level API: EC related functions
=over
=item * CTX_set_tmp_ecdh
TBA
=item * EC_KEY_free
TBA
=item * EC_KEY_new_by_curve_name
TBA
=item * EC_KEY_generate_key
Generates a EC key and returns it in a newly allocated EC_KEY structure.
The EC key then can be used to create a PKEY which can be used in calls
like X509_set_pubkey.
my $key = Net::SSLeay::EVP_PKEY_new();
my $ec = Net::SSLeay::EC_KEY_generate_key($curve);
Net::SSLeay::EVP_PKEY_assign_EC_KEY($key,$ec);
# $curve - curve name like 'secp521r1' or the matching Id (integer) of the curve
#
# returns: value corresponding to openssl's EC_KEY structure (0 on failure)
This function has no equivalent in OpenSSL but combines multiple OpenSSL
functions for an easier interface.
=item * CTX_set_ecdh_auto, set_ecdh_auto
These functions enable or disable the automatic curve selection on the server
side by calling SSL_CTX_set_ecdh_auto or SSL_set_ecdh_auto respectively.
If enabled the highest preference curve is automatically used for ECDH temporary
keys used during key exchange.
This function is no longer available for OpenSSL 1.1.0 or higher.
Net::SSLeay::CTX_set_ecdh_auto($ctx,1);
Net::SSLeay::set_ecdh_auto($ssl,1);
=item * CTX_set1_curves_list, set1_curves_list
These functions set the supported curves (in order of preference) by calling
SSL_CTX_set1_curves_list or SSL_set1_curves_list respectively.
For a TLS client these curves are offered to the server in the supported curves
extension while on the server side these are used to determine the shared
curve.
These functions are only available since OpenSSL 1.1.0.
Net::SSLeay::CTX_set1_curves_list($ctx,"P-521:P-384:P-256");
Net::SSLeay::set1_curves_list($ssl,"P-521:P-384:P-256");
=item * CTX_set1_groups_list, set1_groups_list
These functions set the supported groups (in order of preference) by calling
SSL_CTX_set1_groups_list or SSL_set1_groups_list respectively.
This is practically the same as CTX_set1_curves_list and set1_curves_list except
that all DH groups can be given as supported by TLS 1.3.
These functions are only available since OpenSSL 1.1.1.
Net::SSLeay::CTX_set1_groups_list($ctx,"P-521:P-384:P-256");
Net::SSLeay::set1_groups_list($ssl,"P-521:P-384:P-256");
=back
=head2 Constants
There are many openssl constants available in L<Net::SSLeay>. You can use them like this:
use Net::SSLeay;
print &Net::SSLeay::NID_commonName;
#or
print Net::SSLeay::NID_commonName();
Or you can import them and use:
use Net::SSLeay qw/NID_commonName/;
print &NID_commonName;
#or
print NID_commonName();
#or
print NID_commonName;
The constants names are derived from openssl constants, however constants starting with C<SSL_> prefix
have name with C<SSL_> part stripped - e.g. openssl's constant C<SSL_OP_ALL> is available as C<Net::SSleay::OP_ALL>
The list of all available constant names:
=for comment the next part is the output of: perl helper_script/regen_openssl_constants.pl -gen-pod
ASN1_STRFLGS_ESC_CTRL NID_netscape R_UNKNOWN_REMOTE_ERROR_TYPE
ASN1_STRFLGS_ESC_MSB NID_netscape_base_url R_UNKNOWN_STATE
ASN1_STRFLGS_ESC_QUOTE NID_netscape_ca_policy_url R_X509_LIB
ASN1_STRFLGS_RFC2253 NID_netscape_ca_revocation_url SENT_SHUTDOWN
CB_ACCEPT_EXIT NID_netscape_cert_extension SESSION_ASN1_VERSION
CB_ACCEPT_LOOP NID_netscape_cert_sequence SESS_CACHE_BOTH
CB_ALERT NID_netscape_cert_type SESS_CACHE_CLIENT
CB_CONNECT_EXIT NID_netscape_comment SESS_CACHE_NO_AUTO_CLEAR
CB_CONNECT_LOOP NID_netscape_data_type SESS_CACHE_NO_INTERNAL
CB_EXIT NID_netscape_renewal_url SESS_CACHE_NO_INTERNAL_LOOKUP
CB_HANDSHAKE_DONE NID_netscape_revocation_url SESS_CACHE_NO_INTERNAL_STORE
CB_HANDSHAKE_START NID_netscape_ssl_server_name SESS_CACHE_OFF
CB_LOOP NID_ns_sgc SESS_CACHE_SERVER
CB_READ NID_organizationName SSL3_VERSION
CB_READ_ALERT NID_organizationalUnitName SSLEAY_BUILT_ON
CB_WRITE NID_pbeWithMD2AndDES_CBC SSLEAY_CFLAGS
CB_WRITE_ALERT NID_pbeWithMD2AndRC2_CBC SSLEAY_DIR
ERROR_NONE NID_pbeWithMD5AndCast5_CBC SSLEAY_PLATFORM
ERROR_SSL NID_pbeWithMD5AndDES_CBC SSLEAY_VERSION
ERROR_SYSCALL NID_pbeWithMD5AndRC2_CBC ST_ACCEPT
ERROR_WANT_ACCEPT NID_pbeWithSHA1AndDES_CBC ST_BEFORE
ERROR_WANT_CONNECT NID_pbeWithSHA1AndRC2_CBC ST_CONNECT
ERROR_WANT_READ NID_pbe_WithSHA1And128BitRC2_CBC ST_INIT
ERROR_WANT_WRITE NID_pbe_WithSHA1And128BitRC4 ST_OK
ERROR_WANT_X509_LOOKUP NID_pbe_WithSHA1And2_Key_TripleDES_CBC ST_READ_BODY
ERROR_ZERO_RETURN NID_pbe_WithSHA1And3_Key_TripleDES_CBC ST_READ_HEADER
EVP_PKS_DSA NID_pbe_WithSHA1And40BitRC2_CBC TLS1_1_VERSION
EVP_PKS_EC NID_pbe_WithSHA1And40BitRC4 TLS1_2_VERSION
EVP_PKS_RSA NID_pbes2 TLS1_3_VERSION
EVP_PKT_ENC NID_pbmac1 TLS1_VERSION
EVP_PKT_EXCH NID_pkcs TLSEXT_STATUSTYPE_ocsp
EVP_PKT_EXP NID_pkcs3 VERIFY_CLIENT_ONCE
EVP_PKT_SIGN NID_pkcs7 VERIFY_FAIL_IF_NO_PEER_CERT
EVP_PK_DH NID_pkcs7_data VERIFY_NONE
EVP_PK_DSA NID_pkcs7_digest VERIFY_PEER
EVP_PK_EC NID_pkcs7_encrypted VERIFY_POST_HANDSHAKE
EVP_PK_RSA NID_pkcs7_enveloped V_OCSP_CERTSTATUS_GOOD
FILETYPE_ASN1 NID_pkcs7_signed V_OCSP_CERTSTATUS_REVOKED
FILETYPE_PEM NID_pkcs7_signedAndEnveloped V_OCSP_CERTSTATUS_UNKNOWN
F_CLIENT_CERTIFICATE NID_pkcs8ShroudedKeyBag WRITING
F_CLIENT_HELLO NID_pkcs9 X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
F_CLIENT_MASTER_KEY NID_pkcs9_challengePassword X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
F_D2I_SSL_SESSION NID_pkcs9_contentType X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
F_GET_CLIENT_FINISHED NID_pkcs9_countersignature X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
F_GET_CLIENT_HELLO NID_pkcs9_emailAddress X509_CHECK_FLAG_NO_WILDCARDS
F_GET_CLIENT_MASTER_KEY NID_pkcs9_extCertAttributes X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
F_GET_SERVER_FINISHED NID_pkcs9_messageDigest X509_FILETYPE_ASN1
F_GET_SERVER_HELLO NID_pkcs9_signingTime X509_FILETYPE_DEFAULT
F_GET_SERVER_VERIFY NID_pkcs9_unstructuredAddress X509_FILETYPE_PEM
F_I2D_SSL_SESSION NID_pkcs9_unstructuredName X509_LOOKUP
F_READ_N NID_private_key_usage_period X509_PURPOSE_ANY
F_REQUEST_CERTIFICATE NID_rc2_40_cbc X509_PURPOSE_CRL_SIGN
F_SERVER_HELLO NID_rc2_64_cbc X509_PURPOSE_NS_SSL_SERVER
F_SSL_CERT_NEW NID_rc2_cbc X509_PURPOSE_OCSP_HELPER
F_SSL_GET_NEW_SESSION NID_rc2_cfb64 X509_PURPOSE_SMIME_ENCRYPT
F_SSL_NEW NID_rc2_ecb X509_PURPOSE_SMIME_SIGN
F_SSL_READ NID_rc2_ofb64 X509_PURPOSE_SSL_CLIENT
F_SSL_RSA_PRIVATE_DECRYPT NID_rc4 X509_PURPOSE_SSL_SERVER
F_SSL_RSA_PUBLIC_ENCRYPT NID_rc4_40 X509_PURPOSE_TIMESTAMP_SIGN
F_SSL_SESSION_NEW NID_rc5_cbc X509_TRUST_COMPAT
F_SSL_SESSION_PRINT_FP NID_rc5_cfb64 X509_TRUST_EMAIL
F_SSL_SET_FD NID_rc5_ecb X509_TRUST_OBJECT_SIGN
F_SSL_SET_RFD NID_rc5_ofb64 X509_TRUST_OCSP_REQUEST
F_SSL_SET_WFD NID_ripemd160 X509_TRUST_OCSP_SIGN
F_SSL_USE_CERTIFICATE NID_ripemd160WithRSA X509_TRUST_SSL_CLIENT
F_SSL_USE_CERTIFICATE_ASN1 NID_rle_compression X509_TRUST_SSL_SERVER
F_SSL_USE_CERTIFICATE_FILE NID_rsa X509_TRUST_TSA
F_SSL_USE_PRIVATEKEY NID_rsaEncryption X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
F_SSL_USE_PRIVATEKEY_ASN1 NID_rsadsi X509_V_ERR_AKID_SKID_MISMATCH
F_SSL_USE_PRIVATEKEY_FILE NID_safeContentsBag X509_V_ERR_APPLICATION_VERIFICATION
F_SSL_USE_RSAPRIVATEKEY NID_sdsiCertificate X509_V_ERR_CA_KEY_TOO_SMALL
F_SSL_USE_RSAPRIVATEKEY_ASN1 NID_secretBag X509_V_ERR_CA_MD_TOO_WEAK
F_SSL_USE_RSAPRIVATEKEY_FILE NID_serialNumber X509_V_ERR_CERT_CHAIN_TOO_LONG
F_WRITE_PENDING NID_server_auth X509_V_ERR_CERT_HAS_EXPIRED
GEN_DIRNAME NID_sha X509_V_ERR_CERT_NOT_YET_VALID
GEN_DNS NID_sha1 X509_V_ERR_CERT_REJECTED
GEN_EDIPARTY NID_sha1WithRSA X509_V_ERR_CERT_REVOKED
GEN_EMAIL NID_sha1WithRSAEncryption X509_V_ERR_CERT_SIGNATURE_FAILURE
GEN_IPADD NID_shaWithRSAEncryption X509_V_ERR_CERT_UNTRUSTED
GEN_OTHERNAME NID_stateOrProvinceName X509_V_ERR_CRL_HAS_EXPIRED
GEN_RID NID_subject_alt_name X509_V_ERR_CRL_NOT_YET_VALID
GEN_URI NID_subject_key_identifier X509_V_ERR_CRL_PATH_VALIDATION_ERROR
GEN_X400 NID_surname X509_V_ERR_CRL_SIGNATURE_FAILURE
LIBRESSL_VERSION_NUMBER NID_sxnet X509_V_ERR_DANE_NO_MATCH
MBSTRING_ASC NID_time_stamp X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
MBSTRING_BMP NID_title X509_V_ERR_DIFFERENT_CRL_SCOPE
MBSTRING_FLAG NID_undef X509_V_ERR_EE_KEY_TOO_SMALL
MBSTRING_UNIV NID_uniqueIdentifier X509_V_ERR_EMAIL_MISMATCH
MBSTRING_UTF8 NID_x509Certificate X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
MIN_RSA_MODULUS_LENGTH_IN_BYTES NID_x509Crl X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
MODE_ACCEPT_MOVING_WRITE_BUFFER NID_zlib_compression X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
MODE_AUTO_RETRY NOTHING X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
MODE_ENABLE_PARTIAL_WRITE OCSP_RESPONSE_STATUS_INTERNALERROR X509_V_ERR_EXCLUDED_VIOLATION
MODE_RELEASE_BUFFERS OCSP_RESPONSE_STATUS_MALFORMEDREQUEST X509_V_ERR_HOSTNAME_MISMATCH
NID_OCSP_sign OCSP_RESPONSE_STATUS_SIGREQUIRED X509_V_ERR_INVALID_CA
NID_SMIMECapabilities OCSP_RESPONSE_STATUS_SUCCESSFUL X509_V_ERR_INVALID_CALL
NID_X500 OCSP_RESPONSE_STATUS_TRYLATER X509_V_ERR_INVALID_EXTENSION
NID_X509 OCSP_RESPONSE_STATUS_UNAUTHORIZED X509_V_ERR_INVALID_NON_CA
NID_ad_OCSP OPENSSL_BUILT_ON X509_V_ERR_INVALID_POLICY_EXTENSION
NID_ad_ca_issuers OPENSSL_CFLAGS X509_V_ERR_INVALID_PURPOSE
NID_algorithm OPENSSL_DIR X509_V_ERR_IP_ADDRESS_MISMATCH
NID_authority_key_identifier OPENSSL_ENGINES_DIR X509_V_ERR_KEYUSAGE_NO_CERTSIGN
NID_basic_constraints OPENSSL_PLATFORM X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
NID_bf_cbc OPENSSL_VERSION X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
NID_bf_cfb64 OPENSSL_VERSION_NUMBER X509_V_ERR_NO_EXPLICIT_POLICY
NID_bf_ecb OP_ALL X509_V_ERR_NO_VALID_SCTS
NID_bf_ofb64 OP_ALLOW_NO_DHE_KEX X509_V_ERR_OCSP_CERT_UNKNOWN
NID_cast5_cbc OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION X509_V_ERR_OCSP_VERIFY_FAILED
NID_cast5_cfb64 OP_CIPHER_SERVER_PREFERENCE X509_V_ERR_OCSP_VERIFY_NEEDED
NID_cast5_ecb OP_CISCO_ANYCONNECT X509_V_ERR_OUT_OF_MEM
NID_cast5_ofb64 OP_COOKIE_EXCHANGE X509_V_ERR_PATH_LENGTH_EXCEEDED
NID_certBag OP_CRYPTOPRO_TLSEXT_BUG X509_V_ERR_PATH_LOOP
NID_certificate_policies OP_DONT_INSERT_EMPTY_FRAGMENTS X509_V_ERR_PERMITTED_VIOLATION
NID_client_auth OP_ENABLE_MIDDLEBOX_COMPAT X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
NID_code_sign OP_EPHEMERAL_RSA X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
NID_commonName OP_LEGACY_SERVER_CONNECT X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION
NID_countryName OP_MICROSOFT_BIG_SSLV3_BUFFER X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
NID_crlBag OP_MICROSOFT_SESS_ID_BUG X509_V_ERR_STORE_LOOKUP
NID_crl_distribution_points OP_MSIE_SSLV2_RSA_PADDING X509_V_ERR_SUBJECT_ISSUER_MISMATCH
NID_crl_number OP_NETSCAPE_CA_DN_BUG X509_V_ERR_SUBTREE_MINMAX
NID_crl_reason OP_NETSCAPE_CHALLENGE_BUG X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256
NID_delta_crl OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_ALGORITHM
NID_des_cbc OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_CURVE
NID_des_cfb64 OP_NON_EXPORT_FIRST X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM
NID_des_ecb OP_NO_ANTI_REPLAY X509_V_ERR_SUITE_B_INVALID_VERSION
NID_des_ede OP_NO_CLIENT_RENEGOTIATION X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED
NID_des_ede3 OP_NO_COMPRESSION X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
NID_des_ede3_cbc OP_NO_ENCRYPT_THEN_MAC X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
NID_des_ede3_cfb64 OP_NO_QUERY_MTU X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
NID_des_ede3_ofb64 OP_NO_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL
NID_des_ede_cbc OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
NID_des_ede_cfb64 OP_NO_SSL_MASK X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
NID_des_ede_ofb64 OP_NO_SSLv2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
NID_des_ofb64 OP_NO_SSLv3 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
NID_description OP_NO_TICKET X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
NID_desx_cbc OP_NO_TLSv1 X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
NID_dhKeyAgreement OP_NO_TLSv1_1 X509_V_ERR_UNNESTED_RESOURCE
NID_dnQualifier OP_NO_TLSv1_2 X509_V_ERR_UNSPECIFIED
NID_dsa OP_NO_TLSv1_3 X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX
NID_dsaWithSHA OP_PKCS1_CHECK_1 X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE
NID_dsaWithSHA1 OP_PKCS1_CHECK_2 X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE
NID_dsaWithSHA1_2 OP_PRIORITIZE_CHACHA X509_V_ERR_UNSUPPORTED_NAME_SYNTAX
NID_dsa_2 OP_SAFARI_ECDHE_ECDSA_BUG X509_V_FLAG_ALLOW_PROXY_CERTS
NID_email_protect OP_SINGLE_DH_USE X509_V_FLAG_CB_ISSUER_CHECK
NID_ext_key_usage OP_SINGLE_ECDH_USE X509_V_FLAG_CHECK_SS_SIGNATURE
NID_ext_req OP_SSLEAY_080_CLIENT_DH_BUG X509_V_FLAG_CRL_CHECK
NID_friendlyName OP_SSLREF2_REUSE_CERT_TYPE_BUG X509_V_FLAG_CRL_CHECK_ALL
NID_givenName OP_TLSEXT_PADDING X509_V_FLAG_EXPLICIT_POLICY
NID_hmacWithSHA1 OP_TLS_BLOCK_PADDING_BUG X509_V_FLAG_EXTENDED_CRL_SUPPORT
NID_id_ad OP_TLS_D5_BUG X509_V_FLAG_IGNORE_CRITICAL
NID_id_ce OP_TLS_ROLLBACK_BUG X509_V_FLAG_INHIBIT_ANY
NID_id_kp READING X509_V_FLAG_INHIBIT_MAP
NID_id_pbkdf2 RECEIVED_SHUTDOWN X509_V_FLAG_NOTIFY_POLICY
NID_id_pe RSA_3 X509_V_FLAG_NO_ALT_CHAINS
NID_id_pkix RSA_F4 X509_V_FLAG_NO_CHECK_TIME
NID_id_qt_cps R_BAD_AUTHENTICATION_TYPE X509_V_FLAG_PARTIAL_CHAIN
NID_id_qt_unotice R_BAD_CHECKSUM X509_V_FLAG_POLICY_CHECK
NID_idea_cbc R_BAD_MAC_DECODE X509_V_FLAG_POLICY_MASK
NID_idea_cfb64 R_BAD_RESPONSE_ARGUMENT X509_V_FLAG_SUITEB_128_LOS
NID_idea_ecb R_BAD_SSL_FILETYPE X509_V_FLAG_SUITEB_128_LOS_ONLY
NID_idea_ofb64 R_BAD_SSL_SESSION_ID_LENGTH X509_V_FLAG_SUITEB_192_LOS
NID_info_access R_BAD_STATE X509_V_FLAG_TRUSTED_FIRST
NID_initials R_BAD_WRITE_RETRY X509_V_FLAG_USE_CHECK_TIME
NID_invalidity_date R_CHALLENGE_IS_DIFFERENT X509_V_FLAG_USE_DELTAS
NID_issuer_alt_name R_CIPHER_TABLE_SRC_ERROR X509_V_FLAG_X509_STRICT
NID_keyBag R_INVALID_CHALLENGE_LENGTH X509_V_OK
NID_key_usage R_NO_CERTIFICATE_SET XN_FLAG_COMPAT
NID_localKeyID R_NO_CERTIFICATE_SPECIFIED XN_FLAG_DN_REV
NID_localityName R_NO_CIPHER_LIST XN_FLAG_DUMP_UNKNOWN_FIELDS
NID_md2 R_NO_CIPHER_MATCH XN_FLAG_FN_ALIGN
NID_md2WithRSAEncryption R_NO_PRIVATEKEY XN_FLAG_FN_LN
NID_md5 R_NO_PUBLICKEY XN_FLAG_FN_MASK
NID_md5WithRSA R_NULL_SSL_CTX XN_FLAG_FN_NONE
NID_md5WithRSAEncryption R_PEER_DID_NOT_RETURN_A_CERTIFICATE XN_FLAG_FN_OID
NID_md5_sha1 R_PEER_ERROR XN_FLAG_FN_SN
NID_mdc2 R_PEER_ERROR_CERTIFICATE XN_FLAG_MULTILINE
NID_mdc2WithRSA R_PEER_ERROR_NO_CIPHER XN_FLAG_ONELINE
NID_ms_code_com R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE XN_FLAG_RFC2253
NID_ms_code_ind R_PUBLIC_KEY_ENCRYPT_ERROR XN_FLAG_SEP_COMMA_PLUS
NID_ms_ctl_sign R_PUBLIC_KEY_IS_NOT_RSA XN_FLAG_SEP_CPLUS_SPC
NID_ms_efs R_READ_WRONG_PACKET_TYPE XN_FLAG_SEP_MASK
NID_ms_ext_req R_SHORT_READ XN_FLAG_SEP_MULTILINE
NID_ms_sgc R_SSL_SESSION_ID_IS_DIFFERENT XN_FLAG_SEP_SPLUS_SPC
NID_name R_UNABLE_TO_EXTRACT_PUBLIC_KEY XN_FLAG_SPC_EQ
=head2 INTERNAL ONLY functions (do not use these)
The following functions are not intended for use from outside of L<Net::SSLeay> module.
They might be removed, renamed or changed without prior notice in future version.
Simply B<DO NOT USE THEM>!
=over
=item * hello
=item * blength
=item * constant
=back
=head1 EXAMPLES
One very good example to look at is the implementation of C<sslcat()> in the
C<SSLeay.pm> file.
The following is a simple SSLeay client (with too little error checking :-(
#!/usr/bin/perl
use Socket;
use Net::SSLeay qw(die_now die_if_ssl_error) ;
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
($dest_serv, $port, $msg) = @ARGV; # Read command line
$port = getservbyname ($port, 'tcp') unless $port =~ /^\d+$/;
$dest_ip = gethostbyname ($dest_serv);
$dest_serv_params = sockaddr_in($port, $dest_ip);
socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!";
connect (S, $dest_serv_params) or die "connect: $!";
select (S); $| = 1; select (STDOUT); # Eliminate STDIO buffering
# The network connection is now open, lets fire up SSL
$ctx = Net::SSLeay::CTX_new() or die_now("Failed to create SSL_CTX $!");
Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL)
or die_if_ssl_error("ssl ctx set options");
$ssl = Net::SSLeay::new($ctx) or die_now("Failed to create SSL $!");
Net::SSLeay::set_fd($ssl, fileno(S)); # Must use fileno
$res = Net::SSLeay::connect($ssl) and die_if_ssl_error("ssl connect");
print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n";
# Exchange data
$res = Net::SSLeay::write($ssl, $msg); # Perl knows how long $msg is
die_if_ssl_error("ssl write");
CORE::shutdown S, 1; # Half close --> No more output, sends EOF to server
$got = Net::SSLeay::read($ssl); # Perl returns undef on failure
die_if_ssl_error("ssl read");
print $got;
Net::SSLeay::free ($ssl); # Tear down connection
Net::SSLeay::CTX_free ($ctx);
close S;
The following is a simple SSLeay echo server (non forking):
#!/usr/bin/perl -w
use Socket;
use Net::SSLeay qw(die_now die_if_ssl_error);
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
$our_ip = "\0\0\0\0"; # Bind to all interfaces
$port = 1235;
$sockaddr_template = 'S n a4 x8';
$our_serv_params = pack ($sockaddr_template, &AF_INET, $port, $our_ip);
socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!";
bind (S, $our_serv_params) or die "bind: $!";
listen (S, 5) or die "listen: $!";
$ctx = Net::SSLeay::CTX_new () or die_now("CTX_new ($ctx): $!");
Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL)
or die_if_ssl_error("ssl ctx set options");
# Following will ask password unless private key is not encrypted
Net::SSLeay::CTX_use_RSAPrivateKey_file ($ctx, 'plain-rsa.pem',
&Net::SSLeay::FILETYPE_PEM);
die_if_ssl_error("private key");
Net::SSLeay::CTX_use_certificate_file ($ctx, 'plain-cert.pem',
&Net::SSLeay::FILETYPE_PEM);
die_if_ssl_error("certificate");
while (1) {
print "Accepting connections...\n";
($addr = accept (NS, S)) or die "accept: $!";
select (NS); $| = 1; select (STDOUT); # Piping hot!
($af,$client_port,$client_ip) = unpack($sockaddr_template,$addr);
@inetaddr = unpack('C4',$client_ip);
print "$af connection from " .
join ('.', @inetaddr) . ":$client_port\n";
# We now have a network connection, lets fire up SSLeay...
$ssl = Net::SSLeay::new($ctx) or die_now("SSL_new ($ssl): $!");
Net::SSLeay::set_fd($ssl, fileno(NS));
$err = Net::SSLeay::accept($ssl) and die_if_ssl_error('ssl accept');
print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n";
# Connected. Exchange some data.
$got = Net::SSLeay::read($ssl); # Returns undef on fail
die_if_ssl_error("ssl read");
print "Got `$got' (" . length ($got) . " chars)\n";
Net::SSLeay::write ($ssl, uc ($got)) or die "write: $!";
die_if_ssl_error("ssl write");
Net::SSLeay::free ($ssl); # Tear down connection
close NS;
}
Yet another echo server. This one runs from C</etc/inetd.conf> so it avoids
all the socket code overhead. Only caveat is opening an rsa key file -
it had better be without any encryption or else it will not know where
to ask for the password. Note how C<STDIN> and C<STDOUT> are wired to SSL.
#!/usr/bin/perl
# /etc/inetd.conf
# ssltst stream tcp nowait root /path/to/server.pl server.pl
# /etc/services
# ssltst 1234/tcp
use Net::SSLeay qw(die_now die_if_ssl_error);
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
chdir '/key/dir' or die "chdir: $!";
$| = 1; # Piping hot!
open LOG, ">>/dev/console" or die "Can't open log file $!";
select LOG; print "server.pl started\n";
$ctx = Net::SSLeay::CTX_new() or die_now "CTX_new ($ctx) ($!)";
$ssl = Net::SSLeay::new($ctx) or die_now "new ($ssl) ($!)";
Net::SSLeay::set_options($ssl, &Net::SSLeay::OP_ALL)
and die_if_ssl_error("ssl set options");
# We get already open network connection from inetd, now we just
# need to attach SSLeay to STDIN and STDOUT
Net::SSLeay::set_rfd($ssl, fileno(STDIN));
Net::SSLeay::set_wfd($ssl, fileno(STDOUT));
Net::SSLeay::use_RSAPrivateKey_file ($ssl, 'plain-rsa.pem',
Net::SSLeay::FILETYPE_PEM);
die_if_ssl_error("private key");
Net::SSLeay::use_certificate_file ($ssl, 'plain-cert.pem',
Net::SSLeay::FILETYPE_PEM);
die_if_ssl_error("certificate");
Net::SSLeay::accept($ssl) and die_if_ssl_err("ssl accept: $!");
print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n";
$got = Net::SSLeay::read($ssl);
die_if_ssl_error("ssl read");
print "Got `$got' (" . length ($got) . " chars)\n";
Net::SSLeay::write ($ssl, uc($got)) or die "write: $!";
die_if_ssl_error("ssl write");
Net::SSLeay::free ($ssl); # Tear down the connection
Net::SSLeay::CTX_free ($ctx);
close LOG;
There are also a number of example/test programs in the examples directory:
sslecho.pl - A simple server, not unlike the one above
minicli.pl - Implements a client using low level SSLeay routines
sslcat.pl - Demonstrates using high level sslcat utility function
get_page.pl - Is a utility for getting html pages from secure servers
callback.pl - Demonstrates certificate verification and callback usage
stdio_bulk.pl - Does SSL over Unix pipes
ssl-inetd-serv.pl - SSL server that can be invoked from inetd.conf
httpd-proxy-snif.pl - Utility that allows you to see how a browser
sends https request to given server and what reply
it gets back (very educative :-)
makecert.pl - Creates a self signed cert (does not use this module)
=head1 INSTALLATION
See README and README.* in the distribution directory for installation guidance on a variety of platforms.
=head1 LIMITATIONS
C<Net::SSLeay::read()> uses an internal buffer of 32KB, thus no single read
will return more. In practice one read returns much less, usually
as much as fits in one network packet. To work around this,
you should use a loop like this:
$reply = '';
while ($got = Net::SSLeay::read($ssl)) {
last if print_errs('SSL_read');
$reply .= $got;
}
Although there is no built-in limit in C<Net::SSLeay::write()>, the network
packet size limitation applies here as well, thus use:
$written = 0;
while ($written < length($message)) {
$written += Net::SSLeay::write($ssl, substr($message, $written));
last if print_errs('SSL_write');
}
Or alternatively you can just use the following convenience functions:
Net::SSLeay::ssl_write_all($ssl, $message) or die "ssl write failure";
$got = Net::SSLeay::ssl_read_all($ssl) or die "ssl read failure";
=head1 KNOWN BUGS AND CAVEATS
An OpenSSL bug CVE-2015-0290 "OpenSSL Multiblock Corrupted Pointer Issue"
can cause POST requests of over 90kB to fail or crash. This bug is reported to be fixed in
OpenSSL 1.0.2a.
Autoloader emits a
Argument "xxx" isn't numeric in entersub at blib/lib/Net/SSLeay.pm'
warning if die_if_ssl_error is made autoloadable. If you figure out why,
drop me a line.
Callback set using C<SSL_set_verify()> does not appear to work. This may
well be an openssl problem (e.g. see C<ssl/ssl_lib.c> line 1029). Try using
C<SSL_CTX_set_verify()> instead and do not be surprised if even this stops
working in future versions.
Callback and certificate verification stuff is generally too little tested.
Random numbers are not initialized randomly enough, especially if you
do not have C</dev/random> and/or C</dev/urandom> (such as in Solaris
platforms - but it's been suggested that cryptorand daemon from the SUNski
package solves this). In this case you should investigate third party
software that can emulate these devices, e.g. by way of a named pipe
to some program.
Another gotcha with random number initialization is randomness
depletion. This phenomenon, which has been extensively discussed in
OpenSSL, Apache-SSL, and Apache-mod_ssl forums, can cause your
script to block if you use C</dev/random> or to operate insecurely
if you use C</dev/urandom>. What happens is that when too much
randomness is drawn from the operating system's randomness pool
then randomness can temporarily be unavailable. C</dev/random> solves
this problem by waiting until enough randomness can be gathered - and
this can take a long time since blocking reduces activity in the
machine and less activity provides less random events: a vicious circle.
C</dev/urandom> solves this dilemma more pragmatically by simply returning
predictable "random" numbers. SomeC< /dev/urandom> emulation software
however actually seems to implement C</dev/random> semantics. Caveat emptor.
I've been pointed to two such daemons by Mik Firestone <mik@@speed.stdio._com>
who has used them on Solaris 8:
=over
=item 1
Entropy Gathering Daemon (EGD) at L<http://www.lothar.com/tech/crypto/>
=item 2
Pseudo-random number generating daemon (PRNGD) at
L<http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html>
=back
If you are using the low level API functions to communicate with other
SSL implementations, you would do well to call
Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL)
or die_if_ssl_error("ssl ctx set options");
to cope with some well know bugs in some other SSL
implementations. The high level API functions always set all known
compatibility options.
Sometimes C<sslcat()> (and the high level HTTPS functions that build on it)
is too fast in signaling the EOF to legacy HTTPS servers. This causes
the server to return empty page. To work around this problem you can
set the global variable
$Net::SSLeay::slowly = 1; # Add sleep so broken servers can keep up
HTTP/1.1 is not supported. Specifically this module does not know to
issue or serve multiple http requests per connection. This is a serious
shortcoming, but using the SSL session cache on your server helps to
alleviate the CPU load somewhat.
As of version 1.09 many newer OpenSSL auxiliary functions were
added (from C<REM_AUTOMATICALLY_GENERATED_1_09> onwards in C<SSLeay.xs>).
Unfortunately I have not had any opportunity to test these. Some of
them are trivial enough that I believe they "just work", but others
have rather complex interfaces with function pointers and all. In these
cases you should proceed wit great caution.
This module defaults to using OpenSSL automatic protocol negotiation
code for automatically detecting the version of the SSL/TLS protocol
that the other end talks. With most web servers this works just
fine, but once in a while I get complaints from people that the module
does not work with some web servers. Usually this can be solved
by explicitly setting the protocol version, e.g.
$Net::SSLeay::ssl_version = 2; # Insist on SSLv2
$Net::SSLeay::ssl_version = 3; # Insist on SSLv3
$Net::SSLeay::ssl_version = 10; # Insist on TLSv1
$Net::SSLeay::ssl_version = 11; # Insist on TLSv1.1
$Net::SSLeay::ssl_version = 12; # Insist on TLSv1.2
$Net::SSLeay::ssl_version = 13; # Insist on TLSv1.3
Although the autonegotiation is nice to have, the SSL standards
do not formally specify any such mechanism. Most of the world has
accepted the SSLeay/OpenSSL way of doing it as the de facto standard. But
for the few that think differently, you have to explicitly speak
the correct version. This is not really a bug, but rather a deficiency
in the standards. If a site refuses to respond or sends back some
nonsensical error codes (at the SSL handshake level), try this option
before mailing me.
On some systems, OpenSSL may be compiled without support for SSLv2.
If this is the case, Net::SSLeay will warn if ssl_version has been set
to 2.
The high level API returns the certificate of the peer, thus allowing
one to check what certificate was supplied. However, you will only be
able to check the certificate after the fact, i.e. you already sent
your form data by the time you find out that you did not trust them,
oops.
So, while being able to know the certificate after the fact is surely
useful, the security minded would still choose to do the connection
and certificate verification first and only then exchange data
with the site. Currently none of the high level API functions do
this, thus you would have to program it using the low level API. A
good place to start is to see how the C<Net::SSLeay::http_cat()> function
is implemented.
The high level API functions use a global file handle C<SSLCAT_S>
internally. This really should not be a problem because there is no
way to interleave the high level API functions, unless you use threads
(but threads are not very well supported in perl anyway). However, you
may run into problems if you call undocumented internal functions in an
interleaved fashion. The best solution is to "require Net::SSLeay" in
one thread after all the threads have been created.
=head1 DIAGNOSTICS
=over
=item Random number generator not seeded!!!
B<(W)> This warning indicates that C<randomize()> was not able to read
C</dev/random> or C</dev/urandom>, possibly because your system does not
have them or they are differently named. You can still use SSL, but
the encryption will not be as strong.
=item open_tcp_connection: destination host not found:`server' (port 123) ($!)
Name lookup for host named C<server> failed.
=item open_tcp_connection: failed `server', 123 ($!)
The name was resolved, but establishing the TCP connection failed.
=item msg 123: 1 - error:140770F8:SSL routines:SSL23_GET_SERVER_HELLO:unknown proto
SSLeay error string. The first number (123) is the PID, the second number
(1) indicates the position of the error message in SSLeay error stack.
You often see a pile of these messages as errors cascade.
=item msg 123: 1 - error:02001002::lib(2) :func(1) :reason(2)
The same as above, but you didn't call load_error_strings() so SSLeay
couldn't verbosely explain the error. You can still find out what it
means with this command:
/usr/local/ssl/bin/ssleay errstr 02001002
=item Password is being asked for private key
This is normal behaviour if your private key is encrypted. Either
you have to supply the password or you have to use an unencrypted
private key. Scan OpenSSL.org for the FAQ that explains how to
do this (or just study examples/makecert.pl which is used
during C<make test> to do just that).
=back
=head1 SECURITY
You can mitigate some of the security vulnerabilities that might be present in your SSL/TLS application:
=head2 BEAST Attack
http://blogs.cisco.com/security/beat-the-beast-with-tls/
https://community.qualys.com/blogs/securitylabs/2011/10/17/mitigating-the-beast-attack-on-tls
http://blog.zoller.lu/2011/09/beast-summary-tls-cbc-countermeasures.html
The BEAST attack relies on a weakness in the way CBC mode is used in SSL/TLS.
In OpenSSL versions 0.9.6d and later, the protocol-level mitigation is enabled by default,
thus making it not vulnerable to the BEAST attack.
Solutions:
=over
=item * Compile with OpenSSL versions 0.9.6d or later, which enables SSL_OP_ALL by default
=item * Ensure SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS is not enabled (its not enabled by default)
=item * Don't support SSLv2, SSLv3
=item * Actively control the ciphers your server supports with set_cipher_list:
=back
Net::SSLeay::set_cipher_list($ssl, 'RC4-SHA:HIGH:!ADH');
=head2 Session Resumption
http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html
The SSL Labs vulnerability test on your SSL server might report in red:
Session resumption No (IDs assigned but not accepted)
This report is not really bug or a vulnerability, since the server will not
accept session resumption requests.
However, you can prevent this noise in the report by disabling the session cache altogether:
Net::SSLeay::CTX_set_session_cache_mode($ssl_ctx, Net::SSLeay::SESS_CACHE_OFF());
Use 0 if you don't have SESS_CACHE_OFF constant.
=head2 Secure Renegotiation and DoS Attack
https://community.qualys.com/blogs/securitylabs/2011/10/31/tls-renegotiation-and-denial-of-service-attacks
This is not a "security flaw," it is more of a DoS vulnerability.
Solutions:
=over
=item * Do not support SSLv2
=item * Do not set the SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION option
=item * Compile with OpenSSL 0.9.8m or later
=back
=head1 BUGS
If you encounter a problem with this module that you believe is a bug,
please report it in one of the following ways:
=over
=item *
L<create a new issue|https://github.com/radiator-software/p5-net-ssleay/issues/new>
under the Net-SSLeay GitHub project at
L<https://github.com/radiator-software/p5-net-ssleay>;
=item *
L<open a ticket|https://rt.cpan.org/Ticket/Create.html?Queue=Net-SSLeay> using
the CPAN RT bug tracker's web interface at
L<https://rt.cpan.org/Dist/Display.html?Queue=Net-SSLeay>;
=item *
send an email to the CPAN RT bug tracker at
L<bug-Net-SSLeay@rt.cpan.org|mailto:bug-Net-SSLeay@rt.cpan.org>.
=back
Please make sure your bug report includes the following information:
=over
=item * the code you are trying to run;
=item * your operating system name and version;
=item * the output of C<perl -V>;
=item * the version of OpenSSL or LibreSSL you are using.
=back
=head1 AUTHOR
Originally written by Sampo Kellomäki.
Maintained by Florian Ragwitz between November 2005 and January 2010.
Maintained by Mike McCauley between November 2005 and June 2018.
Maintained by Chris Novakovic, Tuure Vartiainen and Heikki Vatiainen since June 2018.
=head1 COPYRIGHT
Copyright (c) 1996-2003 Sampo Kellomäki <sampo@iki.fi>
Copyright (c) 2005-2010 Florian Ragwitz <rafl@debian.org>
Copyright (c) 2005-2018 Mike McCauley <mikem@airspayce.com>
Copyright (c) 2018- Chris Novakovic <chris@chrisn.me.uk>
Copyright (c) 2018- Tuure Vartiainen <vartiait@radiatorsoftware.com>
Copyright (c) 2018- Heikki Vatiainen <hvn@radiatorsoftware.com>
All rights reserved.
=head1 LICENSE
This module is released under the terms of the Artistic License 2.0. For
details, see the C<LICENSE> file distributed with Net-SSLeay's source code.
=head1 SEE ALSO
Net::SSLeay::Handle - File handle interface
./examples - Example servers and a clients
<http://www.openssl.org/> - OpenSSL source, documentation, etc
openssl-users-request@openssl.org - General OpenSSL mailing list
<http://www.ietf.org/rfc/rfc2246.txt> - TLS 1.0 specification
<http://www.w3c.org> - HTTP specifications
<http://www.ietf.org/rfc/rfc2617.txt> - How to send password
<http://www.lothar.com/tech/crypto/> - Entropy Gathering Daemon (EGD)
<http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html>
- pseudo-random number generating daemon (PRNGD)
perl(1)
perlref(1)
perllol(1)
perldoc ~openssl/doc/ssl/SSL_CTX_set_verify.pod
Net/SSLeay.pm 0000644 00000163424 15033552504 0007004 0 ustar 00 # Net::SSLeay.pm - Perl module for using Eric Young's implementation of SSL
#
# Copyright (c) 1996-2003 Sampo Kellomäki <sampo@iki.fi>
# Copyright (c) 2005-2010 Florian Ragwitz <rafl@debian.org>
# Copyright (c) 2005-2018 Mike McCauley <mikem@airspayce.com>
# Copyright (c) 2018- Chris Novakovic <chris@chrisn.me.uk>
# Copyright (c) 2018- Tuure Vartiainen <vartiait@radiatorsoftware.com>
# Copyright (c) 2018- Heikki Vatiainen <hvn@radiatorsoftware.com>
#
# All rights reserved.
#
# This module is released under the terms of the Artistic License 2.0. For
# details, see the LICENSE file distributed with Net-SSLeay's source code.
package Net::SSLeay;
use 5.8.1;
use strict;
use Carp;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD $CRLF);
use Socket;
use Errno;
require Exporter;
use AutoLoader;
# 0=no warns, 1=only errors, 2=ciphers, 3=progress, 4=dump data
$Net::SSLeay::trace = 0; # Do not change here, use
# $Net::SSLeay::trace = [1-4] in caller
# 2 = insist on v2 SSL protocol
# 3 = insist on v3 SSL
# 10 = insist on TLSv1
# 11 = insist on TLSv1.1
# 12 = insist on TLSv1.2
# 13 = insist on TLSv1.3
# 0 or undef = guess (v23)
#
$Net::SSLeay::ssl_version = 0; # don't change here, use
# Net::SSLeay::version=[2,3,0] in caller
#define to enable the "cat /proc/$$/stat" stuff
$Net::SSLeay::linux_debug = 0;
# Number of seconds to sleep after sending message and before half
# closing connection. Useful with antiquated broken servers.
$Net::SSLeay::slowly = 0;
# RANDOM NUMBER INITIALIZATION
#
# Edit to your taste. Using /dev/random would be more secure, but may
# block if randomness is not available, thus the default is
# /dev/urandom. $how_random determines how many bits of randomness to take
# from the device. You should take enough (read SSLeay/doc/rand), but
# beware that randomness is limited resource so you should not waste
# it either or you may end up with randomness depletion (situation where
# /dev/random would block and /dev/urandom starts to return predictable
# numbers).
#
# N.B. /dev/urandom does not exist on all systems, such as Solaris 2.6. In that
# case you should get a third party package that emulates /dev/urandom
# (e.g. via named pipe) or supply a random number file. Some such
# packages are documented in Caveat section of the POD documentation.
$Net::SSLeay::random_device = '/dev/urandom';
$Net::SSLeay::how_random = 512;
$VERSION = '1.88'; # Also update $Net::SSLeay::Handle::VERSION
@ISA = qw(Exporter);
#BEWARE:
# 3-columns part of @EXPORT_OK related to constants is the output of command:
# perl helper_script/regen_openssl_constants.pl -gen-pod
# if you add/remove any constant you need to update it manually
@EXPORT_OK = qw(
ASN1_STRFLGS_ESC_CTRL NID_netscape R_UNKNOWN_REMOTE_ERROR_TYPE
ASN1_STRFLGS_ESC_MSB NID_netscape_base_url R_UNKNOWN_STATE
ASN1_STRFLGS_ESC_QUOTE NID_netscape_ca_policy_url R_X509_LIB
ASN1_STRFLGS_RFC2253 NID_netscape_ca_revocation_url SENT_SHUTDOWN
CB_ACCEPT_EXIT NID_netscape_cert_extension SESSION_ASN1_VERSION
CB_ACCEPT_LOOP NID_netscape_cert_sequence SESS_CACHE_BOTH
CB_ALERT NID_netscape_cert_type SESS_CACHE_CLIENT
CB_CONNECT_EXIT NID_netscape_comment SESS_CACHE_NO_AUTO_CLEAR
CB_CONNECT_LOOP NID_netscape_data_type SESS_CACHE_NO_INTERNAL
CB_EXIT NID_netscape_renewal_url SESS_CACHE_NO_INTERNAL_LOOKUP
CB_HANDSHAKE_DONE NID_netscape_revocation_url SESS_CACHE_NO_INTERNAL_STORE
CB_HANDSHAKE_START NID_netscape_ssl_server_name SESS_CACHE_OFF
CB_LOOP NID_ns_sgc SESS_CACHE_SERVER
CB_READ NID_organizationName SSL3_VERSION
CB_READ_ALERT NID_organizationalUnitName SSLEAY_BUILT_ON
CB_WRITE NID_pbeWithMD2AndDES_CBC SSLEAY_CFLAGS
CB_WRITE_ALERT NID_pbeWithMD2AndRC2_CBC SSLEAY_DIR
ERROR_NONE NID_pbeWithMD5AndCast5_CBC SSLEAY_PLATFORM
ERROR_SSL NID_pbeWithMD5AndDES_CBC SSLEAY_VERSION
ERROR_SYSCALL NID_pbeWithMD5AndRC2_CBC ST_ACCEPT
ERROR_WANT_ACCEPT NID_pbeWithSHA1AndDES_CBC ST_BEFORE
ERROR_WANT_CONNECT NID_pbeWithSHA1AndRC2_CBC ST_CONNECT
ERROR_WANT_READ NID_pbe_WithSHA1And128BitRC2_CBC ST_INIT
ERROR_WANT_WRITE NID_pbe_WithSHA1And128BitRC4 ST_OK
ERROR_WANT_X509_LOOKUP NID_pbe_WithSHA1And2_Key_TripleDES_CBC ST_READ_BODY
ERROR_ZERO_RETURN NID_pbe_WithSHA1And3_Key_TripleDES_CBC ST_READ_HEADER
EVP_PKS_DSA NID_pbe_WithSHA1And40BitRC2_CBC TLS1_1_VERSION
EVP_PKS_EC NID_pbe_WithSHA1And40BitRC4 TLS1_2_VERSION
EVP_PKS_RSA NID_pbes2 TLS1_3_VERSION
EVP_PKT_ENC NID_pbmac1 TLS1_VERSION
EVP_PKT_EXCH NID_pkcs TLSEXT_STATUSTYPE_ocsp
EVP_PKT_EXP NID_pkcs3 VERIFY_CLIENT_ONCE
EVP_PKT_SIGN NID_pkcs7 VERIFY_FAIL_IF_NO_PEER_CERT
EVP_PK_DH NID_pkcs7_data VERIFY_NONE
EVP_PK_DSA NID_pkcs7_digest VERIFY_PEER
EVP_PK_EC NID_pkcs7_encrypted VERIFY_POST_HANDSHAKE
EVP_PK_RSA NID_pkcs7_enveloped V_OCSP_CERTSTATUS_GOOD
FILETYPE_ASN1 NID_pkcs7_signed V_OCSP_CERTSTATUS_REVOKED
FILETYPE_PEM NID_pkcs7_signedAndEnveloped V_OCSP_CERTSTATUS_UNKNOWN
F_CLIENT_CERTIFICATE NID_pkcs8ShroudedKeyBag WRITING
F_CLIENT_HELLO NID_pkcs9 X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
F_CLIENT_MASTER_KEY NID_pkcs9_challengePassword X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
F_D2I_SSL_SESSION NID_pkcs9_contentType X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
F_GET_CLIENT_FINISHED NID_pkcs9_countersignature X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
F_GET_CLIENT_HELLO NID_pkcs9_emailAddress X509_CHECK_FLAG_NO_WILDCARDS
F_GET_CLIENT_MASTER_KEY NID_pkcs9_extCertAttributes X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
F_GET_SERVER_FINISHED NID_pkcs9_messageDigest X509_FILETYPE_ASN1
F_GET_SERVER_HELLO NID_pkcs9_signingTime X509_FILETYPE_DEFAULT
F_GET_SERVER_VERIFY NID_pkcs9_unstructuredAddress X509_FILETYPE_PEM
F_I2D_SSL_SESSION NID_pkcs9_unstructuredName X509_LOOKUP
F_READ_N NID_private_key_usage_period X509_PURPOSE_ANY
F_REQUEST_CERTIFICATE NID_rc2_40_cbc X509_PURPOSE_CRL_SIGN
F_SERVER_HELLO NID_rc2_64_cbc X509_PURPOSE_NS_SSL_SERVER
F_SSL_CERT_NEW NID_rc2_cbc X509_PURPOSE_OCSP_HELPER
F_SSL_GET_NEW_SESSION NID_rc2_cfb64 X509_PURPOSE_SMIME_ENCRYPT
F_SSL_NEW NID_rc2_ecb X509_PURPOSE_SMIME_SIGN
F_SSL_READ NID_rc2_ofb64 X509_PURPOSE_SSL_CLIENT
F_SSL_RSA_PRIVATE_DECRYPT NID_rc4 X509_PURPOSE_SSL_SERVER
F_SSL_RSA_PUBLIC_ENCRYPT NID_rc4_40 X509_PURPOSE_TIMESTAMP_SIGN
F_SSL_SESSION_NEW NID_rc5_cbc X509_TRUST_COMPAT
F_SSL_SESSION_PRINT_FP NID_rc5_cfb64 X509_TRUST_EMAIL
F_SSL_SET_FD NID_rc5_ecb X509_TRUST_OBJECT_SIGN
F_SSL_SET_RFD NID_rc5_ofb64 X509_TRUST_OCSP_REQUEST
F_SSL_SET_WFD NID_ripemd160 X509_TRUST_OCSP_SIGN
F_SSL_USE_CERTIFICATE NID_ripemd160WithRSA X509_TRUST_SSL_CLIENT
F_SSL_USE_CERTIFICATE_ASN1 NID_rle_compression X509_TRUST_SSL_SERVER
F_SSL_USE_CERTIFICATE_FILE NID_rsa X509_TRUST_TSA
F_SSL_USE_PRIVATEKEY NID_rsaEncryption X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
F_SSL_USE_PRIVATEKEY_ASN1 NID_rsadsi X509_V_ERR_AKID_SKID_MISMATCH
F_SSL_USE_PRIVATEKEY_FILE NID_safeContentsBag X509_V_ERR_APPLICATION_VERIFICATION
F_SSL_USE_RSAPRIVATEKEY NID_sdsiCertificate X509_V_ERR_CA_KEY_TOO_SMALL
F_SSL_USE_RSAPRIVATEKEY_ASN1 NID_secretBag X509_V_ERR_CA_MD_TOO_WEAK
F_SSL_USE_RSAPRIVATEKEY_FILE NID_serialNumber X509_V_ERR_CERT_CHAIN_TOO_LONG
F_WRITE_PENDING NID_server_auth X509_V_ERR_CERT_HAS_EXPIRED
GEN_DIRNAME NID_sha X509_V_ERR_CERT_NOT_YET_VALID
GEN_DNS NID_sha1 X509_V_ERR_CERT_REJECTED
GEN_EDIPARTY NID_sha1WithRSA X509_V_ERR_CERT_REVOKED
GEN_EMAIL NID_sha1WithRSAEncryption X509_V_ERR_CERT_SIGNATURE_FAILURE
GEN_IPADD NID_shaWithRSAEncryption X509_V_ERR_CERT_UNTRUSTED
GEN_OTHERNAME NID_stateOrProvinceName X509_V_ERR_CRL_HAS_EXPIRED
GEN_RID NID_subject_alt_name X509_V_ERR_CRL_NOT_YET_VALID
GEN_URI NID_subject_key_identifier X509_V_ERR_CRL_PATH_VALIDATION_ERROR
GEN_X400 NID_surname X509_V_ERR_CRL_SIGNATURE_FAILURE
LIBRESSL_VERSION_NUMBER NID_sxnet X509_V_ERR_DANE_NO_MATCH
MBSTRING_ASC NID_time_stamp X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
MBSTRING_BMP NID_title X509_V_ERR_DIFFERENT_CRL_SCOPE
MBSTRING_FLAG NID_undef X509_V_ERR_EE_KEY_TOO_SMALL
MBSTRING_UNIV NID_uniqueIdentifier X509_V_ERR_EMAIL_MISMATCH
MBSTRING_UTF8 NID_x509Certificate X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
MIN_RSA_MODULUS_LENGTH_IN_BYTES NID_x509Crl X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
MODE_ACCEPT_MOVING_WRITE_BUFFER NID_zlib_compression X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
MODE_AUTO_RETRY NOTHING X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
MODE_ENABLE_PARTIAL_WRITE OCSP_RESPONSE_STATUS_INTERNALERROR X509_V_ERR_EXCLUDED_VIOLATION
MODE_RELEASE_BUFFERS OCSP_RESPONSE_STATUS_MALFORMEDREQUEST X509_V_ERR_HOSTNAME_MISMATCH
NID_OCSP_sign OCSP_RESPONSE_STATUS_SIGREQUIRED X509_V_ERR_INVALID_CA
NID_SMIMECapabilities OCSP_RESPONSE_STATUS_SUCCESSFUL X509_V_ERR_INVALID_CALL
NID_X500 OCSP_RESPONSE_STATUS_TRYLATER X509_V_ERR_INVALID_EXTENSION
NID_X509 OCSP_RESPONSE_STATUS_UNAUTHORIZED X509_V_ERR_INVALID_NON_CA
NID_ad_OCSP OPENSSL_BUILT_ON X509_V_ERR_INVALID_POLICY_EXTENSION
NID_ad_ca_issuers OPENSSL_CFLAGS X509_V_ERR_INVALID_PURPOSE
NID_algorithm OPENSSL_DIR X509_V_ERR_IP_ADDRESS_MISMATCH
NID_authority_key_identifier OPENSSL_ENGINES_DIR X509_V_ERR_KEYUSAGE_NO_CERTSIGN
NID_basic_constraints OPENSSL_PLATFORM X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
NID_bf_cbc OPENSSL_VERSION X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
NID_bf_cfb64 OPENSSL_VERSION_NUMBER X509_V_ERR_NO_EXPLICIT_POLICY
NID_bf_ecb OP_ALL X509_V_ERR_NO_VALID_SCTS
NID_bf_ofb64 OP_ALLOW_NO_DHE_KEX X509_V_ERR_OCSP_CERT_UNKNOWN
NID_cast5_cbc OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION X509_V_ERR_OCSP_VERIFY_FAILED
NID_cast5_cfb64 OP_CIPHER_SERVER_PREFERENCE X509_V_ERR_OCSP_VERIFY_NEEDED
NID_cast5_ecb OP_CISCO_ANYCONNECT X509_V_ERR_OUT_OF_MEM
NID_cast5_ofb64 OP_COOKIE_EXCHANGE X509_V_ERR_PATH_LENGTH_EXCEEDED
NID_certBag OP_CRYPTOPRO_TLSEXT_BUG X509_V_ERR_PATH_LOOP
NID_certificate_policies OP_DONT_INSERT_EMPTY_FRAGMENTS X509_V_ERR_PERMITTED_VIOLATION
NID_client_auth OP_ENABLE_MIDDLEBOX_COMPAT X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
NID_code_sign OP_EPHEMERAL_RSA X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
NID_commonName OP_LEGACY_SERVER_CONNECT X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION
NID_countryName OP_MICROSOFT_BIG_SSLV3_BUFFER X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
NID_crlBag OP_MICROSOFT_SESS_ID_BUG X509_V_ERR_STORE_LOOKUP
NID_crl_distribution_points OP_MSIE_SSLV2_RSA_PADDING X509_V_ERR_SUBJECT_ISSUER_MISMATCH
NID_crl_number OP_NETSCAPE_CA_DN_BUG X509_V_ERR_SUBTREE_MINMAX
NID_crl_reason OP_NETSCAPE_CHALLENGE_BUG X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256
NID_delta_crl OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_ALGORITHM
NID_des_cbc OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_CURVE
NID_des_cfb64 OP_NON_EXPORT_FIRST X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM
NID_des_ecb OP_NO_ANTI_REPLAY X509_V_ERR_SUITE_B_INVALID_VERSION
NID_des_ede OP_NO_CLIENT_RENEGOTIATION X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED
NID_des_ede3 OP_NO_COMPRESSION X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
NID_des_ede3_cbc OP_NO_ENCRYPT_THEN_MAC X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
NID_des_ede3_cfb64 OP_NO_QUERY_MTU X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
NID_des_ede3_ofb64 OP_NO_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL
NID_des_ede_cbc OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
NID_des_ede_cfb64 OP_NO_SSL_MASK X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
NID_des_ede_ofb64 OP_NO_SSLv2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
NID_des_ofb64 OP_NO_SSLv3 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
NID_description OP_NO_TICKET X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
NID_desx_cbc OP_NO_TLSv1 X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
NID_dhKeyAgreement OP_NO_TLSv1_1 X509_V_ERR_UNNESTED_RESOURCE
NID_dnQualifier OP_NO_TLSv1_2 X509_V_ERR_UNSPECIFIED
NID_dsa OP_NO_TLSv1_3 X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX
NID_dsaWithSHA OP_PKCS1_CHECK_1 X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE
NID_dsaWithSHA1 OP_PKCS1_CHECK_2 X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE
NID_dsaWithSHA1_2 OP_PRIORITIZE_CHACHA X509_V_ERR_UNSUPPORTED_NAME_SYNTAX
NID_dsa_2 OP_SAFARI_ECDHE_ECDSA_BUG X509_V_FLAG_ALLOW_PROXY_CERTS
NID_email_protect OP_SINGLE_DH_USE X509_V_FLAG_CB_ISSUER_CHECK
NID_ext_key_usage OP_SINGLE_ECDH_USE X509_V_FLAG_CHECK_SS_SIGNATURE
NID_ext_req OP_SSLEAY_080_CLIENT_DH_BUG X509_V_FLAG_CRL_CHECK
NID_friendlyName OP_SSLREF2_REUSE_CERT_TYPE_BUG X509_V_FLAG_CRL_CHECK_ALL
NID_givenName OP_TLSEXT_PADDING X509_V_FLAG_EXPLICIT_POLICY
NID_hmacWithSHA1 OP_TLS_BLOCK_PADDING_BUG X509_V_FLAG_EXTENDED_CRL_SUPPORT
NID_id_ad OP_TLS_D5_BUG X509_V_FLAG_IGNORE_CRITICAL
NID_id_ce OP_TLS_ROLLBACK_BUG X509_V_FLAG_INHIBIT_ANY
NID_id_kp READING X509_V_FLAG_INHIBIT_MAP
NID_id_pbkdf2 RECEIVED_SHUTDOWN X509_V_FLAG_NOTIFY_POLICY
NID_id_pe RSA_3 X509_V_FLAG_NO_ALT_CHAINS
NID_id_pkix RSA_F4 X509_V_FLAG_NO_CHECK_TIME
NID_id_qt_cps R_BAD_AUTHENTICATION_TYPE X509_V_FLAG_PARTIAL_CHAIN
NID_id_qt_unotice R_BAD_CHECKSUM X509_V_FLAG_POLICY_CHECK
NID_idea_cbc R_BAD_MAC_DECODE X509_V_FLAG_POLICY_MASK
NID_idea_cfb64 R_BAD_RESPONSE_ARGUMENT X509_V_FLAG_SUITEB_128_LOS
NID_idea_ecb R_BAD_SSL_FILETYPE X509_V_FLAG_SUITEB_128_LOS_ONLY
NID_idea_ofb64 R_BAD_SSL_SESSION_ID_LENGTH X509_V_FLAG_SUITEB_192_LOS
NID_info_access R_BAD_STATE X509_V_FLAG_TRUSTED_FIRST
NID_initials R_BAD_WRITE_RETRY X509_V_FLAG_USE_CHECK_TIME
NID_invalidity_date R_CHALLENGE_IS_DIFFERENT X509_V_FLAG_USE_DELTAS
NID_issuer_alt_name R_CIPHER_TABLE_SRC_ERROR X509_V_FLAG_X509_STRICT
NID_keyBag R_INVALID_CHALLENGE_LENGTH X509_V_OK
NID_key_usage R_NO_CERTIFICATE_SET XN_FLAG_COMPAT
NID_localKeyID R_NO_CERTIFICATE_SPECIFIED XN_FLAG_DN_REV
NID_localityName R_NO_CIPHER_LIST XN_FLAG_DUMP_UNKNOWN_FIELDS
NID_md2 R_NO_CIPHER_MATCH XN_FLAG_FN_ALIGN
NID_md2WithRSAEncryption R_NO_PRIVATEKEY XN_FLAG_FN_LN
NID_md5 R_NO_PUBLICKEY XN_FLAG_FN_MASK
NID_md5WithRSA R_NULL_SSL_CTX XN_FLAG_FN_NONE
NID_md5WithRSAEncryption R_PEER_DID_NOT_RETURN_A_CERTIFICATE XN_FLAG_FN_OID
NID_md5_sha1 R_PEER_ERROR XN_FLAG_FN_SN
NID_mdc2 R_PEER_ERROR_CERTIFICATE XN_FLAG_MULTILINE
NID_mdc2WithRSA R_PEER_ERROR_NO_CIPHER XN_FLAG_ONELINE
NID_ms_code_com R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE XN_FLAG_RFC2253
NID_ms_code_ind R_PUBLIC_KEY_ENCRYPT_ERROR XN_FLAG_SEP_COMMA_PLUS
NID_ms_ctl_sign R_PUBLIC_KEY_IS_NOT_RSA XN_FLAG_SEP_CPLUS_SPC
NID_ms_efs R_READ_WRONG_PACKET_TYPE XN_FLAG_SEP_MASK
NID_ms_ext_req R_SHORT_READ XN_FLAG_SEP_MULTILINE
NID_ms_sgc R_SSL_SESSION_ID_IS_DIFFERENT XN_FLAG_SEP_SPLUS_SPC
NID_name R_UNABLE_TO_EXTRACT_PUBLIC_KEY XN_FLAG_SPC_EQ
BIO_eof
BIO_f_ssl
BIO_free
BIO_new
BIO_new_file
BIO_pending
BIO_read
BIO_s_mem
BIO_wpending
BIO_write
CTX_free
CTX_get_cert_store
CTX_new
CTX_use_RSAPrivateKey_file
CTX_use_certificate_file
CTX_v23_new
CTX_v2_new
CTX_v3_new
ERR_error_string
ERR_get_error
ERR_load_RAND_strings
ERR_load_SSL_strings
PEM_read_bio_X509_CRL
RSA_free
RSA_generate_key
SESSION
SESSION_free
SESSION_get_master_key
SESSION_new
SESSION_print
X509_NAME_get_text_by_NID
X509_NAME_oneline
X509_STORE_CTX_set_flags
X509_STORE_add_cert
X509_STORE_add_crl
X509_check_email
X509_check_host
X509_check_ip
X509_check_ip_asc
X509_free
X509_get_issuer_name
X509_get_subject_name
X509_load_cert_crl_file
X509_load_cert_file
X509_load_crl_file
accept
add_session
clear
clear_error
connect
copy_session_id
d2i_SSL_SESSION
die_if_ssl_error
die_now
do_https
dump_peer_certificate
err
flush_sessions
free
get_cipher
get_cipher_list
get_client_random
get_fd
get_http
get_http4
get_https
get_https3
get_https4
get_httpx
get_httpx4
get_peer_certificate
get_peer_cert_chain
get_rbio
get_read_ahead
get_server_random
get_shared_ciphers
get_time
get_timeout
get_wbio
i2d_SSL_SESSION
load_error_strings
make_form
make_headers
new
peek
pending
post_http
post_http4
post_https
post_https3
post_https4
post_httpx
post_httpx4
print_errs
read
remove_session
rstate_string
rstate_string_long
set_bio
set_cert_and_key
set_cipher_list
set_fd
set_read_ahead
set_rfd
set_server_cert_and_key
set_session
set_time
set_timeout
set_verify
set_wfd
ssl_read_CRLF
ssl_read_all
ssl_read_until
ssl_write_CRLF
ssl_write_all
sslcat
state_string
state_string_long
tcp_read_CRLF
tcp_read_all
tcp_read_until
tcp_write_CRLF
tcp_write_all
tcpcat
tcpxcat
use_PrivateKey
use_PrivateKey_ASN1
use_PrivateKey_file
use_RSAPrivateKey
use_RSAPrivateKey_ASN1
use_RSAPrivateKey_file
use_certificate
use_certificate_ASN1
use_certificate_file
write
d2i_OCSP_RESPONSE
i2d_OCSP_RESPONSE
OCSP_RESPONSE_free
d2i_OCSP_REQUEST
i2d_OCSP_REQUEST
OCSP_REQUEST_free
OCSP_cert2ids
OCSP_ids2req
OCSP_response_status
OCSP_response_status_str
OCSP_response_verify
OCSP_response_results
OCSP_RESPONSE_STATUS_INTERNALERROR
OCSP_RESPONSE_STATUS_MALFORMEDREQUEST
OCSP_RESPONSE_STATUS_SIGREQUIRED
OCSP_RESPONSE_STATUS_SUCCESSFUL
OCSP_RESPONSE_STATUS_TRYLATER
OCSP_RESPONSE_STATUS_UNAUTHORIZED
TLSEXT_STATUSTYPE_ocsp
V_OCSP_CERTSTATUS_GOOD
V_OCSP_CERTSTATUS_REVOKED
V_OCSP_CERTSTATUS_UNKNOWN
);
sub AUTOLOAD {
# This AUTOLOAD is used to 'autoload' constants from the constant()
# XS function. If a constant is not found then control is passed
# to the AUTOLOAD in AutoLoader.
my $constname;
($constname = $AUTOLOAD) =~ s/.*:://;
my $val = constant($constname);
if ($! != 0) {
if ($! =~ /((Invalid)|(not valid))/i || $!{EINVAL}) {
$AutoLoader::AUTOLOAD = $AUTOLOAD;
goto &AutoLoader::AUTOLOAD;
}
else {
croak "Your vendor has not defined SSLeay macro $constname";
}
}
eval "sub $AUTOLOAD { $val }";
goto &$AUTOLOAD;
}
eval {
require XSLoader;
XSLoader::load('Net::SSLeay', $VERSION);
1;
} or do {
require DynaLoader;
push @ISA, 'DynaLoader';
bootstrap Net::SSLeay $VERSION;
};
# Preloaded methods go here.
$CRLF = "\x0d\x0a"; # because \r\n is not fully portable
### Print SSLeay error stack
sub print_errs {
my ($msg) = @_;
my ($count, $err, $errs, $e) = (0,0,'');
while ($err = ERR_get_error()) {
$count ++;
$e = "$msg $$: $count - " . ERR_error_string($err) . "\n";
$errs .= $e;
warn $e if $Net::SSLeay::trace;
}
return $errs;
}
# Death is conditional to SSLeay errors existing, i.e. this function checks
# for errors and only dies in affirmative.
# usage: Net::SSLeay::write($ssl, "foo") or die_if_ssl_error("SSL write ($!)");
sub die_if_ssl_error {
my ($msg) = @_;
die "$$: $msg\n" if print_errs($msg);
}
# Unconditional death. Used to print SSLeay errors before dying.
# usage: Net::SSLeay::connect($ssl) or die_now("Failed SSL connect ($!)");
sub die_now {
my ($msg) = @_;
print_errs($msg);
die "$$: $msg\n";
}
# Perl 5.6.* unicode support causes that length() no longer reliably
# reflects the byte length of a string. This eval is to fix that.
# Thanks to Sean Burke for the snippet.
BEGIN{
eval 'use bytes; sub blength ($) { defined $_[0] ? length $_[0] : 0 }';
$@ and eval ' sub blength ($) { defined $_[0] ? length $_[0] : 0 }' ;
}
# Autoload methods go after __END__, and are processed by the autosplit program.
1;
__END__
### Some methods that are macros in C
sub want_nothing { want(shift) == 1 }
sub want_read { want(shift) == 2 }
sub want_write { want(shift) == 3 }
sub want_X509_lookup { want(shift) == 4 }
###
### Open TCP stream to given host and port, looking up the details
### from system databases or DNS.
###
sub open_tcp_connection {
my ($dest_serv, $port) = @_;
my ($errs);
$port = getservbyname($port, 'tcp') unless $port =~ /^\d+$/;
my $dest_serv_ip = gethostbyname($dest_serv);
unless (defined($dest_serv_ip)) {
$errs = "$0 $$: open_tcp_connection: destination host not found:"
. " `$dest_serv' (port $port) ($!)\n";
warn $errs if $trace;
return wantarray ? (0, $errs) : 0;
}
my $sin = sockaddr_in($port, $dest_serv_ip);
warn "Opening connection to $dest_serv:$port (" .
inet_ntoa($dest_serv_ip) . ")" if $trace>2;
my $proto = &Socket::IPPROTO_TCP; # getprotobyname('tcp') not available on android
if (socket (SSLCAT_S, &PF_INET(), &SOCK_STREAM(), $proto)) {
warn "next connect" if $trace>3;
if (CORE::connect (SSLCAT_S, $sin)) {
my $old_out = select (SSLCAT_S); $| = 1; select ($old_out);
warn "connected to $dest_serv, $port" if $trace>3;
return wantarray ? (1, undef) : 1; # Success
}
}
$errs = "$0 $$: open_tcp_connection: failed `$dest_serv', $port ($!)\n";
warn $errs if $trace;
close SSLCAT_S;
return wantarray ? (0, $errs) : 0; # Fail
}
### Open connection via standard web proxy, if one was defined
### using set_proxy().
sub open_proxy_tcp_connection {
my ($dest_serv, $port) = @_;
return open_tcp_connection($dest_serv, $port) if !$proxyhost;
warn "Connect via proxy: $proxyhost:$proxyport" if $trace>2;
my ($ret, $errs) = open_tcp_connection($proxyhost, $proxyport);
return wantarray ? (0, $errs) : 0 if !$ret; # Connection fail
warn "Asking proxy to connect to $dest_serv:$port" if $trace>2;
#print SSLCAT_S "CONNECT $dest_serv:$port HTTP/1.0$proxyauth$CRLF$CRLF";
#my $line = <SSLCAT_S>; # *** bug? Mixing stdio with syscall read?
($ret, $errs) =
tcp_write_all("CONNECT $dest_serv:$port HTTP/1.0$proxyauth$CRLF$CRLF");
return wantarray ? (0,$errs) : 0 if $errs;
($line, $errs) = tcp_read_until($CRLF . $CRLF, 1024);
warn "Proxy response: $line" if $trace>2;
return wantarray ? (0,$errs) : 0 if $errs;
return wantarray ? (1,'') : 1; # Success
}
###
### read and write helpers that block
###
sub debug_read {
my ($replyr, $gotr) = @_;
my $vm = $trace>2 && $linux_debug ?
(split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
warn " got " . blength($$gotr) . ':'
. blength($$replyr) . " bytes (VM=$vm).\n" if $trace == 3;
warn " got `$$gotr' (" . blength($$gotr) . ':'
. blength($$replyr) . " bytes, VM=$vm)\n" if $trace>3;
}
sub ssl_read_all {
my ($ssl,$how_much) = @_;
$how_much = 2000000000 unless $how_much;
my ($got, $rv, $errs);
my $reply = '';
while ($how_much > 0) {
($got, $rv) = Net::SSLeay::read($ssl,
($how_much > 32768) ? 32768 : $how_much
);
if (! defined $got) {
my $err = Net::SSLeay::get_error($ssl, $rv);
if ($err != Net::SSLeay::ERROR_WANT_READ() and
$err != Net::SSLeay::ERROR_WANT_WRITE()) {
$errs = print_errs('SSL_read');
last;
}
next;
}
$how_much -= blength($got);
debug_read(\$reply, \$got) if $trace>1;
last if $got eq ''; # EOF
$reply .= $got;
}
return wantarray ? ($reply, $errs) : $reply;
}
sub tcp_read_all {
my ($how_much) = @_;
$how_much = 2000000000 unless $how_much;
my ($n, $got, $errs);
my $reply = '';
my $bsize = 0x10000;
while ($how_much > 0) {
$n = sysread(SSLCAT_S,$got, (($bsize < $how_much) ? $bsize : $how_much));
warn "Read error: $! ($n,$how_much)" unless defined $n;
last if !$n; # EOF
$how_much -= $n;
debug_read(\$reply, \$got) if $trace>1;
$reply .= $got;
}
return wantarray ? ($reply, $errs) : $reply;
}
sub ssl_write_all {
my $ssl = $_[0];
my ($data_ref, $errs);
if (ref $_[1]) {
$data_ref = $_[1];
} else {
$data_ref = \$_[1];
}
my ($wrote, $written, $to_write) = (0,0, blength($$data_ref));
my $vm = $trace>2 && $linux_debug ?
(split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
warn " write_all VM at entry=$vm\n" if $trace>2;
while ($to_write) {
#sleep 1; # *** DEBUG
warn "partial `$$data_ref'\n" if $trace>3;
$wrote = write_partial($ssl, $written, $to_write, $$data_ref);
if (defined $wrote && ($wrote > 0)) { # write_partial can return -1
$written += $wrote;
$to_write -= $wrote;
} else {
if (defined $wrote) {
# check error conditions via SSL_get_error per man page
if ( my $sslerr = get_error($ssl, $wrote) ) {
my $errstr = ERR_error_string($sslerr);
my $errname = '';
SWITCH: {
$sslerr == constant("ERROR_NONE") && do {
# according to map page SSL_get_error(3ssl):
# The TLS/SSL I/O operation completed.
# This result code is returned if and only if ret > 0
# so if we received it here complain...
warn "ERROR_NONE unexpected with invalid return value!"
if $trace;
$errname = "SSL_ERROR_NONE";
};
$sslerr == constant("ERROR_WANT_READ") && do {
# operation did not complete, call again later, so do not
# set errname and empty err_que since this is a known
# error that is expected but, we should continue to try
# writing the rest of our data with same io call and params.
warn "ERROR_WANT_READ (TLS/SSL Handshake, will continue)\n"
if $trace;
print_errs('SSL_write(want read)');
last SWITCH;
};
$sslerr == constant("ERROR_WANT_WRITE") && do {
# operation did not complete, call again later, so do not
# set errname and empty err_que since this is a known
# error that is expected but, we should continue to try
# writing the rest of our data with same io call and params.
warn "ERROR_WANT_WRITE (TLS/SSL Handshake, will continue)\n"
if $trace;
print_errs('SSL_write(want write)');
last SWITCH;
};
$sslerr == constant("ERROR_ZERO_RETURN") && do {
# valid protocol closure from other side, no longer able to
# write, since there is no longer a session...
warn "ERROR_ZERO_RETURN($wrote): TLS/SSLv3 Closure alert\n"
if $trace;
$errname = "SSL_ERROR_ZERO_RETURN";
last SWITCH;
};
$sslerr == constant("ERROR_SSL") && do {
# library/protocol error
warn "ERROR_SSL($wrote): Library/Protocol error occured\n"
if $trace;
$errname = "SSL_ERROR_SSL";
last SWITCH;
};
$sslerr == constant("ERROR_WANT_CONNECT") && do {
# according to man page, should never happen on call to
# SSL_write, so complain, but handle as known error type
warn "ERROR_WANT_CONNECT: Unexpected error for SSL_write\n"
if $trace;
$errname = "SSL_ERROR_WANT_CONNECT";
last SWITCH;
};
$sslerr == constant("ERROR_WANT_ACCEPT") && do {
# according to man page, should never happen on call to
# SSL_write, so complain, but handle as known error type
warn "ERROR_WANT_ACCEPT: Unexpected error for SSL_write\n"
if $trace;
$errname = "SSL_ERROR_WANT_ACCEPT";
last SWITCH;
};
$sslerr == constant("ERROR_WANT_X509_LOOKUP") && do {
# operation did not complete: waiting on call back,
# call again later, so do not set errname and empty err_que
# since this is a known error that is expected but, we should
# continue to try writing the rest of our data with same io
# call parameter.
warn "ERROR_WANT_X509_LOOKUP: (Cert Callback asked for in ".
"SSL_write will contine)\n" if $trace;
print_errs('SSL_write(want x509');
last SWITCH;
};
$sslerr == constant("ERROR_SYSCALL") && do {
# some IO error occured. According to man page:
# Check retval, ERR, fallback to errno
if ($wrote==0) { # EOF
warn "ERROR_SYSCALL($wrote): EOF violates protocol.\n"
if $trace;
$errname = "SSL_ERROR_SYSCALL(EOF)";
} else { # -1 underlying BIO error reported.
# check error que for details, don't set errname since we
# are directly appending to errs
my $chkerrs = print_errs('SSL_write (syscall)');
if ($chkerrs) {
warn "ERROR_SYSCALL($wrote): Have errors\n" if $trace;
$errs .= "ssl_write_all $$: 1 - ERROR_SYSCALL($wrote,".
"$sslerr,$errstr,$!)\n$chkerrs";
} else { # que was empty, use errno
warn "ERROR_SYSCALL($wrote): errno($!)\n" if $trace;
$errs .= "ssl_write_all $$: 1 - ERROR_SYSCALL($wrote,".
"$sslerr) : $!\n";
}
}
last SWITCH;
};
warn "Unhandled val $sslerr from SSL_get_error(SSL,$wrote)\n"
if $trace;
$errname = "SSL_ERROR_?($sslerr)";
} # end of SWITCH block
if ($errname) { # if we had an errname set add the error
$errs .= "ssl_write_all $$: 1 - $errname($wrote,$sslerr,".
"$errstr,$!)\n";
}
} # endif on have SSL_get_error val
} # endif on $wrote defined
} # endelse on $wrote > 0
$vm = $trace>2 && $linux_debug ?
(split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
warn " written so far $wrote:$written bytes (VM=$vm)\n" if $trace>2;
# append remaining errors in que and report if errs exist
$errs .= print_errs('SSL_write');
return (wantarray ? (undef, $errs) : undef) if $errs;
}
return wantarray ? ($written, $errs) : $written;
}
sub tcp_write_all {
my ($data_ref, $errs);
if (ref $_[0]) {
$data_ref = $_[0];
} else {
$data_ref = \$_[0];
}
my ($wrote, $written, $to_write) = (0,0, blength($$data_ref));
my $vm = $trace>2 && $linux_debug ?
(split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
warn " write_all VM at entry=$vm to_write=$to_write\n" if $trace>2;
while ($to_write) {
warn "partial `$$data_ref'\n" if $trace>3;
$wrote = syswrite(SSLCAT_S, $$data_ref, $to_write, $written);
if (defined $wrote && ($wrote > 0)) { # write_partial can return -1
$written += $wrote;
$to_write -= $wrote;
} elsif (!defined($wrote)) {
warn "tcp_write_all: $!";
return (wantarray ? (undef, "$!") : undef);
}
$vm = $trace>2 && $linux_debug ?
(split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
warn " written so far $wrote:$written bytes (VM=$vm)\n" if $trace>2;
}
return wantarray ? ($written, '') : $written;
}
### from patch by Clinton Wong <clintdw@netcom.com>
# ssl_read_until($ssl [, $delimit [, $max_length]])
# if $delimit missing, use $/ if it exists, otherwise use \n
# read until delimiter reached, up to $max_length chars if defined
sub ssl_read_until ($;$$) {
my ($ssl,$delim, $max_length) = @_;
# guess the delim string if missing
if ( ! defined $delim ) {
if ( defined $/ && length $/ ) { $delim = $/ }
else { $delim = "\n" } # Note: \n,$/ value depends on the platform
}
my $len_delim = length $delim;
my ($got);
my $reply = '';
# If we have OpenSSL 0.9.6a or later, we can use SSL_peek to
# speed things up.
# N.B. 0.9.6a has security problems, so the support for
# anything earlier than 0.9.6e will be dropped soon.
if (&Net::SSLeay::OPENSSL_VERSION_NUMBER >= 0x0090601f) {
$max_length = 2000000000 unless (defined $max_length);
my ($pending, $peek_length, $found, $done);
while (blength($reply) < $max_length and !$done) {
#Block if necessary until we get some data
$got = Net::SSLeay::peek($ssl,1);
last if print_errs('SSL_peek');
$pending = Net::SSLeay::pending($ssl) + blength($reply);
$peek_length = ($pending > $max_length) ? $max_length : $pending;
$peek_length -= blength($reply);
$got = Net::SSLeay::peek($ssl, $peek_length);
last if print_errs('SSL_peek');
$peek_length = blength($got);
#$found = index($got, $delim); # Old and broken
# the delimiter may be split across two gets, so we prepend
# a little from the last get onto this one before we check
# for a match
my $match;
if(blength($reply) >= blength($delim) - 1) {
#if what we've read so far is greater or equal
#in length of what we need to prepatch
$match = substr $reply, blength($reply) - blength($delim) + 1;
} else {
$match = $reply;
}
$match .= $got;
$found = index($match, $delim);
if ($found > -1) {
#$got = Net::SSLeay::ssl_read_all($ssl, $found+$len_delim);
#read up to the end of the delimiter
$got = Net::SSLeay::ssl_read_all($ssl,
$found + $len_delim
- ((blength($match)) - (blength($got))));
$done = 1;
} else {
$got = Net::SSLeay::ssl_read_all($ssl, $peek_length);
$done = 1 if ($peek_length == $max_length - blength($reply));
}
last if print_errs('SSL_read');
debug_read(\$reply, \$got) if $trace>1;
last if $got eq '';
$reply .= $got;
}
} else {
while (!defined $max_length || length $reply < $max_length) {
$got = Net::SSLeay::ssl_read_all($ssl,1); # one by one
last if print_errs('SSL_read');
debug_read(\$reply, \$got) if $trace>1;
last if $got eq '';
$reply .= $got;
last if $len_delim
&& substr($reply, blength($reply)-$len_delim) eq $delim;
}
}
return $reply;
}
sub tcp_read_until {
my ($delim, $max_length) = @_;
# guess the delim string if missing
if ( ! defined $delim ) {
if ( defined $/ && length $/ ) { $delim = $/ }
else { $delim = "\n" } # Note: \n,$/ value depends on the platform
}
my $len_delim = length $delim;
my ($n,$got);
my $reply = '';
while (!defined $max_length || length $reply < $max_length) {
$n = sysread(SSLCAT_S, $got, 1); # one by one
warn "tcp_read_until: $!" if !defined $n;
debug_read(\$reply, \$got) if $trace>1;
last if !$n; # EOF
$reply .= $got;
last if $len_delim
&& substr($reply, blength($reply)-$len_delim) eq $delim;
}
return $reply;
}
# ssl_read_CRLF($ssl [, $max_length])
sub ssl_read_CRLF ($;$) { ssl_read_until($_[0], $CRLF, $_[1]) }
sub tcp_read_CRLF { tcp_read_until($CRLF, $_[0]) }
# ssl_write_CRLF($ssl, $message) writes $message and appends CRLF
sub ssl_write_CRLF ($$) {
# the next line uses less memory but might use more network packets
return ssl_write_all($_[0], $_[1]) + ssl_write_all($_[0], $CRLF);
# the next few lines do the same thing at the expense of memory, with
# the chance that it will use less packets, since CRLF is in the original
# message and won't be sent separately.
#my $data_ref;
#if (ref $_[1]) { $data_ref = $_[1] }
# else { $data_ref = \$_[1] }
#my $message = $$data_ref . $CRLF;
#return ssl_write_all($_[0], \$message);
}
sub tcp_write_CRLF {
# the next line uses less memory but might use more network packets
return tcp_write_all($_[0]) + tcp_write_all($CRLF);
# the next few lines do the same thing at the expense of memory, with
# the chance that it will use less packets, since CRLF is in the original
# message and won't be sent separately.
#my $data_ref;
#if (ref $_[1]) { $data_ref = $_[1] }
# else { $data_ref = \$_[1] }
#my $message = $$data_ref . $CRLF;
#return tcp_write_all($_[0], \$message);
}
### Quickly print out with whom we're talking
sub dump_peer_certificate ($) {
my ($ssl) = @_;
my $cert = get_peer_certificate($ssl);
return if print_errs('get_peer_certificate');
print "no cert defined\n" if !defined($cert);
# Cipher=NONE with empty cert fix
if (!defined($cert) || ($cert == 0)) {
warn "cert = `$cert'\n" if $trace;
return "Subject Name: undefined\nIssuer Name: undefined\n";
} else {
my $x = 'Subject Name: '
. X509_NAME_oneline(X509_get_subject_name($cert)) . "\n"
. 'Issuer Name: '
. X509_NAME_oneline(X509_get_issuer_name($cert)) . "\n";
Net::SSLeay::X509_free($cert);
return $x;
}
}
### Arrange some randomness for eay PRNG
sub randomize (;$$$) {
my ($rn_seed_file, $seed, $egd_path) = @_;
my $rnsf = defined($rn_seed_file) && -r $rn_seed_file;
$egd_path = '';
$egd_path = $ENV{'EGD_PATH'} if $ENV{'EGD_PATH'};
RAND_seed(rand() + $$); # Stir it with time and pid
unless ($rnsf || -r $Net::SSLeay::random_device || $seed || -S $egd_path) {
my $poll_retval = Net::SSLeay::RAND_poll();
warn "Random number generator not seeded!!!" if $trace && !$poll_retval;
}
RAND_load_file($rn_seed_file, -s _) if $rnsf;
RAND_seed($seed) if $seed;
RAND_seed($ENV{RND_SEED}) if $ENV{RND_SEED};
RAND_load_file($Net::SSLeay::random_device, $Net::SSLeay::how_random/8)
if -r $Net::SSLeay::random_device;
}
sub new_x_ctx {
if ($ssl_version == 2) {
unless (exists &Net::SSLeay::CTX_v2_new) {
warn "ssl_version has been set to 2, but this version of OpenSSL has been compiled without SSLv2 support";
return undef;
}
$ctx = CTX_v2_new();
}
elsif ($ssl_version == 3) { $ctx = CTX_v3_new(); }
elsif ($ssl_version == 10) { $ctx = CTX_tlsv1_new(); }
elsif ($ssl_version == 11) {
unless (exists &Net::SSLeay::CTX_tlsv1_1_new) {
warn "ssl_version has been set to 11, but this version of OpenSSL has been compiled without TLSv1.1 support";
return undef;
}
$ctx = CTX_tlsv1_1_new;
}
elsif ($ssl_version == 12) {
unless (exists &Net::SSLeay::CTX_tlsv1_2_new) {
warn "ssl_version has been set to 12, but this version of OpenSSL has been compiled without TLSv1.2 support";
return undef;
}
$ctx = CTX_tlsv1_2_new;
}
elsif ($ssl_version == 13) {
unless (eval { Net::SSLeay::TLS1_3_VERSION(); } ) {
warn "ssl_version has been set to 13, but this version of OpenSSL has been compiled without TLSv1.3 support";
return undef;
}
$ctx = CTX_new();
unless(Net::SSLeay::CTX_set_min_proto_version($ctx, Net::SSLeay::TLS1_3_VERSION())) {
warn "CTX_set_min_proto failed for TLSv1.3";
return undef;
}
unless(Net::SSLeay::CTX_set_max_proto_version($ctx, Net::SSLeay::TLS1_3_VERSION())) {
warn "CTX_set_max_proto failed for TLSv1.3";
return undef;
}
}
else { $ctx = CTX_new(); }
return $ctx;
}
###
### Standard initialisation. Initialise the ssl library in the usual way
### at most once. Override this if you need differnet initialisation
### SSLeay_add_ssl_algorithms is also protected against multiple runs in SSLeay.xs
### and is also mutex protected in threading perls
###
my $library_initialised;
sub initialize
{
if (!$library_initialised)
{
load_error_strings(); # Some bloat, but I'm after ease of use
SSLeay_add_ssl_algorithms(); # and debuggability.
randomize();
$library_initialised++;
}
}
###
### Basic request - response primitive (don't use for https)
###
sub sslcat { # address, port, message, $crt, $key --> reply / (reply,errs,cert)
my ($dest_serv, $port, $out_message, $crt_path, $key_path) = @_;
my ($ctx, $ssl, $got, $errs, $written);
($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
return (wantarray ? (undef, $errs) : undef) unless $got;
### Do SSL negotiation stuff
warn "Creating SSL $ssl_version context...\n" if $trace>2;
initialize(); # Will init at most once
$ctx = new_x_ctx();
goto cleanup2 if $errs = print_errs('CTX_new') or !$ctx;
CTX_set_options($ctx, &OP_ALL);
goto cleanup2 if $errs = print_errs('CTX_set_options');
warn "Cert `$crt_path' given without key" if $crt_path && !$key_path;
set_cert_and_key($ctx, $crt_path, $key_path) if $crt_path;
warn "Creating SSL connection (context was '$ctx')...\n" if $trace>2;
$ssl = new($ctx);
goto cleanup if $errs = print_errs('SSL_new') or !$ssl;
warn "Setting fd (ctx $ctx, con $ssl)...\n" if $trace>2;
set_fd($ssl, fileno(SSLCAT_S));
goto cleanup if $errs = print_errs('set_fd');
warn "Entering SSL negotiation phase...\n" if $trace>2;
if ($trace>2) {
my $i = 0;
my $p = '';
my $cipher_list = 'Cipher list: ';
$p=Net::SSLeay::get_cipher_list($ssl,$i);
$cipher_list .= $p if $p;
do {
$i++;
$cipher_list .= ', ' . $p if $p;
$p=Net::SSLeay::get_cipher_list($ssl,$i);
} while $p;
$cipher_list .= '\n';
warn $cipher_list;
}
$got = Net::SSLeay::connect($ssl);
warn "SSLeay connect returned $got\n" if $trace>2;
goto cleanup if $errs = print_errs('SSL_connect');
my $server_cert = get_peer_certificate($ssl);
print_errs('get_peer_certificate');
if ($trace>1) {
warn "Cipher `" . get_cipher($ssl) . "'\n";
print_errs('get_ciper');
warn dump_peer_certificate($ssl);
}
### Connected. Exchange some data (doing repeated tries if necessary).
warn "sslcat $$: sending " . blength($out_message) . " bytes...\n"
if $trace==3;
warn "sslcat $$: sending `$out_message' (" . blength($out_message)
. " bytes)...\n" if $trace>3;
($written, $errs) = ssl_write_all($ssl, $out_message);
goto cleanup unless $written;
sleep $slowly if $slowly; # Closing too soon can abort broken servers
CORE::shutdown SSLCAT_S, 1; # Half close --> No more output, send EOF to server
warn "waiting for reply...\n" if $trace>2;
($got, $errs) = ssl_read_all($ssl);
warn "Got " . blength($got) . " bytes.\n" if $trace==3;
warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
cleanup:
free ($ssl);
$errs .= print_errs('SSL_free');
cleanup2:
CTX_free ($ctx);
$errs .= print_errs('CTX_free');
close SSLCAT_S;
return wantarray ? ($got, $errs, $server_cert) : $got;
}
sub tcpcat { # address, port, message, $crt, $key --> reply / (reply,errs,cert)
my ($dest_serv, $port, $out_message) = @_;
my ($got, $errs, $written);
($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
return (wantarray ? (undef, $errs) : undef) unless $got;
### Connected. Exchange some data (doing repeated tries if necessary).
warn "tcpcat $$: sending " . blength($out_message) . " bytes...\n"
if $trace==3;
warn "tcpcat $$: sending `$out_message' (" . blength($out_message)
. " bytes)...\n" if $trace>3;
($written, $errs) = tcp_write_all($out_message);
goto cleanup unless $written;
sleep $slowly if $slowly; # Closing too soon can abort broken servers
CORE::shutdown SSLCAT_S, 1; # Half close --> No more output, send EOF to server
warn "waiting for reply...\n" if $trace>2;
($got, $errs) = tcp_read_all();
warn "Got " . blength($got) . " bytes.\n" if $trace==3;
warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
cleanup:
close SSLCAT_S;
return wantarray ? ($got, $errs) : $got;
}
sub tcpxcat {
my ($usessl, $site, $port, $req, $crt_path, $key_path) = @_;
if ($usessl) {
return sslcat($site, $port, $req, $crt_path, $key_path);
} else {
return tcpcat($site, $port, $req);
}
}
###
### Basic request - response primitive, this is different from sslcat
### because this does not shutdown the connection.
###
sub https_cat { # address, port, message --> returns reply / (reply,errs,cert)
my ($dest_serv, $port, $out_message, $crt_path, $key_path) = @_;
my ($ctx, $ssl, $got, $errs, $written);
($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
return (wantarray ? (undef, $errs) : undef) unless $got;
### Do SSL negotiation stuff
warn "Creating SSL $ssl_version context...\n" if $trace>2;
initialize();
$ctx = new_x_ctx();
goto cleanup2 if $errs = print_errs('CTX_new') or !$ctx;
CTX_set_options($ctx, &OP_ALL);
goto cleanup2 if $errs = print_errs('CTX_set_options');
warn "Cert `$crt_path' given without key" if $crt_path && !$key_path;
set_cert_and_key($ctx, $crt_path, $key_path) if $crt_path;
warn "Creating SSL connection (context was '$ctx')...\n" if $trace>2;
$ssl = new($ctx);
goto cleanup if $errs = print_errs('SSL_new') or !$ssl;
warn "Setting fd (ctx $ctx, con $ssl)...\n" if $trace>2;
set_fd($ssl, fileno(SSLCAT_S));
goto cleanup if $errs = print_errs('set_fd');
warn "Entering SSL negotiation phase...\n" if $trace>2;
if ($trace>2) {
my $i = 0;
my $p = '';
my $cipher_list = 'Cipher list: ';
$p=Net::SSLeay::get_cipher_list($ssl,$i);
$cipher_list .= $p if $p;
do {
$i++;
$cipher_list .= ', ' . $p if $p;
$p=Net::SSLeay::get_cipher_list($ssl,$i);
} while $p;
$cipher_list .= '\n';
warn $cipher_list;
}
$got = Net::SSLeay::connect($ssl);
warn "SSLeay connect failed" if $trace>2 && $got==0;
goto cleanup if $errs = print_errs('SSL_connect');
my $server_cert = get_peer_certificate($ssl);
print_errs('get_peer_certificate');
if ($trace>1) {
warn "Cipher `" . get_cipher($ssl) . "'\n";
print_errs('get_ciper');
warn dump_peer_certificate($ssl);
}
### Connected. Exchange some data (doing repeated tries if necessary).
warn "https_cat $$: sending " . blength($out_message) . " bytes...\n"
if $trace==3;
warn "https_cat $$: sending `$out_message' (" . blength($out_message)
. " bytes)...\n" if $trace>3;
($written, $errs) = ssl_write_all($ssl, $out_message);
goto cleanup unless $written;
warn "waiting for reply...\n" if $trace>2;
($got, $errs) = ssl_read_all($ssl);
warn "Got " . blength($got) . " bytes.\n" if $trace==3;
warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
cleanup:
free ($ssl);
$errs .= print_errs('SSL_free');
cleanup2:
CTX_free ($ctx);
$errs .= print_errs('CTX_free');
close SSLCAT_S;
return wantarray ? ($got, $errs, $server_cert) : $got;
}
sub http_cat { # address, port, message --> returns reply / (reply,errs,cert)
my ($dest_serv, $port, $out_message) = @_;
my ($got, $errs, $written);
($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
return (wantarray ? (undef, $errs) : undef) unless $got;
### Connected. Exchange some data (doing repeated tries if necessary).
warn "http_cat $$: sending " . blength($out_message) . " bytes...\n"
if $trace==3;
warn "http_cat $$: sending `$out_message' (" . blength($out_message)
. " bytes)...\n" if $trace>3;
($written, $errs) = tcp_write_all($out_message);
goto cleanup unless $written;
warn "waiting for reply...\n" if $trace>2;
($got, $errs) = tcp_read_all();
warn "Got " . blength($got) . " bytes.\n" if $trace==3;
warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
cleanup:
close SSLCAT_S;
return wantarray ? ($got, $errs) : $got;
}
sub httpx_cat {
my ($usessl, $site, $port, $req, $crt_path, $key_path) = @_;
warn "httpx_cat: usessl=$usessl ($site:$port)" if $trace;
if ($usessl) {
return https_cat($site, $port, $req, $crt_path, $key_path);
} else {
return http_cat($site, $port, $req);
}
}
###
### Easy set up of private key and certificate
###
sub set_cert_and_key ($$$) {
my ($ctx, $cert_path, $key_path) = @_;
my $errs = '';
# Following will ask password unless private key is not encrypted
CTX_use_PrivateKey_file( $ctx, $key_path, &FILETYPE_PEM ) == 1
or $errs .= print_errs("private key `$key_path' ($!)");
CTX_use_certificate_file ($ctx, $cert_path, &FILETYPE_PEM) == 1
or $errs .= print_errs("certificate `$cert_path' ($!)");
return wantarray ? (undef, $errs) : ($errs eq '');
}
### Old deprecated API
sub set_server_cert_and_key ($$$) { &set_cert_and_key }
### Set up to use web proxy
sub set_proxy ($$;**) {
($proxyhost, $proxyport, $proxyuser, $proxypass) = @_;
require MIME::Base64 if $proxyuser;
$proxyauth = $proxyuser
? $CRLF . 'Proxy-authorization: Basic '
. MIME::Base64::encode("$proxyuser:$proxypass", '')
: '';
}
###
### Easy https manipulation routines
###
sub make_form {
my (@fields) = @_;
my $form;
while (@fields) {
my ($name, $data) = (shift(@fields), shift(@fields));
$data =~ s/([^\w\-.\@\$ ])/sprintf("%%%2.2x",ord($1))/gse;
$data =~ tr[ ][+];
$form .= "$name=$data&";
}
chop $form;
return $form;
}
sub make_headers {
my (@headers) = @_;
my $headers;
while (@headers) {
my $header = shift(@headers);
my $value = shift(@headers);
$header =~ s/:$//;
$value =~ s/\x0d?\x0a$//; # because we add it soon, see below
$headers .= "$header: $value$CRLF";
}
return $headers;
}
sub do_httpx3 {
my ($method, $usessl, $site, $port, $path, $headers,
$content, $mime_type, $crt_path, $key_path) = @_;
my ($response, $page, $h,$v);
my $len = blength($content);
if ($len) {
$mime_type = "application/x-www-form-urlencoded" unless $mime_type;
$content = "Content-Type: $mime_type$CRLF"
. "Content-Length: $len$CRLF$CRLF$content";
} else {
$content = "$CRLF$CRLF";
}
my $req = "$method $path HTTP/1.0$CRLF";
unless (defined $headers && $headers =~ /^Host:/m) {
$req .= "Host: $site";
unless (($port == 80 && !$usessl) || ($port == 443 && $usessl)) {
$req .= ":$port";
}
$req .= $CRLF;
}
$req .= (defined $headers ? $headers : '') . "Accept: */*$CRLF$content";
warn "do_httpx3($method,$usessl,$site:$port)" if $trace;
my ($http, $errs, $server_cert)
= httpx_cat($usessl, $site, $port, $req, $crt_path, $key_path);
return (undef, "HTTP/1.0 900 NET OR SSL ERROR$CRLF$CRLF$errs") if $errs;
$http = '' if !defined $http;
($headers, $page) = split /\s?\n\s?\n/, $http, 2;
warn "headers >$headers< page >>$page<< http >>>$http<<<" if $trace>1;
($response, $headers) = split /\s?\n/, $headers, 2;
return ($page, $response, $headers, $server_cert);
}
sub do_https3 { splice(@_,1,0) = 1; do_httpx3; } # Legacy undocumented
### do_https2() is a legacy version in the sense that it is unable
### to return all instances of duplicate headers.
sub do_httpx2 {
my ($page, $response, $headers, $server_cert) = &do_httpx3;
X509_free($server_cert) if defined $server_cert;
return ($page, $response, defined $headers ?
map( { ($h,$v)=/^(\S+)\:\s*(.*)$/; (uc($h),$v); }
split(/\s?\n/, $headers)
) : ()
);
}
sub do_https2 { splice(@_,1,0) = 1; do_httpx2; } # Legacy undocumented
### Returns headers as a hash where multiple instances of same header
### are handled correctly.
sub do_httpx4 {
my ($page, $response, $headers, $server_cert) = &do_httpx3;
my %hr = ();
for my $hh (split /\s?\n/, $headers) {
my ($h,$v) = ($hh =~ /^(\S+)\:\s*(.*)$/);
push @{$hr{uc($h)}}, $v;
}
return ($page, $response, \%hr, $server_cert);
}
sub do_https4 { splice(@_,1,0) = 1; do_httpx4; } # Legacy undocumented
# https
sub get_https { do_httpx2(GET => 1, @_) }
sub post_https { do_httpx2(POST => 1, @_) }
sub put_https { do_httpx2(PUT => 1, @_) }
sub head_https { do_httpx2(HEAD => 1, @_) }
sub get_https3 { do_httpx3(GET => 1, @_) }
sub post_https3 { do_httpx3(POST => 1, @_) }
sub put_https3 { do_httpx3(PUT => 1, @_) }
sub head_https3 { do_httpx3(HEAD => 1, @_) }
sub get_https4 { do_httpx4(GET => 1, @_) }
sub post_https4 { do_httpx4(POST => 1, @_) }
sub put_https4 { do_httpx4(PUT => 1, @_) }
sub head_https4 { do_httpx4(HEAD => 1, @_) }
# http
sub get_http { do_httpx2(GET => 0, @_) }
sub post_http { do_httpx2(POST => 0, @_) }
sub put_http { do_httpx2(PUT => 0, @_) }
sub head_http { do_httpx2(HEAD => 0, @_) }
sub get_http3 { do_httpx3(GET => 0, @_) }
sub post_http3 { do_httpx3(POST => 0, @_) }
sub put_http3 { do_httpx3(PUT => 0, @_) }
sub head_http3 { do_httpx3(HEAD => 0, @_) }
sub get_http4 { do_httpx4(GET => 0, @_) }
sub post_http4 { do_httpx4(POST => 0, @_) }
sub put_http4 { do_httpx4(PUT => 0, @_) }
sub head_http4 { do_httpx4(HEAD => 0, @_) }
# Either https or http
sub get_httpx { do_httpx2(GET => @_) }
sub post_httpx { do_httpx2(POST => @_) }
sub put_httpx { do_httpx2(PUT => @_) }
sub head_httpx { do_httpx2(HEAD => @_) }
sub get_httpx3 { do_httpx3(GET => @_) }
sub post_httpx3 { do_httpx3(POST => @_) }
sub put_httpx3 { do_httpx3(PUT => @_) }
sub head_httpx3 { do_httpx3(HEAD => @_) }
sub get_httpx4 { do_httpx4(GET => @_) }
sub post_httpx4 { do_httpx4(POST => @_) }
sub put_httpx4 { do_httpx4(PUT => @_) }
sub head_httpx4 { do_httpx4(HEAD => @_) }
### Legacy, don't use
# ($page, $respone_or_err, %headers) = do_https(...);
sub do_https {
my ($site, $port, $path, $method, $headers,
$content, $mime_type, $crt_path, $key_path) = @_;
do_https2($method, $site, $port, $path, $headers,
$content, $mime_type, $crt_path, $key_path);
}
1;
__END__
Net/SSLeay/Handle.pm 0000644 00000025377 15033552504 0010203 0 ustar 00 package Net::SSLeay::Handle;
use 5.8.1;
use strict;
use Socket;
use Net::SSLeay;
require Exporter;
=encoding utf-8
=head1 NAME
Net::SSLeay::Handle - Perl module that lets SSL (HTTPS) sockets be
handled as standard file handles.
=head1 SYNOPSIS
use Net::SSLeay::Handle qw/shutdown/;
my ($host, $port) = ("localhost", 443);
tie(*SSL, "Net::SSLeay::Handle", $host, $port);
print SSL "GET / HTTP/1.0\r\n";
shutdown(\*SSL, 1);
print while (<SSL>);
close SSL;
=head1 DESCRIPTION
Net::SSLeay::Handle allows you to request and receive HTTPS web pages
using "old-fashion" file handles as in:
print SSL "GET / HTTP/1.0\r\n";
and
print while (<SSL>);
If you export the shutdown routine, then the only extra code that
you need to add to your program is the tie function as in:
my $socket;
if ($scheme eq "https") {
tie(*S2, "Net::SSLeay::Handle", $host, $port);
$socket = \*S2;
else {
$socket = Net::SSLeay::Handle->make_socket($host, $port);
}
print $socket $request_headers;
...
=cut
use vars qw(@ISA @EXPORT_OK $VERSION);
@ISA = qw(Exporter);
@EXPORT_OK = qw(shutdown);
$VERSION = '1.88';
my $Initialized; #-- only _initialize() once
my $Debug = 0; #-- pretty hokey
#== Tie Handle Methods ========================================================
#
# see perldoc perltie for details.
#
#==============================================================================
sub TIEHANDLE {
my ($class, $socket, $port) = @_;
$Debug > 10 and print "TIEHANDLE(@{[join ', ', @_]})\n";
ref $socket eq "GLOB" or $socket = $class->make_socket($socket, $port);
$class->_initialize();
my $ctx = Net::SSLeay::CTX_new() or die_now("Failed to create SSL_CTX $!");
my $ssl = Net::SSLeay::new($ctx) or die_now("Failed to create SSL $!");
my $fileno = fileno($socket);
Net::SSLeay::set_fd($ssl, $fileno); # Must use fileno
my $resp = Net::SSLeay::connect($ssl);
$Debug and print "Cipher '" . Net::SSLeay::get_cipher($ssl) . "'\n";
my $self = bless {
ssl => $ssl,
ctx => $ctx,
socket => $socket,
fileno => $fileno,
}, $class;
return $self;
}
sub PRINT {
my $self = shift;
my $ssl = _get_ssl($self);
my $resp = 0;
for my $msg (@_) {
defined $msg or last;
$resp = Net::SSLeay::write($ssl, $msg) or last;
}
return $resp;
}
sub READLINE {
my $self = shift;
my $ssl = _get_ssl($self);
if (wantarray) {
my @lines;
while (my $line = Net::SSLeay::ssl_read_until($ssl)) {
push @lines, $line;
}
return @lines;
} else {
my $line = Net::SSLeay::ssl_read_until($ssl);
return $line ? $line : undef;
}
}
sub READ {
my ($self, $buf, $len, $offset) = \ (@_);
my $ssl = _get_ssl($$self);
defined($$offset) or
return length($$buf = Net::SSLeay::ssl_read_all($ssl, $$len));
defined(my $read = Net::SSLeay::ssl_read_all($ssl, $$len))
or return undef;
my $buf_len = length($$buf);
$$offset > $buf_len and $$buf .= chr(0) x ($$offset - $buf_len);
substr($$buf, $$offset) = $read;
return length($read);
}
sub WRITE {
my $self = shift;
my ($buf, $len, $offset) = @_;
$offset = 0 unless defined $offset;
# Return number of characters written.
my $ssl = $self->_get_ssl();
return $len if Net::SSLeay::write($ssl, substr($buf, $offset, $len));
return undef;
}
sub CLOSE {
my $self = shift;
my $fileno = $self->{fileno};
$Debug > 10 and print "close($fileno)\n";
Net::SSLeay::free ($self->{ssl});
Net::SSLeay::CTX_free ($self->{ctx});
close $self->{socket};
}
sub FILENO { $_[0]->{fileno} }
=head1 FUNCTIONS
=over
=item shutdown
shutdown(\*SOCKET, $mode)
Calls to the main shutdown() don't work with tied sockets created with this
module. This shutdown should be able to distinquish between tied and untied
sockets and do the right thing.
=cut
sub shutdown {
my ($obj, @params) = @_;
my $socket = UNIVERSAL::isa($obj, 'Net::SSLeay::Handle') ?
$obj->{socket} : $obj;
return shutdown($socket, @params);
}
=item debug
my $debug = Net::SSLeay::Handle->debug()
Net::SSLeay::Handle->debug(1)
Get/set debugging mode. Always returns the debug value before the function call.
if an additional argument is given the debug option will be set to this value.
=cut
sub debug {
my ($class, $debug) = @_;
my $old_debug = $Debug;
@_ >1 and $Debug = $debug || 0;
return $old_debug;
}
#=== Internal Methods =========================================================
=item make_socket
my $sock = Net::SSLeay::Handle->make_socket($host, $port);
Creates a socket that is connected to $post using $port. It uses
$Net::SSLeay::proxyhost and proxyport if set and authentificates itself against
this proxy depending on $Net::SSLeay::proxyauth. It also turns autoflush on for
the created socket.
=cut
sub make_socket {
my ($class, $host, $port) = @_;
$Debug > 10 and print "_make_socket(@{[join ', ', @_]})\n";
$host ||= 'localhost';
$port ||= 443;
my $phost = $Net::SSLeay::proxyhost;
my $pport = $Net::SSLeay::proxyhost ? $Net::SSLeay::proxyport : $port;
my $dest_ip = gethostbyname($phost || $host);
my $host_params = sockaddr_in($pport, $dest_ip);
socket(my $socket, &PF_INET(), &SOCK_STREAM(), 0) or die "socket: $!";
connect($socket, $host_params) or die "connect: $!";
my $old_select = select($socket); $| = 1; select($old_select);
$phost and do {
my $auth = $Net::SSLeay::proxyauth;
my $CRLF = $Net::SSLeay::CRLF;
print $socket "CONNECT $host:$port HTTP/1.0$auth$CRLF$CRLF";
my $line = <$socket>;
};
return $socket;
}
=back
=cut
sub _initialize {
$Initialized++ and return;
Net::SSLeay::load_error_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
}
sub __dummy {
my $host = $Net::SSLeay::proxyhost;
my $port = $Net::SSLeay::proxyport;
my $auth = $Net::SSLeay::proxyauth;
}
#--- _get_self($socket) -------------------------------------------------------
# Returns a hash containing attributes for $socket (= \*SOMETHING) based
# on fileno($socket). Will return undef if $socket was not created here.
#------------------------------------------------------------------------------
sub _get_self { return $_[0]; }
#--- _get_ssl($socket) --------------------------------------------------------
# Returns a the "ssl" attribute for $socket (= \*SOMETHING) based
# on fileno($socket). Will cause a warning and return undef if $socket was not
# created here.
#------------------------------------------------------------------------------
sub _get_ssl {
return $_[0]->{ssl};
}
1;
__END__
=head2 USING EXISTING SOCKETS
One of the motivations for writing this module was to avoid
duplicating socket creation code (which is mostly error handling).
The calls to tie() above where it is passed a $host and $port is
provided for convenience testing. If you already have a socket
connected to the right host and port, S1, then you can do something
like:
my $socket \*S1;
if ($scheme eq "https") {
tie(*S2, "Net::SSLeay::Handle", $socket);
$socket = \*S2;
}
my $last_sel = select($socket); $| = 1; select($last_sel);
print $socket $request_headers;
...
Note: As far as I know you must be careful with the globs in the tie()
function. The first parameter must be a glob (*SOMETHING) and the
last parameter must be a reference to a glob (\*SOMETHING_ELSE) or a
scaler that was assigned to a reference to a glob (as in the example
above)
Also, the two globs must be different. When I tried to use the same
glob, I got a core dump.
=head2 EXPORT
None by default.
You can export the shutdown() function.
It is suggested that you do export shutdown() or use the fully
qualified Net::SSLeay::Handle::shutdown() function to shutdown SSL
sockets. It should be smart enough to distinguish between SSL and
non-SSL sockets and do the right thing.
=head1 EXAMPLES
use Net::SSLeay::Handle qw/shutdown/;
my ($host, $port) = ("localhost", 443);
tie(*SSL, "Net::SSLeay::Handle", $host, $port);
print SSL "GET / HTTP/1.0\r\n";
shutdown(\*SSL, 1);
print while (<SSL>);
close SSL;
=head1 TODO
Better error handling. Callback routine?
=head1 CAVEATS
Tying to a file handle is a little tricky (for me at least).
The first parameter to tie() must be a glob (*SOMETHING) and the last
parameter must be a reference to a glob (\*SOMETHING_ELSE) or a scaler
that was assigned to a reference to a glob ($s = \*SOMETHING_ELSE).
Also, the two globs must be different. When I tried to use the same
glob, I got a core dump.
I was able to associate attributes to globs created by this module
(like *SSL above) by making a hash of hashes keyed by the file head1.
=head1 CHANGES
Please see Net-SSLeay-Handle-0.50/Changes file.
=head1 BUGS
If you encounter a problem with this module that you believe is a bug,
please report it in one of the following ways:
=over
=item *
L<create a new issue|https://github.com/radiator-software/p5-net-ssleay/issues/new>
under the Net-SSLeay GitHub project at
L<https://github.com/radiator-software/p5-net-ssleay>;
=item *
L<open a ticket|https://rt.cpan.org/Ticket/Create.html?Queue=Net-SSLeay> using
the CPAN RT bug tracker's web interface at
L<https://rt.cpan.org/Dist/Display.html?Queue=Net-SSLeay>;
=item *
send an email to the CPAN RT bug tracker at
L<bug-Net-SSLeay@rt.cpan.org|mailto:bug-Net-SSLeay@rt.cpan.org>.
=back
Please make sure your bug report includes the following information:
=over
=item * the code you are trying to run;
=item * your operating system name and version;
=item * the output of C<perl -V>;
=item * the version of OpenSSL or LibreSSL you are using.
=back
=head1 AUTHOR
Originally written by Jim Bowlin.
Maintained by Sampo Kellomäki between July 2001 and August 2003.
Maintained by Florian Ragwitz between November 2005 and January 2010.
Maintained by Mike McCauley between November 2005 and June 2018.
Maintained by Chris Novakovic, Tuure Vartiainen and Heikki Vatiainen since June 2018.
=head1 COPYRIGHT
Copyright (c) 2001 Jim Bowlin <jbowlin@linklint.org>
Copyright (c) 2001-2003 Sampo Kellomäki <sampo@iki.fi>
Copyright (c) 2005-2010 Florian Ragwitz <rafl@debian.org>
Copyright (c) 2005-2018 Mike McCauley <mikem@airspayce.com>
Copyright (c) 2018- Chris Novakovic <chris@chrisn.me.uk>
Copyright (c) 2018- Tuure Vartiainen <vartiait@radiatorsoftware.com>
Copyright (c) 2018- Heikki Vatiainen <hvn@radiatorsoftware.com>
All rights reserved.
=head1 LICENSE
This module is released under the terms of the Artistic License 2.0. For
details, see the C<LICENSE> file distributed with Net-SSLeay's source code.
=head1 SEE ALSO
Net::SSLeay, perl(1), http://openssl.org/
=cut
List/Util.pm 0000644 00000050056 15033552504 0006742 0 ustar 00 # Copyright (c) 1997-2009 Graham Barr <gbarr@pobox.com>. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
# Maintained since 2013 by Paul Evans <leonerd@leonerd.org.uk>
package List::Util;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
all any first min max minstr maxstr none notall product reduce sum sum0 shuffle uniq uniqnum uniqstr
pairs unpairs pairkeys pairvalues pairmap pairgrep pairfirst
);
our $VERSION = "1.49";
our $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
require XSLoader;
XSLoader::load('List::Util', $XS_VERSION);
sub import
{
my $pkg = caller;
# (RT88848) Touch the caller's $a and $b, to avoid the warning of
# Name "main::a" used only once: possible typo" warning
no strict 'refs';
${"${pkg}::a"} = ${"${pkg}::a"};
${"${pkg}::b"} = ${"${pkg}::b"};
goto &Exporter::import;
}
# For objects returned by pairs()
sub List::Util::_Pair::key { shift->[0] }
sub List::Util::_Pair::value { shift->[1] }
=head1 NAME
List::Util - A selection of general-utility list subroutines
=head1 SYNOPSIS
use List::Util qw(
reduce any all none notall first
max maxstr min minstr product sum sum0
pairs unpairs pairkeys pairvalues pairfirst pairgrep pairmap
shuffle uniq uniqnum uniqstr
);
=head1 DESCRIPTION
C<List::Util> contains a selection of subroutines that people have expressed
would be nice to have in the perl core, but the usage would not really be high
enough to warrant the use of a keyword, and the size so small such that being
individual extensions would be wasteful.
By default C<List::Util> does not export any subroutines.
=cut
=head1 LIST-REDUCTION FUNCTIONS
The following set of functions all reduce a list down to a single value.
=cut
=head2 reduce
$result = reduce { BLOCK } @list
Reduces C<@list> by calling C<BLOCK> in a scalar context multiple times,
setting C<$a> and C<$b> each time. The first call will be with C<$a> and C<$b>
set to the first two elements of the list, subsequent calls will be done by
setting C<$a> to the result of the previous call and C<$b> to the next element
in the list.
Returns the result of the last call to the C<BLOCK>. If C<@list> is empty then
C<undef> is returned. If C<@list> only contains one element then that element
is returned and C<BLOCK> is not executed.
The following examples all demonstrate how C<reduce> could be used to implement
the other list-reduction functions in this module. (They are not in fact
implemented like this, but instead in a more efficient manner in individual C
functions).
$foo = reduce { defined($a) ? $a :
$code->(local $_ = $b) ? $b :
undef } undef, @list # first
$foo = reduce { $a > $b ? $a : $b } 1..10 # max
$foo = reduce { $a gt $b ? $a : $b } 'A'..'Z' # maxstr
$foo = reduce { $a < $b ? $a : $b } 1..10 # min
$foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr
$foo = reduce { $a + $b } 1 .. 10 # sum
$foo = reduce { $a . $b } @bar # concat
$foo = reduce { $a || $code->(local $_ = $b) } 0, @bar # any
$foo = reduce { $a && $code->(local $_ = $b) } 1, @bar # all
$foo = reduce { $a && !$code->(local $_ = $b) } 1, @bar # none
$foo = reduce { $a || !$code->(local $_ = $b) } 0, @bar # notall
# Note that these implementations do not fully short-circuit
If your algorithm requires that C<reduce> produce an identity value, then make
sure that you always pass that identity value as the first argument to prevent
C<undef> being returned
$foo = reduce { $a + $b } 0, @values; # sum with 0 identity value
The above example code blocks also suggest how to use C<reduce> to build a
more efficient combined version of one of these basic functions and a C<map>
block. For example, to find the total length of all the strings in a list,
we could use
$total = sum map { length } @strings;
However, this produces a list of temporary integer values as long as the
original list of strings, only to reduce it down to a single value again. We
can compute the same result more efficiently by using C<reduce> with a code
block that accumulates lengths by writing this instead as:
$total = reduce { $a + length $b } 0, @strings
The remaining list-reduction functions are all specialisations of this generic
idea.
=head2 any
my $bool = any { BLOCK } @list;
I<Since version 1.33.>
Similar to C<grep> in that it evaluates C<BLOCK> setting C<$_> to each element
of C<@list> in turn. C<any> returns true if any element makes the C<BLOCK>
return a true value. If C<BLOCK> never returns true or C<@list> was empty then
it returns false.
Many cases of using C<grep> in a conditional can be written using C<any>
instead, as it can short-circuit after the first true result.
if( any { length > 10 } @strings ) {
# at least one string has more than 10 characters
}
Note: Due to XS issues the block passed may be able to access the outer @_
directly. This is not intentional and will break under debugger.
=head2 all
my $bool = all { BLOCK } @list;
I<Since version 1.33.>
Similar to L</any>, except that it requires all elements of the C<@list> to
make the C<BLOCK> return true. If any element returns false, then it returns
false. If the C<BLOCK> never returns false or the C<@list> was empty then it
returns true.
Note: Due to XS issues the block passed may be able to access the outer @_
directly. This is not intentional and will break under debugger.
=head2 none
=head2 notall
my $bool = none { BLOCK } @list;
my $bool = notall { BLOCK } @list;
I<Since version 1.33.>
Similar to L</any> and L</all>, but with the return sense inverted. C<none>
returns true only if no value in the C<@list> causes the C<BLOCK> to return
true, and C<notall> returns true only if not all of the values do.
Note: Due to XS issues the block passed may be able to access the outer @_
directly. This is not intentional and will break under debugger.
=head2 first
my $val = first { BLOCK } @list;
Similar to C<grep> in that it evaluates C<BLOCK> setting C<$_> to each element
of C<@list> in turn. C<first> returns the first element where the result from
C<BLOCK> is a true value. If C<BLOCK> never returns true or C<@list> was empty
then C<undef> is returned.
$foo = first { defined($_) } @list # first defined value in @list
$foo = first { $_ > $value } @list # first value in @list which
# is greater than $value
=head2 max
my $num = max @list;
Returns the entry in the list with the highest numerical value. If the list is
empty then C<undef> is returned.
$foo = max 1..10 # 10
$foo = max 3,9,12 # 12
$foo = max @bar, @baz # whatever
=head2 maxstr
my $str = maxstr @list;
Similar to L</max>, but treats all the entries in the list as strings and
returns the highest string as defined by the C<gt> operator. If the list is
empty then C<undef> is returned.
$foo = maxstr 'A'..'Z' # 'Z'
$foo = maxstr "hello","world" # "world"
$foo = maxstr @bar, @baz # whatever
=head2 min
my $num = min @list;
Similar to L</max> but returns the entry in the list with the lowest numerical
value. If the list is empty then C<undef> is returned.
$foo = min 1..10 # 1
$foo = min 3,9,12 # 3
$foo = min @bar, @baz # whatever
=head2 minstr
my $str = minstr @list;
Similar to L</min>, but treats all the entries in the list as strings and
returns the lowest string as defined by the C<lt> operator. If the list is
empty then C<undef> is returned.
$foo = minstr 'A'..'Z' # 'A'
$foo = minstr "hello","world" # "hello"
$foo = minstr @bar, @baz # whatever
=head2 product
my $num = product @list;
I<Since version 1.35.>
Returns the numerical product of all the elements in C<@list>. If C<@list> is
empty then C<1> is returned.
$foo = product 1..10 # 3628800
$foo = product 3,9,12 # 324
=head2 sum
my $num_or_undef = sum @list;
Returns the numerical sum of all the elements in C<@list>. For backwards
compatibility, if C<@list> is empty then C<undef> is returned.
$foo = sum 1..10 # 55
$foo = sum 3,9,12 # 24
$foo = sum @bar, @baz # whatever
=head2 sum0
my $num = sum0 @list;
I<Since version 1.26.>
Similar to L</sum>, except this returns 0 when given an empty list, rather
than C<undef>.
=cut
=head1 KEY/VALUE PAIR LIST FUNCTIONS
The following set of functions, all inspired by L<List::Pairwise>, consume an
even-sized list of pairs. The pairs may be key/value associations from a hash,
or just a list of values. The functions will all preserve the original ordering
of the pairs, and will not be confused by multiple pairs having the same "key"
value - nor even do they require that the first of each pair be a plain string.
B<NOTE>: At the time of writing, the following C<pair*> functions that take a
block do not modify the value of C<$_> within the block, and instead operate
using the C<$a> and C<$b> globals instead. This has turned out to be a poor
design, as it precludes the ability to provide a C<pairsort> function. Better
would be to pass pair-like objects as 2-element array references in C<$_>, in
a style similar to the return value of the C<pairs> function. At some future
version this behaviour may be added.
Until then, users are alerted B<NOT> to rely on the value of C<$_> remaining
unmodified between the outside and the inside of the control block. In
particular, the following example is B<UNSAFE>:
my @kvlist = ...
foreach (qw( some keys here )) {
my @items = pairgrep { $a eq $_ } @kvlist;
...
}
Instead, write this using a lexical variable:
foreach my $key (qw( some keys here )) {
my @items = pairgrep { $a eq $key } @kvlist;
...
}
=cut
=head2 pairs
my @pairs = pairs @kvlist;
I<Since version 1.29.>
A convenient shortcut to operating on even-sized lists of pairs, this function
returns a list of C<ARRAY> references, each containing two items from the
given list. It is a more efficient version of
@pairs = pairmap { [ $a, $b ] } @kvlist
It is most convenient to use in a C<foreach> loop, for example:
foreach my $pair ( pairs @kvlist ) {
my ( $key, $value ) = @$pair;
...
}
Since version C<1.39> these C<ARRAY> references are blessed objects,
recognising the two methods C<key> and C<value>. The following code is
equivalent:
foreach my $pair ( pairs @kvlist ) {
my $key = $pair->key;
my $value = $pair->value;
...
}
=head2 unpairs
my @kvlist = unpairs @pairs
I<Since version 1.42.>
The inverse function to C<pairs>; this function takes a list of C<ARRAY>
references containing two elements each, and returns a flattened list of the
two values from each of the pairs, in order. This is notionally equivalent to
my @kvlist = map { @{$_}[0,1] } @pairs
except that it is implemented more efficiently internally. Specifically, for
any input item it will extract exactly two values for the output list; using
C<undef> if the input array references are short.
Between C<pairs> and C<unpairs>, a higher-order list function can be used to
operate on the pairs as single scalars; such as the following near-equivalents
of the other C<pair*> higher-order functions:
@kvlist = unpairs grep { FUNC } pairs @kvlist
# Like pairgrep, but takes $_ instead of $a and $b
@kvlist = unpairs map { FUNC } pairs @kvlist
# Like pairmap, but takes $_ instead of $a and $b
Note however that these versions will not behave as nicely in scalar context.
Finally, this technique can be used to implement a sort on a keyvalue pair
list; e.g.:
@kvlist = unpairs sort { $a->key cmp $b->key } pairs @kvlist
=head2 pairkeys
my @keys = pairkeys @kvlist;
I<Since version 1.29.>
A convenient shortcut to operating on even-sized lists of pairs, this function
returns a list of the the first values of each of the pairs in the given list.
It is a more efficient version of
@keys = pairmap { $a } @kvlist
=head2 pairvalues
my @values = pairvalues @kvlist;
I<Since version 1.29.>
A convenient shortcut to operating on even-sized lists of pairs, this function
returns a list of the the second values of each of the pairs in the given list.
It is a more efficient version of
@values = pairmap { $b } @kvlist
=head2 pairgrep
my @kvlist = pairgrep { BLOCK } @kvlist;
my $count = pairgrep { BLOCK } @kvlist;
I<Since version 1.29.>
Similar to perl's C<grep> keyword, but interprets the given list as an
even-sized list of pairs. It invokes the C<BLOCK> multiple times, in scalar
context, with C<$a> and C<$b> set to successive pairs of values from the
C<@kvlist>.
Returns an even-sized list of those pairs for which the C<BLOCK> returned true
in list context, or the count of the B<number of pairs> in scalar context.
(Note, therefore, in scalar context that it returns a number half the size of
the count of items it would have returned in list context).
@subset = pairgrep { $a =~ m/^[[:upper:]]+$/ } @kvlist
As with C<grep> aliasing C<$_> to list elements, C<pairgrep> aliases C<$a> and
C<$b> to elements of the given list. Any modifications of it by the code block
will be visible to the caller.
=head2 pairfirst
my ( $key, $val ) = pairfirst { BLOCK } @kvlist;
my $found = pairfirst { BLOCK } @kvlist;
I<Since version 1.30.>
Similar to the L</first> function, but interprets the given list as an
even-sized list of pairs. It invokes the C<BLOCK> multiple times, in scalar
context, with C<$a> and C<$b> set to successive pairs of values from the
C<@kvlist>.
Returns the first pair of values from the list for which the C<BLOCK> returned
true in list context, or an empty list of no such pair was found. In scalar
context it returns a simple boolean value, rather than either the key or the
value found.
( $key, $value ) = pairfirst { $a =~ m/^[[:upper:]]+$/ } @kvlist
As with C<grep> aliasing C<$_> to list elements, C<pairfirst> aliases C<$a> and
C<$b> to elements of the given list. Any modifications of it by the code block
will be visible to the caller.
=head2 pairmap
my @list = pairmap { BLOCK } @kvlist;
my $count = pairmap { BLOCK } @kvlist;
I<Since version 1.29.>
Similar to perl's C<map> keyword, but interprets the given list as an
even-sized list of pairs. It invokes the C<BLOCK> multiple times, in list
context, with C<$a> and C<$b> set to successive pairs of values from the
C<@kvlist>.
Returns the concatenation of all the values returned by the C<BLOCK> in list
context, or the count of the number of items that would have been returned in
scalar context.
@result = pairmap { "The key $a has value $b" } @kvlist
As with C<map> aliasing C<$_> to list elements, C<pairmap> aliases C<$a> and
C<$b> to elements of the given list. Any modifications of it by the code block
will be visible to the caller.
See L</KNOWN BUGS> for a known-bug with C<pairmap>, and a workaround.
=cut
=head1 OTHER FUNCTIONS
=cut
=head2 shuffle
my @values = shuffle @values;
Returns the values of the input in a random order
@cards = shuffle 0..51 # 0..51 in a random order
=head2 uniq
my @subset = uniq @values
I<Since version 1.45.>
Filters a list of values to remove subsequent duplicates, as judged by a
DWIM-ish string equality or C<undef> test. Preserves the order of unique
elements, and retains the first value of any duplicate set.
my $count = uniq @values
In scalar context, returns the number of elements that would have been
returned as a list.
The C<undef> value is treated by this function as distinct from the empty
string, and no warning will be produced. It is left as-is in the returned
list. Subsequent C<undef> values are still considered identical to the first,
and will be removed.
=head2 uniqnum
my @subset = uniqnum @values
I<Since version 1.44.>
Filters a list of values to remove subsequent duplicates, as judged by a
numerical equality test. Preserves the order of unique elements, and retains
the first value of any duplicate set.
my $count = uniqnum @values
In scalar context, returns the number of elements that would have been
returned as a list.
Note that C<undef> is treated much as other numerical operations treat it; it
compares equal to zero but additionally produces a warning if such warnings
are enabled (C<use warnings 'uninitialized';>). In addition, an C<undef> in
the returned list is coerced into a numerical zero, so that the entire list of
values returned by C<uniqnum> are well-behaved as numbers.
Note also that multiple IEEE C<NaN> values are treated as duplicates of
each other, regardless of any differences in their payloads, and despite
the fact that C<< 0+'NaN' == 0+'NaN' >> yields false.
=head2 uniqstr
my @subset = uniqstr @values
I<Since version 1.45.>
Filters a list of values to remove subsequent duplicates, as judged by a
string equality test. Preserves the order of unique elements, and retains the
first value of any duplicate set.
my $count = uniqstr @values
In scalar context, returns the number of elements that would have been
returned as a list.
Note that C<undef> is treated much as other string operations treat it; it
compares equal to the empty string but additionally produces a warning if such
warnings are enabled (C<use warnings 'uninitialized';>). In addition, an
C<undef> in the returned list is coerced into an empty string, so that the
entire list of values returned by C<uniqstr> are well-behaved as strings.
=cut
=head1 KNOWN BUGS
=head2 RT #95409
L<https://rt.cpan.org/Ticket/Display.html?id=95409>
If the block of code given to L</pairmap> contains lexical variables that are
captured by a returned closure, and the closure is executed after the block
has been re-used for the next iteration, these lexicals will not see the
correct values. For example:
my @subs = pairmap {
my $var = "$a is $b";
sub { print "$var\n" };
} one => 1, two => 2, three => 3;
$_->() for @subs;
Will incorrectly print
three is 3
three is 3
three is 3
This is due to the performance optimisation of using C<MULTICALL> for the code
block, which means that fresh SVs do not get allocated for each call to the
block. Instead, the same SV is re-assigned for each iteration, and all the
closures will share the value seen on the final iteration.
To work around this bug, surround the code with a second set of braces. This
creates an inner block that defeats the C<MULTICALL> logic, and does get fresh
SVs allocated each time:
my @subs = pairmap {
{
my $var = "$a is $b";
sub { print "$var\n"; }
}
} one => 1, two => 2, three => 3;
This bug only affects closures that are generated by the block but used
afterwards. Lexical variables that are only used during the lifetime of the
block's execution will take their individual values for each invocation, as
normal.
=head2 uniqnum() on oversized bignums
Due to the way that C<uniqnum()> compares numbers, it cannot distinguish
differences between bignums (especially bigints) that are too large to fit in
the native platform types. For example,
my $x = Math::BigInt->new( "1" x 100 );
my $y = $x + 1;
say for uniqnum( $x, $y );
Will print just the value of C<$x>, believing that C<$y> is a numerically-
equivalent value. This bug does not affect C<uniqstr()>, which will correctly
observe that the two values stringify to different strings.
=head1 SUGGESTED ADDITIONS
The following are additions that have been requested, but I have been reluctant
to add due to them being very simple to implement in perl
# How many elements are true
sub true { scalar grep { $_ } @_ }
# How many elements are false
sub false { scalar grep { !$_ } @_ }
=head1 SEE ALSO
L<Scalar::Util>, L<List::MoreUtils>
=head1 COPYRIGHT
Copyright (c) 1997-2007 Graham Barr <gbarr@pobox.com>. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
Recent additions and current maintenance by
Paul Evans, <leonerd@leonerd.org.uk>.
=cut
1;
List/Util/XS.pm 0000644 00000001772 15033552504 0007275 0 ustar 00 package List::Util::XS;
use strict;
use warnings;
use List::Util;
our $VERSION = "1.49"; # FIXUP
$VERSION = eval $VERSION; # FIXUP
1;
__END__
=head1 NAME
List::Util::XS - Indicate if List::Util was compiled with a C compiler
=head1 SYNOPSIS
use List::Util::XS 1.20;
=head1 DESCRIPTION
C<List::Util::XS> can be used as a dependency to ensure List::Util was
installed using a C compiler and that the XS version is installed.
During installation C<$List::Util::XS::VERSION> will be set to
C<undef> if the XS was not compiled.
Starting with release 1.23_03, Scalar-List-Util is B<always> using
the XS implementation, but for backwards compatibility, we still
ship the C<List::Util::XS> module which just loads C<List::Util>.
=head1 SEE ALSO
L<Scalar::Util>, L<List::Util>, L<List::MoreUtils>
=head1 COPYRIGHT
Copyright (c) 2008 Graham Barr <gbarr@pobox.com>. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
Filter/sh.pm 0000644 00000002561 15033552504 0006747 0 ustar 00 package Filter::sh;
use Filter::Util::Exec ;
use strict ;
use warnings ;
our $VERSION = "1.58" ;
sub import
{
my($self, @args) = @_ ;
unless (@args) {
require Carp;
Carp::croak("Usage: use Filter::sh 'command'");
}
if ($^O eq 'MSWin32') {
Filter::Util::Exec::filter_add ($self, 'cmd', '/c', "@args") ;
}
else {
Filter::Util::Exec::filter_add ($self, 'sh', '-c', "@args") ;
}
}
1 ;
__END__
=head1 NAME
Filter::sh - sh source filter
=head1 SYNOPSIS
use Filter::sh 'command' ;
=head1 DESCRIPTION
This filter pipes the current source file through the program which
corresponds to the C<command> parameter using the Bourne shell.
As with all source filters its scope is limited to the current source
file only. Every file you want to be processed by the filter must have a
use Filter::sh 'command' ;
near the top.
Here is an example script which uses the filter:
use Filter::sh 'tr XYZ PQR' ;
$a = 1 ;
print "XYZ a = $a\n" ;
And here is what it will output:
PQR = 1
=head1 WARNING
You should be I<very> careful when using this filter. Because of the
way the filter is implemented it is possible to end up with deadlock.
Be especially careful when stacking multiple instances of the filter in
a single source file.
=head1 AUTHOR
Paul Marquess
=head1 DATE
11th December 1995.
=cut
Filter/decrypt.pm 0000644 00000005667 15033552504 0010021 0 ustar 00 package Filter::decrypt ;
require 5.006 ;
require XSLoader;
our $VERSION = "1.58" ;
XSLoader::load('Filter::decrypt');
1;
__END__
=head1 NAME
Filter::decrypt - template for a decrypt source filter
=head1 SYNOPSIS
use Filter::decrypt ;
=head1 DESCRIPTION
This is a sample decrypting source filter.
Although this is a fully functional source filter and it does implement
a I<very> simple decrypt algorithm, it is I<not> intended to be used as
it is supplied. Consider it to be a template which you can combine with
a proper decryption algorithm to develop your own decryption filter.
=head1 WARNING
It is important to note that a decryption filter can I<never> provide
complete security against attack. At some point the parser within Perl
needs to be able to scan the original decrypted source. That means that
at some stage fragments of the source will exist in a memory buffer.
Also, with the introduction of the Perl Compiler backend modules, and
the B::Deparse module in particular, using a Source Filter to hide source
code is becoming an increasingly futile exercise.
The best you can hope to achieve by decrypting your Perl source using a
source filter is to make it unavailable to the casual user.
Given that proviso, there are a number of things you can do to make
life more difficult for the prospective cracker.
=over 5
=item 1.
Strip the Perl binary to remove all symbols.
=item 2.
Build the decrypt extension using static linking. If the extension is
provided as a dynamic module, there is nothing to stop someone from
linking it at run time with a modified Perl binary.
=item 3.
Do not build Perl with C<-DDEBUGGING>. If you do then your source can
be retrieved with the C<-DP> command line option.
The sample filter contains logic to detect the C<DEBUGGING> option.
=item 4.
Do not build Perl with C debugging support enabled.
=item 5.
Do not implement the decryption filter as a sub-process (like the cpp
source filter). It is possible to peek into the pipe that connects to
the sub-process.
=item 6.
Check that the Perl Compiler isn't being used.
There is code in the BOOT: section of decrypt.xs that shows how to detect
the presence of the Compiler. Make sure you include it in your module.
Assuming you haven't taken any steps to spot when the compiler is in
use and you have an encrypted Perl script called "myscript.pl", you can
get access the source code inside it using the perl Compiler backend,
like this
perl -MO=Deparse myscript.pl
Note that even if you have included the BOOT: test, it is still
possible to use the Deparse module to get the source code for individual
subroutines.
=item 7.
Do not use the decrypt filter as-is. The algorithm used in this filter
has been purposefully left simple.
=back
If you feel that the source filtering mechanism is not secure enough
you could try using the unexec/undump method. See the Perl FAQ for
further details.
=head1 AUTHOR
Paul Marquess
=head1 DATE
19th December 1995
=cut
Filter/cpp.pm 0000644 00000004212 15033552504 0007112 0 ustar 00 package Filter::cpp;
use Filter::Util::Exec ;
use Config ;
use strict;
use warnings;
our $VERSION = '1.58' ;
my $cpp;
my $sep;
if ($^O eq 'MSWin32') {
$cpp = 'cpp.exe' ;
$sep = ';';
}
else {
($cpp) = $Config{cppstdin} =~ /^(\S+)/;
$sep = ':';
}
if (! $cpp) {
require Carp;
Carp::croak ("Cannot find cpp\n");
}
# Check if cpp is installed
if ( ! -x $cpp) {
my $foundCPP = 0 ;
foreach my $dir (split($sep, $ENV{PATH}), '')
{
if (-x "$dir/$cpp")
{
$foundCPP = 1;
last ;
}
}
if (! $foundCPP) {
require Carp;
Carp::croak("Cannot find cpp\n");
}
}
sub import
{
my($self, @args) = @_ ;
if ($^O eq 'MSWin32') {
Filter::Util::Exec::filter_add ($self, 'cmd', '/c',
"cpp.exe 2>nul") ;
}
else {
Filter::Util::Exec::filter_add ($self, 'sh', '-c',
"$Config{'cppstdin'} $Config{'cppminus'} 2>/dev/null") ;
}
}
1 ;
__END__
=head1 NAME
Filter::cpp - cpp source filter
=head1 SYNOPSIS
use Filter::cpp ;
=head1 DESCRIPTION
This source filter pipes the current source file through the C
pre-processor (cpp) if it is available.
As with all source filters its scope is limited to the current source
file only. Every file you want to be processed by the filter must have a
use Filter::cpp ;
near the top.
Here is an example script which uses the filter:
use Filter::cpp ;
#define FRED 1
$a = 2 + FRED ;
print "a = $a\n" ;
#ifdef FRED
print "Hello FRED\n" ;
#else
print "Where is FRED\n" ;
#endif
And here is what it will output:
a = 3
Hello FRED
This example below, provided by Michael G Schwern, shows a clever way
to get Perl to use a C pre-processor macro when the Filter::cpp module
is available, or to use a Perl sub when it is not.
# use Filter::cpp if we can.
BEGIN { eval 'use Filter::cpp' }
sub PRINT {
my($string) = shift;
#define PRINT($string) \
(print $string."\n")
}
PRINT("Mu");
Look at Michael's Tie::VecArray module for a practical use.
=head1 AUTHOR
Paul Marquess
=head1 DATE
11th December 1995.
=cut
Filter/Util/Exec.pm 0000644 00000002274 15033552504 0010137 0 ustar 00 package Filter::Util::Exec ;
require 5.006 ;
require XSLoader;
our $VERSION = "1.58" ;
XSLoader::load('Filter::Util::Exec');
1 ;
__END__
=head1 NAME
Filter::Util::Exec - exec source filter
=head1 SYNOPSIS
use Filter::Util::Exec;
=head1 DESCRIPTION
This module is provides the interface to allow the creation of I<Source
Filters> which use a Unix coprocess.
See L<Filter::exec>, L<Filter::cpp> and L<Filter::sh> for examples of
the use of this module.
Note that the size of the buffers is limited to 32-bit.
=head2 B<filter_add()>
The function, C<filter_add> installs a filter. It takes one
parameter which should be a reference. The kind of reference used will
dictate which of the two filter types will be used.
If a CODE reference is used then a I<closure filter> will be assumed.
If a CODE reference is not used, a I<method filter> will be assumed.
In a I<method filter>, the reference can be used to store context
information. The reference will be I<blessed> into the package by
C<filter_add>.
See L<Filter::Util::Call> for examples of using context information
using both I<method filters> and I<closure filters>.
=head1 AUTHOR
Paul Marquess
=head1 DATE
11th December 1995.
=cut
Filter/Util/Call.pm 0000644 00000033303 15033552504 0010123 0 ustar 00 # Call.pm
#
# Copyright (c) 1995-2011 Paul Marquess. All rights reserved.
# Copyright (c) 2011-2014 Reini Urban. All rights reserved.
# Copyright (c) 2014-2017 cPanel Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
package Filter::Util::Call ;
require 5.006 ; # our
require Exporter;
use XSLoader ();
use strict;
use warnings;
our @ISA = qw(Exporter);
our @EXPORT = qw( filter_add filter_del filter_read filter_read_exact) ;
our $VERSION = "1.58" ;
our $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
sub filter_read_exact($)
{
my ($size) = @_ ;
my ($left) = $size ;
my ($status) ;
unless ( $size > 0 ) {
require Carp;
Carp::croak("filter_read_exact: size parameter must be > 0");
}
# try to read a block which is exactly $size bytes long
while ($left and ($status = filter_read($left)) > 0) {
$left = $size - length $_ ;
}
# EOF with pending data is a special case
return 1 if $status == 0 and length $_ ;
return $status ;
}
sub filter_add($)
{
my($obj) = @_ ;
# Did we get a code reference?
my $coderef = (ref $obj eq 'CODE');
# If the parameter isn't already a reference, make it one.
if (!$coderef and (!ref($obj) or ref($obj) =~ /^ARRAY|HASH$/)) {
$obj = bless (\$obj, (caller)[0]);
}
# finish off the installation of the filter in C.
Filter::Util::Call::real_import($obj, (caller)[0], $coderef) ;
}
XSLoader::load('Filter::Util::Call');
1;
__END__
=head1 NAME
Filter::Util::Call - Perl Source Filter Utility Module
=head1 SYNOPSIS
use Filter::Util::Call ;
=head1 DESCRIPTION
This module provides you with the framework to write I<Source Filters>
in Perl.
An alternate interface to Filter::Util::Call is now available. See
L<Filter::Simple> for more details.
A I<Perl Source Filter> is implemented as a Perl module. The structure
of the module can take one of two broadly similar formats. To
distinguish between them, the first will be referred to as I<method
filter> and the second as I<closure filter>.
Here is a skeleton for the I<method filter>:
package MyFilter ;
use Filter::Util::Call ;
sub import
{
my($type, @arguments) = @_ ;
filter_add([]) ;
}
sub filter
{
my($self) = @_ ;
my($status) ;
$status = filter_read() ;
$status ;
}
1 ;
and this is the equivalent skeleton for the I<closure filter>:
package MyFilter ;
use Filter::Util::Call ;
sub import
{
my($type, @arguments) = @_ ;
filter_add(
sub
{
my($status) ;
$status = filter_read() ;
$status ;
} )
}
1 ;
To make use of either of the two filter modules above, place the line
below in a Perl source file.
use MyFilter;
In fact, the skeleton modules shown above are fully functional I<Source
Filters>, albeit fairly useless ones. All they does is filter the
source stream without modifying it at all.
As you can see both modules have a broadly similar structure. They both
make use of the C<Filter::Util::Call> module and both have an C<import>
method. The difference between them is that the I<method filter>
requires a I<filter> method, whereas the I<closure filter> gets the
equivalent of a I<filter> method with the anonymous sub passed to
I<filter_add>.
To make proper use of the I<closure filter> shown above you need to
have a good understanding of the concept of a I<closure>. See
L<perlref> for more details on the mechanics of I<closures>.
=head2 B<use Filter::Util::Call>
The following functions are exported by C<Filter::Util::Call>:
filter_add()
filter_read()
filter_read_exact()
filter_del()
=head2 B<import()>
The C<import> method is used to create an instance of the filter. It is
called indirectly by Perl when it encounters the C<use MyFilter> line
in a source file (See L<perlfunc/import> for more details on
C<import>).
It will always have at least one parameter automatically passed by Perl
- this corresponds to the name of the package. In the example above it
will be C<"MyFilter">.
Apart from the first parameter, import can accept an optional list of
parameters. These can be used to pass parameters to the filter. For
example:
use MyFilter qw(a b c) ;
will result in the C<@_> array having the following values:
@_ [0] => "MyFilter"
@_ [1] => "a"
@_ [2] => "b"
@_ [3] => "c"
Before terminating, the C<import> function must explicitly install the
filter by calling C<filter_add>.
=head2 B<filter_add()>
The function, C<filter_add>, actually installs the filter. It takes one
parameter which should be a reference. The kind of reference used will
dictate which of the two filter types will be used.
If a CODE reference is used then a I<closure filter> will be assumed.
If a CODE reference is not used, a I<method filter> will be assumed.
In a I<method filter>, the reference can be used to store context
information. The reference will be I<blessed> into the package by
C<filter_add>, unless the reference was already blessed.
See the filters at the end of this documents for examples of using
context information using both I<method filters> and I<closure
filters>.
=head2 B<filter() and anonymous sub>
Both the C<filter> method used with a I<method filter> and the
anonymous sub used with a I<closure filter> is where the main
processing for the filter is done.
The big difference between the two types of filter is that the I<method
filter> uses the object passed to the method to store any context data,
whereas the I<closure filter> uses the lexical variables that are
maintained by the closure.
Note that the single parameter passed to the I<method filter>,
C<$self>, is the same reference that was passed to C<filter_add>
blessed into the filter's package. See the example filters later on for
details of using C<$self>.
Here is a list of the common features of the anonymous sub and the
C<filter()> method.
=over 5
=item B<$_>
Although C<$_> doesn't actually appear explicitly in the sample filters
above, it is implicitly used in a number of places.
Firstly, when either C<filter> or the anonymous sub are called, a local
copy of C<$_> will automatically be created. It will always contain the
empty string at this point.
Next, both C<filter_read> and C<filter_read_exact> will append any
source data that is read to the end of C<$_>.
Finally, when C<filter> or the anonymous sub are finished processing,
they are expected to return the filtered source using C<$_>.
This implicit use of C<$_> greatly simplifies the filter.
=item B<$status>
The status value that is returned by the user's C<filter> method or
anonymous sub and the C<filter_read> and C<read_exact> functions take
the same set of values, namely:
< 0 Error
= 0 EOF
> 0 OK
=item B<filter_read> and B<filter_read_exact>
These functions are used by the filter to obtain either a line or block
from the next filter in the chain or the actual source file if there
aren't any other filters.
The function C<filter_read> takes two forms:
$status = filter_read() ;
$status = filter_read($size) ;
The first form is used to request a I<line>, the second requests a
I<block>.
In line mode, C<filter_read> will append the next source line to the
end of the C<$_> scalar.
In block mode, C<filter_read> will append a block of data which is <=
C<$size> to the end of the C<$_> scalar. It is important to emphasise
the that C<filter_read> will not necessarily read a block which is
I<precisely> C<$size> bytes.
If you need to be able to read a block which has an exact size, you can
use the function C<filter_read_exact>. It works identically to
C<filter_read> in block mode, except it will try to read a block which
is exactly C<$size> bytes in length. The only circumstances when it
will not return a block which is C<$size> bytes long is on EOF or
error.
It is I<very> important to check the value of C<$status> after I<every>
call to C<filter_read> or C<filter_read_exact>.
=item B<filter_del>
The function, C<filter_del>, is used to disable the current filter. It
does not affect the running of the filter. All it does is tell Perl not
to call filter any more.
See L<Example 4: Using filter_del> for details.
=item I<real_import>
Internal function which adds the filter, based on the L<filter_add>
argument type.
=item I<unimport()>
May be used to disable a filter, but is rarely needed. See L<filter_del>.
=back
=head1 LIMITATIONS
See L<perlfilter/LIMITATIONS> for an overview of the general problems
filtering code in a textual line-level only.
=over
=item __DATA__ is ignored
The content from the __DATA__ block is not filtered.
This is a serious limitation, e.g. for the L<Switch> module.
See L<http://search.cpan.org/perldoc?Switch#LIMITATIONS> for more.
=item Max. codesize limited to 32-bit
Currently internal buffer lengths are limited to 32-bit only.
=back
=head1 EXAMPLES
Here are a few examples which illustrate the key concepts - as such
most of them are of little practical use.
The C<examples> sub-directory has copies of all these filters
implemented both as I<method filters> and as I<closure filters>.
=head2 Example 1: A simple filter.
Below is a I<method filter> which is hard-wired to replace all
occurrences of the string C<"Joe"> to C<"Jim">. Not particularly
Useful, but it is the first example and I wanted to keep it simple.
package Joe2Jim ;
use Filter::Util::Call ;
sub import
{
my($type) = @_ ;
filter_add(bless []) ;
}
sub filter
{
my($self) = @_ ;
my($status) ;
s/Joe/Jim/g
if ($status = filter_read()) > 0 ;
$status ;
}
1 ;
Here is an example of using the filter:
use Joe2Jim ;
print "Where is Joe?\n" ;
And this is what the script above will print:
Where is Jim?
=head2 Example 2: Using the context
The previous example was not particularly useful. To make it more
general purpose we will make use of the context data and allow any
arbitrary I<from> and I<to> strings to be used. This time we will use a
I<closure filter>. To reflect its enhanced role, the filter is called
C<Subst>.
package Subst ;
use Filter::Util::Call ;
use Carp ;
sub import
{
croak("usage: use Subst qw(from to)")
unless @_ == 3 ;
my ($self, $from, $to) = @_ ;
filter_add(
sub
{
my ($status) ;
s/$from/$to/
if ($status = filter_read()) > 0 ;
$status ;
})
}
1 ;
and is used like this:
use Subst qw(Joe Jim) ;
print "Where is Joe?\n" ;
=head2 Example 3: Using the context within the filter
Here is a filter which a variation of the C<Joe2Jim> filter. As well as
substituting all occurrences of C<"Joe"> to C<"Jim"> it keeps a count
of the number of substitutions made in the context object.
Once EOF is detected (C<$status> is zero) the filter will insert an
extra line into the source stream. When this extra line is executed it
will print a count of the number of substitutions actually made.
Note that C<$status> is set to C<1> in this case.
package Count ;
use Filter::Util::Call ;
sub filter
{
my ($self) = @_ ;
my ($status) ;
if (($status = filter_read()) > 0 ) {
s/Joe/Jim/g ;
++ $$self ;
}
elsif ($$self >= 0) { # EOF
$_ = "print q[Made ${$self} substitutions\n]" ;
$status = 1 ;
$$self = -1 ;
}
$status ;
}
sub import
{
my ($self) = @_ ;
my ($count) = 0 ;
filter_add(\$count) ;
}
1 ;
Here is a script which uses it:
use Count ;
print "Hello Joe\n" ;
print "Where is Joe\n" ;
Outputs:
Hello Jim
Where is Jim
Made 2 substitutions
=head2 Example 4: Using filter_del
Another variation on a theme. This time we will modify the C<Subst>
filter to allow a starting and stopping pattern to be specified as well
as the I<from> and I<to> patterns. If you know the I<vi> editor, it is
the equivalent of this command:
:/start/,/stop/s/from/to/
When used as a filter we want to invoke it like this:
use NewSubst qw(start stop from to) ;
Here is the module.
package NewSubst ;
use Filter::Util::Call ;
use Carp ;
sub import
{
my ($self, $start, $stop, $from, $to) = @_ ;
my ($found) = 0 ;
croak("usage: use Subst qw(start stop from to)")
unless @_ == 5 ;
filter_add(
sub
{
my ($status) ;
if (($status = filter_read()) > 0) {
$found = 1
if $found == 0 and /$start/ ;
if ($found) {
s/$from/$to/ ;
filter_del() if /$stop/ ;
}
}
$status ;
} )
}
1 ;
=head1 Filter::Simple
If you intend using the Filter::Call functionality, I would strongly
recommend that you check out Damian Conway's excellent Filter::Simple
module. Damian's module provides a much cleaner interface than
Filter::Util::Call. Although it doesn't allow the fine control that
Filter::Util::Call does, it should be adequate for the majority of
applications. It's available at
http://search.cpan.org/dist/Filter-Simple/
=head1 AUTHOR
Paul Marquess
=head1 DATE
26th January 1996
=head1 LICENSE
Copyright (c) 1995-2011 Paul Marquess. All rights reserved.
Copyright (c) 2011-2014 Reini Urban. All rights reserved.
Copyright (c) 2014-2017 cPanel Inc. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
Filter/Util/perlfilter.pod 0000644 00000053405 15033552504 0011573 0 ustar 00 =head1 NAME
perlfilter - Source Filters
=head1 DESCRIPTION
This article is about a little-known feature of Perl called
I<source filters>. Source filters alter the program text of a module
before Perl sees it, much as a C preprocessor alters the source text of
a C program before the compiler sees it. This article tells you more
about what source filters are, how they work, and how to write your
own.
The original purpose of source filters was to let you encrypt your
program source to prevent casual piracy. This isn't all they can do, as
you'll soon learn. But first, the basics.
=head1 CONCEPTS
Before the Perl interpreter can execute a Perl script, it must first
read it from a file into memory for parsing and compilation. If that
script itself includes other scripts with a C<use> or C<require>
statement, then each of those scripts will have to be read from their
respective files as well.
Now think of each logical connection between the Perl parser and an
individual file as a I<source stream>. A source stream is created when
the Perl parser opens a file, it continues to exist as the source code
is read into memory, and it is destroyed when Perl is finished parsing
the file. If the parser encounters a C<require> or C<use> statement in
a source stream, a new and distinct stream is created just for that
file.
The diagram below represents a single source stream, with the flow of
source from a Perl script file on the left into the Perl parser on the
right. This is how Perl normally operates.
file -------> parser
There are two important points to remember:
=over 5
=item 1.
Although there can be any number of source streams in existence at any
given time, only one will be active.
=item 2.
Every source stream is associated with only one file.
=back
A source filter is a special kind of Perl module that intercepts and
modifies a source stream before it reaches the parser. A source filter
changes our diagram like this:
file ----> filter ----> parser
If that doesn't make much sense, consider the analogy of a command
pipeline. Say you have a shell script stored in the compressed file
I<trial.gz>. The simple pipeline command below runs the script without
needing to create a temporary file to hold the uncompressed file.
gunzip -c trial.gz | sh
In this case, the data flow from the pipeline can be represented as follows:
trial.gz ----> gunzip ----> sh
With source filters, you can store the text of your script compressed and use a source filter to uncompress it for Perl's parser:
compressed gunzip
Perl program ---> source filter ---> parser
=head1 USING FILTERS
So how do you use a source filter in a Perl script? Above, I said that
a source filter is just a special kind of module. Like all Perl
modules, a source filter is invoked with a use statement.
Say you want to pass your Perl source through the C preprocessor before
execution. As it happens, the source filters distribution comes with a C
preprocessor filter module called Filter::cpp.
Below is an example program, C<cpp_test>, which makes use of this filter.
Line numbers have been added to allow specific lines to be referenced
easily.
1: use Filter::cpp;
2: #define TRUE 1
3: $a = TRUE;
4: print "a = $a\n";
When you execute this script, Perl creates a source stream for the
file. Before the parser processes any of the lines from the file, the
source stream looks like this:
cpp_test ---------> parser
Line 1, C<use Filter::cpp>, includes and installs the C<cpp> filter
module. All source filters work this way. The use statement is compiled
and executed at compile time, before any more of the file is read, and
it attaches the cpp filter to the source stream behind the scenes. Now
the data flow looks like this:
cpp_test ----> cpp filter ----> parser
As the parser reads the second and subsequent lines from the source
stream, it feeds those lines through the C<cpp> source filter before
processing them. The C<cpp> filter simply passes each line through the
real C preprocessor. The output from the C preprocessor is then
inserted back into the source stream by the filter.
.-> cpp --.
| |
| |
| <-'
cpp_test ----> cpp filter ----> parser
The parser then sees the following code:
use Filter::cpp;
$a = 1;
print "a = $a\n";
Let's consider what happens when the filtered code includes another
module with use:
1: use Filter::cpp;
2: #define TRUE 1
3: use Fred;
4: $a = TRUE;
5: print "a = $a\n";
The C<cpp> filter does not apply to the text of the Fred module, only
to the text of the file that used it (C<cpp_test>). Although the use
statement on line 3 will pass through the cpp filter, the module that
gets included (C<Fred>) will not. The source streams look like this
after line 3 has been parsed and before line 4 is parsed:
cpp_test ---> cpp filter ---> parser (INACTIVE)
Fred.pm ----> parser
As you can see, a new stream has been created for reading the source
from C<Fred.pm>. This stream will remain active until all of C<Fred.pm>
has been parsed. The source stream for C<cpp_test> will still exist,
but is inactive. Once the parser has finished reading Fred.pm, the
source stream associated with it will be destroyed. The source stream
for C<cpp_test> then becomes active again and the parser reads line 4
and subsequent lines from C<cpp_test>.
You can use more than one source filter on a single file. Similarly,
you can reuse the same filter in as many files as you like.
For example, if you have a uuencoded and compressed source file, it is
possible to stack a uudecode filter and an uncompression filter like
this:
use Filter::uudecode; use Filter::uncompress;
M'XL(".H<US4''V9I;F%L')Q;>7/;1I;_>_I3=&E=%:F*I"T?22Q/
M6]9*<IQCO*XFT"0[PL%%'Y+IG?WN^ZYN-$'J.[.JE$,20/?K=_[>
...
Once the first line has been processed, the flow will look like this:
file ---> uudecode ---> uncompress ---> parser
filter filter
Data flows through filters in the same order they appear in the source
file. The uudecode filter appeared before the uncompress filter, so the
source file will be uudecoded before it's uncompressed.
=head1 WRITING A SOURCE FILTER
There are three ways to write your own source filter. You can write it
in C, use an external program as a filter, or write the filter in Perl.
I won't cover the first two in any great detail, so I'll get them out
of the way first. Writing the filter in Perl is most convenient, so
I'll devote the most space to it.
=head1 WRITING A SOURCE FILTER IN C
The first of the three available techniques is to write the filter
completely in C. The external module you create interfaces directly
with the source filter hooks provided by Perl.
The advantage of this technique is that you have complete control over
the implementation of your filter. The big disadvantage is the
increased complexity required to write the filter - not only do you
need to understand the source filter hooks, but you also need a
reasonable knowledge of Perl guts. One of the few times it is worth
going to this trouble is when writing a source scrambler. The
C<decrypt> filter (which unscrambles the source before Perl parses it)
included with the source filter distribution is an example of a C
source filter (see Decryption Filters, below).
=over 5
=item B<Decryption Filters>
All decryption filters work on the principle of "security through
obscurity." Regardless of how well you write a decryption filter and
how strong your encryption algorithm is, anyone determined enough can
retrieve the original source code. The reason is quite simple - once
the decryption filter has decrypted the source back to its original
form, fragments of it will be stored in the computer's memory as Perl
parses it. The source might only be in memory for a short period of
time, but anyone possessing a debugger, skill, and lots of patience can
eventually reconstruct your program.
That said, there are a number of steps that can be taken to make life
difficult for the potential cracker. The most important: Write your
decryption filter in C and statically link the decryption module into
the Perl binary. For further tips to make life difficult for the
potential cracker, see the file I<decrypt.pm> in the source filters
distribution.
=back
=head1 CREATING A SOURCE FILTER AS A SEPARATE EXECUTABLE
An alternative to writing the filter in C is to create a separate
executable in the language of your choice. The separate executable
reads from standard input, does whatever processing is necessary, and
writes the filtered data to standard output. C<Filter::cpp> is an
example of a source filter implemented as a separate executable - the
executable is the C preprocessor bundled with your C compiler.
The source filter distribution includes two modules that simplify this
task: C<Filter::exec> and C<Filter::sh>. Both allow you to run any
external executable. Both use a coprocess to control the flow of data
into and out of the external executable. (For details on coprocesses,
see Stephens, W.R., "Advanced Programming in the UNIX Environment."
Addison-Wesley, ISBN 0-210-56317-7, pages 441-445.) The difference
between them is that C<Filter::exec> spawns the external command
directly, while C<Filter::sh> spawns a shell to execute the external
command. (Unix uses the Bourne shell; NT uses the cmd shell.) Spawning
a shell allows you to make use of the shell metacharacters and
redirection facilities.
Here is an example script that uses C<Filter::sh>:
use Filter::sh 'tr XYZ PQR';
$a = 1;
print "XYZ a = $a\n";
The output you'll get when the script is executed:
PQR a = 1
Writing a source filter as a separate executable works fine, but a
small performance penalty is incurred. For example, if you execute the
small example above, a separate subprocess will be created to run the
Unix C<tr> command. Each use of the filter requires its own subprocess.
If creating subprocesses is expensive on your system, you might want to
consider one of the other options for creating source filters.
=head1 WRITING A SOURCE FILTER IN PERL
The easiest and most portable option available for creating your own
source filter is to write it completely in Perl. To distinguish this
from the previous two techniques, I'll call it a Perl source filter.
To help understand how to write a Perl source filter we need an example
to study. Here is a complete source filter that performs rot13
decoding. (Rot13 is a very simple encryption scheme used in Usenet
postings to hide the contents of offensive posts. It moves every letter
forward thirteen places, so that A becomes N, B becomes O, and Z
becomes M.)
package Rot13;
use Filter::Util::Call;
sub import {
my ($type) = @_;
my ($ref) = [];
filter_add(bless $ref);
}
sub filter {
my ($self) = @_;
my ($status);
tr/n-za-mN-ZA-M/a-zA-Z/
if ($status = filter_read()) > 0;
$status;
}
1;
All Perl source filters are implemented as Perl classes and have the
same basic structure as the example above.
First, we include the C<Filter::Util::Call> module, which exports a
number of functions into your filter's namespace. The filter shown
above uses two of these functions, C<filter_add()> and
C<filter_read()>.
Next, we create the filter object and associate it with the source
stream by defining the C<import> function. If you know Perl well
enough, you know that C<import> is called automatically every time a
module is included with a use statement. This makes C<import> the ideal
place to both create and install a filter object.
In the example filter, the object (C<$ref>) is blessed just like any
other Perl object. Our example uses an anonymous array, but this isn't
a requirement. Because this example doesn't need to store any context
information, we could have used a scalar or hash reference just as
well. The next section demonstrates context data.
The association between the filter object and the source stream is made
with the C<filter_add()> function. This takes a filter object as a
parameter (C<$ref> in this case) and installs it in the source stream.
Finally, there is the code that actually does the filtering. For this
type of Perl source filter, all the filtering is done in a method
called C<filter()>. (It is also possible to write a Perl source filter
using a closure. See the C<Filter::Util::Call> manual page for more
details.) It's called every time the Perl parser needs another line of
source to process. The C<filter()> method, in turn, reads lines from
the source stream using the C<filter_read()> function.
If a line was available from the source stream, C<filter_read()>
returns a status value greater than zero and appends the line to C<$_>.
A status value of zero indicates end-of-file, less than zero means an
error. The filter function itself is expected to return its status in
the same way, and put the filtered line it wants written to the source
stream in C<$_>. The use of C<$_> accounts for the brevity of most Perl
source filters.
In order to make use of the rot13 filter we need some way of encoding
the source file in rot13 format. The script below, C<mkrot13>, does
just that.
die "usage mkrot13 filename\n" unless @ARGV;
my $in = $ARGV[0];
my $out = "$in.tmp";
open(IN, "<$in") or die "Cannot open file $in: $!\n";
open(OUT, ">$out") or die "Cannot open file $out: $!\n";
print OUT "use Rot13;\n";
while (<IN>) {
tr/a-zA-Z/n-za-mN-ZA-M/;
print OUT;
}
close IN;
close OUT;
unlink $in;
rename $out, $in;
If we encrypt this with C<mkrot13>:
print " hello fred \n";
the result will be this:
use Rot13;
cevag "uryyb serq\a";
Running it produces this output:
hello fred
=head1 USING CONTEXT: THE DEBUG FILTER
The rot13 example was a trivial example. Here's another demonstration
that shows off a few more features.
Say you wanted to include a lot of debugging code in your Perl script
during development, but you didn't want it available in the released
product. Source filters offer a solution. In order to keep the example
simple, let's say you wanted the debugging output to be controlled by
an environment variable, C<DEBUG>. Debugging code is enabled if the
variable exists, otherwise it is disabled.
Two special marker lines will bracket debugging code, like this:
## DEBUG_BEGIN
if ($year > 1999) {
warn "Debug: millennium bug in year $year\n";
}
## DEBUG_END
The filter ensures that Perl parses the code between the <DEBUG_BEGIN>
and C<DEBUG_END> markers only when the C<DEBUG> environment variable
exists. That means that when C<DEBUG> does exist, the code above
should be passed through the filter unchanged. The marker lines can
also be passed through as-is, because the Perl parser will see them as
comment lines. When C<DEBUG> isn't set, we need a way to disable the
debug code. A simple way to achieve that is to convert the lines
between the two markers into comments:
## DEBUG_BEGIN
#if ($year > 1999) {
# warn "Debug: millennium bug in year $year\n";
#}
## DEBUG_END
Here is the complete Debug filter:
package Debug;
use strict;
use warnings;
use Filter::Util::Call;
use constant TRUE => 1;
use constant FALSE => 0;
sub import {
my ($type) = @_;
my (%context) = (
Enabled => defined $ENV{DEBUG},
InTraceBlock => FALSE,
Filename => (caller)[1],
LineNo => 0,
LastBegin => 0,
);
filter_add(bless \%context);
}
sub Die {
my ($self) = shift;
my ($message) = shift;
my ($line_no) = shift || $self->{LastBegin};
die "$message at $self->{Filename} line $line_no.\n"
}
sub filter {
my ($self) = @_;
my ($status);
$status = filter_read();
++ $self->{LineNo};
# deal with EOF/error first
if ($status <= 0) {
$self->Die("DEBUG_BEGIN has no DEBUG_END")
if $self->{InTraceBlock};
return $status;
}
if ($self->{InTraceBlock}) {
if (/^\s*##\s*DEBUG_BEGIN/ ) {
$self->Die("Nested DEBUG_BEGIN", $self->{LineNo})
} elsif (/^\s*##\s*DEBUG_END/) {
$self->{InTraceBlock} = FALSE;
}
# comment out the debug lines when the filter is disabled
s/^/#/ if ! $self->{Enabled};
} elsif ( /^\s*##\s*DEBUG_BEGIN/ ) {
$self->{InTraceBlock} = TRUE;
$self->{LastBegin} = $self->{LineNo};
} elsif ( /^\s*##\s*DEBUG_END/ ) {
$self->Die("DEBUG_END has no DEBUG_BEGIN", $self->{LineNo});
}
return $status;
}
1;
The big difference between this filter and the previous example is the
use of context data in the filter object. The filter object is based on
a hash reference, and is used to keep various pieces of context
information between calls to the filter function. All but two of the
hash fields are used for error reporting. The first of those two,
Enabled, is used by the filter to determine whether the debugging code
should be given to the Perl parser. The second, InTraceBlock, is true
when the filter has encountered a C<DEBUG_BEGIN> line, but has not yet
encountered the following C<DEBUG_END> line.
If you ignore all the error checking that most of the code does, the
essence of the filter is as follows:
sub filter {
my ($self) = @_;
my ($status);
$status = filter_read();
# deal with EOF/error first
return $status if $status <= 0;
if ($self->{InTraceBlock}) {
if (/^\s*##\s*DEBUG_END/) {
$self->{InTraceBlock} = FALSE
}
# comment out debug lines when the filter is disabled
s/^/#/ if ! $self->{Enabled};
} elsif ( /^\s*##\s*DEBUG_BEGIN/ ) {
$self->{InTraceBlock} = TRUE;
}
return $status;
}
Be warned: just as the C-preprocessor doesn't know C, the Debug filter
doesn't know Perl. It can be fooled quite easily:
print <<EOM;
##DEBUG_BEGIN
EOM
Such things aside, you can see that a lot can be achieved with a modest
amount of code.
=head1 CONCLUSION
You now have better understanding of what a source filter is, and you
might even have a possible use for them. If you feel like playing with
source filters but need a bit of inspiration, here are some extra
features you could add to the Debug filter.
First, an easy one. Rather than having debugging code that is
all-or-nothing, it would be much more useful to be able to control
which specific blocks of debugging code get included. Try extending the
syntax for debug blocks to allow each to be identified. The contents of
the C<DEBUG> environment variable can then be used to control which
blocks get included.
Once you can identify individual blocks, try allowing them to be
nested. That isn't difficult either.
Here is an interesting idea that doesn't involve the Debug filter.
Currently Perl subroutines have fairly limited support for formal
parameter lists. You can specify the number of parameters and their
type, but you still have to manually take them out of the C<@_> array
yourself. Write a source filter that allows you to have a named
parameter list. Such a filter would turn this:
sub MySub ($first, $second, @rest) { ... }
into this:
sub MySub($$@) {
my ($first) = shift;
my ($second) = shift;
my (@rest) = @_;
...
}
Finally, if you feel like a real challenge, have a go at writing a
full-blown Perl macro preprocessor as a source filter. Borrow the
useful features from the C preprocessor and any other macro processors
you know. The tricky bit will be choosing how much knowledge of Perl's
syntax you want your filter to have.
=head1 LIMITATIONS
Source filters only work on the string level, thus are highly limited
in its ability to change source code on the fly. It cannot detect
comments, quoted strings, heredocs, it is no replacement for a real
parser.
The only stable usage for source filters are encryption, compression,
or the byteloader, to translate binary code back to source code.
See for example the limitations in L<Switch>, which uses source filters,
and thus is does not work inside a string eval, the presence of
regexes with embedded newlines that are specified with raw C</.../>
delimiters and don't have a modifier C<//x> are indistinguishable from
code chunks beginning with the division operator C</>. As a workaround
you must use C<m/.../> or C<m?...?> for such patterns. Also, the presence of
regexes specified with raw C<?...?> delimiters may cause mysterious
errors. The workaround is to use C<m?...?> instead. See
L<http://search.cpan.org/perldoc?Switch#LIMITATIONS>
Currently the content of the C<__DATA__> block is not filtered.
Currently internal buffer lengths are limited to 32-bit only.
=head1 THINGS TO LOOK OUT FOR
=over 5
=item Some Filters Clobber the C<DATA> Handle
Some source filters use the C<DATA> handle to read the calling program.
When using these source filters you cannot rely on this handle, nor expect
any particular kind of behavior when operating on it. Filters based on
Filter::Util::Call (and therefore Filter::Simple) do not alter the C<DATA>
filehandle, but on the other hand totally ignore the text after C<__DATA__>.
=back
=head1 REQUIREMENTS
The Source Filters distribution is available on CPAN, in
CPAN/modules/by-module/Filter
Starting from Perl 5.8 Filter::Util::Call (the core part of the
Source Filters distribution) is part of the standard Perl distribution.
Also included is a friendlier interface called Filter::Simple, by
Damian Conway.
=head1 AUTHOR
Paul Marquess E<lt>Paul.Marquess@btinternet.comE<gt>
Reini Urban E<lt>rurban@cpan.orgE<gt>
=head1 Copyrights
The first version of this article originally appeared in The Perl
Journal #11, and is copyright 1998 The Perl Journal. It appears
courtesy of Jon Orwant and The Perl Journal. This document may be
distributed under the same terms as Perl itself.
Filter/exec.pm 0000644 00000002350 15033552504 0007255 0 ustar 00 package Filter::exec ;
use Filter::Util::Exec ;
use strict ;
use warnings ;
our $VERSION = "1.58" ;
sub import
{
my($self, @args) = @_ ;
unless (@args) {
require Carp;
Carp::croak("Usage: use Filter::exec 'command'");
}
Filter::Util::Exec::filter_add($self, @args) ;
}
1 ;
__END__
=head1 NAME
Filter::exec - exec source filter
=head1 SYNOPSIS
use Filter::exec qw(command parameters) ;
=head1 DESCRIPTION
This filter pipes the current source file through the program which
corresponds to the C<command> parameter.
As with all source filters its scope is limited to the current source
file only. Every file you want to be processed by the filter must have a
use Filter::exec qw(command ) ;
near the top.
Here is an example script which uses the filter:
use Filter::exec qw(tr XYZ PQR) ;
$a = 1 ;
print "XYZ a = $a\n" ;
And here is what it will output:
PQR = 1
=head1 WARNING
You should be I<very> careful when using this filter. Because of the
way the filter is implemented it is possible to end up with deadlock.
Be especially careful when stacking multiple instances of the filter in
a single source file.
=head1 AUTHOR
Paul Marquess
=head1 DATE
11th December 1995.
=cut
Filter/tee.pm 0000644 00000001431 15033552504 0007105 0 ustar 00 package Filter::tee ;
require 5.006 ;
require XSLoader;
our $VERSION = "1.58" ;
XSLoader::load('Filter::tee');
1;
__END__
=head1 NAME
Filter::tee - tee source filter
=head1 SYNOPSIS
use Filter::tee 'filename' ;
use Filter::tee '>filename' ;
use Filter::tee '>>filename' ;
=head1 DESCRIPTION
This filter copies all text from the line after the C<use> in the
current source file to the file specified by the parameter
C<filename>.
By default and when the filename is prefixed with a '>' the output file
will be emptied first if it already exists.
If the output filename is prefixed with '>>' it will be opened for
appending.
This filter is useful as a debugging aid when developing other source
filters.
=head1 AUTHOR
Paul Marquess
=head1 DATE
20th June 1995.
=cut
Socket6.pm 0000644 00000023067 15033552504 0006432 0 ustar 00 # Copyright (C) 2000-2016 Hajimu UMEMOTO <ume@mahoroba.org>.
# All rights reserved.
#
# This module is based on perl5.005_55-v6-19990721 written by KAME
# Project.
#
# Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# $Id: Socket6.pm 683 2016-07-11 05:45:26Z ume $
package Socket6;
use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
$VERSION = "0.28";
=head1 NAME
Socket6 - IPv6 related part of the C socket.h defines and structure manipulators
=head1 SYNOPSIS
use Socket;
use Socket6;
@res = getaddrinfo('hishost.com', 'daytime', AF_UNSPEC, SOCK_STREAM);
$family = -1;
while (scalar(@res) >= 5) {
($family, $socktype, $proto, $saddr, $canonname, @res) = @res;
($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);
print STDERR "Trying to connect to $host port $port...\n";
socket(Socket_Handle, $family, $socktype, $proto) || next;
connect(Socket_Handle, $saddr) && last;
close(Socket_Handle);
$family = -1;
}
if ($family != -1) {
print STDERR "connected to $host port $port\n";
} else {
die "connect attempt failed\n";
}
=head1 DESCRIPTION
This module provides glue routines to the various IPv6 functions.
If you use the Socket6 module,
be sure to specify "use Socket" as well as "use Socket6".
Functions supplied are:
=over
=item inet_pton FAMILY, TEXT_ADDRESS
This function takes an IP address in presentation (or string) format
and converts it into numeric (or binary) format.
The type of IP address conversion (IPv4 versus IPv6) is controlled
by the FAMILY argument.
=item inet_ntop FAMILY, BINARY_ADDRESS
This function takes an IP address in numeric (or binary) format
and converts it into presentation (or string) format
The type of IP address conversion (IPv4 versus IPv6) is controlled
by the FAMILY argument.
=item pack_sockaddr_in6 PORT, ADDR
This function takes two arguments: a port number, and a 16-octet
IPv6 address structure (as returned by inet_pton()).
It returns the sockaddr_in6 structure with these arguments packed
into their correct fields, as well as the AF_INET6 family.
The other fields are not set and their values should not be relied upon.
=item pack_sockaddr_in6_all PORT, FLOWINFO, ADDR, SCOPEID
This function takes four arguments: a port number, a 16-octet
IPv6 address structure (as returned by inet_pton), any
special flow information, and any specific scope information.
It returns a complete sockaddr_in6 structure with these arguments packed
into their correct fields, as well as the AF_INET6 family.
=item unpack_sockaddr_in6 NAME
This function takes a sockaddr_in6 structure (as returned by
pack_sockaddr_in6()) and returns a list of two elements:
the port number and the 16-octet IP address.
This function will croak if it determines it has not been
passed an IPv6 structure.
=item unpack_sockaddr_in6_all NAME
This function takes a sockaddr_in6 structure (as returned by
pack_sockaddr_in6()) and returns a list of four elements:
the port number, the flow information, the 16-octet IP address,
and the scope information.
This function will croak if it determines it has not been
passed an IPv6 structure.
=item gethostbyname2 HOSTNAME, FAMILY
=item getaddrinfo NODENAME, SERVICENAME, [FAMILY, SOCKTYPE, PROTOCOL, FLAGS]
This function converts node names to addresses and service names
to port numbers.
If the NODENAME argument is not a false value,
then a nodename to address lookup is performed;
otherwise a service name to port number lookup is performed.
At least one of NODENAME and SERVICENAME must have a true value.
If the lookup is successful, a list consisting of multiples of
five elements is returned.
Each group of five elements consists of the address family,
socket type, protocol, 16-octet IP address, and the canonical
name (undef if the node name passed is already the canonical name).
The arguments FAMILY, SOCKTYPE, PROTOCOL, and FLAGS are all optional.
This function will croak if it determines it has not been
passed an IPv6 structure.
If the lookup is unsuccessful, the function returns a single scalar.
This will contain the string version of that error in string context,
and the numeric value in numeric context.
=item getnameinfo NAME, [FLAGS]
This function takes a socket address structure. If successful, it returns
two strings containing the node name and service name.
The optional FLAGS argument controls what kind of lookup is performed.
If the lookup is unsuccessful, the function returns a single scalar.
This will contain the string version of that error in string context,
and the numeric value in numeric context.
=item getipnodebyname HOST, [FAMILY, FLAGS]
This function takes either a node name or an IP address string
and performs a lookup on that name (or conversion of the string).
It returns a list of five elements: the canonical host name,
the address family, the length in octets of the IP addresses
returned, a reference to a list of IP address structures, and
a reference to a list of aliases for the host name.
The arguments FAMILY and FLAGS are optional.
Note: This function does not handle IPv6 scope identifiers,
and should be used with care.
And, this function was deprecated in RFC3493.
The getnameinfo function should be used instead.
=item getipnodebyaddr FAMILY, ADDRESS
This function takes an IP address family and an IP address structure
and performs a reverse lookup on that address.
It returns a list of five elements: the canonical host name,
the address family, the length in octets of the IP addresses
returned, a reference to a list of IP address structures, and
a reference to a list of aliases for the host name.
Note: This function does not handle IPv6 scope identifiers,
and should be used with care.
And, this function was deprecated in RFC3493.
The getaddrinfo function should be used instead.
=item gai_strerror ERROR_NUMBER
This function returns a string corresponding to the error number
passed in as an argument.
=item in6addr_any
This function returns the 16-octet wildcard address.
=item in6addr_loopback
This function returns the 16-octet loopback address.
=back
=cut
use Carp;
use base qw(Exporter DynaLoader);
@EXPORT = qw(
inet_pton inet_ntop pack_sockaddr_in6 pack_sockaddr_in6_all
unpack_sockaddr_in6 unpack_sockaddr_in6_all sockaddr_in6
gethostbyname2 getaddrinfo getnameinfo
in6addr_any in6addr_loopback
gai_strerror getipnodebyname getipnodebyaddr
AI_ADDRCONFIG
AI_ALL
AI_CANONNAME
AI_NUMERICHOST
AI_NUMERICSERV
AI_DEFAULT
AI_MASK
AI_PASSIVE
AI_V4MAPPED
AI_V4MAPPED_CFG
EAI_ADDRFAMILY
EAI_AGAIN
EAI_BADFLAGS
EAI_FAIL
EAI_FAMILY
EAI_MEMORY
EAI_NODATA
EAI_NONAME
EAI_SERVICE
EAI_SOCKTYPE
EAI_SYSTEM
EAI_BADHINTS
EAI_PROTOCOL
IP_AUTH_TRANS_LEVEL
IP_AUTH_NETWORK_LEVEL
IP_ESP_TRANS_LEVEL
IP_ESP_NETWORK_LEVEL
IPPROTO_IP
IPPROTO_IPV6
IPSEC_LEVEL_AVAIL
IPSEC_LEVEL_BYPASS
IPSEC_LEVEL_DEFAULT
IPSEC_LEVEL_NONE
IPSEC_LEVEL_REQUIRE
IPSEC_LEVEL_UNIQUE
IPSEC_LEVEL_USE
IPV6_AUTH_TRANS_LEVEL
IPV6_AUTH_NETWORK_LEVEL
IPV6_ESP_NETWORK_LEVEL
IPV6_ESP_TRANS_LEVEL
NI_NOFQDN
NI_NUMERICHOST
NI_NAMEREQD
NI_NUMERICSERV
NI_DGRAM
NI_WITHSCOPEID
);
push @EXPORT, qw(AF_INET6) unless defined eval {Socket::AF_INET6()};
push @EXPORT, qw(PF_INET6) unless defined eval {Socket::PF_INET6()};
@EXPORT_OK = qw(AF_INET6 PF_INET6);
%EXPORT_TAGS = (
all => [@EXPORT],
);
sub sockaddr_in6 {
if (wantarray) {
croak "usage: (port,iaddr) = sockaddr_in6(sin_sv)" unless @_ == 1;
unpack_sockaddr_in6(@_);
} else {
croak "usage: sin_sv = sockaddr_in6(port,iaddr))" unless @_ == 2;
pack_sockaddr_in6(@_);
}
}
sub AUTOLOAD {
my($constname);
($constname = $AUTOLOAD) =~ s/.*:://o;
$! = 0;
my $val = constant($constname, @_ ? $_[0] : 0);
if ($! != 0) {
croak "Your vendor has not defined Socket macro $constname, used";
}
eval "sub $AUTOLOAD { $val }";
goto &$AUTOLOAD;
}
bootstrap Socket6 $VERSION;
1;
DBI/ProfileDumper/Apache.pm 0000644 00000014631 15033552504 0011445 0 ustar 00 package DBI::ProfileDumper::Apache;
use strict;
=head1 NAME
DBI::ProfileDumper::Apache - capture DBI profiling data from Apache/mod_perl
=head1 SYNOPSIS
Add this line to your F<httpd.conf>:
PerlSetEnv DBI_PROFILE 2/DBI::ProfileDumper::Apache
(If you're using mod_perl2, see L</When using mod_perl2> for some additional notes.)
Then restart your server. Access the code you wish to test using a
web browser, then shutdown your server. This will create a set of
F<dbi.prof.*> files in your Apache log directory.
Get a profiling report with L<dbiprof|dbiprof>:
dbiprof /path/to/your/apache/logs/dbi.prof.*
When you're ready to perform another profiling run, delete the old files and start again.
=head1 DESCRIPTION
This module interfaces DBI::ProfileDumper to Apache/mod_perl. Using
this module you can collect profiling data from mod_perl applications.
It works by creating a DBI::ProfileDumper data file for each Apache
process. These files are created in your Apache log directory. You
can then use the dbiprof utility to analyze the profile files.
=head1 USAGE
=head2 LOADING THE MODULE
The easiest way to use this module is just to set the DBI_PROFILE
environment variable in your F<httpd.conf>:
PerlSetEnv DBI_PROFILE 2/DBI::ProfileDumper::Apache
The DBI will look after loading and using the module when the first DBI handle
is created.
It's also possible to use this module by setting the Profile attribute
of any DBI handle:
$dbh->{Profile} = "2/DBI::ProfileDumper::Apache";
See L<DBI::ProfileDumper> for more possibilities, and L<DBI::Profile> for full
details of the DBI's profiling mechanism.
=head2 WRITING PROFILE DATA
The profile data files will be written to your Apache log directory by default.
The user that the httpd processes run as will need write access to the
directory. So, for example, if you're running the child httpds as user 'nobody'
and using chronolog to write to the logs directory, then you'll need to change
the default.
You can change the destination directory either by specifying a C<Dir> value
when creating the profile (like C<File> in the L<DBI::ProfileDumper> docs),
or you can use the C<DBI_PROFILE_APACHE_LOG_DIR> env var to change that. For example:
PerlSetEnv DBI_PROFILE_APACHE_LOG_DIR /server_root/logs
=head3 When using mod_perl2
Under mod_perl2 you'll need to either set the C<DBI_PROFILE_APACHE_LOG_DIR> env var,
or enable the mod_perl2 C<GlobalRequest> option, like this:
PerlOptions +GlobalRequest
to the global config section you're about test with DBI::ProfileDumper::Apache.
If you don't do one of those then you'll see messages in your error_log similar to:
DBI::ProfileDumper::Apache on_destroy failed: Global $r object is not available. Set:
PerlOptions +GlobalRequest in httpd.conf at ..../DBI/ProfileDumper/Apache.pm line 144
=head3 Naming the files
The default file name is inherited from L<DBI::ProfileDumper> via the
filename() method, but DBI::ProfileDumper::Apache appends the parent pid and
the current pid, separated by dots, to that name.
=head3 Silencing the log
By default a message is written to STDERR (i.e., the apache error_log file)
when flush_to_disk() is called (either explicitly, or implicitly via DESTROY).
That's usually very useful. If you don't want the log message you can silence
it by setting the C<Quiet> attribute true.
PerlSetEnv DBI_PROFILE 2/DBI::ProfileDumper::Apache/Quiet:1
$dbh->{Profile} = "!Statement/DBI::ProfileDumper/Quiet:1";
$dbh->{Profile} = DBI::ProfileDumper->new(
Path => [ '!Statement' ]
Quiet => 1
);
=head2 GATHERING PROFILE DATA
Once you have the module loaded, use your application as you normally
would. Stop the webserver when your tests are complete. Profile data
files will be produced when Apache exits and you'll see something like
this in your error_log:
DBI::ProfileDumper::Apache writing to /usr/local/apache/logs/dbi.prof.2604.2619
Now you can use dbiprof to examine the data:
dbiprof /usr/local/apache/logs/dbi.prof.2604.*
By passing dbiprof a list of all generated files, dbiprof will
automatically merge them into one result set. You can also pass
dbiprof sorting and querying options, see L<dbiprof> for details.
=head2 CLEANING UP
Once you've made some code changes, you're ready to start again.
First, delete the old profile data files:
rm /usr/local/apache/logs/dbi.prof.*
Then restart your server and get back to work.
=head1 OTHER ISSUES
=head2 Memory usage
DBI::Profile can use a lot of memory for very active applications because it
collects profiling data in memory for each distinct query run.
Calling C<flush_to_disk()> will write the current data to disk and free the
memory it's using. For example:
$dbh->{Profile}->flush_to_disk() if $dbh->{Profile};
or, rather than flush every time, you could flush less often:
$dbh->{Profile}->flush_to_disk()
if $dbh->{Profile} and ++$i % 100;
=head1 AUTHOR
Sam Tregar <sam@tregar.com>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2002 Sam Tregar
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl 5 itself.
=cut
our $VERSION = "2.014121";
our @ISA = qw(DBI::ProfileDumper);
use DBI::ProfileDumper;
use File::Spec;
my $initial_pid = $$;
use constant MP2 => ($ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} == 2) ? 1 : 0;
my $server_root_dir;
if (MP2) {
require Apache2::ServerUtil;
$server_root_dir = Apache2::ServerUtil::server_root();
}
else {
require Apache;
$server_root_dir = eval { Apache->server_root_relative('') } || "/tmp";
}
sub _dirname {
my $self = shift;
return $self->{Dir} ||= $ENV{DBI_PROFILE_APACHE_LOG_DIR}
|| File::Spec->catdir($server_root_dir, "logs");
}
sub filename {
my $self = shift;
my $filename = $self->SUPER::filename(@_);
return $filename if not $filename; # not set yet
# to be able to identify groups of profile files from the same set of
# apache processes, we include the parent pid in the file name
# as well as the pid.
my $group_pid = ($$ eq $initial_pid) ? $$ : getppid();
$filename .= ".$group_pid.$$";
return $filename if File::Spec->file_name_is_absolute($filename);
return File::Spec->catfile($self->_dirname, $filename);
}
sub flush_to_disk {
my $self = shift;
my $filename = $self->SUPER::flush_to_disk(@_);
print STDERR ref($self)." pid$$ written to $filename\n"
if $filename && not $self->{Quiet};
return $filename;
}
1;
DBI/DBD/SqlEngine.pm 0000644 00000177107 15033552504 0007775 0 ustar 00 # -*- perl -*-
#
# DBI::DBD::SqlEngine - A base class for implementing DBI drivers that
# have not an own SQL engine
#
# This module is currently maintained by
#
# H.Merijn Brand & Jens Rehsack
#
# The original author is Jochen Wiedmann.
#
# Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack
# Copyright (C) 2004 by Jeff Zucker
# Copyright (C) 1998 by Jochen Wiedmann
#
# All rights reserved.
#
# You may distribute this module under the terms of either the GNU
# General Public License or the Artistic License, as specified in
# the Perl README file.
require 5.008;
use strict;
use DBI ();
require DBI::SQL::Nano;
package DBI::DBD::SqlEngine;
use strict;
use Carp;
use vars qw( @ISA $VERSION $drh %methods_installed);
$VERSION = "0.06";
$drh = undef; # holds driver handle(s) once initialized
DBI->setup_driver("DBI::DBD::SqlEngine"); # only needed once but harmless to repeat
my %accessors = (
versions => "get_driver_versions",
new_meta => "new_sql_engine_meta",
get_meta => "get_sql_engine_meta",
set_meta => "set_sql_engine_meta",
clear_meta => "clear_sql_engine_meta",
);
sub driver ($;$)
{
my ( $class, $attr ) = @_;
# Drivers typically use a singleton object for the $drh
# We use a hash here to have one singleton per subclass.
# (Otherwise DBD::CSV and DBD::DBM, for example, would
# share the same driver object which would cause problems.)
# An alternative would be to not cache the $drh here at all
# and require that subclasses do that. Subclasses should do
# their own caching, so caching here just provides extra safety.
$drh->{$class} and return $drh->{$class};
$attr ||= {};
{
no strict "refs";
unless ( $attr->{Attribution} )
{
$class eq "DBI::DBD::SqlEngine"
and $attr->{Attribution} = "$class by Jens Rehsack";
$attr->{Attribution} ||= ${ $class . "::ATTRIBUTION" }
|| "oops the author of $class forgot to define this";
}
$attr->{Version} ||= ${ $class . "::VERSION" };
$attr->{Name} or ( $attr->{Name} = $class ) =~ s/^DBD\:\://;
}
$drh->{$class} = DBI::_new_drh( $class . "::dr", $attr );
$drh->{$class}->STORE( ShowErrorStatement => 1 );
my $prefix = DBI->driver_prefix($class);
if ($prefix)
{
my $dbclass = $class . "::db";
while ( my ( $accessor, $funcname ) = each %accessors )
{
my $method = $prefix . $accessor;
$dbclass->can($method) and next;
my $inject = sprintf <<'EOI', $dbclass, $method, $dbclass, $funcname;
sub %s::%s
{
my $func = %s->can (q{%s});
goto &$func;
}
EOI
eval $inject;
$dbclass->install_method($method);
}
}
else
{
warn "Using DBI::DBD::SqlEngine with unregistered driver $class.\n"
. "Reading documentation how to prevent is strongly recommended.\n";
}
# XXX inject DBD::XXX::Statement unless exists
my $stclass = $class . "::st";
$stclass->install_method("sql_get_colnames") unless ( $methods_installed{__PACKAGE__}++ );
return $drh->{$class};
} # driver
sub CLONE
{
undef $drh;
} # CLONE
# ====== DRIVER ================================================================
package DBI::DBD::SqlEngine::dr;
use strict;
use warnings;
use vars qw(@ISA $imp_data_size);
use Carp qw/carp/;
$imp_data_size = 0;
sub connect ($$;$$$)
{
my ( $drh, $dbname, $user, $auth, $attr ) = @_;
# create a 'blank' dbh
my $dbh = DBI::_new_dbh(
$drh,
{
Name => $dbname,
USER => $user,
CURRENT_USER => $user,
}
);
if ($dbh)
{
# must be done first, because setting flags implicitly calls $dbdname::db->STORE
$dbh->func( 0, "init_default_attributes" );
my $two_phased_init;
defined $dbh->{sql_init_phase} and $two_phased_init = ++$dbh->{sql_init_phase};
my %second_phase_attrs;
my @func_inits;
# this must be done to allow DBI.pm reblessing got handle after successful connecting
exists $attr->{RootClass} and $second_phase_attrs{RootClass} = delete $attr->{RootClass};
my ( $var, $val );
while ( length $dbname )
{
if ( $dbname =~ s/^((?:[^\\;]|\\.)*?);//s )
{
$var = $1;
}
else
{
$var = $dbname;
$dbname = "";
}
if ( $var =~ m/^(.+?)=(.*)/s )
{
$var = $1;
( $val = $2 ) =~ s/\\(.)/$1/g;
exists $attr->{$var}
and carp("$var is given in DSN *and* \$attr during DBI->connect()")
if ($^W);
exists $attr->{$var} or $attr->{$var} = $val;
}
elsif ( $var =~ m/^(.+?)=>(.*)/s )
{
$var = $1;
( $val = $2 ) =~ s/\\(.)/$1/g;
my $ref = eval $val;
# $dbh->$var($ref);
push( @func_inits, $var, $ref );
}
}
# The attributes need to be sorted in a specific way as the
# assignment is through tied hashes and calls STORE on each
# attribute. Some attributes require to be called prior to
# others
# e.g. f_dir *must* be done before xx_tables in DBD::File
# The dbh attribute sql_init_order is a hash with the order
# as key (low is first, 0 .. 100) and the attributes that
# are set to that oreder as anon-list as value:
# { 0 => [qw( AutoCommit PrintError RaiseError Profile ... )],
# 10 => [ list of attr to be dealt with immediately after first ],
# 50 => [ all fields that are unspecified or default sort order ],
# 90 => [ all fields that are needed after other initialisation ],
# }
my %order = map {
my $order = $_;
map { ( $_ => $order ) } @{ $dbh->{sql_init_order}{$order} };
} sort { $a <=> $b } keys %{ $dbh->{sql_init_order} || {} };
my @ordered_attr =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, defined $order{$_} ? $order{$_} : 50 ] }
keys %$attr;
# initialize given attributes ... lower weighted before higher weighted
foreach my $a (@ordered_attr)
{
exists $attr->{$a} or next;
$two_phased_init and eval {
$dbh->{$a} = $attr->{$a};
delete $attr->{$a};
};
$@ and $second_phase_attrs{$a} = delete $attr->{$a};
$two_phased_init or $dbh->STORE( $a, delete $attr->{$a} );
}
$two_phased_init and $dbh->func( 1, "init_default_attributes" );
%$attr = %second_phase_attrs;
for ( my $i = 0; $i < scalar(@func_inits); $i += 2 )
{
my $func = $func_inits[$i];
my $arg = $func_inits[ $i + 1 ];
$dbh->$func($arg);
}
$dbh->func("init_done");
$dbh->STORE( Active => 1 );
}
return $dbh;
} # connect
sub data_sources ($;$)
{
my ( $drh, $attr ) = @_;
my $tbl_src;
$attr
and defined $attr->{sql_table_source}
and $attr->{sql_table_source}->isa('DBI::DBD::SqlEngine::TableSource')
and $tbl_src = $attr->{sql_table_source};
!defined($tbl_src)
and $drh->{ImplementorClass}->can('default_table_source')
and $tbl_src = $drh->{ImplementorClass}->default_table_source();
defined($tbl_src) or return;
$tbl_src->data_sources( $drh, $attr );
} # data_sources
sub disconnect_all
{
} # disconnect_all
sub DESTROY
{
undef;
} # DESTROY
# ====== DATABASE ==============================================================
package DBI::DBD::SqlEngine::db;
use strict;
use warnings;
use vars qw(@ISA $imp_data_size);
use Carp;
if ( eval { require Clone; } )
{
Clone->import("clone");
}
else
{
require Storable; # in CORE since 5.7.3
*clone = \&Storable::dclone;
}
$imp_data_size = 0;
sub ping
{
( $_[0]->FETCH("Active") ) ? 1 : 0;
} # ping
sub data_sources
{
my ( $dbh, $attr, @other ) = @_;
my $drh = $dbh->{Driver}; # XXX proxy issues?
ref($attr) eq 'HASH' or $attr = {};
defined( $attr->{sql_table_source} ) or $attr->{sql_table_source} = $dbh->{sql_table_source};
return $drh->data_sources( $attr, @other );
}
sub prepare ($$;@)
{
my ( $dbh, $statement, @attribs ) = @_;
# create a 'blank' sth
my $sth = DBI::_new_sth( $dbh, { Statement => $statement } );
if ($sth)
{
my $class = $sth->FETCH("ImplementorClass");
$class =~ s/::st$/::Statement/;
my $stmt;
# if using SQL::Statement version > 1
# cache the parser object if the DBD supports parser caching
# SQL::Nano and older SQL::Statements don't support this
if ( $class->isa("SQL::Statement") )
{
my $parser = $dbh->{sql_parser_object};
$parser ||= eval { $dbh->func("sql_parser_object") };
if ($@)
{
$stmt = eval { $class->new($statement) };
}
else
{
$stmt = eval { $class->new( $statement, $parser ) };
}
}
else
{
$stmt = eval { $class->new($statement) };
}
if ( $@ || $stmt->{errstr} )
{
$dbh->set_err( $DBI::stderr, $@ || $stmt->{errstr} );
undef $sth;
}
else
{
$sth->STORE( "sql_stmt", $stmt );
$sth->STORE( "sql_params", [] );
$sth->STORE( "NUM_OF_PARAMS", scalar( $stmt->params() ) );
my @colnames = $sth->sql_get_colnames();
$sth->STORE( "NUM_OF_FIELDS", scalar @colnames );
}
}
return $sth;
} # prepare
sub set_versions
{
my $dbh = $_[0];
$dbh->{sql_engine_version} = $DBI::DBD::SqlEngine::VERSION;
for (qw( nano_version statement_version ))
{
defined $DBI::SQL::Nano::versions->{$_} or next;
$dbh->{"sql_$_"} = $DBI::SQL::Nano::versions->{$_};
}
$dbh->{sql_handler} =
$dbh->{sql_statement_version}
? "SQL::Statement"
: "DBI::SQL::Nano";
return $dbh;
} # set_versions
sub init_valid_attributes
{
my $dbh = $_[0];
$dbh->{sql_valid_attrs} = {
sql_engine_version => 1, # DBI::DBD::SqlEngine version
sql_handler => 1, # Nano or S:S
sql_nano_version => 1, # Nano version
sql_statement_version => 1, # S:S version
sql_flags => 1, # flags for SQL::Parser
sql_dialect => 1, # dialect for SQL::Parser
sql_quoted_identifier_case => 1, # case for quoted identifiers
sql_identifier_case => 1, # case for non-quoted identifiers
sql_parser_object => 1, # SQL::Parser instance
sql_sponge_driver => 1, # Sponge driver for table_info ()
sql_valid_attrs => 1, # SQL valid attributes
sql_readonly_attrs => 1, # SQL readonly attributes
sql_init_phase => 1, # Only during initialization
sql_meta => 1, # meta data for tables
sql_meta_map => 1, # mapping table for identifier case
sql_data_source => 1, # reasonable datasource class
};
$dbh->{sql_readonly_attrs} = {
sql_engine_version => 1, # DBI::DBD::SqlEngine version
sql_handler => 1, # Nano or S:S
sql_nano_version => 1, # Nano version
sql_statement_version => 1, # S:S version
sql_quoted_identifier_case => 1, # case for quoted identifiers
sql_parser_object => 1, # SQL::Parser instance
sql_sponge_driver => 1, # Sponge driver for table_info ()
sql_valid_attrs => 1, # SQL valid attributes
sql_readonly_attrs => 1, # SQL readonly attributes
};
return $dbh;
} # init_valid_attributes
sub init_default_attributes
{
my ( $dbh, $phase ) = @_;
my $given_phase = $phase;
unless ( defined($phase) )
{
# we have an "old" driver here
$phase = defined $dbh->{sql_init_phase};
$phase and $phase = $dbh->{sql_init_phase};
}
if ( 0 == $phase )
{
# must be done first, because setting flags implicitly calls $dbdname::db->STORE
$dbh->func("init_valid_attributes");
$dbh->func("set_versions");
$dbh->{sql_identifier_case} = 2; # SQL_IC_LOWER
$dbh->{sql_quoted_identifier_case} = 3; # SQL_IC_SENSITIVE
$dbh->{sql_dialect} = "CSV";
$dbh->{sql_init_phase} = $given_phase;
# complete derived attributes, if required
( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//;
my $drv_prefix = DBI->driver_prefix($drv_class);
my $valid_attrs = $drv_prefix . "valid_attrs";
my $ro_attrs = $drv_prefix . "readonly_attrs";
# check whether we're running in a Gofer server or not (see
# validate_FETCH_attr for details)
$dbh->{sql_engine_in_gofer} =
( defined $INC{"DBD/Gofer.pm"} && ( caller(5) )[0] eq "DBI::Gofer::Execute" );
$dbh->{sql_meta} = {};
$dbh->{sql_meta_map} = {}; # choose new name because it contains other keys
# init_default_attributes calls inherited routine before derived DBD's
# init their default attributes, so we don't override something here
#
# defining an order of attribute initialization from connect time
# specified ones with a magic baarier (see next statement)
my $drv_pfx_meta = $drv_prefix . "meta";
$dbh->{sql_init_order} = {
0 => [qw( Profile RaiseError PrintError AutoCommit )],
90 => [ "sql_meta", $dbh->{$drv_pfx_meta} ? $dbh->{$drv_pfx_meta} : () ],
};
# ensuring Profile, RaiseError, PrintError, AutoCommit are initialized
# first when initializing attributes from connect time specified
# attributes
# further, initializations to predefined tables are happens after any
# unspecified attribute initialization (that default to order 50)
my @comp_attrs = qw(valid_attrs version readonly_attrs);
if ( exists $dbh->{$drv_pfx_meta} and !$dbh->{sql_engine_in_gofer} )
{
my $attr = $dbh->{$drv_pfx_meta};
defined $attr
and defined $dbh->{$valid_attrs}
and !defined $dbh->{$valid_attrs}{$attr}
and $dbh->{$valid_attrs}{$attr} = 1;
my %h;
tie %h, "DBI::DBD::SqlEngine::TieTables", $dbh;
$dbh->{$attr} = \%h;
push @comp_attrs, "meta";
}
foreach my $comp_attr (@comp_attrs)
{
my $attr = $drv_prefix . $comp_attr;
defined $dbh->{$valid_attrs}
and !defined $dbh->{$valid_attrs}{$attr}
and $dbh->{$valid_attrs}{$attr} = 1;
defined $dbh->{$ro_attrs}
and !defined $dbh->{$ro_attrs}{$attr}
and $dbh->{$ro_attrs}{$attr} = 1;
}
}
return $dbh;
} # init_default_attributes
sub init_done
{
defined $_[0]->{sql_init_phase} and delete $_[0]->{sql_init_phase};
delete $_[0]->{sql_valid_attrs}->{sql_init_phase};
return;
}
sub sql_parser_object
{
my $dbh = $_[0];
my $dialect = $dbh->{sql_dialect} || "CSV";
my $parser = {
RaiseError => $dbh->FETCH("RaiseError"),
PrintError => $dbh->FETCH("PrintError"),
};
my $sql_flags = $dbh->FETCH("sql_flags") || {};
%$parser = ( %$parser, %$sql_flags );
$parser = SQL::Parser->new( $dialect, $parser );
$dbh->{sql_parser_object} = $parser;
return $parser;
} # sql_parser_object
sub sql_sponge_driver
{
my $dbh = $_[0];
my $dbh2 = $dbh->{sql_sponge_driver};
unless ($dbh2)
{
$dbh2 = $dbh->{sql_sponge_driver} = DBI->connect("DBI:Sponge:");
unless ($dbh2)
{
$dbh->set_err( $DBI::stderr, $DBI::errstr );
return;
}
}
}
sub disconnect ($)
{
%{ $_[0]->{sql_meta} } = ();
%{ $_[0]->{sql_meta_map} } = ();
$_[0]->STORE( Active => 0 );
return 1;
} # disconnect
sub validate_FETCH_attr
{
my ( $dbh, $attrib ) = @_;
# If running in a Gofer server, access to our tied compatibility hash
# would force Gofer to serialize the tieing object including it's
# private $dbh reference used to do the driver function calls.
# This will result in nasty exceptions. So return a copy of the
# sql_meta structure instead, which is the source of for the compatibility
# tie-hash. It's not as good as liked, but the best we can do in this
# situation.
if ( $dbh->{sql_engine_in_gofer} )
{
( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//;
my $drv_prefix = DBI->driver_prefix($drv_class);
exists $dbh->{ $drv_prefix . "meta" } && $attrib eq $dbh->{ $drv_prefix . "meta" }
and $attrib = "sql_meta";
}
return $attrib;
}
sub FETCH ($$)
{
my ( $dbh, $attrib ) = @_;
$attrib eq "AutoCommit"
and return 1;
# Driver private attributes are lower cased
if ( $attrib eq ( lc $attrib ) )
{
# first let the implementation deliver an alias for the attribute to fetch
# after it validates the legitimation of the fetch request
$attrib = $dbh->func( $attrib, "validate_FETCH_attr" ) or return;
my $attr_prefix;
$attrib =~ m/^([a-z]+_)/ and $attr_prefix = $1;
unless ($attr_prefix)
{
( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//;
$attr_prefix = DBI->driver_prefix($drv_class);
$attrib = $attr_prefix . $attrib;
}
my $valid_attrs = $attr_prefix . "valid_attrs";
my $ro_attrs = $attr_prefix . "readonly_attrs";
exists $dbh->{$valid_attrs}
and ( $dbh->{$valid_attrs}{$attrib}
or return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" ) );
exists $dbh->{$ro_attrs}
and $dbh->{$ro_attrs}{$attrib}
and defined $dbh->{$attrib}
and refaddr( $dbh->{$attrib} )
and return clone( $dbh->{$attrib} );
return $dbh->{$attrib};
}
# else pass up to DBI to handle
return $dbh->SUPER::FETCH($attrib);
} # FETCH
sub validate_STORE_attr
{
my ( $dbh, $attrib, $value ) = @_;
if ( $attrib eq "sql_identifier_case" || $attrib eq "sql_quoted_identifier_case"
and $value < 1 || $value > 4 )
{
croak "attribute '$attrib' must have a value from 1 .. 4 (SQL_IC_UPPER .. SQL_IC_MIXED)";
# XXX correctly a remap of all entries in sql_meta/sql_meta_map is required here
}
( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//;
my $drv_prefix = DBI->driver_prefix($drv_class);
exists $dbh->{ $drv_prefix . "meta" }
and $attrib eq $dbh->{ $drv_prefix . "meta" }
and $attrib = "sql_meta";
return ( $attrib, $value );
}
# the ::db::STORE method is what gets called when you set
# a lower-cased database handle attribute such as $dbh->{somekey}=$someval;
#
# STORE should check to make sure that "somekey" is a valid attribute name
# but only if it is really one of our attributes (starts with dbm_ or foo_)
# You can also check for valid values for the attributes if needed
# and/or perform other operations
#
sub STORE ($$$)
{
my ( $dbh, $attrib, $value ) = @_;
if ( $attrib eq "AutoCommit" )
{
$value and return 1; # is already set
croak "Can't disable AutoCommit";
}
if ( $attrib eq lc $attrib )
{
# Driver private attributes are lower cased
( $attrib, $value ) = $dbh->func( $attrib, $value, "validate_STORE_attr" );
$attrib or return;
my $attr_prefix;
$attrib =~ m/^([a-z]+_)/ and $attr_prefix = $1;
unless ($attr_prefix)
{
( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//;
$attr_prefix = DBI->driver_prefix($drv_class);
$attrib = $attr_prefix . $attrib;
}
my $valid_attrs = $attr_prefix . "valid_attrs";
my $ro_attrs = $attr_prefix . "readonly_attrs";
exists $dbh->{$valid_attrs}
and ( $dbh->{$valid_attrs}{$attrib}
or return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" ) );
exists $dbh->{$ro_attrs}
and $dbh->{$ro_attrs}{$attrib}
and defined $dbh->{$attrib}
and return $dbh->set_err( $DBI::stderr,
"attribute '$attrib' is readonly and must not be modified" );
if ( $attrib eq "sql_meta" )
{
while ( my ( $k, $v ) = each %$value )
{
$dbh->{$attrib}{$k} = $v;
}
}
else
{
$dbh->{$attrib} = $value;
}
return 1;
}
return $dbh->SUPER::STORE( $attrib, $value );
} # STORE
sub get_driver_versions
{
my ( $dbh, $table ) = @_;
my %vsn = (
OS => "$^O ($Config::Config{osvers})",
Perl => "$] ($Config::Config{archname})",
DBI => $DBI::VERSION,
);
my %vmp;
my $sql_engine_verinfo =
join " ",
$dbh->{sql_engine_version}, "using", $dbh->{sql_handler},
$dbh->{sql_handler} eq "SQL::Statement"
? $dbh->{sql_statement_version}
: $dbh->{sql_nano_version};
my $indent = 0;
my @deriveds = ( $dbh->{ImplementorClass} );
while (@deriveds)
{
my $derived = shift @deriveds;
$derived eq "DBI::DBD::SqlEngine::db" and last;
$derived->isa("DBI::DBD::SqlEngine::db") or next;
#no strict 'refs';
eval "push \@deriveds, \@${derived}::ISA";
#use strict;
( my $drv_class = $derived ) =~ s/::db$//;
my $drv_prefix = DBI->driver_prefix($drv_class);
my $ddgv = $dbh->{ImplementorClass}->can("get_${drv_prefix}versions");
my $drv_version = $ddgv ? &$ddgv( $dbh, $table ) : $dbh->{ $drv_prefix . "version" };
$drv_version ||=
eval { $derived->VERSION() }; # XXX access $drv_class::VERSION via symbol table
$vsn{$drv_class} = $drv_version;
$indent and $vmp{$drv_class} = " " x $indent . $drv_class;
$indent += 2;
}
$vsn{"DBI::DBD::SqlEngine"} = $sql_engine_verinfo;
$indent and $vmp{"DBI::DBD::SqlEngine"} = " " x $indent . "DBI::DBD::SqlEngine";
$DBI::PurePerl and $vsn{"DBI::PurePerl"} = $DBI::PurePerl::VERSION;
$indent += 20;
my @versions = map { sprintf "%-${indent}s %s", $vmp{$_} || $_, $vsn{$_} }
sort {
$a->isa($b) and return -1;
$b->isa($a) and return 1;
$a->isa("DBI::DBD::SqlEngine") and return -1;
$b->isa("DBI::DBD::SqlEngine") and return 1;
return $a cmp $b;
} keys %vsn;
return wantarray ? @versions : join "\n", @versions;
} # get_versions
sub get_single_table_meta
{
my ( $dbh, $table, $attr ) = @_;
my $meta;
$table eq "."
and return $dbh->FETCH($attr);
( my $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/;
( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 );
$meta or croak "No such table '$table'";
# prevent creation of undef attributes
return $class->get_table_meta_attr( $meta, $attr );
} # get_single_table_meta
sub get_sql_engine_meta
{
my ( $dbh, $table, $attr ) = @_;
my $gstm = $dbh->{ImplementorClass}->can("get_single_table_meta");
$table eq "*"
and $table = [ ".", keys %{ $dbh->{sql_meta} } ];
$table eq "+"
and $table = [ grep { m/^[_A-Za-z0-9]+$/ } keys %{ $dbh->{sql_meta} } ];
ref $table eq "Regexp"
and $table = [ grep { $_ =~ $table } keys %{ $dbh->{sql_meta} } ];
ref $table || ref $attr
or return $gstm->( $dbh, $table, $attr );
ref $table or $table = [$table];
ref $attr or $attr = [$attr];
"ARRAY" eq ref $table
or return
$dbh->set_err( $DBI::stderr,
"Invalid argument for \$table - SCALAR, Regexp or ARRAY expected but got " . ref $table );
"ARRAY" eq ref $attr
or return $dbh->set_err(
"Invalid argument for \$attr - SCALAR or ARRAY expected but got " . ref $attr );
my %results;
foreach my $tname ( @{$table} )
{
my %tattrs;
foreach my $aname ( @{$attr} )
{
$tattrs{$aname} = $gstm->( $dbh, $tname, $aname );
}
$results{$tname} = \%tattrs;
}
return \%results;
} # get_sql_engine_meta
sub new_sql_engine_meta
{
my ( $dbh, $table, $values ) = @_;
my $respect_case = 0;
"HASH" eq ref $values
or croak "Invalid argument for \$values - SCALAR or HASH expected but got " . ref $values;
$table =~ s/^\"// and $respect_case = 1; # handle quoted identifiers
$table =~ s/\"$//;
unless ($respect_case)
{
defined $dbh->{sql_meta_map}{$table} and $table = $dbh->{sql_meta_map}{$table};
}
$dbh->{sql_meta}{$table} = { %{$values} };
my $class;
defined $values->{sql_table_class} and $class = $values->{sql_table_class};
defined $class or ( $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/;
# XXX we should never hit DBD::File::Table::get_table_meta here ...
my ( undef, $meta ) = $class->get_table_meta( $dbh, $table, $respect_case );
1;
} # new_sql_engine_meta
sub set_single_table_meta
{
my ( $dbh, $table, $attr, $value ) = @_;
my $meta;
$table eq "."
and return $dbh->STORE( $attr, $value );
( my $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/;
( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 ); # 1 means: respect case
$meta or croak "No such table '$table'";
$class->set_table_meta_attr( $meta, $attr, $value );
return $dbh;
} # set_single_table_meta
sub set_sql_engine_meta
{
my ( $dbh, $table, $attr, $value ) = @_;
my $sstm = $dbh->{ImplementorClass}->can("set_single_table_meta");
$table eq "*"
and $table = [ ".", keys %{ $dbh->{sql_meta} } ];
$table eq "+"
and $table = [ grep { m/^[_A-Za-z0-9]+$/ } keys %{ $dbh->{sql_meta} } ];
ref($table) eq "Regexp"
and $table = [ grep { $_ =~ $table } keys %{ $dbh->{sql_meta} } ];
ref $table || ref $attr
or return $sstm->( $dbh, $table, $attr, $value );
ref $table or $table = [$table];
ref $attr or $attr = { $attr => $value };
"ARRAY" eq ref $table
or croak "Invalid argument for \$table - SCALAR, Regexp or ARRAY expected but got "
. ref $table;
"HASH" eq ref $attr
or croak "Invalid argument for \$attr - SCALAR or HASH expected but got " . ref $attr;
foreach my $tname ( @{$table} )
{
while ( my ( $aname, $aval ) = each %$attr )
{
$sstm->( $dbh, $tname, $aname, $aval );
}
}
return $dbh;
} # set_file_meta
sub clear_sql_engine_meta
{
my ( $dbh, $table ) = @_;
( my $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/;
my ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 );
$meta and %{$meta} = ();
return;
} # clear_file_meta
sub DESTROY ($)
{
my $dbh = shift;
$dbh->SUPER::FETCH("Active") and $dbh->disconnect;
undef $dbh->{sql_parser_object};
} # DESTROY
sub type_info_all ($)
{
[
{
TYPE_NAME => 0,
DATA_TYPE => 1,
PRECISION => 2,
LITERAL_PREFIX => 3,
LITERAL_SUFFIX => 4,
CREATE_PARAMS => 5,
NULLABLE => 6,
CASE_SENSITIVE => 7,
SEARCHABLE => 8,
UNSIGNED_ATTRIBUTE => 9,
MONEY => 10,
AUTO_INCREMENT => 11,
LOCAL_TYPE_NAME => 12,
MINIMUM_SCALE => 13,
MAXIMUM_SCALE => 14,
},
[
"VARCHAR", DBI::SQL_VARCHAR(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1, 999999,
],
[ "CHAR", DBI::SQL_CHAR(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1, 999999, ],
[ "INTEGER", DBI::SQL_INTEGER(), undef, "", "", undef, 0, 0, 1, 0, 0, 0, undef, 0, 0, ],
[ "REAL", DBI::SQL_REAL(), undef, "", "", undef, 0, 0, 1, 0, 0, 0, undef, 0, 0, ],
[
"BLOB", DBI::SQL_LONGVARBINARY(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1,
999999,
],
[
"BLOB", DBI::SQL_LONGVARBINARY(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1,
999999,
],
[
"TEXT", DBI::SQL_LONGVARCHAR(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1,
999999,
],
];
} # type_info_all
sub get_avail_tables
{
my $dbh = $_[0];
my @tables = ();
if ( $dbh->{sql_handler} eq "SQL::Statement" and $dbh->{sql_ram_tables} )
{
# XXX map +[ undef, undef, $_, "TABLE", "TEMP" ], keys %{...}
foreach my $table ( keys %{ $dbh->{sql_ram_tables} } )
{
push @tables, [ undef, undef, $table, "TABLE", "TEMP" ];
}
}
my $tbl_src;
defined $dbh->{sql_table_source}
and $dbh->{sql_table_source}->isa('DBI::DBD::SqlEngine::TableSource')
and $tbl_src = $dbh->{sql_table_source};
!defined($tbl_src)
and $dbh->{Driver}->{ImplementorClass}->can('default_table_source')
and $tbl_src = $dbh->{Driver}->{ImplementorClass}->default_table_source();
defined($tbl_src) and push( @tables, $tbl_src->avail_tables($dbh) );
return @tables;
} # get_avail_tables
{
my $names = [qw( TABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE REMARKS )];
sub table_info ($)
{
my $dbh = shift;
my @tables = $dbh->func("get_avail_tables");
# Temporary kludge: DBD::Sponge dies if @tables is empty. :-(
# this no longer seems to be true @tables or return;
my $dbh2 = $dbh->func("sql_sponge_driver");
my $sth = $dbh2->prepare(
"TABLE_INFO",
{
rows => \@tables,
NAME => $names,
}
);
$sth or return $dbh->set_err( $DBI::stderr, $dbh2->errstr );
$sth->execute or return;
return $sth;
} # table_info
}
sub list_tables ($)
{
my $dbh = shift;
my @table_list;
my @tables = $dbh->func("get_avail_tables") or return;
foreach my $ref (@tables)
{
# rt69260 and rt67223 - the same issue in 2 different queues
push @table_list, $ref->[2];
}
return @table_list;
} # list_tables
sub quote ($$;$)
{
my ( $self, $str, $type ) = @_;
defined $str or return "NULL";
defined $type && ( $type == DBI::SQL_NUMERIC()
|| $type == DBI::SQL_DECIMAL()
|| $type == DBI::SQL_INTEGER()
|| $type == DBI::SQL_SMALLINT()
|| $type == DBI::SQL_FLOAT()
|| $type == DBI::SQL_REAL()
|| $type == DBI::SQL_DOUBLE()
|| $type == DBI::SQL_TINYINT() )
and return $str;
$str =~ s/\\/\\\\/sg;
$str =~ s/\0/\\0/sg;
$str =~ s/\'/\\\'/sg;
$str =~ s/\n/\\n/sg;
$str =~ s/\r/\\r/sg;
return "'$str'";
} # quote
sub commit ($)
{
my $dbh = shift;
$dbh->FETCH("Warn")
and carp "Commit ineffective while AutoCommit is on", -1;
return 1;
} # commit
sub rollback ($)
{
my $dbh = shift;
$dbh->FETCH("Warn")
and carp "Rollback ineffective while AutoCommit is on", -1;
return 0;
} # rollback
# ====== Tie-Meta ==============================================================
package DBI::DBD::SqlEngine::TieMeta;
use Carp qw(croak);
require Tie::Hash;
@DBI::DBD::SqlEngine::TieMeta::ISA = qw(Tie::Hash);
sub TIEHASH
{
my ( $class, $tblClass, $tblMeta ) = @_;
my $self = bless(
{
tblClass => $tblClass,
tblMeta => $tblMeta,
},
$class
);
return $self;
} # new
sub STORE
{
my ( $self, $meta_attr, $meta_val ) = @_;
$self->{tblClass}->set_table_meta_attr( $self->{tblMeta}, $meta_attr, $meta_val );
return;
} # STORE
sub FETCH
{
my ( $self, $meta_attr ) = @_;
return $self->{tblClass}->get_table_meta_attr( $self->{tblMeta}, $meta_attr );
} # FETCH
sub FIRSTKEY
{
my $a = scalar keys %{ $_[0]->{tblMeta} };
each %{ $_[0]->{tblMeta} };
} # FIRSTKEY
sub NEXTKEY
{
each %{ $_[0]->{tblMeta} };
} # NEXTKEY
sub EXISTS
{
exists $_[0]->{tblMeta}{ $_[1] };
} # EXISTS
sub DELETE
{
croak "Can't delete single attributes from table meta structure";
} # DELETE
sub CLEAR
{
%{ $_[0]->{tblMeta} } = ();
} # CLEAR
sub SCALAR
{
scalar %{ $_[0]->{tblMeta} };
} # SCALAR
# ====== Tie-Tables ============================================================
package DBI::DBD::SqlEngine::TieTables;
use Carp qw(croak);
require Tie::Hash;
@DBI::DBD::SqlEngine::TieTables::ISA = qw(Tie::Hash);
sub TIEHASH
{
my ( $class, $dbh ) = @_;
( my $tbl_class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/;
my $self = bless(
{
dbh => $dbh,
tblClass => $tbl_class,
},
$class
);
return $self;
} # new
sub STORE
{
my ( $self, $table, $tbl_meta ) = @_;
"HASH" eq ref $tbl_meta
or croak "Invalid data for storing as table meta data (must be hash)";
( undef, my $meta ) = $self->{tblClass}->get_table_meta( $self->{dbh}, $table, 1 );
$meta or croak "Invalid table name '$table'";
while ( my ( $meta_attr, $meta_val ) = each %$tbl_meta )
{
$self->{tblClass}->set_table_meta_attr( $meta, $meta_attr, $meta_val );
}
return;
} # STORE
sub FETCH
{
my ( $self, $table ) = @_;
( undef, my $meta ) = $self->{tblClass}->get_table_meta( $self->{dbh}, $table, 1 );
$meta or croak "Invalid table name '$table'";
my %h;
tie %h, "DBI::DBD::SqlEngine::TieMeta", $self->{tblClass}, $meta;
return \%h;
} # FETCH
sub FIRSTKEY
{
my $a = scalar keys %{ $_[0]->{dbh}->{sql_meta} };
each %{ $_[0]->{dbh}->{sql_meta} };
} # FIRSTKEY
sub NEXTKEY
{
each %{ $_[0]->{dbh}->{sql_meta} };
} # NEXTKEY
sub EXISTS
{
exists $_[0]->{dbh}->{sql_meta}->{ $_[1] }
or exists $_[0]->{dbh}->{sql_meta_map}->{ $_[1] };
} # EXISTS
sub DELETE
{
my ( $self, $table ) = @_;
( undef, my $meta ) = $self->{tblClass}->get_table_meta( $self->{dbh}, $table, 1 );
$meta or croak "Invalid table name '$table'";
delete $_[0]->{dbh}->{sql_meta}->{ $meta->{table_name} };
} # DELETE
sub CLEAR
{
%{ $_[0]->{dbh}->{sql_meta} } = ();
%{ $_[0]->{dbh}->{sql_meta_map} } = ();
} # CLEAR
sub SCALAR
{
scalar %{ $_[0]->{dbh}->{sql_meta} };
} # SCALAR
# ====== STATEMENT =============================================================
package DBI::DBD::SqlEngine::st;
use strict;
use warnings;
use vars qw(@ISA $imp_data_size);
$imp_data_size = 0;
sub bind_param ($$$;$)
{
my ( $sth, $pNum, $val, $attr ) = @_;
if ( $attr && defined $val )
{
my $type = ref $attr eq "HASH" ? $attr->{TYPE} : $attr;
if ( $type == DBI::SQL_BIGINT()
|| $type == DBI::SQL_INTEGER()
|| $type == DBI::SQL_SMALLINT()
|| $type == DBI::SQL_TINYINT() )
{
$val += 0;
}
elsif ( $type == DBI::SQL_DECIMAL()
|| $type == DBI::SQL_DOUBLE()
|| $type == DBI::SQL_FLOAT()
|| $type == DBI::SQL_NUMERIC()
|| $type == DBI::SQL_REAL() )
{
$val += 0.;
}
else
{
$val = "$val";
}
}
$sth->{sql_params}[ $pNum - 1 ] = $val;
return 1;
} # bind_param
sub execute
{
my $sth = shift;
my $params = @_ ? ( $sth->{sql_params} = [@_] ) : $sth->{sql_params};
$sth->finish;
my $stmt = $sth->{sql_stmt};
# must not proved when already executed - SQL::Statement modifies
# received params
unless ( $sth->{sql_params_checked}++ )
{
# SQL::Statement and DBI::SQL::Nano will return the list of required params
# when called in list context. Do not look into the several items, they're
# implementation specific and may change without warning
unless ( ( my $req_prm = $stmt->params() ) == ( my $nparm = @$params ) )
{
my $msg = "You passed $nparm parameters where $req_prm required";
return $sth->set_err( $DBI::stderr, $msg );
}
}
my @err;
my $result;
eval {
local $SIG{__WARN__} = sub { push @err, @_ };
$result = $stmt->execute( $sth, $params );
};
unless ( defined $result )
{
$sth->set_err( $DBI::stderr, $@ || $stmt->{errstr} || $err[0] );
return;
}
if ( $stmt->{NUM_OF_FIELDS} )
{ # is a SELECT statement
$sth->STORE( Active => 1 );
$sth->FETCH("NUM_OF_FIELDS")
or $sth->STORE( "NUM_OF_FIELDS", $stmt->{NUM_OF_FIELDS} );
}
return $result;
} # execute
sub finish
{
my $sth = $_[0];
$sth->SUPER::STORE( Active => 0 );
delete $sth->{sql_stmt}{data};
return 1;
} # finish
sub fetch ($)
{
my $sth = $_[0];
my $data = $sth->{sql_stmt}{data};
if ( !$data || ref $data ne "ARRAY" )
{
$sth->set_err(
$DBI::stderr,
"Attempt to fetch row without a preceding execute () call or from a non-SELECT statement"
);
return;
}
my $dav = shift @$data;
unless ($dav)
{
$sth->finish;
return;
}
if ( $sth->FETCH("ChopBlanks") ) # XXX: (TODO) Only chop on CHAR fields,
{ # not on VARCHAR or NUMERIC (see DBI docs)
$_ && $_ =~ s/ +$// for @$dav;
}
return $sth->_set_fbav($dav);
} # fetch
no warnings 'once';
*fetchrow_arrayref = \&fetch;
use warnings;
sub sql_get_colnames
{
my $sth = $_[0];
# Being a bit dirty here, as neither SQL::Statement::Structure nor
# DBI::SQL::Nano::Statement_ does not offer an interface to the
# required data
my @colnames;
if ( $sth->{sql_stmt}->{NAME} and "ARRAY" eq ref( $sth->{sql_stmt}->{NAME} ) )
{
@colnames = @{ $sth->{sql_stmt}->{NAME} };
}
elsif ( $sth->{sql_stmt}->isa('SQL::Statement') )
{
my $stmt = $sth->{sql_stmt} || {};
my @coldefs = @{ $stmt->{column_defs} || [] };
@colnames = map { $_->{name} || $_->{value} } @coldefs;
}
@colnames = $sth->{sql_stmt}->column_names() unless (@colnames);
@colnames = () if ( grep { m/\*/ } @colnames );
return @colnames;
}
sub FETCH ($$)
{
my ( $sth, $attrib ) = @_;
$attrib eq "NAME" and return [ $sth->sql_get_colnames() ];
$attrib eq "TYPE" and return [ ( DBI::SQL_VARCHAR() ) x scalar $sth->sql_get_colnames() ];
$attrib eq "TYPE_NAME" and return [ ("VARCHAR") x scalar $sth->sql_get_colnames() ];
$attrib eq "PRECISION" and return [ (0) x scalar $sth->sql_get_colnames() ];
$attrib eq "NULLABLE" and return [ (1) x scalar $sth->sql_get_colnames() ];
if ( $attrib eq lc $attrib )
{
# Private driver attributes are lower cased
return $sth->{$attrib};
}
# else pass up to DBI to handle
return $sth->SUPER::FETCH($attrib);
} # FETCH
sub STORE ($$$)
{
my ( $sth, $attrib, $value ) = @_;
if ( $attrib eq lc $attrib ) # Private driver attributes are lower cased
{
$sth->{$attrib} = $value;
return 1;
}
return $sth->SUPER::STORE( $attrib, $value );
} # STORE
sub DESTROY ($)
{
my $sth = shift;
$sth->SUPER::FETCH("Active") and $sth->finish;
undef $sth->{sql_stmt};
undef $sth->{sql_params};
} # DESTROY
sub rows ($)
{
return $_[0]->{sql_stmt}{NUM_OF_ROWS};
} # rows
# ====== TableSource ===========================================================
package DBI::DBD::SqlEngine::TableSource;
use strict;
use warnings;
use Carp;
sub data_sources ($;$)
{
my ( $class, $drh, $attrs ) = @_;
croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement data_sources" );
}
sub avail_tables
{
my ( $self, $dbh ) = @_;
croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement avail_tables" );
}
# ====== DataSource ============================================================
package DBI::DBD::SqlEngine::DataSource;
use strict;
use warnings;
use Carp;
sub complete_table_name ($$;$)
{
my ( $self, $meta, $table, $respect_case ) = @_;
croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement complete_table_name" );
}
sub open_data ($)
{
my ( $self, $meta, $attrs, $flags ) = @_;
croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement open_data" );
}
# ====== SQL::STATEMENT ========================================================
package DBI::DBD::SqlEngine::Statement;
use strict;
use warnings;
use Carp;
@DBI::DBD::SqlEngine::Statement::ISA = qw(DBI::SQL::Nano::Statement);
sub open_table ($$$$$)
{
my ( $self, $data, $table, $createMode, $lockMode ) = @_;
my $class = ref $self;
$class =~ s/::Statement/::Table/;
my $flags = {
createMode => $createMode,
lockMode => $lockMode,
};
$self->{command} eq "DROP" and $flags->{dropMode} = 1;
my ( $tblnm, $table_meta ) = $class->get_table_meta( $data->{Database}, $table, 1 )
or croak "Cannot find appropriate meta for table '$table'";
defined $table_meta->{sql_table_class} and $class = $table_meta->{sql_table_class};
# because column name mapping is initialized in constructor ...
# and therefore specific opening operations might be done before
# reaching DBI::DBD::SqlEngine::Table->new(), we need to intercept
# ReadOnly here
my $write_op = $createMode || $lockMode || $flags->{dropMode};
if ($write_op)
{
$table_meta->{readonly}
and croak "Table '$table' is marked readonly - "
. $self->{command}
. ( $lockMode ? " with locking" : "" )
. " command forbidden";
}
return $class->new( $data, { table => $table }, $flags );
} # open_table
# ====== SQL::TABLE ============================================================
package DBI::DBD::SqlEngine::Table;
use strict;
use warnings;
use Carp;
@DBI::DBD::SqlEngine::Table::ISA = qw(DBI::SQL::Nano::Table);
sub bootstrap_table_meta
{
my ( $self, $dbh, $meta, $table ) = @_;
defined $dbh->{ReadOnly}
and !defined( $meta->{readonly} )
and $meta->{readonly} = $dbh->{ReadOnly};
defined $meta->{sql_identifier_case}
or $meta->{sql_identifier_case} = $dbh->{sql_identifier_case};
exists $meta->{sql_data_source} or $meta->{sql_data_source} = $dbh->{sql_data_source};
$meta;
}
sub init_table_meta
{
my ( $self, $dbh, $meta, $table ) = @_ if (0);
return;
} # init_table_meta
sub get_table_meta ($$$;$)
{
my ( $self, $dbh, $table, $respect_case, @other ) = @_;
unless ( defined $respect_case )
{
$respect_case = 0;
$table =~ s/^\"// and $respect_case = 1; # handle quoted identifiers
$table =~ s/\"$//;
}
unless ($respect_case)
{
defined $dbh->{sql_meta_map}{$table} and $table = $dbh->{sql_meta_map}{$table};
}
my $meta = {};
defined $dbh->{sql_meta}{$table} and $meta = $dbh->{sql_meta}{$table};
do_initialize:
unless ( $meta->{initialized} )
{
$self->bootstrap_table_meta( $dbh, $meta, $table, @other );
$meta->{sql_data_source}->complete_table_name( $meta, $table, $respect_case, @other )
or return;
if ( defined $meta->{table_name} and $table ne $meta->{table_name} )
{
$dbh->{sql_meta_map}{$table} = $meta->{table_name};
$table = $meta->{table_name};
}
# now we know a bit more - let's check if user can't use consequent spelling
# XXX add know issue about reset sql_identifier_case here ...
if ( defined $dbh->{sql_meta}{$table} )
{
$meta = delete $dbh->{sql_meta}{$table}; # avoid endless loop
$meta->{initialized}
or goto do_initialize;
#or $meta->{sql_data_source}->complete_table_name( $meta, $table, $respect_case, @other )
#or return;
}
unless ( $dbh->{sql_meta}{$table}{initialized} )
{
$self->init_table_meta( $dbh, $meta, $table );
$meta->{initialized} = 1;
$dbh->{sql_meta}{$table} = $meta;
}
}
return ( $table, $meta );
} # get_table_meta
my %reset_on_modify = ();
my %compat_map = ();
sub register_reset_on_modify
{
my ( $proto, $extra_resets ) = @_;
foreach my $cv ( keys %$extra_resets )
{
#%reset_on_modify = ( %reset_on_modify, %$extra_resets );
push @{ $reset_on_modify{$cv} },
ref $extra_resets->{$cv} ? @{ $extra_resets->{$cv} } : ( $extra_resets->{$cv} );
}
return;
} # register_reset_on_modify
sub register_compat_map
{
my ( $proto, $extra_compat_map ) = @_;
%compat_map = ( %compat_map, %$extra_compat_map );
return;
} # register_compat_map
sub get_table_meta_attr
{
my ( $class, $meta, $attrib ) = @_;
exists $compat_map{$attrib}
and $attrib = $compat_map{$attrib};
exists $meta->{$attrib}
and return $meta->{$attrib};
return;
} # get_table_meta_attr
sub set_table_meta_attr
{
my ( $class, $meta, $attrib, $value ) = @_;
exists $compat_map{$attrib}
and $attrib = $compat_map{$attrib};
$class->table_meta_attr_changed( $meta, $attrib, $value );
$meta->{$attrib} = $value;
} # set_table_meta_attr
sub table_meta_attr_changed
{
my ( $class, $meta, $attrib, $value ) = @_;
defined $reset_on_modify{$attrib}
and delete @$meta{ @{ $reset_on_modify{$attrib} } }
and $meta->{initialized} = 0;
} # table_meta_attr_changed
sub open_data
{
my ( $self, $meta, $attrs, $flags ) = @_;
$meta->{sql_data_source}
or croak "Table " . $meta->{table_name} . " not completely initialized";
$meta->{sql_data_source}->open_data( $meta, $attrs, $flags );
return;
} # open_data
# ====== SQL::Eval API =========================================================
sub new
{
my ( $className, $data, $attrs, $flags ) = @_;
my $dbh = $data->{Database};
my ( $tblnm, $meta ) = $className->get_table_meta( $dbh, $attrs->{table}, 1 )
or croak "Cannot find appropriate table '$attrs->{table}'";
$attrs->{table} = $tblnm;
# Being a bit dirty here, as SQL::Statement::Structure does not offer
# me an interface to the data I want
$flags->{createMode} && $data->{sql_stmt}{table_defs}
and $meta->{table_defs} = $data->{sql_stmt}{table_defs};
# open_file must be called before inherited new is invoked
# because column name mapping is initialized in constructor ...
$className->open_data( $meta, $attrs, $flags );
my $tbl = {
%{$attrs},
meta => $meta,
col_names => $meta->{col_names} || [],
};
return $className->SUPER::new($tbl);
} # new
sub DESTROY
{
my $self = shift;
my $meta = $self->{meta};
$self->{row} and undef $self->{row};
()
}
1;
=pod
=head1 NAME
DBI::DBD::SqlEngine - Base class for DBI drivers without their own SQL engine
=head1 SYNOPSIS
package DBD::myDriver;
use base qw(DBI::DBD::SqlEngine);
sub driver
{
...
my $drh = $proto->SUPER::driver($attr);
...
return $drh->{class};
}
package DBD::myDriver::dr;
@ISA = qw(DBI::DBD::SqlEngine::dr);
sub data_sources { ... }
...
package DBD::myDriver::db;
@ISA = qw(DBI::DBD::SqlEngine::db);
sub init_valid_attributes { ... }
sub init_default_attributes { ... }
sub set_versions { ... }
sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; ... }
sub validate_FETCH_attr { my ($dbh, $attrib) = @_; ... }
sub get_myd_versions { ... }
sub get_avail_tables { ... }
package DBD::myDriver::st;
@ISA = qw(DBI::DBD::SqlEngine::st);
sub FETCH { ... }
sub STORE { ... }
package DBD::myDriver::Statement;
@ISA = qw(DBI::DBD::SqlEngine::Statement);
sub open_table { ... }
package DBD::myDriver::Table;
@ISA = qw(DBI::DBD::SqlEngine::Table);
sub new { ... }
=head1 DESCRIPTION
DBI::DBD::SqlEngine abstracts the usage of SQL engines from the
DBD. DBD authors can concentrate on the data retrieval they want to
provide.
It is strongly recommended that you read L<DBD::File::Developers> and
L<DBD::File::Roadmap>, because many of the DBD::File API is provided
by DBI::DBD::SqlEngine.
Currently the API of DBI::DBD::SqlEngine is experimental and will
likely change in the near future to provide the table meta data basics
like DBD::File.
DBI::DBD::SqlEngine expects that any driver in inheritance chain has
a L<DBI prefix|DBI::DBD/The_database_handle_constructor>.
=head2 Metadata
The following attributes are handled by DBI itself and not by
DBI::DBD::SqlEngine, thus they all work as expected:
Active
ActiveKids
CachedKids
CompatMode (Not used)
InactiveDestroy
AutoInactiveDestroy
Kids
PrintError
RaiseError
Warn (Not used)
=head3 The following DBI attributes are handled by DBI::DBD::SqlEngine:
=head4 AutoCommit
Always on.
=head4 ChopBlanks
Works.
=head4 NUM_OF_FIELDS
Valid after C<< $sth->execute >>.
=head4 NUM_OF_PARAMS
Valid after C<< $sth->prepare >>.
=head4 NAME
Valid after C<< $sth->execute >>; probably undef for Non-Select statements.
=head4 NULLABLE
Not really working, always returns an array ref of ones, as DBD::CSV
does not verify input data. Valid after C<< $sth->execute >>; undef for
non-select statements.
=head3 The following DBI attributes and methods are not supported:
=over 4
=item bind_param_inout
=item CursorName
=item LongReadLen
=item LongTruncOk
=back
=head3 DBI::DBD::SqlEngine specific attributes
In addition to the DBI attributes, you can use the following dbh
attributes:
=head4 sql_engine_version
Contains the module version of this driver (B<readonly>)
=head4 sql_nano_version
Contains the module version of DBI::SQL::Nano (B<readonly>)
=head4 sql_statement_version
Contains the module version of SQL::Statement, if available (B<readonly>)
=head4 sql_handler
Contains the SQL Statement engine, either DBI::SQL::Nano or SQL::Statement
(B<readonly>).
=head4 sql_parser_object
Contains an instantiated instance of SQL::Parser (B<readonly>).
This is filled when used first time (only when used with SQL::Statement).
=head4 sql_sponge_driver
Contains an internally used DBD::Sponge handle (B<readonly>).
=head4 sql_valid_attrs
Contains the list of valid attributes for each DBI::DBD::SqlEngine based
driver (B<readonly>).
=head4 sql_readonly_attrs
Contains the list of those attributes which are readonly (B<readonly>).
=head4 sql_identifier_case
Contains how DBI::DBD::SqlEngine deals with non-quoted SQL identifiers:
* SQL_IC_UPPER (1) means all identifiers are internally converted
into upper-cased pendants
* SQL_IC_LOWER (2) means all identifiers are internally converted
into lower-cased pendants
* SQL_IC_MIXED (4) means all identifiers are taken as they are
These conversions happen if (and only if) no existing identifier matches.
Once existing identifier is used as known.
The SQL statement execution classes doesn't have to care, so don't expect
C<sql_identifier_case> affects column names in statements like
SELECT * FROM foo
=head4 sql_quoted_identifier_case
Contains how DBI::DBD::SqlEngine deals with quoted SQL identifiers
(B<readonly>). It's fixated to SQL_IC_SENSITIVE (3), which is interpreted
as SQL_IC_MIXED.
=head4 sql_flags
Contains additional flags to instantiate an SQL::Parser. Because an
SQL::Parser is instantiated only once, it's recommended to set this flag
before any statement is executed.
=head4 sql_dialect
Controls the dialect understood by SQL::Parser. Possible values (delivery
state of SQL::Statement):
* ANSI
* CSV
* AnyData
Defaults to "CSV". Because an SQL::Parser is instantiated only once and
SQL::Parser doesn't allow one to modify the dialect once instantiated,
it's strongly recommended to set this flag before any statement is
executed (best place is connect attribute hash).
=head4 sql_engine_in_gofer
This value has a true value in case of this driver is operated via
L<DBD::Gofer>. The impact of being operated via Gofer is a read-only
driver (not read-only databases!), so you cannot modify any attributes
later - neither any table settings. B<But> you won't get an error in
cases you modify table attributes, so please carefully watch
C<sql_engine_in_gofer>.
=head4 sql_meta
Private data area which contains information about the tables this
module handles. Table meta data might not be available until the
table has been accessed for the first time e.g., by issuing a select
on it however it is possible to pre-initialize attributes for each table
you use.
DBI::DBD::SqlEngine recognizes the (public) attributes C<col_names>,
C<table_name>, C<readonly>, C<sql_data_source> and C<sql_identifier_case>.
Be very careful when modifying attributes you do not know, the consequence
might be a destroyed or corrupted table.
While C<sql_meta> is a private and readonly attribute (which means, you
cannot modify it's values), derived drivers might provide restricted
write access through another attribute. Well known accessors are
C<csv_tables> for L<DBD::CSV>, C<ad_tables> for L<DBD::AnyData> and
C<dbm_tables> for L<DBD::DBM>.
=head4 sql_table_source
Controls the class which will be used for fetching available tables.
See L</DBI::DBD::SqlEngine::TableSource> for details.
=head4 sql_data_source
Contains the class name to be used for opening tables.
See L</DBI::DBD::SqlEngine::DataSource> for details.
=head2 Driver private methods
=head3 Default DBI methods
=head4 data_sources
The C<data_sources> method returns a list of subdirectories of the current
directory in the form "dbi:CSV:f_dir=$dirname".
If you want to read the subdirectories of another directory, use
my ($drh) = DBI->install_driver ("CSV");
my (@list) = $drh->data_sources (f_dir => "/usr/local/csv_data");
=head4 list_tables
This method returns a list of file names inside $dbh->{f_dir}.
Example:
my ($dbh) = DBI->connect ("dbi:CSV:f_dir=/usr/local/csv_data");
my (@list) = $dbh->func ("list_tables");
Note that the list includes all files contained in the directory, even
those that have non-valid table names, from the view of SQL.
=head3 Additional methods
The following methods are only available via their documented name when
DBI::DBD::SQlEngine is used directly. Because this is only reasonable for
testing purposes, the real names must be used instead. Those names can be
computed by replacing the C<sql_> in the method name with the driver prefix.
=head4 sql_versions
Signature:
sub sql_versions (;$) {
my ($table_name) = @_;
$table_name ||= ".";
...
}
Returns the versions of the driver, including the DBI version, the Perl
version, DBI::PurePerl version (if DBI::PurePerl is active) and the version
of the SQL engine in use.
my $dbh = DBI->connect ("dbi:File:");
my $sql_versions = $dbh->func( "sql_versions" );
print "$sql_versions\n";
__END__
# DBI::DBD::SqlEngine 0.05 using SQL::Statement 1.402
# DBI 1.623
# OS netbsd (6.99.12)
# Perl 5.016002 (x86_64-netbsd-thread-multi)
Called in list context, sql_versions will return an array containing each
line as single entry.
Some drivers might use the optional (table name) argument and modify
version information related to the table (e.g. DBD::DBM provides storage
backend information for the requested table, when it has a table name).
=head4 sql_get_meta
Signature:
sub sql_get_meta ($$)
{
my ($table_name, $attrib) = @_;
...
}
Returns the value of a meta attribute set for a specific table, if any.
See L<sql_meta> for the possible attributes.
A table name of C<"."> (single dot) is interpreted as the default table.
This will retrieve the appropriate attribute globally from the dbh.
This has the same restrictions as C<< $dbh->{$attrib} >>.
=head4 sql_set_meta
Signature:
sub sql_set_meta ($$$)
{
my ($table_name, $attrib, $value) = @_;
...
}
Sets the value of a meta attribute set for a specific table.
See L<sql_meta> for the possible attributes.
A table name of C<"."> (single dot) is interpreted as the default table
which will set the specified attribute globally for the dbh.
This has the same restrictions as C<< $dbh->{$attrib} = $value >>.
=head4 sql_clear_meta
Signature:
sub sql_clear_meta ($)
{
my ($table_name) = @_;
...
}
Clears the table specific meta information in the private storage of the
dbh.
=head2 Extensibility
=head3 DBI::DBD::SqlEngine::TableSource
Provides data sources and table information on database driver and database
handle level.
package DBI::DBD::SqlEngine::TableSource;
sub data_sources ($;$)
{
my ( $class, $drh, $attrs ) = @_;
...
}
sub avail_tables
{
my ( $class, $drh ) = @_;
...
}
The C<data_sources> method is called when the user invokes any of the
following:
@ary = DBI->data_sources($driver);
@ary = DBI->data_sources($driver, \%attr);
@ary = $dbh->data_sources();
@ary = $dbh->data_sources(\%attr);
The C<avail_tables> method is called when the user invokes any of the
following:
@names = $dbh->tables( $catalog, $schema, $table, $type );
$sth = $dbh->table_info( $catalog, $schema, $table, $type );
$sth = $dbh->table_info( $catalog, $schema, $table, $type, \%attr );
$dbh->func( "list_tables" );
Every time where an C<\%attr> argument can be specified, this C<\%attr>
object's C<sql_table_source> attribute is preferred over the C<$dbh>
attribute or the driver default, eg.
@ary = DBI->data_sources("dbi:CSV:", {
f_dir => "/your/csv/tables",
# note: this class doesn't comes with DBI
sql_table_source => "DBD::File::Archive::Tar::TableSource",
# scan tarballs instead of directories
});
When you're going to implement such a DBD::File::Archive::Tar::TableSource
class, remember to add correct attributes (including C<sql_table_source>
and C<sql_data_source>) to the returned DSN's.
=head3 DBI::DBD::SqlEngine::DataSource
Provides base functionality for dealing with tables. It is primarily
designed for allowing transparent access to files on disk or already
opened (file-)streams (eg. for DBD::CSV).
Derived classes shall be restricted to similar functionality, too (eg.
opening streams from an archive, transparently compress/uncompress
log files before parsing them,
package DBI::DBD::SqlEngine::DataSource;
sub complete_table_name ($$;$)
{
my ( $self, $meta, $table, $respect_case ) = @_;
...
}
The method C<complete_table_name> is called when first setting up the
I<meta information> for a table:
"SELECT user.id, user.name, user.shell FROM user WHERE ..."
results in opening the table C<user>. First step of the table open
process is completing the name. Let's imagine you're having a L<DBD::CSV>
handle with following settings:
$dbh->{sql_identifier_case} = SQL_IC_LOWER;
$dbh->{f_ext} = '.lst';
$dbh->{f_dir} = '/data/web/adrmgr';
Those settings will result in looking for files matching
C<[Uu][Ss][Ee][Rr](\.lst)?$> in C</data/web/adrmgr/>. The scanning of the
directory C</data/web/adrmgr/> and the pattern match check will be done
in C<DBD::File::DataSource::File> by the C<complete_table_name> method.
If you intend to provide other sources of data streams than files, in
addition to provide an appropriate C<complete_table_name> method, a method
to open the resource is required:
package DBI::DBD::SqlEngine::DataSource;
sub open_data ($)
{
my ( $self, $meta, $attrs, $flags ) = @_;
...
}
After the method C<open_data> has been run successfully, the table's meta
information are in a state which allowes the table's data accessor methods
will be able to fetch/store row information. Implementation details heavily
depends on the table implementation, whereby the most famous is surely
L<DBD::File::Table|DBD::File/DBD::File::Table>.
=head1 SQL ENGINES
DBI::DBD::SqlEngine currently supports two SQL engines:
L<SQL::Statement|SQL::Statement> and
L<DBI::SQL::Nano::Statement_|DBI::SQL::Nano>. DBI::SQL::Nano supports a
I<very> limited subset of SQL statements, but it might be faster for some
very simple tasks. SQL::Statement in contrast supports a much larger subset
of ANSI SQL.
To use SQL::Statement, you need at least version 1.401 of
SQL::Statement and the environment variable C<DBI_SQL_NANO> must not
be set to a true value.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc DBI::DBD::SqlEngine
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=DBI>
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=SQL-Statement>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/DBI>
L<http://annocpan.org/dist/SQL-Statement>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/DBI>
=item * Search CPAN
L<http://search.cpan.org/dist/DBI/>
=back
=head2 Where can I go for more help?
For questions about installation or usage, please ask on the
dbi-dev@perl.org mailing list.
If you have a bug report, patch or suggestion, please open
a new report ticket on CPAN, if there is not already one for
the issue you want to report. Of course, you can mail any of the
module maintainers, but it is less likely to be missed if
it is reported on RT.
Report tickets should contain a detailed description of the bug or
enhancement request you want to report and at least an easy way to
verify/reproduce the issue and any supplied fix. Patches are always
welcome, too.
=head1 ACKNOWLEDGEMENTS
Thanks to Tim Bunce, Martin Evans and H.Merijn Brand for their continued
support while developing DBD::File, DBD::DBM and DBD::AnyData.
Their support, hints and feedback helped to design and implement this
module.
=head1 AUTHOR
This module is currently maintained by
H.Merijn Brand < h.m.brand at xs4all.nl > and
Jens Rehsack < rehsack at googlemail.com >
The original authors are Jochen Wiedmann and Jeff Zucker.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack
Copyright (C) 2004-2009 by Jeff Zucker
Copyright (C) 1998-2004 by Jochen Wiedmann
All rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=head1 SEE ALSO
L<DBI>, L<DBD::File>, L<DBD::AnyData> and L<DBD::Sys>.
=cut
DBI/DBD/Metadata.pm 0000644 00000035305 15033552504 0007621 0 ustar 00 package DBI::DBD::Metadata;
# $Id: Metadata.pm 14213 2010-06-30 19:29:18Z Martin $
#
# Copyright (c) 1997-2003 Jonathan Leffler, Jochen Wiedmann,
# Steffen Goeldner and Tim Bunce
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use Exporter ();
use Carp;
use DBI;
use DBI::Const::GetInfoType qw(%GetInfoType);
our @ISA = qw(Exporter);
our @EXPORT = qw(write_getinfo_pm write_typeinfo_pm);
our $VERSION = "2.014214";
=head1 NAME
DBI::DBD::Metadata - Generate the code and data for some DBI metadata methods
=head1 SYNOPSIS
The idea is to extract metadata information from a good quality
ODBC driver and use it to generate code and data to use in your own
DBI driver for the same database.
To generate code to support the get_info method:
perl -MDBI::DBD::Metadata -e "write_getinfo_pm('dbi:ODBC:dsn-name','user','pass','Driver')"
perl -MDBI::DBD::Metadata -e write_getinfo_pm dbi:ODBC:foo_db username password Driver
To generate code to support the type_info method:
perl -MDBI::DBD::Metadata -e "write_typeinfo_pm('dbi:ODBC:dsn-name','user','pass','Driver')"
perl -MDBI::DBD::Metadata -e write_typeinfo_pm dbi:ODBC:dsn-name user pass Driver
Where C<dbi:ODBC:dsn-name> is the connection to use to extract the
data, and C<Driver> is the name of the driver you want the code
generated for (the driver name gets embedded into the output in
numerous places).
=head1 Generating a GetInfo package for a driver
The C<write_getinfo_pm> in the DBI::DBD::Metadata module generates a
DBD::Driver::GetInfo package on standard output.
This method generates a DBD::Driver::GetInfo package from the data
source you specified in the parameter list or in the environment
variable DBI_DSN.
DBD::Driver::GetInfo should help a DBD author implement the DBI
get_info() method.
Because you are just creating this package, it is very unlikely that
DBD::Driver already provides a good implementation for get_info().
Thus you will probably connect via DBD::ODBC.
Once you are sure that it is producing reasonably sane data, you should
typically redirect the standard output to lib/DBD/Driver/GetInfo.pm, and
then hand edit the result.
Do not forget to update your Makefile.PL and MANIFEST to include this as
an extra PM file that should be installed.
If you connect via DBD::ODBC, you should use version 0.38 or greater;
Please take a critical look at the data returned!
ODBC drivers vary dramatically in their quality.
The generator assumes that most values are static and places these
values directly in the %info hash.
A few examples show the use of CODE references and the implementation
via subroutines.
It is very likely that you will have to write additional subroutines for
values depending on the session state or server version, e.g.
SQL_DBMS_VER.
A possible implementation of DBD::Driver::db::get_info() may look like:
sub get_info {
my($dbh, $info_type) = @_;
require DBD::Driver::GetInfo;
my $v = $DBD::Driver::GetInfo::info{int($info_type)};
$v = $v->($dbh) if ref $v eq 'CODE';
return $v;
}
Please replace Driver (or "<foo>") with the name of your driver.
Note that this stub function is generated for you by write_getinfo_pm
function, but you must manually transfer the code to Driver.pm.
=cut
sub write_getinfo_pm
{
my ($dsn, $user, $pass, $driver) = @_ ? @_ : @ARGV;
my $dbh = DBI->connect($dsn, $user, $pass, {RaiseError=>1});
$driver = "<foo>" unless defined $driver;
print <<PERL;
# Transfer this to ${driver}.pm
# The get_info function was automatically generated by
# DBI::DBD::Metadata::write_getinfo_pm v$DBI::DBD::Metadata::VERSION.
package DBD::${driver}::db; # This line can be removed once transferred.
sub get_info {
my(\$dbh, \$info_type) = \@_;
require DBD::${driver}::GetInfo;
my \$v = \$DBD::${driver}::GetInfo::info{int(\$info_type)};
\$v = \$v->(\$dbh) if ref \$v eq 'CODE';
return \$v;
}
# Transfer this to lib/DBD/${driver}/GetInfo.pm
# The \%info hash was automatically generated by
# DBI::DBD::Metadata::write_getinfo_pm v$DBI::DBD::Metadata::VERSION.
package DBD::${driver}::GetInfo;
use strict;
use DBD::${driver};
# Beware: not officially documented interfaces...
# use DBI::Const::GetInfoType qw(\%GetInfoType);
# use DBI::Const::GetInfoReturn qw(\%GetInfoReturnTypes \%GetInfoReturnValues);
my \$sql_driver = '${driver}';
my \$sql_ver_fmt = '%02d.%02d.%04d'; # ODBC version string: ##.##.#####
my \$sql_driver_ver = sprintf \$sql_ver_fmt, split (/\\./, \$DBD::${driver}::VERSION);
PERL
my $kw_map = 0;
{
# Informix CLI (ODBC) v3.81.0000 does not return a list of keywords.
local $\ = "\n";
local $, = "\n";
my ($kw) = $dbh->get_info($GetInfoType{SQL_KEYWORDS});
if ($kw)
{
print "\nmy \@Keywords = qw(\n";
print sort split /,/, $kw;
print ");\n\n";
print "sub sql_keywords {\n";
print q% return join ',', @Keywords;%;
print "\n}\n\n";
$kw_map = 1;
}
}
print <<'PERL';
sub sql_data_source_name {
my $dbh = shift;
return "dbi:$sql_driver:" . $dbh->{Name};
}
sub sql_user_name {
my $dbh = shift;
# CURRENT_USER is a non-standard attribute, probably undef
# Username is a standard DBI attribute
return $dbh->{CURRENT_USER} || $dbh->{Username};
}
PERL
print "\nour \%info = (\n";
foreach my $key (sort keys %GetInfoType)
{
my $num = $GetInfoType{$key};
my $val = eval { $dbh->get_info($num); };
if ($key eq 'SQL_DATA_SOURCE_NAME') {
$val = '\&sql_data_source_name';
}
elsif ($key eq 'SQL_KEYWORDS') {
$val = ($kw_map) ? '\&sql_keywords' : 'undef';
}
elsif ($key eq 'SQL_DRIVER_NAME') {
$val = "\$INC{'DBD/$driver.pm'}";
}
elsif ($key eq 'SQL_DRIVER_VER') {
$val = '$sql_driver_ver';
}
elsif ($key eq 'SQL_USER_NAME') {
$val = '\&sql_user_name';
}
elsif (not defined $val) {
$val = 'undef';
}
elsif ($val eq '') {
$val = "''";
}
elsif ($val =~ /\D/) {
$val =~ s/\\/\\\\/g;
$val =~ s/'/\\'/g;
$val = "'$val'";
}
printf "%s %5d => %-30s # %s\n", (($val eq 'undef') ? '#' : ' '), $num, "$val,", $key;
}
print ");\n\n1;\n\n__END__\n";
}
=head1 Generating a TypeInfo package for a driver
The C<write_typeinfo_pm> function in the DBI::DBD::Metadata module generates
on standard output the data needed for a driver's type_info_all method.
It also provides default implementations of the type_info_all
method for inclusion in the driver's main implementation file.
The driver parameter is the name of the driver for which the methods
will be generated; for the sake of examples, this will be "Driver".
Typically, the dsn parameter will be of the form "dbi:ODBC:odbc_dsn",
where the odbc_dsn is a DSN for one of the driver's databases.
The user and pass parameters are the other optional connection
parameters that will be provided to the DBI connect method.
Once you are sure that it is producing reasonably sane data, you should
typically redirect the standard output to lib/DBD/Driver/TypeInfo.pm,
and then hand edit the result if necessary.
Do not forget to update your Makefile.PL and MANIFEST to include this as
an extra PM file that should be installed.
Please take a critical look at the data returned!
ODBC drivers vary dramatically in their quality.
The generator assumes that all the values are static and places these
values directly in the %info hash.
A possible implementation of DBD::Driver::type_info_all() may look like:
sub type_info_all {
my ($dbh) = @_;
require DBD::Driver::TypeInfo;
return [ @$DBD::Driver::TypeInfo::type_info_all ];
}
Please replace Driver (or "<foo>") with the name of your driver.
Note that this stub function is generated for you by the write_typeinfo_pm
function, but you must manually transfer the code to Driver.pm.
=cut
# These two are used by fmt_value...
my %dbi_inv;
my %sql_type_inv;
#-DEBUGGING-#
#sub print_hash
#{
# my ($name, %hash) = @_;
# print "Hash: $name\n";
# foreach my $key (keys %hash)
# {
# print "$key => $hash{$key}\n";
# }
#}
#-DEBUGGING-#
sub inverse_hash
{
my (%hash) = @_;
my (%inv);
foreach my $key (keys %hash)
{
my $val = $hash{$key};
die "Double mapping for key value $val ($inv{$val}, $key)!"
if (defined $inv{$val});
$inv{$val} = $key;
}
return %inv;
}
sub fmt_value
{
my ($num, $val) = @_;
if (!defined $val)
{
$val = "undef";
}
elsif ($val !~ m/^[-+]?\d+$/)
{
# All the numbers in type_info_all are integers!
# Anything that isn't an integer is a string.
# Ensure that no double quotes screw things up.
$val =~ s/"/\\"/g if ($val =~ m/"/o);
$val = qq{"$val"};
}
elsif ($dbi_inv{$num} =~ m/^(SQL_)?DATA_TYPE$/)
{
# All numeric...
$val = $sql_type_inv{$val}
if (defined $sql_type_inv{$val});
}
return $val;
}
sub write_typeinfo_pm
{
my ($dsn, $user, $pass, $driver) = @_ ? @_ : @ARGV;
my $dbh = DBI->connect($dsn, $user, $pass, {AutoCommit=>1, RaiseError=>1});
$driver = "<foo>" unless defined $driver;
print <<PERL;
# Transfer this to ${driver}.pm
# The type_info_all function was automatically generated by
# DBI::DBD::Metadata::write_typeinfo_pm v$DBI::DBD::Metadata::VERSION.
package DBD::${driver}::db; # This line can be removed once transferred.
sub type_info_all
{
my (\$dbh) = \@_;
require DBD::${driver}::TypeInfo;
return [ \@\$DBD::${driver}::TypeInfo::type_info_all ];
}
# Transfer this to lib/DBD/${driver}/TypeInfo.pm.
# Don't forget to add version and intellectual property control information.
# The \%type_info_all hash was automatically generated by
# DBI::DBD::Metadata::write_typeinfo_pm v$DBI::DBD::Metadata::VERSION.
package DBD::${driver}::TypeInfo;
{
require Exporter;
require DynaLoader;
\@ISA = qw(Exporter DynaLoader);
\@EXPORT = qw(type_info_all);
use DBI qw(:sql_types);
PERL
# Generate SQL type name mapping hashes.
# See code fragment in DBI specification.
my %sql_type_map;
foreach (@{$DBI::EXPORT_TAGS{sql_types}})
{
no strict 'refs';
$sql_type_map{$_} = &{"DBI::$_"}();
$sql_type_inv{$sql_type_map{$_}} = $_;
}
#-DEBUG-# print_hash("sql_type_map", %sql_type_map);
#-DEBUG-# print_hash("sql_type_inv", %sql_type_inv);
my %dbi_map =
(
TYPE_NAME => 0,
DATA_TYPE => 1,
COLUMN_SIZE => 2,
LITERAL_PREFIX => 3,
LITERAL_SUFFIX => 4,
CREATE_PARAMS => 5,
NULLABLE => 6,
CASE_SENSITIVE => 7,
SEARCHABLE => 8,
UNSIGNED_ATTRIBUTE => 9,
FIXED_PREC_SCALE => 10,
AUTO_UNIQUE_VALUE => 11,
LOCAL_TYPE_NAME => 12,
MINIMUM_SCALE => 13,
MAXIMUM_SCALE => 14,
SQL_DATA_TYPE => 15,
SQL_DATETIME_SUB => 16,
NUM_PREC_RADIX => 17,
INTERVAL_PRECISION => 18,
);
#-DEBUG-# print_hash("dbi_map", %dbi_map);
%dbi_inv = inverse_hash(%dbi_map);
#-DEBUG-# print_hash("dbi_inv", %dbi_inv);
my $maxlen = 0;
foreach my $key (keys %dbi_map)
{
$maxlen = length($key) if length($key) > $maxlen;
}
# Print the name/value mapping entry in the type_info_all array;
my $fmt = " \%-${maxlen}s => \%2d,\n";
my $numkey = 0;
my $maxkey = 0;
print " \$type_info_all = [\n {\n";
foreach my $i (sort { $a <=> $b } keys %dbi_inv)
{
printf($fmt, $dbi_inv{$i}, $i);
$numkey++;
$maxkey = $i;
}
print " },\n";
print STDERR "### WARNING - Non-dense set of keys ($numkey keys, $maxkey max key)\n"
unless $numkey = $maxkey + 1;
my $h = $dbh->type_info_all;
my @tia = @$h;
my %odbc_map = map { uc $_ => $tia[0]->{$_} } keys %{$tia[0]};
shift @tia; # Remove the mapping reference.
my $numtyp = $#tia;
#-DEBUG-# print_hash("odbc_map", %odbc_map);
# In theory, the key/number mapping sequence for %dbi_map
# should be the same as the one from the ODBC driver. However, to
# prevent the possibility of mismatches, and to deal with older
# missing attributes or unexpected new ones, we chase back through
# the %dbi_inv and %odbc_map hashes, generating @dbi_to_odbc
# to map our new key number to the old one.
# Report if @dbi_to_odbc is not an identity mapping.
my @dbi_to_odbc;
foreach my $num (sort { $a <=> $b } keys %dbi_inv)
{
# Find the name in %dbi_inv that matches this index number.
my $dbi_key = $dbi_inv{$num};
#-DEBUG-# print "dbi_key = $dbi_key\n";
#-DEBUG-# print "odbc_key = $odbc_map{$dbi_key}\n";
# Find the index in %odbc_map that has this key.
$dbi_to_odbc[$num] = (defined $odbc_map{$dbi_key}) ? $odbc_map{$dbi_key} : undef;
}
# Determine the length of the longest formatted value in each field
my @len;
for (my $i = 0; $i <= $numtyp; $i++)
{
my @odbc_val = @{$tia[$i]};
for (my $num = 0; $num <= $maxkey; $num++)
{
# Find the value of the entry in the @odbc_val array.
my $val = (defined $dbi_to_odbc[$num]) ? $odbc_val[$dbi_to_odbc[$num]] : undef;
$val = fmt_value($num, $val);
#-DEBUG-# print "val = $val\n";
$val = "$val,";
$len[$num] = length($val) if !defined $len[$num] || length($val) > $len[$num];
}
}
# Generate format strings to left justify each string in maximum field width.
my @fmt;
for (my $i = 0; $i <= $maxkey; $i++)
{
$fmt[$i] = "%-$len[$i]s";
#-DEBUG-# print "fmt[$i] = $fmt[$i]\n";
}
# Format the data from type_info_all
for (my $i = 0; $i <= $numtyp; $i++)
{
my @odbc_val = @{$tia[$i]};
print " [ ";
for (my $num = 0; $num <= $maxkey; $num++)
{
# Find the value of the entry in the @odbc_val array.
my $val = (defined $dbi_to_odbc[$num]) ? $odbc_val[$dbi_to_odbc[$num]] : undef;
$val = fmt_value($num, $val);
printf $fmt[$num], "$val,";
}
print " ],\n";
}
print " ];\n\n 1;\n}\n\n__END__\n";
}
1;
__END__
=head1 AUTHORS
Jonathan Leffler <jleffler@us.ibm.com> (previously <jleffler@informix.com>),
Jochen Wiedmann <joe@ispsoft.de>,
Steffen Goeldner <sgoeldner@cpan.org>,
and Tim Bunce <dbi-users@perl.org>.
=cut
DBI/DBD/SqlEngine/Developers.pod 0000644 00000065312 15033552504 0012245 0 ustar 00 =head1 NAME
DBI::DBD::SqlEngine::Developers - Developers documentation for DBI::DBD::SqlEngine
=head1 SYNOPSIS
package DBD::myDriver;
use base qw(DBI::DBD::SqlEngine);
sub driver
{
...
my $drh = $proto->SUPER::driver($attr);
...
return $drh->{class};
}
sub CLONE { ... }
package DBD::myDriver::dr;
@ISA = qw(DBI::DBD::SqlEngine::dr);
sub data_sources { ... }
...
package DBD::myDriver::db;
@ISA = qw(DBI::DBD::SqlEngine::db);
sub init_valid_attributes { ... }
sub init_default_attributes { ... }
sub set_versions { ... }
sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; ... }
sub validate_FETCH_attr { my ($dbh, $attrib) = @_; ... }
sub get_myd_versions { ... }
sub get_avail_tables { ... }
package DBD::myDriver::st;
@ISA = qw(DBI::DBD::SqlEngine::st);
sub FETCH { ... }
sub STORE { ... }
package DBD::myDriver::Statement;
@ISA = qw(DBI::DBD::SqlEngine::Statement);
sub open_table { ... }
package DBD::myDriver::Table;
@ISA = qw(DBI::DBD::SqlEngine::Table);
my %reset_on_modify = (
myd_abc => "myd_foo",
myd_mno => "myd_bar",
);
__PACKAGE__->register_reset_on_modify( \%reset_on_modify );
my %compat_map = (
abc => 'foo_abc',
xyz => 'foo_xyz',
);
__PACKAGE__->register_compat_map( \%compat_map );
sub bootstrap_table_meta { ... }
sub init_table_meta { ... }
sub table_meta_attr_changed { ... }
sub open_data { ... }
sub new { ... }
sub fetch_row { ... }
sub push_row { ... }
sub push_names { ... }
sub seek { ... }
sub truncate { ... }
sub drop { ... }
# optimize the SQL engine by add one or more of
sub update_current_row { ... }
# or
sub update_specific_row { ... }
# or
sub update_one_row { ... }
# or
sub insert_new_row { ... }
# or
sub delete_current_row { ... }
# or
sub delete_one_row { ... }
=head1 DESCRIPTION
This document describes the interface of DBI::DBD::SqlEngine for DBD
developers who write DBI::DBD::SqlEngine based DBI drivers. It supplements
L<DBI::DBD> and L<DBI::DBD::SqlEngine::HowTo>, which you should read first.
=head1 CLASSES
Each DBI driver must provide a package global C<< driver >> method and
three DBI related classes:
=over 4
=item DBI::DBD::SqlEngine::dr
Driver package, contains the methods DBI calls indirectly via DBI
interface:
DBI->connect ('DBI:DBM:', undef, undef, {})
# invokes
package DBD::DBM::dr;
@DBD::DBM::dr::ISA = qw(DBI::DBD::SqlEngine::dr);
sub connect ($$;$$$)
{
...
}
Similar for C<data_sources ()> and C<disconnect_all()>.
Pure Perl DBI drivers derived from DBI::DBD::SqlEngine usually don't need to
override any of the methods provided through the DBD::XXX::dr package.
However if you need additional initialization not fitting in
C<init_valid_attributes()> and C<init_default_attributes()> of you're ::db
class, the connect method might be the final place to be modified.
=item DBI::DBD::SqlEngine::db
Contains the methods which are called through DBI database handles
(C<< $dbh >>). e.g.,
$sth = $dbh->prepare ("select * from foo");
# returns the f_encoding setting for table foo
$dbh->csv_get_meta ("foo", "f_encoding");
DBI::DBD::SqlEngine provides the typical methods required here. Developers who
write DBI drivers based on DBI::DBD::SqlEngine need to override the methods
C<< set_versions >> and C<< init_valid_attributes >>.
=item DBI::DBD::SqlEngine::TieMeta;
Provides the tie-magic for C<< $dbh->{$drv_pfx . "_meta"} >>. Routes
C<STORE> through C<< $drv->set_sql_engine_meta() >> and C<FETCH> through
C<< $drv->get_sql_engine_meta() >>. C<DELETE> is not supported, you have
to execute a C<DROP TABLE> statement, where applicable.
=item DBI::DBD::SqlEngine::TieTables;
Provides the tie-magic for tables in C<< $dbh->{$drv_pfx . "_meta"} >>.
Routes C<STORE> though C<< $tblClass->set_table_meta_attr() >> and C<FETCH>
though C<< $tblClass->get_table_meta_attr() >>. C<DELETE> removes an
attribute from the I<meta object> retrieved by
C<< $tblClass->get_table_meta() >>.
=item DBI::DBD::SqlEngine::st
Contains the methods to deal with prepared statement handles. e.g.,
$sth->execute () or die $sth->errstr;
=item DBI::DBD::SqlEngine::TableSource;
Base class for 3rd party table sources:
$dbh->{sql_table_source} = "DBD::Foo::TableSource";
=item DBI::DBD::SqlEngine::DataSource;
Base class for 3rd party data sources:
$dbh->{sql_data_source} = "DBD::Foo::DataSource";
=item DBI::DBD::SqlEngine::Statement;
Base class for derived drivers statement engine. Implements C<open_table>.
=item DBI::DBD::SqlEngine::Table;
Contains tailoring between SQL engine's requirements and
C<DBI::DBD::SqlEngine> magic for finding the right tables and storage.
Builds bridges between C<sql_meta> handling of C<DBI::DBD::SqlEngine::db>,
table initialization for SQL engines and I<meta object>'s attribute
management for derived drivers.
=back
=head2 DBI::DBD::SqlEngine
This is the main package containing the routines to initialize
DBI::DBD::SqlEngine based DBI drivers. Primarily the
C<< DBI::DBD::SqlEngine::driver >> method is invoked, either directly
from DBI when the driver is initialized or from the derived class.
package DBD::DBM;
use base qw( DBI::DBD::SqlEngine );
sub driver
{
my ( $class, $attr ) = @_;
...
my $drh = $class->SUPER::driver( $attr );
...
return $drh;
}
It is not necessary to implement your own driver method as long as
additional initialization (e.g. installing more private driver
methods) is not required. You do not need to call C<< setup_driver >>
as DBI::DBD::SqlEngine takes care of it.
=head2 DBI::DBD::SqlEngine::dr
The driver package contains the methods DBI calls indirectly via the DBI
interface (see L<DBI/DBI Class Methods>).
DBI::DBD::SqlEngine based DBI drivers usually do not need to implement anything here,
it is enough to do the basic initialization:
package DBD:XXX::dr;
@DBD::XXX::dr::ISA = qw (DBI::DBD::SqlEngine::dr);
$DBD::XXX::dr::imp_data_size = 0;
$DBD::XXX::dr::data_sources_attr = undef;
$DBD::XXX::ATTRIBUTION = "DBD::XXX $DBD::XXX::VERSION by Hans Mustermann";
=head3 Methods provided by C<< DBI::DBD::SqlEngine::dr >>:
=over 4
=item connect
Supervises the driver bootstrap when calling
DBI->connect( "dbi:Foo", , , { ... } );
First it instantiates a new driver using C<DBI::_new_dbh>. After that,
initial bootstrap of the newly instantiated driver is done by
$dbh->func( 0, "init_default_attributes" );
The first argument (C<0>) signals that this is the very first call to
C<init_default_attributes>. Modern drivers understand that and do early
stage setup here after calling
package DBD::Foo::db;
our @DBD::Foo::db::ISA = qw(DBI::DBD::SqlEngine::db);
sub init_default_attributes
{
my ($dbh, $phase) = @_;
$dbh->SUPER::init_default_attributes($phase);
...; # own setup code, maybe separated by phases
}
When the C<$phase> argument is passed down until
C<DBI::DBD::SqlEngine::db::init_default_attributes>, C<connect()> recognizes
a I<modern> driver and initializes the attributes from I<DSN> and I<$attr>
arguments passed via C<< DBI->connect( $dsn, $user, $pass, \%attr ) >>.
At the end of the attribute initialization after I<phase 0>, C<connect()>
invoked C<init_default_attributes> again for I<phase 1>:
$dbh->func( 1, "init_default_attributes" );
=item data_sources
Returns a list of I<DSN>'s using the C<data_sources> method of the
class specified in C<< $dbh->{sql_table_source} >> or via C<\%attr>:
@ary = DBI->data_sources($driver);
@ary = DBI->data_sources($driver, \%attr);
=item disconnect_all
C<DBI::DBD::SqlEngine> doesn't have an overall driver cache, so nothing
happens here at all.
=back
=head2 DBI::DBD::SqlEngine::db
This package defines the database methods, which are called via the DBI
database handle C<< $dbh >>.
=head3 Methods provided by C<< DBI::DBD::SqlEngine::db >>:
=over 4
=item ping
Simply returns the content of the C<< Active >> attribute. Override
when your driver needs more complicated actions here.
=item prepare
Prepares a new SQL statement to execute. Returns a statement handle,
C<< $sth >> - instance of the DBD:XXX::st. It is neither required nor
recommended to override this method.
=item validate_FETCH_attr
Called by C<FETCH> to allow inherited drivers do their own attribute
name validation. Calling convention is similar to C<FETCH> and the
return value is the approved attribute name.
return $validated_attribute_name;
In case of validation fails (e.g. accessing private attribute or similar),
C<validate_FETCH_attr> is permitted to throw an exception.
=item FETCH
Fetches an attribute of a DBI database object. Private handle attributes
must have a prefix (this is mandatory). If a requested attribute is
detected as a private attribute without a valid prefix, the driver prefix
(written as C<$drv_prefix>) is added.
The driver prefix is extracted from the attribute name and verified against
C<< $dbh->{ $drv_prefix . "valid_attrs" } >> (when it exists). If the
requested attribute value is not listed as a valid attribute, this method
croaks. If the attribute is valid and readonly (listed in C<< $dbh->{
$drv_prefix . "readonly_attrs" } >> when it exists), a real copy of the
attribute value is returned. So it's not possible to modify
C<f_valid_attrs> from outside of DBI::DBD::SqlEngine::db or a derived class.
=item validate_STORE_attr
Called by C<STORE> to allow inherited drivers do their own attribute
name validation. Calling convention is similar to C<STORE> and the
return value is the approved attribute name followed by the approved
new value.
return ($validated_attribute_name, $validated_attribute_value);
In case of validation fails (e.g. accessing private attribute or similar),
C<validate_STORE_attr> is permitted to throw an exception
(C<DBI::DBD::SqlEngine::db::validate_STORE_attr> throws an exception when
someone tries to assign value other than C<SQL_IC_UPPER .. SQL_IC_MIXED>
to C<< $dbh->{sql_identifier_case} >> or
C<< $dbh->{sql_quoted_identifier_case} >>).
=item STORE
Stores a database private attribute. Private handle attributes must have a
prefix (this is mandatory). If a requested attribute is detected as a private
attribute without a valid prefix, the driver prefix (written as
C<$drv_prefix>) is added. If the database handle has an attribute
C<${drv_prefix}_valid_attrs> - for attribute names which are not listed in
that hash, this method croaks. If the database handle has an attribute
C<${drv_prefix}_readonly_attrs>, only attributes which are not listed there
can be stored (once they are initialized). Trying to overwrite such an
immutable attribute forces this method to croak.
An example of a valid attributes list can be found in
C<< DBI::DBD::SqlEngine::db::init_valid_attributes >>.
=item set_versions
This method sets the attributes C<< f_version >>, C<< sql_nano_version >>,
C<< sql_statement_version >> and (if not prohibited by a restrictive
C<< ${prefix}_valid_attrs >>) C<< ${prefix}_version >>.
This method is called at the end of the C<< connect () >> phase.
When overriding this method, do not forget to invoke the superior one.
=item init_valid_attributes
This method is called after the database handle is instantiated as the
first attribute initialization.
C<< DBI::DBD::SqlEngine::db::init_valid_attributes >> initializes the
attributes C<sql_valid_attrs> and C<sql_readonly_attrs>.
When overriding this method, do not forget to invoke the superior one,
preferably before doing anything else.
=item init_default_attributes
This method is called after the database handle is instantiated to
initialize the default attributes. It expects one argument: C<$phase>.
If C<$phase> is not given, C<connect> of C<DBI::DBD::SqlEngine::dr>
expects this is an old-fashioned driver which isn't capable of multi-phased
initialization.
C<< DBI::DBD::SqlEngine::db::init_default_attributes >> initializes the
attributes C<sql_identifier_case>, C<sql_quoted_identifier_case>,
C<sql_handler>, C<sql_init_order>, C<sql_meta>, C<sql_engine_version>,
C<sql_nano_version> and C<sql_statement_version> when L<SQL::Statement>
is available.
It sets C<sql_init_order> to the given C<$phase>.
When the derived implementor class provides the attribute to validate
attributes (e.g. C<< $dbh->{dbm_valid_attrs} = {...}; >>) or the attribute
containing the immutable attributes (e.g. C<< $dbh->{dbm_readonly_attrs}
= {...}; >>), the attributes C<drv_valid_attrs>, C<drv_readonly_attrs> and
C<drv_version> are added (when available) to the list of valid and
immutable attributes (where C<drv_> is interpreted as the driver prefix).
=item get_versions
This method is called by the code injected into the instantiated driver to
provide the user callable driver method C<< ${prefix}versions >> (e.g.
C<< dbm_versions >>, C<< csv_versions >>, ...).
The DBI::DBD::SqlEngine implementation returns all version information known by
DBI::DBD::SqlEngine (e.g. DBI version, Perl version, DBI::DBD::SqlEngine version and
the SQL handler version).
C<get_versions> takes the C<$dbh> as the first argument and optionally a
second argument containing a table name. The second argument is not
evaluated in C<< DBI::DBD::SqlEngine::db::get_versions >> itself - but
might be in the future.
If the derived implementor class provides a method named
C<get_${drv_prefix}versions>, this is invoked and the return value of
it is associated to the derived driver name:
if (my $dgv = $dbh->{ImplementorClass}->can ("get_" . $drv_prefix . "versions") {
(my $derived_driver = $dbh->{ImplementorClass}) =~ s/::db$//;
$versions{$derived_driver} = &$dgv ($dbh, $table);
}
Override it to add more version information about your module, (e.g.
some kind of parser version in case of DBD::CSV, ...), if one line is not
enough room to provide all relevant information.
=item sql_parser_object
Returns a L<SQL::Parser> instance, when C<< sql_handler >> is set to
"SQL::Statement". The parser instance is stored in C<< sql_parser_object >>.
It is not recommended to override this method.
=item disconnect
Disconnects from a database. All local table information is discarded and
the C<< Active >> attribute is set to 0.
=item type_info_all
Returns information about all the types supported by DBI::DBD::SqlEngine.
=item table_info
Returns a statement handle which is prepared to deliver information about
all known tables.
=item list_tables
Returns a list of all known table names.
=item quote
Quotes a string for use in SQL statements.
=item commit
Warns about a useless call (if warnings enabled) and returns.
DBI::DBD::SqlEngine is typically a driver which commits every action
instantly when executed.
=item rollback
Warns about a useless call (if warnings enabled) and returns.
DBI::DBD::SqlEngine is typically a driver which commits every action
instantly when executed.
=back
=head3 Attributes used by C<< DBI::DBD::SqlEngine::db >>:
This section describes attributes which are important to developers of DBI
Database Drivers derived from C<DBI::DBD::SqlEngine>.
=over 4
=item sql_init_order
This attribute contains a hash with priorities as key and an array
containing the C<$dbh> attributes to be initialized during before/after
other attributes.
C<DBI::DBD::SqlEngine> initializes following attributes:
$dbh->{sql_init_order} = {
0 => [qw( Profile RaiseError PrintError AutoCommit )],
90 => [ "sql_meta", $dbh->{$drv_pfx_meta} ? $dbh->{$drv_pfx_meta} : () ]
}
The default priority of not listed attribute keys is C<50>. It is well
known that a lot of attributes needed to be set before some table settings
are initialized. For example, for L<DBD::DBM>, when using
my $dbh = DBI->connect( "dbi:DBM:", undef, undef, {
f_dir => "/path/to/dbm/databases",
dbm_type => "BerkeleyDB",
dbm_mldbm => "JSON", # use MLDBM::Serializer::JSON
dbm_tables => {
quick => {
dbm_type => "GDBM_File",
dbm_MLDBM => "FreezeThaw"
}
}
});
This defines a known table C<quick> which uses the L<GDBM_File> backend and
L<FreezeThaw> as serializer instead of the overall default L<BerkeleyDB> and
L<JSON>. B<But> all files containing the table data have to be searched in
C<< $dbh->{f_dir} >>, which requires C<< $dbh->{f_dir} >> must be initialized
before C<< $dbh->{sql_meta}->{quick} >> is initialized by
C<bootstrap_table_meta> method of L</DBI::DBD::SqlEngine::Table> to get
C<< $dbh->{sql_meta}->{quick}->{f_dir} >> being initialized properly.
=item sql_init_phase
This attribute is only set during the initialization steps of the DBI
Database Driver. It contains the value of the currently run initialization
phase. Currently supported phases are I<phase 0> and I<phase 1>. This
attribute is set in C<init_default_attributes> and removed in C<init_done>.
=item sql_engine_in_gofer
This value has a true value in case of this driver is operated via
L<DBD::Gofer>. The impact of being operated via Gofer is a read-only
driver (not read-only databases!), so you cannot modify any attributes
later - neither any table settings. B<But> you won't get an error in
cases you modify table attributes, so please carefully watch
C<sql_engine_in_gofer>.
=item sql_table_source
Names a class which is responsible for delivering I<data sources> and
I<available tables> (Database Driver related). I<data sources> here
refers to L<DBI/data_sources>, not C<sql_data_source>.
See L</DBI::DBD::SqlEngine::TableSource> for details.
=item sql_data_source
Name a class which is responsible for handling table resources open
and completing table names requested via SQL statements.
See L</DBI::DBD::SqlEngine::DataSource> for details.
=item sql_dialect
Controls the dialect understood by SQL::Parser. Possible values (delivery
state of SQL::Statement):
* ANSI
* CSV
* AnyData
Defaults to "CSV". Because an SQL::Parser is instantiated only once and
SQL::Parser doesn't allow one to modify the dialect once instantiated,
it's strongly recommended to set this flag before any statement is
executed (best place is connect attribute hash).
=back
=head2 DBI::DBD::SqlEngine::st
Contains the methods to deal with prepared statement handles:
=over 4
=item bind_param
Common routine to bind placeholders to a statement for execution. It
is dangerous to override this method without detailed knowledge about
the DBI::DBD::SqlEngine internal storage structure.
=item execute
Executes a previously prepared statement (with placeholders, if any).
=item finish
Finishes a statement handle, discards all buffered results. The prepared
statement is not discarded so the statement can be executed again.
=item fetch
Fetches the next row from the result-set. This method may be rewritten
in a later version and if it's overridden in a derived class, the
derived implementation should not rely on the storage details.
=item fetchrow_arrayref
Alias for C<< fetch >>.
=item FETCH
Fetches statement handle attributes. Supported attributes (for full overview
see L<DBI/Statement Handle Attributes>) are C<NAME>, C<TYPE>, C<PRECISION>
and C<NULLABLE>. Each column is returned as C<NULLABLE> which might be wrong
depending on the derived backend storage. If the statement handle has
private attributes, they can be fetched using this method, too. B<Note> that
statement attributes are not associated with any table used in this statement.
This method usually requires extending in a derived implementation.
See L<DBD::CSV> or L<DBD::DBM> for some example.
=item STORE
Allows storing of statement private attributes. No special handling is
currently implemented here.
=item rows
Returns the number of rows affected by the last execute. This method might
return C<undef>.
=back
=head2 DBI::DBD::SqlEngine::TableSource
Provides data sources and table information on database driver and database
handle level.
package DBI::DBD::SqlEngine::TableSource;
sub data_sources ($;$)
{
my ( $class, $drh, $attrs ) = @_;
...
}
sub avail_tables
{
my ( $class, $drh ) = @_;
...
}
The C<data_sources> method is called when the user invokes any of the
following:
@ary = DBI->data_sources($driver);
@ary = DBI->data_sources($driver, \%attr);
@ary = $dbh->data_sources();
@ary = $dbh->data_sources(\%attr);
The C<avail_tables> method is called when the user invokes any of the
following:
@names = $dbh->tables( $catalog, $schema, $table, $type );
$sth = $dbh->table_info( $catalog, $schema, $table, $type );
$sth = $dbh->table_info( $catalog, $schema, $table, $type, \%attr );
$dbh->func( "list_tables" );
Every time where an C<\%attr> argument can be specified, this C<\%attr>
object's C<sql_table_source> attribute is preferred over the C<$dbh>
attribute or the driver default.
=head2 DBI::DBD::SqlEngine::DataSource
Provides base functionality for dealing with tables. It is primarily
designed for allowing transparent access to files on disk or already
opened (file-)streams (e.g. for DBD::CSV).
Derived classes shall be restricted to similar functionality, too (e.g.
opening streams from an archive, transparently compress/uncompress
log files before parsing them,
package DBI::DBD::SqlEngine::DataSource;
sub complete_table_name ($$;$)
{
my ( $self, $meta, $table, $respect_case ) = @_;
...
}
The method C<complete_table_name> is called when first setting up the
I<meta information> for a table:
"SELECT user.id, user.name, user.shell FROM user WHERE ..."
results in opening the table C<user>. First step of the table open
process is completing the name. Let's imagine you're having a L<DBD::CSV>
handle with following settings:
$dbh->{sql_identifier_case} = SQL_IC_LOWER;
$dbh->{f_ext} = '.lst';
$dbh->{f_dir} = '/data/web/adrmgr';
Those settings will result in looking for files matching
C<[Uu][Ss][Ee][Rr](\.lst)?$> in C</data/web/adrmgr/>. The scanning of the
directory C</data/web/adrmgr/> and the pattern match check will be done
in C<DBD::File::DataSource::File> by the C<complete_table_name> method.
If you intend to provide other sources of data streams than files, in
addition to provide an appropriate C<complete_table_name> method, a method
to open the resource is required:
package DBI::DBD::SqlEngine::DataSource;
sub open_data ($)
{
my ( $self, $meta, $attrs, $flags ) = @_;
...
}
After the method C<open_data> has been run successfully, the table's meta
information are in a state which allows the table's data accessor methods
will be able to fetch/store row information. Implementation details heavily
depends on the table implementation, whereby the most famous is surely
L<DBD::File::Table|DBD::File/DBD::File::Table>.
=head2 DBI::DBD::SqlEngine::Statement
Derives from DBI::SQL::Nano::Statement for unified naming when deriving
new drivers. No additional feature is provided from here.
=head2 DBI::DBD::SqlEngine::Table
Derives from DBI::SQL::Nano::Table for unified naming when deriving
new drivers.
You should consult the documentation of C<< SQL::Eval::Table >> (see
L<SQL::Eval>) to get more information about the abstract methods of the
table's base class you have to override and a description of the table
meta information expected by the SQL engines.
=over 4
=item bootstrap_table_meta
Initializes a table meta structure. Can be safely overridden in a
derived class, as long as the C<< SUPER >> method is called at the end
of the overridden method.
It copies the following attributes from the database into the table meta data
C<< $dbh->{ReadOnly} >> into C<< $meta->{readonly} >>, C<sql_identifier_case>
and C<sql_data_source> and makes them sticky to the table.
This method should be called before you attempt to map between file
name and table name to ensure the correct directory, extension etc. are
used.
=item init_table_meta
Initializes more attributes of the table meta data - usually more
expensive ones (e.g. those which require class instantiations) - when
the file name and the table name could mapped.
=item get_table_meta
Returns the table meta data. If there are none for the required table,
a new one is initialized. When after bootstrapping a new I<table_meta>
and L<completing the table name|/DBI::DBD::SqlEngine::DataSource> a
mapping can be established between an existing I<table_meta> and the
new bootstrapped one, the already existing is used and a mapping
shortcut between the recent used table name and the already known
table name is hold in C<< $dbh->{sql_meta_map} >>. When it fails,
nothing is returned. On success, the name of the table and the meta data
structure is returned.
=item get_table_meta_attr
Returns a single attribute from the table meta data. If the attribute
name appears in C<%compat_map>, the attribute name is updated from
there.
=item set_table_meta_attr
Sets a single attribute in the table meta data. If the attribute
name appears in C<%compat_map>, the attribute name is updated from
there.
=item table_meta_attr_changed
Called when an attribute of the meta data is modified.
If the modified attribute requires to reset a calculated attribute, the
calculated attribute is reset (deleted from meta data structure) and
the I<initialized> flag is removed, too. The decision is made based on
C<%register_reset_on_modify>.
=item register_reset_on_modify
Allows C<set_table_meta_attr> to reset meta attributes when special
attributes are modified. For DBD::File, modifying one of C<f_file>, C<f_dir>,
C<f_ext> or C<f_lockfile> will reset C<f_fqfn>. DBD::DBM extends the
list for C<dbm_type> and C<dbm_mldbm> to reset the value of C<dbm_tietype>.
If your DBD has calculated values in the meta data area, then call
C<register_reset_on_modify>:
my %reset_on_modify = ( "xxx_foo" => "xxx_bar" );
__PACKAGE__->register_reset_on_modify( \%reset_on_modify );
=item register_compat_map
Allows C<get_table_meta_attr> and C<set_table_meta_attr> to update the
attribute name to the current favored one:
# from DBD::DBM
my %compat_map = ( "dbm_ext" => "f_ext" );
__PACKAGE__->register_compat_map( \%compat_map );
=item open_data
Called to open the table's data storage. This is silently forwarded
to C<< $meta->{sql_data_source}->open_data() >>.
After this is done, a derived class might add more steps in an overridden
C<< open_file >> method.
=item new
Instantiates the table. This is done in 3 steps:
1. get the table meta data
2. open the data file
3. bless the table data structure using inherited constructor new
It is not recommended to override the constructor of the table class.
Find a reasonable place to add you extensions in one of the above four
methods.
=back
=head1 AUTHOR
The module DBI::DBD::SqlEngine is currently maintained by
H.Merijn Brand < h.m.brand at xs4all.nl > and
Jens Rehsack < rehsack at googlemail.com >
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2010 by H.Merijn Brand & Jens Rehsack
All rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=cut
DBI/DBD/SqlEngine/HowTo.pod 0000644 00000025113 15033552504 0011170 0 ustar 00 =head1 NAME
DBI::DBD::SqlEngine::HowTo - Guide to create DBI::DBD::SqlEngine based driver
=head1 SYNOPSIS
perldoc DBI::DBD::SqlEngine::HowTo
perldoc DBI
perldoc DBI::DBD
perldoc DBI::DBD::SqlEngine::Developers
perldoc SQL::Eval
perldoc DBI::DBD::SqlEngine
perldoc DBI::DBD::SqlEngine::HowTo
perldoc SQL::Statement::Embed
=head1 DESCRIPTION
This document provides a step-by-step guide, how to create a new
C<DBI::DBD::SqlEngine> based DBD. It expects that you carefully read the
L<DBI> documentation and that you're familiar with L<DBI::DBD> and had
read and understood L<DBD::ExampleP>.
This document addresses experienced developers who are really sure that
they need to invest time when writing a new DBI Driver. Writing a DBI
Driver is neither a weekend project nor an easy job for hobby coders
after work. Expect one or two man-month of time for the first start.
Those who are still reading, should be able to sing the rules of
L<DBI::DBD/CREATING A NEW DRIVER>.
=head1 CREATING DRIVER CLASSES
Do you have an entry in DBI's DBD registry? DBI::DBD::SqlEngine expect
having a unique prefix for every driver class in inheritance chain.
It's easy to get a prefix - just drop the DBI team a note
(L<DBI/GETTING_HELP>). If you want for some reason hide your work, take
a look at L<Class::Method::Modifiers> how to wrap a private prefix method
around existing C<driver_prefix>.
For this guide, a prefix of C<foo_> is assumed.
=head2 Sample Skeleton
package DBD::Foo;
use strict;
use warnings;
use vars qw($VERSION);
use base qw(DBI::DBD::SqlEngine);
use DBI ();
$VERSION = "0.001";
package DBD::Foo::dr;
use vars qw(@ISA $imp_data_size);
@ISA = qw(DBI::DBD::SqlEngine::dr);
$imp_data_size = 0;
package DBD::Foo::db;
use vars qw(@ISA $imp_data_size);
@ISA = qw(DBI::DBD::SqlEngine::db);
$imp_data_size = 0;
package DBD::Foo::st;
use vars qw(@ISA $imp_data_size);
@ISA = qw(DBI::DBD::SqlEngine::st);
$imp_data_size = 0;
package DBD::Foo::Statement;
use vars qw(@ISA);
@ISA = qw(DBI::DBD::SqlEngine::Statement);
package DBD::Foo::Table;
use vars qw(@ISA);
@ISA = qw(DBI::DBD::SqlEngine::Table);
1;
Tiny, eh? And all you have now is a DBD named foo which will is able to
deal with temporary tables, as long as you use L<SQL::Statement>. In
L<DBI::SQL::Nano> environments, this DBD can do nothing.
=head2 Deal with own attributes
Before we start doing usable stuff with our DBI driver, we need to think
about what we want to do and how we want to do it.
Do we need tunable knobs accessible by users? Do we need status
information? All this is handled in attributes of the database handles (be
careful when your DBD is running "behind" a L<DBD::Gofer> proxy).
How come the attributes into the DBD and how are they fetchable by the
user? Good question, but you should know because you've read the L<DBI>
documentation.
C<DBI::DBD::SqlEngine::db::FETCH> and C<DBI::DBD::SqlEngine::db::STORE>
taking care for you - all they need to know is which attribute names
are valid and mutable or immutable. Tell them by adding
C<init_valid_attributes> to your db class:
sub init_valid_attributes
{
my $dbh = $_[0];
$dbh->SUPER::init_valid_attributes ();
$dbh->{foo_valid_attrs} = {
foo_version => 1, # contains version of this driver
foo_valid_attrs => 1, # contains the valid attributes of foo drivers
foo_readonly_attrs => 1, # contains immutable attributes of foo drivers
foo_bar => 1, # contains the bar attribute
foo_baz => 1, # contains the baz attribute
foo_manager => 1, # contains the manager of the driver instance
foo_manager_type => 1, # contains the manager class of the driver instance
};
$dbh->{foo_readonly_attrs} = {
foo_version => 1, # ensure no-one modifies the driver version
foo_valid_attrs => 1, # do not permit one to add more valid attributes ...
foo_readonly_attrs => 1, # ... or make the immutable mutable
foo_manager => 1, # manager is set internally only
};
return $dbh;
}
Woooho - but now the user cannot assign new managers? This is intended,
overwrite C<STORE> to handle it!
sub STORE ($$$)
{
my ( $dbh, $attrib, $value ) = @_;
$dbh->SUPER::STORE( $attrib, $value );
# we're still alive, so no exception is thrown ...
# by DBI::DBD::SqlEngine::db::STORE
if ( $attrib eq "foo_manager_type" )
{
$dbh->{foo_manager} = $dbh->{foo_manager_type}->new();
# ... probably correct some states based on the new
# foo_manager_type - see DBD::Sys for an example
}
}
But ... my driver runs without a manager until someone first assignes
a C<foo_manager_type>. Well, no - there're two places where you can
initialize defaults:
sub init_default_attributes
{
my ($dbh, $phase) = @_;
$dbh->SUPER::init_default_attributes($phase);
if( 0 == $phase )
{
# init all attributes which have no knowledge about
# user settings from DSN or the attribute hash
$dbh->{foo_manager_type} = "DBD::Foo::Manager";
}
elsif( 1 == $phase )
{
# init phase with more knowledge from DSN or attribute
# hash
$dbh->{foo_manager} = $dbh->{foo_manager_type}->new();
}
return $dbh;
}
So far we can prevent the users to use our database driver as data
storage for anything and everything. We care only about the real important
stuff for peace on earth and alike attributes. But in fact, the driver
still can't do anything. It can do less than nothing - meanwhile it's
not a stupid storage area anymore.
=head2 User comfort
C<DBI::DBD::SqlEngine> since C<0.05> consolidates all persistent meta data
of a table into a single structure stored in C<< $dbh->{sql_meta} >>. While
DBI::DBD::SqlEngine provides only readonly access to this structure,
modifications are still allowed.
Primarily DBI::DBD::SqlEngine provides access via the setters
C<new_sql_engine_meta>, C<get_sql_engine_meta>, C<get_single_table_meta>,
C<set_single_table_meta>, C<set_sql_engine_meta> and C<clear_sql_engine_meta>.
Those methods are easily accessible by the users via the C<< $dbh->func () >>
interface provided by DBI. Well, many users don't feel comfortize when calling
# don't require extension for tables cars
$dbh->func ("cars", "f_ext", ".csv", "set_sql_engine_meta");
DBI::DBD::SqlEngine will inject a method into your driver to increase the
user comfort to allow:
# don't require extension for tables cars
$dbh->foo_set_meta ("cars", "f_ext", ".csv");
Better, but here and there users likes to do:
# don't require extension for tables cars
$dbh->{foo_tables}->{cars}->{f_ext} = ".csv";
This interface is provided when derived DBD's define following in
C<init_valid_attributes> (re-capture L</Deal with own attributes>):
sub init_valid_attributes
{
my $dbh = $_[0];
$dbh->SUPER::init_valid_attributes ();
$dbh->{foo_valid_attrs} = {
foo_version => 1, # contains version of this driver
foo_valid_attrs => 1, # contains the valid attributes of foo drivers
foo_readonly_attrs => 1, # contains immutable attributes of foo drivers
foo_bar => 1, # contains the bar attribute
foo_baz => 1, # contains the baz attribute
foo_manager => 1, # contains the manager of the driver instance
foo_manager_type => 1, # contains the manager class of the driver instance
foo_meta => 1, # contains the public interface to modify table meta attributes
};
$dbh->{foo_readonly_attrs} = {
foo_version => 1, # ensure no-one modifies the driver version
foo_valid_attrs => 1, # do not permit one to add more valid attributes ...
foo_readonly_attrs => 1, # ... or make the immutable mutable
foo_manager => 1, # manager is set internally only
foo_meta => 1, # ensure public interface to modify table meta attributes are immutable
};
$dbh->{foo_meta} = "foo_tables";
return $dbh;
}
This provides a tied hash in C<< $dbh->{foo_tables} >> and a tied hash for
each table's meta data in C<< $dbh->{foo_tables}->{$table_name} >>.
Modifications on the table meta attributes are done using the table
methods:
sub get_table_meta_attr { ... }
sub set_table_meta_attr { ... }
Both methods can adjust the attribute name for compatibility reasons, e.g.
when former versions of the DBD allowed different names to be used for the
same flag:
my %compat_map = (
abc => 'foo_abc',
xyz => 'foo_xyz',
);
__PACKAGE__->register_compat_map( \%compat_map );
If any user modification on a meta attribute needs reinitialization of
the meta structure (in case of C<DBI::DBD::SqlEngine> these are the attributes
C<f_file>, C<f_dir>, C<f_ext> and C<f_lockfile>), inform DBI::DBD::SqlEngine by
doing
my %reset_on_modify = (
foo_xyz => "foo_bar",
foo_abc => "foo_bar",
);
__PACKAGE__->register_reset_on_modify( \%reset_on_modify );
The next access to the table meta data will force DBI::DBD::SqlEngine to re-do the
entire meta initialization process.
Any further action which needs to be taken can handled in
C<table_meta_attr_changed>:
sub table_meta_attr_changed
{
my ($class, $meta, $attrib, $value) = @_;
...
$class->SUPER::table_meta_attr_changed ($meta, $attrib, $value);
}
This is done before the new value is set in C<$meta>, so the attribute
changed handler can act depending on the old value.
=head2 Dealing with Tables
Let's put some life into it - it's going to be time for it.
This is a good point where a quick side step to L<SQL::Statement::Embed>
will help to shorten the next paragraph. The documentation in
SQL::Statement::Embed regarding embedding in own DBD's works pretty
fine with SQL::Statement and DBI::SQL::Nano.
Second look should go to L<DBI::DBD::SqlEngine::Developers> to get a
picture over the driver part of the table API. Usually there isn't much
to do for an easy driver.
=head2 Testing
Now you should have your first own DBD. Was easy, wasn't it? But does
it work well? Prove it by writing tests and remember to use
dbd_edit_mm_attribs from L<DBI::DBD> to ensure testing even rare cases.
=head1 AUTHOR
This guide is written by Jens Rehsack. DBI::DBD::SqlEngine is written by
Jens Rehsack using code from DBD::File originally written by Jochen
Wiedmann and Jeff Zucker.
The module DBI::DBD::SqlEngine is currently maintained by
H.Merijn Brand < h.m.brand at xs4all.nl > and
Jens Rehsack < rehsack at googlemail.com >
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2010 by H.Merijn Brand & Jens Rehsack
All rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License, as
specified in the Perl README file.
=cut
DBI/ProfileData.pm 0000644 00000047034 15033552504 0007704 0 ustar 00 package DBI::ProfileData;
use strict;
=head1 NAME
DBI::ProfileData - manipulate DBI::ProfileDumper data dumps
=head1 SYNOPSIS
The easiest way to use this module is through the dbiprof frontend
(see L<dbiprof> for details):
dbiprof --number 15 --sort count
This module can also be used to roll your own profile analysis:
# load data from dbi.prof
$prof = DBI::ProfileData->new(File => "dbi.prof");
# get a count of the records (unique paths) in the data set
$count = $prof->count();
# sort by longest overall time
$prof->sort(field => "longest");
# sort by longest overall time, least to greatest
$prof->sort(field => "longest", reverse => 1);
# exclude records with key2 eq 'disconnect'
$prof->exclude(key2 => 'disconnect');
# exclude records with key1 matching /^UPDATE/i
$prof->exclude(key1 => qr/^UPDATE/i);
# remove all records except those where key1 matches /^SELECT/i
$prof->match(key1 => qr/^SELECT/i);
# produce a formatted report with the given number of items
$report = $prof->report(number => 10);
# clone the profile data set
$clone = $prof->clone();
# get access to hash of header values
$header = $prof->header();
# get access to sorted array of nodes
$nodes = $prof->nodes();
# format a single node in the same style as report()
$text = $prof->format($nodes->[0]);
# get access to Data hash in DBI::Profile format
$Data = $prof->Data();
=head1 DESCRIPTION
This module offers the ability to read, manipulate and format
L<DBI::ProfileDumper> profile data.
Conceptually, a profile consists of a series of records, or nodes,
each of each has a set of statistics and set of keys. Each record
must have a unique set of keys, but there is no requirement that every
record have the same number of keys.
=head1 METHODS
The following methods are supported by DBI::ProfileData objects.
=cut
our $VERSION = "2.010008";
use Carp qw(croak);
use Symbol;
use Fcntl qw(:flock);
use DBI::Profile qw(dbi_profile_merge);
# some constants for use with node data arrays
sub COUNT () { 0 };
sub TOTAL () { 1 };
sub FIRST () { 2 };
sub SHORTEST () { 3 };
sub LONGEST () { 4 };
sub FIRST_AT () { 5 };
sub LAST_AT () { 6 };
sub PATH () { 7 };
my $HAS_FLOCK = (defined $ENV{DBI_PROFILE_FLOCK})
? $ENV{DBI_PROFILE_FLOCK}
: do { local $@; eval { flock STDOUT, 0; 1 } };
=head2 $prof = DBI::ProfileData->new(File => "dbi.prof")
=head2 $prof = DBI::ProfileData->new(File => "dbi.prof", Filter => sub { ... })
=head2 $prof = DBI::ProfileData->new(Files => [ "dbi.prof.1", "dbi.prof.2" ])
Creates a new DBI::ProfileData object. Takes either a single file
through the File option or a list of Files in an array ref. If
multiple files are specified then the header data from the first file
is used.
=head3 Files
Reference to an array of file names to read.
=head3 File
Name of file to read. Takes precedence over C<Files>.
=head3 DeleteFiles
If true, the files are deleted after being read.
Actually the files are renamed with a C<deleteme> suffix before being read,
and then, after reading all the files, they're all deleted together.
The files are locked while being read which, combined with the rename, makes it
safe to 'consume' files that are still being generated by L<DBI::ProfileDumper>.
=head3 Filter
The C<Filter> parameter can be used to supply a code reference that can
manipulate the profile data as it is being read. This is most useful for
editing SQL statements so that slightly different statements in the raw data
will be merged and aggregated in the loaded data. For example:
Filter => sub {
my ($path_ref, $data_ref) = @_;
s/foo = '.*?'/foo = '...'/ for @$path_ref;
}
Here's an example that performs some normalization on the SQL. It converts all
numbers to C<N> and all quoted strings to C<S>. It can also convert digits to
N within names. Finally, it summarizes long "IN (...)" clauses.
It's aggressive and simplistic, but it's often sufficient, and serves as an
example that you can tailor to suit your own needs:
Filter => sub {
my ($path_ref, $data_ref) = @_;
local $_ = $path_ref->[0]; # whichever element contains the SQL Statement
s/\b\d+\b/N/g; # 42 -> N
s/\b0x[0-9A-Fa-f]+\b/N/g; # 0xFE -> N
s/'.*?'/'S'/g; # single quoted strings (doesn't handle escapes)
s/".*?"/"S"/g; # double quoted strings (doesn't handle escapes)
# convert names like log_20001231 into log_NNNNNNNN, controlled by $opt{n}
s/([a-z_]+)(\d{$opt{n},})/$1.('N' x length($2))/ieg if $opt{n};
# abbreviate massive "in (...)" statements and similar
s!(([NS],){100,})!sprintf("$2,{repeated %d times}",length($1)/2)!eg;
}
It's often better to perform this kinds of normalization in the DBI while the
data is being collected, to avoid too much memory being used by storing profile
data for many different SQL statement. See L<DBI::Profile>.
=cut
sub new {
my $pkg = shift;
my $self = {
Files => [ "dbi.prof" ],
Filter => undef,
DeleteFiles => 0,
LockFile => $HAS_FLOCK,
_header => {},
_nodes => [],
_node_lookup => {},
_sort => 'none',
@_
};
bless $self, $pkg;
# File (singular) overrides Files (plural)
$self->{Files} = [ $self->{File} ] if exists $self->{File};
$self->_read_files();
return $self;
}
# read files into _header and _nodes
sub _read_files {
my $self = shift;
my $files = $self->{Files};
my $read_header = 0;
my @files_to_delete;
my $fh = gensym;
foreach (@$files) {
my $filename = $_;
if ($self->{DeleteFiles}) {
my $newfilename = $filename . ".deleteme";
if ($^O eq 'VMS') {
# VMS default filesystem can only have one period
$newfilename = $filename . 'deleteme';
}
# will clobber an existing $newfilename
rename($filename, $newfilename)
or croak "Can't rename($filename, $newfilename): $!";
# On a versioned filesystem we want old versions to be removed
1 while (unlink $filename);
$filename = $newfilename;
}
open($fh, "<", $filename)
or croak("Unable to read profile file '$filename': $!");
# lock the file in case it's still being written to
# (we'll be forced to wait till the write is complete)
flock($fh, LOCK_SH) if $self->{LockFile};
if (-s $fh) { # not empty
$self->_read_header($fh, $filename, $read_header ? 0 : 1);
$read_header = 1;
$self->_read_body($fh, $filename);
}
close($fh); # and release lock
push @files_to_delete, $filename
if $self->{DeleteFiles};
}
for (@files_to_delete){
# for versioned file systems
1 while (unlink $_);
if(-e $_){
warn "Can't delete '$_': $!";
}
}
# discard node_lookup now that all files are read
delete $self->{_node_lookup};
}
# read the header from the given $fh named $filename. Discards the
# data unless $keep.
sub _read_header {
my ($self, $fh, $filename, $keep) = @_;
# get profiler module id
my $first = <$fh>;
chomp $first;
$self->{_profiler} = $first if $keep;
# collect variables from the header
local $_;
while (<$fh>) {
chomp;
last unless length $_;
/^(\S+)\s*=\s*(.*)/
or croak("Syntax error in header in $filename line $.: $_");
# XXX should compare new with existing (from previous file)
# and warn if they differ (different program or path)
$self->{_header}{$1} = unescape_key($2) if $keep;
}
}
sub unescape_key { # inverse of escape_key() in DBI::ProfileDumper
local $_ = shift;
s/(?<!\\)\\n/\n/g; # expand \n, unless it's a \\n
s/(?<!\\)\\r/\r/g; # expand \r, unless it's a \\r
s/\\\\/\\/g; # \\ to \
return $_;
}
# reads the body of the profile data
sub _read_body {
my ($self, $fh, $filename) = @_;
my $nodes = $self->{_nodes};
my $lookup = $self->{_node_lookup};
my $filter = $self->{Filter};
# build up node array
my @path = ("");
my (@data, $path_key);
local $_;
while (<$fh>) {
chomp;
if (/^\+\s+(\d+)\s?(.*)/) {
# it's a key
my ($key, $index) = ($2, $1 - 1);
$#path = $index; # truncate path to new length
$path[$index] = unescape_key($key); # place new key at end
}
elsif (s/^=\s+//) {
# it's data - file in the node array with the path in index 0
# (the optional minus is to make it more robust against systems
# with unstable high-res clocks - typically due to poor NTP config
# of kernel SMP behaviour, i.e. min time may be -0.000008))
@data = split / /, $_;
# corrupt data?
croak("Invalid number of fields in $filename line $.: $_")
unless @data == 7;
croak("Invalid leaf node characters $filename line $.: $_")
unless m/^[-+ 0-9eE\.]+$/;
# hook to enable pre-processing of the data - such as mangling SQL
# so that slightly different statements get treated as the same
# and so merged in the results
$filter->(\@path, \@data) if $filter;
# elements of @path can't have NULLs in them, so this
# forms a unique string per @path. If there's some way I
# can get this without arbitrarily stripping out a
# character I'd be happy to hear it!
$path_key = join("\0",@path);
# look for previous entry
if (exists $lookup->{$path_key}) {
# merge in the new data
dbi_profile_merge($nodes->[$lookup->{$path_key}], \@data);
} else {
# insert a new node - nodes are arrays with data in 0-6
# and path data after that
push(@$nodes, [ @data, @path ]);
# record node in %seen
$lookup->{$path_key} = $#$nodes;
}
}
else {
croak("Invalid line type syntax error in $filename line $.: $_");
}
}
}
=head2 $copy = $prof->clone();
Clone a profile data set creating a new object.
=cut
sub clone {
my $self = shift;
# start with a simple copy
my $clone = bless { %$self }, ref($self);
# deep copy nodes
$clone->{_nodes} = [ map { [ @$_ ] } @{$self->{_nodes}} ];
# deep copy header
$clone->{_header} = { %{$self->{_header}} };
return $clone;
}
=head2 $header = $prof->header();
Returns a reference to a hash of header values. These are the key
value pairs included in the header section of the L<DBI::ProfileDumper>
data format. For example:
$header = {
Path => [ '!Statement', '!MethodName' ],
Program => 't/42profile_data.t',
};
Note that modifying this hash will modify the header data stored
inside the profile object.
=cut
sub header { shift->{_header} }
=head2 $nodes = $prof->nodes()
Returns a reference the sorted nodes array. Each element in the array
is a single record in the data set. The first seven elements are the
same as the elements provided by L<DBI::Profile>. After that each key is
in a separate element. For example:
$nodes = [
[
2, # 0, count
0.0312958955764771, # 1, total duration
0.000490069389343262, # 2, first duration
0.000176072120666504, # 3, shortest duration
0.00140702724456787, # 4, longest duration
1023115819.83019, # 5, time of first event
1023115819.86576, # 6, time of last event
'SELECT foo FROM bar' # 7, key1
'execute' # 8, key2
# 6+N, keyN
],
# ...
];
Note that modifying this array will modify the node data stored inside
the profile object.
=cut
sub nodes { shift->{_nodes} }
=head2 $count = $prof->count()
Returns the number of items in the profile data set.
=cut
sub count { scalar @{shift->{_nodes}} }
=head2 $prof->sort(field => "field")
=head2 $prof->sort(field => "field", reverse => 1)
Sorts data by the given field. Available fields are:
longest
total
count
shortest
The default sort is greatest to smallest, which is the opposite of the
normal Perl meaning. This, however, matches the expected behavior of
the dbiprof frontend.
=cut
# sorts data by one of the available fields
{
my %FIELDS = (
longest => LONGEST,
total => TOTAL,
count => COUNT,
shortest => SHORTEST,
key1 => PATH+0,
key2 => PATH+1,
key3 => PATH+2,
);
sub sort {
my $self = shift;
my $nodes = $self->{_nodes};
my %opt = @_;
croak("Missing required field option.") unless $opt{field};
my $index = $FIELDS{$opt{field}};
croak("Unrecognized sort field '$opt{field}'.")
unless defined $index;
# sort over index
if ($opt{reverse}) {
@$nodes = sort {
$a->[$index] <=> $b->[$index]
} @$nodes;
} else {
@$nodes = sort {
$b->[$index] <=> $a->[$index]
} @$nodes;
}
# remember how we're sorted
$self->{_sort} = $opt{field};
return $self;
}
}
=head2 $count = $prof->exclude(key2 => "disconnect")
=head2 $count = $prof->exclude(key2 => "disconnect", case_sensitive => 1)
=head2 $count = $prof->exclude(key1 => qr/^SELECT/i)
Removes records from the data set that match the given string or
regular expression. This method modifies the data in a permanent
fashion - use clone() first to maintain the original data after
exclude(). Returns the number of nodes left in the profile data set.
=cut
sub exclude {
my $self = shift;
my $nodes = $self->{_nodes};
my %opt = @_;
# find key index number
my ($index, $val);
foreach (keys %opt) {
if (/^key(\d+)$/) {
$index = PATH + $1 - 1;
$val = $opt{$_};
last;
}
}
croak("Missing required keyN option.") unless $index;
if (UNIVERSAL::isa($val,"Regexp")) {
# regex match
@$nodes = grep {
$#$_ < $index or $_->[$index] !~ /$val/
} @$nodes;
} else {
if ($opt{case_sensitive}) {
@$nodes = grep {
$#$_ < $index or $_->[$index] ne $val;
} @$nodes;
} else {
$val = lc $val;
@$nodes = grep {
$#$_ < $index or lc($_->[$index]) ne $val;
} @$nodes;
}
}
return scalar @$nodes;
}
=head2 $count = $prof->match(key2 => "disconnect")
=head2 $count = $prof->match(key2 => "disconnect", case_sensitive => 1)
=head2 $count = $prof->match(key1 => qr/^SELECT/i)
Removes records from the data set that do not match the given string
or regular expression. This method modifies the data in a permanent
fashion - use clone() first to maintain the original data after
match(). Returns the number of nodes left in the profile data set.
=cut
sub match {
my $self = shift;
my $nodes = $self->{_nodes};
my %opt = @_;
# find key index number
my ($index, $val);
foreach (keys %opt) {
if (/^key(\d+)$/) {
$index = PATH + $1 - 1;
$val = $opt{$_};
last;
}
}
croak("Missing required keyN option.") unless $index;
if (UNIVERSAL::isa($val,"Regexp")) {
# regex match
@$nodes = grep {
$#$_ >= $index and $_->[$index] =~ /$val/
} @$nodes;
} else {
if ($opt{case_sensitive}) {
@$nodes = grep {
$#$_ >= $index and $_->[$index] eq $val;
} @$nodes;
} else {
$val = lc $val;
@$nodes = grep {
$#$_ >= $index and lc($_->[$index]) eq $val;
} @$nodes;
}
}
return scalar @$nodes;
}
=head2 $Data = $prof->Data()
Returns the same Data hash structure as seen in L<DBI::Profile>. This
structure is not sorted. The nodes() structure probably makes more
sense for most analysis.
=cut
sub Data {
my $self = shift;
my (%Data, @data, $ptr);
foreach my $node (@{$self->{_nodes}}) {
# traverse to key location
$ptr = \%Data;
foreach my $key (@{$node}[PATH .. $#$node - 1]) {
$ptr->{$key} = {} unless exists $ptr->{$key};
$ptr = $ptr->{$key};
}
# slice out node data
$ptr->{$node->[-1]} = [ @{$node}[0 .. 6] ];
}
return \%Data;
}
=head2 $text = $prof->format($nodes->[0])
Formats a single node into a human-readable block of text.
=cut
sub format {
my ($self, $node) = @_;
my $format;
# setup keys
my $keys = "";
for (my $i = PATH; $i <= $#$node; $i++) {
my $key = $node->[$i];
# remove leading and trailing space
$key =~ s/^\s+//;
$key =~ s/\s+$//;
# if key has newlines or is long take special precautions
if (length($key) > 72 or $key =~ /\n/) {
$keys .= " Key " . ($i - PATH + 1) . " :\n\n$key\n\n";
} else {
$keys .= " Key " . ($i - PATH + 1) . " : $key\n";
}
}
# nodes with multiple runs get the long entry format, nodes with
# just one run get a single count.
if ($node->[COUNT] > 1) {
$format = <<END;
Count : %d
Total Time : %3.6f seconds
Longest Time : %3.6f seconds
Shortest Time : %3.6f seconds
Average Time : %3.6f seconds
END
return sprintf($format, @{$node}[COUNT,TOTAL,LONGEST,SHORTEST],
$node->[TOTAL] / $node->[COUNT]) . $keys;
} else {
$format = <<END;
Count : %d
Time : %3.6f seconds
END
return sprintf($format, @{$node}[COUNT,TOTAL]) . $keys;
}
}
=head2 $text = $prof->report(number => 10)
Produces a report with the given number of items.
=cut
sub report {
my $self = shift;
my $nodes = $self->{_nodes};
my %opt = @_;
croak("Missing required number option") unless exists $opt{number};
$opt{number} = @$nodes if @$nodes < $opt{number};
my $report = $self->_report_header($opt{number});
for (0 .. $opt{number} - 1) {
$report .= sprintf("#" x 5 . "[ %d ]". "#" x 59 . "\n",
$_ + 1);
$report .= $self->format($nodes->[$_]);
$report .= "\n";
}
return $report;
}
# format the header for report()
sub _report_header {
my ($self, $number) = @_;
my $nodes = $self->{_nodes};
my $node_count = @$nodes;
# find total runtime and method count
my ($time, $count) = (0,0);
foreach my $node (@$nodes) {
$time += $node->[TOTAL];
$count += $node->[COUNT];
}
my $header = <<END;
DBI Profile Data ($self->{_profiler})
END
# output header fields
while (my ($key, $value) = each %{$self->{_header}}) {
$header .= sprintf(" %-13s : %s\n", $key, $value);
}
# output summary data fields
$header .= sprintf(<<END, $node_count, $number, $self->{_sort}, $count, $time);
Total Records : %d (showing %d, sorted by %s)
Total Count : %d
Total Runtime : %3.6f seconds
END
return $header;
}
1;
__END__
=head1 AUTHOR
Sam Tregar <sam@tregar.com>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2002 Sam Tregar
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl 5 itself.
=cut
DBI/Changes.pm 0000644 00000363213 15033552504 0007062 0 ustar 00 =head1 NAME
DBI::Changes - List of significant changes to the DBI
=encoding ISO8859-1
=cut
=head2 Changes in DBI 1.641 - 19th March 2018
Remove dependency on Storable 2.16 introduced in DBI 1.639
thanks to Ribasushi #60
Avoid compiler warnings in Driver.xst #59
thanks to pali #59
=head2 Changes in DBI 1.640 - 28th January 2018
Fix test t/91_store_warning.t for perl 5.10.0
thanks to pali #57
Add Perl 5.10.0 and 5.8.1 specific versions to Travis testing
thanks to pali #57
Add registration of mariadb_ prefix for new DBD::MariaDB driver
thanks to pali #56
=head2 Changes in DBI 1.639 - 28th December 2017
Fix UTF-8 support for warn/croak calls within DBI internals,
thanks to pali #53
Fix dependency on Storable for perl older than 5.8.9,
thanks to H.Merijn Brand.
Add DBD::Mem driver, a pure-perl in-memory driver using DBI::DBD::SqlEngine,
thanks to Jens Rehsack #42
Corrected missing semicolon in example in documentation,
thanks to pali #55
=head2 Changes in DBI 1.637 - 16th August 2017
Fix use of externally controlled format string (CWE-134) thanks to pali #44
This could cause a crash if, for example, a db error contained a %.
https://cwe.mitre.org/data/definitions/134.html
Fix extension detection for DBD::File related drivers
Fix tests for perl without dot in @INC RT#120443
Fix loss of error message on parent handle, thanks to charsbar #34
Fix disappearing $_ inside callbacks, thanks to robschaber #47
Fix dependency on Storable for perl older than 5.8.9
Allow objects to be used as passwords without throwing an error, thanks to demerphq #40
Allow $sth NAME_* attributes to be set from Perl code, re #45
Added support for DBD::XMLSimple thanks to nigelhorne #38
Documentation updates:
Improve examples using eval to be more correct, thanks to pali #39
Add cautionary note to prepare_cached docs re refs in %attr #46
Small POD changes (Getting Help -> Online) thanks to openstrike #33
Adds links to more module names and fix typo, thanks to oalders #43
Typo fix thanks to bor #37
=head2 Changes in DBI 1.636 - 24th April 2016
Fix compilation for threaded perl <= 5.12 broken in 1.635 RT#113955
Revert change to DBI::PurePerl DESTROY in 1.635
Change t/16destroy.t to avoid race hazard RT#113951
Output perl version and archname in t/01basics.t
Add perl 5.22 and 5.22-extras to travis-ci config
=head2 Changes in DBI 1.635 - 24th April 2016
Fixed RaiseError/PrintError for UTF-8 errors/warnings. RT#102404
Fixed cases where ShowErrorStatement might show incorrect Statement RT#97434
Fixed DBD::Gofer for UTF-8-enabled STDIN/STDOUT
thanks to mauke PR#32
Fixed fetchall_arrayref({}) behavior with no columns
thanks to Dan McGee PR#31
Fixed tied CachedKids ref leak in attribute cache by weakening
thanks to Michael Conrad RT#113852
Fixed "panic: attempt to copy freed scalar" upon commit() or rollback()
thanks to fbriere for detailed bug report RT#102791
Ceased to ignore DESTROY of outer handle in DBI::PurePerl
Treat undef in DBI::Profile Path as string "undef"
thanks to fREW Schmidt RT#113298
Fix SQL::Nano parser to ignore trailing semicolon
thanks to H.Merijn Brand.
Added @ary = $dbh->selectall_array(...) method
thanks to Ed Avis RT#106411
Added appveyor support (Travis like CI for windows)
thanks to mbeijen PR#30
Corrected spelling errors in pod
thanks to Gregor Herrmann RT#107838
Corrected and/or removed broken links to SQL standards
thanks to David Pottage RT#111437
Corrected doc example to use dbi: instead of DBI: in DSN
thanks to Michael R. Davis RT#101181
Removed/updated broken links in docs
thanks to mbeijen PR#29
Clarified docs for DBI::hash($string)
Removed the ancient DBI::FAQ module RT#102714
Fixed t/pod.t to require Test::Pod >= 1.41 RT#101769
This release was developed at the Perl QA Hackathon 2016
L<http://act.qa-hackathon.org/qa2016/>
which was made possible by the generosity of many sponsors:
L<https://www.fastmail.com> FastMail,
L<https://www.ziprecruiter.com> ZipRecruiter,
L<http://www.activestate.com> ActiveState,
L<http://www.opusvl.com> OpusVL,
L<https://www.strato.com> Strato,
L<http://www.surevoip.co.uk> SureVoIP,
L<http://www.cv-library.co.uk> CV-Library,
L<https://www.iinteractive.com/> Infinity,
L<https://opensource.careers/perl-careers/> Perl Careers,
L<https://www.mongodb.com> MongoDB,
L<https://www.thinkproject.com> thinkproject!,
L<https://www.dreamhost.com/> Dreamhost,
L<http://www.perl6.org/> Perl 6,
L<http://www.perl-services.de/> Perl Services,
L<https://www.evozon.com/> Evozon,
L<http://www.booking.com> Booking,
L<http://eligo.co.uk> Eligo,
L<http://www.oetiker.ch/> Oetiker+Partner,
L<http://capside.com/en/> CAPSiDE,
L<https://www.procura.nl/> Procura,
L<https://constructor.io/> Constructor.io,
L<https://metacpan.org/author/BABF> Robbie Bow,
L<https://metacpan.org/author/RSAVAGE> Ron Savage,
L<https://metacpan.org/author/ITCHARLIE> Charlie Gonzalez,
L<https://twitter.com/jscook2345> Justin Cook.
=head2 Changes in DBI 1.634 - 3rd August 2015
Enabled strictures on all modules (Jose Luis Perez Diez) #22
Note that this might cause new exceptions in existing code.
Please take time for extra testing before deploying to production.
Improved handling of row counts for compiled drivers and enable them to
return larger row counts (IV type) by defining new *_iv macros.
Fixed quote_identifier that was adding a trailing separator when there
was only a catalog (Martin J. Evans)
Removed redundant keys() call in fetchall_arrayref with hash slice (ilmari) #24
Corrected pod xref to Placeholders section (Matthew D. Fuller)
Corrected pod grammar (Nick Tonkin) #25
Added support for tables('', '', '', '%') special case (Martin J. Evans)
Added support for DBD prefixes with numbers (Jens Rehsack) #19
Added extra initializer for DBI::DBD::SqlEngine based DBD's (Jens Rehsack)
Added Memory Leaks section to the DBI docs (Tim)
Added Artistic v1 & GPL v1 LICENSE file (Jose Luis Perez Diez) #21
=head2 Changes in DBI 1.633 - 11th Jan 2015
Fixed selectrow_*ref to return undef on error in list context
instead if an empty list.
Changed t/42prof_data.t more informative
Changed $sth->{TYPE} to be NUMERIC in DBD::File drivers as per the
DBI docs. Note TYPE_NAME is now also available. [H.Merijn Brand]
Fixed compilation error on bleadperl due DEFSV no longer being an lvalue
[Dagfinn Ilmari Manns�ker]
Added docs for escaping placeholders using a backslash.
Added docs for get_info(9000) indicating ability to escape placeholders.
Added multi_ prefix for DBD::Multi (Dan Wright) and ad2_ prefix for
DBD::AnyData2
=head2 Changes in DBI 1.632 - 9th Nov 2014
Fixed risk of memory corruption with many arguments to methods
originally reported by OSCHWALD for Callbacks but may apply
to other functionality in DBI method dispatch RT#86744.
Fixed DBD::PurePerl to not set $sth->{Active} true by default
drivers are expected to set it true as needed.
Fixed DBI::DBD::SqlEngine to complain loudly when prerequite
driver_prefix is not fulfilled (RT#93204) [Jens Rehsack]
Fixed redundant sprintf argument warning RT#97062 [Reini Urban]
Fixed security issue where DBD::File drivers would open files
from folders other than specifically passed using the
f_dir attribute RT#99508 [H.Merijn Brand]
Changed delete $h->{$key} to work for keys with 'private_' prefix
per request in RT#83156. local $h->{$key} works as before.
Added security notice to DBD::Proxy and DBI::ProxyServer because they
use Storable which is insecure. Thanks to ppisar@redhat.com RT#90475
Added note to AutoInactiveDestroy docs strongly recommending that it
is enabled in all new code.
=head2 Changes in DBI 1.631 - 20th Jan 2014
NOTE: This release changes the handle passed to Callbacks from being an 'inner'
handle to being an 'outer' handle. If you have code that makes use of Callbacks,
ensure that you understand what this change means and review your callback code.
Fixed err_hash handling of integer err RT#92172 [Dagfinn Ilmari]
Fixed use of \Q vs \E in t/70callbacks.t
Changed the handle passed to Callbacks from being an 'inner'
handle to being an 'outer' handle.
Improved reliability of concurrent testing
PR#8 [Peter Rabbitson]
Changed optional dependencies to "suggest"
PR#9 [Karen Etheridge]
Changed to avoid mg_get in neatsvpv during global destruction
PR#10 [Matt Phillips]
=head2 Changes in DBI 1.630 - 28th Oct 2013
NOTE: This release enables PrintWarn by default regardless of $^W.
Your applications may generate more log messages than before.
Fixed err for new drh to be undef not to 0 [Martin J. Evans]
Fixed RT#83132 - moved DBIstcf* constants to util
export tag [Martin J. Evans]
PrintWarn is now triggered by warnings recorded in methods like STORE
that don't clear err RT#89015 [Tim Bunce]
Changed tracing to no longer show quote and quote_identifier calls
at trace level 1.
Changed DBD::Gofer ping while disconnected set_err from warn to info.
Clarified wording of log message when err is cleared.
Changed bootstrap to use $XS_VERSION RT#89618 [Andreas Koenig]
Added connect_cached.connected Callback PR#3 [David E. Wheeler]
Clarified effect of refs in connect_cached attributes [David E. Wheeler]
Extended ReadOnly attribute docs for when the driver cannot
ensure read only [Martin J. Evans]
Corrected SQL_BIGINT docs to say ODBC value is used PR#5 [ilmari]
There was no DBI 1.629 release.
=head2 Changes in DBI 1.628 - 22nd July 2013
Fixed missing fields on partial insert via DBI::DBD::SqlEngine
engines (DBD::CSV, DBD::DBM etc.) [H.Merijn Brand, Jens Rehsack]
Fixed stack corruption on callbacks RT#85562 RT#84974 [Aaron Schweiger]
Fixed DBI::SQL::Nano_::Statement handling of "0" [Jens Rehsack]
Fixed exit op precedence in test RT#87029 [Reni Urban]
Added support for finding tables in multiple directories
via new DBD::File f_dir_search attribute [H.Merijn Brand]
Enable compiling by C++ RT#84285 [Kurt Jaeger]
Typo fixes in pod and comment [David Steinbrunner]
Change DBI's docs to refer to git not svn [H.Merijn Brand]
Clarify bind_col TYPE attribute is sticky [Martin J. Evans]
Fixed reference to $sth in selectall_arrayref docs RT#84873
Spelling fixes [Ville Skytt�]
Changed $VERSIONs to hardcoded strings [H.Merijn Brand]
=head2 Changes in DBI 1.627 - 16th May 2013
Fixed VERSION regression in DBI::SQL::Nano [Tim Bunce]
=head2 Changes in DBI 1.626 - 15th May 2013
Fixed pod text/link was reversed in a few cases RT#85168
[H.Merijn Brand]
Handle aliasing of STORE'd attributes in DBI::DBD::SqlEngine
[Jens Rehsack]
Updated repository URI to git [Jens Rehsack]
Fixed skip() count arg in t/48dbi_dbd_sqlengine.t [Tim Bunce]
=head2 Changes in DBI 1.625 (svn r15595) 28th March 2013
Fixed heap-use-after-free during global destruction RT#75614
thanks to Reini Urban.
Fixed ignoring RootClass attribute during connect() by
DBI::DBD::SqlEngine reported in RT#84260 by Michael Schout
=head2 Changes in DBI 1.624 (svn r15576) 22nd March 2013
Fixed Gofer for hash randomization in perl 5.17.10+ RT#84146
Clarify docs for can() re RT#83207
=head2 Changes in DBI 1.623 (svn r15547) 2nd Jan 2013
Fixed RT#64330 - ping wipes out errstr (Martin J. Evans).
Fixed RT#75868 - DBD::Proxy shouldn't call connected() on the server.
Fixed RT#80474 - segfault in DESTROY with threads.
Fixed RT#81516 - Test failures due to hash randomisation in perl 5.17.6
thanks to Jens Rehsack and H.Merijn Brand and feedback on IRC
Fixed RT#81724 - Handle copy-on-write scalars (sprout)
Fixed unused variable / self-assignment compiler warnings.
Fixed default table_info in DBI::DBD::SqlEngine which passed NAMES
attribute instead of NAME to DBD::Sponge RT72343 (Martin J. Evans)
Corrected a spelling error thanks to Chris Sanders.
Corrected typo in DBI->installed_versions docs RT#78825
thanks to Jan Dubois.
Refactored table meta information management from DBD::File into
DBI::DBD::SqlEngine (H.Merijn Brand, Jens Rehsack)
Prevent undefined f_dir being used in opendir (H.Merijn Brand)
Added logic to force destruction of children before parents
during global destruction. See RT#75614.
Added DBD::File Plugin-Support for table names and data sources
(Jens Rehsack, #dbi Team)
Added new tests to 08keeperr for RT#64330
thanks to Kenichi Ishigaki.
Added extra internal handle type check, RT#79952
thanks to Reini Urban.
Added cubrid_ registered prefix for DBD::cubrid, RT#78453
Removed internal _not_impl method (Martin J. Evans).
NOTE: The "old-style" DBD::DBM attributes 'dbm_ext' and 'dbm_lockfile'
have been deprecated for several years and their use will now generate
a warning.
=head2 Changes in DBI 1.622 (svn r15327) 6th June 2012
Fixed lack of =encoding in non-ASCII pod docs. RT#77588
Corrected typo in DBI::ProfileDumper thanks to Finn Hakansson.
=head2 Changes in DBI 1.621 (svn r15315) 21st May 2012
Fixed segmentation fault when a thread is created from
within another thread RT#77137, thanks to Dave Mitchell.
Updated previous Changes to credit Booking.com for sponsoring
Dave Mitchell's recent DBI optimization work.
=head2 Changes in DBI 1.620 (svn r15300) 25th April 2012
Modified column renaming in fetchall_arrayref, added in 1.619,
to work on column index numbers not names (an incompatible change).
Reworked the fetchall_arrayref documentation.
Hash slices in fetchall_arrayref now detect invalid column names.
=head2 Changes in DBI 1.619 (svn r15294) 23rd April 2012
Fixed the connected method to stop showing the password in
trace file (Martin J. Evans).
Fixed _install_method to set CvFILE correctly
thanks to sprout RT#76296
Fixed SqlEngine "list_tables" thanks to David McMath
and Norbert Gruener. RT#67223 RT#69260
Optimized DBI method dispatch thanks to Dave Mitchell.
Optimized driver access to DBI internal state thanks to Dave Mitchell.
Optimized driver access to handle data thanks to Dave Mitchell.
Dave's work on these optimizations was sponsored by Booking.com.
Optimized fetchall_arrayref with hash slice thanks
to Dagfinn Ilmari Manns�ker. RT#76520
Allow renaming columns in fetchall_arrayref hash slices
thanks to Dagfinn Ilmari Manns�ker. RT#76572
Reserved snmp_ and tree_ for DBD::SNMP and DBD::TreeData
=head2 Changes in DBI 1.618 (svn r15170) 25rd February 2012
Fixed compiler warnings in Driver_xst.h (Martin J. Evans)
Fixed compiler warning in DBI.xs (H.Merijn Brand)
Fixed Gofer tests failing on Windows RT74975 (Manoj Kumar)
Fixed my_ctx compile errors on Windows (Dave Mitchell)
Significantly optimized method dispatch via cache (Dave Mitchell)
Significantly optimized DBI internals for threads (Dave Mitchell)
Dave's work on these optimizations was sponsored by Booking.com.
Xsub to xsub calling optimization now enabled for threaded perls.
Corrected typo in example in docs (David Precious)
Added note that calling clone() without an arg may warn in future.
Minor changes to the install_method() docs in DBI::DBD.
Updated dbipport.h from Devel::PPPort 3.20
=head2 Changes in DBI 1.617 (svn r15107) 30th January 2012
NOTE: The officially supported minimum perl version will change
from perl 5.8.1 (2003) to perl 5.8.3 (2004) in a future release.
(The last change, from perl 5.6 to 5.8.1, was announced
in July 2008 and implemented in DBI 1.611 in April 2010.)
Fixed ParamTypes example in the pod (Martin J. Evans)
Fixed the definition of ArrayTupleStatus and remove confusion over
rows affected in list context of execute_array (Martin J. Evans)
Fixed sql_type_cast example and typo in errors (Martin J. Evans)
Fixed Gofer error handling for keeperr methods like ping (Tim Bunce)
Fixed $dbh->clone({}) RT73250 (Tim Bunce)
Fixed is_nested_call logic error RT73118 (Reini Urban)
Enhanced performance for threaded perls (Dave Mitchell, Tim Bunce)
Dave's work on this optimization was sponsored by Booking.com.
Enhanced and standardized driver trace level mechanism (Tim Bunce)
Removed old code that was an inneffective attempt to detect
people doing DBI->{Attrib}.
Clear ParamValues on bind_param param count error RT66127 (Tim Bunce)
Changed DBI::ProxyServer to require DBI at compile-time RT62672 (Tim Bunce)
Added pod for default_user to DBI::DBD (Martin J. Evans)
Added CON, ENC and DBD trace flags and extended 09trace.t (Martin J. Evans)
Added TXN trace flags and applied CON and TXN to relevant methods (Tim Bunce)
Added some more fetchall_arrayref(..., $maxrows) tests (Tim Bunce)
Clarified docs for fetchall_arrayref called on an inactive handle.
Clarified docs for clone method (Tim Bunce)
Added note to DBI::Profile about async queries (Marcel Gr�nauer).
Reserved spatialite_ as a driver prefix for DBD::Spatialite
Reserved mo_ as a driver prefix for DBD::MO
Updated link to the SQL Reunion 95 docs, RT69577 (Ash Daminato)
Changed links for DBI recipes. RT73286 (Martin J. Evans)
=head2 Changes in DBI 1.616 (svn r14616) 30th December 2010
Fixed spurious dbi_profile lines written to the log when
profiling is enabled and a trace flag, like SQL, is used.
Fixed to recognize SQL::Statement errors even if instantiated
with RaiseError=0 (Jens Rehsack)
Fixed RT#61513 by catching attribute assignment to tied table access
interface (Jens Rehsack)
Fixing some misbehavior of DBD::File when running within the Gofer
server.
Fixed compiler warnings RT#62640
Optimized connect() to remove redundant FETCH of \%attrib values.
Improved initialization phases in DBI::DBD::SqlEngine (Jens Rehsack)
Added DBD::Gofer::Transport::corostream. An experimental proof-of-concept
transport that enables asynchronous database calls with few code changes.
It enables asynchronous use of DBI frameworks like DBIx::Class.
Added additional notes on DBDs which avoid creating a statement in
the do() method and the effects on error handlers (Martin J. Evans)
Adding new attribute "sql_dialect" to DBI::DBD::SqlEngine to allow
users control used SQL dialect (ANSI, CSV or AnyData), defaults to
CSV (Jens Rehsack)
Add documentation for DBI::DBD::SqlEngine attributes (Jens Rehsack)
Documented dbd_st_execute return (Martin J. Evans)
Fixed typo in InactiveDestroy thanks to Emmanuel Rodriguez.
=head2 Changes in DBI 1.615 (svn r14438) 21st September 2010
Fixed t/51dbm_file for file/directory names with whitespaces in them
RT#61445 (Jens Rehsack)
Fixed compiler warnings from ignored hv_store result (Martin J. Evans)
Fixed portability to VMS (Craig A. Berry)
=head2 Changes in DBI 1.614 (svn r14408) 17th September 2010
Fixed bind_param () in DBI::DBD::SqlEngine (rt#61281)
Fixed internals to not refer to old perl symbols that
will no longer be visible in perl >5.13.3 (Andreas Koenig)
Many compiled drivers are likely to need updating.
Fixed issue in DBD::File when absolute filename is used as table name
(Jens Rehsack)
Croak manually when file after tie doesn't exists in DBD::DBM
when it have to exists (Jens Rehsack)
Fixed issue in DBD::File when users set individual file name for tables
via f_meta compatibility interface - reported by H.Merijn Brand while
working on RT#61168 (Jens Rehsack)
Changed 50dbm_simple to simplify and fix problems (Martin J. Evans)
Changed 50dbm_simple to skip aggregation tests when not using
SQL::Statement (Jens Rehsack)
Minor speed improvements in DBD::File (Jens Rehsack)
Added $h->{AutoInactiveDestroy} as simpler safer form of
$h->{InactiveDestroy} (David E. Wheeler)
Added ability for parallel testing "prove -j4 ..." (Jens Rehsack)
Added tests for delete in DBM (H.Merijn Brand)
Added test for absolute filename as table to 51dbm_file (Jens Rehsack)
Added two initialization phases to DBI::DBD::SqlEngine (Jens Rehsack)
Added improved developers documentation for DBI::DBD::SqlEngine
(Jens Rehsack)
Added guides how to write DBI drivers using DBI::DBD::SqlEngine
or DBD::File (Jens Rehsack)
Added register_compat_map() and table_meta_attr_changed() to
DBD::File::Table to support clean fix of RT#61168 (Jens Rehsack)
=head2 Changes in DBI 1.613 (svn r14271) 22nd July 2010
Fixed Win32 prerequisite module from PathTools to File::Spec.
Changed attribute headings and fixed references in DBI pod (Martin J. Evans)
Corrected typos in DBI::FAQ and DBI::ProxyServer (Ansgar Burchardt)
=head2 Changes in DBI 1.612 (svn r14254) 16th July 2010
NOTE: This is a minor release for the DBI core but a major release for
DBD::File and drivers that depend on it, like DBD::DBM and DBD::CSV.
This is also the first release where the bulk of the development work
has been done by other people. I'd like to thank (in no particular order)
Jens Rehsack, Martin J. Evans, and H.Merijn Brand for all their contributions.
Fixed DBD::File's {ChopBlank} handling (it stripped \s instead of space
only as documented in DBI) (H.Merijn Brand)
Fixed DBD::DBM breakage with SQL::Statement (Jens Rehsack, fixes RT#56561)
Fixed DBD::File file handle leak (Jens Rehsack)
Fixed problems in 50dbm.t when running tests with multiple
dbms (Martin J. Evans)
Fixed DBD::DBM bugs found during tests (Jens Rehsack)
Fixed DBD::File doesn't find files without extensions under some
circumstances (Jens Rehsack, H.Merijn Brand, fixes RT#59038)
Changed Makefile.PL to modernize with CONFLICTS, recommended dependencies
and resources (Jens Rehsack)
Changed DBI::ProfileDumper to rename any existing profile file by
appending .prev, instead of overwriting it.
Changed DBI::ProfileDumper::Apache to work in more configurations
including vhosts using PerlOptions +Parent.
Add driver_prefix method to DBI (Jens Rehsack)
Added more tests to 50dbm_simple.t to prove optimizations in
DBI::SQL::Nano and SQL::Statement (Jens Rehsack)
Updated tests to cover optional installed SQL::Statement (Jens Rehsack)
Synchronize API between SQL::Statement and DBI::SQL::Nano (Jens Rehsack)
Merged some optimizations from SQL::Statement into DBI::SQL::Nano
(Jens Rehsack)
Added basic test for DBD::File (H.Merijn Brand, Jens Rehsack)
Extract dealing with Perl SQL engines from DBD::File into
DBI::DBD::SqlEngine for better subclassing of 3rd party non-db DBDs
(Jens Rehsack)
Updated and clarified documentation for finish method (Tim Bunce).
Changes to DBD::File for better English and hopefully better
explanation (Martin J. Evans)
Update documentation of DBD::DBM to cover current implementation,
tried to explain some things better and changes most examples to
preferred style of Merijn and myself (Jens Rehsack)
Added developer documentation (including a roadmap of future plans)
for DBD::File
=head2 Changes in DBI 1.611 (svn r13935) 29th April 2010
NOTE: minimum perl version is now 5.8.1 (as announced in DBI 1.607)
Fixed selectcol_arrayref MaxRows attribute to count rows not values
thanks to Vernon Lyon.
Fixed DBI->trace(0, *STDERR); (H.Merijn Brand)
which tried to open a file named "*main::STDERR" in perl-5.10.x
Fixes in DBD::DBM for use under threads (Jens Rehsack)
Changed "Issuing rollback() due to DESTROY without explicit disconnect"
warning to not be issued if ReadOnly set for that dbh.
Added f_lock and f_encoding support to DBD::File (H.Merijn Brand)
Added ChildCallbacks => { ... } to Callbacks as a way to
specify Callbacks for child handles.
With tests added by David E. Wheeler.
Added DBI::sql_type_cast($value, $type, $flags) to cast a string value
to an SQL type. e.g. SQL_INTEGER effectively does $value += 0;
Has other options plus an internal interface for drivers.
Documentation changes:
Small fixes in the documentation of DBD::DBM (H.Merijn Brand)
Documented specification of type casting behaviour for bind_col()
based on DBI::sql_type_cast() and two new bind_col attributes
StrictlyTyped and DiscardString. Thanks to Martin Evans.
Document fetchrow_hashref() behaviour for functions,
aliases and duplicate names (H.Merijn Brand)
Updated DBI::Profile and DBD::File docs to fix pod nits
thanks to Frank Wiegand.
Corrected typos in Gopher documentation reported by Jan Krynicky.
Documented the Callbacks attribute thanks to David E. Wheeler.
Corrected the Timeout examples as per rt 50621 (Martin J. Evans).
Removed some internal broken links in the pod (Martin J. Evans)
Added Note to column_info for drivers which do not
support it (Martin J. Evans)
Updated dbipport.h to Devel::PPPort 3.19 (H.Merijn Brand)
=head2 Changes in DBI 1.609 (svn r12816) 8th June 2009
Fixes to DBD::File (H.Merijn Brand)
added f_schema attribute
table names case sensitive when quoted, insensitive when unquoted
workaround a bug in SQL::Statement (temporary fix) related
to the "You passed x parameters where y required" error
Added ImplementorClass and Name info to the "Issuing rollback() due to
DESTROY without explicit disconnect" warning to identify the handle.
Applies to compiled drivers when they are recompiled.
Added DBI->visit_handles($coderef) method.
Added $h->visit_child_handles($coderef) method.
Added docs for column_info()'s COLUMN_DEF value.
Clarified docs on stickyness of data type via bind_param().
Clarified docs on stickyness of data type via bind_col().
=head2 Changes in DBI 1.608 (svn r12742) 5th May 2009
Fixes to DBD::File (H.Merijn Brand)
bind_param () now honors the attribute argument
added f_ext attribute
File::Spec is always required. (CORE since 5.00405)
Fail and set errstr on parameter count mismatch in execute ()
Fixed two small memory leaks when running in mod_perl
one in DBI->connect and one in DBI::Gofer::Execute.
Both due to "local $ENV{...};" leaking memory.
Fixed DBD_ATTRIB_DELETE macro for driver authors
and updated DBI::DBD docs thanks to Martin J. Evans.
Fixed 64bit issues in trace messages thanks to Charles Jardine.
Fixed FETCH_many() method to work with drivers that incorrectly return
an empty list from $h->FETCH. Affected gofer.
Added 'sqlite_' as registered prefix for DBD::SQLite.
Corrected many typos in DBI docs thanks to Martin J. Evans.
Improved DBI::DBD docs thanks to H.Merijn Brand.
=head2 Changes in DBI 1.607 (svn r11571) 22nd July 2008
NOTE: Perl 5.8.1 is now the minimum supported version.
If you need support for earlier versions send me a patch.
Fixed missing import of carp in DBI::Gofer::Execute.
Added note to docs about effect of execute(@empty_array).
Clarified docs for ReadOnly thanks to Martin Evans.
=head2 Changes in DBI 1.605 (svn r11434) 16th June 2008
Fixed broken DBIS macro with threads on big-endian machines
with 64bit ints but 32bit pointers. Ticket #32309.
Fixed the selectall_arrayref, selectrow_arrayref, and selectrow_array
methods that get embedded into compiled drivers to use the
inner sth handle when passed a $sth instead of an sql string.
Drivers will need to be recompiled to pick up this change.
Fixed leak in neat() for some kinds of values thanks to Rudolf Lippan.
Fixed DBI::PurePerl neat() to behave more like XS neat().
Increased default $DBI::neat_maxlen from 400 to 1000.
Increased timeout on tests to accommodate very slow systems.
Changed behaviour of trace levels 1..4 to show less information
at lower levels.
Changed the format of the key used for $h->{CachedKids}
(which is undocumented so you shouldn't depend on it anyway)
Changed gofer error handling to avoid duplicate error text in errstr.
Clarified docs re ":N" style placeholders.
Improved gofer retry-on-error logic and refactored to aid subclassing.
Improved gofer trace output in assorted ways.
Removed the beeps "\a" from Makefile.PL warnings.
Removed check for PlRPC-modules from Makefile.PL
Added sorting of ParamValues reported by ShowErrorStatement
thanks to to Rudolf Lippan.
Added cache miss trace message to DBD::Gofer transport class.
Added $drh->dbixs_revision method.
Added explicit LICENSE specification (perl) to META.yaml
=head2 Changes in DBI 1.604 (svn rev 10994) 24th March 2008
Fixed fetchall_arrayref with $max_rows argument broken in 1.603,
thanks to Greg Sabino Mullane.
Fixed a few harmless compiler warnings on cygwin.
=head2 Changes in DBI 1.603
Fixed pure-perl fetchall_arrayref with $max_rows argument
to not error when fetching after all rows already fetched.
(Was fixed for compiled drivers back in DBI 1.31.)
Thanks to Mark Overmeer.
Fixed C sprintf formats and casts, fixing compiler warnings.
Changed dbi_profile() to accept a hash of profiles and apply to all.
Changed gofer stream transport to improve error reporting.
Changed gofer test timeout to avoid spurious failures on slow systems.
Added options to t/85gofer.t so it's more useful for manual testing.
=head2 Changes in DBI 1.602 (svn rev 10706) 8th February 2008
Fixed potential coredump if stack reallocated while calling back
into perl from XS code. Thanks to John Gardiner Myers.
Fixed DBI::Util::CacheMemory->new to not clear the cache.
Fixed avg in DBI::Profile as_text() thanks to Abe Ingersoll.
Fixed DBD::DBM bug in push_names thanks to J M Davitt.
Fixed take_imp_data for some platforms thanks to Jeffrey Klein.
Fixed docs tie'ing CacheKids (ie LRU cache) thanks to Peter John Edwards.
Expanded DBI::DBD docs for driver authors thanks to Martin Evans.
Enhanced t/80proxy.t test script.
Enhanced t/85gofer.t test script thanks to Stig.
Enhanced t/10examp.t test script thanks to David Cantrell.
Documented $DBI::stderr as the default value of err for internal errors.
Gofer changes:
track_recent now also keeps track of N most recent errors.
The connect method is now also counted in stats.
=head2 Changes in DBI 1.601 (svn rev 10103), 21st October 2007
Fixed t/05thrclone.t to work with Test::More >= 0.71
thanks to Jerry D. Hedden and Michael G Schwern.
Fixed DBI for VMS thanks to Peter (Stig) Edwards.
Added client-side caching to DBD::Gofer. Can use any cache with
get($k)/set($k,$v) methods, including all the Cache and Cache::Cache
distribution modules plus Cache::Memcached, Cache::FastMmap etc.
Works for all transports. Overridable per handle.
Added DBI::Util::CacheMemory for use with DBD::Gofer caching.
It's a very fast and small strict subset of Cache::Memory.
=head2 Changes in DBI 1.59 (svn rev 9874), 23rd August 2007
Fixed DBI::ProfileData to unescape headers lines read from data file.
Fixed DBI::ProfileData to not clobber $_, thanks to Alexey Tourbin.
Fixed DBI::SQL::Nano to not clobber $_, thanks to Alexey Tourbin.
Fixed DBI::PurePerl to return undef for ChildHandles if weaken not available.
Fixed DBD::Proxy disconnect error thanks to Philip Dye.
Fixed DBD::Gofer::Transport::Base bug (typo) in timeout code.
Fixed DBD::Proxy rows method thanks to Philip Dye.
Fixed dbiprof compile errors, thanks to Alexey Tourbin.
Fixed t/03handle.t to skip some tests if ChildHandles not available.
Added check_response_sub to DBI::Gofer::Execute
=head2 Changes in DBI 1.58 (svn rev 9678), 25th June 2007
Fixed code triggering fatal error in bleadperl, thanks to Steve Hay.
Fixed compiler warning thanks to Jerry D. Hedden.
Fixed t/40profile.t to use int(dbi_time()) for systems like Cygwin where
time() seems to be rounded not truncated from the high resolution time.
Removed dump_results() test from t/80proxy.t.
=head2 Changes in DBI 1.57 (svn rev 9639), 13th June 2007
Note: this release includes a change to the DBI::hash() function which will
now produce different values than before *if* your perl was built with 64-bit
'int' type (i.e. "perl -V:intsize" says intsize='8'). It's relatively rare
for perl to be configured that way, even on 64-bit systems.
Fixed XS versions of select*_*() methods to call execute()
fetch() etc., with inner handle instead of outer.
Fixed execute_for_fetch() to not cache errstr values
thanks to Bart Degryse.
Fixed unused var compiler warning thanks to JDHEDDEN.
Fixed t/86gofer_fail tests to be less likely to fail falsely.
Changed DBI::hash to return 'I32' type instead of 'int' so results are
portable/consistent regardless of size of the int type.
Corrected timeout example in docs thanks to Egmont Koblinger.
Changed t/01basic.t to warn instead of failing when it detects
a problem with Math::BigInt (some recent versions had problems).
Added support for !Time and !Time~N to DBI::Profile Path. See docs.
Added extra trace info to connect_cached thanks to Walery Studennikov.
Added non-random (deterministic) mode to DBI_GOFER_RANDOM mechanism.
Added DBIXS_REVISION macro that drivers can use.
Added more docs for private_attribute_info() method.
DBI::Profile changes:
dbi_profile() now returns ref to relevant leaf node.
Don't profile DESTROY during global destruction.
Added as_node_path_list() and as_text() methods.
DBI::ProfileDumper changes:
Don't write file if there's no profile data.
Uses full natural precision when saving data (was using %.6f)
Optimized flush_to_disk().
Locks the data file while writing.
Enabled filename to be a code ref for dynamic names.
DBI::ProfileDumper::Apache changes:
Added Quiet=>1 to avoid write to STDERR in flush_to_disk().
Added Dir=>... to specify a writable destination directory.
Enabled DBI_PROFILE_APACHE_LOG_DIR for mod_perl 1 as well as 2.
Added parent pid to default data file name.
DBI::ProfileData changes:
Added DeleteFiles option to rename & delete files once read.
Locks the data files while reading.
Added ability to sort by Path elements.
dbiprof changes:
Added --dumpnodes and --delete options.
Added/updated docs for both DBI::ProfileDumper && ::Apache.
=head2 Changes in DBI 1.56 (svn rev 9660), 18th June 2007
Fixed printf arg warnings thanks to JDHEDDEN.
Fixed returning driver-private sth attributes via gofer.
Changed pod docs docs to use =head3 instead of =item
so now in html you get links to individual methods etc.
Changed default gofer retry_limit from 2 to 0.
Changed tests to workaround Math::BigInt broken versions.
Changed dbi_profile_merge() to dbi_profile_merge_nodes()
old name still works as an alias for the new one.
Removed old DBI internal sanity check that's no longer valid
causing "panic: DESTROY (dbih_clearcom)" when tracing enabled
Added DBI_GOFER_RANDOM env var that can be use to trigger random
failures and delays when executing gofer requests. Designed to help
test automatic retry on failures and timeout handling.
Added lots more docs to all the DBD::Gofer and DBI::Gofer classes.
=head2 Changes in DBI 1.55 (svn rev 9504), 4th May 2007
Fixed set_err() so HandleSetErr hook is executed reliably, if set.
Fixed accuracy of profiling when perl configured to use long doubles.
Fixed 42prof_data.t on fast systems with poor timers thanks to Malcolm Nooning.
Fixed potential corruption in selectall_arrayref and selectrow_arrayref
for compiled drivers, thanks to Rob Davies.
Rebuild your compiled drivers after installing DBI.
Changed some handle creation code from perl to C code,
to reduce handle creation cost by ~20%.
Changed internal implementation of the CachedKids attribute
so it's a normal handle attribute (and initially undef).
Changed connect_cached and prepare_cached to avoid a FETCH method call,
and thereby reduced cost by ~5% and ~30% respectively.
Changed _set_fbav to not croak when given a wrongly sized array,
it now warns and adjusts the row buffer to match.
Changed some internals to improve performance with threaded perls.
Changed DBD::NullP to be slightly more useful for testing.
Changed File::Spec prerequisite to not require a minimum version.
Changed tests to work with other DBMs thanks to ZMAN.
Changed ex/perl_dbi_nulls_test.pl to be more descriptive.
Added more functionality to the (undocumented) Callback mechanism.
Callbacks can now elect to provide a value to be returned, in which case
the method won't be called. A callback for "*" is applied to all methods
that don't have their own callback.
Added $h->{ReadOnly} attribute.
Added support for DBI Profile Path to contain refs to scalars
which will be de-ref'd for each profile sample.
Added dbilogstrip utility to edit DBI logs for diff'ing (gets installed)
Added details for SQLite 3.3 to NULL handling docs thanks to Alex Teslik.
Added take_imp_data() to DBI::PurePerl.
Gofer related changes:
Fixed gofer pipeone & stream transports to avoid risk of hanging.
Improved error handling and tracing significantly.
Added way to generate random 1-in-N failures for methods.
Added automatic retry-on-error mechanism to gofer transport base class.
Added tests to show automatic retry mechanism works a treat!
Added go_retry_hook callback hook so apps can fine-tune retry behaviour.
Added header to request and response packets for sanity checking
and to enable version skew between client and server.
Added forced_single_resultset, max_cached_sth_per_dbh and max_cached_dbh_per_drh
to gofer executor config.
Driver-private methods installed with install_method are now proxied.
No longer does a round-trip to the server for methods it knows
have not been overridden by the remote driver.
Most significant aspects of gofer behaviour are controlled by policy mechanism.
Added policy-controlled caching of results for some methods, such as schema metadata.
The connect_cached and prepare_cached methods cache on client and server.
The bind_param_array and execute_array methods are now supported.
Worked around a DBD::Sybase bind_param bug (which is fixed in DBD::Sybase 1.07)
Added goferperf.pl utility (doesn't get installed).
Many other assorted Gofer related bug fixes, enhancements and docs.
The http and mod_perl transports have been remove to their own distribution.
Client and server will need upgrading together for this release.
=head2 Changes in DBI 1.54 (svn rev 9157), 23rd February 2007
NOTE: This release includes the 'next big thing': DBD::Gofer.
Take a look!
WARNING: This version has some subtle changes in DBI internals.
It's possible, though doubtful, that some may affect your code.
I recommend some extra testing before using this release.
Or perhaps I'm just being over cautious...
Fixed type_info when called for multiple dbh thanks to Cosimo Streppone.
Fixed compile warnings in bleadperl on freebsd-6.1-release
and solaris 10g thanks to Philip M. Gollucci.
Fixed to compile for perl built with -DNO_MATHOMS thanks to Jerry D. Hedden.
Fixed to work for bleadperl (r29544) thanks to Nicholas Clark.
Users of Perl >= 5.9.5 will require DBI >= 1.54.
Fixed rare error when profiling access to $DBI::err etc tied variables.
Fixed DBI::ProfileDumper to not be affected by changes to $/ and $,
thanks to Michael Schwern.
Changed t/40profile.t to skip tests for perl < 5.8.0.
Changed setting trace file to no longer write "Trace file set" to new file.
Changed 'handle cleared whilst still active' warning for dbh
to only be given for dbh that have active sth or are not AutoCommit.
Changed take_imp_data to call finish on all Active child sth.
Changed DBI::PurePerl trace() method to be more consistent.
Changed set_err method to effectively not append to errstr if the new errstr
is the same as the current one.
Changed handle factory methods, like connect, prepare, and table_info,
to copy any error/warn/info state of the handle being returned
up into the handle the method was called on.
Changed row buffer handling to not alter NUM_OF_FIELDS if it's
inconsistent with number of elements in row buffer array.
Updated DBI::DBD docs re handling multiple result sets.
Updated DBI::DBD docs for driver authors thanks to Ammon Riley
and Dean Arnold.
Updated column_info docs to note that if a table doesn't exist
you get an sth for an empty result set and not an error.
Added new DBD::Gofer 'stateless proxy' driver and framework,
and the DBI test suite is now also executed via DBD::Gofer,
and DBD::Gofer+DBI::PurePerl, in addition to DBI::PurePerl.
Added ability for trace() to support filehandle argument,
including tracing into a string, thanks to Dean Arnold.
Added ability for drivers to implement func() method
so proxy drivers can proxy the func method itself.
Added SQL_BIGINT type code (resolved to the ODBC/JDBC value (-5))
Added $h->private_attribute_info method.
=head2 Changes in DBI 1.53 (svn rev 7995), 31st October 2006
Fixed checks for weaken to work with early 5.8.x versions
Fixed DBD::Proxy handling of some methods, including commit and rollback.
Fixed t/40profile.t to be more insensitive to long double precision.
Fixed t/40profile.t to be insensitive to small negative shifts in time
thanks to Jamie McCarthy.
Fixed t/40profile.t to skip tests for perl < 5.8.0.
Fixed to work with current 'bleadperl' (~5.9.5) thanks to Steve Peters.
Users of Perl >= 5.9.5 will require DBI >= 1.53.
Fixed to be more robust against drivers not handling multiple result
sets properly, thanks to Gisle Aas.
Added array context support to execute_array and execute_for_fetch
methods which returns executed tuples and rows affected.
Added Tie::Cache::LRU example to docs thanks to Brandon Black.
=head2 Changes in DBI 1.52 (svn rev 6840), 30th July 2006
Fixed memory leak (per handle) thanks to Nicholas Clark and Ephraim Dan.
Fixed memory leak (16 bytes per sth) thanks to Doru Theodor Petrescu.
Fixed execute_for_fetch/execute_array to RaiseError thanks to Martin J. Evans.
Fixed for perl 5.9.4. Users of Perl >= 5.9.4 will require DBI >= 1.52.
Updated DBD::File to 0.35 to match the latest release on CPAN.
Added $dbh->statistics_info specification thanks to Brandon Black.
Many changes and additions to profiling:
Profile Path can now uses sane strings instead of obscure numbers,
can refer to attributes, assorted magical values, and even code refs!
Parsing of non-numeric DBI_PROFILE env var values has changed.
Changed DBI::Profile docs extensively - many new features.
See DBI::Profile docs for more information.
=head2 Changes in DBI 1.51 (svn rev 6475), 6th June 2006
Fixed $dbh->clone method 'signature' thanks to Jeffrey Klein.
Fixed default ping() method to return false if !$dbh->{Active}.
Fixed t/40profile.t to be insensitive to long double precision.
Fixed for perl 5.8.0's more limited weaken() function.
Fixed DBD::Proxy to not alter $@ in disconnect or AUTOLOADd methods.
Fixed bind_columns() to use return set_err(...) instead of die()
to report incorrect number of parameters, thanks to Ben Thul.
Fixed bind_col() to ignore undef as bind location, thanks to David Wheeler.
Fixed for perl 5.9.x for non-threaded builds thanks to Nicholas Clark.
Users of Perl >= 5.9.x will require DBI >= 1.51.
Fixed fetching of rows as hash refs to preserve utf8 on field names
from $sth->{NAME} thanks to Alexey Gaidukov.
Fixed build on Win32 (dbd_postamble) thanks to David Golden.
Improved performance for thread-enabled perls thanks to Gisle Aas.
Drivers can now use PERL_NO_GET_CONTEXT thanks to Gisle Aas.
Driver authors please read the notes in the DBI::DBD docs.
Changed DBI::Profile format to always include a percentage,
if not exiting then uses time between the first and last DBI call.
Changed DBI::ProfileData to be more forgiving of systems with
unstable clocks (where time may go backwards occasionally).
Clarified the 'Subclassing the DBI' docs.
Assorted minor changes to docs from comments on annocpan.org.
Changed Makefile.PL to avoid incompatible options for old gcc.
Added 'fetch array of hash refs' example to selectall_arrayref
docs thanks to Tom Schindl.
Added docs for $sth->{ParamArrays} thanks to Martin J. Evans.
Added reference to $DBI::neat_maxlen in TRACING section of docs.
Added ability for DBI::Profile Path to include attributes
and a summary of where the code was called from.
=head2 Changes in DBI 1.50 (svn rev 2307), 13 December 2005
Fixed Makefile.PL options for gcc bug introduced in 1.49.
Fixed handle magic order to keep DBD::Oracle happy.
Fixed selectrow_array to return empty list on error.
Changed dbi_profile_merge() to be able to recurse and merge
sub-trees of profile data.
Added documentation for dbi_profile_merge(), including how to
measure the time spent inside the DBI for an http request.
=head2 Changes in DBI 1.49 (svn rev 2287), 29th November 2005
Fixed assorted attribute handling bugs in DBD::Proxy.
Fixed croak() in DBD::NullP thanks to Sergey Skvortsov.
Fixed handling of take_imp_data() and dbi_imp_data attribute.
Fixed bugs in DBD::DBM thanks to Jeff Zucker.
Fixed bug in DBI::ProfileDumper thanks to Sam Tregar.
Fixed ping in DBD::Proxy thanks to George Campbell.
Fixed dangling ref in $sth after parent $dbh destroyed
with thanks to il@rol.ru for the bug report #13151
Fixed prerequisites to include Storable thanks to Michael Schwern.
Fixed take_imp_data to be more practical.
Change to require perl 5.6.1 (as advertised in 2003) not 5.6.0.
Changed internals to be more strictly coded thanks to Andy Lester.
Changed warning about multiple copies of Driver.xst found in @INC
to ignore duplicated directories thanks to Ed Avis.
Changed Driver.xst to enable drivers to define an dbd_st_prepare_sv
function where the statement parameter is an SV. That enables
compiled drivers to support SQL strings that are UTF-8.
Changed "use DBI" to only set $DBI::connect_via if not already set.
Changed docs to clarify pre-method clearing of err values.
Added ability for DBI::ProfileData to edit profile path on loading.
This enables aggregation of different SQL statements into the same
profile node - very handy when not using placeholders or when working
multiple separate tables for the same thing (ie logtable_2005_11_28)
Added $sth->{ParamTypes} specification thanks to Dean Arnold.
Added $h->{Callbacks} attribute to enable code hooks to be invoked
when certain methods are called. For example:
$dbh->{Callbacks}->{prepare} = sub { ... };
With thanks to David Wheeler for the kick start.
Added $h->{ChildHandles} (using weakrefs) thanks to Sam Tregar
I've recoded it in C so there's no significant performance impact.
Added $h->{Type} docs (returns 'dr', 'db', or 'st')
Adding trace message in DESTROY if InactiveDestroy enabled.
Added %drhs = DBI->installed_drivers();
Ported DBI::ProfileDumper::Apache to mod_perl2 RC5+
thanks to Philip M. Golluci
=head2 Changes in DBI 1.48 (svn rev 928), 14th March 2005
Fixed DBI::DBD::Metadata generation of type_info_all thanks to Steffen Goeldner
(driver authors who have used it should rerun it).
Updated docs for NULL Value placeholders thanks to Brian Campbell.
Added multi-keyfield nested hash fetching to fetchall_hashref()
thanks to Zhuang (John) Li for polishing up my draft.
Added registered driver prefixes: amzn_ for DBD::Amazon and yaswi_ for DBD::Yaswi.
=head2 Changes in DBI 1.47 (svn rev 854), 2nd February 2005
Fixed DBI::ProxyServer to not create pid files by default.
References: Ubuntu Security Notice USN-70-1, CAN-2005-0077
Thanks to Javier Fern�ndez-Sanguino Pe�a from the
Debian Security Audit Project, and Jonathan Leffler.
Fixed some tests to work with older Test::More versions.
Fixed setting $DBI::err/errstr in DBI::PurePerl.
Fixed potential undef warning from connect_cached().
Fixed $DBI::lasth handling for DESTROY so lasth points to
parent even if DESTROY called other methods.
Fixed DBD::Proxy method calls to not alter $@.
Fixed DBD::File problem with encoding pragma thanks to Erik Rijkers.
Changed error handling so undef errstr doesn't cause warning.
Changed DBI::DBD docs to use =head3/=head4 pod thanks to
Jonathan Leffler. This may generate warnings for perl 5.6.
Changed DBI::PurePerl to set autoflush on trace filehandle.
Changed DBD::Proxy to treat Username as a local attribute
so recent DBI version can be used with old DBI::ProxyServer.
Changed driver handle caching in DBD::File.
Added $GetInfoType{SQL_DATABASE_NAME} thanks to Steffen Goeldner.
Updated docs to recommend some common DSN string attributes.
Updated connect_cached() docs with issues and suggestions.
Updated docs for NULL Value placeholders thanks to Brian Campbell.
Updated docs for primary_key_info and primary_keys.
Updated docs to clarify that the default fetchrow_hashref behaviour,
of returning a ref to a new hash for each row, will not change.
Updated err/errstr/state docs for DBD authors thanks to Steffen Goeldner.
Updated handle/attribute docs for DBD authors thanks to Steffen Goeldner.
Corrected and updated LongReadLen docs thanks to Bart Lateur.
Added DBD::JDBC as a registered driver.
=head2 Changes in DBI 1.46 (svn rev 584), 16th November 2004
Fixed parsing bugs in DBI::SQL::Nano thanks to Jeff Zucker.
Fixed a couple of bad links in docs thanks to Graham Barr.
Fixed test.pl Win32 undef warning thanks to H.Merijn Brand & David Repko.
Fixed minor issues in DBI::DBD::Metadata thanks to Steffen Goeldner.
Fixed DBI::PurePerl neat() to use double quotes for utf8.
Changed execute_array() definition, and default implementation,
to not consider scalar values for execute tuple count. See docs.
Changed DBD::File to enable ShowErrorStatement by default,
which affects DBD::File subclasses such as DBD::CSV and DBD::DBM.
Changed use DBI qw(:utils) tag to include $neat_maxlen.
Updated Roadmap and ToDo.
Added data_string_diff() data_string_desc() and data_diff()
utility functions to help diagnose Unicode issues.
All can be imported via the use DBI qw(:utils) tag.
=head2 Changes in DBI 1.45 (svn rev 480), 6th October 2004
Fixed DBI::DBD code for drivers broken in 1.44.
Fixed "Free to wrong pool"/"Attempt to free unreferenced scalar" in FETCH.
=head2 Changes in DBI 1.44 (svn rev 478), 5th October 2004
Fixed build issues on VMS thanks to Jakob Snoer.
Fixed DBD::File finish() method to return 1 thanks to Jan Dubois.
Fixed rare core dump during global destruction thanks to Mark Jason Dominus.
Fixed risk of utf8 flag persisting from one row to the next.
Changed bind_param_array() so it doesn't require all bind arrays
to have the same number of elements.
Changed bind_param_array() to error if placeholder number <= 0.
Changed execute_array() definition, and default implementation,
to effectively NULL-pad shorter bind arrays.
Changed execute_array() to return "0E0" for 0 as per the docs.
Changed execute_for_fetch() definition, and default implementation,
to return "0E0" for 0 like execute() and execute_array().
Changed Test::More prerequisite to Test::Simple (which is also the name
of the distribution both are packaged in) to work around ppm behaviour.
Corrected docs to say that get/set of unknown attribute generates
a warning and is no longer fatal. Thanks to Vadim.
Corrected fetchall_arrayref() docs example thanks to Drew Broadley.
Added $h1->swap_inner_handle($h2) sponsored by BizRate.com
=head2 Changes in DBI 1.43 (svn rev 377), 2nd July 2004
Fixed connect() and connect_cached() RaiseError/PrintError
which would sometimes show "(no error string)" as the error.
Fixed compiler warning thanks to Paul Marquess.
Fixed "trace level set to" trace message thanks to H.Merijn Brand.
Fixed DBD::DBM $dbh->{dbm_tables}->{...} to be keyed by the
table name not the file name thanks to Jeff Zucker.
Fixed last_insert_id(...) thanks to Rudy Lippan.
Fixed propagation of scalar/list context into proxied methods.
Fixed DBI::Profile::DESTROY to not alter $@.
Fixed DBI::ProfileDumper new() docs thanks to Michael Schwern.
Fixed _load_class to propagate $@ thanks to Drew Taylor.
Fixed compile warnings on Win32 thanks to Robert Baron.
Fixed problem building with recent versions of MakeMaker.
Fixed DBD::Sponge not to generate warning with threads.
Fixed DBI_AUTOPROXY to work more than once thanks to Steven Hirsch.
Changed TraceLevel 1 to not show recursive/nested calls.
Changed getting or setting an invalid attribute to no longer be
a fatal error but generate a warning instead.
Changed selectall_arrayref() to call finish() if
$attr->{MaxRows} is defined.
Changed all tests to use Test::More and enhanced the tests thanks
to Stevan Little and Andy Lester. See http://qa.perl.org/phalanx/
Changed Test::More minimum prerequisite version to 0.40 (2001).
Changed DBI::Profile header to include the date and time.
Added DBI->parse_dsn($dsn) method.
Added warning if build directory path contains white space.
Added docs for parse_trace_flags() and parse_trace_flag().
Removed "may change" warnings from the docs for table_info(),
primary_key_info(), and foreign_key_info() methods.
=head2 Changes in DBI 1.42 (svn rev 222), 12th March 2004
Fixed $sth->{NUM_OF_FIELDS} of non-executed statement handle
to be undef as per the docs (it was 0).
Fixed t/41prof_dump.t to work with perl5.9.1.
Fixed DBD_ATTRIB_DELETE macro thanks to Marco Paskamp.
Fixed DBI::PurePerl looks_like_number() and $DBI::rows.
Fixed ref($h)->can("foo") to not croak.
Changed attributes (NAME, TYPE etc) of non-executed statement
handle to be undef instead of triggering an error.
Changed ShowErrorStatement to apply to more $dbh methods.
Changed DBI_TRACE env var so just does this at load time:
DBI->trace(split '=', $ENV{DBI_TRACE}, 2);
Improved "invalid number of parameters" error message.
Added DBI::common as base class for DBI::db, DBD::st etc.
Moved methods common to all handles into DBI::common.
Major tracing enhancement:
Added $h->parse_trace_flags("foo|SQL|7") to map a group of
trace flags into the corresponding trace flag bits.
Added automatic calling of parse_trace_flags() if
setting the trace level to a non-numeric value:
$h->{TraceLevel}="foo|SQL|7"; $h->trace("foo|SQL|7");
DBI->connect("dbi:Driver(TraceLevel=SQL|foo):...", ...);
Currently no trace flags have been defined.
Added to, and reworked, the trace documentation.
Added dbivport.h for driver authors to use.
Major driver additions that Jeff Zucker and I have been working on:
Added DBI::SQL::Nano a 'smaller than micro' SQL parser
with an SQL::Statement compatible API. If SQL::Statement
is installed then DBI::SQL::Nano becomes an empty subclass
of SQL::Statement, unless the DBI_SQL_NANO env var is true.
Added DBD::File, modified to use DBI::SQL::Nano.
Added DBD::DBM, an SQL interface to DBM files using DBD::File.
Documentation changes:
Corrected typos in docs thanks to Steffen Goeldner.
Corrected execute_for_fetch example thanks to Dean Arnold.
=head2 Changes in DBI 1.41 (svn rev 130), 22nd February 2004
Fixed execute_for_array() so tuple_status parameter is optional
as per docs, thanks to Ed Avis.
Fixed execute_for_array() docs to say that it returns undef if
any of the execute() calls fail.
Fixed take_imp_data() test on m68k reported by Christian Hammers.
Fixed write_typeinfo_pm inconsistencies in DBI::DBD::Metadata
thanks to Andy Hassall.
Fixed $h->{TraceLevel} to not return DBI->trace trace level
which it used to if DBI->trace trace level was higher.
Changed set_err() to append to errstr, with a leading "\n" if it's
not empty, so that multiple error/warning messages are recorded.
Changed trace to limit elements dumped when an array reference is
returned from a method to the max(40, $DBI::neat_maxlen/10)
so that fetchall_arrayref(), for example, doesn't flood the trace.
Changed trace level to be a four bit integer (levels 0 thru 15)
and a set of topic flags (no topics have been assigned yet).
Changed column_info() to check argument count.
Extended bind_param() TYPE attribute specification to imply
standard formating of value, eg SQL_DATE implies 'YYYY-MM-DD'.
Added way for drivers to indicate 'success with info' or 'warning'
by setting err to "0" for warning and "" for information.
Both values are false and so don't trigger RaiseError etc.
Thanks to Steffen Goeldner for the original idea.
Added $h->{HandleSetErr} = sub { ... } to be called at the
point that an error, warn, or info state is recorded.
The code can alter the err, errstr, and state values
(e.g., to promote an error to a warning, or the reverse).
Added $h->{PrintWarn} attribute to enable printing of warnings
recorded by the driver. Defaults to same value as $^W (perl -w).
Added $h->{ErrCount} attribute, incremented whenever an error is
recorded by the driver via set_err().
Added $h->{Executed} attribute, set if do()/execute() called.
Added \%attr parameter to foreign_key_info() method.
Added ref count of inner handle to "DESTROY ignored for outer" msg.
Added Win32 build config checks to DBI::DBD thanks to Andy Hassall.
Added bind_col to Driver.xst so drivers can define their own.
Added TYPE attribute to bind_col and specified the expected
driver behaviour.
Major update to signal handling docs thanks to Lincoln Baxter.
Corrected dbiproxy usage doc thanks to Christian Hammers.
Corrected type_info_all index hash docs thanks to Steffen Goeldner.
Corrected type_info COLUMN_SIZE to chars not bytes thanks to Dean Arnold.
Corrected get_info() docs to include details of DBI::Const::GetInfoType.
Clarified that $sth->{PRECISION} is OCTET_LENGTH for char types.
=head2 Changes in DBI 1.40, 7th January 2004
Fixed handling of CachedKids when DESTROYing threaded handles.
Fixed sql_user_name() in DBI::DBD::Metadata (used by write_getinfo_pm)
to use $dbh->{Username}. Driver authors please update your code.
Changed connect_cached() when running under Apache::DBI
to route calls to Apache::DBI::connect().
Added CLONE() to DBD::Sponge and DBD::ExampleP.
Added warning when starting a new thread about any loaded driver
which does not have a CLONE() function.
Added new prepare_cache($sql, \%attr, 3) option to manage Active handles.
Added SCALE and NULLABLE support to DBD::Sponge.
Added missing execute() in fetchall_hashref docs thanks to Iain Truskett.
Added a CONTRIBUTING section to the docs with notes on creating patches.
=head2 Changes in DBI 1.39, 27th November 2003
Fixed STORE to not clear error during nested DBI call, again/better,
thanks to Tony Bowden for the report and helpful test case.
Fixed DBI dispatch to not try to use AUTOLOAD for driver methods unless
the method has been declared (as methods should be when using AUTOLOAD).
This fixes a problem when the Attribute::Handlers module is loaded.
Fixed cwd check code to use $Config{path_sep} thanks to Steve Hay.
Fixed unqualified croak() calls thanks to Steffen Goeldner.
Fixed DBD::ExampleP TYPE and PRECISION attributes thanks to Tom Lowery.
Fixed tracing of methods that only get traced at high trace levels.
The level 1 trace no longer includes nested method calls so it generally
just shows the methods the application explicitly calls.
Added line to trace log (level>=4) when err/errstr is cleared.
Updated docs for InactiveDestroy and point out where and when the
trace includes the process id.
Update DBI::DBD docs thanks to Steffen Goeldner.
Removed docs saying that the DBI->data_sources method could be
passed a $dbh. The $dbh->data_sources method should be used instead.
Added link to 'DBI recipes' thanks to Giuseppe Maxia:
http://gmax.oltrelinux.com/dbirecipes.html (note that this
is not an endorsement that the recipies are 'optimal')
Note: There is a bug in perl 5.8.2 when configured with threads
and debugging enabled (bug #24463) which causes a DBI test to fail.
=head2 Changes in DBI 1.38, 21th August 2003
NOTE: The DBI now requires perl version 5.6.0 or later.
(As per notice in DBI 1.33 released 27th February 2003)
Fixed spurious t/03handles failure on 64bit perls reported by H.Merijn Brand.
Fixed spurious t/15array failure on some perl versions thanks to Ed Avis.
Fixed build using dmake on windows thanks to Steffen Goeldner.
Fixed build on using some shells thanks to Gurusamy Sarathy.
Fixed ParamValues to only be appended to ShowErrorStatement if not empty.
Fixed $dbh->{Statement} not being writable by drivers in some cases.
Fixed occasional undef warnings on connect failures thanks to Ed Avis.
Fixed small memory leak when using $sth->{NAME..._hash}.
Fixed 64bit warnings thanks to Marian Jancar.
Fixed DBD::Proxy::db::DESTROY to not alter $@ thanks to Keith Chapman.
Fixed Makefile.PL status from WriteMakefile() thanks to Leon Brocard.
Changed "Can't set ...->{Foo}: unrecognised attribute" from an error to a
warning when running with DBI::ProxyServer to simplify upgrades.
Changed execute_array() to no longer require ArrayTupleStatus attribute.
Changed DBI->available_drivers to not hide DBD::Sponge.
Updated/moved placeholder docs to a better place thanks to Johan Vromans.
Changed dbd_db_do4 api in Driver.xst to match dbd_st_execute (return int,
not bool), relevant only to driver authors.
Changed neat(), and thus trace(), so strings marked as utf8 are presented
in double quotes instead of single quotes and are not sanitized.
Added $dbh->data_sources method.
Added $dbh->last_insert_id method.
Added $sth->execute_for_fetch($fetch_tuple_sub, \@tuple_status) method.
Added DBI->installed_versions thanks to Jeff Zucker.
Added $DBI::Profile::ON_DESTROY_DUMP variable.
Added docs for DBD::Sponge thanks to Mark Stosberg.
=head2 Changes in DBI 1.37, 15th May 2003
Fixed "Can't get dbh->{Statement}: unrecognised attribute" error in test
caused by change to perl internals in 5.8.0
Fixed to build with latest development perl (5.8.1@19525).
Fixed C code to use all ANSI declarations thanks to Steven Lembark.
=head2 Changes in DBI 1.36, 11th May 2003
Fixed DBI->connect to carp instead of croak on 'old-style' usage.
Fixed connect(,,, { RootClass => $foo }) to not croak if module not found.
Fixed code generated by DBI::DBD::Metadata thanks to DARREN@cpan.org (#2270)
Fixed DBI::PurePerl to not reset $@ during method dispatch.
Fixed VMS build thanks to Michael Schwern.
Fixed Proxy disconnect thanks to Steven Hirsch.
Fixed error in DBI::DBD docs thanks to Andy Hassall.
Changed t/40profile.t to not require Time::HiRes.
Changed DBI::ProxyServer to load DBI only on first request, which
helps threaded server mode, thanks to Bob Showalter.
Changed execute_array() return value from row count to executed
tuple count, and now the ArrayTupleStatus attribute is mandatory.
NOTE: That is an API definition change that may affect your code.
Changed CompatMode attribute to also disable attribute 'quick FETCH'.
Changed attribute FETCH to be slightly faster thanks to Stas Bekman.
Added workaround for perl bug #17575 tied hash nested FETCH
thanks to Silvio Wanka.
Added Username and Password attributes to connect(..., \%attr) and so
also embedded in DSN like "dbi:Driver(Username=user,Password=pass):..."
Username and Password can't contain ")", ",", or "=" characters.
The predence is DSN first, then \%attr, then $user & $pass parameters,
and finally the DBI_USER & DBI_PASS environment variables.
The Username attribute is stored in the $dbh but the Password is not.
Added ProxyServer HOWTO configure restrictions docs thanks to Jochen Wiedmann.
Added MaxRows attribute to selectcol_arrayref prompted by Wojciech Pietron.
Added dump_handle as a method not just a DBI:: utility function.
Added on-demand by-row data feed into execute_array() using code ref,
or statement handle. For example, to insert from a select:
$insert_sth->execute_array( { ArrayTupleFetch => $select_sth, ... } )
Added warning to trace log when $h->{foo}=... is ignored due to
invalid prefix (e.g., not 'private_').
=head2 Changes in DBI 1.35, 7th March 2003
Fixed memory leak in fetchrow_hashref introduced in DBI 1.33.
Fixed various DBD::Proxy errors introduced in DBI 1.33.
Fixed to ANSI C in dbd_dr_data_sources thanks to Jonathan Leffler.
Fixed $h->can($method_name) to return correct code ref.
Removed DBI::Format from distribution as it's now part of the
separate DBI::Shell distribution by Tom Lowery.
Updated DBI::DBD docs with a note about the CLONE method.
Updated DBI::DBD docs thanks to Jonathan Leffler.
Updated DBI::DBD::Metadata for perl 5.5.3 thanks to Jonathan Leffler.
Added note to install_method docs about setup_driver() method.
=head2 Changes in DBI 1.34, 28th February 2003
Fixed DBI::DBD docs to refer to DBI::DBD::Metadata thanks to Jonathan Leffler.
Fixed dbi_time() compile using BorlandC on Windows thanks to Steffen Goeldner.
Fixed profile tests to do enough work to measure on Windows.
Fixed disconnect_all() to not be required by drivers.
Added $okay = $h->can($method_name) to check if a method exists.
Added DBD::*::*->install_method($method_name, \%attr) so driver private
methods can be 'installed' into the DBI dispatcher and no longer
need to be called using $h->func(..., $method_name).
Enhanced $dbh->clone() and documentation.
Enhanced docs to note that dbi_time(), and thus profiling, is limited
to only millisecond (seconds/1000) resolution on Windows.
Removed old DBI::Shell from distribution and added Tom Lowery's improved
version to the Bundle::DBI file.
Updated minimum version numbers for modules in Bundle::DBI.
=head2 Changes in DBI 1.33, 27th February 2003
NOTE: Future versions of the DBI *will not* support perl 5.6.0 or earlier.
: Perl 5.6.1 will be the minimum supported version.
NOTE: The "old-style" connect: DBI->connect($database, $user, $pass, $driver);
: has been deprecated for several years and will now generate a warning.
: It will be removed in a later release. Please change any old connect() calls.
Added $dbh2 = $dbh1->clone to make a new connection to the database
that is identical to the original one. clone() can be called even after
the original handle has been disconnected. See the docs for more details.
Fixed merging of profile data to not sum DBIprof_FIRST_TIME values.
Fixed unescaping of newlines in DBI::ProfileData thanks to Sam Tregar.
Fixed Taint bug with fetchrow_hashref with help from Bradley Baetz.
Fixed $dbh->{Active} for DBD::Proxy, reported by Bob Showalter.
Fixed STORE to not clear error during nested DBI call,
thanks to Tony Bowden for the report and helpful test case.
Fixed DBI::PurePerl error clearing behaviour.
Fixed dbi_time() and thus DBI::Profile on Windows thanks to Smejkal Petr.
Fixed problem that meant ShowErrorStatement could show wrong statement,
thanks to Ron Savage for the report and test case.
Changed Apache::DBI hook to check for $ENV{MOD_PERL} instead of
$ENV{GATEWAY_INTERFACE} thanks to Ask Bjoern Hansen.
No longer tries to dup trace logfp when an interpreter is being cloned.
Database handles no longer inherit shared $h->err/errstr/state storage
from their drivers, so each $dbh has it's own $h->err etc. values
and is no longer affected by calls made on other dbh's.
Now when a dbh is destroyed it's err/errstr/state values are copied
up to the driver so checking $DBI::errstr still works as expected.
Build / portability fixes:
Fixed t/40profile.t to not use Time::HiRes.
Fixed t/06attrs.t to not be locale sensitive, reported by Christian Hammers.
Fixed sgi compiler warnings, reported by Paul Blake.
Fixed build using make -j4, reported by Jonathan Leffler.
Fixed build and tests under VMS thanks to Craig A. Berry.
Documentation changes:
Documented $high_resolution_time = dbi_time() function.
Documented that bind_col() can take an attribute hash.
Clarified documentation for ParamValues attribute hash keys.
Many good DBI documentation tweaks from Jonathan Leffler,
including a major update to the DBI::DBD driver author guide.
Clarified that execute() should itself call finish() if it's
called on a statement handle that's still active.
Clarified $sth->{ParamValues}. Driver authors please note.
Removed "NEW" markers on some methods and attributes and
added text to each giving the DBI version it was added in,
if it was added after DBI 1.21 (Feb 2002).
Changes of note for authors of all drivers:
Added SQL_DATA_TYPE, SQL_DATETIME_SUB, NUM_PREC_RADIX, and
INTERVAL_PRECISION fields to docs for type_info_all. There were
already in type_info(), but type_info_all() didn't specify the
index values. Please check and update your type_info_all() code.
Added DBI::DBD::Metadata module that auto-generates your drivers
get_info and type_info_all data and code, thanks mainly to
Jonathan Leffler and Steffen Goeldner. If you've not implemented
get_info and type_info_all methods and your database has an ODBC
driver available then this will do all the hard work for you!
Drivers should no longer pass Err, Errstr, or State to _new_drh
or _new_dbh functions.
Please check that you support the slightly modified behaviour of
$sth->{ParamValues}, e.g., always return hash with keys if possible.
Changes of note for authors of compiled drivers:
Added dbd_db_login6 & dbd_st_finish3 prototypes thanks to Jonathan Leffler.
All dbd_*_*() functions implemented by drivers must have a
corresponding #define dbd_*_* <driver_prefix>_*_* otherwise
the driver may not work with a future release of the DBI.
Changes of note for authors of drivers which use Driver.xst:
Some new method hooks have been added are are enabled by
defining corresponding macros:
$drh->data_sources() - dbd_dr_data_sources
$dbh->do() - dbd_db_do4
The following methods won't be compiled into the driver unless
the corresponding macro has been #defined:
$drh->disconnect_all() - dbd_discon_all
=head2 Changes in DBI 1.32, 1st December 2002
Fixed to work with 5.005_03 thanks to Tatsuhiko Miyagawa (I've not tested it).
Reenabled taint tests (accidentally left disabled) spotted by Bradley Baetz.
Improved docs for FetchHashKeyName attribute thanks to Ian Barwick.
Fixed core dump if fetchrow_hashref given bad argument (name of attribute
with a value that wasn't an array reference), spotted by Ian Barwick.
Fixed some compiler warnings thanks to David Wheeler.
Updated Steven Hirsch's enhanced proxy work (seems I left out a bit).
Made t/40profile.t tests more reliable, reported by Randy, who is part of
the excellent CPAN testers team: http://testers.cpan.org/
(Please visit, see the valuable work they do and, ideally, join in!)
=head2 Changes in DBI 1.31, 29th November 2002
The fetchall_arrayref method, when called with a $maxrows parameter,
no longer gives an error if called again after all rows have been
fetched. This simplifies application logic when fetching in batches.
Also added batch-fetch while() loop example to the docs.
The proxy now supports non-lazy (synchronous) prepare, positioned
updates (for selects containing 'for update'), PlRPC config set
via attributes, and accurate propagation of errors, all thanks
to Steven Hirsch (plus a minor fix from Sean McMurray and doc
tweaks from Michael A Chase).
The DBI_AUTOPROXY env var can now hold the full dsn of the proxy driver
plus attributes, like "dbi:Proxy(proxy_foo=>1):host=...".
Added TaintIn & TaintOut attributes to give finer control over
tainting thanks to Bradley Baetz.
The RootClass attribute no longer ignores failure to load a module,
but also doesn't try to load a module if the class already exists,
with thanks to James FitzGibbon.
HandleError attribute works for connect failures thanks to David Wheeler.
The connect() RaiseError/PrintError message now includes the username.
Changed "last handle unknown or destroyed" warning to be a trace message.
Removed undocumented $h->event() method.
Further enhancements to DBD::PurePerl accuracy.
The CursorName attribute now defaults to undef and not an error.
DBI::Profile changes:
New DBI::ProfileDumper, DBI::ProfileDumper::Apache, and
DBI::ProfileData modules (to manage the storage and processing
of profile data), plus dbiprof program for analyzing profile
data - with many thanks to Sam Tregar.
Added $DBI::err (etc) tied variable lookup time to profile.
Added time for DESTROY method into parent handles profile (used to be ignored).
Documentation changes:
Documented $dbh = $sth->{Database} attribute.
Documented $dbh->connected(...) post-connection call when subclassing.
Updated some minor doc issues thanks to H.Merijn Brand.
Updated Makefile.PL example in DBI::DBD thanks to KAWAI,Takanori.
Fixed execute_array() example thanks to Peter van Hardenberg.
Changes for driver authors, not required but strongly recommended:
Change DBIS to DBIc_DBISTATE(imp_xxh) [or imp_dbh, imp_sth etc]
Change DBILOGFP to DBIc_LOGPIO(imp_xxh) [or imp_dbh, imp_sth etc]
Any function from which all instances of DBIS and DBILOGFP are
removed can also have dPERLINTERP removed (a good thing).
All use of the DBIh_EVENT* macros should be removed.
Major update to DBI::DBD docs thanks largely to Jonathan Leffler.
Add these key values: 'Err' => \my $err, 'Errstr' => \my $errstr,
to the hash passed to DBI::_new_dbh() in your driver source code.
That will make each $dbh have it's own $h->err and $h->errstr
values separate from other $dbh belonging to the same driver.
If you have a ::db or ::st DESTROY methods that do nothing
you can now remove them - which speeds up handle destruction.
=head2 Changes in DBI 1.30, 18th July 2002
Fixed problems with selectrow_array, selectrow_arrayref, and
selectall_arrayref introduced in DBI 1.29.
Fixed FETCHing a handle attribute to not clear $DBI::err etc (broken in 1.29).
Fixed core dump at trace level 9 or above.
Fixed compilation with perl 5.6.1 + ithreads (i.e. Windows).
Changed definition of behaviour of selectrow_array when called in a scalar
context to match fetchrow_array.
Corrected selectrow_arrayref docs which showed selectrow_array thanks to Paul DuBois.
=head2 Changes in DBI 1.29, 15th July 2002
NOTE: This release changes the specified behaviour for the
: fetchrow_array method when called in a scalar context:
: The DBI spec used to say that it would return the FIRST field.
: Which field it returns (i.e., the first or the last) is now undefined.
: This does not affect statements that only select one column, which is
: usually the case when fetchrow_array is called in a scalar context.
: FYI, this change was triggered by discovering that the fetchrow_array
: implementation in Driver.xst (used by most compiled drivers)
: didn't match the DBI specification. Rather than change the code
: to match, and risk breaking existing applications, I've changed the
: specification (that part was always of dubious value anyway).
NOTE: Future versions of the DBI may not support for perl 5.5 much longer.
: If you are still using perl 5.005_03 you should be making plans to
: upgrade to at least perl 5.6.1, or 5.8.0. Perl 5.8.0 is due to be
: released in the next week or so. (Although it's a "point 0" release,
: it is the most thoroughly tested release ever.)
Added XS/C implementations of selectrow_array, selectrow_arrayref, and
selectall_arrayref to Driver.xst. See DBI 1.26 Changes for more info.
Removed support for the old (fatally flawed) "5005" threading model.
Added support for new perl 5.8 iThreads thanks to Gerald Richter.
(Threading support and safety should still be regarded as beta
quality until further notice. But it's much better than it was.)
Updated the "Threads and Thread Safety" section of the docs.
The trace output can be sent to STDOUT instead of STDERR by using
"STDOUT" as the name of the file, i.e., $h->trace(..., "STDOUT")
Added pointer to perlreftut, perldsc, perllol, and perlboot manuals
into the intro section of the docs, suggested by Brian McCain.
Fixed DBI::Const::GetInfo::* pod docs thanks to Zack Weinberg.
Some changes to how $dbh method calls are treated by DBI::Profile:
Meta-data methods now clear $dbh->{Statement} on entry.
Some $dbh methods are now profiled as if $dbh->{Statement} was empty
(because thet're unlikely to actually relate to its contents).
Updated dbiport.h to ppport.h from perl 5.8.0.
Tested with perl 5.5.3 (vanilla, Solaris), 5.6.1 (vanilla, Solaris), and
perl 5.8.0 (RC3@17527 with iThreads & Multiplicity on Solaris and FreeBSD).
=head2 Changes in DBI 1.28, 14th June 2002
Added $sth->{ParamValues} to return a hash of the most recent
values bound to placeholders via bind_param() or execute().
Individual drivers need to be updated to support it.
Enhanced ShowErrorStatement to include ParamValues if available:
"DBD::foo::st execute failed: errstr [for statement ``...'' with params: 1='foo']"
Further enhancements to DBD::PurePerl accuracy.
=head2 Changes in DBI 1.27, 13th June 2002
Fixed missing column in C implementation of fetchall_arrayref()
thanks to Philip Molter for the prompt reporting of the problem.
=head2 Changes in DBI 1.26, 13th June 2002
Fixed t/40profile.t to work on Windows thanks to Smejkal Petr.
Fixed $h->{Profile} to return undef, not error, if not set.
Fixed DBI->available_drivers in scalar context thanks to Michael Schwern.
Added C implementations of selectrow_arrayref() and fetchall_arrayref()
in Driver.xst. All compiled drivers using Driver.xst will now be
faster making those calls. Most noticeable with fetchall_arrayref for
many rows or selectrow_arrayref with a fast query. For example, using
DBD::mysql a selectrow_arrayref for a single row using a primary key
is ~20% faster, and fetchall_arrayref for 20000 rows is twice as fast!
Drivers just need to be recompiled and reinstalled to enable it.
The fetchall_arrayref speed up only applies if $slice parameter is not used.
Added $max_rows parameter to fetchall_arrayref() to optionally limit
the number of rows returned. Can now fetch batches of rows.
Added MaxRows attribute to selectall_arrayref()
which then passes it to fetchall_arrayref().
Changed selectrow_array to make use of selectrow_arrayref.
Trace level 1 now shows first two parameters of all methods
(used to only for that for some, like prepare,execute,do etc)
Trace indicator for recursive calls (first char on trace lines)
now starts at 1 not 2.
Documented that $h->func() does not trigger RaiseError etc
so applications must explicitly check for errors.
DBI::Profile with DBI_PROFILE now shows percentage time inside DBI.
HandleError docs updated to show that handler can edit error message.
HandleError subroutine interface is now regarded as stable.
=head2 Changes in DBI 1.25, 5th June 2002
Fixed build problem on Windows and some compiler warnings.
Fixed $dbh->{Driver} and $sth->{Statement} for driver internals
These are 'inner' handles as per behaviour prior to DBI 1.16.
Further minor improvements to DBI::PurePerl accuracy.
=head2 Changes in DBI 1.24, 4th June 2002
Fixed reference loop causing a handle/memory leak
that was introduced in DBI 1.16.
Fixed DBI::Format to work with 'filehandles' from IO::Scalar
and similar modules thanks to report by Jeff Boes.
Fixed $h->func for DBI::PurePerl thanks to Jeff Zucker.
Fixed $dbh->{Name} for DBI::PurePerl thanks to Dean Arnold.
Added DBI method call profiling and benchmarking.
This is a major new addition to the DBI.
See $h->{Profile} attribute and DBI::Profile module.
For a quick trial, set the DBI_PROFILE environment variable and
run your favourite DBI script. Try it with DBI_PROFILE set to 1,
then try 2, 4, 8, 10, and -10. Have fun!
Added execute_array() and bind_param_array() documentation
with thanks to Dean Arnold.
Added notes about the DBI having not yet been tested with iThreads
(testing and patches for SvLOCK etc welcome).
Removed undocumented Handlers attribute (replaced by HandleError).
Tested with 5.5.3 and 5.8.0 RC1.
=head2 Changes in DBI 1.23, 25th May 2002
Greatly improved DBI::PurePerl in performance and accuracy.
Added more detail to DBI::PurePerl docs about what's not supported.
Fixed undef warnings from t/15array.t and DBD::Sponge.
=head2 Changes in DBI 1.22, 22nd May 2002
Added execute_array() and bind_param_array() with special thanks
to Dean Arnold. Not yet documented. See t/15array.t for examples.
All drivers now automatically support these methods.
Added DBI::PurePerl, a transparent DBI emulation for pure-perl drivers
with special thanks to Jeff Zucker. Perldoc DBI::PurePerl for details.
Added DBI::Const::GetInfo* modules thanks to Steffen Goeldner.
Added write_getinfo_pm utility to DBI::DBD thanks to Steffen Goeldner.
Added $allow_active==2 mode for prepare_cached() thanks to Stephen Clouse.
Updated DBI::Format to Revision 11.4 thanks to Tom Lowery.
Use File::Spec in Makefile.PL (helps VMS etc) thanks to Craig Berry.
Extend $h->{Warn} to commit/rollback ineffective warning thanks to Jeff Baker.
Extended t/preparse.t and removed "use Devel::Peek" thanks to Scott Hildreth.
Only copy Changes to blib/lib/Changes.pm once thanks to Jonathan Leffler.
Updated internals for modern perls thanks to Jonathan Leffler and Jeff Urlwin.
Tested with perl 5.7.3 (just using default perl config).
Documentation changes:
Added 'Catalog Methods' section to docs thanks to Steffen Goeldner.
Updated README thanks to Michael Schwern.
Clarified that driver may choose not to start new transaction until
next use of $dbh after commit/rollback.
Clarified docs for finish method.
Clarified potentials problems with prepare_cached() thanks to Stephen Clouse.
=head2 Changes in DBI 1.21, 7th February 2002
The minimum supported perl version is now 5.005_03.
Fixed DBD::Proxy support for AutoCommit thanks to Jochen Wiedmann.
Fixed DBI::ProxyServer bind_param(_inout) handing thanks to Oleg Mechtcheriakov.
Fixed DBI::ProxyServer fetch loop thanks to nobull@mail.com.
Fixed install_driver do-the-right-thing with $@ on error. It, and connect(),
will leave $@ empty on success and holding the error message on error.
Thanks to Jay Lawrence, Gavin Sherlock and others for the bug report.
Fixed fetchrow_hashref to assign columns to the hash left-to-right
so later fields with the same name overwrite earlier ones
as per DBI < 1.15, thanks to Kay Roepke.
Changed tables() to use quote_indentifier() if the driver returns a
true value for $dbh->get_info(29) # SQL_IDENTIFIER_QUOTE_CHAR
Changed ping() so it no longer triggers RaiseError/PrintError.
Changed connect() to not call $class->install_driver unless needed.
Changed DESTROY to catch fatal exceptions and append to $@.
Added ISO SQL/CLI & ODBCv3 data type definitions thanks to Steffen Goeldner.
Removed the definition of SQL_BIGINT data type constant as the value is
inconsistent between standards (ODBC=-5, SQL/CLI=25).
Added $dbh->column_info(...) thanks to Steffen Goeldner.
Added $dbh->foreign_key_info(...) thanks to Steffen Goeldner.
Added $dbh->quote_identifier(...) insipred by Simon Oliver.
Added $dbh->set_err(...) for DBD authors and DBI subclasses
(actually been there for a while, now expanded and documented).
Added $h->{HandleError} = sub { ... } addition and/or alternative
to RaiseError/PrintError. See the docs for more info.
Added $h->{TraceLevel} = N attribute to set/get trace level of handle
thus can set trace level via an (eg externally specified) DSN
using the embedded attribute syntax:
$dsn = 'dbi:DB2(PrintError=1,TraceLevel=2):dbname';
Plus, you can also now do: local($h->{TraceLevel}) = N;
(but that leaks a little memory in some versions of perl).
Added some call tree information to trace output if trace level >= 3
With thanks to Graham Barr for the stack walking code.
Added experimental undocumented $dbh->preparse(), see t/preparse.t
With thanks to Scott T. Hildreth for much of the work.
Added Fowler/Noll/Vo hash type as an option to DBI::hash().
Documentation changes:
Added DBI::Changes so now you can "perldoc DBI::Changes", yeah!
Added selectrow_arrayref & selectrow_hashref docs thanks to Doug Wilson.
Added 'Standards Reference Information' section to docs to gather
together all references to relevant on-line standards.
Added link to poop.sourceforge.net into the docs thanks to Dave Rolsky.
Added link to hyperlinked BNF for SQL92 thanks to Jeff Zucker.
Added 'Subclassing the DBI' docs thanks to Stephen Clouse, and
then changed some of them to reflect the new approach to subclassing.
Added stronger wording to description of $h->{private_*} attributes.
Added docs for DBI::hash.
Driver API changes:
Now a COPY of the DBI->connect() attributes is passed to the driver
connect() method, so it can process and delete any elements it wants.
Deleting elements reduces/avoids the explicit
$dbh->{$_} = $attr->{$_} foreach keys %$attr;
that DBI->connect does after the driver connect() method returns.
=head2 Changes in DBI 1.20, 24th August 2001
WARNING: This release contains two changes that may affect your code.
: Any code using selectall_hashref(), which was added in March 2001, WILL
: need to be changed. Any code using fetchall_arrayref() with a non-empty
: hash slice parameter may, in a few rare cases, need to be changed.
: See the change list below for more information about the changes.
: See the DBI documentation for a description of current behaviour.
Fixed memory leak thanks to Toni Andjelkovic.
Changed fetchall_arrayref({ foo=>1, ...}) specification again (sorry):
The key names of the returned hashes is identical to the letter case of
the names in the parameter hash, regardless of the L</FetchHashKeyName>
attribute. The letter case is ignored for matching.
Changed fetchall_arrayref([...]) array slice syntax specification to
clarify that the numbers in the array slice are perl index numbers
(which start at 0) and not column numbers (which start at 1).
Added { Columns=>... } and { Slice =>... } attributes to selectall_arrayref()
which is passed to fetchall_arrayref() so it can fetch hashes now.
Added a { Columns => [...] } attribute to selectcol_arrayref() so that
the list it returns can be built from more than one column per row.
Why? Consider my %hash = @{$dbh->selectcol_arrayref($sql,{ Columns=>[1,2]})}
to return id-value pairs which can be used directly to build a hash.
Added $hash_ref = $sth->fetchall_hashref( $key_field )
which returns a ref to a hash with, typically, one element per row.
$key_field is the name of the field to get the key for each row from.
The value of the hash for each row is a hash returned by fetchrow_hashref.
Changed selectall_hashref to return a hash ref (from fetchall_hashref)
and not an array of hashes as it has since DBI 1.15 (end March 2001).
WARNING: THIS CHANGE WILL BREAK ANY CODE USING selectall_hashref()!
Sorry, but I think this is an important regularization of the API.
To get previous selectall_hashref() behaviour (an array of hash refs)
change $ary_ref = $dbh->selectall_hashref( $statement, undef, @bind);
to $ary_ref = $dbh->selectall_arrayref($statement, { Columns=>{} }, @bind);
Added NAME_lc_hash, NAME_uc_hash, NAME_hash statement handle attributes.
which return a ref to a hash of field_name => field_index (0..n-1) pairs.
Fixed select_hash() example thanks to Doug Wilson.
Removed (unbundled) DBD::ADO and DBD::Multiplex from the DBI distribution.
The latest versions of those modules are available from CPAN sites.
Added $dbh->begin_work. This method causes AutoCommit to be turned
off just until the next commit() or rollback().
Driver authors: if the DBIcf_BegunWork flag is set when your commit or
rollback method is called then please turn AutoCommit on and clear the
DBIcf_BegunWork flag. If you don't then the DBI will but it'll be much
less efficient and won't handle error conditions very cleanly.
Retested on perl 5.4.4, but the DBI won't support 5.4.x much longer.
Added text to SUPPORT section of the docs:
For direct DBI and DBD::Oracle support, enhancement, and related work
I am available for consultancy on standard commercial terms.
Added text to ACKNOWLEDGEMENTS section of the docs:
Much of the DBI and DBD::Oracle was developed while I was Technical
Director (CTO) of the Paul Ingram Group (www.ig.co.uk). So I'd
especially like to thank Paul for his generosity and vision in
supporting this work for many years.
=head2 Changes in DBI 1.19, 20th July 2001
Made fetchall_arrayref({ foo=>1, ...}) be more strict to the specification
in relation to wanting hash slice keys to be lowercase names.
WARNING: If you've used fetchall_arrayref({...}) with a hash slice
that contains keys with uppercase letters then your code will break.
(As far as I recall the spec has always said don't do that.)
Fixed $sth->execute() to update $dbh->{Statement} to $sth->{Statement}.
Added row number to trace output for fetch method calls.
Trace level 1 no longer shows fetches with row>1 (to reduce output volume).
Added $h->{FetchHashKeyName} = 'NAME_lc' or 'NAME_uc' to alter
behaviour of fetchrow_hashref() method. See docs.
Added type_info quote caching to quote() method thanks to Dean Kopesky.
Makes using quote() with second data type param much much faster.
Added type_into_all() caching to type_info(), spotted by Dean Kopesky.
Added new API definition for table_info() and tables(),
driver authors please note!
Added primary_key_info() to DBI API thanks to Steffen Goeldner.
Added primary_key() to DBI API as simpler interface to primary_key_info().
Indent and other fixes for DBI::DBD doc thanks to H.Merijn Brand.
Added prepare_cached() insert_hash() example thanks to Doug Wilson.
Removed false docs for fetchall_hashref(), use fetchall_arrayref({}).
=head2 Changes in DBI 1.18, 4th June 2001
Fixed that altering ShowErrorStatement also altered AutoCommit!
Thanks to Jeff Boes for spotting that clanger.
Fixed DBD::Proxy to handle commit() and rollback(). Long overdue, sorry.
Fixed incompatibility with perl 5.004 (but no one's using that right? :)
Fixed connect_cached and prepare_cached to not be affected by the order
of elements in the attribute hash. Spotted by Mitch Helle-Morrissey.
Fixed version number of DBI::Shell
reported by Stuhlpfarrer Gerhard and others.
Defined and documented table_info() attribute semantics (ODBC compatible)
thanks to Olga Voronova, who also implemented then in DBD::Oracle.
Updated Win32::DBIODBC (Win32::ODBC emulation) thanks to Roy Lee.
=head2 Changes in DBI 1.16, 30th May 2001
Reimplemented fetchrow_hashref in C, now fetches about 25% faster!
Changed behaviour if both PrintError and RaiseError are enabled
to simply do both (in that order, obviously :)
Slight reduction in DBI handle creation overhead.
Fixed $dbh->{Driver} & $sth->{Database} to return 'outer' handles.
Fixed execute param count check to honour RaiseError spotted by Belinda Giardie.
Fixed build for perl5.6.1 with PERLIO thanks to H.Merijn Brand.
Fixed client sql restrictions in ProxyServer.pm thanks to Jochen Wiedmann.
Fixed batch mode command parsing in Shell thanks to Christian Lemburg.
Fixed typo in selectcol_arrayref docs thanks to Jonathan Leffler.
Fixed selectrow_hashref to be available to callers thanks to T.J.Mather.
Fixed core dump if statement handle didn't define Statement attribute.
Added bind_param_inout docs to DBI::DBD thanks to Jonathan Leffler.
Added note to data_sources() method docs that some drivers may
require a connected database handle to be supplied as an attribute.
Trace of install_driver method now shows path of driver file loaded.
Changed many '||' to 'or' in the docs thanks to H.Merijn Brand.
Updated DBD::ADO again (improvements in error handling) from Tom Lowery.
Updated Win32::DBIODBC (Win32::ODBC emulation) thanks to Roy Lee.
Updated email and web addresses in DBI::FAQ thanks to Michael A Chase.
=head2 Changes in DBI 1.15, 28th March 2001
Added selectrow_arrayref
Added selectrow_hashref
Added selectall_hashref thanks to Leon Brocard.
Added DBI->connect(..., { dbi_connect_method => 'method' })
Added $dbh->{Statement} aliased to most recent child $sth->{Statement}.
Added $h->{ShowErrorStatement}=1 to cause the appending of the
relevant Statement text to the RaiseError/PrintError text.
Modified type_info to always return hash keys in uppercase and
to not require uppercase 'DATA_TYPE' key from type_info_all.
Thanks to Jennifer Tong and Rob Douglas.
Added \%attr param to tables() and table_info() methods.
Trace method uses warn() if it can't open the new file.
Trace shows source line and filename during global destruction.
Updated packages:
Updated Win32::DBIODBC (Win32::ODBC emulation) thanks to Roy Lee.
Updated DBD::ADO to much improved version 0.4 from Tom Lowery.
Updated DBD::Sponge to include $sth->{PRECISION} thanks to Tom Lowery.
Changed DBD::ExampleP to use lstat() instead of stat().
Documentation:
Documented $DBI::lasth (which has been there since day 1).
Documented SQL_* names.
Clarified and extended docs for $h->state thanks to Masaaki Hirose.
Clarified fetchall_arrayref({}) docs (thanks to, er, someone!).
Clarified type_info_all re lettercase and index values.
Updated DBI::FAQ to 0.38 thanks to Alligator Descartes.
Added cute bind_columns example thanks to H.Merijn Brand.
Extended docs on \%attr arg to data_sources method.
Makefile.PL
Removed obscure potential 'rm -rf /' (thanks to Ulrich Pfeifer).
Removed use of glob and find (thanks to Michael A. Chase).
Proxy:
Removed debug messages from DBD::Proxy AUTOLOAD thanks to Brian McCauley.
Added fix for problem using table_info thanks to Tom Lowery.
Added better determination of where to put the pid file, and...
Added KNOWN ISSUES section to DBD::Proxy docs thanks to Jochen Wiedmann.
Shell:
Updated DBI::Format to include DBI::Format::String thanks to Tom Lowery.
Added describe command thanks to Tom Lowery.
Added columnseparator option thanks to Tom Lowery (I think).
Added 'raw' format thanks to, er, someone, maybe Tom again.
Known issues:
Perl 5.005 and 5.006 both leak memory doing local($handle->{Foo}).
Perl 5.004 doesn't. The leak is not a DBI or driver bug.
=head2 Changes in DBI 1.14, 14th June 2000
NOTE: This version is the one the DBI book is based on.
NOTE: This version requires at least Perl 5.004.
Perl 5.6 ithreads changes with thanks to Doug MacEachern.
Changed trace output to use PerlIO thanks to Paul Moore.
Fixed bug in RaiseError/PrintError handling.
(% chars in the error string could cause a core dump.)
Fixed Win32 PerlEx IIS concurrency bugs thanks to Murray Nesbitt.
Major documentation polishing thanks to Linda Mui at O'Reilly.
Password parameter now shown as **** in trace output.
Added two fields to type_info and type_info_all.
Added $dsn to PrintError/RaiseError message from DBI->connect().
Changed prepare_cached() croak to carp if sth still Active.
Added prepare_cached() example to the docs.
Added further DBD::ADO enhancements from Thomas Lowery.
=head2 Changes in DBI 1.13, 11th July 1999
Fixed Win32 PerlEx IIS concurrency bugs thanks to Murray Nesbitt.
Fixed problems with DBD::ExampleP long_list test mode.
Added SQL_WCHAR SQL_WVARCHAR SQL_WLONGVARCHAR and SQL_BIT
to list of known and exportable SQL types.
Improved data fetch performance of DBD::ADO.
Added GetTypeInfo to DBD::ADO thanks to Thomas Lowery.
Actually documented connect_cached thanks to Michael Schwern.
Fixed user/key/cipher bug in ProxyServer thanks to Joshua Pincus.
=head2 Changes in DBI 1.12, 29th June 1999
Fixed significant DBD::ADO bug (fetch skipped first row).
Fixed ProxyServer bug handling non-select statements.
Fixed VMS problem with t/examp.t thanks to Craig Berry.
Trace only shows calls to trace_msg and _set_fbav at high levels.
Modified t/examp.t to workaround Cygwin buffering bug.
=head2 Changes in DBI 1.11, 17th June 1999
Fixed bind_columns argument checking to allow a single arg.
Fixed problems with internal default_user method.
Fixed broken DBD::ADO.
Made default $DBI::rows more robust for some obscure cases.
=head2 Changes in DBI 1.10, 14th June 1999
Fixed trace_msg.al error when using Apache.
Fixed dbd_st_finish enhancement in Driver.xst (internals).
Enable drivers to define default username and password
and temporarily disabled warning added in 1.09.
Thread safety optimised for single thread case.
=head2 Changes in DBI 1.09, 9th June 1999
Added optional minimum trace level parameter to trace_msg().
Added warning in Makefile.PL that DBI will require 5.004 soon.
Added $dbh->selectcol_arrayref($statement) method.
Fixed fetchall_arrayref hash-slice mode undef NAME problem.
Fixed problem with tainted parameter checking and t/examp.t.
Fixed problem with thread safety code, including 64 bit machines.
Thread safety now enabled by default for threaded perls.
Enhanced code for MULTIPLICITY/PERL_OBJECT from ActiveState.
Enhanced prepare_cached() method.
Minor changes to trace levels (less internal info at level 2).
Trace log now shows "!! ERROR..." before the "<- method" line.
DBI->connect() now warn's if user / password is undefined and
DBI_USER / DBI_PASS environment variables are not defined.
The t/proxy.t test now ignores any /etc/dbiproxy.conf file.
Added portability fixes for MacOS from Chris Nandor.
Updated mailing list address from fugue.com to isc.org.
=head2 Changes in DBI 1.08, 12th May 1999
Much improved DBD::ADO driver thanks to Phlip Plumlee and others.
Connect now allows you to specify attribute settings within the DSN
E.g., "dbi:Driver(RaiseError=>1,Taint=>1,AutoCommit=>0):dbname"
The $h->{Taint} attribute now also enables taint checking of
arguments to almost all DBI methods.
Improved trace output in various ways.
Fixed bug where $sth->{NAME_xx} was undef in some situations.
Fixed code for MULTIPLICITY/PERL_OBJECT thanks to Alex Smishlajev.
Fixed and documented DBI->connect_cached.
Workaround for Cygwin32 build problem with help from Jong-Pork Park.
bind_columns no longer needs undef or hash ref as first parameter.
=head2 Changes in DBI 1.07, 6th May 1999
Trace output now shows contents of array refs returned by DBI.
Changed names of some result columns from type_info, type_info_all,
tables and table_info to match ODBC 3.5 / ISO/IEC standards.
Many fixes for DBD::Proxy and ProxyServer.
Fixed error reporting in install_driver.
Major enhancement to DBI::W32ODBC from Patrick Hollins.
Added $h->{Taint} to taint fetched data if tainting (perl -T).
Added code for MULTIPLICITY/PERL_OBJECT contributed by ActiveState.
Added $sth->more_results (undocumented for now).
=head2 Changes in DBI 1.06, 6th January 1999
Fixed Win32 Makefile.PL problem in 1.04 and 1.05.
Significant DBD::Proxy enhancements and fixes
including support for bind_param_inout (Jochen and I)
Added experimental DBI->connect_cached method.
Added $sth->{NAME_uc} and $sth->{NAME_lc} attributes.
Enhanced fetchrow_hashref to take an attribute name arg.
=head2 Changes in DBI 1.05, 4th January 1999
Improved DBD::ADO connect (thanks to Phlip Plumlee).
Improved thread safety (thanks to Jochen Wiedmann).
[Quick release prompted by truncation of copies on CPAN]
=head2 Changes in DBI 1.04, 3rd January 1999
Fixed error in Driver.xst. DBI build now tests Driver.xst.
Removed unused variable compiler warnings in Driver.xst.
DBI::DBD module now tested during DBI build.
Further clarification in the DBI::DBD driver writers manual.
Added optional name parameter to $sth->fetchrow_hashref.
=head2 Changes in DBI 1.03, 1st January 1999
Now builds with Perl>=5.005_54 (PERL_POLLUTE in DBIXS.h)
DBI trace trims path from "at yourfile.pl line nnn".
Trace level 1 now shows statement passed to prepare.
Assorted improvements to the DBI manual.
Assorted improvements to the DBI::DBD driver writers manual.
Fixed $dbh->quote prototype to include optional $data_type.
Fixed $dbh->prepare_cached problems.
$dbh->selectrow_array behaves better in scalar context.
Added a (very) experimental DBD::ADO driver for Win32 ADO.
Added experimental thread support (perl Makefile.PL -thread).
Updated the DBI::FAQ - thanks to Alligator Descartes.
The following changes were implemented and/or packaged
by Jochen Wiedmann - thanks Jochen:
Added a Bundle for CPAN installation of DBI, the DBI proxy
server and prerequisites (lib/Bundle/DBI.pm).
DBI->available_drivers uses File::Spec, if available.
This makes it work on MacOS. (DBI.pm)
Modified type_info to work with read-only values returned
by type_info_all. (DBI.pm)
Added handling of magic values in $sth->execute,
$sth->bind_param and other methods (Driver.xst)
Added Perl's CORE directory to the linkers path on Win32,
required by recent versions of ActiveState Perl.
Fixed DBD::Sponge to work with empty result sets.
Complete rewrite of DBI::ProxyServer and DBD::Proxy.
=head2 Changes in DBI 1.02, 2nd September 1998
Fixed DBI::Shell including @ARGV and /current.
Added basic DBI::Shell test.
Renamed DBI::Shell /display to /format.
=head2 Changes in DBI 1.01, 2nd September 1998
Many enhancements to Shell (with many contributions from
Jochen Wiedmann, Tom Lowery and Adam Marks).
Assorted fixes to DBD::Proxy and DBI::ProxyServer.
Tidied up trace messages - trace(2) much cleaner now.
Added $dbh->{RowCacheSize} and $sth->{RowsInCache}.
Added experimental DBI::Format (mainly for DBI::Shell).
Fixed fetchall_arrayref($slice_hash).
DBI->connect now honours PrintError=1 if connect fails.
Assorted clarifications to the docs.
=head2 Changes in DBI 1.00, 14th August 1998
The DBI is no longer 'alpha' software!
Added $dbh->tables and $dbh->table_info.
Documented \%attr arg to data_sources method.
Added $sth->{TYPE}, $sth->{PRECISION} and $sth->{SCALE}.
Added $sth->{Statement}.
DBI::Shell now uses neat_list to print results
It also escapes "'" chars and converts newlines to spaces.
=head2 Changes in DBI 0.95, 10th August 1998
WARNING: THIS IS AN EXPERIMENTAL RELEASE!
Fixed 0.94 slip so it will build on pre-5.005 again.
Added DBI_AUTOPROXY environment variable.
Array ref returned from fetch/fetchrow_arrayref now readonly.
Improved connect error reporting by DBD::Proxy.
All trace/debug messages from DBI now go to trace file.
=head2 Changes in DBI 0.94, 9th August 1998
WARNING: THIS IS AN EXPERIMENTAL RELEASE!
Added DBD::Shell and dbish interactive DBI shell. Try it!
Any database attribs can be set via DBI->connect(,,, \%attr).
Added _get_fbav and _set_fbav methods for Perl driver developers
(see ExampleP driver for perl usage). Drivers which don't use
one of these methods (either via XS or Perl) are not compliant.
DBI trace now shows adds " at yourfile.pl line nnn"!
PrintError and RaiseError now prepend driver and method name.
The available_drivers method no longer returns NullP or Sponge.
Added $dbh->{Name}.
Added $dbh->quote($value, $data_type).
Added more hints to install_driver failure message.
Added DBD::Proxy and DBI::ProxyServer (from Jochen Wiedmann).
Added $DBI::neat_maxlen to control truncation of trace output.
Added $dbh->selectall_arrayref and $dbh->selectrow_array methods.
Added $dbh->tables.
Added $dbh->type_info and $dbh->type_info_all.
Added $h->trace_msg($msg) to write to trace log.
Added @bool = DBI::looks_like_number(@ary).
Many assorted improvements to the DBI docs.
=head2 Changes in DBI 0.93, 13th February 1998
Fixed DBI::DBD::dbd_postamble bug causing 'Driver.xsi not found' errors.
Changes to handling of 'magic' values in neatsvpv (used by trace).
execute (in Driver.xst) stops binding after first bind error.
This release requires drivers to be rebuilt.
=head2 Changes in DBI 0.92, 3rd February 1998
Fixed per-handle memory leak (with many thanks to Irving Reid).
Added $dbh->prepare_cached() caching variant of $dbh->prepare.
Added some attributes:
$h->{Active} is the handle 'Active' (vague concept) (boolean)
$h->{Kids} e.g. number of sth's associated with a dbh
$h->{ActiveKids} number of the above which are 'Active'
$dbh->{CachedKids} ref to prepare_cached sth cache
Added support for general-purpose 'private_' attributes.
Added experimental support for subclassing the DBI: see t/subclass.t
Added SQL_ALL_TYPES to exported :sql_types.
Added dbd_dbi_dir() and dbd_dbi_arch_dir() to DBI::DBD module so that
DBD Makefile.PLs can work with the DBI installed in non-standard locations.
Fixed 'Undefined value' warning and &sv_no output from neatsvpv/trace.
Fixed small 'once per interpreter' leak.
Assorted minor documentation fixes.
=head2 Changes in DBI 0.91, 10th December 1997
NOTE: This fix may break some existing scripts:
DBI->connect("dbi:...",$user,$pass) was not setting AutoCommit and PrintError!
DBI->connect(..., { ... }) no longer sets AutoCommit or PrintError twice.
DBI->connect(..., { RaiseError=>1 }) now croaks if connect fails.
Fixed $fh parameter of $sth->dump_results;
Added default statement DESTROY method which carps.
Added default driver DESTROY method to silence AUTOLOAD/__DIE__/CGI::Carp
Added more SQL_* types to %EXPORT_TAGS and @EXPORT_OK.
Assorted documentation updates (mainly clarifications).
Added workaround for perl's 'sticky lvalue' bug.
Added better warning for bind_col(umns) where fields==0.
Fixed to build okay with 5.004_54 with or without USE_THREADS.
Note that the DBI has not been tested for thread safety yet.
=head2 Changes in DBI 0.90, 6th September 1997
Can once again be built with Perl 5.003.
The DBI class can be subclassed more easily now.
InactiveDestroy fixed for drivers using the *.xst template.
Slightly faster handle creation.
Changed prototype for dbd_*_*_attrib() to add extra param.
Note: 0.90, 0.89 and possibly some other recent versions have
a small memory leak. This will be fixed in the next release.
=head2 Changes in DBI 0.89, 25th July 1997
Minor fix to neatsvpv (mainly used for debug trace) to workaround
bug in perl where SvPV removes IOK flag from an SV.
Minor updates to the docs.
=head2 Changes in DBI 0.88, 22nd July 1997
Fixed build for perl5.003 and Win32 with Borland.
Fixed documentation formatting.
Fixed DBI_DSN ignored for old-style connect (with explicit driver).
Fixed AutoCommit in DBD::ExampleP
Fixed $h->trace.
The DBI can now export SQL type values: use DBI ':sql_types';
Modified Driver.xst and renamed DBDI.h to dbd_xsh.h
=head2 Changes in DBI 0.87, 18th July 1997
Fixed minor type clashes.
Added more docs about placeholders and bind values.
=head2 Changes in DBI 0.86, 16th July 1997
Fixed failed connect causing 'unblessed ref' and other errors.
Drivers must handle AutoCommit FETCH and STORE else DBI croaks.
Added $h->{LongReadLen} and $h->{LongTruncOk} attributes for BLOBS.
Added DBI_USER and DBI_PASS env vars. See connect docs for usage.
Added DBI->trace() to set global trace level (like per-handle $h->trace).
PERL_DBI_DEBUG env var renamed DBI_DEBUG (old name still works for now).
Updated docs, including commit, rollback, AutoCommit and Transactions sections.
Added bind_param method and execute(@bind_values) to docs.
Fixed fetchall_arrayref.
Since the DBIS structure has change the internal version numbers have also
changed (DBIXS_VERSION == 9 and DBISTATE_VERSION == 9) so drivers will have
to be recompiled. The test is also now more sensitive and the version
mismatch error message now more clear about what to do. Old drivers are
likely to core dump (this time) until recompiled for this DBI. In future
DBI/DBD version mismatch will always produce a clear error message.
Note that this DBI release contains and documents many new features
that won't appear in drivers for some time. Driver writers might like
to read perldoc DBI::DBD and comment on or apply the information given.
=head2 Changes in DBI 0.85, 25th June 1997
NOTE: New-style connect now defaults to AutoCommit mode unless
{ AutoCommit => 0 } specified in connect attributes. See the docs.
AutoCommit attribute now defined and tracked by DBI core.
Drivers should use/honour this and not implement their own.
Added pod doc changes from Andreas and Jonathan.
New DBI_DSN env var default for connect method. See docs.
Documented the func method.
Fixed "Usage: DBD::_::common::DESTROY" error.
Fixed bug which set some attributes true when there value was fetched.
Added new internal DBIc_set() macro for drivers to use.
=head2 Changes in DBI 0.84, 20th June 1997
Added $h->{PrintError} attribute which, if set true, causes all errors to
trigger a warn().
New-style DBI->connect call now automatically sets PrintError=1 unless
{ PrintError => 0 } specified in the connect attributes. See the docs.
The old-style connect with a separate driver parameter is deprecated.
Fixed fetchrow_hashref.
Renamed $h->debug to $h->trace() and added a trace filename arg.
Assorted other minor tidy-ups.
=head2 Changes in DBI 0.83, 11th June 1997
Added driver specification syntax to DBI->connect data_source
parameter: DBI->connect('dbi:driver:...', $user, $passwd);
The DBI->data_sources method should return data_source
names with the appropriate 'dbi:driver:' prefix.
DBI->connect will warn if \%attr is true but not a hash ref.
Added the new fetchrow methods:
@row_ary = $sth->fetchrow_array;
$ary_ref = $sth->fetchrow_arrayref;
$hash_ref = $sth->fetchrow_hashref;
The old fetch and fetchrow methods still work.
Driver implementors should implement the new names for
fetchrow_array and fetchrow_arrayref ASAP (use the xs ALIAS:
directive to define aliases for fetch and fetchrow).
Fixed occasional problems with t/examp.t test.
Added automatic errstr reporting to the debug trace output.
Added the DBI FAQ from Alligator Descartes in module form for
easy reading via "perldoc DBI::FAQ". Needs reformatting.
Unknown driver specific attribute names no longer croak.
Fixed problem with internal neatsvpv macro.
=head2 Changes in DBI 0.82, 23rd May 1997
Added $h->{RaiseError} attribute which, if set true, causes all errors to
trigger a die(). This makes it much easier to implement robust applications
in terms of higher level eval { ... } blocks and rollbacks.
Added DBI->data_sources($driver) method for implementation by drivers.
The quote method now returns the string NULL (without quotes) for undef.
Added VMS support thanks to Dan Sugalski.
Added a 'quick start guide' to the README.
Added neatsvpv function pointer to DBIS structure to make it available for
use by drivers. A macro defines neatsvpv(sv,len) as (DBIS->neatsvpv(sv,len)).
Old XS macro SV_YES_NO changes to standard boolSV.
Since the DBIS structure has change the internal version numbers have also
changed (DBIXS_VERSION == 8 and DBISTATE_VERSION == 8) so drivers will have
to be recompiled.
=head2 Changes in DBI 0.81, 7th May 1997
Minor fix to let DBI build using less modern perls.
Fixed a suprious typo warning.
=head2 Changes in DBI 0.80, 6th May 1997
Builds with no changes on NT using perl5.003_99 (with thanks to Jeffrey Urlwin).
Automatically supports Apache::DBI (with thanks to Edmund Mergl).
DBI scripts no longer need to be modified to make use of Apache::DBI.
Added a ping method and an experimental connect_test_perf method.
Added a fetchhash and fetch_all methods.
The func method no longer pre-clears err and errstr.
Added ChopBlanks attribute (currently defaults to off, that may change).
Support for the attribute needs to be implemented by individual drivers.
Reworked tests into standard t/*.t form.
Added more pod text. Fixed assorted bugs.
=head2 Changes in DBI 0.79, 7th Apr 1997
Minor release. Tidied up pod text and added some more descriptions
(especially disconnect). Minor changes to DBI.xs to remove compiler
warnings.
=head2 Changes in DBI 0.78, 28th Mar 1997
Greatly extended the pod documentation in DBI.pm, including the under
used bind_columns method. Use 'perldoc DBI' to read after installing.
Fixed $h->err. Fetching an attribute value no longer resets err.
Added $h->{InactiveDestroy}, see documentation for details.
Improved debugging of cached ('quick') attribute fetches.
errstr will return err code value if there is no string value.
Added DBI/W32ODBC to the distribution. This is a pure-perl experimental
DBI emulation layer for Win32::ODBC. Note that it's unsupported, your
mileage will vary, and bug reports without fixes will probably be ignored.
=head2 Changes in DBI 0.77, 21st Feb 1997
Removed erroneous $h->errstate and $h->errmsg methods from DBI.pm.
Added $h->err, $h->errstr and $h->state default methods in DBI.xs.
Updated informal DBI API notes in DBI.pm. Updated README slightly.
DBIXS.h now correctly installed into INST_ARCHAUTODIR.
(DBD authors will need to edit their Makefile.PL's to use
-I$(INSTALLSITEARCH)/auto/DBI -I$(INSTALLSITEARCH)/DBI)
=head2 Changes in DBI 0.76, 3rd Feb 1997
Fixed a compiler type warnings (pedantic IRIX again).
=head2 Changes in DBI 0.75, 27th Jan 1997
Fix problem introduced by a change in Perl5.003_XX.
Updated README and DBI.pm docs.
=head2 Changes in DBI 0.74, 14th Jan 1997
Dispatch now sets dbi_debug to the level of the current handle
(this makes tracing/debugging individual handles much easier).
The '>> DISPATCH' log line now only logged at debug >= 3 (was 2).
The $csr->NUM_OF_FIELDS attribute can be set if not >0 already.
You can log to a file using the env var PERL_DBI_DEBUG=/tmp/dbi.log.
Added a type cast needed by IRIX.
No longer sets perl_destruct_level unless debug set >= 4.
Make compatible with PerlIO and sfio.
=head2 Changes in DBI 0.73, 10th Oct 1996
Fixed some compiler type warnings (IRIX).
Fixed DBI->internal->{DebugLog} = $filename.
Made debug log file unbuffered.
Added experimental bind_param_inout method to interface.
Usage: $dbh->bind_param_inout($param, \$value, $maxlen [, \%attribs ])
(only currently used by DBD::Oracle at this time.)
=head2 Changes in DBI 0.72, 23 Sep 1996
Using an undefined value as a handle now gives a better
error message (mainly useful for emulators like Oraperl).
$dbh->do($sql, @params) now works for binding placeholders.
=head2 Changes in DBI 0.71, 10 July 1996
Removed spurious abort() from invalid handle check.
Added quote method to DBI interface and added test.
=head2 Changes in DBI 0.70, 16 June 1996
Added extra invalid handle check (dbih_getcom)
Fixed broken $dbh->quote method.
Added check for old GCC in Makefile.PL
=head2 Changes in DBI 0.69
Fixed small memory leak.
Clarified the behaviour of DBI->connect.
$dbh->do now returns '0E0' instead of 'OK'.
Fixed "Can't read $DBI::errstr, lost last handle" problem.
=head2 Changes in DBI 0.68, 2 Mar 1996
Changes to suit perl5.002 and site_lib directories.
Detects old versions ahead of new in @INC.
=head2 Changes in DBI 0.67, 15 Feb 1996
Trivial change to test suite to fix a problem shown up by the
Perl5.002gamma release Test::Harness.
=head2 Changes in DBI 0.66, 29 Jan 1996
Minor changes to bring the DBI into line with 5.002 mechanisms,
specifically the xs/pm VERSION checking mechanism.
No functionality changes. One no-last-handle bug fix (rare problem).
Requires 5.002 (beta2 or later).
=head2 Changes in DBI 0.65, 23 Oct 1995
Added $DBI::state to hold SQL CLI / ODBC SQLSTATE value.
SQLSTATE "00000" (success) is returned as "" (false), all else is true.
If a driver does not explicitly initialise it (via $h->{State} or
DBIc_STATE(imp_xxh) then $DBI::state will automatically return "" if
$DBI::err is false otherwise "S1000" (general error).
As always, this is a new feature and liable to change.
The is *no longer* a default error handler!
You can add your own using push(@{$h->{Handlers}}, sub { ... })
but be aware that this interface may change (or go away).
The DBI now automatically clears $DBI::err, errstr and state before
calling most DBI methods. Previously error conditions would persist.
Added DBIh_CLEAR_ERROR(imp_xxh) macro.
DBI now EXPORT_OK's some utility functions, neat($value),
neat_list(@values) and dump_results($sth).
Slightly enhanced t/min.t minimal test script in an effort to help
narrow down the few stray core dumps that some porters still report.
Renamed readblob to blob_read (old name still works but warns).
Added default blob_copy_to_file method.
Added $sth = $dbh->tables method. This returns an $sth for a query
which has these columns: TABLE_CATALOGUE, TABLE_OWNER, TABLE_NAME,
TABLE_TYPE, REMARKS in that order. The TABLE_CATALOGUE column
should be ignored for now.
=head2 Changes in DBI 0.64, 23 Oct 1995
Fixed 'disconnect invalidates 1 associated cursor(s)' problem.
Drivers using DBIc_ACTIVE_on/off() macros should not need any changes
other than to test for DBIc_ACTIVE_KIDS() instead of DBIc_KIDS().
Fixed possible core dump in dbih_clearcom during global destruction.
=head2 Changes in DBI 0.63, 1 Sep 1995
Minor update. Fixed uninitialised memory bug in method
attribute handling and streamlined processing and debugging.
Revised usage definitions for bind_* methods and readblob.
=head2 Changes in DBI 0.62, 26 Aug 1995
Added method redirection method $h->func(..., $method_name).
This is now the official way to call private driver methods
that are not part of the DBI standard. E.g.:
@ary = $sth->func('ora_types');
It can also be used to call existing methods. Has very low cost.
$sth->bind_col columns now start from 1 (not 0) to match SQL.
$sth->bind_columns now takes a leading attribute parameter (or undef),
e.g., $sth->bind_columns($attribs, \$col1 [, \$col2 , ...]);
Added handy DBD_ATTRIBS_CHECK macro to vet attribs in XS.
Added handy DBD_ATTRIB_GET_SVP, DBD_ATTRIB_GET_BOOL and
DBD_ATTRIB_GET_IV macros for handling attributes.
Fixed STORE for NUM_OF_FIELDS and NUM_OF_PARAMS.
Added FETCH for NUM_OF_FIELDS and NUM_OF_PARAMS.
Dispatch no longer bothers to call _untie().
Faster startup via install_method/_add_dispatch changes.
=head2 Changes in DBI 0.61, 22 Aug 1995
Added $sth->bind_col($column, \$var [, \%attribs ]);
This method enables perl variable to be directly and automatically
updated when a row is fetched. It requires no driver support
(if the driver has been written to use DBIS->get_fbav).
Currently \%attribs is unused.
Added $sth->bind_columns(\$var [, \$var , ...]);
This method is a short-cut for bind_col which binds all the
columns of a query in one go (with no attributes). It also
requires no driver support.
Added $sth->bind_param($parameter, $var [, \%attribs ]);
This method enables attributes to be specified when values are
bound to placeholders. It also enables binding to occur away
from the execute method to improve execute efficiency.
The DBI does not provide a default implementation of this.
See the DBD::Oracle module for a detailed example.
The DBI now provides default implementations of both fetch and
fetchrow. Each is written in terms of the other. A driver is
expected to implement at least one of them.
More macro and assorted structure changes in DBDXS.h. Sorry!
The old dbihcom definitions have gone. All fields have macros.
The imp_xxh_t type is now used within the DBI as well as drivers.
Drivers must set DBIc_NUM_FIELDS(imp_sth) and DBIc_NUM_PARAMS(imp_sth).
test.pl includes a trivial test of bind_param and bind_columns.
=head2 Changes in DBI 0.60, 17 Aug 1995
This release has significant code changes but much less
dramatic than the previous release. The new implementors data
handling mechanism has matured significantly (don't be put off
by all the struct typedefs in DBIXS.h, there's just to make it
easier for drivers while keeping things type-safe).
The DBI now includes two new methods:
do $dbh->do($statement)
This method prepares, executes and finishes a statement. It is
designed to be used for executing one-off non-select statements
where there is no benefit in reusing a prepared statement handle.
fetch $array_ref = $sth->fetch;
This method is the new 'lowest-level' row fetching method. The
previous @row = $sth->fetchrow method now defaults to calling
the fetch method and expanding the returned array reference.
The DBI now provides fallback attribute FETCH and STORE functions
which drivers should call if they don't recognise an attribute.
THIS RELEASE IS A GOOD STARTING POINT FOR DRIVER DEVELOPERS!
Study DBIXS.h from the DBI and Oracle.xs etc from DBD::Oracle.
There will be further changes in the interface but nothing
as dramatic as these last two releases! (I hope :-)
=head2 Changes in DBI 0.59 15 Aug 1995
NOTE: THIS IS AN UNSTABLE RELEASE!
Major reworking of internal data management!
Performance improvements and memory leaks fixed.
Added a new NullP (empty) driver and a -m flag
to test.pl to help check for memory leaks.
Study DBD::Oracle version 0.21 for more details.
(Comparing parts of v0.21 with v0.20 may be useful.)
=head2 Changes in DBI 0.58 21 June 1995
Added DBI->internal->{DebugLog} = $filename;
Reworked internal logging.
Added $VERSION.
Made disconnect_all a compulsory method for drivers.
=head1 ANCIENT HISTORY
12th Oct 1994: First public release of the DBI module.
(for Perl 5.000-beta-3h)
19th Sep 1994: DBperl project renamed to DBI.
29th Sep 1992: DBperl project started.
=cut
DBI/Util/CacheMemory.pm 0000644 00000004425 15033552504 0010620 0 ustar 00 package DBI::Util::CacheMemory;
# $Id: CacheMemory.pm 10314 2007-11-26 22:25:33Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
=head1 NAME
DBI::Util::CacheMemory - a very fast but very minimal subset of Cache::Memory
=head1 DESCRIPTION
Like Cache::Memory (part of the Cache distribution) but doesn't support any fancy features.
This module aims to be a very fast compatible strict sub-set for simple cases,
such as basic client-side caching for DBD::Gofer.
Like Cache::Memory, and other caches in the Cache and Cache::Cache
distributions, the data will remain in the cache until cleared, it expires,
or the process dies. The cache object simply going out of scope will I<not>
destroy the data.
=head1 METHODS WITH CHANGES
=head2 new
All options except C<namespace> are ignored.
=head2 set
Doesn't support expiry.
=head2 purge
Same as clear() - deletes everything in the namespace.
=head1 METHODS WITHOUT CHANGES
=over
=item clear
=item count
=item exists
=item remove
=back
=head1 UNSUPPORTED METHODS
If it's not listed above, it's not supported.
=cut
our $VERSION = "0.010315";
my %cache;
sub new {
my ($class, %options ) = @_;
my $namespace = $options{namespace} ||= 'Default';
#$options{_cache} = \%cache; # can be handy for debugging/dumping
my $self = bless \%options => $class;
$cache{ $namespace } ||= {}; # init - ensure it exists
return $self;
}
sub set {
my ($self, $key, $value) = @_;
$cache{ $self->{namespace} }->{$key} = $value;
}
sub get {
my ($self, $key) = @_;
return $cache{ $self->{namespace} }->{$key};
}
sub exists {
my ($self, $key) = @_;
return exists $cache{ $self->{namespace} }->{$key};
}
sub remove {
my ($self, $key) = @_;
return delete $cache{ $self->{namespace} }->{$key};
}
sub purge {
return shift->clear;
}
sub clear {
$cache{ shift->{namespace} } = {};
}
sub count {
return scalar keys %{ $cache{ shift->{namespace} } };
}
sub size {
my $c = $cache{ shift->{namespace} };
my $size = 0;
while ( my ($k,$v) = each %$c ) {
$size += length($k) + length($v);
}
return $size;
}
1;
DBI/Util/_accessor.pm 0000644 00000003202 15033552504 0010355 0 ustar 00 package DBI::Util::_accessor;
use strict;
use Carp;
our $VERSION = "0.009479";
# inspired by Class::Accessor::Fast
sub new {
my($proto, $fields) = @_;
my($class) = ref $proto || $proto;
$fields ||= {};
my @dubious = grep { !m/^_/ && !$proto->can($_) } keys %$fields;
carp "$class doesn't have accessors for fields: @dubious" if @dubious;
# make a (shallow) copy of $fields.
bless {%$fields}, $class;
}
sub mk_accessors {
my($self, @fields) = @_;
$self->mk_accessors_using('make_accessor', @fields);
}
sub mk_accessors_using {
my($self, $maker, @fields) = @_;
my $class = ref $self || $self;
# So we don't have to do lots of lookups inside the loop.
$maker = $self->can($maker) unless ref $maker;
no strict 'refs';
foreach my $field (@fields) {
my $accessor = $self->$maker($field);
*{$class."\:\:$field"} = $accessor
unless defined &{$class."\:\:$field"};
}
#my $hash_ref = \%{$class."\:\:_accessors_hash};
#$hash_ref->{$_}++ for @fields;
# XXX also copy down _accessors_hash of base class(es)
# so one in this class is complete
return;
}
sub make_accessor {
my($class, $field) = @_;
return sub {
my $self = shift;
return $self->{$field} unless @_;
croak "Too many arguments to $field" if @_ > 1;
return $self->{$field} = shift;
};
}
sub make_accessor_autoviv_hashref {
my($class, $field) = @_;
return sub {
my $self = shift;
return $self->{$field} ||= {} unless @_;
croak "Too many arguments to $field" if @_ > 1;
return $self->{$field} = shift;
};
}
1;
DBI/ProfileSubs.pm 0000644 00000002220 15033552504 0007733 0 ustar 00 package DBI::ProfileSubs;
our $VERSION = "0.009396";
=head1 NAME
DBI::ProfileSubs - Subroutines for dynamic profile Path
=head1 SYNOPSIS
DBI_PROFILE='&norm_std_n3' prog.pl
This is new and still experimental.
=head1 TO DO
Define come kind of naming convention for the subs.
=cut
use strict;
use warnings;
# would be good to refactor these regex into separate subs and find some
# way to compose them in various combinations into multiple subs.
# Perhaps via AUTOLOAD where \&auto_X_Y_Z creates a sub that does X, Y, and Z.
# The final subs always need to be very fast.
#
sub norm_std_n3 {
# my ($h, $method_name) = @_;
local $_ = $_;
s/\b\d+\b/<N>/g; # 42 -> <N>
s/\b0x[0-9A-Fa-f]+\b/<N>/g; # 0xFE -> <N>
s/'.*?'/'<S>'/g; # single quoted strings (doesn't handle escapes)
s/".*?"/"<S>"/g; # double quoted strings (doesn't handle escapes)
# convert names like log20001231 into log<N>
s/([a-z_]+)(\d{3,})\b/${1}<N>/ig;
# abbreviate massive "in (...)" statements and similar
s!((\s*<[NS]>\s*,\s*){100,})!sprintf("$2,<repeated %d times>",length($1)/2)!eg;
return $_;
}
1;
DBI/SQL/Nano.pm 0000644 00000073012 15033552504 0007037 0 ustar 00 #######################################################################
#
# DBI::SQL::Nano - a very tiny SQL engine
#
# Copyright (c) 2010 by Jens Rehsack < rehsack AT cpan.org >
# Copyright (c) 2004 by Jeff Zucker < jzucker AT cpan.org >
#
# All rights reserved.
#
# You may freely distribute and/or modify this module under the terms
# of either the GNU General Public License (GPL) or the Artistic License,
# as specified in the Perl README file.
#
# See the pod at the bottom of this file for help information
#
#######################################################################
#######################
package DBI::SQL::Nano;
#######################
use strict;
use warnings;
use vars qw( $VERSION $versions );
use Carp qw(croak);
require DBI; # for looks_like_number()
BEGIN
{
$VERSION = "1.015544";
$versions->{nano_version} = $VERSION;
if ( $ENV{DBI_SQL_NANO} || !eval { require SQL::Statement; $SQL::Statement::VERSION ge '1.400' } )
{
@DBI::SQL::Nano::Statement::ISA = qw(DBI::SQL::Nano::Statement_);
@DBI::SQL::Nano::Table::ISA = qw(DBI::SQL::Nano::Table_);
}
else
{
@DBI::SQL::Nano::Statement::ISA = qw( SQL::Statement );
@DBI::SQL::Nano::Table::ISA = qw( SQL::Eval::Table);
$versions->{statement_version} = $SQL::Statement::VERSION;
}
}
###################################
package DBI::SQL::Nano::Statement_;
###################################
use Carp qw(croak);
use Errno;
if ( eval { require Clone; } )
{
Clone->import("clone");
}
else
{
require Storable; # in CORE since 5.7.3
*clone = \&Storable::dclone;
}
sub new
{
my ( $class, $sql ) = @_;
my $self = {};
bless $self, $class;
return $self->prepare($sql);
}
#####################################################################
# PREPARE
#####################################################################
sub prepare
{
my ( $self, $sql ) = @_;
$sql =~ s/\s+$//;
$sql =~ s/\s*;$//;
for ($sql)
{
/^\s*CREATE\s+TABLE\s+(.*?)\s*\((.+)\)\s*$/is
&& do
{
$self->{command} = 'CREATE';
$self->{table_name} = $1;
defined $2 and $2 ne "" and
$self->{column_names} = parse_coldef_list($2);
$self->{column_names} or croak "Can't find columns";
};
/^\s*DROP\s+TABLE\s+(IF\s+EXISTS\s+)?(.*?)\s*$/is
&& do
{
$self->{command} = 'DROP';
$self->{table_name} = $2;
defined $1 and $1 ne "" and
$self->{ignore_missing_table} = 1;
};
/^\s*SELECT\s+(.*?)\s+FROM\s+(\S+)((.*))?/is
&& do
{
$self->{command} = 'SELECT';
defined $1 and $1 ne "" and
$self->{column_names} = parse_comma_list($1);
$self->{column_names} or croak "Can't find columns";
$self->{table_name} = $2;
if ( my $clauses = $4 )
{
if ( $clauses =~ /^(.*)\s+ORDER\s+BY\s+(.*)$/is )
{
$clauses = $1;
$self->{order_clause} = $self->parse_order_clause($2);
}
$self->{where_clause} = $self->parse_where_clause($clauses) if ($clauses);
}
};
/^\s*INSERT\s+(?:INTO\s+)?(\S+)\s*(\((.*?)\))?\s*VALUES\s*\((.+)\)/is
&& do
{
$self->{command} = 'INSERT';
$self->{table_name} = $1;
defined $2 and $2 ne "" and
$self->{column_names} = parse_comma_list($2);
defined $4 and $4 ne "" and
$self->{values} = $self->parse_values_list($4);
$self->{values} or croak "Can't parse values";
};
/^\s*DELETE\s+FROM\s+(\S+)((.*))?/is
&& do
{
$self->{command} = 'DELETE';
$self->{table_name} = $1;
defined $3 and $3 ne "" and
$self->{where_clause} = $self->parse_where_clause($3);
};
/^\s*UPDATE\s+(\S+)\s+SET\s+(.+)(\s+WHERE\s+.+)/is
&& do
{
$self->{command} = 'UPDATE';
$self->{table_name} = $1;
defined $2 and $2 ne "" and
$self->parse_set_clause($2);
defined $3 and $3 ne "" and
$self->{where_clause} = $self->parse_where_clause($3);
};
}
croak "Couldn't parse" unless ( $self->{command} and $self->{table_name} );
return $self;
}
sub parse_order_clause
{
my ( $self, $str ) = @_;
my @clause = split /\s+/, $str;
return { $clause[0] => 'ASC' } if ( @clause == 1 );
croak "Bad ORDER BY clause '$str'" if ( @clause > 2 );
$clause[1] ||= '';
return { $clause[0] => uc $clause[1] }
if $clause[1] =~ /^ASC$/i
or $clause[1] =~ /^DESC$/i;
croak "Bad ORDER BY clause '$clause[1]'";
}
sub parse_coldef_list
{ # check column definitions
my @col_defs;
for ( split ',', shift )
{
my $col = clean_parse_str($_);
if ( $col =~ /^(\S+?)\s+.+/ )
{ # doesn't check what it is
$col = $1; # just checks if it exists
}
else
{
croak "No column definition for '$_'";
}
push @col_defs, $col;
}
return \@col_defs;
}
sub parse_comma_list
{
[ map { clean_parse_str($_) } split( ',', shift ) ];
}
sub clean_parse_str { local $_ = shift; s/\(//; s/\)//; s/^\s+//; s/\s+$//; $_; }
sub parse_values_list
{
my ( $self, $str ) = @_;
[ map { $self->parse_value( clean_parse_str($_) ) } split( ',', $str ) ];
}
sub parse_set_clause
{
my $self = shift;
my @cols = split /,/, shift;
my $set_clause;
for my $col (@cols)
{
my ( $col_name, $value ) = $col =~ /^\s*(.+?)\s*=\s*(.+?)\s*$/s;
push @{ $self->{column_names} }, $col_name;
push @{ $self->{values} }, $self->parse_value($value);
}
croak "Can't parse set clause" unless ( $self->{column_names} and $self->{values} );
}
sub parse_value
{
my ( $self, $str ) = @_;
return unless ( defined $str );
$str =~ s/\s+$//;
$str =~ s/^\s+//;
if ( $str =~ /^\?$/ )
{
push @{ $self->{params} }, '?';
return {
value => '?',
type => 'placeholder'
};
}
return {
value => undef,
type => 'NULL'
} if ( $str =~ /^NULL$/i );
return {
value => $1,
type => 'string'
} if ( $str =~ /^'(.+)'$/s );
return {
value => $str,
type => 'number'
} if ( DBI::looks_like_number($str) );
return {
value => $str,
type => 'column'
};
}
sub parse_where_clause
{
my ( $self, $str ) = @_;
$str =~ s/\s+$//;
if ( $str =~ /^\s*WHERE\s+(.*)/i )
{
$str = $1;
}
else
{
croak "Couldn't find WHERE clause in '$str'";
}
my ($neg) = $str =~ s/^\s*(NOT)\s+//is;
my $opexp = '=|<>|<=|>=|<|>|LIKE|CLIKE|IS';
my ( $val1, $op, $val2 ) = $str =~ /^(.+?)\s*($opexp)\s*(.+)\s*$/iso;
croak "Couldn't parse WHERE expression '$str'" unless ( defined $val1 and defined $op and defined $val2 );
return {
arg1 => $self->parse_value($val1),
arg2 => $self->parse_value($val2),
op => $op,
neg => $neg,
};
}
#####################################################################
# EXECUTE
#####################################################################
sub execute
{
my ( $self, $data, $params ) = @_;
my $num_placeholders = $self->params;
my $num_params = scalar @$params || 0;
croak "Number of params '$num_params' does not match number of placeholders '$num_placeholders'"
unless ( $num_placeholders == $num_params );
if ( scalar @$params )
{
for my $i ( 0 .. $#{ $self->{values} } )
{
if ( $self->{values}->[$i]->{type} eq 'placeholder' )
{
$self->{values}->[$i]->{value} = shift @$params;
}
}
if ( $self->{where_clause} )
{
if ( $self->{where_clause}->{arg1}->{type} eq 'placeholder' )
{
$self->{where_clause}->{arg1}->{value} = shift @$params;
}
if ( $self->{where_clause}->{arg2}->{type} eq 'placeholder' )
{
$self->{where_clause}->{arg2}->{value} = shift @$params;
}
}
}
my $command = $self->{command};
( $self->{'NUM_OF_ROWS'}, $self->{'NUM_OF_FIELDS'}, $self->{'data'}, ) = $self->$command( $data, $params );
$self->{NAME} ||= $self->{column_names};
return $self->{'NUM_OF_ROWS'} || '0E0';
}
my $enoentstr = "Cannot open .*\(" . Errno::ENOENT . "\)";
my $enoentrx = qr/$enoentstr/;
sub DROP ($$$)
{
my ( $self, $data, $params ) = @_;
my $table;
my @err;
eval {
local $SIG{__WARN__} = sub { push @err, @_ };
($table) = $self->open_tables( $data, 0, 1 );
};
if ( $self->{ignore_missing_table} and ( $@ or @err ) and grep { $_ =~ $enoentrx } ( @err, $@ ) )
{
$@ = '';
return ( -1, 0 );
}
croak( $@ || $err[0] ) if ( $@ || @err );
return ( -1, 0 ) unless $table;
$table->drop($data);
( -1, 0 );
}
sub CREATE ($$$)
{
my ( $self, $data, $params ) = @_;
my $table = $self->open_tables( $data, 1, 1 );
$table->push_names( $data, $self->{column_names} );
( 0, 0 );
}
sub INSERT ($$$)
{
my ( $self, $data, $params ) = @_;
my $table = $self->open_tables( $data, 0, 1 );
$self->verify_columns($table);
my $all_columns = $table->{col_names};
$table->seek( $data, 0, 2 ) unless ( $table->can('insert_one_row') );
my ($array) = [];
my ( $val, $col, $i );
$self->{column_names} = $table->col_names() unless ( $self->{column_names} );
my $cNum = scalar( @{ $self->{column_names} } ) if ( $self->{column_names} );
my $param_num = 0;
$cNum or
croak "Bad col names in INSERT";
my $maxCol = $#$all_columns;
for ( $i = 0; $i < $cNum; $i++ )
{
$col = $self->{column_names}->[$i];
$array->[ $self->column_nums( $table, $col ) ] = $self->row_values($i);
}
# Extend row to put values in ALL fields
$#$array < $maxCol and $array->[$maxCol] = undef;
$table->can('insert_new_row') ? $table->insert_new_row( $data, $array ) : $table->push_row( $data, $array );
return ( 1, 0 );
}
sub DELETE ($$$)
{
my ( $self, $data, $params ) = @_;
my $table = $self->open_tables( $data, 0, 1 );
$self->verify_columns($table);
my ($affected) = 0;
my ( @rows, $array );
my $can_dor = $table->can('delete_one_row');
while ( $array = $table->fetch_row($data) )
{
if ( $self->eval_where( $table, $array ) )
{
++$affected;
if ( $self->{fetched_from_key} )
{
$array = $self->{fetched_value};
$table->delete_one_row( $data, $array );
return ( $affected, 0 );
}
push( @rows, $array ) if ($can_dor);
}
else
{
push( @rows, $array ) unless ($can_dor);
}
}
if ($can_dor)
{
foreach $array (@rows)
{
$table->delete_one_row( $data, $array );
}
}
else
{
$table->seek( $data, 0, 0 );
foreach $array (@rows)
{
$table->push_row( $data, $array );
}
$table->truncate($data);
}
return ( $affected, 0 );
}
sub _anycmp($$;$)
{
my ( $a, $b, $case_fold ) = @_;
if ( !defined($a) || !defined($b) )
{
return defined($a) - defined($b);
}
elsif ( DBI::looks_like_number($a) && DBI::looks_like_number($b) )
{
return $a <=> $b;
}
else
{
return $case_fold ? lc($a) cmp lc($b) || $a cmp $b : $a cmp $b;
}
}
sub SELECT ($$$)
{
my ( $self, $data, $params ) = @_;
my $table = $self->open_tables( $data, 0, 0 );
$self->verify_columns($table);
my $tname = $self->{table_name};
my ($affected) = 0;
my ( @rows, %cols, $array, $val, $col, $i );
while ( $array = $table->fetch_row($data) )
{
if ( $self->eval_where( $table, $array ) )
{
$array = $self->{fetched_value} if ( $self->{fetched_from_key} );
unless ( keys %cols )
{
my $col_nums = $self->column_nums($table);
%cols = reverse %{$col_nums};
}
my $rowhash;
for ( sort keys %cols )
{
$rowhash->{ $cols{$_} } = $array->[$_];
}
my @newarray;
for ( $i = 0; $i < @{ $self->{column_names} }; $i++ )
{
$col = $self->{column_names}->[$i];
push @newarray, $rowhash->{$col};
}
push( @rows, \@newarray );
return ( scalar(@rows), scalar @{ $self->{column_names} }, \@rows )
if ( $self->{fetched_from_key} );
}
}
if ( $self->{order_clause} )
{
my ( $sort_col, $desc ) = each %{ $self->{order_clause} };
my @sortCols = ( $self->column_nums( $table, $sort_col, 1 ) );
$sortCols[1] = uc $desc eq 'DESC' ? 1 : 0;
@rows = sort {
my ( $result, $colNum, $desc );
my $i = 0;
do
{
$colNum = $sortCols[ $i++ ];
$desc = $sortCols[ $i++ ];
$result = _anycmp( $a->[$colNum], $b->[$colNum] );
$result = -$result if ($desc);
} while ( !$result && $i < @sortCols );
$result;
} @rows;
}
( scalar(@rows), scalar @{ $self->{column_names} }, \@rows );
}
sub UPDATE ($$$)
{
my ( $self, $data, $params ) = @_;
my $table = $self->open_tables( $data, 0, 1 );
$self->verify_columns($table);
return undef unless $table;
my $affected = 0;
my $can_usr = $table->can('update_specific_row');
my $can_uor = $table->can('update_one_row');
my $can_rwu = $can_usr || $can_uor;
my ( @rows, $array, $f_array, $val, $col, $i );
while ( $array = $table->fetch_row($data) )
{
if ( $self->eval_where( $table, $array ) )
{
$array = $self->{fetched_value} if ( $self->{fetched_from_key} and $can_rwu );
my $orig_ary = clone($array) if ($can_usr);
for ( $i = 0; $i < @{ $self->{column_names} }; $i++ )
{
$col = $self->{column_names}->[$i];
$array->[ $self->column_nums( $table, $col ) ] = $self->row_values($i);
}
$affected++;
if ( $self->{fetched_value} )
{
if ($can_usr)
{
$table->update_specific_row( $data, $array, $orig_ary );
}
elsif ($can_uor)
{
$table->update_one_row( $data, $array );
}
return ( $affected, 0 );
}
push( @rows, $can_usr ? [ $array, $orig_ary ] : $array );
}
else
{
push( @rows, $array ) unless ($can_rwu);
}
}
if ($can_rwu)
{
foreach my $array (@rows)
{
if ($can_usr)
{
$table->update_specific_row( $data, @$array );
}
elsif ($can_uor)
{
$table->update_one_row( $data, $array );
}
}
}
else
{
$table->seek( $data, 0, 0 );
foreach my $array (@rows)
{
$table->push_row( $data, $array );
}
$table->truncate($data);
}
return ( $affected, 0 );
}
sub verify_columns
{
my ( $self, $table ) = @_;
my @cols = @{ $self->{column_names} };
if ( $self->{where_clause} )
{
if ( my $col = $self->{where_clause}->{arg1} )
{
push @cols, $col->{value} if $col->{type} eq 'column';
}
if ( my $col = $self->{where_clause}->{arg2} )
{
push @cols, $col->{value} if $col->{type} eq 'column';
}
}
for (@cols)
{
$self->column_nums( $table, $_ );
}
}
sub column_nums
{
my ( $self, $table, $stmt_col_name, $find_in_stmt ) = @_;
my %dbd_nums = %{ $table->col_nums() };
my @dbd_cols = @{ $table->col_names() };
my %stmt_nums;
if ( $stmt_col_name and !$find_in_stmt )
{
while ( my ( $k, $v ) = each %dbd_nums )
{
return $v if uc $k eq uc $stmt_col_name;
}
croak "No such column '$stmt_col_name'";
}
if ( $stmt_col_name and $find_in_stmt )
{
for my $i ( 0 .. @{ $self->{column_names} } )
{
return $i if uc $stmt_col_name eq uc $self->{column_names}->[$i];
}
croak "No such column '$stmt_col_name'";
}
for my $i ( 0 .. $#dbd_cols )
{
for my $stmt_col ( @{ $self->{column_names} } )
{
$stmt_nums{$stmt_col} = $i if uc $dbd_cols[$i] eq uc $stmt_col;
}
}
return \%stmt_nums;
}
sub eval_where
{
my ( $self, $table, $rowary ) = @_;
my $where = $self->{"where_clause"} || return 1;
my $col_nums = $table->col_nums();
my %cols = reverse %{$col_nums};
my $rowhash;
for ( sort keys %cols )
{
$rowhash->{ uc $cols{$_} } = $rowary->[$_];
}
return $self->process_predicate( $where, $table, $rowhash );
}
sub process_predicate
{
my ( $self, $pred, $table, $rowhash ) = @_;
my $val1 = $pred->{arg1};
if ( $val1->{type} eq 'column' )
{
$val1 = $rowhash->{ uc $val1->{value} };
}
else
{
$val1 = $val1->{value};
}
my $val2 = $pred->{arg2};
if ( $val2->{type} eq 'column' )
{
$val2 = $rowhash->{ uc $val2->{value} };
}
else
{
$val2 = $val2->{value};
}
my $op = $pred->{op};
my $neg = $pred->{neg};
if ( $op eq '=' and !$neg and $table->can('fetch_one_row') )
{
my $key_col = $table->fetch_one_row( 1, 1 );
if ( $pred->{arg1}->{value} =~ /^$key_col$/i )
{
$self->{fetched_from_key} = 1;
$self->{fetched_value} = $table->fetch_one_row( 0, $pred->{arg2}->{value} );
return 1;
}
}
my $match = $self->is_matched( $val1, $op, $val2 ) || 0;
if ($neg) { $match = $match ? 0 : 1; }
return $match;
}
sub is_matched
{
my ( $self, $val1, $op, $val2 ) = @_;
if ( $op eq 'IS' )
{
return 1 if ( !defined $val1 or $val1 eq '' );
return 0;
}
$val1 = '' unless ( defined $val1 );
$val2 = '' unless ( defined $val2 );
if ( $op =~ /LIKE|CLIKE/i )
{
$val2 = quotemeta($val2);
$val2 =~ s/\\%/.*/g;
$val2 =~ s/_/./g;
}
if ( $op eq 'LIKE' ) { return $val1 =~ /^$val2$/s; }
if ( $op eq 'CLIKE' ) { return $val1 =~ /^$val2$/si; }
if ( DBI::looks_like_number($val1) && DBI::looks_like_number($val2) )
{
if ( $op eq '<' ) { return $val1 < $val2; }
if ( $op eq '>' ) { return $val1 > $val2; }
if ( $op eq '=' ) { return $val1 == $val2; }
if ( $op eq '<>' ) { return $val1 != $val2; }
if ( $op eq '<=' ) { return $val1 <= $val2; }
if ( $op eq '>=' ) { return $val1 >= $val2; }
}
else
{
if ( $op eq '<' ) { return $val1 lt $val2; }
if ( $op eq '>' ) { return $val1 gt $val2; }
if ( $op eq '=' ) { return $val1 eq $val2; }
if ( $op eq '<>' ) { return $val1 ne $val2; }
if ( $op eq '<=' ) { return $val1 ge $val2; }
if ( $op eq '>=' ) { return $val1 le $val2; }
}
}
sub params
{
my ( $self, $val_num ) = @_;
if ( !$self->{"params"} ) { return 0; }
if ( defined $val_num )
{
return $self->{"params"}->[$val_num];
}
return wantarray ? @{ $self->{"params"} } : scalar @{ $self->{"params"} };
}
sub open_tables
{
my ( $self, $data, $createMode, $lockMode ) = @_;
my $table_name = $self->{table_name};
my $table;
eval { $table = $self->open_table( $data, $table_name, $createMode, $lockMode ) };
if ($@)
{
chomp $@;
croak $@;
}
croak "Couldn't open table '$table_name'" unless $table;
if ( !$self->{column_names} or $self->{column_names}->[0] eq '*' )
{
$self->{column_names} = $table->col_names();
}
return $table;
}
sub row_values
{
my ( $self, $val_num ) = @_;
if ( !$self->{"values"} ) { return 0; }
if ( defined $val_num )
{
return $self->{"values"}->[$val_num]->{value};
}
if (wantarray)
{
return map { $_->{"value"} } @{ $self->{"values"} };
}
else
{
return scalar @{ $self->{"values"} };
}
}
sub column_names
{
my ($self) = @_;
my @col_names;
if ( $self->{column_names} and $self->{column_names}->[0] ne '*' )
{
@col_names = @{ $self->{column_names} };
}
return @col_names;
}
###############################
package DBI::SQL::Nano::Table_;
###############################
use Carp qw(croak);
sub new ($$)
{
my ( $proto, $attr ) = @_;
my ($self) = {%$attr};
defined( $self->{col_names} ) and "ARRAY" eq ref( $self->{col_names} )
or croak("attribute 'col_names' must be defined as an array");
exists( $self->{col_nums} ) or $self->{col_nums} = _map_colnums( $self->{col_names} );
defined( $self->{col_nums} ) and "HASH" eq ref( $self->{col_nums} )
or croak("attribute 'col_nums' must be defined as a hash");
bless( $self, ( ref($proto) || $proto ) );
return $self;
}
sub _map_colnums
{
my $col_names = $_[0];
my %col_nums;
for my $i ( 0 .. $#$col_names )
{
next unless $col_names->[$i];
$col_nums{ $col_names->[$i] } = $i;
}
return \%col_nums;
}
sub row() { return $_[0]->{row}; }
sub column($) { return $_[0]->{row}->[ $_[0]->column_num( $_[1] ) ]; }
sub column_num($) { $_[0]->{col_nums}->{ $_[1] }; }
sub col_nums() { $_[0]->{col_nums} }
sub col_names() { $_[0]->{col_names}; }
sub drop ($$) { croak "Abstract method " . ref( $_[0] ) . "::drop called" }
sub fetch_row ($$$) { croak "Abstract method " . ref( $_[0] ) . "::fetch_row called" }
sub push_row ($$$) { croak "Abstract method " . ref( $_[0] ) . "::push_row called" }
sub push_names ($$$) { croak "Abstract method " . ref( $_[0] ) . "::push_names called" }
sub truncate ($$) { croak "Abstract method " . ref( $_[0] ) . "::truncate called" }
sub seek ($$$$) { croak "Abstract method " . ref( $_[0] ) . "::seek called" }
1;
__END__
=pod
=head1 NAME
DBI::SQL::Nano - a very tiny SQL engine
=head1 SYNOPSIS
BEGIN { $ENV{DBI_SQL_NANO}=1 } # forces use of Nano rather than SQL::Statement
use DBI::SQL::Nano;
use Data::Dumper;
my $stmt = DBI::SQL::Nano::Statement->new(
"SELECT bar,baz FROM foo WHERE qux = 1"
) or die "Couldn't parse";
print Dumper $stmt;
=head1 DESCRIPTION
C<< DBI::SQL::Nano >> is meant as a I<very> minimal SQL engine for use in
situations where SQL::Statement is not available. In most situations you are
better off installing L<SQL::Statement> although DBI::SQL::Nano may be faster
for some B<very> simple tasks.
DBI::SQL::Nano, like SQL::Statement is primarily intended to provide a SQL
engine for use with some pure perl DBDs including L<DBD::DBM>, L<DBD::CSV>,
L<DBD::AnyData>, and L<DBD::Excel>. It is not of much use in and of itself.
You can dump out the structure of a parsed SQL statement, but that is about
it.
=head1 USAGE
=head2 Setting the DBI_SQL_NANO flag
By default, when a C<< DBD >> uses C<< DBI::SQL::Nano >>, the module will
look to see if C<< SQL::Statement >> is installed. If it is, SQL::Statement
objects are used. If SQL::Statement is not available, DBI::SQL::Nano
objects are used.
In some cases, you may wish to use DBI::SQL::Nano objects even if
SQL::Statement is available. To force usage of DBI::SQL::Nano objects
regardless of the availability of SQL::Statement, set the environment
variable DBI_SQL_NANO to 1.
You can set the environment variable in your shell prior to running your
script (with SET or EXPORT or whatever), or else you can set it in your
script by putting this at the top of the script:
BEGIN { $ENV{DBI_SQL_NANO} = 1 }
=head2 Supported SQL syntax
Here's a pseudo-BNF. Square brackets [] indicate optional items;
Angle brackets <> indicate items defined elsewhere in the BNF.
statement ::=
DROP TABLE [IF EXISTS] <table_name>
| CREATE TABLE <table_name> <col_def_list>
| INSERT INTO <table_name> [<insert_col_list>] VALUES <val_list>
| DELETE FROM <table_name> [<where_clause>]
| UPDATE <table_name> SET <set_clause> <where_clause>
| SELECT <select_col_list> FROM <table_name> [<where_clause>]
[<order_clause>]
the optional IF EXISTS clause ::=
* similar to MySQL - prevents errors when trying to drop
a table that doesn't exist
identifiers ::=
* table and column names should be valid SQL identifiers
* especially avoid using spaces and commas in identifiers
* note: there is no error checking for invalid names, some
will be accepted, others will cause parse failures
table_name ::=
* only one table (no multiple table operations)
* see identifier for valid table names
col_def_list ::=
* a parens delimited, comma-separated list of column names
* see identifier for valid column names
* column types and column constraints may be included but are ignored
e.g. these are all the same:
(id,phrase)
(id INT, phrase VARCHAR(40))
(id INT PRIMARY KEY, phrase VARCHAR(40) NOT NULL)
* you are *strongly* advised to put in column types even though
they are ignored ... it increases portability
insert_col_list ::=
* a parens delimited, comma-separated list of column names
* as in standard SQL, this is optional
select_col_list ::=
* a comma-separated list of column names
* or an asterisk denoting all columns
val_list ::=
* a parens delimited, comma-separated list of values which can be:
* placeholders (an unquoted question mark)
* numbers (unquoted numbers)
* column names (unquoted strings)
* nulls (unquoted word NULL)
* strings (delimited with single quote marks);
* note: leading and trailing percent mark (%) and underscore (_)
can be used as wildcards in quoted strings for use with
the LIKE and CLIKE operators
* note: escaped single quotation marks within strings are not
supported, neither are embedded commas, use placeholders instead
set_clause ::=
* a comma-separated list of column = value pairs
* see val_list for acceptable value formats
where_clause ::=
* a single "column/value <op> column/value" predicate, optionally
preceded by "NOT"
* note: multiple predicates combined with ORs or ANDs are not supported
* see val_list for acceptable value formats
* op may be one of:
< > >= <= = <> LIKE CLIKE IS
* CLIKE is a case insensitive LIKE
order_clause ::= column_name [ASC|DESC]
* a single column optional ORDER BY clause is supported
* as in standard SQL, if neither ASC (ascending) nor
DESC (descending) is specified, ASC becomes the default
=head1 TABLES
DBI::SQL::Nano::Statement operates on exactly one table. This table will be
opened by inherit from DBI::SQL::Nano::Statement and implements the
C<< open_table >> method.
sub open_table ($$$$$)
{
...
return Your::Table->new( \%attributes );
}
DBI::SQL::Nano::Statement_ expects a rudimentary interface is implemented by
the table object, as well as SQL::Statement expects.
package Your::Table;
use vars qw(@ISA);
@ISA = qw(DBI::SQL::Nano::Table);
sub drop ($$) { ... }
sub fetch_row ($$$) { ... }
sub push_row ($$$) { ... }
sub push_names ($$$) { ... }
sub truncate ($$) { ... }
sub seek ($$$$) { ... }
The base class interfaces are provided by DBI::SQL::Nano::Table_ in case of
relying on DBI::SQL::Nano or SQL::Eval::Table (see L<SQL::Eval> for details)
otherwise.
=head1 BUGS AND LIMITATIONS
There are no known bugs in DBI::SQL::Nano::Statement. If you find a one
and want to report, please see L<DBI> for how to report bugs.
DBI::SQL::Nano::Statement is designed to provide a minimal subset for
executing SQL statements.
The most important limitation might be the restriction on one table per
statement. This implies, that no JOINs are supported and there cannot be
any foreign key relation between tables.
The where clause evaluation of DBI::SQL::Nano::Statement is very slow
(SQL::Statement uses a precompiled evaluation).
INSERT can handle only one row per statement. To insert multiple rows,
use placeholders as explained in DBI.
The DBI::SQL::Nano parser is very limited and does not support any
additional syntax such as brackets, comments, functions, aggregations
etc.
In contrast to SQL::Statement, temporary tables are not supported.
=head1 ACKNOWLEDGEMENTS
Tim Bunce provided the original idea for this module, helped me out of the
tangled trap of namespaces, and provided help and advice all along the way.
Although I wrote it from the ground up, it is based on Jochen Wiedmann's
original design of SQL::Statement, so much of the credit for the API goes
to him.
=head1 AUTHOR AND COPYRIGHT
This module is originally written by Jeff Zucker < jzucker AT cpan.org >
This module is currently maintained by Jens Rehsack < jrehsack AT cpan.org >
Copyright (C) 2010 by Jens Rehsack, all rights reserved.
Copyright (C) 2004 by Jeff Zucker, all rights reserved.
You may freely distribute and/or modify this module under the terms of
either the GNU General Public License (GPL) or the Artistic License,
as specified in the Perl README file.
=cut
DBI/Profile.pm 0000644 00000077617 15033552504 0007124 0 ustar 00 package DBI::Profile;
=head1 NAME
DBI::Profile - Performance profiling and benchmarking for the DBI
=head1 SYNOPSIS
The easiest way to enable DBI profiling is to set the DBI_PROFILE
environment variable to 2 and then run your code as usual:
DBI_PROFILE=2 prog.pl
This will profile your program and then output a textual summary
grouped by query when the program exits. You can also enable profiling by
setting the Profile attribute of any DBI handle:
$dbh->{Profile} = 2;
Then the summary will be printed when the handle is destroyed.
Many other values apart from are possible - see L<"ENABLING A PROFILE"> below.
=head1 DESCRIPTION
The DBI::Profile module provides a simple interface to collect and
report performance and benchmarking data from the DBI.
For a more elaborate interface, suitable for larger programs, see
L<DBI::ProfileDumper|DBI::ProfileDumper> and L<dbiprof|dbiprof>.
For Apache/mod_perl applications see
L<DBI::ProfileDumper::Apache|DBI::ProfileDumper::Apache>.
=head1 OVERVIEW
Performance data collection for the DBI is built around several
concepts which are important to understand clearly.
=over 4
=item Method Dispatch
Every method call on a DBI handle passes through a single 'dispatch'
function which manages all the common aspects of DBI method calls,
such as handling the RaiseError attribute.
=item Data Collection
If profiling is enabled for a handle then the dispatch code takes
a high-resolution timestamp soon after it is entered. Then, after
calling the appropriate method and just before returning, it takes
another high-resolution timestamp and calls a function to record
the information. That function is passed the two timestamps
plus the DBI handle and the name of the method that was called.
That data about a single DBI method call is called a I<profile sample>.
=item Data Filtering
If the method call was invoked by the DBI or by a driver then the call is
ignored for profiling because the time spent will be accounted for by the
original 'outermost' call for your code.
For example, the calls that the selectrow_arrayref() method makes
to prepare() and execute() etc. are not counted individually
because the time spent in those methods is going to be allocated
to the selectrow_arrayref() method when it returns. If this was not
done then it would be very easy to double count time spent inside
the DBI.
=item Data Storage Tree
The profile data is accumulated as 'leaves on a tree'. The 'path' through the
branches of the tree to a particular leaf is determined dynamically for each sample.
This is a key feature of DBI profiling.
For each profiled method call the DBI walks along the Path and uses each value
in the Path to step into and grow the Data tree.
For example, if the Path is
[ 'foo', 'bar', 'baz' ]
then the new profile sample data will be I<merged> into the tree at
$h->{Profile}->{Data}->{foo}->{bar}->{baz}
But it's not very useful to merge all the call data into one leaf node (except
to get an overall 'time spent inside the DBI' total). It's more common to want
the Path to include dynamic values such as the current statement text and/or
the name of the method called to show what the time spent inside the DBI was for.
The Path can contain some 'magic cookie' values that are automatically replaced
by corresponding dynamic values when they're used. These magic cookies always
start with a punctuation character.
For example a value of 'C<!MethodName>' in the Path causes the corresponding
entry in the Data to be the name of the method that was called.
For example, if the Path was:
[ 'foo', '!MethodName', 'bar' ]
and the selectall_arrayref() method was called, then the profile sample data
for that call will be merged into the tree at:
$h->{Profile}->{Data}->{foo}->{selectall_arrayref}->{bar}
=item Profile Data
Profile data is stored at the 'leaves' of the tree as references
to an array of numeric values. For example:
[
106, # 0: count of samples at this node
0.0312958955764771, # 1: total duration
0.000490069389343262, # 2: first duration
0.000176072120666504, # 3: shortest duration
0.00140702724456787, # 4: longest duration
1023115819.83019, # 5: time of first sample
1023115819.86576, # 6: time of last sample
]
After the first sample, later samples always update elements 0, 1, and 6, and
may update 3 or 4 depending on the duration of the sampled call.
=back
=head1 ENABLING A PROFILE
Profiling is enabled for a handle by assigning to the Profile
attribute. For example:
$h->{Profile} = DBI::Profile->new();
The Profile attribute holds a blessed reference to a hash object
that contains the profile data and attributes relating to it.
The class the Profile object is blessed into is expected to
provide at least a DESTROY method which will dump the profile data
to the DBI trace file handle (STDERR by default).
All these examples have the same effect as each other:
$h->{Profile} = 0;
$h->{Profile} = "/DBI::Profile";
$h->{Profile} = DBI::Profile->new();
$h->{Profile} = {};
$h->{Profile} = { Path => [] };
Similarly, these examples have the same effect as each other:
$h->{Profile} = 6;
$h->{Profile} = "6/DBI::Profile";
$h->{Profile} = "!Statement:!MethodName/DBI::Profile";
$h->{Profile} = { Path => [ '!Statement', '!MethodName' ] };
If a non-blessed hash reference is given then the DBI::Profile
module is automatically C<require>'d and the reference is blessed
into that class.
If a string is given then it is processed like this:
($path, $module, $args) = split /\//, $string, 3
@path = split /:/, $path
@args = split /:/, $args
eval "require $module" if $module
$module ||= "DBI::Profile"
$module->new( Path => \@Path, @args )
So the first value is used to select the Path to be used (see below).
The second value, if present, is used as the name of a module which
will be loaded and it's C<new> method called. If not present it
defaults to DBI::Profile. Any other values are passed as arguments
to the C<new> method. For example: "C<2/DBIx::OtherProfile/Foo:42>".
Numbers can be used as a shorthand way to enable common Path values.
The simplest way to explain how the values are interpreted is to show the code:
push @Path, "DBI" if $path_elem & 0x01;
push @Path, "!Statement" if $path_elem & 0x02;
push @Path, "!MethodName" if $path_elem & 0x04;
push @Path, "!MethodClass" if $path_elem & 0x08;
push @Path, "!Caller2" if $path_elem & 0x10;
So "2" is the same as "!Statement" and "6" (2+4) is the same as
"!Statement:!Method". Those are the two most commonly used values. Using a
negative number will reverse the path. Thus "-6" will group by method name then
statement.
The splitting and parsing of string values assigned to the Profile
attribute may seem a little odd, but there's a good reason for it.
Remember that attributes can be embedded in the Data Source Name
string which can be passed in to a script as a parameter. For
example:
dbi:DriverName(Profile=>2):dbname
dbi:DriverName(Profile=>{Username}:!Statement/MyProfiler/Foo:42):dbname
And also, if the C<DBI_PROFILE> environment variable is set then
The DBI arranges for every driver handle to share the same profile
object. When perl exits a single profile summary will be generated
that reflects (as nearly as practical) the total use of the DBI by
the application.
=head1 THE PROFILE OBJECT
The DBI core expects the Profile attribute value to be a hash
reference and if the following values don't exist it will create
them as needed:
=head2 Data
A reference to a hash containing the collected profile data.
=head2 Path
The Path value is a reference to an array. Each element controls the
value to use at the corresponding level of the profile Data tree.
If the value of Path is anything other than an array reference,
it is treated as if it was:
[ '!Statement' ]
The elements of Path array can be one of the following types:
=head3 Special Constant
B<!Statement>
Use the current Statement text. Typically that's the value of the Statement
attribute for the handle the method was called with. Some methods, like
commit() and rollback(), are unrelated to a particular statement. For those
methods !Statement records an empty string.
For statement handles this is always simply the string that was
given to prepare() when the handle was created. For database handles
this is the statement that was last prepared or executed on that
database handle. That can lead to a little 'fuzzyness' because, for
example, calls to the quote() method to build a new statement will
typically be associated with the previous statement. In practice
this isn't a significant issue and the dynamic Path mechanism can
be used to setup your own rules.
B<!MethodName>
Use the name of the DBI method that the profile sample relates to.
B<!MethodClass>
Use the fully qualified name of the DBI method, including
the package, that the profile sample relates to. This shows you
where the method was implemented. For example:
'DBD::_::db::selectrow_arrayref' =>
0.022902s
'DBD::mysql::db::selectrow_arrayref' =>
2.244521s / 99 = 0.022445s avg (first 0.022813s, min 0.022051s, max 0.028932s)
The "DBD::_::db::selectrow_arrayref" shows that the driver has
inherited the selectrow_arrayref method provided by the DBI.
But you'll note that there is only one call to
DBD::_::db::selectrow_arrayref but another 99 to
DBD::mysql::db::selectrow_arrayref. Currently the first
call doesn't record the true location. That may change.
B<!Caller>
Use a string showing the filename and line number of the code calling the method.
B<!Caller2>
Use a string showing the filename and line number of the code calling the
method, as for !Caller, but also include filename and line number of the code
that called that. Calls from DBI:: and DBD:: packages are skipped.
B<!File>
Same as !Caller above except that only the filename is included, not the line number.
B<!File2>
Same as !Caller2 above except that only the filenames are included, not the line number.
B<!Time>
Use the current value of time(). Rarely used. See the more useful C<!Time~N> below.
B<!Time~N>
Where C<N> is an integer. Use the current value of time() but with reduced precision.
The value used is determined in this way:
int( time() / N ) * N
This is a useful way to segregate a profile into time slots. For example:
[ '!Time~60', '!Statement' ]
=head3 Code Reference
The subroutine is passed the handle it was called on and the DBI method name.
The current Statement is in $_. The statement string should not be modified,
so most subs start with C<local $_ = $_;>.
The list of values it returns is used at that point in the Profile Path.
Any undefined values are treated as the string "C<undef>".
The sub can 'veto' (reject) a profile sample by including a reference to undef
(C<\undef>) in the returned list. That can be useful when you want to only profile
statements that match a certain pattern, or only profile certain methods.
=head3 Subroutine Specifier
A Path element that begins with 'C<&>' is treated as the name of a subroutine
in the DBI::ProfileSubs namespace and replaced with the corresponding code reference.
Currently this only works when the Path is specified by the C<DBI_PROFILE>
environment variable.
Also, currently, the only subroutine in the DBI::ProfileSubs namespace is
C<'&norm_std_n3'>. That's a very handy subroutine when profiling code that
doesn't use placeholders. See L<DBI::ProfileSubs> for more information.
=head3 Attribute Specifier
A string enclosed in braces, such as 'C<{Username}>', specifies that the current
value of the corresponding database handle attribute should be used at that
point in the Path.
=head3 Reference to a Scalar
Specifies that the current value of the referenced scalar be used at that point
in the Path. This provides an efficient way to get 'contextual' values into
your profile.
=head3 Other Values
Any other values are stringified and used literally.
(References, and values that begin with punctuation characters are reserved.)
=head1 REPORTING
=head2 Report Format
The current accumulated profile data can be formatted and output using
print $h->{Profile}->format;
To discard the profile data and start collecting fresh data
you can do:
$h->{Profile}->{Data} = undef;
The default results format looks like this:
DBI::Profile: 0.001015s 42.7% (5 calls) programname @ YYYY-MM-DD HH:MM:SS
'' =>
0.000024s / 2 = 0.000012s avg (first 0.000015s, min 0.000009s, max 0.000015s)
'SELECT mode,size,name FROM table' =>
0.000991s / 3 = 0.000330s avg (first 0.000678s, min 0.000009s, max 0.000678s)
Which shows the total time spent inside the DBI, with a count of
the total number of method calls and the name of the script being
run, then a formatted version of the profile data tree.
If the results are being formatted when the perl process is exiting
(which is usually the case when the DBI_PROFILE environment variable
is used) then the percentage of time the process spent inside the
DBI is also shown. If the process is not exiting then the percentage is
calculated using the time between the first and last call to the DBI.
In the example above the paths in the tree are only one level deep and
use the Statement text as the value (that's the default behaviour).
The merged profile data at the 'leaves' of the tree are presented
as total time spent, count, average time spent (which is simply total
time divided by the count), then the time spent on the first call,
the time spent on the fastest call, and finally the time spent on
the slowest call.
The 'avg', 'first', 'min' and 'max' times are not particularly
useful when the profile data path only contains the statement text.
Here's an extract of a more detailed example using both statement
text and method name in the path:
'SELECT mode,size,name FROM table' =>
'FETCH' =>
0.000076s
'fetchrow_hashref' =>
0.036203s / 108 = 0.000335s avg (first 0.000490s, min 0.000152s, max 0.002786s)
Here you can see the 'avg', 'first', 'min' and 'max' for the
108 calls to fetchrow_hashref() become rather more interesting.
Also the data for FETCH just shows a time value because it was only
called once.
Currently the profile data is output sorted by branch names. That
may change in a later version so the leaf nodes are sorted by total
time per leaf node.
=head2 Report Destination
The default method of reporting is for the DESTROY method of the
Profile object to format the results and write them using:
DBI->trace_msg($results, 0); # see $ON_DESTROY_DUMP below
to write them to the DBI trace() filehandle (which defaults to
STDERR). To direct the DBI trace filehandle to write to a file
without enabling tracing the trace() method can be called with a
trace level of 0. For example:
DBI->trace(0, $filename);
The same effect can be achieved without changing the code by
setting the C<DBI_TRACE> environment variable to C<0=filename>.
The $DBI::Profile::ON_DESTROY_DUMP variable holds a code ref
that's called to perform the output of the formatted results.
The default value is:
$ON_DESTROY_DUMP = sub { DBI->trace_msg($results, 0) };
Apart from making it easy to send the dump elsewhere, it can also
be useful as a simple way to disable dumping results.
=head1 CHILD HANDLES
Child handles inherit a reference to the Profile attribute value
of their parent. So if profiling is enabled for a database handle
then by default the statement handles created from it all contribute
to the same merged profile data tree.
=head1 PROFILE OBJECT METHODS
=head2 format
See L</REPORTING>.
=head2 as_node_path_list
@ary = $dbh->{Profile}->as_node_path_list();
@ary = $dbh->{Profile}->as_node_path_list($node, $path);
Returns the collected data ($dbh->{Profile}{Data}) restructured into a list of
array refs, one for each leaf node in the Data tree. This 'flat' structure is
often much simpler for applications to work with.
The first element of each array ref is a reference to the leaf node.
The remaining elements are the 'path' through the data tree to that node.
For example, given a data tree like this:
{key1a}{key2a}[node1]
{key1a}{key2b}[node2]
{key1b}{key2a}{key3a}[node3]
The as_node_path_list() method will return this list:
[ [node1], 'key1a', 'key2a' ]
[ [node2], 'key1a', 'key2b' ]
[ [node3], 'key1b', 'key2a', 'key3a' ]
The nodes are ordered by key, depth-first.
The $node argument can be used to focus on a sub-tree.
If not specified it defaults to $dbh->{Profile}{Data}.
The $path argument can be used to specify a list of path elements that will be
added to each element of the returned list. If not specified it defaults to a
ref to an empty array.
=head2 as_text
@txt = $dbh->{Profile}->as_text();
$txt = $dbh->{Profile}->as_text({
node => undef,
path => [],
separator => " > ",
format => '%1$s: %11$fs / %10$d = %2$fs avg (first %12$fs, min %13$fs, max %14$fs)'."\n";
sortsub => sub { ... },
);
Returns the collected data ($dbh->{Profile}{Data}) reformatted into a list of formatted strings.
In scalar context the list is returned as a single concatenated string.
A hashref can be used to pass in arguments, the default values are shown in the example above.
The C<node> and <path> arguments are passed to as_node_path_list().
The C<separator> argument is used to join the elements of the path for each leaf node.
The C<sortsub> argument is used to pass in a ref to a sub that will order the list.
The subroutine will be passed a reference to the array returned by
as_node_path_list() and should sort the contents of the array in place.
The return value from the sub is ignored. For example, to sort the nodes by the
second level key you could use:
sortsub => sub { my $ary=shift; @$ary = sort { $a->[2] cmp $b->[2] } @$ary }
The C<format> argument is a C<sprintf> format string that specifies the format
to use for each leaf node. It uses the explicit format parameter index
mechanism to specify which of the arguments should appear where in the string.
The arguments to sprintf are:
1: path to node, joined with the separator
2: average duration (total duration/count)
(3 thru 9 are currently unused)
10: count
11: total duration
12: first duration
13: smallest duration
14: largest duration
15: time of first call
16: time of first call
=head1 CUSTOM DATA MANIPULATION
Recall that C<< $h->{Profile}->{Data} >> is a reference to the collected data.
Either to a 'leaf' array (when the Path is empty, i.e., DBI_PROFILE env var is 1),
or a reference to hash containing values that are either further hash
references or leaf array references.
Sometimes it's useful to be able to summarise some or all of the collected data.
The dbi_profile_merge_nodes() function can be used to merge leaf node values.
=head2 dbi_profile_merge_nodes
use DBI qw(dbi_profile_merge_nodes);
$time_in_dbi = dbi_profile_merge_nodes(my $totals=[], @$leaves);
Merges profile data node. Given a reference to a destination array, and zero or
more references to profile data, merges the profile data into the destination array.
For example:
$time_in_dbi = dbi_profile_merge_nodes(
my $totals=[],
[ 10, 0.51, 0.11, 0.01, 0.22, 1023110000, 1023110010 ],
[ 15, 0.42, 0.12, 0.02, 0.23, 1023110005, 1023110009 ],
);
$totals will then contain
[ 25, 0.93, 0.11, 0.01, 0.23, 1023110000, 1023110010 ]
and $time_in_dbi will be 0.93;
The second argument need not be just leaf nodes. If given a reference to a hash
then the hash is recursively searched for leaf nodes and all those found
are merged.
For example, to get the time spent 'inside' the DBI during an http request,
your logging code run at the end of the request (i.e. mod_perl LogHandler)
could use:
my $time_in_dbi = 0;
if (my $Profile = $dbh->{Profile}) { # if DBI profiling is enabled
$time_in_dbi = dbi_profile_merge_nodes(my $total=[], $Profile->{Data});
$Profile->{Data} = {}; # reset the profile data
}
If profiling has been enabled then $time_in_dbi will hold the time spent inside
the DBI for that handle (and any other handles that share the same profile data)
since the last request.
Prior to DBI 1.56 the dbi_profile_merge_nodes() function was called dbi_profile_merge().
That name still exists as an alias.
=head1 CUSTOM DATA COLLECTION
=head2 Using The Path Attribute
XXX example to be added later using a selectall_arrayref call
XXX nested inside a fetch loop where the first column of the
XXX outer loop is bound to the profile Path using
XXX bind_column(1, \${ $dbh->{Profile}->{Path}->[0] })
XXX so you end up with separate profiles for each loop
XXX (patches welcome to add this to the docs :)
=head2 Adding Your Own Samples
The dbi_profile() function can be used to add extra sample data
into the profile data tree. For example:
use DBI;
use DBI::Profile (dbi_profile dbi_time);
my $t1 = dbi_time(); # floating point high-resolution time
... execute code you want to profile here ...
my $t2 = dbi_time();
dbi_profile($h, $statement, $method, $t1, $t2);
The $h parameter is the handle the extra profile sample should be
associated with. The $statement parameter is the string to use where
the Path specifies !Statement. If $statement is undef
then $h->{Statement} will be used. Similarly $method is the string
to use if the Path specifies !MethodName. There is no
default value for $method.
The $h->{Profile}{Path} attribute is processed by dbi_profile() in
the usual way.
The $h parameter is usually a DBI handle but it can also be a reference to a
hash, in which case the dbi_profile() acts on each defined value in the hash.
This is an efficient way to update multiple profiles with a single sample,
and is used by the L<DashProfiler> module.
=head1 SUBCLASSING
Alternate profile modules must subclass DBI::Profile to help ensure
they work with future versions of the DBI.
=head1 CAVEATS
Applications which generate many different statement strings
(typically because they don't use placeholders) and profile with
!Statement in the Path (the default) will consume memory
in the Profile Data structure for each statement. Use a code ref
in the Path to return an edited (simplified) form of the statement.
If a method throws an exception itself (not via RaiseError) then
it won't be counted in the profile.
If a HandleError subroutine throws an exception (rather than returning
0 and letting RaiseError do it) then the method call won't be counted
in the profile.
Time spent in DESTROY is added to the profile of the parent handle.
Time spent in DBI->*() methods is not counted. The time spent in
the driver connect method, $drh->connect(), when it's called by
DBI->connect is counted if the DBI_PROFILE environment variable is set.
Time spent fetching tied variables, $DBI::errstr, is counted.
Time spent in FETCH for $h->{Profile} is not counted, so getting the profile
data doesn't alter it.
DBI::PurePerl does not support profiling (though it could in theory).
For asynchronous queries, time spent while the query is running on the
backend is not counted.
A few platforms don't support the gettimeofday() high resolution
time function used by the DBI (and available via the dbi_time() function).
In which case you'll get integer resolution time which is mostly useless.
On Windows platforms the dbi_time() function is limited to millisecond
resolution. Which isn't sufficiently fine for our needs, but still
much better than integer resolution. This limited resolution means
that fast method calls will often register as taking 0 time. And
timings in general will have much more 'jitter' depending on where
within the 'current millisecond' the start and end timing was taken.
This documentation could be more clear. Probably needs to be reordered
to start with several examples and build from there. Trying to
explain the concepts first seems painful and to lead to just as
many forward references. (Patches welcome!)
=cut
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
use Exporter ();
use UNIVERSAL ();
use Carp;
use DBI qw(dbi_time dbi_profile dbi_profile_merge_nodes dbi_profile_merge);
$VERSION = "2.015065";
@ISA = qw(Exporter);
@EXPORT = qw(
DBIprofile_Statement
DBIprofile_MethodName
DBIprofile_MethodClass
dbi_profile
dbi_profile_merge_nodes
dbi_profile_merge
dbi_time
);
@EXPORT_OK = qw(
format_profile_thingy
);
use constant DBIprofile_Statement => '!Statement';
use constant DBIprofile_MethodName => '!MethodName';
use constant DBIprofile_MethodClass => '!MethodClass';
our $ON_DESTROY_DUMP = sub { DBI->trace_msg(shift, 0) };
our $ON_FLUSH_DUMP = sub { DBI->trace_msg(shift, 0) };
sub new {
my $class = shift;
my $profile = { @_ };
return bless $profile => $class;
}
sub _auto_new {
my $class = shift;
my ($arg) = @_;
# This sub is called by DBI internals when a non-hash-ref is
# assigned to the Profile attribute. For example
# dbi:mysql(RaiseError=>1,Profile=>!Statement:!MethodName/DBIx::MyProfile/arg1:arg2):dbname
# This sub works out what to do and returns a suitable hash ref.
$arg =~ s/^DBI::/2\/DBI::/
and carp "Automatically changed old-style DBI::Profile specification to $arg";
# it's a path/module/k1:v1:k2:v2:... list
my ($path, $package, $args) = split /\//, $arg, 3;
my @args = (defined $args) ? split(/:/, $args, -1) : ();
my @Path;
for my $element (split /:/, $path) {
if (DBI::looks_like_number($element)) {
my $reverse = ($element < 0) ? ($element=-$element, 1) : 0;
my @p;
# a single "DBI" is special-cased in format()
push @p, "DBI" if $element & 0x01;
push @p, DBIprofile_Statement if $element & 0x02;
push @p, DBIprofile_MethodName if $element & 0x04;
push @p, DBIprofile_MethodClass if $element & 0x08;
push @p, '!Caller2' if $element & 0x10;
push @Path, ($reverse ? reverse @p : @p);
}
elsif ($element =~ m/^&(\w.*)/) {
my $name = "DBI::ProfileSubs::$1"; # capture $1 early
require DBI::ProfileSubs;
my $code = do { no strict; *{$name}{CODE} };
if (defined $code) {
push @Path, $code;
}
else {
warn "$name: subroutine not found\n";
push @Path, $element;
}
}
else {
push @Path, $element;
}
}
eval "require $package" if $package; # silently ignores errors
$package ||= $class;
return $package->new(Path => \@Path, @args);
}
sub empty { # empty out profile data
my $self = shift;
DBI->trace_msg("profile data discarded\n",0) if $self->{Trace};
$self->{Data} = undef;
}
sub filename { # baseclass method, see DBI::ProfileDumper
return undef;
}
sub flush_to_disk { # baseclass method, see DBI::ProfileDumper & DashProfiler::Core
my $self = shift;
return unless $ON_FLUSH_DUMP;
return unless $self->{Data};
my $detail = $self->format();
$ON_FLUSH_DUMP->($detail) if $detail;
}
sub as_node_path_list {
my ($self, $node, $path) = @_;
# convert the tree into an array of arrays
# from
# {key1a}{key2a}[node1]
# {key1a}{key2b}[node2]
# {key1b}{key2a}{key3a}[node3]
# to
# [ [node1], 'key1a', 'key2a' ]
# [ [node2], 'key1a', 'key2b' ]
# [ [node3], 'key1b', 'key2a', 'key3a' ]
$node ||= $self->{Data} or return;
$path ||= [];
if (ref $node eq 'HASH') { # recurse
$path = [ @$path, undef ];
return map {
$path->[-1] = $_;
($node->{$_}) ? $self->as_node_path_list($node->{$_}, $path) : ()
} sort keys %$node;
}
return [ $node, @$path ];
}
sub as_text {
my ($self, $args_ref) = @_;
my $separator = $args_ref->{separator} || " > ";
my $format_path_element = $args_ref->{format_path_element}
|| "%s"; # or e.g., " key%2$d='%s'"
my $format = $args_ref->{format}
|| '%1$s: %11$fs / %10$d = %2$fs avg (first %12$fs, min %13$fs, max %14$fs)'."\n";
my @node_path_list = $self->as_node_path_list(undef, $args_ref->{path});
$args_ref->{sortsub}->(\@node_path_list) if $args_ref->{sortsub};
my $eval = "qr/".quotemeta($separator)."/";
my $separator_re = eval($eval) || quotemeta($separator);
#warn "[$eval] = [$separator_re]";
my @text;
my @spare_slots = (undef) x 7;
for my $node_path (@node_path_list) {
my ($node, @path) = @$node_path;
my $idx = 0;
for (@path) {
s/[\r\n]+/ /g;
s/$separator_re/ /g;
++$idx;
if ($format_path_element eq "%s") {
$_ = sprintf $format_path_element, $_;
} else {
$_ = sprintf $format_path_element, $_, $idx;
}
}
push @text, sprintf $format,
join($separator, @path), # 1=path
($node->[0] ? $node->[1]/$node->[0] : 0), # 2=avg
@spare_slots,
@$node; # 10=count, 11=dur, 12=first_dur, 13=min, 14=max, 15=first_called, 16=last_called
}
return @text if wantarray;
return join "", @text;
}
sub format {
my $self = shift;
my $class = ref($self) || $self;
my $prologue = "$class: ";
my $detail = $self->format_profile_thingy(
$self->{Data}, 0, " ",
my $path = [],
my $leaves = [],
)."\n";
if (@$leaves) {
dbi_profile_merge_nodes(my $totals=[], @$leaves);
my ($count, $time_in_dbi, undef, undef, undef, $t1, $t2) = @$totals;
(my $progname = $0) =~ s:.*/::;
if ($count) {
$prologue .= sprintf "%fs ", $time_in_dbi;
my $perl_time = ($DBI::PERL_ENDING) ? time() - $^T : $t2-$t1;
$prologue .= sprintf "%.2f%% ", $time_in_dbi/$perl_time*100 if $perl_time;
my @lt = localtime(time);
my $ts = sprintf "%d-%02d-%02d %02d:%02d:%02d",
1900+$lt[5], $lt[4]+1, @lt[3,2,1,0];
$prologue .= sprintf "(%d calls) $progname \@ $ts\n", $count;
}
if (@$leaves == 1 && ref($self->{Data}) eq 'HASH' && $self->{Data}->{DBI}) {
$detail = ""; # hide the "DBI" from DBI_PROFILE=1
}
}
return ($prologue, $detail) if wantarray;
return $prologue.$detail;
}
sub format_profile_leaf {
my ($self, $thingy, $depth, $pad, $path, $leaves) = @_;
croak "format_profile_leaf called on non-leaf ($thingy)"
unless UNIVERSAL::isa($thingy,'ARRAY');
push @$leaves, $thingy if $leaves;
my ($count, $total_time, $first_time, $min, $max, $first_called, $last_called) = @$thingy;
return sprintf "%s%fs\n", ($pad x $depth), $total_time
if $count <= 1;
return sprintf "%s%fs / %d = %fs avg (first %fs, min %fs, max %fs)\n",
($pad x $depth), $total_time, $count, $count ? $total_time/$count : 0,
$first_time, $min, $max;
}
sub format_profile_branch {
my ($self, $thingy, $depth, $pad, $path, $leaves) = @_;
croak "format_profile_branch called on non-branch ($thingy)"
unless UNIVERSAL::isa($thingy,'HASH');
my @chunk;
my @keys = sort keys %$thingy;
while ( @keys ) {
my $k = shift @keys;
my $v = $thingy->{$k};
push @$path, $k;
push @chunk, sprintf "%s'%s' =>\n%s",
($pad x $depth), $k,
$self->format_profile_thingy($v, $depth+1, $pad, $path, $leaves);
pop @$path;
}
return join "", @chunk;
}
sub format_profile_thingy {
my ($self, $thingy, $depth, $pad, $path, $leaves) = @_;
return "undef" if not defined $thingy;
return $self->format_profile_leaf( $thingy, $depth, $pad, $path, $leaves)
if UNIVERSAL::isa($thingy,'ARRAY');
return $self->format_profile_branch($thingy, $depth, $pad, $path, $leaves)
if UNIVERSAL::isa($thingy,'HASH');
return "$thingy\n";
}
sub on_destroy {
my $self = shift;
return unless $ON_DESTROY_DUMP;
return unless $self->{Data};
my $detail = $self->format();
$ON_DESTROY_DUMP->($detail) if $detail;
$self->{Data} = undef;
}
sub DESTROY {
my $self = shift;
local $@;
DBI->trace_msg("profile data DESTROY\n",0)
if (($self->{Trace}||0) >= 2);
eval { $self->on_destroy };
if ($@) {
chomp $@;
my $class = ref($self) || $self;
DBI->trace_msg("$class on_destroy failed: $@", 0);
}
}
1;
DBI/ProfileDumper.pm 0000644 00000024222 15033552504 0010261 0 ustar 00 package DBI::ProfileDumper;
use strict;
=head1 NAME
DBI::ProfileDumper - profile DBI usage and output data to a file
=head1 SYNOPSIS
To profile an existing program using DBI::ProfileDumper, set the
DBI_PROFILE environment variable and run your program as usual. For
example, using bash:
DBI_PROFILE=2/DBI::ProfileDumper program.pl
Then analyze the generated file (F<dbi.prof>) with L<dbiprof|dbiprof>:
dbiprof
You can also activate DBI::ProfileDumper from within your code:
use DBI;
# profile with default path (2) and output file (dbi.prof)
$dbh->{Profile} = "!Statement/DBI::ProfileDumper";
# same thing, spelled out
$dbh->{Profile} = "!Statement/DBI::ProfileDumper/File:dbi.prof";
# another way to say it
use DBI::ProfileDumper;
$dbh->{Profile} = DBI::ProfileDumper->new(
Path => [ '!Statement' ],
File => 'dbi.prof' );
# using a custom path
$dbh->{Profile} = DBI::ProfileDumper->new(
Path => [ "foo", "bar" ],
File => 'dbi.prof',
);
=head1 DESCRIPTION
DBI::ProfileDumper is a subclass of L<DBI::Profile|DBI::Profile> which
dumps profile data to disk instead of printing a summary to your
screen. You can then use L<dbiprof|dbiprof> to analyze the data in
a number of interesting ways, or you can roll your own analysis using
L<DBI::ProfileData|DBI::ProfileData>.
B<NOTE:> For Apache/mod_perl applications, use
L<DBI::ProfileDumper::Apache|DBI::ProfileDumper::Apache>.
=head1 USAGE
One way to use this module is just to enable it in your C<$dbh>:
$dbh->{Profile} = "1/DBI::ProfileDumper";
This will write out profile data by statement into a file called
F<dbi.prof>. If you want to modify either of these properties, you
can construct the DBI::ProfileDumper object yourself:
use DBI::ProfileDumper;
$dbh->{Profile} = DBI::ProfileDumper->new(
Path => [ '!Statement' ],
File => 'dbi.prof'
);
The C<Path> option takes the same values as in
L<DBI::Profile>. The C<File> option gives the name of the
file where results will be collected. If it already exists it will be
overwritten.
You can also activate this module by setting the DBI_PROFILE
environment variable:
$ENV{DBI_PROFILE} = "!Statement/DBI::ProfileDumper";
This will cause all DBI handles to share the same profiling object.
=head1 METHODS
The following methods are available to be called using the profile
object. You can get access to the profile object from the Profile key
in any DBI handle:
my $profile = $dbh->{Profile};
=head2 flush_to_disk
$profile->flush_to_disk()
Flushes all collected profile data to disk and empties the Data hash. Returns
the filename written to. If no profile data has been collected then the file is
not written and flush_to_disk() returns undef.
The file is locked while it's being written. A process 'consuming' the files
while they're being written to, should rename the file first, then lock it,
then read it, then close and delete it. The C<DeleteFiles> option to
L<DBI::ProfileData> does the right thing.
This method may be called multiple times during a program run.
=head2 empty
$profile->empty()
Clears the Data hash without writing to disk.
=head2 filename
$filename = $profile->filename();
Get or set the filename.
The filename can be specified as a CODE reference, in which case the referenced
code should return the filename to be used. The code will be called with the
profile object as its first argument.
=head1 DATA FORMAT
The data format written by DBI::ProfileDumper starts with a header
containing the version number of the module used to generate it. Then
a block of variable declarations describes the profile. After two
newlines, the profile data forms the body of the file. For example:
DBI::ProfileDumper 2.003762
Path = [ '!Statement', '!MethodName' ]
Program = t/42profile_data.t
+ 1 SELECT name FROM users WHERE id = ?
+ 2 prepare
= 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576
+ 2 execute
1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576
+ 2 fetchrow_hashref
= 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576
+ 1 UPDATE users SET name = ? WHERE id = ?
+ 2 prepare
= 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576
+ 2 execute
= 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576
The lines beginning with C<+> signs signify keys. The number after
the C<+> sign shows the nesting level of the key. Lines beginning
with C<=> are the actual profile data, in the same order as
in DBI::Profile.
Note that the same path may be present multiple times in the data file
since C<format()> may be called more than once. When read by
DBI::ProfileData the data points will be merged to produce a single
data set for each distinct path.
The key strings are transformed in three ways. First, all backslashes
are doubled. Then all newlines and carriage-returns are transformed
into C<\n> and C<\r> respectively. Finally, any NULL bytes (C<\0>)
are entirely removed. When DBI::ProfileData reads the file the first
two transformations will be reversed, but NULL bytes will not be
restored.
=head1 AUTHOR
Sam Tregar <sam@tregar.com>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2002 Sam Tregar
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl 5 itself.
=cut
# inherit from DBI::Profile
use DBI::Profile;
our @ISA = ("DBI::Profile");
our $VERSION = "2.015325";
use Carp qw(croak);
use Fcntl qw(:flock);
use Symbol;
my $HAS_FLOCK = (defined $ENV{DBI_PROFILE_FLOCK})
? $ENV{DBI_PROFILE_FLOCK}
: do { local $@; eval { flock STDOUT, 0; 1 } };
my $program_header;
# validate params and setup default
sub new {
my $pkg = shift;
my $self = $pkg->SUPER::new(
LockFile => $HAS_FLOCK,
@_,
);
# provide a default filename
$self->filename("dbi.prof") unless $self->filename;
DBI->trace_msg("$self: @{[ %$self ]}\n",0)
if $self->{Trace} && $self->{Trace} >= 2;
return $self;
}
# get/set filename to use
sub filename {
my $self = shift;
$self->{File} = shift if @_;
my $filename = $self->{File};
$filename = $filename->($self) if ref($filename) eq 'CODE';
return $filename;
}
# flush available data to disk
sub flush_to_disk {
my $self = shift;
my $class = ref $self;
my $filename = $self->filename;
my $data = $self->{Data};
if (1) { # make an option
if (not $data or ref $data eq 'HASH' && !%$data) {
DBI->trace_msg("flush_to_disk skipped for empty profile\n",0) if $self->{Trace};
return undef;
}
}
my $fh = gensym;
if (($self->{_wrote_header}||'') eq $filename) {
# append more data to the file
# XXX assumes that Path hasn't changed
open($fh, ">>", $filename)
or croak("Unable to open '$filename' for $class output: $!");
} else {
# create new file (or overwrite existing)
if (-f $filename) {
my $bak = $filename.'.prev';
unlink($bak);
rename($filename, $bak)
or warn "Error renaming $filename to $bak: $!\n";
}
open($fh, ">", $filename)
or croak("Unable to open '$filename' for $class output: $!");
}
# lock the file (before checking size and writing the header)
flock($fh, LOCK_EX) if $self->{LockFile};
# write header if file is empty - typically because we just opened it
# in '>' mode, or perhaps we used '>>' but the file had been truncated externally.
if (-s $fh == 0) {
DBI->trace_msg("flush_to_disk wrote header to $filename\n",0) if $self->{Trace};
$self->write_header($fh);
$self->{_wrote_header} = $filename;
}
my $lines = $self->write_data($fh, $self->{Data}, 1);
DBI->trace_msg("flush_to_disk wrote $lines lines to $filename\n",0) if $self->{Trace};
close($fh) # unlocks the file
or croak("Error closing '$filename': $!");
$self->empty();
return $filename;
}
# write header to a filehandle
sub write_header {
my ($self, $fh) = @_;
# isolate us against globals which effect print
local($\, $,);
# $self->VERSION can return undef during global destruction
my $version = $self->VERSION || $VERSION;
# module name and version number
print $fh ref($self)." $version\n";
# print out Path (may contain CODE refs etc)
my @path_words = map { escape_key($_) } @{ $self->{Path} || [] };
print $fh "Path = [ ", join(', ', @path_words), " ]\n";
# print out $0 and @ARGV
if (!$program_header) {
# XXX should really quote as well as escape
$program_header = "Program = "
. join(" ", map { escape_key($_) } $0, @ARGV)
. "\n";
}
print $fh $program_header;
# all done
print $fh "\n";
}
# write data in the proscribed format
sub write_data {
my ($self, $fh, $data, $level) = @_;
# XXX it's valid for $data to be an ARRAY ref, i.e., Path is empty.
# produce an empty profile for invalid $data
return 0 unless $data and UNIVERSAL::isa($data,'HASH');
# isolate us against globals which affect print
local ($\, $,);
my $lines = 0;
while (my ($key, $value) = each(%$data)) {
# output a key
print $fh "+ $level ". escape_key($key). "\n";
if (UNIVERSAL::isa($value,'ARRAY')) {
# output a data set for a leaf node
print $fh "= ".join(' ', @$value)."\n";
$lines += 1;
} else {
# recurse through keys - this could be rewritten to use a
# stack for some small performance gain
$lines += $self->write_data($fh, $value, $level + 1);
}
}
return $lines;
}
# escape a key for output
sub escape_key {
my $key = shift;
$key =~ s!\\!\\\\!g;
$key =~ s!\n!\\n!g;
$key =~ s!\r!\\r!g;
$key =~ s!\0!!g;
return $key;
}
# flush data to disk when profile object goes out of scope
sub on_destroy {
shift->flush_to_disk();
}
1;
DBI/Const/GetInfoType.pm 0000644 00000002253 15033552504 0010767 0 ustar 00 # $Id: GetInfoType.pm 8696 2007-01-24 23:12:38Z Tim $
#
# Copyright (c) 2002 Tim Bunce Ireland
#
# Constant data describing info type codes for the DBI getinfo function.
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
package DBI::Const::GetInfoType;
use strict;
use Exporter ();
use vars qw(@ISA @EXPORT @EXPORT_OK %GetInfoType);
@ISA = qw(Exporter);
@EXPORT = qw(%GetInfoType);
my
$VERSION = "2.008697";
=head1 NAME
DBI::Const::GetInfoType - Data describing GetInfo type codes
=head1 SYNOPSIS
use DBI::Const::GetInfoType;
=head1 DESCRIPTION
Imports a %GetInfoType hash which maps names for GetInfo Type Codes
into their corresponding numeric values. For example:
$database_version = $dbh->get_info( $GetInfoType{SQL_DBMS_VER} );
The interface to this module is new and nothing beyond what is
written here is guaranteed.
=cut
use DBI::Const::GetInfo::ANSI (); # liable to change
use DBI::Const::GetInfo::ODBC (); # liable to change
%GetInfoType =
(
%DBI::Const::GetInfo::ANSI::InfoTypes # liable to change
, %DBI::Const::GetInfo::ODBC::InfoTypes # liable to change
);
1;
DBI/Const/GetInfo/ODBC.pm 0000644 00000201111 15033552504 0010626 0 ustar 00 # $Id: ODBC.pm 11373 2008-06-02 19:01:33Z Tim $
#
# Copyright (c) 2002 Tim Bunce Ireland
#
# Constant data describing Microsoft ODBC info types and return values
# for the SQLGetInfo() method of ODBC.
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
package DBI::Const::GetInfo::ODBC;
our (%InfoTypes,%ReturnTypes,%ReturnValues,);
=head1 NAME
DBI::Const::GetInfo::ODBC - ODBC Constants for GetInfo
=head1 SYNOPSIS
The API for this module is private and subject to change.
=head1 DESCRIPTION
Information requested by GetInfo().
The API for this module is private and subject to change.
=head1 REFERENCES
MDAC SDK 2.6
ODBC version number (0x0351)
sql.h
sqlext.h
=cut
my
$VERSION = "2.011374";
%InfoTypes =
(
SQL_ACCESSIBLE_PROCEDURES => 20
, SQL_ACCESSIBLE_TABLES => 19
, SQL_ACTIVE_CONNECTIONS => 0
, SQL_ACTIVE_ENVIRONMENTS => 116
, SQL_ACTIVE_STATEMENTS => 1
, SQL_AGGREGATE_FUNCTIONS => 169
, SQL_ALTER_DOMAIN => 117
, SQL_ALTER_TABLE => 86
, SQL_ASYNC_MODE => 10021
, SQL_BATCH_ROW_COUNT => 120
, SQL_BATCH_SUPPORT => 121
, SQL_BOOKMARK_PERSISTENCE => 82
, SQL_CATALOG_LOCATION => 114 # SQL_QUALIFIER_LOCATION
, SQL_CATALOG_NAME => 10003
, SQL_CATALOG_NAME_SEPARATOR => 41 # SQL_QUALIFIER_NAME_SEPARATOR
, SQL_CATALOG_TERM => 42 # SQL_QUALIFIER_TERM
, SQL_CATALOG_USAGE => 92 # SQL_QUALIFIER_USAGE
, SQL_COLLATION_SEQ => 10004
, SQL_COLUMN_ALIAS => 87
, SQL_CONCAT_NULL_BEHAVIOR => 22
, SQL_CONVERT_BIGINT => 53
, SQL_CONVERT_BINARY => 54
, SQL_CONVERT_BIT => 55
, SQL_CONVERT_CHAR => 56
, SQL_CONVERT_DATE => 57
, SQL_CONVERT_DECIMAL => 58
, SQL_CONVERT_DOUBLE => 59
, SQL_CONVERT_FLOAT => 60
, SQL_CONVERT_FUNCTIONS => 48
, SQL_CONVERT_GUID => 173
, SQL_CONVERT_INTEGER => 61
, SQL_CONVERT_INTERVAL_DAY_TIME => 123
, SQL_CONVERT_INTERVAL_YEAR_MONTH => 124
, SQL_CONVERT_LONGVARBINARY => 71
, SQL_CONVERT_LONGVARCHAR => 62
, SQL_CONVERT_NUMERIC => 63
, SQL_CONVERT_REAL => 64
, SQL_CONVERT_SMALLINT => 65
, SQL_CONVERT_TIME => 66
, SQL_CONVERT_TIMESTAMP => 67
, SQL_CONVERT_TINYINT => 68
, SQL_CONVERT_VARBINARY => 69
, SQL_CONVERT_VARCHAR => 70
, SQL_CONVERT_WCHAR => 122
, SQL_CONVERT_WLONGVARCHAR => 125
, SQL_CONVERT_WVARCHAR => 126
, SQL_CORRELATION_NAME => 74
, SQL_CREATE_ASSERTION => 127
, SQL_CREATE_CHARACTER_SET => 128
, SQL_CREATE_COLLATION => 129
, SQL_CREATE_DOMAIN => 130
, SQL_CREATE_SCHEMA => 131
, SQL_CREATE_TABLE => 132
, SQL_CREATE_TRANSLATION => 133
, SQL_CREATE_VIEW => 134
, SQL_CURSOR_COMMIT_BEHAVIOR => 23
, SQL_CURSOR_ROLLBACK_BEHAVIOR => 24
, SQL_CURSOR_SENSITIVITY => 10001
, SQL_DATA_SOURCE_NAME => 2
, SQL_DATA_SOURCE_READ_ONLY => 25
, SQL_DATABASE_NAME => 16
, SQL_DATETIME_LITERALS => 119
, SQL_DBMS_NAME => 17
, SQL_DBMS_VER => 18
, SQL_DDL_INDEX => 170
, SQL_DEFAULT_TXN_ISOLATION => 26
, SQL_DESCRIBE_PARAMETER => 10002
, SQL_DM_VER => 171
, SQL_DRIVER_HDBC => 3
, SQL_DRIVER_HDESC => 135
, SQL_DRIVER_HENV => 4
, SQL_DRIVER_HLIB => 76
, SQL_DRIVER_HSTMT => 5
, SQL_DRIVER_NAME => 6
, SQL_DRIVER_ODBC_VER => 77
, SQL_DRIVER_VER => 7
, SQL_DROP_ASSERTION => 136
, SQL_DROP_CHARACTER_SET => 137
, SQL_DROP_COLLATION => 138
, SQL_DROP_DOMAIN => 139
, SQL_DROP_SCHEMA => 140
, SQL_DROP_TABLE => 141
, SQL_DROP_TRANSLATION => 142
, SQL_DROP_VIEW => 143
, SQL_DYNAMIC_CURSOR_ATTRIBUTES1 => 144
, SQL_DYNAMIC_CURSOR_ATTRIBUTES2 => 145
, SQL_EXPRESSIONS_IN_ORDERBY => 27
, SQL_FETCH_DIRECTION => 8
, SQL_FILE_USAGE => 84
, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 => 146
, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 => 147
, SQL_GETDATA_EXTENSIONS => 81
, SQL_GROUP_BY => 88
, SQL_IDENTIFIER_CASE => 28
, SQL_IDENTIFIER_QUOTE_CHAR => 29
, SQL_INDEX_KEYWORDS => 148
# SQL_INFO_DRIVER_START => 1000
# SQL_INFO_FIRST => 0
# SQL_INFO_LAST => 114 # SQL_QUALIFIER_LOCATION
, SQL_INFO_SCHEMA_VIEWS => 149
, SQL_INSERT_STATEMENT => 172
, SQL_INTEGRITY => 73
, SQL_KEYSET_CURSOR_ATTRIBUTES1 => 150
, SQL_KEYSET_CURSOR_ATTRIBUTES2 => 151
, SQL_KEYWORDS => 89
, SQL_LIKE_ESCAPE_CLAUSE => 113
, SQL_LOCK_TYPES => 78
, SQL_MAXIMUM_CATALOG_NAME_LENGTH => 34 # SQL_MAX_CATALOG_NAME_LEN
, SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 97 # SQL_MAX_COLUMNS_IN_GROUP_BY
, SQL_MAXIMUM_COLUMNS_IN_INDEX => 98 # SQL_MAX_COLUMNS_IN_INDEX
, SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 99 # SQL_MAX_COLUMNS_IN_ORDER_BY
, SQL_MAXIMUM_COLUMNS_IN_SELECT => 100 # SQL_MAX_COLUMNS_IN_SELECT
, SQL_MAXIMUM_COLUMN_NAME_LENGTH => 30 # SQL_MAX_COLUMN_NAME_LEN
, SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 1 # SQL_MAX_CONCURRENT_ACTIVITIES
, SQL_MAXIMUM_CURSOR_NAME_LENGTH => 31 # SQL_MAX_CURSOR_NAME_LEN
, SQL_MAXIMUM_DRIVER_CONNECTIONS => 0 # SQL_MAX_DRIVER_CONNECTIONS
, SQL_MAXIMUM_IDENTIFIER_LENGTH => 10005 # SQL_MAX_IDENTIFIER_LEN
, SQL_MAXIMUM_INDEX_SIZE => 102 # SQL_MAX_INDEX_SIZE
, SQL_MAXIMUM_ROW_SIZE => 104 # SQL_MAX_ROW_SIZE
, SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 32 # SQL_MAX_SCHEMA_NAME_LEN
, SQL_MAXIMUM_STATEMENT_LENGTH => 105 # SQL_MAX_STATEMENT_LEN
, SQL_MAXIMUM_TABLES_IN_SELECT => 106 # SQL_MAX_TABLES_IN_SELECT
, SQL_MAXIMUM_USER_NAME_LENGTH => 107 # SQL_MAX_USER_NAME_LEN
, SQL_MAX_ASYNC_CONCURRENT_STATEMENTS => 10022
, SQL_MAX_BINARY_LITERAL_LEN => 112
, SQL_MAX_CATALOG_NAME_LEN => 34
, SQL_MAX_CHAR_LITERAL_LEN => 108
, SQL_MAX_COLUMNS_IN_GROUP_BY => 97
, SQL_MAX_COLUMNS_IN_INDEX => 98
, SQL_MAX_COLUMNS_IN_ORDER_BY => 99
, SQL_MAX_COLUMNS_IN_SELECT => 100
, SQL_MAX_COLUMNS_IN_TABLE => 101
, SQL_MAX_COLUMN_NAME_LEN => 30
, SQL_MAX_CONCURRENT_ACTIVITIES => 1
, SQL_MAX_CURSOR_NAME_LEN => 31
, SQL_MAX_DRIVER_CONNECTIONS => 0
, SQL_MAX_IDENTIFIER_LEN => 10005
, SQL_MAX_INDEX_SIZE => 102
, SQL_MAX_OWNER_NAME_LEN => 32
, SQL_MAX_PROCEDURE_NAME_LEN => 33
, SQL_MAX_QUALIFIER_NAME_LEN => 34
, SQL_MAX_ROW_SIZE => 104
, SQL_MAX_ROW_SIZE_INCLUDES_LONG => 103
, SQL_MAX_SCHEMA_NAME_LEN => 32
, SQL_MAX_STATEMENT_LEN => 105
, SQL_MAX_TABLES_IN_SELECT => 106
, SQL_MAX_TABLE_NAME_LEN => 35
, SQL_MAX_USER_NAME_LEN => 107
, SQL_MULTIPLE_ACTIVE_TXN => 37
, SQL_MULT_RESULT_SETS => 36
, SQL_NEED_LONG_DATA_LEN => 111
, SQL_NON_NULLABLE_COLUMNS => 75
, SQL_NULL_COLLATION => 85
, SQL_NUMERIC_FUNCTIONS => 49
, SQL_ODBC_API_CONFORMANCE => 9
, SQL_ODBC_INTERFACE_CONFORMANCE => 152
, SQL_ODBC_SAG_CLI_CONFORMANCE => 12
, SQL_ODBC_SQL_CONFORMANCE => 15
, SQL_ODBC_SQL_OPT_IEF => 73
, SQL_ODBC_VER => 10
, SQL_OJ_CAPABILITIES => 115
, SQL_ORDER_BY_COLUMNS_IN_SELECT => 90
, SQL_OUTER_JOINS => 38
, SQL_OUTER_JOIN_CAPABILITIES => 115 # SQL_OJ_CAPABILITIES
, SQL_OWNER_TERM => 39
, SQL_OWNER_USAGE => 91
, SQL_PARAM_ARRAY_ROW_COUNTS => 153
, SQL_PARAM_ARRAY_SELECTS => 154
, SQL_POSITIONED_STATEMENTS => 80
, SQL_POS_OPERATIONS => 79
, SQL_PROCEDURES => 21
, SQL_PROCEDURE_TERM => 40
, SQL_QUALIFIER_LOCATION => 114
, SQL_QUALIFIER_NAME_SEPARATOR => 41
, SQL_QUALIFIER_TERM => 42
, SQL_QUALIFIER_USAGE => 92
, SQL_QUOTED_IDENTIFIER_CASE => 93
, SQL_ROW_UPDATES => 11
, SQL_SCHEMA_TERM => 39 # SQL_OWNER_TERM
, SQL_SCHEMA_USAGE => 91 # SQL_OWNER_USAGE
, SQL_SCROLL_CONCURRENCY => 43
, SQL_SCROLL_OPTIONS => 44
, SQL_SEARCH_PATTERN_ESCAPE => 14
, SQL_SERVER_NAME => 13
, SQL_SPECIAL_CHARACTERS => 94
, SQL_SQL92_DATETIME_FUNCTIONS => 155
, SQL_SQL92_FOREIGN_KEY_DELETE_RULE => 156
, SQL_SQL92_FOREIGN_KEY_UPDATE_RULE => 157
, SQL_SQL92_GRANT => 158
, SQL_SQL92_NUMERIC_VALUE_FUNCTIONS => 159
, SQL_SQL92_PREDICATES => 160
, SQL_SQL92_RELATIONAL_JOIN_OPERATORS => 161
, SQL_SQL92_REVOKE => 162
, SQL_SQL92_ROW_VALUE_CONSTRUCTOR => 163
, SQL_SQL92_STRING_FUNCTIONS => 164
, SQL_SQL92_VALUE_EXPRESSIONS => 165
, SQL_SQL_CONFORMANCE => 118
, SQL_STANDARD_CLI_CONFORMANCE => 166
, SQL_STATIC_CURSOR_ATTRIBUTES1 => 167
, SQL_STATIC_CURSOR_ATTRIBUTES2 => 168
, SQL_STATIC_SENSITIVITY => 83
, SQL_STRING_FUNCTIONS => 50
, SQL_SUBQUERIES => 95
, SQL_SYSTEM_FUNCTIONS => 51
, SQL_TABLE_TERM => 45
, SQL_TIMEDATE_ADD_INTERVALS => 109
, SQL_TIMEDATE_DIFF_INTERVALS => 110
, SQL_TIMEDATE_FUNCTIONS => 52
, SQL_TRANSACTION_CAPABLE => 46 # SQL_TXN_CAPABLE
, SQL_TRANSACTION_ISOLATION_OPTION => 72 # SQL_TXN_ISOLATION_OPTION
, SQL_TXN_CAPABLE => 46
, SQL_TXN_ISOLATION_OPTION => 72
, SQL_UNION => 96
, SQL_UNION_STATEMENT => 96 # SQL_UNION
, SQL_USER_NAME => 47
, SQL_XOPEN_CLI_YEAR => 10000
);
=head2 %ReturnTypes
See: mk:@MSITStore:X:\dm\cli\mdac\sdk26\Docs\odbc.chm::/htm/odbcsqlgetinfo.htm
=> : alias
=> !!! : edited
=cut
%ReturnTypes =
(
SQL_ACCESSIBLE_PROCEDURES => 'SQLCHAR' # 20
, SQL_ACCESSIBLE_TABLES => 'SQLCHAR' # 19
, SQL_ACTIVE_CONNECTIONS => 'SQLUSMALLINT' # 0 =>
, SQL_ACTIVE_ENVIRONMENTS => 'SQLUSMALLINT' # 116
, SQL_ACTIVE_STATEMENTS => 'SQLUSMALLINT' # 1 =>
, SQL_AGGREGATE_FUNCTIONS => 'SQLUINTEGER bitmask' # 169
, SQL_ALTER_DOMAIN => 'SQLUINTEGER bitmask' # 117
, SQL_ALTER_TABLE => 'SQLUINTEGER bitmask' # 86
, SQL_ASYNC_MODE => 'SQLUINTEGER' # 10021
, SQL_BATCH_ROW_COUNT => 'SQLUINTEGER bitmask' # 120
, SQL_BATCH_SUPPORT => 'SQLUINTEGER bitmask' # 121
, SQL_BOOKMARK_PERSISTENCE => 'SQLUINTEGER bitmask' # 82
, SQL_CATALOG_LOCATION => 'SQLUSMALLINT' # 114
, SQL_CATALOG_NAME => 'SQLCHAR' # 10003
, SQL_CATALOG_NAME_SEPARATOR => 'SQLCHAR' # 41
, SQL_CATALOG_TERM => 'SQLCHAR' # 42
, SQL_CATALOG_USAGE => 'SQLUINTEGER bitmask' # 92
, SQL_COLLATION_SEQ => 'SQLCHAR' # 10004
, SQL_COLUMN_ALIAS => 'SQLCHAR' # 87
, SQL_CONCAT_NULL_BEHAVIOR => 'SQLUSMALLINT' # 22
, SQL_CONVERT_BIGINT => 'SQLUINTEGER bitmask' # 53
, SQL_CONVERT_BINARY => 'SQLUINTEGER bitmask' # 54
, SQL_CONVERT_BIT => 'SQLUINTEGER bitmask' # 55
, SQL_CONVERT_CHAR => 'SQLUINTEGER bitmask' # 56
, SQL_CONVERT_DATE => 'SQLUINTEGER bitmask' # 57
, SQL_CONVERT_DECIMAL => 'SQLUINTEGER bitmask' # 58
, SQL_CONVERT_DOUBLE => 'SQLUINTEGER bitmask' # 59
, SQL_CONVERT_FLOAT => 'SQLUINTEGER bitmask' # 60
, SQL_CONVERT_FUNCTIONS => 'SQLUINTEGER bitmask' # 48
, SQL_CONVERT_GUID => 'SQLUINTEGER bitmask' # 173
, SQL_CONVERT_INTEGER => 'SQLUINTEGER bitmask' # 61
, SQL_CONVERT_INTERVAL_DAY_TIME => 'SQLUINTEGER bitmask' # 123
, SQL_CONVERT_INTERVAL_YEAR_MONTH => 'SQLUINTEGER bitmask' # 124
, SQL_CONVERT_LONGVARBINARY => 'SQLUINTEGER bitmask' # 71
, SQL_CONVERT_LONGVARCHAR => 'SQLUINTEGER bitmask' # 62
, SQL_CONVERT_NUMERIC => 'SQLUINTEGER bitmask' # 63
, SQL_CONVERT_REAL => 'SQLUINTEGER bitmask' # 64
, SQL_CONVERT_SMALLINT => 'SQLUINTEGER bitmask' # 65
, SQL_CONVERT_TIME => 'SQLUINTEGER bitmask' # 66
, SQL_CONVERT_TIMESTAMP => 'SQLUINTEGER bitmask' # 67
, SQL_CONVERT_TINYINT => 'SQLUINTEGER bitmask' # 68
, SQL_CONVERT_VARBINARY => 'SQLUINTEGER bitmask' # 69
, SQL_CONVERT_VARCHAR => 'SQLUINTEGER bitmask' # 70
, SQL_CONVERT_WCHAR => 'SQLUINTEGER bitmask' # 122 => !!!
, SQL_CONVERT_WLONGVARCHAR => 'SQLUINTEGER bitmask' # 125 => !!!
, SQL_CONVERT_WVARCHAR => 'SQLUINTEGER bitmask' # 126 => !!!
, SQL_CORRELATION_NAME => 'SQLUSMALLINT' # 74
, SQL_CREATE_ASSERTION => 'SQLUINTEGER bitmask' # 127
, SQL_CREATE_CHARACTER_SET => 'SQLUINTEGER bitmask' # 128
, SQL_CREATE_COLLATION => 'SQLUINTEGER bitmask' # 129
, SQL_CREATE_DOMAIN => 'SQLUINTEGER bitmask' # 130
, SQL_CREATE_SCHEMA => 'SQLUINTEGER bitmask' # 131
, SQL_CREATE_TABLE => 'SQLUINTEGER bitmask' # 132
, SQL_CREATE_TRANSLATION => 'SQLUINTEGER bitmask' # 133
, SQL_CREATE_VIEW => 'SQLUINTEGER bitmask' # 134
, SQL_CURSOR_COMMIT_BEHAVIOR => 'SQLUSMALLINT' # 23
, SQL_CURSOR_ROLLBACK_BEHAVIOR => 'SQLUSMALLINT' # 24
, SQL_CURSOR_SENSITIVITY => 'SQLUINTEGER' # 10001
, SQL_DATA_SOURCE_NAME => 'SQLCHAR' # 2
, SQL_DATA_SOURCE_READ_ONLY => 'SQLCHAR' # 25
, SQL_DATABASE_NAME => 'SQLCHAR' # 16
, SQL_DATETIME_LITERALS => 'SQLUINTEGER bitmask' # 119
, SQL_DBMS_NAME => 'SQLCHAR' # 17
, SQL_DBMS_VER => 'SQLCHAR' # 18
, SQL_DDL_INDEX => 'SQLUINTEGER bitmask' # 170
, SQL_DEFAULT_TXN_ISOLATION => 'SQLUINTEGER' # 26
, SQL_DESCRIBE_PARAMETER => 'SQLCHAR' # 10002
, SQL_DM_VER => 'SQLCHAR' # 171
, SQL_DRIVER_HDBC => 'SQLUINTEGER' # 3
, SQL_DRIVER_HDESC => 'SQLUINTEGER' # 135
, SQL_DRIVER_HENV => 'SQLUINTEGER' # 4
, SQL_DRIVER_HLIB => 'SQLUINTEGER' # 76
, SQL_DRIVER_HSTMT => 'SQLUINTEGER' # 5
, SQL_DRIVER_NAME => 'SQLCHAR' # 6
, SQL_DRIVER_ODBC_VER => 'SQLCHAR' # 77
, SQL_DRIVER_VER => 'SQLCHAR' # 7
, SQL_DROP_ASSERTION => 'SQLUINTEGER bitmask' # 136
, SQL_DROP_CHARACTER_SET => 'SQLUINTEGER bitmask' # 137
, SQL_DROP_COLLATION => 'SQLUINTEGER bitmask' # 138
, SQL_DROP_DOMAIN => 'SQLUINTEGER bitmask' # 139
, SQL_DROP_SCHEMA => 'SQLUINTEGER bitmask' # 140
, SQL_DROP_TABLE => 'SQLUINTEGER bitmask' # 141
, SQL_DROP_TRANSLATION => 'SQLUINTEGER bitmask' # 142
, SQL_DROP_VIEW => 'SQLUINTEGER bitmask' # 143
, SQL_DYNAMIC_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 144
, SQL_DYNAMIC_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 145
, SQL_EXPRESSIONS_IN_ORDERBY => 'SQLCHAR' # 27
, SQL_FETCH_DIRECTION => 'SQLUINTEGER bitmask' # 8 => !!!
, SQL_FILE_USAGE => 'SQLUSMALLINT' # 84
, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 146
, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 147
, SQL_GETDATA_EXTENSIONS => 'SQLUINTEGER bitmask' # 81
, SQL_GROUP_BY => 'SQLUSMALLINT' # 88
, SQL_IDENTIFIER_CASE => 'SQLUSMALLINT' # 28
, SQL_IDENTIFIER_QUOTE_CHAR => 'SQLCHAR' # 29
, SQL_INDEX_KEYWORDS => 'SQLUINTEGER bitmask' # 148
# SQL_INFO_DRIVER_START => '' # 1000 =>
# SQL_INFO_FIRST => 'SQLUSMALLINT' # 0 =>
# SQL_INFO_LAST => 'SQLUSMALLINT' # 114 =>
, SQL_INFO_SCHEMA_VIEWS => 'SQLUINTEGER bitmask' # 149
, SQL_INSERT_STATEMENT => 'SQLUINTEGER bitmask' # 172
, SQL_INTEGRITY => 'SQLCHAR' # 73
, SQL_KEYSET_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 150
, SQL_KEYSET_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 151
, SQL_KEYWORDS => 'SQLCHAR' # 89
, SQL_LIKE_ESCAPE_CLAUSE => 'SQLCHAR' # 113
, SQL_LOCK_TYPES => 'SQLUINTEGER bitmask' # 78 => !!!
, SQL_MAXIMUM_CATALOG_NAME_LENGTH => 'SQLUSMALLINT' # 34 =>
, SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 'SQLUSMALLINT' # 97 =>
, SQL_MAXIMUM_COLUMNS_IN_INDEX => 'SQLUSMALLINT' # 98 =>
, SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 'SQLUSMALLINT' # 99 =>
, SQL_MAXIMUM_COLUMNS_IN_SELECT => 'SQLUSMALLINT' # 100 =>
, SQL_MAXIMUM_COLUMN_NAME_LENGTH => 'SQLUSMALLINT' # 30 =>
, SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 'SQLUSMALLINT' # 1 =>
, SQL_MAXIMUM_CURSOR_NAME_LENGTH => 'SQLUSMALLINT' # 31 =>
, SQL_MAXIMUM_DRIVER_CONNECTIONS => 'SQLUSMALLINT' # 0 =>
, SQL_MAXIMUM_IDENTIFIER_LENGTH => 'SQLUSMALLINT' # 10005 =>
, SQL_MAXIMUM_INDEX_SIZE => 'SQLUINTEGER' # 102 =>
, SQL_MAXIMUM_ROW_SIZE => 'SQLUINTEGER' # 104 =>
, SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 'SQLUSMALLINT' # 32 =>
, SQL_MAXIMUM_STATEMENT_LENGTH => 'SQLUINTEGER' # 105 =>
, SQL_MAXIMUM_TABLES_IN_SELECT => 'SQLUSMALLINT' # 106 =>
, SQL_MAXIMUM_USER_NAME_LENGTH => 'SQLUSMALLINT' # 107 =>
, SQL_MAX_ASYNC_CONCURRENT_STATEMENTS => 'SQLUINTEGER' # 10022
, SQL_MAX_BINARY_LITERAL_LEN => 'SQLUINTEGER' # 112
, SQL_MAX_CATALOG_NAME_LEN => 'SQLUSMALLINT' # 34
, SQL_MAX_CHAR_LITERAL_LEN => 'SQLUINTEGER' # 108
, SQL_MAX_COLUMNS_IN_GROUP_BY => 'SQLUSMALLINT' # 97
, SQL_MAX_COLUMNS_IN_INDEX => 'SQLUSMALLINT' # 98
, SQL_MAX_COLUMNS_IN_ORDER_BY => 'SQLUSMALLINT' # 99
, SQL_MAX_COLUMNS_IN_SELECT => 'SQLUSMALLINT' # 100
, SQL_MAX_COLUMNS_IN_TABLE => 'SQLUSMALLINT' # 101
, SQL_MAX_COLUMN_NAME_LEN => 'SQLUSMALLINT' # 30
, SQL_MAX_CONCURRENT_ACTIVITIES => 'SQLUSMALLINT' # 1
, SQL_MAX_CURSOR_NAME_LEN => 'SQLUSMALLINT' # 31
, SQL_MAX_DRIVER_CONNECTIONS => 'SQLUSMALLINT' # 0
, SQL_MAX_IDENTIFIER_LEN => 'SQLUSMALLINT' # 10005
, SQL_MAX_INDEX_SIZE => 'SQLUINTEGER' # 102
, SQL_MAX_OWNER_NAME_LEN => 'SQLUSMALLINT' # 32 =>
, SQL_MAX_PROCEDURE_NAME_LEN => 'SQLUSMALLINT' # 33
, SQL_MAX_QUALIFIER_NAME_LEN => 'SQLUSMALLINT' # 34 =>
, SQL_MAX_ROW_SIZE => 'SQLUINTEGER' # 104
, SQL_MAX_ROW_SIZE_INCLUDES_LONG => 'SQLCHAR' # 103
, SQL_MAX_SCHEMA_NAME_LEN => 'SQLUSMALLINT' # 32
, SQL_MAX_STATEMENT_LEN => 'SQLUINTEGER' # 105
, SQL_MAX_TABLES_IN_SELECT => 'SQLUSMALLINT' # 106
, SQL_MAX_TABLE_NAME_LEN => 'SQLUSMALLINT' # 35
, SQL_MAX_USER_NAME_LEN => 'SQLUSMALLINT' # 107
, SQL_MULTIPLE_ACTIVE_TXN => 'SQLCHAR' # 37
, SQL_MULT_RESULT_SETS => 'SQLCHAR' # 36
, SQL_NEED_LONG_DATA_LEN => 'SQLCHAR' # 111
, SQL_NON_NULLABLE_COLUMNS => 'SQLUSMALLINT' # 75
, SQL_NULL_COLLATION => 'SQLUSMALLINT' # 85
, SQL_NUMERIC_FUNCTIONS => 'SQLUINTEGER bitmask' # 49
, SQL_ODBC_API_CONFORMANCE => 'SQLUSMALLINT' # 9 => !!!
, SQL_ODBC_INTERFACE_CONFORMANCE => 'SQLUINTEGER' # 152
, SQL_ODBC_SAG_CLI_CONFORMANCE => 'SQLUSMALLINT' # 12 => !!!
, SQL_ODBC_SQL_CONFORMANCE => 'SQLUSMALLINT' # 15 => !!!
, SQL_ODBC_SQL_OPT_IEF => 'SQLCHAR' # 73 =>
, SQL_ODBC_VER => 'SQLCHAR' # 10
, SQL_OJ_CAPABILITIES => 'SQLUINTEGER bitmask' # 115
, SQL_ORDER_BY_COLUMNS_IN_SELECT => 'SQLCHAR' # 90
, SQL_OUTER_JOINS => 'SQLCHAR' # 38 => !!!
, SQL_OUTER_JOIN_CAPABILITIES => 'SQLUINTEGER bitmask' # 115 =>
, SQL_OWNER_TERM => 'SQLCHAR' # 39 =>
, SQL_OWNER_USAGE => 'SQLUINTEGER bitmask' # 91 =>
, SQL_PARAM_ARRAY_ROW_COUNTS => 'SQLUINTEGER' # 153
, SQL_PARAM_ARRAY_SELECTS => 'SQLUINTEGER' # 154
, SQL_POSITIONED_STATEMENTS => 'SQLUINTEGER bitmask' # 80 => !!!
, SQL_POS_OPERATIONS => 'SQLINTEGER bitmask' # 79
, SQL_PROCEDURES => 'SQLCHAR' # 21
, SQL_PROCEDURE_TERM => 'SQLCHAR' # 40
, SQL_QUALIFIER_LOCATION => 'SQLUSMALLINT' # 114 =>
, SQL_QUALIFIER_NAME_SEPARATOR => 'SQLCHAR' # 41 =>
, SQL_QUALIFIER_TERM => 'SQLCHAR' # 42 =>
, SQL_QUALIFIER_USAGE => 'SQLUINTEGER bitmask' # 92 =>
, SQL_QUOTED_IDENTIFIER_CASE => 'SQLUSMALLINT' # 93
, SQL_ROW_UPDATES => 'SQLCHAR' # 11
, SQL_SCHEMA_TERM => 'SQLCHAR' # 39
, SQL_SCHEMA_USAGE => 'SQLUINTEGER bitmask' # 91
, SQL_SCROLL_CONCURRENCY => 'SQLUINTEGER bitmask' # 43 => !!!
, SQL_SCROLL_OPTIONS => 'SQLUINTEGER bitmask' # 44
, SQL_SEARCH_PATTERN_ESCAPE => 'SQLCHAR' # 14
, SQL_SERVER_NAME => 'SQLCHAR' # 13
, SQL_SPECIAL_CHARACTERS => 'SQLCHAR' # 94
, SQL_SQL92_DATETIME_FUNCTIONS => 'SQLUINTEGER bitmask' # 155
, SQL_SQL92_FOREIGN_KEY_DELETE_RULE => 'SQLUINTEGER bitmask' # 156
, SQL_SQL92_FOREIGN_KEY_UPDATE_RULE => 'SQLUINTEGER bitmask' # 157
, SQL_SQL92_GRANT => 'SQLUINTEGER bitmask' # 158
, SQL_SQL92_NUMERIC_VALUE_FUNCTIONS => 'SQLUINTEGER bitmask' # 159
, SQL_SQL92_PREDICATES => 'SQLUINTEGER bitmask' # 160
, SQL_SQL92_RELATIONAL_JOIN_OPERATORS => 'SQLUINTEGER bitmask' # 161
, SQL_SQL92_REVOKE => 'SQLUINTEGER bitmask' # 162
, SQL_SQL92_ROW_VALUE_CONSTRUCTOR => 'SQLUINTEGER bitmask' # 163
, SQL_SQL92_STRING_FUNCTIONS => 'SQLUINTEGER bitmask' # 164
, SQL_SQL92_VALUE_EXPRESSIONS => 'SQLUINTEGER bitmask' # 165
, SQL_SQL_CONFORMANCE => 'SQLUINTEGER' # 118
, SQL_STANDARD_CLI_CONFORMANCE => 'SQLUINTEGER bitmask' # 166
, SQL_STATIC_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 167
, SQL_STATIC_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 168
, SQL_STATIC_SENSITIVITY => 'SQLUINTEGER bitmask' # 83 => !!!
, SQL_STRING_FUNCTIONS => 'SQLUINTEGER bitmask' # 50
, SQL_SUBQUERIES => 'SQLUINTEGER bitmask' # 95
, SQL_SYSTEM_FUNCTIONS => 'SQLUINTEGER bitmask' # 51
, SQL_TABLE_TERM => 'SQLCHAR' # 45
, SQL_TIMEDATE_ADD_INTERVALS => 'SQLUINTEGER bitmask' # 109
, SQL_TIMEDATE_DIFF_INTERVALS => 'SQLUINTEGER bitmask' # 110
, SQL_TIMEDATE_FUNCTIONS => 'SQLUINTEGER bitmask' # 52
, SQL_TRANSACTION_CAPABLE => 'SQLUSMALLINT' # 46 =>
, SQL_TRANSACTION_ISOLATION_OPTION => 'SQLUINTEGER bitmask' # 72 =>
, SQL_TXN_CAPABLE => 'SQLUSMALLINT' # 46
, SQL_TXN_ISOLATION_OPTION => 'SQLUINTEGER bitmask' # 72
, SQL_UNION => 'SQLUINTEGER bitmask' # 96
, SQL_UNION_STATEMENT => 'SQLUINTEGER bitmask' # 96 =>
, SQL_USER_NAME => 'SQLCHAR' # 47
, SQL_XOPEN_CLI_YEAR => 'SQLCHAR' # 10000
);
=head2 %ReturnValues
See: sql.h, sqlext.h
Edited:
SQL_TXN_ISOLATION_OPTION
=cut
$ReturnValues{SQL_AGGREGATE_FUNCTIONS} =
{
SQL_AF_AVG => 0x00000001
, SQL_AF_COUNT => 0x00000002
, SQL_AF_MAX => 0x00000004
, SQL_AF_MIN => 0x00000008
, SQL_AF_SUM => 0x00000010
, SQL_AF_DISTINCT => 0x00000020
, SQL_AF_ALL => 0x00000040
};
$ReturnValues{SQL_ALTER_DOMAIN} =
{
SQL_AD_CONSTRAINT_NAME_DEFINITION => 0x00000001
, SQL_AD_ADD_DOMAIN_CONSTRAINT => 0x00000002
, SQL_AD_DROP_DOMAIN_CONSTRAINT => 0x00000004
, SQL_AD_ADD_DOMAIN_DEFAULT => 0x00000008
, SQL_AD_DROP_DOMAIN_DEFAULT => 0x00000010
, SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED => 0x00000020
, SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000040
, SQL_AD_ADD_CONSTRAINT_DEFERRABLE => 0x00000080
, SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE => 0x00000100
};
$ReturnValues{SQL_ALTER_TABLE} =
{
SQL_AT_ADD_COLUMN => 0x00000001
, SQL_AT_DROP_COLUMN => 0x00000002
, SQL_AT_ADD_CONSTRAINT => 0x00000008
, SQL_AT_ADD_COLUMN_SINGLE => 0x00000020
, SQL_AT_ADD_COLUMN_DEFAULT => 0x00000040
, SQL_AT_ADD_COLUMN_COLLATION => 0x00000080
, SQL_AT_SET_COLUMN_DEFAULT => 0x00000100
, SQL_AT_DROP_COLUMN_DEFAULT => 0x00000200
, SQL_AT_DROP_COLUMN_CASCADE => 0x00000400
, SQL_AT_DROP_COLUMN_RESTRICT => 0x00000800
, SQL_AT_ADD_TABLE_CONSTRAINT => 0x00001000
, SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE => 0x00002000
, SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT => 0x00004000
, SQL_AT_CONSTRAINT_NAME_DEFINITION => 0x00008000
, SQL_AT_CONSTRAINT_INITIALLY_DEFERRED => 0x00010000
, SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00020000
, SQL_AT_CONSTRAINT_DEFERRABLE => 0x00040000
, SQL_AT_CONSTRAINT_NON_DEFERRABLE => 0x00080000
};
$ReturnValues{SQL_ASYNC_MODE} =
{
SQL_AM_NONE => 0
, SQL_AM_CONNECTION => 1
, SQL_AM_STATEMENT => 2
};
$ReturnValues{SQL_ATTR_MAX_ROWS} =
{
SQL_CA2_MAX_ROWS_SELECT => 0x00000080
, SQL_CA2_MAX_ROWS_INSERT => 0x00000100
, SQL_CA2_MAX_ROWS_DELETE => 0x00000200
, SQL_CA2_MAX_ROWS_UPDATE => 0x00000400
, SQL_CA2_MAX_ROWS_CATALOG => 0x00000800
# SQL_CA2_MAX_ROWS_AFFECTS_ALL =>
};
$ReturnValues{SQL_ATTR_SCROLL_CONCURRENCY} =
{
SQL_CA2_READ_ONLY_CONCURRENCY => 0x00000001
, SQL_CA2_LOCK_CONCURRENCY => 0x00000002
, SQL_CA2_OPT_ROWVER_CONCURRENCY => 0x00000004
, SQL_CA2_OPT_VALUES_CONCURRENCY => 0x00000008
, SQL_CA2_SENSITIVITY_ADDITIONS => 0x00000010
, SQL_CA2_SENSITIVITY_DELETIONS => 0x00000020
, SQL_CA2_SENSITIVITY_UPDATES => 0x00000040
};
$ReturnValues{SQL_BATCH_ROW_COUNT} =
{
SQL_BRC_PROCEDURES => 0x0000001
, SQL_BRC_EXPLICIT => 0x0000002
, SQL_BRC_ROLLED_UP => 0x0000004
};
$ReturnValues{SQL_BATCH_SUPPORT} =
{
SQL_BS_SELECT_EXPLICIT => 0x00000001
, SQL_BS_ROW_COUNT_EXPLICIT => 0x00000002
, SQL_BS_SELECT_PROC => 0x00000004
, SQL_BS_ROW_COUNT_PROC => 0x00000008
};
$ReturnValues{SQL_BOOKMARK_PERSISTENCE} =
{
SQL_BP_CLOSE => 0x00000001
, SQL_BP_DELETE => 0x00000002
, SQL_BP_DROP => 0x00000004
, SQL_BP_TRANSACTION => 0x00000008
, SQL_BP_UPDATE => 0x00000010
, SQL_BP_OTHER_HSTMT => 0x00000020
, SQL_BP_SCROLL => 0x00000040
};
$ReturnValues{SQL_CATALOG_LOCATION} =
{
SQL_CL_START => 0x0001 # SQL_QL_START
, SQL_CL_END => 0x0002 # SQL_QL_END
};
$ReturnValues{SQL_CATALOG_USAGE} =
{
SQL_CU_DML_STATEMENTS => 0x00000001 # SQL_QU_DML_STATEMENTS
, SQL_CU_PROCEDURE_INVOCATION => 0x00000002 # SQL_QU_PROCEDURE_INVOCATION
, SQL_CU_TABLE_DEFINITION => 0x00000004 # SQL_QU_TABLE_DEFINITION
, SQL_CU_INDEX_DEFINITION => 0x00000008 # SQL_QU_INDEX_DEFINITION
, SQL_CU_PRIVILEGE_DEFINITION => 0x00000010 # SQL_QU_PRIVILEGE_DEFINITION
};
$ReturnValues{SQL_CONCAT_NULL_BEHAVIOR} =
{
SQL_CB_NULL => 0x0000
, SQL_CB_NON_NULL => 0x0001
};
$ReturnValues{SQL_CONVERT_} =
{
SQL_CVT_CHAR => 0x00000001
, SQL_CVT_NUMERIC => 0x00000002
, SQL_CVT_DECIMAL => 0x00000004
, SQL_CVT_INTEGER => 0x00000008
, SQL_CVT_SMALLINT => 0x00000010
, SQL_CVT_FLOAT => 0x00000020
, SQL_CVT_REAL => 0x00000040
, SQL_CVT_DOUBLE => 0x00000080
, SQL_CVT_VARCHAR => 0x00000100
, SQL_CVT_LONGVARCHAR => 0x00000200
, SQL_CVT_BINARY => 0x00000400
, SQL_CVT_VARBINARY => 0x00000800
, SQL_CVT_BIT => 0x00001000
, SQL_CVT_TINYINT => 0x00002000
, SQL_CVT_BIGINT => 0x00004000
, SQL_CVT_DATE => 0x00008000
, SQL_CVT_TIME => 0x00010000
, SQL_CVT_TIMESTAMP => 0x00020000
, SQL_CVT_LONGVARBINARY => 0x00040000
, SQL_CVT_INTERVAL_YEAR_MONTH => 0x00080000
, SQL_CVT_INTERVAL_DAY_TIME => 0x00100000
, SQL_CVT_WCHAR => 0x00200000
, SQL_CVT_WLONGVARCHAR => 0x00400000
, SQL_CVT_WVARCHAR => 0x00800000
, SQL_CVT_GUID => 0x01000000
};
$ReturnValues{SQL_CONVERT_BIGINT } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_BINARY } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_BIT } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_CHAR } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_DATE } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_DECIMAL } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_DOUBLE } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_FLOAT } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_GUID } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_INTEGER } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_INTERVAL_DAY_TIME } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_INTERVAL_YEAR_MONTH} = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_LONGVARBINARY } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_LONGVARCHAR } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_NUMERIC } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_REAL } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_SMALLINT } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_TIME } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_TIMESTAMP } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_TINYINT } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_VARBINARY } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_VARCHAR } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_WCHAR } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_WLONGVARCHAR } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_WVARCHAR } = $ReturnValues{SQL_CONVERT_};
$ReturnValues{SQL_CONVERT_FUNCTIONS} =
{
SQL_FN_CVT_CONVERT => 0x00000001
, SQL_FN_CVT_CAST => 0x00000002
};
$ReturnValues{SQL_CORRELATION_NAME} =
{
SQL_CN_NONE => 0x0000
, SQL_CN_DIFFERENT => 0x0001
, SQL_CN_ANY => 0x0002
};
$ReturnValues{SQL_CREATE_ASSERTION} =
{
SQL_CA_CREATE_ASSERTION => 0x00000001
, SQL_CA_CONSTRAINT_INITIALLY_DEFERRED => 0x00000010
, SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000020
, SQL_CA_CONSTRAINT_DEFERRABLE => 0x00000040
, SQL_CA_CONSTRAINT_NON_DEFERRABLE => 0x00000080
};
$ReturnValues{SQL_CREATE_CHARACTER_SET} =
{
SQL_CCS_CREATE_CHARACTER_SET => 0x00000001
, SQL_CCS_COLLATE_CLAUSE => 0x00000002
, SQL_CCS_LIMITED_COLLATION => 0x00000004
};
$ReturnValues{SQL_CREATE_COLLATION} =
{
SQL_CCOL_CREATE_COLLATION => 0x00000001
};
$ReturnValues{SQL_CREATE_DOMAIN} =
{
SQL_CDO_CREATE_DOMAIN => 0x00000001
, SQL_CDO_DEFAULT => 0x00000002
, SQL_CDO_CONSTRAINT => 0x00000004
, SQL_CDO_COLLATION => 0x00000008
, SQL_CDO_CONSTRAINT_NAME_DEFINITION => 0x00000010
, SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED => 0x00000020
, SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000040
, SQL_CDO_CONSTRAINT_DEFERRABLE => 0x00000080
, SQL_CDO_CONSTRAINT_NON_DEFERRABLE => 0x00000100
};
$ReturnValues{SQL_CREATE_SCHEMA} =
{
SQL_CS_CREATE_SCHEMA => 0x00000001
, SQL_CS_AUTHORIZATION => 0x00000002
, SQL_CS_DEFAULT_CHARACTER_SET => 0x00000004
};
$ReturnValues{SQL_CREATE_TABLE} =
{
SQL_CT_CREATE_TABLE => 0x00000001
, SQL_CT_COMMIT_PRESERVE => 0x00000002
, SQL_CT_COMMIT_DELETE => 0x00000004
, SQL_CT_GLOBAL_TEMPORARY => 0x00000008
, SQL_CT_LOCAL_TEMPORARY => 0x00000010
, SQL_CT_CONSTRAINT_INITIALLY_DEFERRED => 0x00000020
, SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000040
, SQL_CT_CONSTRAINT_DEFERRABLE => 0x00000080
, SQL_CT_CONSTRAINT_NON_DEFERRABLE => 0x00000100
, SQL_CT_COLUMN_CONSTRAINT => 0x00000200
, SQL_CT_COLUMN_DEFAULT => 0x00000400
, SQL_CT_COLUMN_COLLATION => 0x00000800
, SQL_CT_TABLE_CONSTRAINT => 0x00001000
, SQL_CT_CONSTRAINT_NAME_DEFINITION => 0x00002000
};
$ReturnValues{SQL_CREATE_TRANSLATION} =
{
SQL_CTR_CREATE_TRANSLATION => 0x00000001
};
$ReturnValues{SQL_CREATE_VIEW} =
{
SQL_CV_CREATE_VIEW => 0x00000001
, SQL_CV_CHECK_OPTION => 0x00000002
, SQL_CV_CASCADED => 0x00000004
, SQL_CV_LOCAL => 0x00000008
};
$ReturnValues{SQL_CURSOR_COMMIT_BEHAVIOR} =
{
SQL_CB_DELETE => 0
, SQL_CB_CLOSE => 1
, SQL_CB_PRESERVE => 2
};
$ReturnValues{SQL_CURSOR_ROLLBACK_BEHAVIOR} = $ReturnValues{SQL_CURSOR_COMMIT_BEHAVIOR};
$ReturnValues{SQL_CURSOR_SENSITIVITY} =
{
SQL_UNSPECIFIED => 0
, SQL_INSENSITIVE => 1
, SQL_SENSITIVE => 2
};
$ReturnValues{SQL_DATETIME_LITERALS} =
{
SQL_DL_SQL92_DATE => 0x00000001
, SQL_DL_SQL92_TIME => 0x00000002
, SQL_DL_SQL92_TIMESTAMP => 0x00000004
, SQL_DL_SQL92_INTERVAL_YEAR => 0x00000008
, SQL_DL_SQL92_INTERVAL_MONTH => 0x00000010
, SQL_DL_SQL92_INTERVAL_DAY => 0x00000020
, SQL_DL_SQL92_INTERVAL_HOUR => 0x00000040
, SQL_DL_SQL92_INTERVAL_MINUTE => 0x00000080
, SQL_DL_SQL92_INTERVAL_SECOND => 0x00000100
, SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH => 0x00000200
, SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR => 0x00000400
, SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE => 0x00000800
, SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND => 0x00001000
, SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE => 0x00002000
, SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND => 0x00004000
, SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND => 0x00008000
};
$ReturnValues{SQL_DDL_INDEX} =
{
SQL_DI_CREATE_INDEX => 0x00000001
, SQL_DI_DROP_INDEX => 0x00000002
};
$ReturnValues{SQL_DIAG_CURSOR_ROW_COUNT} =
{
SQL_CA2_CRC_EXACT => 0x00001000
, SQL_CA2_CRC_APPROXIMATE => 0x00002000
, SQL_CA2_SIMULATE_NON_UNIQUE => 0x00004000
, SQL_CA2_SIMULATE_TRY_UNIQUE => 0x00008000
, SQL_CA2_SIMULATE_UNIQUE => 0x00010000
};
$ReturnValues{SQL_DROP_ASSERTION} =
{
SQL_DA_DROP_ASSERTION => 0x00000001
};
$ReturnValues{SQL_DROP_CHARACTER_SET} =
{
SQL_DCS_DROP_CHARACTER_SET => 0x00000001
};
$ReturnValues{SQL_DROP_COLLATION} =
{
SQL_DC_DROP_COLLATION => 0x00000001
};
$ReturnValues{SQL_DROP_DOMAIN} =
{
SQL_DD_DROP_DOMAIN => 0x00000001
, SQL_DD_RESTRICT => 0x00000002
, SQL_DD_CASCADE => 0x00000004
};
$ReturnValues{SQL_DROP_SCHEMA} =
{
SQL_DS_DROP_SCHEMA => 0x00000001
, SQL_DS_RESTRICT => 0x00000002
, SQL_DS_CASCADE => 0x00000004
};
$ReturnValues{SQL_DROP_TABLE} =
{
SQL_DT_DROP_TABLE => 0x00000001
, SQL_DT_RESTRICT => 0x00000002
, SQL_DT_CASCADE => 0x00000004
};
$ReturnValues{SQL_DROP_TRANSLATION} =
{
SQL_DTR_DROP_TRANSLATION => 0x00000001
};
$ReturnValues{SQL_DROP_VIEW} =
{
SQL_DV_DROP_VIEW => 0x00000001
, SQL_DV_RESTRICT => 0x00000002
, SQL_DV_CASCADE => 0x00000004
};
$ReturnValues{SQL_CURSOR_ATTRIBUTES1} =
{
SQL_CA1_NEXT => 0x00000001
, SQL_CA1_ABSOLUTE => 0x00000002
, SQL_CA1_RELATIVE => 0x00000004
, SQL_CA1_BOOKMARK => 0x00000008
, SQL_CA1_LOCK_NO_CHANGE => 0x00000040
, SQL_CA1_LOCK_EXCLUSIVE => 0x00000080
, SQL_CA1_LOCK_UNLOCK => 0x00000100
, SQL_CA1_POS_POSITION => 0x00000200
, SQL_CA1_POS_UPDATE => 0x00000400
, SQL_CA1_POS_DELETE => 0x00000800
, SQL_CA1_POS_REFRESH => 0x00001000
, SQL_CA1_POSITIONED_UPDATE => 0x00002000
, SQL_CA1_POSITIONED_DELETE => 0x00004000
, SQL_CA1_SELECT_FOR_UPDATE => 0x00008000
, SQL_CA1_BULK_ADD => 0x00010000
, SQL_CA1_BULK_UPDATE_BY_BOOKMARK => 0x00020000
, SQL_CA1_BULK_DELETE_BY_BOOKMARK => 0x00040000
, SQL_CA1_BULK_FETCH_BY_BOOKMARK => 0x00080000
};
$ReturnValues{ SQL_DYNAMIC_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1};
$ReturnValues{SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1};
$ReturnValues{ SQL_KEYSET_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1};
$ReturnValues{ SQL_STATIC_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1};
$ReturnValues{SQL_CURSOR_ATTRIBUTES2} =
{
SQL_CA2_READ_ONLY_CONCURRENCY => 0x00000001
, SQL_CA2_LOCK_CONCURRENCY => 0x00000002
, SQL_CA2_OPT_ROWVER_CONCURRENCY => 0x00000004
, SQL_CA2_OPT_VALUES_CONCURRENCY => 0x00000008
, SQL_CA2_SENSITIVITY_ADDITIONS => 0x00000010
, SQL_CA2_SENSITIVITY_DELETIONS => 0x00000020
, SQL_CA2_SENSITIVITY_UPDATES => 0x00000040
, SQL_CA2_MAX_ROWS_SELECT => 0x00000080
, SQL_CA2_MAX_ROWS_INSERT => 0x00000100
, SQL_CA2_MAX_ROWS_DELETE => 0x00000200
, SQL_CA2_MAX_ROWS_UPDATE => 0x00000400
, SQL_CA2_MAX_ROWS_CATALOG => 0x00000800
, SQL_CA2_CRC_EXACT => 0x00001000
, SQL_CA2_CRC_APPROXIMATE => 0x00002000
, SQL_CA2_SIMULATE_NON_UNIQUE => 0x00004000
, SQL_CA2_SIMULATE_TRY_UNIQUE => 0x00008000
, SQL_CA2_SIMULATE_UNIQUE => 0x00010000
};
$ReturnValues{ SQL_DYNAMIC_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2};
$ReturnValues{SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2};
$ReturnValues{ SQL_KEYSET_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2};
$ReturnValues{ SQL_STATIC_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2};
$ReturnValues{SQL_FETCH_DIRECTION} =
{
SQL_FD_FETCH_NEXT => 0x00000001
, SQL_FD_FETCH_FIRST => 0x00000002
, SQL_FD_FETCH_LAST => 0x00000004
, SQL_FD_FETCH_PRIOR => 0x00000008
, SQL_FD_FETCH_ABSOLUTE => 0x00000010
, SQL_FD_FETCH_RELATIVE => 0x00000020
, SQL_FD_FETCH_RESUME => 0x00000040
, SQL_FD_FETCH_BOOKMARK => 0x00000080
};
$ReturnValues{SQL_FILE_USAGE} =
{
SQL_FILE_NOT_SUPPORTED => 0x0000
, SQL_FILE_TABLE => 0x0001
, SQL_FILE_QUALIFIER => 0x0002
, SQL_FILE_CATALOG => 0x0002 # SQL_FILE_QUALIFIER
};
$ReturnValues{SQL_GETDATA_EXTENSIONS} =
{
SQL_GD_ANY_COLUMN => 0x00000001
, SQL_GD_ANY_ORDER => 0x00000002
, SQL_GD_BLOCK => 0x00000004
, SQL_GD_BOUND => 0x00000008
};
$ReturnValues{SQL_GROUP_BY} =
{
SQL_GB_NOT_SUPPORTED => 0x0000
, SQL_GB_GROUP_BY_EQUALS_SELECT => 0x0001
, SQL_GB_GROUP_BY_CONTAINS_SELECT => 0x0002
, SQL_GB_NO_RELATION => 0x0003
, SQL_GB_COLLATE => 0x0004
};
$ReturnValues{SQL_IDENTIFIER_CASE} =
{
SQL_IC_UPPER => 1
, SQL_IC_LOWER => 2
, SQL_IC_SENSITIVE => 3
, SQL_IC_MIXED => 4
};
$ReturnValues{SQL_INDEX_KEYWORDS} =
{
SQL_IK_NONE => 0x00000000
, SQL_IK_ASC => 0x00000001
, SQL_IK_DESC => 0x00000002
# SQL_IK_ALL =>
};
$ReturnValues{SQL_INFO_SCHEMA_VIEWS} =
{
SQL_ISV_ASSERTIONS => 0x00000001
, SQL_ISV_CHARACTER_SETS => 0x00000002
, SQL_ISV_CHECK_CONSTRAINTS => 0x00000004
, SQL_ISV_COLLATIONS => 0x00000008
, SQL_ISV_COLUMN_DOMAIN_USAGE => 0x00000010
, SQL_ISV_COLUMN_PRIVILEGES => 0x00000020
, SQL_ISV_COLUMNS => 0x00000040
, SQL_ISV_CONSTRAINT_COLUMN_USAGE => 0x00000080
, SQL_ISV_CONSTRAINT_TABLE_USAGE => 0x00000100
, SQL_ISV_DOMAIN_CONSTRAINTS => 0x00000200
, SQL_ISV_DOMAINS => 0x00000400
, SQL_ISV_KEY_COLUMN_USAGE => 0x00000800
, SQL_ISV_REFERENTIAL_CONSTRAINTS => 0x00001000
, SQL_ISV_SCHEMATA => 0x00002000
, SQL_ISV_SQL_LANGUAGES => 0x00004000
, SQL_ISV_TABLE_CONSTRAINTS => 0x00008000
, SQL_ISV_TABLE_PRIVILEGES => 0x00010000
, SQL_ISV_TABLES => 0x00020000
, SQL_ISV_TRANSLATIONS => 0x00040000
, SQL_ISV_USAGE_PRIVILEGES => 0x00080000
, SQL_ISV_VIEW_COLUMN_USAGE => 0x00100000
, SQL_ISV_VIEW_TABLE_USAGE => 0x00200000
, SQL_ISV_VIEWS => 0x00400000
};
$ReturnValues{SQL_INSERT_STATEMENT} =
{
SQL_IS_INSERT_LITERALS => 0x00000001
, SQL_IS_INSERT_SEARCHED => 0x00000002
, SQL_IS_SELECT_INTO => 0x00000004
};
$ReturnValues{SQL_LOCK_TYPES} =
{
SQL_LCK_NO_CHANGE => 0x00000001
, SQL_LCK_EXCLUSIVE => 0x00000002
, SQL_LCK_UNLOCK => 0x00000004
};
$ReturnValues{SQL_NON_NULLABLE_COLUMNS} =
{
SQL_NNC_NULL => 0x0000
, SQL_NNC_NON_NULL => 0x0001
};
$ReturnValues{SQL_NULL_COLLATION} =
{
SQL_NC_HIGH => 0
, SQL_NC_LOW => 1
, SQL_NC_START => 0x0002
, SQL_NC_END => 0x0004
};
$ReturnValues{SQL_NUMERIC_FUNCTIONS} =
{
SQL_FN_NUM_ABS => 0x00000001
, SQL_FN_NUM_ACOS => 0x00000002
, SQL_FN_NUM_ASIN => 0x00000004
, SQL_FN_NUM_ATAN => 0x00000008
, SQL_FN_NUM_ATAN2 => 0x00000010
, SQL_FN_NUM_CEILING => 0x00000020
, SQL_FN_NUM_COS => 0x00000040
, SQL_FN_NUM_COT => 0x00000080
, SQL_FN_NUM_EXP => 0x00000100
, SQL_FN_NUM_FLOOR => 0x00000200
, SQL_FN_NUM_LOG => 0x00000400
, SQL_FN_NUM_MOD => 0x00000800
, SQL_FN_NUM_SIGN => 0x00001000
, SQL_FN_NUM_SIN => 0x00002000
, SQL_FN_NUM_SQRT => 0x00004000
, SQL_FN_NUM_TAN => 0x00008000
, SQL_FN_NUM_PI => 0x00010000
, SQL_FN_NUM_RAND => 0x00020000
, SQL_FN_NUM_DEGREES => 0x00040000
, SQL_FN_NUM_LOG10 => 0x00080000
, SQL_FN_NUM_POWER => 0x00100000
, SQL_FN_NUM_RADIANS => 0x00200000
, SQL_FN_NUM_ROUND => 0x00400000
, SQL_FN_NUM_TRUNCATE => 0x00800000
};
$ReturnValues{SQL_ODBC_API_CONFORMANCE} =
{
SQL_OAC_NONE => 0x0000
, SQL_OAC_LEVEL1 => 0x0001
, SQL_OAC_LEVEL2 => 0x0002
};
$ReturnValues{SQL_ODBC_INTERFACE_CONFORMANCE} =
{
SQL_OIC_CORE => 1
, SQL_OIC_LEVEL1 => 2
, SQL_OIC_LEVEL2 => 3
};
$ReturnValues{SQL_ODBC_SAG_CLI_CONFORMANCE} =
{
SQL_OSCC_NOT_COMPLIANT => 0x0000
, SQL_OSCC_COMPLIANT => 0x0001
};
$ReturnValues{SQL_ODBC_SQL_CONFORMANCE} =
{
SQL_OSC_MINIMUM => 0x0000
, SQL_OSC_CORE => 0x0001
, SQL_OSC_EXTENDED => 0x0002
};
$ReturnValues{SQL_OJ_CAPABILITIES} =
{
SQL_OJ_LEFT => 0x00000001
, SQL_OJ_RIGHT => 0x00000002
, SQL_OJ_FULL => 0x00000004
, SQL_OJ_NESTED => 0x00000008
, SQL_OJ_NOT_ORDERED => 0x00000010
, SQL_OJ_INNER => 0x00000020
, SQL_OJ_ALL_COMPARISON_OPS => 0x00000040
};
$ReturnValues{SQL_OWNER_USAGE} =
{
SQL_OU_DML_STATEMENTS => 0x00000001
, SQL_OU_PROCEDURE_INVOCATION => 0x00000002
, SQL_OU_TABLE_DEFINITION => 0x00000004
, SQL_OU_INDEX_DEFINITION => 0x00000008
, SQL_OU_PRIVILEGE_DEFINITION => 0x00000010
};
$ReturnValues{SQL_PARAM_ARRAY_ROW_COUNTS} =
{
SQL_PARC_BATCH => 1
, SQL_PARC_NO_BATCH => 2
};
$ReturnValues{SQL_PARAM_ARRAY_SELECTS} =
{
SQL_PAS_BATCH => 1
, SQL_PAS_NO_BATCH => 2
, SQL_PAS_NO_SELECT => 3
};
$ReturnValues{SQL_POSITIONED_STATEMENTS} =
{
SQL_PS_POSITIONED_DELETE => 0x00000001
, SQL_PS_POSITIONED_UPDATE => 0x00000002
, SQL_PS_SELECT_FOR_UPDATE => 0x00000004
};
$ReturnValues{SQL_POS_OPERATIONS} =
{
SQL_POS_POSITION => 0x00000001
, SQL_POS_REFRESH => 0x00000002
, SQL_POS_UPDATE => 0x00000004
, SQL_POS_DELETE => 0x00000008
, SQL_POS_ADD => 0x00000010
};
$ReturnValues{SQL_QUALIFIER_LOCATION} =
{
SQL_QL_START => 0x0001
, SQL_QL_END => 0x0002
};
$ReturnValues{SQL_QUALIFIER_USAGE} =
{
SQL_QU_DML_STATEMENTS => 0x00000001
, SQL_QU_PROCEDURE_INVOCATION => 0x00000002
, SQL_QU_TABLE_DEFINITION => 0x00000004
, SQL_QU_INDEX_DEFINITION => 0x00000008
, SQL_QU_PRIVILEGE_DEFINITION => 0x00000010
};
$ReturnValues{SQL_QUOTED_IDENTIFIER_CASE} = $ReturnValues{SQL_IDENTIFIER_CASE};
$ReturnValues{SQL_SCHEMA_USAGE} =
{
SQL_SU_DML_STATEMENTS => 0x00000001 # SQL_OU_DML_STATEMENTS
, SQL_SU_PROCEDURE_INVOCATION => 0x00000002 # SQL_OU_PROCEDURE_INVOCATION
, SQL_SU_TABLE_DEFINITION => 0x00000004 # SQL_OU_TABLE_DEFINITION
, SQL_SU_INDEX_DEFINITION => 0x00000008 # SQL_OU_INDEX_DEFINITION
, SQL_SU_PRIVILEGE_DEFINITION => 0x00000010 # SQL_OU_PRIVILEGE_DEFINITION
};
$ReturnValues{SQL_SCROLL_CONCURRENCY} =
{
SQL_SCCO_READ_ONLY => 0x00000001
, SQL_SCCO_LOCK => 0x00000002
, SQL_SCCO_OPT_ROWVER => 0x00000004
, SQL_SCCO_OPT_VALUES => 0x00000008
};
$ReturnValues{SQL_SCROLL_OPTIONS} =
{
SQL_SO_FORWARD_ONLY => 0x00000001
, SQL_SO_KEYSET_DRIVEN => 0x00000002
, SQL_SO_DYNAMIC => 0x00000004
, SQL_SO_MIXED => 0x00000008
, SQL_SO_STATIC => 0x00000010
};
$ReturnValues{SQL_SQL92_DATETIME_FUNCTIONS} =
{
SQL_SDF_CURRENT_DATE => 0x00000001
, SQL_SDF_CURRENT_TIME => 0x00000002
, SQL_SDF_CURRENT_TIMESTAMP => 0x00000004
};
$ReturnValues{SQL_SQL92_FOREIGN_KEY_DELETE_RULE} =
{
SQL_SFKD_CASCADE => 0x00000001
, SQL_SFKD_NO_ACTION => 0x00000002
, SQL_SFKD_SET_DEFAULT => 0x00000004
, SQL_SFKD_SET_NULL => 0x00000008
};
$ReturnValues{SQL_SQL92_FOREIGN_KEY_UPDATE_RULE} =
{
SQL_SFKU_CASCADE => 0x00000001
, SQL_SFKU_NO_ACTION => 0x00000002
, SQL_SFKU_SET_DEFAULT => 0x00000004
, SQL_SFKU_SET_NULL => 0x00000008
};
$ReturnValues{SQL_SQL92_GRANT} =
{
SQL_SG_USAGE_ON_DOMAIN => 0x00000001
, SQL_SG_USAGE_ON_CHARACTER_SET => 0x00000002
, SQL_SG_USAGE_ON_COLLATION => 0x00000004
, SQL_SG_USAGE_ON_TRANSLATION => 0x00000008
, SQL_SG_WITH_GRANT_OPTION => 0x00000010
, SQL_SG_DELETE_TABLE => 0x00000020
, SQL_SG_INSERT_TABLE => 0x00000040
, SQL_SG_INSERT_COLUMN => 0x00000080
, SQL_SG_REFERENCES_TABLE => 0x00000100
, SQL_SG_REFERENCES_COLUMN => 0x00000200
, SQL_SG_SELECT_TABLE => 0x00000400
, SQL_SG_UPDATE_TABLE => 0x00000800
, SQL_SG_UPDATE_COLUMN => 0x00001000
};
$ReturnValues{SQL_SQL92_NUMERIC_VALUE_FUNCTIONS} =
{
SQL_SNVF_BIT_LENGTH => 0x00000001
, SQL_SNVF_CHAR_LENGTH => 0x00000002
, SQL_SNVF_CHARACTER_LENGTH => 0x00000004
, SQL_SNVF_EXTRACT => 0x00000008
, SQL_SNVF_OCTET_LENGTH => 0x00000010
, SQL_SNVF_POSITION => 0x00000020
};
$ReturnValues{SQL_SQL92_PREDICATES} =
{
SQL_SP_EXISTS => 0x00000001
, SQL_SP_ISNOTNULL => 0x00000002
, SQL_SP_ISNULL => 0x00000004
, SQL_SP_MATCH_FULL => 0x00000008
, SQL_SP_MATCH_PARTIAL => 0x00000010
, SQL_SP_MATCH_UNIQUE_FULL => 0x00000020
, SQL_SP_MATCH_UNIQUE_PARTIAL => 0x00000040
, SQL_SP_OVERLAPS => 0x00000080
, SQL_SP_UNIQUE => 0x00000100
, SQL_SP_LIKE => 0x00000200
, SQL_SP_IN => 0x00000400
, SQL_SP_BETWEEN => 0x00000800
, SQL_SP_COMPARISON => 0x00001000
, SQL_SP_QUANTIFIED_COMPARISON => 0x00002000
};
$ReturnValues{SQL_SQL92_RELATIONAL_JOIN_OPERATORS} =
{
SQL_SRJO_CORRESPONDING_CLAUSE => 0x00000001
, SQL_SRJO_CROSS_JOIN => 0x00000002
, SQL_SRJO_EXCEPT_JOIN => 0x00000004
, SQL_SRJO_FULL_OUTER_JOIN => 0x00000008
, SQL_SRJO_INNER_JOIN => 0x00000010
, SQL_SRJO_INTERSECT_JOIN => 0x00000020
, SQL_SRJO_LEFT_OUTER_JOIN => 0x00000040
, SQL_SRJO_NATURAL_JOIN => 0x00000080
, SQL_SRJO_RIGHT_OUTER_JOIN => 0x00000100
, SQL_SRJO_UNION_JOIN => 0x00000200
};
$ReturnValues{SQL_SQL92_REVOKE} =
{
SQL_SR_USAGE_ON_DOMAIN => 0x00000001
, SQL_SR_USAGE_ON_CHARACTER_SET => 0x00000002
, SQL_SR_USAGE_ON_COLLATION => 0x00000004
, SQL_SR_USAGE_ON_TRANSLATION => 0x00000008
, SQL_SR_GRANT_OPTION_FOR => 0x00000010
, SQL_SR_CASCADE => 0x00000020
, SQL_SR_RESTRICT => 0x00000040
, SQL_SR_DELETE_TABLE => 0x00000080
, SQL_SR_INSERT_TABLE => 0x00000100
, SQL_SR_INSERT_COLUMN => 0x00000200
, SQL_SR_REFERENCES_TABLE => 0x00000400
, SQL_SR_REFERENCES_COLUMN => 0x00000800
, SQL_SR_SELECT_TABLE => 0x00001000
, SQL_SR_UPDATE_TABLE => 0x00002000
, SQL_SR_UPDATE_COLUMN => 0x00004000
};
$ReturnValues{SQL_SQL92_ROW_VALUE_CONSTRUCTOR} =
{
SQL_SRVC_VALUE_EXPRESSION => 0x00000001
, SQL_SRVC_NULL => 0x00000002
, SQL_SRVC_DEFAULT => 0x00000004
, SQL_SRVC_ROW_SUBQUERY => 0x00000008
};
$ReturnValues{SQL_SQL92_STRING_FUNCTIONS} =
{
SQL_SSF_CONVERT => 0x00000001
, SQL_SSF_LOWER => 0x00000002
, SQL_SSF_UPPER => 0x00000004
, SQL_SSF_SUBSTRING => 0x00000008
, SQL_SSF_TRANSLATE => 0x00000010
, SQL_SSF_TRIM_BOTH => 0x00000020
, SQL_SSF_TRIM_LEADING => 0x00000040
, SQL_SSF_TRIM_TRAILING => 0x00000080
};
$ReturnValues{SQL_SQL92_VALUE_EXPRESSIONS} =
{
SQL_SVE_CASE => 0x00000001
, SQL_SVE_CAST => 0x00000002
, SQL_SVE_COALESCE => 0x00000004
, SQL_SVE_NULLIF => 0x00000008
};
$ReturnValues{SQL_SQL_CONFORMANCE} =
{
SQL_SC_SQL92_ENTRY => 0x00000001
, SQL_SC_FIPS127_2_TRANSITIONAL => 0x00000002
, SQL_SC_SQL92_INTERMEDIATE => 0x00000004
, SQL_SC_SQL92_FULL => 0x00000008
};
$ReturnValues{SQL_STANDARD_CLI_CONFORMANCE} =
{
SQL_SCC_XOPEN_CLI_VERSION1 => 0x00000001
, SQL_SCC_ISO92_CLI => 0x00000002
};
$ReturnValues{SQL_STATIC_SENSITIVITY} =
{
SQL_SS_ADDITIONS => 0x00000001
, SQL_SS_DELETIONS => 0x00000002
, SQL_SS_UPDATES => 0x00000004
};
$ReturnValues{SQL_STRING_FUNCTIONS} =
{
SQL_FN_STR_CONCAT => 0x00000001
, SQL_FN_STR_INSERT => 0x00000002
, SQL_FN_STR_LEFT => 0x00000004
, SQL_FN_STR_LTRIM => 0x00000008
, SQL_FN_STR_LENGTH => 0x00000010
, SQL_FN_STR_LOCATE => 0x00000020
, SQL_FN_STR_LCASE => 0x00000040
, SQL_FN_STR_REPEAT => 0x00000080
, SQL_FN_STR_REPLACE => 0x00000100
, SQL_FN_STR_RIGHT => 0x00000200
, SQL_FN_STR_RTRIM => 0x00000400
, SQL_FN_STR_SUBSTRING => 0x00000800
, SQL_FN_STR_UCASE => 0x00001000
, SQL_FN_STR_ASCII => 0x00002000
, SQL_FN_STR_CHAR => 0x00004000
, SQL_FN_STR_DIFFERENCE => 0x00008000
, SQL_FN_STR_LOCATE_2 => 0x00010000
, SQL_FN_STR_SOUNDEX => 0x00020000
, SQL_FN_STR_SPACE => 0x00040000
, SQL_FN_STR_BIT_LENGTH => 0x00080000
, SQL_FN_STR_CHAR_LENGTH => 0x00100000
, SQL_FN_STR_CHARACTER_LENGTH => 0x00200000
, SQL_FN_STR_OCTET_LENGTH => 0x00400000
, SQL_FN_STR_POSITION => 0x00800000
};
$ReturnValues{SQL_SUBQUERIES} =
{
SQL_SQ_COMPARISON => 0x00000001
, SQL_SQ_EXISTS => 0x00000002
, SQL_SQ_IN => 0x00000004
, SQL_SQ_QUANTIFIED => 0x00000008
, SQL_SQ_CORRELATED_SUBQUERIES => 0x00000010
};
$ReturnValues{SQL_SYSTEM_FUNCTIONS} =
{
SQL_FN_SYS_USERNAME => 0x00000001
, SQL_FN_SYS_DBNAME => 0x00000002
, SQL_FN_SYS_IFNULL => 0x00000004
};
$ReturnValues{SQL_TIMEDATE_ADD_INTERVALS} =
{
SQL_FN_TSI_FRAC_SECOND => 0x00000001
, SQL_FN_TSI_SECOND => 0x00000002
, SQL_FN_TSI_MINUTE => 0x00000004
, SQL_FN_TSI_HOUR => 0x00000008
, SQL_FN_TSI_DAY => 0x00000010
, SQL_FN_TSI_WEEK => 0x00000020
, SQL_FN_TSI_MONTH => 0x00000040
, SQL_FN_TSI_QUARTER => 0x00000080
, SQL_FN_TSI_YEAR => 0x00000100
};
$ReturnValues{SQL_TIMEDATE_FUNCTIONS} =
{
SQL_FN_TD_NOW => 0x00000001
, SQL_FN_TD_CURDATE => 0x00000002
, SQL_FN_TD_DAYOFMONTH => 0x00000004
, SQL_FN_TD_DAYOFWEEK => 0x00000008
, SQL_FN_TD_DAYOFYEAR => 0x00000010
, SQL_FN_TD_MONTH => 0x00000020
, SQL_FN_TD_QUARTER => 0x00000040
, SQL_FN_TD_WEEK => 0x00000080
, SQL_FN_TD_YEAR => 0x00000100
, SQL_FN_TD_CURTIME => 0x00000200
, SQL_FN_TD_HOUR => 0x00000400
, SQL_FN_TD_MINUTE => 0x00000800
, SQL_FN_TD_SECOND => 0x00001000
, SQL_FN_TD_TIMESTAMPADD => 0x00002000
, SQL_FN_TD_TIMESTAMPDIFF => 0x00004000
, SQL_FN_TD_DAYNAME => 0x00008000
, SQL_FN_TD_MONTHNAME => 0x00010000
, SQL_FN_TD_CURRENT_DATE => 0x00020000
, SQL_FN_TD_CURRENT_TIME => 0x00040000
, SQL_FN_TD_CURRENT_TIMESTAMP => 0x00080000
, SQL_FN_TD_EXTRACT => 0x00100000
};
$ReturnValues{SQL_TXN_CAPABLE} =
{
SQL_TC_NONE => 0
, SQL_TC_DML => 1
, SQL_TC_ALL => 2
, SQL_TC_DDL_COMMIT => 3
, SQL_TC_DDL_IGNORE => 4
};
$ReturnValues{SQL_TRANSACTION_ISOLATION_OPTION} =
{
SQL_TRANSACTION_READ_UNCOMMITTED => 0x00000001 # SQL_TXN_READ_UNCOMMITTED
, SQL_TRANSACTION_READ_COMMITTED => 0x00000002 # SQL_TXN_READ_COMMITTED
, SQL_TRANSACTION_REPEATABLE_READ => 0x00000004 # SQL_TXN_REPEATABLE_READ
, SQL_TRANSACTION_SERIALIZABLE => 0x00000008 # SQL_TXN_SERIALIZABLE
};
$ReturnValues{SQL_DEFAULT_TRANSACTION_ISOLATION} = $ReturnValues{SQL_TRANSACTION_ISOLATION_OPTION};
$ReturnValues{SQL_TXN_ISOLATION_OPTION} =
{
SQL_TXN_READ_UNCOMMITTED => 0x00000001
, SQL_TXN_READ_COMMITTED => 0x00000002
, SQL_TXN_REPEATABLE_READ => 0x00000004
, SQL_TXN_SERIALIZABLE => 0x00000008
};
$ReturnValues{SQL_DEFAULT_TXN_ISOLATION} = $ReturnValues{SQL_TXN_ISOLATION_OPTION};
$ReturnValues{SQL_TXN_VERSIONING} =
{
SQL_TXN_VERSIONING => 0x00000010
};
$ReturnValues{SQL_UNION} =
{
SQL_U_UNION => 0x00000001
, SQL_U_UNION_ALL => 0x00000002
};
$ReturnValues{SQL_UNION_STATEMENT} =
{
SQL_US_UNION => 0x00000001 # SQL_U_UNION
, SQL_US_UNION_ALL => 0x00000002 # SQL_U_UNION_ALL
};
1;
=head1 TODO
Corrections?
SQL_NULL_COLLATION: ODBC vs ANSI
Unique values for $ReturnValues{...}?, e.g. SQL_FILE_USAGE
=cut
DBI/Const/GetInfo/ANSI.pm 0000644 00000022600 15033552504 0010655 0 ustar 00 # $Id: ANSI.pm 8696 2007-01-24 23:12:38Z Tim $
#
# Copyright (c) 2002 Tim Bunce Ireland
#
# Constant data describing ANSI CLI info types and return values for the
# SQLGetInfo() method of ODBC.
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
package DBI::Const::GetInfo::ANSI;
our (%InfoTypes,%ReturnTypes,%ReturnValues,);
=head1 NAME
DBI::Const::GetInfo::ANSI - ISO/IEC SQL/CLI Constants for GetInfo
=head1 SYNOPSIS
The API for this module is private and subject to change.
=head1 DESCRIPTION
Information requested by GetInfo().
See: A.1 C header file SQLCLI.H, Page 316, 317.
The API for this module is private and subject to change.
=head1 REFERENCES
ISO/IEC FCD 9075-3:200x Information technology - Database Languages -
SQL - Part 3: Call-Level Interface (SQL/CLI)
SC32 N00744 = WG3:VIE-005 = H2-2002-007
Date: 2002-01-15
=cut
my
$VERSION = "2.008697";
%InfoTypes =
(
SQL_ALTER_TABLE => 86
, SQL_CATALOG_NAME => 10003
, SQL_COLLATING_SEQUENCE => 10004
, SQL_CURSOR_COMMIT_BEHAVIOR => 23
, SQL_CURSOR_SENSITIVITY => 10001
, SQL_DATA_SOURCE_NAME => 2
, SQL_DATA_SOURCE_READ_ONLY => 25
, SQL_DBMS_NAME => 17
, SQL_DBMS_VERSION => 18
, SQL_DEFAULT_TRANSACTION_ISOLATION => 26
, SQL_DESCRIBE_PARAMETER => 10002
, SQL_FETCH_DIRECTION => 8
, SQL_GETDATA_EXTENSIONS => 81
, SQL_IDENTIFIER_CASE => 28
, SQL_INTEGRITY => 73
, SQL_MAXIMUM_CATALOG_NAME_LENGTH => 34
, SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 97
, SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 99
, SQL_MAXIMUM_COLUMNS_IN_SELECT => 100
, SQL_MAXIMUM_COLUMNS_IN_TABLE => 101
, SQL_MAXIMUM_COLUMN_NAME_LENGTH => 30
, SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 1
, SQL_MAXIMUM_CURSOR_NAME_LENGTH => 31
, SQL_MAXIMUM_DRIVER_CONNECTIONS => 0
, SQL_MAXIMUM_IDENTIFIER_LENGTH => 10005
, SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 32
, SQL_MAXIMUM_STMT_OCTETS => 20000
, SQL_MAXIMUM_STMT_OCTETS_DATA => 20001
, SQL_MAXIMUM_STMT_OCTETS_SCHEMA => 20002
, SQL_MAXIMUM_TABLES_IN_SELECT => 106
, SQL_MAXIMUM_TABLE_NAME_LENGTH => 35
, SQL_MAXIMUM_USER_NAME_LENGTH => 107
, SQL_NULL_COLLATION => 85
, SQL_ORDER_BY_COLUMNS_IN_SELECT => 90
, SQL_OUTER_JOIN_CAPABILITIES => 115
, SQL_SCROLL_CONCURRENCY => 43
, SQL_SEARCH_PATTERN_ESCAPE => 14
, SQL_SERVER_NAME => 13
, SQL_SPECIAL_CHARACTERS => 94
, SQL_TRANSACTION_CAPABLE => 46
, SQL_TRANSACTION_ISOLATION_OPTION => 72
, SQL_USER_NAME => 47
);
=head2 %ReturnTypes
See: Codes and data types for implementation information (Table 28), Page 85, 86.
Mapped to ODBC datatype names.
=cut
%ReturnTypes = # maxlen
(
SQL_ALTER_TABLE => 'SQLUINTEGER bitmask' # INTEGER
, SQL_CATALOG_NAME => 'SQLCHAR' # CHARACTER (1)
, SQL_COLLATING_SEQUENCE => 'SQLCHAR' # CHARACTER (254)
, SQL_CURSOR_COMMIT_BEHAVIOR => 'SQLUSMALLINT' # SMALLINT
, SQL_CURSOR_SENSITIVITY => 'SQLUINTEGER' # INTEGER
, SQL_DATA_SOURCE_NAME => 'SQLCHAR' # CHARACTER (128)
, SQL_DATA_SOURCE_READ_ONLY => 'SQLCHAR' # CHARACTER (1)
, SQL_DBMS_NAME => 'SQLCHAR' # CHARACTER (254)
, SQL_DBMS_VERSION => 'SQLCHAR' # CHARACTER (254)
, SQL_DEFAULT_TRANSACTION_ISOLATION => 'SQLUINTEGER' # INTEGER
, SQL_DESCRIBE_PARAMETER => 'SQLCHAR' # CHARACTER (1)
, SQL_FETCH_DIRECTION => 'SQLUINTEGER bitmask' # INTEGER
, SQL_GETDATA_EXTENSIONS => 'SQLUINTEGER bitmask' # INTEGER
, SQL_IDENTIFIER_CASE => 'SQLUSMALLINT' # SMALLINT
, SQL_INTEGRITY => 'SQLCHAR' # CHARACTER (1)
, SQL_MAXIMUM_CATALOG_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_COLUMNS_IN_SELECT => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_COLUMNS_IN_TABLE => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_COLUMN_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_CURSOR_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_DRIVER_CONNECTIONS => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_IDENTIFIER_LENGTH => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_STMT_OCTETS => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_STMT_OCTETS_DATA => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_STMT_OCTETS_SCHEMA => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_TABLES_IN_SELECT => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_TABLE_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT
, SQL_MAXIMUM_USER_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT
, SQL_NULL_COLLATION => 'SQLUSMALLINT' # SMALLINT
, SQL_ORDER_BY_COLUMNS_IN_SELECT => 'SQLCHAR' # CHARACTER (1)
, SQL_OUTER_JOIN_CAPABILITIES => 'SQLUINTEGER bitmask' # INTEGER
, SQL_SCROLL_CONCURRENCY => 'SQLUINTEGER bitmask' # INTEGER
, SQL_SEARCH_PATTERN_ESCAPE => 'SQLCHAR' # CHARACTER (1)
, SQL_SERVER_NAME => 'SQLCHAR' # CHARACTER (128)
, SQL_SPECIAL_CHARACTERS => 'SQLCHAR' # CHARACTER (254)
, SQL_TRANSACTION_CAPABLE => 'SQLUSMALLINT' # SMALLINT
, SQL_TRANSACTION_ISOLATION_OPTION => 'SQLUINTEGER bitmask' # INTEGER
, SQL_USER_NAME => 'SQLCHAR' # CHARACTER (128)
);
=head2 %ReturnValues
See: A.1 C header file SQLCLI.H, Page 317, 318.
=cut
$ReturnValues{SQL_ALTER_TABLE} =
{
SQL_AT_ADD_COLUMN => 0x00000001
, SQL_AT_DROP_COLUMN => 0x00000002
, SQL_AT_ALTER_COLUMN => 0x00000004
, SQL_AT_ADD_CONSTRAINT => 0x00000008
, SQL_AT_DROP_CONSTRAINT => 0x00000010
};
$ReturnValues{SQL_CURSOR_COMMIT_BEHAVIOR} =
{
SQL_CB_DELETE => 0
, SQL_CB_CLOSE => 1
, SQL_CB_PRESERVE => 2
};
$ReturnValues{SQL_FETCH_DIRECTION} =
{
SQL_FD_FETCH_NEXT => 0x00000001
, SQL_FD_FETCH_FIRST => 0x00000002
, SQL_FD_FETCH_LAST => 0x00000004
, SQL_FD_FETCH_PRIOR => 0x00000008
, SQL_FD_FETCH_ABSOLUTE => 0x00000010
, SQL_FD_FETCH_RELATIVE => 0x00000020
};
$ReturnValues{SQL_GETDATA_EXTENSIONS} =
{
SQL_GD_ANY_COLUMN => 0x00000001
, SQL_GD_ANY_ORDER => 0x00000002
};
$ReturnValues{SQL_IDENTIFIER_CASE} =
{
SQL_IC_UPPER => 1
, SQL_IC_LOWER => 2
, SQL_IC_SENSITIVE => 3
, SQL_IC_MIXED => 4
};
$ReturnValues{SQL_NULL_COLLATION} =
{
SQL_NC_HIGH => 1
, SQL_NC_LOW => 2
};
$ReturnValues{SQL_OUTER_JOIN_CAPABILITIES} =
{
SQL_OUTER_JOIN_LEFT => 0x00000001
, SQL_OUTER_JOIN_RIGHT => 0x00000002
, SQL_OUTER_JOIN_FULL => 0x00000004
, SQL_OUTER_JOIN_NESTED => 0x00000008
, SQL_OUTER_JOIN_NOT_ORDERED => 0x00000010
, SQL_OUTER_JOIN_INNER => 0x00000020
, SQL_OUTER_JOIN_ALL_COMPARISON_OPS => 0x00000040
};
$ReturnValues{SQL_SCROLL_CONCURRENCY} =
{
SQL_SCCO_READ_ONLY => 0x00000001
, SQL_SCCO_LOCK => 0x00000002
, SQL_SCCO_OPT_ROWVER => 0x00000004
, SQL_SCCO_OPT_VALUES => 0x00000008
};
$ReturnValues{SQL_TRANSACTION_ACCESS_MODE} =
{
SQL_TRANSACTION_READ_ONLY => 0x00000001
, SQL_TRANSACTION_READ_WRITE => 0x00000002
};
$ReturnValues{SQL_TRANSACTION_CAPABLE} =
{
SQL_TC_NONE => 0
, SQL_TC_DML => 1
, SQL_TC_ALL => 2
, SQL_TC_DDL_COMMIT => 3
, SQL_TC_DDL_IGNORE => 4
};
$ReturnValues{SQL_TRANSACTION_ISOLATION} =
{
SQL_TRANSACTION_READ_UNCOMMITTED => 0x00000001
, SQL_TRANSACTION_READ_COMMITTED => 0x00000002
, SQL_TRANSACTION_REPEATABLE_READ => 0x00000004
, SQL_TRANSACTION_SERIALIZABLE => 0x00000008
};
1;
=head1 TODO
Corrections, e.g.:
SQL_TRANSACTION_ISOLATION_OPTION vs. SQL_TRANSACTION_ISOLATION
=cut
DBI/Const/GetInfoReturn.pm 0000644 00000004653 15033552504 0011333 0 ustar 00 # $Id: GetInfoReturn.pm 8696 2007-01-24 23:12:38Z Tim $
#
# Copyright (c) 2002 Tim Bunce Ireland
#
# Constant data describing return values from the DBI getinfo function.
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
package DBI::Const::GetInfoReturn;
use strict;
use Exporter ();
use vars qw(@ISA @EXPORT @EXPORT_OK %GetInfoReturnTypes %GetInfoReturnValues);
@ISA = qw(Exporter);
@EXPORT = qw(%GetInfoReturnTypes %GetInfoReturnValues);
my
$VERSION = "2.008697";
=head1 NAME
DBI::Const::GetInfoReturn - Data and functions for describing GetInfo results
=head1 SYNOPSIS
The interface to this module is undocumented and liable to change.
=head1 DESCRIPTION
Data and functions for describing GetInfo results
=cut
use DBI::Const::GetInfoType;
use DBI::Const::GetInfo::ANSI ();
use DBI::Const::GetInfo::ODBC ();
%GetInfoReturnTypes =
(
%DBI::Const::GetInfo::ANSI::ReturnTypes
, %DBI::Const::GetInfo::ODBC::ReturnTypes
);
%GetInfoReturnValues = ();
{
my $A = \%DBI::Const::GetInfo::ANSI::ReturnValues;
my $O = \%DBI::Const::GetInfo::ODBC::ReturnValues;
while ( my ($k, $v) = each %$A ) {
my %h = ( exists $O->{$k} ) ? ( %$v, %{$O->{$k}} ) : %$v;
$GetInfoReturnValues{$k} = \%h;
}
while ( my ($k, $v) = each %$O ) {
next if exists $A->{$k};
my %h = %$v;
$GetInfoReturnValues{$k} = \%h;
}
}
# -----------------------------------------------------------------------------
sub Format {
my $InfoType = shift;
my $Value = shift;
return '' unless defined $Value;
my $ReturnType = $GetInfoReturnTypes{$InfoType};
return sprintf '0x%08X', $Value if $ReturnType eq 'SQLUINTEGER bitmask';
return sprintf '0x%08X', $Value if $ReturnType eq 'SQLINTEGER bitmask';
# return '"' . $Value . '"' if $ReturnType eq 'SQLCHAR';
return $Value;
}
sub Explain {
my $InfoType = shift;
my $Value = shift;
return '' unless defined $Value;
return '' unless exists $GetInfoReturnValues{$InfoType};
$Value = int $Value;
my $ReturnType = $GetInfoReturnTypes{$InfoType};
my %h = reverse %{$GetInfoReturnValues{$InfoType}};
if ( $ReturnType eq 'SQLUINTEGER bitmask'|| $ReturnType eq 'SQLINTEGER bitmask') {
my @a = ();
for my $k ( sort { $a <=> $b } keys %h ) {
push @a, $h{$k} if $Value & $k;
}
return wantarray ? @a : join(' ', @a );
}
else {
return $h{$Value} ||'?';
}
}
1;
DBI/PurePerl.pm 0000644 00000113306 15033552504 0007244 0 ustar 00 ########################################################################
package # hide from PAUSE
DBI;
# vim: ts=8:sw=4
########################################################################
#
# Copyright (c) 2002,2003 Tim Bunce Ireland.
#
# See COPYRIGHT section in DBI.pm for usage and distribution rights.
#
########################################################################
#
# Please send patches and bug reports to
#
# Jeff Zucker <jeff@vpservices.com> with cc to <dbi-dev@perl.org>
#
########################################################################
use strict;
use Carp;
require Symbol;
require utf8;
*utf8::is_utf8 = sub { # hack for perl 5.6
require bytes;
return unless defined $_[0];
return !(length($_[0]) == bytes::length($_[0]))
} unless defined &utf8::is_utf8;
$DBI::PurePerl = $ENV{DBI_PUREPERL} || 1;
$DBI::PurePerl::VERSION = "2.014286";
$DBI::neat_maxlen ||= 400;
$DBI::tfh = Symbol::gensym();
open $DBI::tfh, ">&STDERR" or warn "Can't dup STDERR: $!";
select( (select($DBI::tfh), $| = 1)[0] ); # autoflush
# check for weaken support, used by ChildHandles
my $HAS_WEAKEN = eval {
require Scalar::Util;
# this will croak() if this Scalar::Util doesn't have a working weaken().
Scalar::Util::weaken( my $test = [] );
1;
};
%DBI::last_method_except = map { $_=>1 } qw(DESTROY _set_fbav set_err);
use constant SQL_ALL_TYPES => 0;
use constant SQL_ARRAY => 50;
use constant SQL_ARRAY_LOCATOR => 51;
use constant SQL_BIGINT => (-5);
use constant SQL_BINARY => (-2);
use constant SQL_BIT => (-7);
use constant SQL_BLOB => 30;
use constant SQL_BLOB_LOCATOR => 31;
use constant SQL_BOOLEAN => 16;
use constant SQL_CHAR => 1;
use constant SQL_CLOB => 40;
use constant SQL_CLOB_LOCATOR => 41;
use constant SQL_DATE => 9;
use constant SQL_DATETIME => 9;
use constant SQL_DECIMAL => 3;
use constant SQL_DOUBLE => 8;
use constant SQL_FLOAT => 6;
use constant SQL_GUID => (-11);
use constant SQL_INTEGER => 4;
use constant SQL_INTERVAL => 10;
use constant SQL_INTERVAL_DAY => 103;
use constant SQL_INTERVAL_DAY_TO_HOUR => 108;
use constant SQL_INTERVAL_DAY_TO_MINUTE => 109;
use constant SQL_INTERVAL_DAY_TO_SECOND => 110;
use constant SQL_INTERVAL_HOUR => 104;
use constant SQL_INTERVAL_HOUR_TO_MINUTE => 111;
use constant SQL_INTERVAL_HOUR_TO_SECOND => 112;
use constant SQL_INTERVAL_MINUTE => 105;
use constant SQL_INTERVAL_MINUTE_TO_SECOND => 113;
use constant SQL_INTERVAL_MONTH => 102;
use constant SQL_INTERVAL_SECOND => 106;
use constant SQL_INTERVAL_YEAR => 101;
use constant SQL_INTERVAL_YEAR_TO_MONTH => 107;
use constant SQL_LONGVARBINARY => (-4);
use constant SQL_LONGVARCHAR => (-1);
use constant SQL_MULTISET => 55;
use constant SQL_MULTISET_LOCATOR => 56;
use constant SQL_NUMERIC => 2;
use constant SQL_REAL => 7;
use constant SQL_REF => 20;
use constant SQL_ROW => 19;
use constant SQL_SMALLINT => 5;
use constant SQL_TIME => 10;
use constant SQL_TIMESTAMP => 11;
use constant SQL_TINYINT => (-6);
use constant SQL_TYPE_DATE => 91;
use constant SQL_TYPE_TIME => 92;
use constant SQL_TYPE_TIMESTAMP => 93;
use constant SQL_TYPE_TIMESTAMP_WITH_TIMEZONE => 95;
use constant SQL_TYPE_TIME_WITH_TIMEZONE => 94;
use constant SQL_UDT => 17;
use constant SQL_UDT_LOCATOR => 18;
use constant SQL_UNKNOWN_TYPE => 0;
use constant SQL_VARBINARY => (-3);
use constant SQL_VARCHAR => 12;
use constant SQL_WCHAR => (-8);
use constant SQL_WLONGVARCHAR => (-10);
use constant SQL_WVARCHAR => (-9);
# for Cursor types
use constant SQL_CURSOR_FORWARD_ONLY => 0;
use constant SQL_CURSOR_KEYSET_DRIVEN => 1;
use constant SQL_CURSOR_DYNAMIC => 2;
use constant SQL_CURSOR_STATIC => 3;
use constant SQL_CURSOR_TYPE_DEFAULT => SQL_CURSOR_FORWARD_ONLY;
use constant IMA_HAS_USAGE => 0x0001; #/* check parameter usage */
use constant IMA_FUNC_REDIRECT => 0x0002; #/* is $h->func(..., "method")*/
use constant IMA_KEEP_ERR => 0x0004; #/* don't reset err & errstr */
use constant IMA_KEEP_ERR_SUB => 0x0008; #/* '' if in nested call */
use constant IMA_NO_TAINT_IN => 0x0010; #/* don't check for tainted args*/
use constant IMA_NO_TAINT_OUT => 0x0020; #/* don't taint results */
use constant IMA_COPY_UP_STMT => 0x0040; #/* copy sth Statement to dbh */
use constant IMA_END_WORK => 0x0080; #/* set on commit & rollback */
use constant IMA_STUB => 0x0100; #/* do nothing eg $dbh->connected */
use constant IMA_CLEAR_STMT => 0x0200; #/* clear Statement before call */
use constant IMA_UNRELATED_TO_STMT=> 0x0400; #/* profile as empty Statement */
use constant IMA_NOT_FOUND_OKAY => 0x0800; #/* not error if not found */
use constant IMA_EXECUTE => 0x1000; #/* do/execute: DBIcf_Executed */
use constant IMA_SHOW_ERR_STMT => 0x2000; #/* dbh meth relates to Statement*/
use constant IMA_HIDE_ERR_PARAMVALUES => 0x4000; #/* ParamValues are not relevant */
use constant IMA_IS_FACTORY => 0x8000; #/* new h ie connect & prepare */
use constant IMA_CLEAR_CACHED_KIDS => 0x10000; #/* clear CachedKids before call */
use constant DBIstcf_STRICT => 0x0001;
use constant DBIstcf_DISCARD_STRING => 0x0002;
my %is_flag_attribute = map {$_ =>1 } qw(
Active
AutoCommit
ChopBlanks
CompatMode
Executed
Taint
TaintIn
TaintOut
InactiveDestroy
AutoInactiveDestroy
LongTruncOk
MultiThread
PrintError
PrintWarn
RaiseError
ShowErrorStatement
Warn
);
my %is_valid_attribute = map {$_ =>1 } (keys %is_flag_attribute, qw(
ActiveKids
Attribution
BegunWork
CachedKids
Callbacks
ChildHandles
CursorName
Database
DebugDispatch
Driver
Err
Errstr
ErrCount
FetchHashKeyName
HandleError
HandleSetErr
ImplementorClass
Kids
LongReadLen
NAME NAME_uc NAME_lc NAME_uc_hash NAME_lc_hash
NULLABLE
NUM_OF_FIELDS
NUM_OF_PARAMS
Name
PRECISION
ParamValues
Profile
Provider
ReadOnly
RootClass
RowCacheSize
RowsInCache
SCALE
State
Statement
TYPE
Type
TraceLevel
Username
Version
));
sub valid_attribute {
my $attr = shift;
return 1 if $is_valid_attribute{$attr};
return 1 if $attr =~ m/^[a-z]/; # starts with lowercase letter
return 0
}
my $initial_setup;
sub initial_setup {
$initial_setup = 1;
print $DBI::tfh __FILE__ . " version " . $DBI::PurePerl::VERSION . "\n"
if $DBI::dbi_debug & 0xF;
untie $DBI::err;
untie $DBI::errstr;
untie $DBI::state;
untie $DBI::rows;
#tie $DBI::lasth, 'DBI::var', '!lasth'; # special case: return boolean
}
sub _install_method {
my ( $caller, $method, $from, $param_hash ) = @_;
initial_setup() unless $initial_setup;
my ($class, $method_name) = $method =~ /^[^:]+::(.+)::(.+)$/;
my $bitmask = $param_hash->{'O'} || 0;
my @pre_call_frag;
return if $method_name eq 'can';
push @pre_call_frag, q{
delete $h->{CachedKids};
# ignore DESTROY for outer handle (DESTROY for inner likely to follow soon)
return if $h_inner;
# handle AutoInactiveDestroy and InactiveDestroy
$h->{InactiveDestroy} = 1
if $h->{AutoInactiveDestroy} and $$ != $h->{dbi_pp_pid};
$h->{Active} = 0
if $h->{InactiveDestroy};
# copy err/errstr/state up to driver so $DBI::err etc still work
if ($h->{err} and my $drh = $h->{Driver}) {
$drh->{$_} = $h->{$_} for ('err','errstr','state');
}
} if $method_name eq 'DESTROY';
push @pre_call_frag, q{
return $h->{$_[0]} if exists $h->{$_[0]};
} if $method_name eq 'FETCH' && !exists $ENV{DBI_TRACE}; # XXX ?
push @pre_call_frag, "return;"
if IMA_STUB & $bitmask;
push @pre_call_frag, q{
$method_name = pop @_;
} if IMA_FUNC_REDIRECT & $bitmask;
push @pre_call_frag, q{
my $parent_dbh = $h->{Database};
} if (IMA_COPY_UP_STMT|IMA_EXECUTE) & $bitmask;
push @pre_call_frag, q{
warn "No Database set for $h on $method_name!" unless $parent_dbh; # eg proxy problems
$parent_dbh->{Statement} = $h->{Statement} if $parent_dbh;
} if IMA_COPY_UP_STMT & $bitmask;
push @pre_call_frag, q{
$h->{Executed} = 1;
$parent_dbh->{Executed} = 1 if $parent_dbh;
} if IMA_EXECUTE & $bitmask;
push @pre_call_frag, q{
%{ $h->{CachedKids} } = () if $h->{CachedKids};
} if IMA_CLEAR_CACHED_KIDS & $bitmask;
if (IMA_KEEP_ERR & $bitmask) {
push @pre_call_frag, q{
my $keep_error = DBI::_err_hash($h);
};
}
else {
my $ke_init = (IMA_KEEP_ERR_SUB & $bitmask)
? q{= ($h->{dbi_pp_parent}->{dbi_pp_call_depth} && DBI::_err_hash($h)) }
: "";
push @pre_call_frag, qq{
my \$keep_error $ke_init;
};
my $clear_error_code = q{
#warn "$method_name cleared err";
$h->{err} = $DBI::err = undef;
$h->{errstr} = $DBI::errstr = undef;
$h->{state} = $DBI::state = '';
};
$clear_error_code = q{
printf $DBI::tfh " !! %s: %s CLEARED by call to }.$method_name.q{ method\n".
$h->{err}, $h->{err}
if defined $h->{err} && $DBI::dbi_debug & 0xF;
}. $clear_error_code
if exists $ENV{DBI_TRACE};
push @pre_call_frag, ($ke_init)
? qq{ unless (\$keep_error) { $clear_error_code }}
: $clear_error_code
unless $method_name eq 'set_err';
}
push @pre_call_frag, q{
my $ErrCount = $h->{ErrCount};
};
push @pre_call_frag, q{
if (($DBI::dbi_debug & 0xF) >= 2) {
local $^W;
my $args = join " ", map { DBI::neat($_) } ($h, @_);
printf $DBI::tfh " > $method_name in $imp ($args) [$@]\n";
}
} if exists $ENV{DBI_TRACE}; # note use of 'exists'
push @pre_call_frag, q{
$h->{'dbi_pp_last_method'} = $method_name;
} unless exists $DBI::last_method_except{$method_name};
# --- post method call code fragments ---
my @post_call_frag;
push @post_call_frag, q{
if (my $trace_level = ($DBI::dbi_debug & 0xF)) {
if ($h->{err}) {
printf $DBI::tfh " !! ERROR: %s %s\n", $h->{err}, $h->{errstr};
}
my $ret = join " ", map { DBI::neat($_) } @ret;
my $msg = " < $method_name= $ret";
$msg = ($trace_level >= 2) ? Carp::shortmess($msg) : "$msg\n";
print $DBI::tfh $msg;
}
} if exists $ENV{DBI_TRACE}; # note use of exists
push @post_call_frag, q{
$h->{Executed} = 0;
if ($h->{BegunWork}) {
$h->{BegunWork} = 0;
$h->{AutoCommit} = 1;
}
} if IMA_END_WORK & $bitmask;
push @post_call_frag, q{
if ( ref $ret[0] and
UNIVERSAL::isa($ret[0], 'DBI::_::common') and
defined( (my $h_new = tied(%{$ret[0]})||$ret[0])->{err} )
) {
# copy up info/warn to drh so PrintWarn on connect is triggered
$h->set_err($h_new->{err}, $h_new->{errstr}, $h_new->{state})
}
} if IMA_IS_FACTORY & $bitmask;
push @post_call_frag, q{
if ($keep_error) {
$keep_error = 0
if $h->{ErrCount} > $ErrCount
or DBI::_err_hash($h) ne $keep_error;
}
$DBI::err = $h->{err};
$DBI::errstr = $h->{errstr};
$DBI::state = $h->{state};
if ( !$keep_error
&& defined(my $err = $h->{err})
&& ($call_depth <= 1 && !$h->{dbi_pp_parent}{dbi_pp_call_depth})
) {
my($pe,$pw,$re,$he) = @{$h}{qw(PrintError PrintWarn RaiseError HandleError)};
my $msg;
if ($err && ($pe || $re || $he) # error
or (!$err && length($err) && $pw) # warning
) {
my $last = ($DBI::last_method_except{$method_name})
? ($h->{'dbi_pp_last_method'}||$method_name) : $method_name;
my $errstr = $h->{errstr} || $DBI::errstr || $err || '';
my $msg = sprintf "%s %s %s: %s", $imp, $last,
($err eq "0") ? "warning" : "failed", $errstr;
if ($h->{'ShowErrorStatement'} and my $Statement = $h->{Statement}) {
$msg .= ' [for Statement "' . $Statement;
if (my $ParamValues = $h->FETCH('ParamValues')) {
$msg .= '" with ParamValues: ';
$msg .= DBI::_concat_hash_sorted($ParamValues, "=", ", ", 1, undef);
$msg .= "]";
}
else {
$msg .= '"]';
}
}
if ($err eq "0") { # is 'warning' (not info)
carp $msg if $pw;
}
else {
my $do_croak = 1;
if (my $subsub = $h->{'HandleError'}) {
$do_croak = 0 if &$subsub($msg,$h,$ret[0]);
}
if ($do_croak) {
printf $DBI::tfh " $method_name has failed ($h->{PrintError},$h->{RaiseError})\n"
if ($DBI::dbi_debug & 0xF) >= 4;
carp $msg if $pe;
die $msg if $h->{RaiseError};
}
}
}
}
};
my $method_code = q[
sub {
my $h = shift;
my $h_inner = tied(%$h);
$h = $h_inner if $h_inner;
my $imp;
if ($method_name eq 'DESTROY') {
# during global destruction, $h->{...} can trigger "Can't call FETCH on an undef value"
# implying that tied() above lied to us, so we need to use eval
local $@; # protect $@
$imp = eval { $h->{"ImplementorClass"} } or return; # probably global destruction
}
else {
$imp = $h->{"ImplementorClass"} or do {
warn "Can't call $method_name method on handle $h after take_imp_data()\n"
if not exists $h->{Active};
return; # or, more likely, global destruction
};
}
] . join("\n", '', @pre_call_frag, '') . q[
my $call_depth = $h->{'dbi_pp_call_depth'} + 1;
local ($h->{'dbi_pp_call_depth'}) = $call_depth;
my @ret;
my $sub = $imp->can($method_name);
if (!$sub and IMA_FUNC_REDIRECT & $bitmask and $sub = $imp->can('func')) {
push @_, $method_name;
}
if ($sub) {
(wantarray) ? (@ret = &$sub($h,@_)) : (@ret = scalar &$sub($h,@_));
}
else {
# XXX could try explicit fallback to $imp->can('AUTOLOAD') etc
# which would then let Multiplex pass PurePerl tests, but some
# hook into install_method may be better.
croak "Can't locate DBI object method \"$method_name\" via package \"$imp\""
if ] . ((IMA_NOT_FOUND_OKAY & $bitmask) ? 0 : 1) . q[;
}
] . join("\n", '', @post_call_frag, '') . q[
return (wantarray) ? @ret : $ret[0];
}
];
no strict qw(refs);
my $code_ref = eval qq{#line 1 "DBI::PurePerl $method"\n$method_code};
warn "$@\n$method_code\n" if $@;
die "$@\n$method_code\n" if $@;
*$method = $code_ref;
if (0 && $method =~ /\b(connect|FETCH)\b/) { # debuging tool
my $l=0; # show line-numbered code for method
warn "*$method code:\n".join("\n", map { ++$l.": $_" } split/\n/,$method_code);
}
}
sub _new_handle {
my ($class, $parent, $attr, $imp_data, $imp_class) = @_;
DBI->trace_msg(" New $class (for $imp_class, parent=$parent, id=".($imp_data||'').")\n")
if $DBI::dbi_debug >= 3;
$attr->{ImplementorClass} = $imp_class
or Carp::croak("_new_handle($class): 'ImplementorClass' attribute not given");
# This is how we create a DBI style Object:
# %outer gets tied to %$attr (which becomes the 'inner' handle)
my (%outer, $i, $h);
$i = tie %outer, $class, $attr; # ref to inner hash (for driver)
$h = bless \%outer, $class; # ref to outer hash (for application)
# The above tie and bless may migrate down into _setup_handle()...
# Now add magic so DBI method dispatch works
DBI::_setup_handle($h, $imp_class, $parent, $imp_data);
return $h unless wantarray;
return ($h, $i);
}
sub _setup_handle {
my($h, $imp_class, $parent, $imp_data) = @_;
my $h_inner = tied(%$h) || $h;
if (($DBI::dbi_debug & 0xF) >= 4) {
local $^W;
print $DBI::tfh " _setup_handle(@_)\n";
}
$h_inner->{"imp_data"} = $imp_data;
$h_inner->{"ImplementorClass"} = $imp_class;
$h_inner->{"Kids"} = $h_inner->{"ActiveKids"} = 0; # XXX not maintained
if ($parent) {
foreach (qw(
RaiseError PrintError PrintWarn HandleError HandleSetErr
Warn LongTruncOk ChopBlanks AutoCommit ReadOnly
ShowErrorStatement FetchHashKeyName LongReadLen CompatMode
)) {
$h_inner->{$_} = $parent->{$_}
if exists $parent->{$_} && !exists $h_inner->{$_};
}
if (ref($parent) =~ /::db$/) { # is sth
$h_inner->{Database} = $parent;
$parent->{Statement} = $h_inner->{Statement};
$h_inner->{NUM_OF_PARAMS} = 0;
$h_inner->{Active} = 0; # driver sets true when there's data to fetch
}
elsif (ref($parent) =~ /::dr$/){ # is dbh
$h_inner->{Driver} = $parent;
$h_inner->{Active} = 0;
}
else {
warn "panic: ".ref($parent); # should never happen
}
$h_inner->{dbi_pp_parent} = $parent;
# add to the parent's ChildHandles
if ($HAS_WEAKEN) {
my $handles = $parent->{ChildHandles} ||= [];
push @$handles, $h;
Scalar::Util::weaken($handles->[-1]);
# purge destroyed handles occasionally
if (@$handles % 120 == 0) {
@$handles = grep { defined } @$handles;
Scalar::Util::weaken($_) for @$handles; # re-weaken after grep
}
}
}
else { # setting up a driver handle
$h_inner->{Warn} = 1;
$h_inner->{PrintWarn} = 1;
$h_inner->{AutoCommit} = 1;
$h_inner->{TraceLevel} = 0;
$h_inner->{CompatMode} = (1==0);
$h_inner->{FetchHashKeyName} ||= 'NAME';
$h_inner->{LongReadLen} ||= 80;
$h_inner->{ChildHandles} ||= [] if $HAS_WEAKEN;
$h_inner->{Type} ||= 'dr';
$h_inner->{Active} = 1;
}
$h_inner->{"dbi_pp_call_depth"} = 0;
$h_inner->{"dbi_pp_pid"} = $$;
$h_inner->{ErrCount} = 0;
}
sub constant {
warn "constant(@_) called unexpectedly"; return undef;
}
sub trace {
my ($h, $level, $file) = @_;
$level = $h->parse_trace_flags($level)
if defined $level and !DBI::looks_like_number($level);
my $old_level = $DBI::dbi_debug;
_set_trace_file($file) if $level;
if (defined $level) {
$DBI::dbi_debug = $level;
print $DBI::tfh " DBI $DBI::VERSION (PurePerl) "
. "dispatch trace level set to $DBI::dbi_debug\n"
if $DBI::dbi_debug & 0xF;
}
_set_trace_file($file) if !$level;
return $old_level;
}
sub _set_trace_file {
my ($file) = @_;
#
# DAA add support for filehandle inputs
#
# DAA required to avoid closing a prior fh trace()
$DBI::tfh = undef unless $DBI::tfh_needs_close;
if (ref $file eq 'GLOB') {
$DBI::tfh = $file;
select((select($DBI::tfh), $| = 1)[0]);
$DBI::tfh_needs_close = 0;
return 1;
}
if ($file && ref \$file eq 'GLOB') {
$DBI::tfh = *{$file}{IO};
select((select($DBI::tfh), $| = 1)[0]);
$DBI::tfh_needs_close = 0;
return 1;
}
$DBI::tfh_needs_close = 1;
if (!$file || $file eq 'STDERR') {
open $DBI::tfh, ">&STDERR" or carp "Can't dup STDERR: $!";
}
elsif ($file eq 'STDOUT') {
open $DBI::tfh, ">&STDOUT" or carp "Can't dup STDOUT: $!";
}
else {
open $DBI::tfh, ">>$file" or carp "Can't open $file: $!";
}
select((select($DBI::tfh), $| = 1)[0]);
return 1;
}
sub _get_imp_data { shift->{"imp_data"}; }
sub _svdump { }
sub dump_handle {
my ($h,$msg,$level) = @_;
$msg||="dump_handle $h";
print $DBI::tfh "$msg:\n";
for my $attrib (sort keys %$h) {
print $DBI::tfh "\t$attrib => ".DBI::neat($h->{$attrib})."\n";
}
}
sub _handles {
my $h = shift;
my $h_inner = tied %$h;
if ($h_inner) { # this is okay
return $h unless wantarray;
return ($h, $h_inner);
}
# XXX this isn't okay... we have an inner handle but
# currently have no way to get at its outer handle,
# so we just warn and return the inner one for both...
Carp::carp("Can't return outer handle from inner handle using DBI::PurePerl");
return $h unless wantarray;
return ($h,$h);
}
sub hash {
my ($key, $type) = @_;
my ($hash);
if (!$type) {
$hash = 0;
# XXX The C version uses the "char" type, which could be either
# signed or unsigned. I use signed because so do the two
# compilers on my system.
for my $char (unpack ("c*", $key)) {
$hash = $hash * 33 + $char;
}
$hash &= 0x7FFFFFFF; # limit to 31 bits
$hash |= 0x40000000; # set bit 31
return -$hash; # return negative int
}
elsif ($type == 1) { # Fowler/Noll/Vo hash
# see http://www.isthe.com/chongo/tech/comp/fnv/
require Math::BigInt; # feel free to reimplement w/o BigInt!
(my $version = $Math::BigInt::VERSION || 0) =~ s/_.*//; # eg "1.70_01"
if ($version >= 1.56) {
$hash = Math::BigInt->new(0x811c9dc5);
for my $uchar (unpack ("C*", $key)) {
# multiply by the 32 bit FNV magic prime mod 2^64
$hash = ($hash * 0x01000193) & 0xffffffff;
# xor the bottom with the current octet
$hash ^= $uchar;
}
# cast to int
return unpack "i", pack "i", $hash;
}
croak("DBI::PurePerl doesn't support hash type 1 without Math::BigInt >= 1.56 (available on CPAN)");
}
else {
croak("bad hash type $type");
}
}
sub looks_like_number {
my @new = ();
for my $thing(@_) {
if (!defined $thing or $thing eq '') {
push @new, undef;
}
else {
push @new, ($thing =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/) ? 1 : 0;
}
}
return (@_ >1) ? @new : $new[0];
}
sub neat {
my $v = shift;
return "undef" unless defined $v;
my $quote = q{"};
if (not utf8::is_utf8($v)) {
return $v if (($v & ~ $v) eq "0"); # is SvNIOK
$quote = q{'};
}
my $maxlen = shift || $DBI::neat_maxlen;
if ($maxlen && $maxlen < length($v) + 2) {
$v = substr($v,0,$maxlen-5);
$v .= '...';
}
$v =~ s/[^[:print:]]/./g;
return "$quote$v$quote";
}
sub sql_type_cast {
my (undef, $sql_type, $flags) = @_;
return -1 unless defined $_[0];
my $cast_ok = 1;
my $evalret = eval {
use warnings FATAL => qw(numeric);
if ($sql_type == SQL_INTEGER) {
my $dummy = $_[0] + 0;
return 1;
}
elsif ($sql_type == SQL_DOUBLE) {
my $dummy = $_[0] + 0.0;
return 1;
}
elsif ($sql_type == SQL_NUMERIC) {
my $dummy = $_[0] + 0.0;
return 1;
}
else {
return -2;
}
} or $^W && warn $@; # XXX warnings::warnif("numeric", $@) ?
return $evalret if defined($evalret) && ($evalret == -2);
$cast_ok = 0 unless $evalret;
# DBIstcf_DISCARD_STRING not supported for PurePerl currently
return 2 if $cast_ok;
return 0 if $flags & DBIstcf_STRICT;
return 1;
}
sub dbi_time {
return time();
}
sub DBI::st::TIEHASH { bless $_[1] => $_[0] };
sub _concat_hash_sorted {
my ( $hash_ref, $kv_separator, $pair_separator, $use_neat, $num_sort ) = @_;
# $num_sort: 0=lexical, 1=numeric, undef=try to guess
return undef unless defined $hash_ref;
die "hash is not a hash reference" unless ref $hash_ref eq 'HASH';
my $keys = _get_sorted_hash_keys($hash_ref, $num_sort);
my $string = '';
for my $key (@$keys) {
$string .= $pair_separator if length $string > 0;
my $value = $hash_ref->{$key};
if ($use_neat) {
$value = DBI::neat($value, 0);
}
else {
$value = (defined $value) ? "'$value'" : 'undef';
}
$string .= $key . $kv_separator . $value;
}
return $string;
}
sub _get_sorted_hash_keys {
my ($hash_ref, $num_sort) = @_;
if (not defined $num_sort) {
my $sort_guess = 1;
$sort_guess = (not looks_like_number($_)) ? 0 : $sort_guess
for keys %$hash_ref;
$num_sort = $sort_guess;
}
my @keys = keys %$hash_ref;
no warnings 'numeric';
my @sorted = ($num_sort)
? sort { $a <=> $b or $a cmp $b } @keys
: sort @keys;
return \@sorted;
}
sub _err_hash {
return 1 unless defined $_[0]->{err};
return "$_[0]->{err} $_[0]->{errstr}"
}
package
DBI::var;
sub FETCH {
my($key)=shift;
return $DBI::err if $$key eq '*err';
return $DBI::errstr if $$key eq '&errstr';
Carp::confess("FETCH $key not supported when using DBI::PurePerl");
}
package
DBD::_::common;
sub swap_inner_handle {
my ($h1, $h2) = @_;
# can't make this work till we can get the outer handle from the inner one
# probably via a WeakRef
return $h1->set_err($DBI::stderr, "swap_inner_handle not currently supported by DBI::PurePerl");
}
sub trace { # XXX should set per-handle level, not global
my ($h, $level, $file) = @_;
$level = $h->parse_trace_flags($level)
if defined $level and !DBI::looks_like_number($level);
my $old_level = $DBI::dbi_debug;
DBI::_set_trace_file($file) if defined $file;
if (defined $level) {
$DBI::dbi_debug = $level;
if ($DBI::dbi_debug) {
printf $DBI::tfh
" %s trace level set to %d in DBI $DBI::VERSION (PurePerl)\n",
$h, $DBI::dbi_debug;
print $DBI::tfh " Full trace not available because DBI_TRACE is not in environment\n"
unless exists $ENV{DBI_TRACE};
}
}
return $old_level;
}
*debug = \&trace; *debug = \&trace; # twice to avoid typo warning
sub FETCH {
my($h,$key)= @_;
my $v = $h->{$key};
#warn ((exists $h->{$key}) ? "$key=$v\n" : "$key NONEXISTANT\n");
return $v if defined $v;
if ($key =~ /^NAME_.c$/) {
my $cols = $h->FETCH('NAME');
return undef unless $cols;
my @lcols = map { lc $_ } @$cols;
$h->{NAME_lc} = \@lcols;
my @ucols = map { uc $_ } @$cols;
$h->{NAME_uc} = \@ucols;
return $h->FETCH($key);
}
if ($key =~ /^NAME.*_hash$/) {
my $i=0;
for my $c(@{$h->FETCH('NAME')||[]}) {
$h->{'NAME_hash'}->{$c} = $i;
$h->{'NAME_lc_hash'}->{"\L$c"} = $i;
$h->{'NAME_uc_hash'}->{"\U$c"} = $i;
$i++;
}
return $h->{$key};
}
if (!defined $v && !exists $h->{$key}) {
return ($h->FETCH('TaintIn') && $h->FETCH('TaintOut')) if $key eq'Taint';
return (1==0) if $is_flag_attribute{$key}; # return perl-style sv_no, not undef
return $DBI::dbi_debug if $key eq 'TraceLevel';
return [] if $key eq 'ChildHandles' && $HAS_WEAKEN;
if ($key eq 'Type') {
return "dr" if $h->isa('DBI::dr');
return "db" if $h->isa('DBI::db');
return "st" if $h->isa('DBI::st');
Carp::carp( sprintf "Can't determine Type for %s",$h );
}
if (!$is_valid_attribute{$key} and $key =~ m/^[A-Z]/) {
local $^W; # hide undef warnings
Carp::carp( sprintf "Can't get %s->{%s}: unrecognised attribute (@{[ %$h ]})",$h,$key )
}
}
return $v;
}
sub STORE {
my ($h,$key,$value) = @_;
if ($key eq 'AutoCommit') {
Carp::croak("DBD driver has not implemented the AutoCommit attribute")
unless $value == -900 || $value == -901;
$value = ($value == -901);
}
elsif ($key =~ /^Taint/ ) {
Carp::croak(sprintf "Can't set %s->{%s}: Taint mode not supported by DBI::PurePerl",$h,$key)
if $value;
}
elsif ($key eq 'TraceLevel') {
$h->trace($value);
return 1;
}
elsif ($key eq 'NUM_OF_FIELDS') {
$h->{$key} = $value;
if ($value) {
my $fbav = DBD::_::st::dbih_setup_fbav($h);
@$fbav = (undef) x $value if @$fbav != $value;
}
return 1;
}
elsif (!$is_valid_attribute{$key} && $key =~ /^[A-Z]/ && !exists $h->{$key}) {
Carp::carp(sprintf "Can't set %s->{%s}: unrecognised attribute or invalid value %s",
$h,$key,$value);
}
$h->{$key} = $is_flag_attribute{$key} ? !!$value : $value;
Scalar::Util::weaken($h->{$key}) if $key eq 'CachedKids';
return 1;
}
sub DELETE {
my ($h, $key) = @_;
return $h->FETCH($key) unless $key =~ /^private_/;
return delete $h->{$key};
}
sub err { return shift->{err} }
sub errstr { return shift->{errstr} }
sub state { return shift->{state} }
sub set_err {
my ($h, $errnum,$msg,$state, $method, $rv) = @_;
$h = tied(%$h) || $h;
if (my $hss = $h->{HandleSetErr}) {
return if $hss->($h, $errnum, $msg, $state, $method);
}
if (!defined $errnum) {
$h->{err} = $DBI::err = undef;
$h->{errstr} = $DBI::errstr = undef;
$h->{state} = $DBI::state = '';
return;
}
if ($h->{errstr}) {
$h->{errstr} .= sprintf " [err was %s now %s]", $h->{err}, $errnum
if $h->{err} && $errnum && $h->{err} ne $errnum;
$h->{errstr} .= sprintf " [state was %s now %s]", $h->{state}, $state
if $h->{state} and $h->{state} ne "S1000" && $state && $h->{state} ne $state;
$h->{errstr} .= "\n$msg" if $h->{errstr} ne $msg;
$DBI::errstr = $h->{errstr};
}
else {
$h->{errstr} = $DBI::errstr = $msg;
}
# assign if higher priority: err > "0" > "" > undef
my $err_changed;
if ($errnum # new error: so assign
or !defined $h->{err} # no existing warn/info: so assign
# new warn ("0" len 1) > info ("" len 0): so assign
or defined $errnum && length($errnum) > length($h->{err})
) {
$h->{err} = $DBI::err = $errnum;
++$h->{ErrCount} if $errnum;
++$err_changed;
}
if ($err_changed) {
$state ||= "S1000" if $DBI::err;
$h->{state} = $DBI::state = ($state eq "00000") ? "" : $state
if $state;
}
if (my $p = $h->{Database}) { # just sth->dbh, not dbh->drh (see ::db::DESTROY)
$p->{err} = $DBI::err;
$p->{errstr} = $DBI::errstr;
$p->{state} = $DBI::state;
}
$h->{'dbi_pp_last_method'} = $method;
return $rv; # usually undef
}
sub trace_msg {
my ($h, $msg, $minlevel)=@_;
$minlevel = 1 unless defined $minlevel;
return unless $minlevel <= ($DBI::dbi_debug & 0xF);
print $DBI::tfh $msg;
return 1;
}
sub private_data {
warn "private_data @_";
}
sub take_imp_data {
my $dbh = shift;
# A reasonable default implementation based on the one in DBI.xs.
# Typically a pure-perl driver would have their own take_imp_data method
# that would delete all but the essential items in the hash before ending with:
# return $dbh->SUPER::take_imp_data();
# Of course it's useless if the driver doesn't also implement support for
# the dbi_imp_data attribute to the connect() method.
require Storable;
croak("Can't take_imp_data from handle that's not Active")
unless $dbh->{Active};
for my $sth (@{ $dbh->{ChildHandles} || [] }) {
next unless $sth;
$sth->finish if $sth->{Active};
bless $sth, 'DBI::zombie';
}
delete $dbh->{$_} for (keys %is_valid_attribute);
delete $dbh->{$_} for grep { m/^dbi_/ } keys %$dbh;
# warn "@{[ %$dbh ]}";
local $Storable::forgive_me = 1; # in case there are some CODE refs
my $imp_data = Storable::freeze($dbh);
# XXX um, should probably untie here - need to check dispatch behaviour
return $imp_data;
}
sub rows {
return -1; # always returns -1 here, see DBD::_::st::rows below
}
sub DESTROY {
}
package
DBD::_::dr;
sub dbixs_revision {
return 0;
}
package
DBD::_::db;
sub connected {
}
package
DBD::_::st;
sub fetchrow_arrayref {
my $h = shift;
# if we're here then driver hasn't implemented fetch/fetchrow_arrayref
# so we assume they've implemented fetchrow_array and call that instead
my @row = $h->fetchrow_array or return;
return $h->_set_fbav(\@row);
}
# twice to avoid typo warning
*fetch = \&fetchrow_arrayref; *fetch = \&fetchrow_arrayref;
sub fetchrow_array {
my $h = shift;
# if we're here then driver hasn't implemented fetchrow_array
# so we assume they've implemented fetch/fetchrow_arrayref
my $row = $h->fetch or return;
return @$row;
}
*fetchrow = \&fetchrow_array; *fetchrow = \&fetchrow_array;
sub fetchrow_hashref {
my $h = shift;
my $row = $h->fetch or return;
my $FetchCase = shift;
my $FetchHashKeyName = $FetchCase || $h->{'FetchHashKeyName'} || 'NAME';
my $FetchHashKeys = $h->FETCH($FetchHashKeyName);
my %rowhash;
@rowhash{ @$FetchHashKeys } = @$row;
return \%rowhash;
}
sub dbih_setup_fbav {
my $h = shift;
return $h->{'_fbav'} || do {
$DBI::rows = $h->{'_rows'} = 0;
my $fields = $h->{'NUM_OF_FIELDS'}
or DBI::croak("NUM_OF_FIELDS not set");
my @row = (undef) x $fields;
\@row;
};
}
sub _get_fbav {
my $h = shift;
my $av = $h->{'_fbav'} ||= dbih_setup_fbav($h);
$DBI::rows = ++$h->{'_rows'};
return $av;
}
sub _set_fbav {
my $h = shift;
my $fbav = $h->{'_fbav'};
if ($fbav) {
$DBI::rows = ++$h->{'_rows'};
}
else {
$fbav = $h->_get_fbav;
}
my $row = shift;
if (my $bc = $h->{'_bound_cols'}) {
for my $i (0..@$row-1) {
my $bound = $bc->[$i];
$fbav->[$i] = ($bound) ? ($$bound = $row->[$i]) : $row->[$i];
}
}
else {
@$fbav = @$row;
}
return $fbav;
}
sub bind_col {
my ($h, $col, $value_ref,$from_bind_columns) = @_;
my $fbav = $h->{'_fbav'} ||= dbih_setup_fbav($h); # from _get_fbav()
my $num_of_fields = @$fbav;
DBI::croak("bind_col: column $col is not a valid column (1..$num_of_fields)")
if $col < 1 or $col > $num_of_fields;
return 1 if not defined $value_ref; # ie caller is just trying to set TYPE
DBI::croak("bind_col($col,$value_ref) needs a reference to a scalar")
unless ref $value_ref eq 'SCALAR';
$h->{'_bound_cols'}->[$col-1] = $value_ref;
return 1;
}
sub finish {
my $h = shift;
$h->{'_fbav'} = undef;
$h->{'Active'} = 0;
return 1;
}
sub rows {
my $h = shift;
my $rows = $h->{'_rows'};
return -1 unless defined $rows;
return $rows;
}
1;
__END__
=pod
=head1 NAME
DBI::PurePerl -- a DBI emulation using pure perl (no C/XS compilation required)
=head1 SYNOPSIS
BEGIN { $ENV{DBI_PUREPERL} = 2 }
use DBI;
=head1 DESCRIPTION
This is a pure perl emulation of the DBI internals. In almost all
cases you will be better off using standard DBI since the portions
of the standard version written in C make it *much* faster.
However, if you are in a situation where it isn't possible to install
a compiled version of standard DBI, and you're using pure-perl DBD
drivers, then this module allows you to use most common features
of DBI without needing any changes in your scripts.
=head1 EXPERIMENTAL STATUS
DBI::PurePerl is new so please treat it as experimental pending
more extensive testing. So far it has passed all tests with DBD::CSV,
DBD::AnyData, DBD::XBase, DBD::Sprite, DBD::mysqlPP. Please send
bug reports to Jeff Zucker at <jeff@vpservices.com> with a cc to
<dbi-dev@perl.org>.
=head1 USAGE
The usage is the same as for standard DBI with the exception
that you need to set the environment variable DBI_PUREPERL if
you want to use the PurePerl version.
DBI_PUREPERL == 0 (the default) Always use compiled DBI, die
if it isn't properly compiled & installed
DBI_PUREPERL == 1 Use compiled DBI if it is properly compiled
& installed, otherwise use PurePerl
DBI_PUREPERL == 2 Always use PurePerl
You may set the environment variable in your shell (e.g. with
set or setenv or export, etc) or else set it in your script like
this:
BEGIN { $ENV{DBI_PUREPERL}=2 }
before you C<use DBI;>.
=head1 INSTALLATION
In most situations simply install DBI (see the DBI pod for details).
In the situation in which you can not install DBI itself, you
may manually copy DBI.pm and PurePerl.pm into the appropriate
directories.
For example:
cp DBI.pm /usr/jdoe/mylibs/.
cp PurePerl.pm /usr/jdoe/mylibs/DBI/.
Then add this to the top of scripts:
BEGIN {
$ENV{DBI_PUREPERL} = 1; # or =2
unshift @INC, '/usr/jdoe/mylibs';
}
(Or should we perhaps patch Makefile.PL so that if DBI_PUREPERL
is set to 2 prior to make, the normal compile process is skipped
and the files are installed automatically?)
=head1 DIFFERENCES BETWEEN DBI AND DBI::PurePerl
=head2 Attributes
Boolean attributes still return boolean values but the actual values
used may be different, i.e., 0 or undef instead of an empty string.
Some handle attributes are either not supported or have very limited
functionality:
ActiveKids
InactiveDestroy
AutoInactiveDestroy
Kids
Taint
TaintIn
TaintOut
(and probably others)
=head2 Tracing
Trace functionality is more limited and the code to handle tracing is
only embedded into DBI:PurePerl if the DBI_TRACE environment variable
is defined. To enable total tracing you can set the DBI_TRACE
environment variable as usual. But to enable individual handle
tracing using the trace() method you also need to set the DBI_TRACE
environment variable, but set it to 0.
=head2 Parameter Usage Checking
The DBI does some basic parameter count checking on method calls.
DBI::PurePerl doesn't.
=head2 Speed
DBI::PurePerl is slower. Although, with some drivers in some
contexts this may not be very significant for you.
By way of example... the test.pl script in the DBI source
distribution has a simple benchmark that just does:
my $null_dbh = DBI->connect('dbi:NullP:','','');
my $i = 10_000;
$null_dbh->prepare('') while $i--;
In other words just prepares a statement, creating and destroying
a statement handle, over and over again. Using the real DBI this
runs at ~4550 handles per second whereas DBI::PurePerl manages
~2800 per second on the same machine (not too bad really).
=head2 May not fully support hash()
If you want to use type 1 hash, i.e., C<hash($string,1)> with
DBI::PurePerl, you'll need version 1.56 or higher of Math::BigInt
(available on CPAN).
=head2 Doesn't support preparse()
The DBI->preparse() method isn't supported in DBI::PurePerl.
=head2 Doesn't support DBD::Proxy
There's a subtle problem somewhere I've not been able to identify.
DBI::ProxyServer seem to work fine with DBI::PurePerl but DBD::Proxy
does not work 100% (which is sad because that would be far more useful :)
Try re-enabling t/80proxy.t for DBI::PurePerl to see if the problem
that remains will affect you're usage.
=head2 Others
can() - doesn't have any special behaviour
Please let us know if you find any other differences between DBI
and DBI::PurePerl.
=head1 AUTHORS
Tim Bunce and Jeff Zucker.
Tim provided the direction and basis for the code. The original
idea for the module and most of the brute force porting from C to
Perl was by Jeff. Tim then reworked some core parts to boost the
performance and accuracy of the emulation. Thanks also to Randal
Schwartz and John Tobey for patches.
=head1 COPYRIGHT
Copyright (c) 2002 Tim Bunce Ireland.
See COPYRIGHT section in DBI.pm for usage and distribution rights.
=cut
DBI/DBD.pm 0000644 00000367113 15033552504 0006106 0 ustar 00 package DBI::DBD;
# vim:ts=8:sw=4
use strict;
use vars qw($VERSION); # set $VERSION early so we don't confuse PAUSE/CPAN etc
# don't use Revision here because that's not in svn:keywords so that the
# examples that use it below won't be messed up
$VERSION = "12.015129";
# $Id: DBD.pm 15128 2012-02-04 20:51:39Z Tim $
#
# Copyright (c) 1997-2006 Jonathan Leffler, Jochen Wiedmann, Steffen
# Goeldner and Tim Bunce
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
=head1 NAME
DBI::DBD - Perl DBI Database Driver Writer's Guide
=head1 SYNOPSIS
perldoc DBI::DBD
=head2 Version and volatility
This document is I<still> a minimal draft which is in need of further work.
Please read the B<DBI> documentation first and fully. Then look at the
implementation of some high-profile and regularly maintained drivers like
DBD::Oracle, DBD::ODBC, DBD::Pg etc. (Those are no no particular order.)
Then reread the B<DBI> specification and the code of those drivers again as
you're reading this. It'll help. Where this document and the driver code
differ it's likely that the driver code is more correct, especially if multiple
drivers do the same thing.
This document is a patchwork of contributions from various authors.
More contributions (preferably as patches) are very welcome.
=head1 DESCRIPTION
This document is primarily intended to help people writing new
database drivers for the Perl Database Interface (Perl DBI).
It may also help others interested in discovering why the internals of
a B<DBD> driver are written the way they are.
This is a guide. Few (if any) of the statements in it are completely
authoritative under all possible circumstances. This means you will
need to use judgement in applying the guidelines in this document.
If in I<any> doubt at all, please do contact the I<dbi-dev> mailing list
(details given below) where Tim Bunce and other driver authors can help.
=head1 CREATING A NEW DRIVER
The first rule for creating a new database driver for the Perl DBI is
very simple: B<DON'T!>
There is usually a driver already available for the database you want
to use, almost regardless of which database you choose. Very often, the
database will provide an ODBC driver interface, so you can often use
B<DBD::ODBC> to access the database. This is typically less convenient
on a Unix box than on a Microsoft Windows box, but there are numerous
options for ODBC driver managers on Unix too, and very often the ODBC
driver is provided by the database supplier.
Before deciding that you need to write a driver, do your homework to
ensure that you are not wasting your energies.
[As of December 2002, the consensus is that if you need an ODBC driver
manager on Unix, then the unixODBC driver (available from
L<http://www.unixodbc.org/>) is the way to go.]
The second rule for creating a new database driver for the Perl DBI is
also very simple: B<Don't -- get someone else to do it for you!>
Nevertheless, there are occasions when it is necessary to write a new
driver, often to use a proprietary language or API to access the
database more swiftly, or more comprehensively, than an ODBC driver can.
Then you should read this document very carefully, but with a suitably
sceptical eye.
If there is something in here that does not make any sense, question it.
You might be right that the information is bogus, but don't come to that
conclusion too quickly.
=head2 URLs and mailing lists
The primary web-site for locating B<DBI> software and information is
http://dbi.perl.org/
There are two main and one auxiliary mailing lists for people working
with B<DBI>. The primary lists are I<dbi-users@perl.org> for general users
of B<DBI> and B<DBD> drivers, and I<dbi-dev@perl.org> mainly for B<DBD> driver
writers (don't join the I<dbi-dev> list unless you have a good reason).
The auxiliary list is I<dbi-announce@perl.org> for announcing new
releases of B<DBI> or B<DBD> drivers.
You can join these lists by accessing the web-site L<http://dbi.perl.org/>.
The lists are closed so you cannot send email to any of the lists
unless you join the list first.
You should also consider monitoring the I<comp.lang.perl.*> newsgroups,
especially I<comp.lang.perl.modules>.
=head2 The Cheetah book
The definitive book on Perl DBI is the Cheetah book, so called because
of the picture on the cover. Its proper title is 'I<Programming the
Perl DBI: Database programming with Perl>' by Alligator Descartes
and Tim Bunce, published by O'Reilly Associates, February 2000, ISBN
1-56592-699-4. Buy it now if you have not already done so, and read it.
=head2 Locating drivers
Before writing a new driver, it is in your interests to find out
whether there already is a driver for your database. If there is such
a driver, it would be much easier to make use of it than to write your
own!
The primary web-site for locating Perl software is
L<http://search.cpan.org/>. You should look under the various
modules listings for the software you are after. For example:
http://search.cpan.org/modlist/Database_Interfaces
Follow the B<DBD::> and B<DBIx::> links at the top to see those subsets.
See the B<DBI> docs for information on B<DBI> web sites and mailing lists.
=head2 Registering a new driver
Before going through any official registration process, you will need
to establish that there is no driver already in the works. You'll do
that by asking the B<DBI> mailing lists whether there is such a driver
available, or whether anybody is working on one.
When you get the go ahead, you will need to establish the name of the
driver and a prefix for the driver. Typically, the name is based on the
name of the database software it uses, and the prefix is a contraction
of that. Hence, B<DBD::Oracle> has the name I<Oracle> and the prefix
'I<ora_>'. The prefix must be lowercase and contain no underscores other
than the one at the end.
This information will be recorded in the B<DBI> module. Apart from
documentation purposes, registration is a prerequisite for
L<installing private methods|DBI/install_method>.
If you are writing a driver which will not be distributed on CPAN, then
you should choose a prefix beginning with 'I<x_>', to avoid potential
prefix collisions with drivers registered in the future. Thus, if you
wrote a non-CPAN distributed driver called B<DBD::CustomDB>, the prefix
might be 'I<x_cdb_>'.
This document assumes you are writing a driver called B<DBD::Driver>, and
that the prefix 'I<drv_>' is assigned to the driver.
=head2 Two styles of database driver
There are two distinct styles of database driver that can be written to
work with the Perl DBI.
Your driver can be written in pure Perl, requiring no C compiler.
When feasible, this is the best solution, but most databases are not
written in such a way that this can be done. Some examples of pure
Perl drivers are B<DBD::File> and B<DBD::CSV>.
Alternatively, and most commonly, your driver will need to use some C
code to gain access to the database. This will be classified as a C/XS
driver.
=head2 What code will you write?
There are a number of files that need to be written for either a pure
Perl driver or a C/XS driver. There are no extra files needed only by
a pure Perl driver, but there are several extra files needed only by a
C/XS driver.
=head3 Files common to pure Perl and C/XS drivers
Assuming that your driver is called B<DBD::Driver>, these files are:
=over 4
=item * F<Makefile.PL>
=item * F<META.yml>
=item * F<README>
=item * F<MANIFEST>
=item * F<Driver.pm>
=item * F<lib/Bundle/DBD/Driver.pm>
=item * F<lib/DBD/Driver/Summary.pm>
=item * F<t/*.t>
=back
The first four files are mandatory. F<Makefile.PL> is used to control
how the driver is built and installed. The F<README> file tells people
who download the file about how to build the module and any prerequisite
software that must be installed. The F<MANIFEST> file is used by the
standard Perl module distribution mechanism. It lists all the source
files that need to be distributed with your module. F<Driver.pm> is what
is loaded by the B<DBI> code; it contains the methods peculiar to your
driver.
Although the F<META.yml> file is not B<required> you are advised to
create one. Of particular importance are the I<build_requires> and
I<configure_requires> attributes which newer CPAN modules understand.
You use these to tell the CPAN module (and CPANPLUS) that your build
and configure mechanisms require DBI. The best reference for META.yml
(at the time of writing) is
L<http://module-build.sourceforge.net/META-spec-v1.4.html>. You can find
a reasonable example of a F<META.yml> in DBD::ODBC.
The F<lib/Bundle/DBD/Driver.pm> file allows you to specify other Perl
modules on which yours depends in a format that allows someone to type a
simple command and ensure that all the pre-requisites are in place as
well as building your driver.
The F<lib/DBD/Driver/Summary.pm> file contains (an updated version of) the
information that was included - or that would have been included - in
the appendices of the Cheetah book as a summary of the abilities of your
driver and the associated database.
The files in the F<t> subdirectory are unit tests for your driver.
You should write your tests as stringently as possible, while taking
into account the diversity of installations that you can encounter:
=over 4
=item *
Your tests should not casually modify operational databases.
=item *
You should never damage existing tables in a database.
=item *
You should code your tests to use a constrained name space within the
database. For example, the tables (and all other named objects) that are
created could all begin with 'I<dbd_drv_>'.
=item *
At the end of a test run, there should be no testing objects left behind
in the database.
=item *
If you create any databases, you should remove them.
=item *
If your database supports temporary tables that are automatically
removed at the end of a session, then exploit them as often as possible.
=item *
Try to make your tests independent of each other. If you have a
test F<t/t11dowhat.t> that depends upon the successful running
of F<t/t10thingamy.t>, people cannot run the single test case
F<t/t11dowhat.t>. Further, running F<t/t11dowhat.t> twice in a row is
likely to fail (at least, if F<t/t11dowhat.t> modifies the database at
all) because the database at the start of the second run is not what you
saw at the start of the first run.
=item *
Document in your F<README> file what you do, and what privileges people
need to do it.
=item *
You can, and probably should, sequence your tests by including a test
number before an abbreviated version of the test name; the tests are run
in the order in which the names are expanded by shell-style globbing.
=item *
It is in your interests to ensure that your tests work as widely
as possible.
=back
Many drivers also install sub-modules B<DBD::Driver::SubModule>
for any of a variety of different reasons, such as to support
the metadata methods (see the discussion of L</METADATA METHODS>
below). Such sub-modules are conventionally stored in the directory
F<lib/DBD/Driver>. The module itself would usually be in a file
F<SubModule.pm>. All such sub-modules should themselves be version
stamped (see the discussions far below).
=head3 Extra files needed by C/XS drivers
The software for a C/XS driver will typically contain at least four
extra files that are not relevant to a pure Perl driver.
=over 4
=item * F<Driver.xs>
=item * F<Driver.h>
=item * F<dbdimp.h>
=item * F<dbdimp.c>
=back
The F<Driver.xs> file is used to generate C code that Perl can call to gain
access to the C functions you write that will, in turn, call down onto
your database software.
The F<Driver.h> header is a stylized header that ensures you can access the
necessary Perl and B<DBI> macros, types, and function declarations.
The F<dbdimp.h> is used to specify which functions have been implemented by
your driver.
The F<dbdimp.c> file is where you write the C code that does the real work
of translating between Perl-ish data types and what the database expects
to use and return.
There are some (mainly small, but very important) differences between
the contents of F<Makefile.PL> and F<Driver.pm> for pure Perl and C/XS
drivers, so those files are described both in the section on creating a
pure Perl driver and in the section on creating a C/XS driver.
Obviously, you can add extra source code files to the list.
=head2 Requirements on a driver and driver writer
To be remotely useful, your driver must be implemented in a format that
allows it to be distributed via CPAN, the Comprehensive Perl Archive
Network (L<http://www.cpan.org/> and L<http://search.cpan.org>).
Of course, it is easier if you do not have to meet this criterion, but
you will not be able to ask for much help if you do not do so, and
no-one is likely to want to install your module if they have to learn a
new installation mechanism.
=head1 CREATING A PURE PERL DRIVER
Writing a pure Perl driver is surprisingly simple. However, there are
some problems you should be aware of. The best option is of course
picking up an existing driver and carefully modifying one method
after the other.
Also look carefully at B<DBD::AnyData> and B<DBD::Template>.
As an example we take a look at the B<DBD::File> driver, a driver for
accessing plain files as tables, which is part of the B<DBD::CSV> package.
The minimal set of files we have to implement are F<Makefile.PL>,
F<README>, F<MANIFEST> and F<Driver.pm>.
=head2 Pure Perl version of Makefile.PL
You typically start with writing F<Makefile.PL>, a Makefile
generator. The contents of this file are described in detail in
the L<ExtUtils::MakeMaker> man pages. It is definitely a good idea
if you start reading them. At least you should know about the
variables I<CONFIGURE>, I<DEFINED>, I<PM>, I<DIR>, I<EXE_FILES>,
I<INC>, I<LIBS>, I<LINKTYPE>, I<NAME>, I<OPTIMIZE>, I<PL_FILES>,
I<VERSION>, I<VERSION_FROM>, I<clean>, I<depend>, I<realclean> from
the L<ExtUtils::MakeMaker> man page: these are used in almost any
F<Makefile.PL>.
Additionally read the section on I<Overriding MakeMaker Methods> and the
descriptions of the I<distcheck>, I<disttest> and I<dist> targets: They
will definitely be useful for you.
Of special importance for B<DBI> drivers is the I<postamble> method from
the L<ExtUtils::MM_Unix> man page.
For Emacs users, I recommend the I<libscan> method, which removes
Emacs backup files (file names which end with a tilde '~') from lists of
files.
Now an example, I use the word C<Driver> wherever you should insert
your driver's name:
# -*- perl -*-
use ExtUtils::MakeMaker;
WriteMakefile(
dbd_edit_mm_attribs( {
'NAME' => 'DBD::Driver',
'VERSION_FROM' => 'Driver.pm',
'INC' => '',
'dist' => { 'SUFFIX' => '.gz',
'COMPRESS' => 'gzip -9f' },
'realclean' => { FILES => '*.xsi' },
'PREREQ_PM' => '1.03',
'CONFIGURE' => sub {
eval {require DBI::DBD;};
if ($@) {
warn $@;
exit 0;
}
my $dbi_arch_dir = dbd_dbi_arch_dir();
if (exists($opts{INC})) {
return {INC => "$opts{INC} -I$dbi_arch_dir"};
} else {
return {INC => "-I$dbi_arch_dir"};
}
}
},
{ create_pp_tests => 1})
);
package MY;
sub postamble { return main::dbd_postamble(@_); }
sub libscan {
my ($self, $path) = @_;
($path =~ m/\~$/) ? undef : $path;
}
Note the calls to C<dbd_edit_mm_attribs()> and C<dbd_postamble()>.
The second hash reference in the call to C<dbd_edit_mm_attribs()>
(containing C<create_pp_tests()>) is optional; you should not use it
unless your driver is a pure Perl driver (that is, it does not use C and
XS code). Therefore, the call to C<dbd_edit_mm_attribs()> is not
relevant for C/XS drivers and may be omitted; simply use the (single)
hash reference containing NAME etc as the only argument to C<WriteMakefile()>.
Note that the C<dbd_edit_mm_attribs()> code will fail if you do not have a
F<t> sub-directory containing at least one test case.
I<PREREQ_PM> tells MakeMaker that DBI (version 1.03 in this case) is
required for this module. This will issue a warning that DBI 1.03 is
missing if someone attempts to install your DBD without DBI 1.03. See
I<CONFIGURE> below for why this does not work reliably in stopping cpan
testers failing your module if DBI is not installed.
I<CONFIGURE> is a subroutine called by MakeMaker during
C<WriteMakefile>. By putting the C<require DBI::DBD> in this section
we can attempt to load DBI::DBD but if it is missing we exit with
success. As we exit successfully without creating a Makefile when
DBI::DBD is missing cpan testers will not report a failure. This may
seem at odds with I<PREREQ_PM> but I<PREREQ_PM> does not cause
C<WriteMakefile> to fail (unless you also specify PREREQ_FATAL which
is strongly discouraged by MakeMaker) so C<WriteMakefile> would
continue to call C<dbd_dbi_arch_dir> and fail.
All drivers must use C<dbd_postamble()> or risk running into problems.
Note the specification of I<VERSION_FROM>; the named file
(F<Driver.pm>) will be scanned for the first line that looks like an
assignment to I<$VERSION>, and the subsequent text will be used to
determine the version number. Note the commentary in
L<ExtUtils::MakeMaker> on the subject of correctly formatted version
numbers.
If your driver depends upon external software (it usually will), you
will need to add code to ensure that your environment is workable
before the call to C<WriteMakefile()>. If you need to check for the
existence of an external library and perhaps modify I<INC> to include
the paths to where the external library header files are located and
you cannot find the library or header files make sure you output a
message saying they cannot be found but C<exit 0> (success) B<before>
calling C<WriteMakefile> or CPAN testers will fail your module if the
external library is not found.
A full-fledged I<Makefile.PL> can be quite large (for example, the
files for B<DBD::Oracle> and B<DBD::Informix> are both over 1000 lines
long, and the Informix one uses - and creates - auxiliary modules
too).
See also L<ExtUtils::MakeMaker> and L<ExtUtils::MM_Unix>. Consider using
L<CPAN::MakeMaker> in place of I<ExtUtils::MakeMaker>.
=head2 README
The L<README> file should describe what the driver is for, the
pre-requisites for the build process, the actual build process, how to
report errors, and who to report them to.
Users will find ways of breaking the driver build and test process
which you would never even have dreamed to be possible in your worst
nightmares. Therefore, you need to write this document defensively,
precisely and concisely.
As always, use the F<README> from one of the established drivers as a basis
for your own; the version in B<DBD::Informix> is worth a look as it has
been quite successful in heading off problems.
=over 4
=item *
Note that users will have versions of Perl and B<DBI> that are both older
and newer than you expected, but this will seldom cause much trouble.
When it does, it will be because you are using features of B<DBI> that are
not supported in the version they are using.
=item *
Note that users will have versions of the database software that are
both older and newer than you expected. You will save yourself time in
the long run if you can identify the range of versions which have been
tested and warn about versions which are not known to be OK.
=item *
Note that many people trying to install your driver will not be experts
in the database software.
=item *
Note that many people trying to install your driver will not be experts
in C or Perl.
=back
=head2 MANIFEST
The F<MANIFEST> will be used by the Makefile's dist target to build the
distribution tar file that is uploaded to CPAN. It should list every
file that you want to include in your distribution, one per line.
=head2 lib/Bundle/DBD/Driver.pm
The CPAN module provides an extremely powerful bundle mechanism that
allows you to specify pre-requisites for your driver.
The primary pre-requisite is B<Bundle::DBI>; you may want or need to add
some more. With the bundle set up correctly, the user can type:
perl -MCPAN -e 'install Bundle::DBD::Driver'
and Perl will download, compile, test and install all the Perl modules
needed to build your driver.
The prerequisite modules are listed in the C<CONTENTS> section, with the
official name of the module followed by a dash and an informal name or
description.
=over 4
=item *
Listing B<Bundle::DBI> as the main pre-requisite simplifies life.
=item *
Don't forget to list your driver.
=item *
Note that unless the DBMS is itself a Perl module, you cannot list it as
a pre-requisite in this file.
=item *
You should keep the version of the bundle the same as the version of
your driver.
=item *
You should add configuration management, copyright, and licencing
information at the top.
=back
A suitable skeleton for this file is shown below.
package Bundle::DBD::Driver;
$VERSION = '0.01';
1;
__END__
=head1 NAME
Bundle::DBD::Driver - A bundle to install all DBD::Driver related modules
=head1 SYNOPSIS
C<perl -MCPAN -e 'install Bundle::DBD::Driver'>
=head1 CONTENTS
Bundle::DBI - Bundle for DBI by TIMB (Tim Bunce)
DBD::Driver - DBD::Driver by YOU (Your Name)
=head1 DESCRIPTION
This bundle includes all the modules used by the Perl Database
Interface (DBI) driver for Driver (DBD::Driver), assuming the
use of DBI version 1.13 or later, created by Tim Bunce.
If you've not previously used the CPAN module to install any
bundles, you will be interrogated during its setup phase.
But when you've done it once, it remembers what you told it.
You could start by running:
C<perl -MCPAN -e 'install Bundle::CPAN'>
=head1 SEE ALSO
Bundle::DBI
=head1 AUTHOR
Your Name E<lt>F<you@yourdomain.com>E<gt>
=head1 THANKS
This bundle was created by ripping off Bundle::libnet created by
Graham Barr E<lt>F<gbarr@ti.com>E<gt>, and radically simplified
with some information from Jochen Wiedmann E<lt>F<joe@ispsoft.de>E<gt>.
The template was then included in the DBI::DBD documentation by
Jonathan Leffler E<lt>F<jleffler@informix.com>E<gt>.
=cut
=head2 lib/DBD/Driver/Summary.pm
There is no substitute for taking the summary file from a driver that
was documented in the Perl book (such as B<DBD::Oracle> or B<DBD::Informix> or
B<DBD::ODBC>, to name but three), and adapting it to describe the
facilities available via B<DBD::Driver> when accessing the Driver database.
=head2 Pure Perl version of Driver.pm
The F<Driver.pm> file defines the Perl module B<DBD::Driver> for your driver.
It will define a package B<DBD::Driver> along with some version information,
some variable definitions, and a function C<driver()> which will have a more
or less standard structure.
It will also define three sub-packages of B<DBD::Driver>:
=over 4
=item DBD::Driver::dr
with methods C<connect()>, C<data_sources()> and C<disconnect_all()>;
=item DBD::Driver::db
with methods such as C<prepare()>;
=item DBD::Driver::st
with methods such as C<execute()> and C<fetch()>.
=back
The F<Driver.pm> file will also contain the documentation specific to
B<DBD::Driver> in the format used by perldoc.
In a pure Perl driver, the F<Driver.pm> file is the core of the
implementation. You will need to provide all the key methods needed by B<DBI>.
Now let's take a closer look at an excerpt of F<File.pm> as an example.
We ignore things that are common to any module (even non-DBI modules)
or really specific to the B<DBD::File> package.
=head3 The DBD::Driver package
=head4 The header
package DBD::File;
use strict;
use vars qw($VERSION $drh);
$VERSION = "1.23.00" # Version number of DBD::File
This is where the version number of your driver is specified, and is
where F<Makefile.PL> looks for this information. Please ensure that any
other modules added with your driver are also version stamped so that
CPAN does not get confused.
It is recommended that you use a two-part (1.23) or three-part (1.23.45)
version number. Also consider the CPAN system, which gets confused and
considers version 1.10 to precede version 1.9, so that using a raw CVS,
RCS or SCCS version number is probably not appropriate (despite being
very common).
For Subversion you could use:
$VERSION = "12.012346";
(use lots of leading zeros on the second portion so if you move the code to a
shared repository like svn.perl.org the much larger revision numbers won't
cause a problem, at least not for a few years). For RCS or CVS you can use:
$VERSION = "11.22";
which pads out the fractional part with leading zeros so all is well
(so long as you don't go past x.99)
$drh = undef; # holds driver handle once initialized
This is where the driver handle will be stored, once created.
Note that you may assume there is only one handle for your driver.
=head4 The driver constructor
The C<driver()> method is the driver handle constructor. Note that
the C<driver()> method is in the B<DBD::Driver> package, not in
one of the sub-packages B<DBD::Driver::dr>, B<DBD::Driver::db>, or
B<DBD::Driver::db>.
sub driver
{
return $drh if $drh; # already created - return same one
my ($class, $attr) = @_;
$class .= "::dr";
DBD::Driver::db->install_method('drv_example_dbh_method');
DBD::Driver::st->install_method('drv_example_sth_method');
# not a 'my' since we use it above to prevent multiple drivers
$drh = DBI::_new_drh($class, {
'Name' => 'File',
'Version' => $VERSION,
'Attribution' => 'DBD::File by Jochen Wiedmann',
})
or return undef;
return $drh;
}
This is a reasonable example of how B<DBI> implements its handles. There
are three kinds: B<driver handles> (typically stored in I<$drh>; from
now on called I<drh> or I<$drh>), B<database handles> (from now on
called I<dbh> or I<$dbh>) and B<statement handles> (from now on called
I<sth> or I<$sth>).
The prototype of C<DBI::_new_drh()> is
$drh = DBI::_new_drh($class, $public_attrs, $private_attrs);
with the following arguments:
=over 4
=item I<$class>
is typically the class for your driver, (for example, "DBD::File::dr"),
passed as the first argument to the C<driver()> method.
=item I<$public_attrs>
is a hash ref to attributes like I<Name>, I<Version>, and I<Attribution>.
These are processed and used by B<DBI>. You had better not make any
assumptions about them nor should you add private attributes here.
=item I<$private_attrs>
This is another (optional) hash ref with your private attributes.
B<DBI> will store them and otherwise leave them alone.
=back
The C<DBI::_new_drh()> method and the C<driver()> method both return C<undef>
for failure (in which case you must look at I<$DBI::err> and I<$DBI::errstr>
for the failure information, because you have no driver handle to use).
=head4 Using install_method() to expose driver-private methods
DBD::Foo::db->install_method($method_name, \%attr);
Installs the driver-private method named by $method_name into the
DBI method dispatcher so it can be called directly, avoiding the
need to use the func() method.
It is called as a static method on the driver class to which the
method belongs. The method name must begin with the corresponding
registered driver-private prefix. For example, for DBD::Oracle
$method_name must being with 'C<ora_>', and for DBD::AnyData it
must begin with 'C<ad_>'.
The C<\%attr> attributes can be used to provide fine control over how the DBI
dispatcher handles the dispatching of the method. However it's undocumented
at the moment. See the IMA_* #define's in DBI.xs and the O=>0x000x values in
the initialization of %DBI::DBI_methods in DBI.pm. (Volunteers to polish up
and document the interface are very welcome to get in touch via dbi-dev@perl.org).
Methods installed using install_method default to the standard error
handling behaviour for DBI methods: clearing err and errstr before
calling the method, and checking for errors to trigger RaiseError
etc. on return. This differs from the default behaviour of func().
Note for driver authors: The DBD::Foo::xx->install_method call won't
work until the class-hierarchy has been setup. Normally the DBI
looks after that just after the driver is loaded. This means
install_method() can't be called at the time the driver is loaded
unless the class-hierarchy is set up first. The way to do that is
to call the setup_driver() method:
DBI->setup_driver('DBD::Foo');
before using install_method().
=head4 The CLONE special subroutine
Also needed here, in the B<DBD::Driver> package, is a C<CLONE()> method
that will be called by perl when an interpreter is cloned. All your
C<CLONE()> method needs to do, currently, is clear the cached I<$drh> so
the new interpreter won't start using the cached I<$drh> from the old
interpreter:
sub CLONE {
undef $drh;
}
See L<http://search.cpan.org/dist/perl/pod/perlmod.pod#Making_your_module_threadsafe>
for details.
=head3 The DBD::Driver::dr package
The next lines of code look as follows:
package DBD::Driver::dr; # ====== DRIVER ======
$DBD::Driver::dr::imp_data_size = 0;
Note that no I<@ISA> is needed here, or for the other B<DBD::Driver::*>
classes, because the B<DBI> takes care of that for you when the driver is
loaded.
*FIX ME* Explain what the imp_data_size is, so that implementors aren't
practicing cargo-cult programming.
=head4 The database handle constructor
The database handle constructor is the driver's (hence the changed
namespace) C<connect()> method:
sub connect
{
my ($drh, $dr_dsn, $user, $auth, $attr) = @_;
# Some database specific verifications, default settings
# and the like can go here. This should only include
# syntax checks or similar stuff where it's legal to
# 'die' in case of errors.
# For example, many database packages requires specific
# environment variables to be set; this could be where you
# validate that they are set, or default them if they are not set.
my $driver_prefix = "drv_"; # the assigned prefix for this driver
# Process attributes from the DSN; we assume ODBC syntax
# here, that is, the DSN looks like var1=val1;...;varN=valN
foreach my $var ( split /;/, $dr_dsn ) {
my ($attr_name, $attr_value) = split '=', $var, 2;
return $drh->set_err($DBI::stderr, "Can't parse DSN part '$var'")
unless defined $attr_value;
# add driver prefix to attribute name if it doesn't have it already
$attr_name = $driver_prefix.$attr_name
unless $attr_name =~ /^$driver_prefix/o;
# Store attribute into %$attr, replacing any existing value.
# The DBI will STORE() these into $dbh after we've connected
$attr->{$attr_name} = $attr_value;
}
# Get the attributes we'll use to connect.
# We use delete here because these no need to STORE them
my $db = delete $attr->{drv_database} || delete $attr->{drv_db}
or return $drh->set_err($DBI::stderr, "No database name given in DSN '$dr_dsn'");
my $host = delete $attr->{drv_host} || 'localhost';
my $port = delete $attr->{drv_port} || 123456;
# Assume you can attach to your database via drv_connect:
my $connection = drv_connect($db, $host, $port, $user, $auth)
or return $drh->set_err($DBI::stderr, "Can't connect to $dr_dsn: ...");
# create a 'blank' dbh (call superclass constructor)
my ($outer, $dbh) = DBI::_new_dbh($drh, { Name => $dr_dsn });
$dbh->STORE('Active', 1 );
$dbh->{drv_connection} = $connection;
return $outer;
}
This is mostly the same as in the I<driver handle constructor> above.
The arguments are described in L<DBI>.
The constructor C<DBI::_new_dbh()> is called, returning a database handle.
The constructor's prototype is:
($outer, $inner) = DBI::_new_dbh($drh, $public_attr, $private_attr);
with similar arguments to those in the I<driver handle constructor>,
except that the I<$class> is replaced by I<$drh>. The I<Name> attribute
is a standard B<DBI> attribute (see L<DBI/Database Handle Attributes>).
In scalar context, only the outer handle is returned.
Note the use of the C<STORE()> method for setting the I<dbh> attributes.
That's because within the driver code, the handle object you have is
the 'inner' handle of a tied hash, not the outer handle that the
users of your driver have.
Because you have the inner handle, tie magic doesn't get invoked
when you get or set values in the hash. This is often very handy for
speed when you want to get or set simple non-special driver-specific
attributes.
However, some attribute values, such as those handled by the B<DBI> like
I<PrintError>, don't actually exist in the hash and must be read via
C<$h-E<gt>FETCH($attrib)> and set via C<$h-E<gt>STORE($attrib, $value)>.
If in any doubt, use these methods.
=head4 The data_sources() method
The C<data_sources()> method must populate and return a list of valid data
sources, prefixed with the "I<dbi:Driver>" incantation that allows them to
be used in the first argument of the C<DBI-E<gt>connect()> method.
An example of this might be scanning the F<$HOME/.odbcini> file on Unix
for ODBC data sources (DSNs).
As a trivial example, consider a fixed list of data sources:
sub data_sources
{
my($drh, $attr) = @_;
my(@list) = ();
# You need more sophisticated code than this to set @list...
push @list, "dbi:Driver:abc";
push @list, "dbi:Driver:def";
push @list, "dbi:Driver:ghi";
# End of code to set @list
return @list;
}
=head4 The disconnect_all() method
If you need to release any resources when the driver is unloaded, you
can provide a disconnect_all method.
=head4 Other driver handle methods
If you need any other driver handle methods, they can follow here.
=head4 Error handling
It is quite likely that something fails in the connect method.
With B<DBD::File> for example, you might catch an error when setting the
current directory to something not existent by using the
(driver-specific) I<f_dir> attribute.
To report an error, you use the C<set_err()> method:
$h->set_err($err, $errmsg, $state);
This will ensure that the error is recorded correctly and that
I<RaiseError> and I<PrintError> etc are handled correctly.
Typically you'll always use the method instance, aka your method's first
argument.
As C<set_err()> always returns C<undef> your error handling code can
usually be simplified to something like this:
return $h->set_err($err, $errmsg, $state) if ...;
=head3 The DBD::Driver::db package
package DBD::Driver::db; # ====== DATABASE ======
$DBD::Driver::db::imp_data_size = 0;
=head4 The statement handle constructor
There's nothing much new in the statement handle constructor, which
is the C<prepare()> method:
sub prepare
{
my ($dbh, $statement, @attribs) = @_;
# create a 'blank' sth
my ($outer, $sth) = DBI::_new_sth($dbh, { Statement => $statement });
$sth->STORE('NUM_OF_PARAMS', ($statement =~ tr/?//));
$sth->{drv_params} = [];
return $outer;
}
This is still the same -- check the arguments and call the super class
constructor C<DBI::_new_sth()>. Again, in scalar context, only the outer
handle is returned. The I<Statement> attribute should be cached as
shown.
Note the prefix I<drv_> in the attribute names: it is required that
all your private attributes use a lowercase prefix unique to your driver.
As mentioned earlier in this document, the B<DBI> contains a registry of
known driver prefixes and may one day warn about unknown attributes
that don't have a registered prefix.
Note that we parse the statement here in order to set the attribute
I<NUM_OF_PARAMS>. The technique illustrated is not very reliable; it can
be confused by question marks appearing in quoted strings, delimited
identifiers or in SQL comments that are part of the SQL statement. We
could set I<NUM_OF_PARAMS> in the C<execute()> method instead because
the B<DBI> specification explicitly allows a driver to defer this, but then
the user could not call C<bind_param()>.
=head4 Transaction handling
Pure Perl drivers will rarely support transactions. Thus your C<commit()>
and C<rollback()> methods will typically be quite simple:
sub commit
{
my ($dbh) = @_;
if ($dbh->FETCH('Warn')) {
warn("Commit ineffective while AutoCommit is on");
}
0;
}
sub rollback {
my ($dbh) = @_;
if ($dbh->FETCH('Warn')) {
warn("Rollback ineffective while AutoCommit is on");
}
0;
}
Or even simpler, just use the default methods provided by the B<DBI> that
do nothing except return C<undef>.
The B<DBI>'s default C<begin_work()> method can be used by inheritance.
=head4 The STORE() and FETCH() methods
These methods (that we have already used, see above) are called for
you, whenever the user does a:
$dbh->{$attr} = $val;
or, respectively,
$val = $dbh->{$attr};
See L<perltie> for details on tied hash refs to understand why these
methods are required.
The B<DBI> will handle most attributes for you, in particular attributes
like I<RaiseError> or I<PrintError>. All you have to do is handle your
driver's private attributes and any attributes, like I<AutoCommit> and
I<ChopBlanks>, that the B<DBI> can't handle for you.
A good example might look like this:
sub STORE
{
my ($dbh, $attr, $val) = @_;
if ($attr eq 'AutoCommit') {
# AutoCommit is currently the only standard attribute we have
# to consider.
if (!$val) { die "Can't disable AutoCommit"; }
return 1;
}
if ($attr =~ m/^drv_/) {
# Handle only our private attributes here
# Note that we could trigger arbitrary actions.
# Ideally we should warn about unknown attributes.
$dbh->{$attr} = $val; # Yes, we are allowed to do this,
return 1; # but only for our private attributes
}
# Else pass up to DBI to handle for us
$dbh->SUPER::STORE($attr, $val);
}
sub FETCH
{
my ($dbh, $attr) = @_;
if ($attr eq 'AutoCommit') { return 1; }
if ($attr =~ m/^drv_/) {
# Handle only our private attributes here
# Note that we could trigger arbitrary actions.
return $dbh->{$attr}; # Yes, we are allowed to do this,
# but only for our private attributes
}
# Else pass up to DBI to handle
$dbh->SUPER::FETCH($attr);
}
The B<DBI> will actually store and fetch driver-specific attributes (with all
lowercase names) without warning or error, so there's actually no need to
implement driver-specific any code in your C<FETCH()> and C<STORE()>
methods unless you need extra logic/checks, beyond getting or setting
the value.
Unless your driver documentation indicates otherwise, the return value of
the C<STORE()> method is unspecified and the caller shouldn't use that value.
=head4 Other database handle methods
As with the driver package, other database handle methods may follow here.
In particular you should consider a (possibly empty) C<disconnect()>
method and possibly a C<quote()> method if B<DBI>'s default isn't correct for
you. You may also need the C<type_info_all()> and C<get_info()> methods,
as described elsewhere in this document.
Where reasonable use C<$h-E<gt>SUPER::foo()> to call the B<DBI>'s method in
some or all cases and just wrap your custom behavior around that.
If you want to use private trace flags you'll probably want to be
able to set them by name. To do that you'll need to define a
C<parse_trace_flag()> method (note that's "parse_trace_flag", singular,
not "parse_trace_flags", plural).
sub parse_trace_flag {
my ($h, $name) = @_;
return 0x01000000 if $name eq 'foo';
return 0x02000000 if $name eq 'bar';
return 0x04000000 if $name eq 'baz';
return 0x08000000 if $name eq 'boo';
return 0x10000000 if $name eq 'bop';
return $h->SUPER::parse_trace_flag($name);
}
All private flag names must be lowercase, and all private flags
must be in the top 8 of the 32 bits.
=head3 The DBD::Driver::st package
This package follows the same pattern the others do:
package DBD::Driver::st;
$DBD::Driver::st::imp_data_size = 0;
=head4 The execute() and bind_param() methods
This is perhaps the most difficult method because we have to consider
parameter bindings here. In addition to that, there are a number of
statement attributes which must be set for inherited B<DBI> methods to
function correctly (see L</Statement attributes> below).
We present a simplified implementation by using the I<drv_params>
attribute from above:
sub bind_param
{
my ($sth, $pNum, $val, $attr) = @_;
my $type = (ref $attr) ? $attr->{TYPE} : $attr;
if ($type) {
my $dbh = $sth->{Database};
$val = $dbh->quote($sth, $type);
}
my $params = $sth->{drv_params};
$params->[$pNum-1] = $val;
1;
}
sub execute
{
my ($sth, @bind_values) = @_;
# start of by finishing any previous execution if still active
$sth->finish if $sth->FETCH('Active');
my $params = (@bind_values) ?
\@bind_values : $sth->{drv_params};
my $numParam = $sth->FETCH('NUM_OF_PARAMS');
return $sth->set_err($DBI::stderr, "Wrong number of parameters")
if @$params != $numParam;
my $statement = $sth->{'Statement'};
for (my $i = 0; $i < $numParam; $i++) {
$statement =~ s/?/$params->[$i]/; # XXX doesn't deal with quoting etc!
}
# Do anything ... we assume that an array ref of rows is
# created and store it:
$sth->{'drv_data'} = $data;
$sth->{'drv_rows'} = @$data; # number of rows
$sth->STORE('NUM_OF_FIELDS') = $numFields;
$sth->{Active} = 1;
@$data || '0E0';
}
There are a number of things you should note here.
We initialize the I<NUM_OF_FIELDS> and I<Active> attributes here,
because they are essential for C<bind_columns()> to work.
We use attribute C<$sth-E<gt>{Statement}> which we created
within C<prepare()>. The attribute C<$sth-E<gt>{Database}>, which is
nothing else than the I<dbh>, was automatically created by B<DBI>.
Finally, note that (as specified in the B<DBI> specification) we return the
string C<'0E0'> instead of the number 0, so that the result tests true but
equal to zero.
$sth->execute() or die $sth->errstr;
=head4 The execute_array(), execute_for_fetch() and bind_param_array() methods
In general, DBD's only need to implement C<execute_for_fetch()> and
C<bind_param_array>. DBI's default C<execute_array()> will invoke the
DBD's C<execute_for_fetch()> as needed.
The following sequence describes the interaction between
DBI C<execute_array> and a DBD's C<execute_for_fetch>:
=over
=item 1
App calls C<$sth-E<gt>execute_array(\%attrs, @array_of_arrays)>
=item 2
If C<@array_of_arrays> was specified, DBI processes C<@array_of_arrays> by calling
DBD's C<bind_param_array()>. Alternately, App may have directly called
C<bind_param_array()>
=item 3
DBD validates and binds each array
=item 4
DBI retrieves the validated param arrays from DBD's ParamArray attribute
=item 5
DBI calls DBD's C<execute_for_fetch($fetch_tuple_sub, \@tuple_status)>,
where C<&$fetch_tuple_sub> is a closure to iterate over the
returned ParamArray values, and C<\@tuple_status> is an array to receive
the disposition status of each tuple.
=item 6
DBD iteratively calls C<&$fetch_tuple_sub> to retrieve parameter tuples
to be added to its bulk database operation/request.
=item 7
when DBD reaches the limit of tuples it can handle in a single database
operation/request, or the C<&$fetch_tuple_sub> indicates no more
tuples by returning undef, the DBD executes the bulk operation, and
reports the disposition of each tuple in \@tuple_status.
=item 8
DBD repeats steps 6 and 7 until all tuples are processed.
=back
E.g., here's the essence of L<DBD::Oracle>'s execute_for_fetch:
while (1) {
my @tuple_batch;
for (my $i = 0; $i < $batch_size; $i++) {
push @tuple_batch, [ @{$fetch_tuple_sub->() || last} ];
}
last unless @tuple_batch;
my $res = ora_execute_array($sth, \@tuple_batch,
scalar(@tuple_batch), $tuple_batch_status);
push @$tuple_status, @$tuple_batch_status;
}
Note that DBI's default execute_array()/execute_for_fetch() implementation
requires the use of positional (i.e., '?') placeholders. Drivers
which B<require> named placeholders must either emulate positional
placeholders (e.g., see L<DBD::Oracle>), or must implement their own
execute_array()/execute_for_fetch() methods to properly sequence bound
parameter arrays.
=head4 Fetching data
Only one method needs to be written for fetching data, C<fetchrow_arrayref()>.
The other methods, C<fetchrow_array()>, C<fetchall_arrayref()>, etc, as well
as the database handle's C<select*> methods are part of B<DBI>, and call
C<fetchrow_arrayref()> as necessary.
sub fetchrow_arrayref
{
my ($sth) = @_;
my $data = $sth->{drv_data};
my $row = shift @$data;
if (!$row) {
$sth->STORE(Active => 0); # mark as no longer active
return undef;
}
if ($sth->FETCH('ChopBlanks')) {
map { $_ =~ s/\s+$//; } @$row;
}
return $sth->_set_fbav($row);
}
*fetch = \&fetchrow_arrayref; # required alias for fetchrow_arrayref
Note the use of the method C<_set_fbav()> -- this is required so that
C<bind_col()> and C<bind_columns()> work.
If an error occurs which leaves the I<$sth> in a state where remaining rows
can't be fetched then I<Active> should be turned off before the method returns.
The C<rows()> method for this driver can be implemented like this:
sub rows { shift->{drv_rows} }
because it knows in advance how many rows it has fetched.
Alternatively you could delete that method and so fallback
to the B<DBI>'s own method which does the right thing based
on the number of calls to C<_set_fbav()>.
=head4 The more_results method
If your driver doesn't support multiple result sets, then don't even implement this method.
Otherwise, this method needs to get the statement handle ready to fetch results
from the next result set, if there is one. Typically you'd start with:
$sth->finish;
then you should delete all the attributes from the attribute cache that may no
longer be relevant for the new result set:
delete $sth->{$_}
for qw(NAME TYPE PRECISION SCALE ...);
for drivers written in C use:
hv_delete((HV*)SvRV(sth), "NAME", 4, G_DISCARD);
hv_delete((HV*)SvRV(sth), "NULLABLE", 8, G_DISCARD);
hv_delete((HV*)SvRV(sth), "NUM_OF_FIELDS", 13, G_DISCARD);
hv_delete((HV*)SvRV(sth), "PRECISION", 9, G_DISCARD);
hv_delete((HV*)SvRV(sth), "SCALE", 5, G_DISCARD);
hv_delete((HV*)SvRV(sth), "TYPE", 4, G_DISCARD);
Don't forget to also delete, or update, any driver-private attributes that may
not be correct for the next resultset.
The NUM_OF_FIELDS attribute is a special case. It should be set using STORE:
$sth->STORE(NUM_OF_FIELDS => 0); /* for DBI <= 1.53 */
$sth->STORE(NUM_OF_FIELDS => $new_value);
for drivers written in C use this incantation:
/* Adjust NUM_OF_FIELDS - which also adjusts the row buffer size */
DBIc_NUM_FIELDS(imp_sth) = 0; /* for DBI <= 1.53 */
DBIc_STATE(imp_xxh)->set_attr_k(sth, sv_2mortal(newSVpvn("NUM_OF_FIELDS",13)), 0,
sv_2mortal(newSViv(mysql_num_fields(imp_sth->result)))
);
For DBI versions prior to 1.54 you'll also need to explicitly adjust the
number of elements in the row buffer array (C<DBIc_FIELDS_AV(imp_sth)>)
to match the new result set. Fill any new values with newSV(0) not &sv_undef.
Alternatively you could free DBIc_FIELDS_AV(imp_sth) and set it to null,
but that would mean bind_columns() wouldn't work across result sets.
=head4 Statement attributes
The main difference between I<dbh> and I<sth> attributes is, that you
should implement a lot of attributes here that are required by
the B<DBI>, such as I<NAME>, I<NULLABLE>, I<TYPE>, etc. See
L<DBI/Statement Handle Attributes> for a complete list.
Pay attention to attributes which are marked as read only, such as
I<NUM_OF_PARAMS>. These attributes can only be set the first time
a statement is executed. If a statement is prepared, then executed
multiple times, warnings may be generated.
You can protect against these warnings, and prevent the recalculation
of attributes which might be expensive to calculate (such as the
I<NAME> and I<NAME_*> attributes):
my $storedNumParams = $sth->FETCH('NUM_OF_PARAMS');
if (!defined $storedNumParams or $storedNumFields < 0) {
$sth->STORE('NUM_OF_PARAMS') = $numParams;
# Set other useful attributes that only need to be set once
# for a statement, like $sth->{NAME} and $sth->{TYPE}
}
One particularly important attribute to set correctly (mentioned in
L<DBI/ATTRIBUTES COMMON TO ALL HANDLES> is I<Active>. Many B<DBI> methods,
including C<bind_columns()>, depend on this attribute.
Besides that the C<STORE()> and C<FETCH()> methods are mainly the same
as above for I<dbh>'s.
=head4 Other statement methods
A trivial C<finish()> method to discard stored data, reset any attributes
(such as I<Active>) and do C<$sth-E<gt>SUPER::finish()>.
If you've defined a C<parse_trace_flag()> method in B<::db> you'll also want
it in B<::st>, so just alias it in:
*parse_trace_flag = \&DBD::foo:db::parse_trace_flag;
And perhaps some other methods that are not part of the B<DBI>
specification, in particular to make metadata available.
Remember that they must have names that begin with your drivers
registered prefix so they can be installed using C<install_method()>.
If C<DESTROY()> is called on a statement handle that's still active
(C<$sth-E<gt>{Active}> is true) then it should effectively call C<finish()>.
sub DESTROY {
my $sth = shift;
$sth->finish if $sth->FETCH('Active');
}
=head2 Tests
The test process should conform as closely as possibly to the Perl
standard test harness.
In particular, most (all) of the tests should be run in the F<t> sub-directory,
and should simply produce an C<ok> when run under C<make test>.
For details on how this is done, see the Camel book and the section in
Chapter 7, "The Standard Perl Library" on L<Test::Harness>.
The tests may need to adapt to the type of database which is being used
for testing, and to the privileges of the user testing the driver. For
example, the B<DBD::Informix> test code has to adapt in a number of
places to the type of database to which it is connected as different
Informix databases have different capabilities: some of the tests are
for databases without transaction logs; others are for databases with a
transaction log; some versions of the server have support for blobs, or
stored procedures, or user-defined data types, and others do not.
When a complete file of tests must be skipped, you can provide a reason
in a pseudo-comment:
if ($no_transactions_available)
{
print "1..0 # Skip: No transactions available\n";
exit 0;
}
Consider downloading the B<DBD::Informix> code and look at the code in
F<DBD/Informix/TestHarness.pm> which is used throughout the
B<DBD::Informix> tests in the F<t> sub-directory.
=head1 CREATING A C/XS DRIVER
Please also see the section under L<CREATING A PURE PERL DRIVER>
regarding the creation of the F<Makefile.PL>.
Creating a new C/XS driver from scratch will always be a daunting task.
You can and should greatly simplify your task by taking a good
reference driver implementation and modifying that to match the
database product for which you are writing a driver.
The de facto reference driver has been the one for B<DBD::Oracle> written
by Tim Bunce, who is also the author of the B<DBI> package. The B<DBD::Oracle>
module is a good example of a driver implemented around a C-level API.
Nowadays it it seems better to base on B<DBD::ODBC>, another driver
maintained by Tim and Jeff Urlwin, because it offers a lot of metadata
and seems to become the guideline for the future development. (Also as
B<DBD::Oracle> digs deeper into the Oracle 8 OCI interface it'll get even
more hairy than it is now.)
The B<DBD::Informix> driver is one driver implemented using embedded SQL
instead of a function-based API.
B<DBD::Ingres> may also be worth a look.
=head2 C/XS version of Driver.pm
A lot of the code in the F<Driver.pm> file is very similar to the code for pure Perl modules
- see above. However,
there are also some subtle (and not so subtle) differences, including:
=over 8
=item *
The variables I<$DBD::Driver::{dr|db|st}::imp_data_size> are not defined
here, but in the XS code, because they declare the size of certain
C structures.
=item *
Some methods are typically moved to the XS code, in particular
C<prepare()>, C<execute()>, C<disconnect()>, C<disconnect_all()> and the
C<STORE()> and C<FETCH()> methods.
=item *
Other methods are still part of F<Driver.pm>, but have callbacks to
the XS code.
=item *
If the driver-specific parts of the I<imp_drh_t> structure need to be
formally initialized (which does not seem to be a common requirement),
then you need to add a call to an appropriate XS function in the driver
method of C<DBD::Driver::driver()>, and you define the corresponding function
in F<Driver.xs>, and you define the C code in F<dbdimp.c> and the prototype in
F<dbdimp.h>.
For example, B<DBD::Informix> has such a requirement, and adds the
following call after the call to C<_new_drh()> in F<Informix.pm>:
DBD::Informix::dr::driver_init($drh);
and the following code in F<Informix.xs>:
# Initialize the DBD::Informix driver data structure
void
driver_init(drh)
SV *drh
CODE:
ST(0) = dbd_ix_dr_driver_init(drh) ? &sv_yes : &sv_no;
and the code in F<dbdimp.h> declares:
extern int dbd_ix_dr_driver_init(SV *drh);
and the code in F<dbdimp.ec> (equivalent to F<dbdimp.c>) defines:
/* Formally initialize the DBD::Informix driver structure */
int
dbd_ix_dr_driver(SV *drh)
{
D_imp_drh(drh);
imp_drh->n_connections = 0; /* No active connections */
imp_drh->current_connection = 0; /* No current connection */
imp_drh->multipleconnections = (ESQLC_VERSION >= 600) ? True : False;
dbd_ix_link_newhead(&imp_drh->head); /* Empty linked list of connections */
return 1;
}
B<DBD::Oracle> has a similar requirement but gets around it by checking
whether the private data part of the driver handle is all zeroed out,
rather than add extra functions.
=back
Now let's take a closer look at an excerpt from F<Oracle.pm> (revised
heavily to remove idiosyncrasies) as an example, ignoring things that
were already discussed for pure Perl drivers.
=head3 The connect method
The connect method is the database handle constructor.
You could write either of two versions of this method: either one which
takes connection attributes (new code) and one which ignores them (old
code only).
If you ignore the connection attributes, then you omit all mention of
the I<$auth> variable (which is a reference to a hash of attributes), and
the XS system manages the differences for you.
sub connect
{
my ($drh, $dbname, $user, $auth, $attr) = @_;
# Some database specific verifications, default settings
# and the like following here. This should only include
# syntax checks or similar stuff where it's legal to
# 'die' in case of errors.
my $dbh = DBI::_new_dbh($drh, {
'Name' => $dbname,
})
or return undef;
# Call the driver-specific function _login in Driver.xs file which
# calls the DBMS-specific function(s) to connect to the database,
# and populate internal handle data.
DBD::Driver::db::_login($dbh, $dbname, $user, $auth, $attr)
or return undef;
$dbh;
}
This is mostly the same as in the pure Perl case, the exception being
the use of the private C<_login()> callback, which is the function
that will really connect to the database. It is implemented in
F<Driver.xst> (you should not implement it) and calls
C<dbd_db_login6()> or C<dbd_db_login6_sv> from F<dbdimp.c>. See below
for details.
If your driver has driver-specific attributes which may be passed in the
connect method and hence end up in C<$attr> in C<dbd_db_login6> then it
is best to delete any you process so DBI does not send them again
via STORE after connect. You can do this in C like this:
DBD_ATTRIB_DELETE(attr, "my_attribute_name",
strlen("my_attribute_name"));
However, prior to DBI subversion version 11605 (and fixed post 1.607)
DBD_ATTRIB_DELETE segfaulted so if you cannot guarantee the DBI version
will be post 1.607 you need to use:
hv_delete((HV*)SvRV(attr), "my_attribute_name",
strlen("my_attribute_name"), G_DISCARD);
*FIX ME* Discuss removing attributes in Perl code.
=head3 The disconnect_all method
*FIX ME* T.B.S
=head3 The data_sources method
If your C<data_sources()> method can be implemented in pure Perl, then do
so because it is easier than doing it in XS code (see the section above
for pure Perl drivers).
If your C<data_sources()> method must call onto compiled functions, then
you will need to define I<dbd_dr_data_sources> in your F<dbdimp.h> file, which
will trigger F<Driver.xst> (in B<DBI> v1.33 or greater) to generate the XS
code that calls your actual C function (see the discussion below for
details) and you do not code anything in F<Driver.pm> to handle it.
=head3 The prepare method
The prepare method is the statement handle constructor, and most of it
is not new. Like the C<connect()> method, it now has a C callback:
package DBD::Driver::db; # ====== DATABASE ======
use strict;
sub prepare
{
my ($dbh, $statement, $attribs) = @_;
# create a 'blank' sth
my $sth = DBI::_new_sth($dbh, {
'Statement' => $statement,
})
or return undef;
# Call the driver-specific function _prepare in Driver.xs file
# which calls the DBMS-specific function(s) to prepare a statement
# and populate internal handle data.
DBD::Driver::st::_prepare($sth, $statement, $attribs)
or return undef;
$sth;
}
=head3 The execute method
*FIX ME* T.B.S
=head3 The fetchrow_arrayref method
*FIX ME* T.B.S
=head3 Other methods?
*FIX ME* T.B.S
=head2 Driver.xs
F<Driver.xs> should look something like this:
#include "Driver.h"
DBISTATE_DECLARE;
INCLUDE: Driver.xsi
MODULE = DBD::Driver PACKAGE = DBD::Driver::dr
/* Non-standard drh XS methods following here, if any. */
/* If none (the usual case), omit the MODULE line above too. */
MODULE = DBD::Driver PACKAGE = DBD::Driver::db
/* Non-standard dbh XS methods following here, if any. */
/* Currently this includes things like _list_tables from */
/* DBD::mSQL and DBD::mysql. */
MODULE = DBD::Driver PACKAGE = DBD::Driver::st
/* Non-standard sth XS methods following here, if any. */
/* In particular this includes things like _list_fields from */
/* DBD::mSQL and DBD::mysql for accessing metadata. */
Note especially the include of F<Driver.xsi> here: B<DBI> inserts stub
functions for almost all private methods here which will typically do
much work for you.
Wherever you really have to implement something, it will call a private
function in F<dbdimp.c>, and this is what you have to implement.
You need to set up an extra routine if your driver needs to export
constants of its own, analogous to the SQL types available when you say:
use DBI qw(:sql_types);
*FIX ME* T.B.S
=head2 Driver.h
F<Driver.h> is very simple and the operational contents should look like this:
#ifndef DRIVER_H_INCLUDED
#define DRIVER_H_INCLUDED
#define NEED_DBIXS_VERSION 93 /* 93 for DBI versions 1.00 to 1.51+ */
#define PERL_NO_GET_CONTEXT /* if used require DBI 1.51+ */
#include <DBIXS.h> /* installed by the DBI module */
#include "dbdimp.h"
#include "dbivport.h" /* see below */
#include <dbd_xsh.h> /* installed by the DBI module */
#endif /* DRIVER_H_INCLUDED */
The F<DBIXS.h> header defines most of the interesting information that
the writer of a driver needs.
The file F<dbd_xsh.h> header provides prototype declarations for the C
functions that you might decide to implement. Note that you should
normally only define one of C<dbd_db_login()>, C<dbd_db_login6()> or
C<dbd_db_login6_sv> unless you are intent on supporting really old
versions of B<DBI> (prior to B<DBI> 1.06) as well as modern
versions. The only standard, B<DBI>-mandated functions that you need
write are those specified in the F<dbd_xsh.h> header. You might also
add extra driver-specific functions in F<Driver.xs>.
The F<dbivport.h> file should be I<copied> from the latest B<DBI> release
into your distribution each time you modify your driver. Its job is to
allow you to enhance your code to work with the latest B<DBI> API while
still allowing your driver to be compiled and used with older versions
of the B<DBI> (for example, when the C<DBIh_SET_ERR_CHAR()> macro was added
to B<DBI> 1.41, an emulation of it was added to F<dbivport.h>). This makes
users happy and your life easier. Always read the notes in F<dbivport.h>
to check for any limitations in the emulation that you should be aware
of.
With B<DBI> v1.51 or better I recommend that the driver defines
I<PERL_NO_GET_CONTEXT> before F<DBIXS.h> is included. This can significantly
improve efficiency when running under a thread enabled perl. (Remember that
the standard perl in most Linux distributions is built with threads enabled.
So is ActiveState perl for Windows, and perl built for Apache mod_perl2.)
If you do this there are some things to keep in mind:
=over 4
=item *
If I<PERL_NO_GET_CONTEXT> is defined, then every function that calls the Perl
API will need to start out with a C<dTHX;> declaration.
=item *
You'll know which functions need this, because the C compiler will
complain that the undeclared identifier C<my_perl> is used if I<and only if>
the perl you are using to develop and test your driver has threads enabled.
=item *
If you don't remember to test with a thread-enabled perl before making
a release it's likely that you'll get failure reports from users who are.
=item *
For driver private functions it is possible to gain even more
efficiency by replacing C<dTHX;> with C<pTHX_> prepended to the
parameter list and then C<aTHX_> prepended to the argument list where
the function is called.
=back
See L<perlguts/How multiple interpreters and concurrency are supported> for
additional information about I<PERL_NO_GET_CONTEXT>.
=head2 Implementation header dbdimp.h
This header file has two jobs:
First it defines data structures for your private part of the handles.
Note that the DBI provides many common fields for you. For example
the statement handle (imp_sth) already has a row_count field with an IV type
that accessed via the DBIc_ROW_COUNT(imp_sth) macro. Using this is strongly
recommended as it's built in to some DBI internals so the DBI can 'just work'
in more cases and you'll have less driver-specific code to write.
Study DBIXS.h to see what's included with each type of handle.
Second it defines macros that rename the generic names like
C<dbd_db_login()> to database specific names like C<ora_db_login()>. This
avoids name clashes and enables use of different drivers when you work
with a statically linked perl.
It also will have the important task of disabling XS methods that you
don't want to implement.
Finally, the macros will also be used to select alternate
implementations of some functions. For example, the C<dbd_db_login()>
function is not passed the attribute hash.
Since B<DBI> v1.06, if a C<dbd_db_login6()> macro is defined (for a function
with 6 arguments), it will be used instead with the attribute hash
passed as the sixth argument.
Since B<DBI> post v1.607, if a C<dbd_db_login6_sv()> macro is defined (for
a function like dbd_db_login6 but with scalar pointers for the dbname,
username and password), it will be used instead. This will allow your
login6 function to see if there are any Unicode characters in the
dbname.
Similarly defining dbd_db_do4_iv is preferred over dbd_db_do4, dbd_st_rows_iv
over dbd_st_rows, and dbd_st_execute_iv over dbd_st_execute. The *_iv forms are
declared to return the IV type instead of an int.
People used to just pick Oracle's F<dbdimp.c> and use the same names,
structures and types. I strongly recommend against that. At first glance
this saves time, but your implementation will be less readable. It was
just hell when I had to separate B<DBI> specific parts, Oracle specific
parts, mSQL specific parts and mysql specific parts in B<DBD::mysql>'s
I<dbdimp.h> and I<dbdimp.c>. (B<DBD::mysql> was a port of B<DBD::mSQL>
which was based on B<DBD::Oracle>.) [Seconded, based on the experience
taking B<DBD::Informix> apart, even though the version inherited in 1996
was only based on B<DBD::Oracle>.]
This part of the driver is I<your exclusive part>. Rewrite it from
scratch, so it will be clean and short: in other words, a better piece
of code. (Of course keep an eye on other people's work.)
struct imp_drh_st {
dbih_drc_t com; /* MUST be first element in structure */
/* Insert your driver handle attributes here */
};
struct imp_dbh_st {
dbih_dbc_t com; /* MUST be first element in structure */
/* Insert your database handle attributes here */
};
struct imp_sth_st {
dbih_stc_t com; /* MUST be first element in structure */
/* Insert your statement handle attributes here */
};
/* Rename functions for avoiding name clashes; prototypes are */
/* in dbd_xsh.h */
#define dbd_init drv_dr_init
#define dbd_db_login6_sv drv_db_login_sv
#define dbd_db_do drv_db_do
... many more here ...
These structures implement your private part of the handles.
You I<have> to use the name C<imp_dbh_{dr|db|st}> and the first field
I<must> be of type I<dbih_drc_t|_dbc_t|_stc_t> and I<must> be called
C<com>.
You should never access these fields directly, except by using the
I<DBIc_xxx()> macros below.
=head2 Implementation source dbdimp.c
Conventionally, F<dbdimp.c> is the main implementation file (but
B<DBD::Informix> calls the file F<dbdimp.ec>). This section includes a
short note on each function that is used in the F<Driver.xsi> template
and thus I<has> to be implemented.
Of course, you will probably also need to implement other support
functions, which should usually be file static if they are placed in
F<dbdimp.c>. If they are placed in other files, you need to list those
files in F<Makefile.PL> (and F<MANIFEST>) to handle them correctly.
It is wise to adhere to a namespace convention for your functions to
avoid conflicts. For example, for a driver with prefix I<drv_>, you
might call externally visible functions I<dbd_drv_xxxx>. You should also
avoid non-constant global variables as much as possible to improve the
support for threading.
Since Perl requires support for function prototypes (ANSI or ISO or
Standard C), you should write your code using function prototypes too.
It is possible to use either the unmapped names such as C<dbd_init()> or
the mapped names such as C<dbd_ix_dr_init()> in the F<dbdimp.c> file.
B<DBD::Informix> uses the mapped names which makes it easier to identify
where to look for linkage problems at runtime (which will report errors
using the mapped names).
Most other drivers, and in particular B<DBD::Oracle>, use the unmapped
names in the source code which makes it a little easier to compare code
between drivers and eases discussions on the I<dbi-dev> mailing list.
The majority of the code fragments here will use the unmapped names.
Ultimately, you should provide implementations for most of the
functions listed in the F<dbd_xsh.h> header. The exceptions are
optional functions (such as C<dbd_st_rows()>) and those functions with
alternative signatures, such as C<dbd_db_login6_sv>,
C<dbd_db_login6()> and I<dbd_db_login()>. Then you should only
implement one of the alternatives, and generally the newer one of the
alternatives.
=head3 The dbd_init method
#include "Driver.h"
DBISTATE_DECLARE;
void dbd_init(dbistate_t* dbistate)
{
DBISTATE_INIT; /* Initialize the DBI macros */
}
The C<dbd_init()> function will be called when your driver is first
loaded; the bootstrap command in C<DBD::Driver::dr::driver()> triggers this,
and the call is generated in the I<BOOT> section of F<Driver.xst>.
These statements are needed to allow your driver to use the B<DBI> macros.
They will include your private header file F<dbdimp.h> in turn.
Note that I<DBISTATE_INIT> requires the name of the argument to C<dbd_init()>
to be called C<dbistate()>.
=head3 The dbd_drv_error method
You need a function to record errors so B<DBI> can access them properly.
You can call it whatever you like, but we'll call it C<dbd_drv_error()>
here.
The argument list depends on your database software; different systems
provide different ways to get at error information.
static void dbd_drv_error(SV *h, int rc, const char *what)
{
Note that I<h> is a generic handle, may it be a driver handle, a
database or a statement handle.
D_imp_xxh(h);
This macro will declare and initialize a variable I<imp_xxh> with
a pointer to your private handle pointer. You may cast this to
to I<imp_drh_t>, I<imp_dbh_t> or I<imp_sth_t>.
To record the error correctly, equivalent to the C<set_err()> method,
use one of the C<DBIh_SET_ERR_CHAR(...)> or C<DBIh_SET_ERR_SV(...)> macros,
which were added in B<DBI> 1.41:
DBIh_SET_ERR_SV(h, imp_xxh, err, errstr, state, method);
DBIh_SET_ERR_CHAR(h, imp_xxh, err_c, err_i, errstr, state, method);
For C<DBIh_SET_ERR_SV> the I<err>, I<errstr>, I<state>, and I<method>
parameters are C<SV*> (use &sv_undef instead of NULL).
For C<DBIh_SET_ERR_CHAR> the I<err_c>, I<errstr>, I<state>, I<method>
parameters are C<char*>.
The I<err_i> parameter is an C<IV> that's used instead of I<err_c> if
I<err_c> is C<Null>.
The I<method> parameter can be ignored.
The C<DBIh_SET_ERR_CHAR> macro is usually the simplest to use when you
just have an integer error code and an error message string:
DBIh_SET_ERR_CHAR(h, imp_xxh, Nullch, rc, what, Nullch, Nullch);
As you can see, any parameters that aren't relevant to you can be C<Null>.
To make drivers compatible with B<DBI> < 1.41 you should be using F<dbivport.h>
as described in L</Driver.h> above.
The (obsolete) macros such as C<DBIh_EVENT2> should be removed from drivers.
The names C<dbis> and C<DBIS>, which were used in previous versions of
this document, should be replaced with the C<DBIc_DBISTATE(imp_xxh)> macro.
The name C<DBILOGFP>, which was also used in previous versions of this
document, should be replaced by C<DBIc_LOGPIO(imp_xxh)>.
Your code should not call the C C<E<lt>stdio.hE<gt>> I/O functions; you
should use C<PerlIO_printf()> as shown:
if (DBIc_TRACE_LEVEL(imp_xxh) >= 2)
PerlIO_printf(DBIc_LOGPIO(imp_xxh), "foobar %s: %s\n",
foo, neatsvpv(errstr,0));
That's the first time we see how tracing works within a B<DBI> driver. Make
use of this as often as you can, but don't output anything at a trace
level less than 3. Levels 1 and 2 are reserved for the B<DBI>.
You can define up to 8 private trace flags using the top 8 bits
of C<DBIc_TRACE_FLAGS(imp)>, that is: C<0xFF000000>. See the
C<parse_trace_flag()> method elsewhere in this document.
=head3 The dbd_dr_data_sources method
This method is optional; the support for it was added in B<DBI> v1.33.
As noted in the discussion of F<Driver.pm>, if the data sources
can be determined by pure Perl code, do it that way. If, as in
B<DBD::Informix>, the information is obtained by a C function call, then
you need to define a function that matches the prototype:
extern AV *dbd_dr_data_sources(SV *drh, imp_drh_t *imp_drh, SV *attrs);
An outline implementation for B<DBD::Informix> follows, assuming that the
C<sqgetdbs()> function call shown will return up to 100 databases names,
with the pointers to each name in the array dbsname and the name strings
themselves being stores in dbsarea.
AV *dbd_dr_data_sources(SV *drh, imp_drh_t *imp_drh, SV *attr)
{
int ndbs;
int i;
char *dbsname[100];
char dbsarea[10000];
AV *av = Nullav;
if (sqgetdbs(&ndbs, dbsname, 100, dbsarea, sizeof(dbsarea)) == 0)
{
av = NewAV();
av_extend(av, (I32)ndbs);
sv_2mortal((SV *)av);
for (i = 0; i < ndbs; i++)
av_store(av, i, newSVpvf("dbi:Informix:%s", dbsname[i]));
}
return(av);
}
The actual B<DBD::Informix> implementation has a number of extra lines of
code, logs function entry and exit, reports the error from C<sqgetdbs()>,
and uses C<#define>'d constants for the array sizes.
=head3 The dbd_db_login6 method
int dbd_db_login6_sv(SV* dbh, imp_dbh_t* imp_dbh, SV* dbname,
SV* user, SV* auth, SV *attr);
or
int dbd_db_login6(SV* dbh, imp_dbh_t* imp_dbh, char* dbname,
char* user, char* auth, SV *attr);
This function will really connect to the database. The argument I<dbh>
is the database handle. I<imp_dbh> is the pointer to the handles private
data, as is I<imp_xxx> in C<dbd_drv_error()> above. The arguments
I<dbname>, I<user>, I<auth> and I<attr> correspond to the arguments of
the driver handle's C<connect()> method.
You will quite often use database specific attributes here, that are
specified in the DSN. I recommend you parse the DSN (using Perl) within
the C<connect()> method and pass the segments of the DSN via the
attributes parameter through C<_login()> to C<dbd_db_login6()>.
Here's how you fetch them; as an example we use I<hostname> attribute,
which can be up to 12 characters long excluding null terminator:
SV** svp;
STRLEN len;
char* hostname;
if ( (svp = DBD_ATTRIB_GET_SVP(attr, "drv_hostname", 12)) && SvTRUE(*svp)) {
hostname = SvPV(*svp, len);
DBD_ATTRIB_DELETE(attr, "drv_hostname", 12); /* avoid later STORE */
} else {
hostname = "localhost";
}
If you handle any driver specific attributes in the dbd_db_login6
method you probably want to delete them from C<attr> (as above with
DBD_ATTRIB_DELETE). If you don't delete your handled attributes DBI
will call C<STORE> for each attribute after the connect/login and this
is at best redundant for attributes you have already processed.
B<Note: Until revision 11605 (post DBI 1.607), there was a problem with
DBD_ATTRIBUTE_DELETE so unless you require a DBI version after 1.607
you need to replace each DBD_ATTRIBUTE_DELETE call with:>
hv_delete((HV*)SvRV(attr), key, key_len, G_DISCARD)
Note that you can also obtain standard attributes such as I<AutoCommit> and
I<ChopBlanks> from the attributes parameter, using C<DBD_ATTRIB_GET_IV> for
integer attributes.
If, for example, your database does not support transactions but
I<AutoCommit> is set off (requesting transaction support), then you can
emulate a 'failure to connect'.
Now you should really connect to the database. In general, if the
connection fails, it is best to ensure that all allocated resources are
released so that the handle does not need to be destroyed separately. If
you are successful (and possibly even if you fail but you have allocated
some resources), you should use the following macros:
DBIc_IMPSET_on(imp_dbh);
This indicates that the driver (implementor) has allocated resources in
the I<imp_dbh> structure and that the implementors private C<dbd_db_destroy()>
function should be called when the handle is destroyed.
DBIc_ACTIVE_on(imp_dbh);
This indicates that the handle has an active connection to the server
and that the C<dbd_db_disconnect()> function should be called before the
handle is destroyed.
Note that if you do need to fail, you should report errors via the I<drh>
or I<imp_drh> rather than via I<dbh> or I<imp_dbh> because I<imp_dbh> will be
destroyed by the failure, so errors recorded in that handle will not be
visible to B<DBI>, and hence not the user either.
Note too, that the function is passed I<dbh> and I<imp_dbh>, and there
is a macro C<D_imp_drh_from_dbh> which can recover the I<imp_drh> from
the I<imp_dbh>. However, there is no B<DBI> macro to provide you with the
I<drh> given either the I<imp_dbh> or the I<dbh> or the I<imp_drh> (and
there's no way to recover the I<dbh> given just the I<imp_dbh>).
This suggests that, despite the above notes about C<dbd_drv_error()>
taking an C<SV *>, it may be better to have two error routines, one
taking I<imp_dbh> and one taking I<imp_drh> instead. With care, you can
factor most of the formatting code out so that these are small routines
calling a common error formatter. See the code in B<DBD::Informix>
1.05.00 for more information.
The C<dbd_db_login6()> function should return I<TRUE> for success,
I<FALSE> otherwise.
Drivers implemented long ago may define the five-argument function
C<dbd_db_login()> instead of C<dbd_db_login6()>. The missing argument is
the attributes. There are ways to work around the missing attributes,
but they are ungainly; it is much better to use the 6-argument form.
Even later drivers will use C<dbd_db_login6_sv()> which provides the
dbname, username and password as SVs.
=head3 The dbd_db_commit and dbd_db_rollback methods
int dbd_db_commit(SV *dbh, imp_dbh_t *imp_dbh);
int dbd_db_rollback(SV* dbh, imp_dbh_t* imp_dbh);
These are used for commit and rollback. They should return I<TRUE> for
success, I<FALSE> for error.
The arguments I<dbh> and I<imp_dbh> are the same as for C<dbd_db_login6()>
above; I will omit describing them in what follows, as they appear
always.
These functions should return I<TRUE> for success, I<FALSE> otherwise.
=head3 The dbd_db_disconnect method
This is your private part of the C<disconnect()> method. Any I<dbh> with
the I<ACTIVE> flag on must be disconnected. (Note that you have to set
it in C<dbd_db_connect()> above.)
int dbd_db_disconnect(SV* dbh, imp_dbh_t* imp_dbh);
The database handle will return I<TRUE> for success, I<FALSE> otherwise.
In any case it should do a:
DBIc_ACTIVE_off(imp_dbh);
before returning so B<DBI> knows that C<dbd_db_disconnect()> was executed.
Note that there's nothing to stop a I<dbh> being I<disconnected> while
it still have active children. If your database API reacts badly to
trying to use an I<sth> in this situation then you'll need to add code
like this to all I<sth> methods:
if (!DBIc_ACTIVE(DBIc_PARENT_COM(imp_sth)))
return 0;
Alternatively, you can add code to your driver to keep explicit track of
the statement handles that exist for each database handle and arrange
to destroy those handles before disconnecting from the database. There
is code to do this in B<DBD::Informix>. Similar comments apply to the
driver handle keeping track of all the database handles.
Note that the code which destroys the subordinate handles should only
release the associated database resources and mark the handles inactive;
it does not attempt to free the actual handle structures.
This function should return I<TRUE> for success, I<FALSE> otherwise, but
it is not clear what anything can do about a failure.
=head3 The dbd_db_discon_all method
int dbd_discon_all (SV *drh, imp_drh_t *imp_drh);
This function may be called at shutdown time. It should make
best-efforts to disconnect all database handles - if possible. Some
databases don't support that, in which case you can do nothing
but return 'success'.
This function should return I<TRUE> for success, I<FALSE> otherwise, but
it is not clear what anything can do about a failure.
=head3 The dbd_db_destroy method
This is your private part of the database handle destructor. Any I<dbh> with
the I<IMPSET> flag on must be destroyed, so that you can safely free
resources. (Note that you have to set it in C<dbd_db_connect()> above.)
void dbd_db_destroy(SV* dbh, imp_dbh_t* imp_dbh)
{
DBIc_IMPSET_off(imp_dbh);
}
The B<DBI> F<Driver.xst> code will have called C<dbd_db_disconnect()> for you,
if the handle is still 'active', before calling C<dbd_db_destroy()>.
Before returning the function must switch I<IMPSET> to off, so B<DBI> knows
that the destructor was called.
A B<DBI> handle doesn't keep references to its children. But children
do keep references to their parents. So a database handle won't be
C<DESTROY>'d until all its children have been C<DESTROY>'d.
=head3 The dbd_db_STORE_attrib method
This function handles
$dbh->{$key} = $value;
Its prototype is:
int dbd_db_STORE_attrib(SV* dbh, imp_dbh_t* imp_dbh, SV* keysv,
SV* valuesv);
You do not handle all attributes; on the contrary, you should not handle
B<DBI> attributes here: leave this to B<DBI>. (There are two exceptions,
I<AutoCommit> and I<ChopBlanks>, which you should care about.)
The return value is I<TRUE> if you have handled the attribute or I<FALSE>
otherwise. If you are handling an attribute and something fails, you
should call C<dbd_drv_error()>, so B<DBI> can raise exceptions, if desired.
If C<dbd_drv_error()> returns, however, you have a problem: the user will
never know about the error, because he typically will not check
C<$dbh-E<gt>errstr()>.
I cannot recommend a general way of going on, if C<dbd_drv_error()> returns,
but there are examples where even the B<DBI> specification expects that
you C<croak()>. (See the I<AutoCommit> method in L<DBI>.)
If you have to store attributes, you should either use your private
data structure I<imp_xxx>, the handle hash (via C<(HV*)SvRV(dbh)>), or use
the private I<imp_data>.
The first is best for internal C values like integers or pointers and
where speed is important within the driver. The handle hash is best for
values the user may want to get/set via driver-specific attributes.
The private I<imp_data> is an additional C<SV> attached to the handle. You
could think of it as an unnamed handle attribute. It's not normally used.
=head3 The dbd_db_FETCH_attrib method
This is the counterpart of C<dbd_db_STORE_attrib()>, needed for:
$value = $dbh->{$key};
Its prototype is:
SV* dbd_db_FETCH_attrib(SV* dbh, imp_dbh_t* imp_dbh, SV* keysv);
Unlike all previous methods this returns an C<SV> with the value. Note
that you should normally execute C<sv_2mortal()>, if you return a nonconstant
value. (Constant values are C<&sv_undef>, C<&sv_no> and C<&sv_yes>.)
Note, that B<DBI> implements a caching algorithm for attribute values.
If you think, that an attribute may be fetched, you store it in the
I<dbh> itself:
if (cacheit) /* cache value for later DBI 'quick' fetch? */
hv_store((HV*)SvRV(dbh), key, kl, cachesv, 0);
=head3 The dbd_st_prepare method
This is the private part of the C<prepare()> method. Note that you
B<must not> really execute the statement here. You may, however,
preparse and validate the statement, or do similar things.
int dbd_st_prepare(SV* sth, imp_sth_t* imp_sth, char* statement,
SV* attribs);
A typical, simple, possibility is to do nothing and rely on the perl
C<prepare()> code that set the I<Statement> attribute on the handle. This
attribute can then be used by C<dbd_st_execute()>.
If the driver supports placeholders then the I<NUM_OF_PARAMS> attribute
must be set correctly by C<dbd_st_prepare()>:
DBIc_NUM_PARAMS(imp_sth) = ...
If you can, you should also setup attributes like I<NUM_OF_FIELDS>, I<NAME>,
etc. here, but B<DBI> doesn't require that - they can be deferred until
execute() is called. However, if you do, document it.
In any case you should set the I<IMPSET> flag, as you did in
C<dbd_db_connect()> above:
DBIc_IMPSET_on(imp_sth);
=head3 The dbd_st_execute method
This is where a statement will really be executed.
int dbd_st_execute(SV* sth, imp_sth_t* imp_sth);
C<dbd_st_execute> should return -2 for any error, -1 if the number of
rows affected is unknown else it should be the number of affected
(updated, inserted) rows.
Note that you must be aware a statement may be executed repeatedly.
Also, you should not expect that C<finish()> will be called between two
executions, so you might need code, like the following, near the start
of the function:
if (DBIc_ACTIVE(imp_sth))
dbd_st_finish(h, imp_sth);
If your driver supports the binding of parameters (it should!), but the
database doesn't, you must do it here. This can be done as follows:
SV *svp;
char* statement = DBD_ATTRIB_GET_PV(h, "Statement", 9, svp, "");
int numParam = DBIc_NUM_PARAMS(imp_sth);
int i;
for (i = 0; i < numParam; i++)
{
char* value = dbd_db_get_param(sth, imp_sth, i);
/* It is your drivers task to implement dbd_db_get_param, */
/* it must be setup as a counterpart of dbd_bind_ph. */
/* Look for '?' and replace it with 'value'. Difficult */
/* task, note that you may have question marks inside */
/* quotes and comments the like ... :-( */
/* See DBD::mysql for an example. (Don't look too deep into */
/* the example, you will notice where I was lazy ...) */
}
The next thing is to really execute the statement.
Note that you must set the attributes I<NUM_OF_FIELDS>, I<NAME>, etc
when the statement is successfully executed if the driver has not
already done so: they may be used even before a potential C<fetchrow()>.
In particular you have to tell B<DBI> the number of fields that the
statement has, because it will be used by B<DBI> internally. Thus the
function will typically ends with:
if (isSelectStatement) {
DBIc_NUM_FIELDS(imp_sth) = numFields;
DBIc_ACTIVE_on(imp_sth);
}
It is important that the I<ACTIVE> flag only be set for C<SELECT>
statements (or any other statements that can return many
values from the database using a cursor-like mechanism). See
C<dbd_db_connect()> above for more explanations.
There plans for a preparse function to be provided by B<DBI>, but this has
not reached fruition yet.
Meantime, if you want to know how ugly it can get, try looking at the
C<dbd_ix_preparse()> in B<DBD::Informix> F<dbdimp.ec> and the related
functions in F<iustoken.c> and F<sqltoken.c>.
=head3 The dbd_st_fetch method
This function fetches a row of data. The row is stored in in an array,
of C<SV>'s that B<DBI> prepares for you. This has two advantages: it is fast
(you even reuse the C<SV>'s, so they don't have to be created after the
first C<fetchrow()>), and it guarantees that B<DBI> handles C<bind_cols()> for
you.
What you do is the following:
AV* av;
int numFields = DBIc_NUM_FIELDS(imp_sth); /* Correct, if NUM_FIELDS
is constant for this statement. There are drivers where this is
not the case! */
int chopBlanks = DBIc_is(imp_sth, DBIcf_ChopBlanks);
int i;
if (!fetch_new_row_of_data(...)) {
... /* check for error or end-of-data */
DBIc_ACTIVE_off(imp_sth); /* turn off Active flag automatically */
return Nullav;
}
/* get the fbav (field buffer array value) for this row */
/* it is very important to only call this after you know */
/* that you have a row of data to return. */
av = DBIc_DBISTATE(imp_sth)->get_fbav(imp_sth);
for (i = 0; i < numFields; i++) {
SV* sv = fetch_a_field(..., i);
if (chopBlanks && SvOK(sv) && type_is_blank_padded(field_type[i])) {
/* Remove white space from end (only) of sv */
}
sv_setsv(AvARRAY(av)[i], sv); /* Note: (re)use! */
}
return av;
There's no need to use a C<fetch_a_field()> function returning an C<SV*>.
It's more common to use your database API functions to fetch the
data as character strings and use code like this:
sv_setpvn(AvARRAY(av)[i], char_ptr, char_count);
C<NULL> values must be returned as C<undef>. You can use code like this:
SvOK_off(AvARRAY(av)[i]);
The function returns the C<AV> prepared by B<DBI> for success or C<Nullav>
otherwise.
*FIX ME* Discuss what happens when there's no more data to fetch.
Are errors permitted if another fetch occurs after the first fetch
that reports no more data. (Permitted, not required.)
If an error occurs which leaves the I<$sth> in a state where remaining
rows can't be fetched then I<Active> should be turned off before the
method returns.
=head3 The dbd_st_finish3 method
The C<$sth-E<gt>finish()> method can be called if the user wishes to
indicate that no more rows will be fetched even if the database has more
rows to offer, and the B<DBI> code can call the function when handles are
being destroyed. See the B<DBI> specification for more background details.
In both circumstances, the B<DBI> code ends up calling the
C<dbd_st_finish3()> method (if you provide a mapping for
C<dbd_st_finish3()> in F<dbdimp.h>), or C<dbd_st_finish()> otherwise.
The difference is that C<dbd_st_finish3()> takes a third argument which
is an C<int> with the value 1 if it is being called from a C<destroy()>
method and 0 otherwise.
Note that B<DBI> v1.32 and earlier test on C<dbd_db_finish3()> to call
C<dbd_st_finish3()>; if you provide C<dbd_st_finish3()>, either define
C<dbd_db_finish3()> too, or insist on B<DBI> v1.33 or later.
All it I<needs> to do is turn off the I<Active> flag for the I<sth>.
It will only be called by F<Driver.xst> code, if the driver has set I<ACTIVE>
to on for the I<sth>.
Outline example:
int dbd_st_finish3(SV* sth, imp_sth_t* imp_sth, int from_destroy) {
if (DBIc_ACTIVE(imp_sth))
{
/* close cursor or equivalent action */
DBIc_ACTIVE_off(imp_sth);
}
return 1;
}
The from_destroy parameter is true if C<dbd_st_finish3()> is being called
from C<DESTROY()> - and so the statement is about to be destroyed.
For many drivers there is no point in doing anything more than turning off
the I<Active> flag in this case.
The function returns I<TRUE> for success, I<FALSE> otherwise, but there isn't
a lot anyone can do to recover if there is an error.
=head3 The dbd_st_destroy method
This function is the private part of the statement handle destructor.
void dbd_st_destroy(SV* sth, imp_sth_t* imp_sth) {
... /* any clean-up that's needed */
DBIc_IMPSET_off(imp_sth); /* let DBI know we've done it */
}
The B<DBI> F<Driver.xst> code will call C<dbd_st_finish()> for you, if the
I<sth> has the I<ACTIVE> flag set, before calling C<dbd_st_destroy()>.
=head3 The dbd_st_STORE_attrib and dbd_st_FETCH_attrib methods
These functions correspond to C<dbd_db_STORE()> and C<dbd_db_FETCH()> attrib
above, except that they are for statement handles.
See above.
int dbd_st_STORE_attrib(SV* sth, imp_sth_t* imp_sth, SV* keysv,
SV* valuesv);
SV* dbd_st_FETCH_attrib(SV* sth, imp_sth_t* imp_sth, SV* keysv);
=head3 The dbd_bind_ph method
This function is internally used by the C<bind_param()> method, the
C<bind_param_inout()> method and by the B<DBI> F<Driver.xst> code if
C<execute()> is called with any bind parameters.
int dbd_bind_ph (SV *sth, imp_sth_t *imp_sth, SV *param,
SV *value, IV sql_type, SV *attribs,
int is_inout, IV maxlen);
The I<param> argument holds an C<IV> with the parameter number (1, 2, ...).
The I<value> argument is the parameter value and I<sql_type> is its type.
If your driver does not support C<bind_param_inout()> then you should
ignore I<maxlen> and croak if I<is_inout> is I<TRUE>.
If your driver I<does> support C<bind_param_inout()> then you should
note that I<value> is the C<SV> I<after> dereferencing the reference
passed to C<bind_param_inout()>.
In drivers of simple databases the function will, for example, store
the value in a parameter array and use it later in C<dbd_st_execute()>.
See the B<DBD::mysql> driver for an example.
=head3 Implementing bind_param_inout support
To provide support for parameters bound by reference rather than by
value, the driver must do a number of things. First, and most
importantly, it must note the references and stash them in its own
driver structure. Secondly, when a value is bound to a column, the
driver must discard any previous reference bound to the column. On
each execute, the driver must evaluate the references and internally
bind the values resulting from the references. This is only applicable
if the user writes:
$sth->execute;
If the user writes:
$sth->execute(@values);
then B<DBI> automatically calls the binding code for each element of
I<@values>. These calls are indistinguishable from explicit user calls to
C<bind_param()>.
=head2 C/XS version of Makefile.PL
The F<Makefile.PL> file for a C/XS driver is similar to the code needed
for a pure Perl driver, but there are a number of extra bits of
information needed by the build system.
For example, the attributes list passed to C<WriteMakefile()> needs
to specify the object files that need to be compiled and built into
the shared object (DLL). This is often, but not necessarily, just
F<dbdimp.o> (unless that should be F<dbdimp.obj> because you're building
on MS Windows).
Note that you can reliably determine the extension of the object files
from the I<$Config{obj_ext}> values, and there are many other useful pieces
of configuration information lurking in that hash.
You get access to it with:
use Config;
=head2 Methods which do not need to be written
The B<DBI> code implements the majority of the methods which are accessed
using the notation C<DBI-E<gt>function()>, the only exceptions being
C<DBI-E<gt>connect()> and C<DBI-E<gt>data_sources()> which require
support from the driver.
The B<DBI> code implements the following documented driver, database and
statement functions which do not need to be written by the B<DBD> driver
writer.
=over 4
=item $dbh->do()
The default implementation of this function prepares, executes and
destroys the statement. This can be replaced if there is a better
way to implement this, such as C<EXECUTE IMMEDIATE> which can
sometimes be used if there are no parameters.
=item $h->errstr()
=item $h->err()
=item $h->state()
=item $h->trace()
The B<DBD> driver does not need to worry about these routines at all.
=item $h->{ChopBlanks}
This attribute needs to be honored during C<fetch()> operations, but does
not need to be handled by the attribute handling code.
=item $h->{RaiseError}
The B<DBD> driver does not need to worry about this attribute at all.
=item $h->{PrintError}
The B<DBD> driver does not need to worry about this attribute at all.
=item $sth->bind_col()
Assuming the driver uses the C<DBIc_DBISTATE(imp_xxh)-E<gt>get_fbav()>
function (C drivers, see below), or the C<$sth-E<gt>_set_fbav($data)>
method (Perl drivers) the driver does not need to do anything about this
routine.
=item $sth->bind_columns()
Regardless of whether the driver uses
C<DBIc_DBISTATE(imp_xxh)-E<gt>get_fbav()>, the driver does not need
to do anything about this routine as it simply iteratively calls
C<$sth-E<gt>bind_col()>.
=back
The B<DBI> code implements a default implementation of the following
functions which do not need to be written by the B<DBD> driver writer
unless the default implementation is incorrect for the Driver.
=over 4
=item $dbh->quote()
This should only be written if the database does not accept the ANSI
SQL standard for quoting strings, with the string enclosed in single
quotes and any embedded single quotes replaced by two consecutive
single quotes.
For the two argument form of quote, you need to implement the
C<type_info()> method to provide the information that quote needs.
=item $dbh->ping()
This should be implemented as a simple efficient way to determine
whether the connection to the database is still alive. Typically
code like this:
sub ping {
my $dbh = shift;
$sth = $dbh->prepare_cached(q{
select * from A_TABLE_NAME where 1=0
}) or return 0;
$sth->execute or return 0;
$sth->finish;
return 1;
}
where I<A_TABLE_NAME> is the name of a table that always exists (such as a
database system catalogue).
=item $drh->default_user
The default implementation of default_user will get the database
username and password fields from C<$ENV{DBI_USER}> and
C<$ENV{DBI_PASS}>. You can override this method. It is called as
follows:
($user, $pass) = $drh->default_user($user, $pass, $attr)
=back
=head1 METADATA METHODS
The exposition above ignores the B<DBI> MetaData methods.
The metadata methods are all associated with a database handle.
=head2 Using DBI::DBD::Metadata
The B<DBI::DBD::Metadata> module is a good semi-automatic way for the
developer of a B<DBD> module to write the C<get_info()> and C<type_info()>
functions quickly and accurately.
=head3 Generating the get_info method
Prior to B<DBI> v1.33, this existed as the method C<write_getinfo_pm()>
in the B<DBI::DBD> module. From B<DBI> v1.33, it exists as the method
C<write_getinfo_pm()> in the B<DBI::DBD::Metadata> module. This
discussion assumes you have B<DBI> v1.33 or later.
You examine the documentation for C<write_getinfo_pm()> using:
perldoc DBI::DBD::Metadata
To use it, you need a Perl B<DBI> driver for your database which implements
the C<get_info()> method. In practice, this means you need to install
B<DBD::ODBC>, an ODBC driver manager, and an ODBC driver for your
database.
With the pre-requisites in place, you might type:
perl -MDBI::DBD::Metadata -we \
"write_getinfo_pm (qw{ dbi:ODBC:foo_db username password Driver })"
The procedure writes to standard output the code that should be added to
your F<Driver.pm> file and the code that should be written to
F<lib/DBD/Driver/GetInfo.pm>.
You should review the output to ensure that it is sensible.
=head3 Generating the type_info method
Given the idea of the C<write_getinfo_pm()> method, it was not hard
to devise a parallel method, C<write_typeinfo_pm()>, which does the
analogous job for the B<DBI> C<type_info_all()> metadata method. The
C<write_typeinfo_pm()> method was added to B<DBI> v1.33.
You examine the documentation for C<write_typeinfo_pm()> using:
perldoc DBI::DBD::Metadata
The setup is exactly analogous to the mechanism described in
L</Generating the get_info method>.
With the pre-requisites in place, you might type:
perl -MDBI::DBD::Metadata -we \
"write_typeinfo_pm (qw{ dbi:ODBC:foo_db username password Driver })"
The procedure writes to standard output the code that should be added to
your F<Driver.pm> file and the code that should be written to
F<lib/DBD/Driver/TypeInfo.pm>.
You should review the output to ensure that it is sensible.
=head2 Writing DBD::Driver::db::get_info
If you use the B<DBI::DBD::Metadata> module, then the code you need is
generated for you.
If you decide not to use the B<DBI::DBD::Metadata> module, you
should probably borrow the code from a driver that has done so (eg
B<DBD::Informix> from version 1.05 onwards) and crib the code from
there, or look at the code that generates that module and follow
that. The method in F<Driver.pm> will be very simple; the method in
F<lib/DBD/Driver/GetInfo.pm> is not very much more complex unless your
DBMS itself is much more complex.
Note that some of the B<DBI> utility methods rely on information from the
C<get_info()> method to perform their operations correctly. See, for
example, the C<quote_identifier()> and quote methods, discussed below.
=head2 Writing DBD::Driver::db::type_info_all
If you use the C<DBI::DBD::Metadata> module, then the code you need is
generated for you.
If you decide not to use the C<DBI::DBD::Metadata> module, you
should probably borrow the code from a driver that has done so (eg
C<DBD::Informix> from version 1.05 onwards) and crib the code from
there, or look at the code that generates that module and follow
that. The method in F<Driver.pm> will be very simple; the method in
F<lib/DBD/Driver/TypeInfo.pm> is not very much more complex unless your
DBMS itself is much more complex.
=head2 Writing DBD::Driver::db::type_info
The guidelines on writing this method are still not really clear.
No sample implementation is available.
=head2 Writing DBD::Driver::db::table_info
*FIX ME* The guidelines on writing this method have not been written yet.
No sample implementation is available.
=head2 Writing DBD::Driver::db::column_info
*FIX ME* The guidelines on writing this method have not been written yet.
No sample implementation is available.
=head2 Writing DBD::Driver::db::primary_key_info
*FIX ME* The guidelines on writing this method have not been written yet.
No sample implementation is available.
=head2 Writing DBD::Driver::db::primary_key
*FIX ME* The guidelines on writing this method have not been written yet.
No sample implementation is available.
=head2 Writing DBD::Driver::db::foreign_key_info
*FIX ME* The guidelines on writing this method have not been written yet.
No sample implementation is available.
=head2 Writing DBD::Driver::db::tables
This method generates an array of names in a format suitable for being
embedded in SQL statements in places where a table name is expected.
If your database hews close enough to the SQL standard or if you have
implemented an appropriate C<table_info()> function and and the appropriate
C<quote_identifier()> function, then the B<DBI> default version of this method
will work for your driver too.
Otherwise, you have to write a function yourself, such as:
sub tables
{
my($dbh, $cat, $sch, $tab, $typ) = @_;
my(@res);
my($sth) = $dbh->table_info($cat, $sch, $tab, $typ);
my(@arr);
while (@arr = $sth->fetchrow_array)
{
push @res, $dbh->quote_identifier($arr[0], $arr[1], $arr[2]);
}
return @res;
}
See also the default implementation in F<DBI.pm>.
=head2 Writing DBD::Driver::db::quote
This method takes a value and converts it into a string suitable for
embedding in an SQL statement as a string literal.
If your DBMS accepts the SQL standard notation for strings (single
quotes around the string as a whole with any embedded single quotes
doubled up), then you do not need to write this method as B<DBI> provides a
default method that does it for you.
If your DBMS uses an alternative notation or escape mechanism, then you
need to provide an equivalent function. For example, suppose your DBMS
used C notation with double quotes around the string and backslashes
escaping both double quotes and backslashes themselves. Then you might
write the function as:
sub quote
{
my($dbh, $str) = @_;
$str =~ s/["\\]/\\$&/gmo;
return qq{"$str"};
}
Handling newlines and other control characters is left as an exercise
for the reader.
This sample method ignores the I<$data_type> indicator which is the
optional second argument to the method.
=head2 Writing DBD::Driver::db::quote_identifier
This method is called to ensure that the name of the given table (or
other database object) can be embedded into an SQL statement without
danger of misinterpretation. The result string should be usable in the
text of an SQL statement as the identifier for a table.
If your DBMS accepts the SQL standard notation for quoted identifiers
(which uses double quotes around the identifier as a whole, with any
embedded double quotes doubled up) and accepts I<"schema"."identifier">
(and I<"catalog"."schema"."identifier"> when a catalog is specified), then
you do not need to write this method as B<DBI> provides a default method
that does it for you.
In fact, even if your DBMS does not handle exactly that notation but
you have implemented the C<get_info()> method and it gives the correct
responses, then it will work for you. If your database is fussier, then
you need to implement your own version of the function.
For example, B<DBD::Informix> has to deal with an environment variable
I<DELIMIDENT>. If it is not set, then the DBMS treats names enclosed in
double quotes as strings rather than names, which is usually a syntax
error. Additionally, the catalog portion of the name is separated from
the schema and table by a different delimiter (colon instead of dot),
and the catalog portion is never enclosed in quotes. (Fortunately,
valid strings for the catalog will never contain weird characters that
might need to be escaped, unless you count dots, dashes, slashes and
at-signs as weird.) Finally, an Informix database can contain objects
that cannot be accessed because they were created by a user with the
I<DELIMIDENT> environment variable set, but the current user does not
have it set. By design choice, the C<quote_identifier()> method encloses
those identifiers in double quotes anyway, which generally triggers a
syntax error, and the metadata methods which generate lists of tables
etc omit those identifiers from the result sets.
sub quote_identifier
{
my($dbh, $cat, $sch, $obj) = @_;
my($rv) = "";
my($qq) = (defined $ENV{DELIMIDENT}) ? '"' : '';
$rv .= qq{$cat:} if (defined $cat);
if (defined $sch)
{
if ($sch !~ m/^\w+$/o)
{
$qq = '"';
$sch =~ s/$qq/$qq$qq/gm;
}
$rv .= qq{$qq$sch$qq.};
}
if (defined $obj)
{
if ($obj !~ m/^\w+$/o)
{
$qq = '"';
$obj =~ s/$qq/$qq$qq/gm;
}
$rv .= qq{$qq$obj$qq};
}
return $rv;
}
Handling newlines and other control characters is left as an exercise
for the reader.
Note that there is an optional fourth parameter to this function which
is a reference to a hash of attributes; this sample implementation
ignores that.
This sample implementation also ignores the single-argument variant of
the method.
=head1 TRACING
Tracing in DBI is controlled with a combination of a trace level and a
set of flags which together are known as the trace settings. The trace
settings are stored in a single integer and divided into levels and
flags by a set of masks (C<DBIc_TRACE_LEVEL_MASK> and
C<DBIc_TRACE_FLAGS_MASK>).
Each handle has it's own trace settings and so does the DBI. When you
call a method the DBI merges the handles settings into its own for the
duration of the call: the trace flags of the handle are OR'd into the
trace flags of the DBI, and if the handle has a higher trace level
then the DBI trace level is raised to match it. The previous DBI trace
settings are restored when the called method returns.
=head2 Trace Level
The trace level is the first 4 bits of the trace settings (masked by
C<DBIc_TRACE_FLAGS_MASK>) and represents trace levels of 1 to 15. Do
not output anything at trace levels less than 3 as they are reserved
for DBI.
For advice on what to output at each level see "Trace Levels" in
L<DBI>.
To test for a trace level you can use the C<DBIc_TRACE_LEVEL> macro
like this:
if (DBIc_TRACE_LEVEL(imp_xxh) >= 2) {
PerlIO_printf(DBIc_LOGPIO(imp_xxh), "foobar");
}
Also B<note> the use of PerlIO_printf which you should always use for
tracing and never the C C<stdio.h> I/O functions.
=head2 Trace Flags
Trace flags are used to enable tracing of specific activities within
the DBI and drivers. The DBI defines some trace flags and drivers can
define others. DBI trace flag names begin with a capital letter and
driver specific names begin with a lowercase letter. For a list of DBI
defined trace flags see "Trace Flags" in L<DBI>.
If you want to use private trace flags you'll probably want to be able
to set them by name. Drivers are expected to override the
parse_trace_flag (note the singular) and check if $trace_flag_name is
a driver specific trace flags and, if not, then call the DBIs default
parse_trace_flag(). To do that you'll need to define a
parse_trace_flag() method like this:
sub parse_trace_flag {
my ($h, $name) = @_;
return 0x01000000 if $name eq 'foo';
return 0x02000000 if $name eq 'bar';
return 0x04000000 if $name eq 'baz';
return 0x08000000 if $name eq 'boo';
return 0x10000000 if $name eq 'bop';
return $h->SUPER::parse_trace_flag($name);
}
All private flag names must be lowercase, and all private flags must
be in the top 8 of the 32 bits of C<DBIc_TRACE_FLAGS(imp)> i.e.,
0xFF000000.
If you've defined a parse_trace_flag() method in ::db you'll also want
it in ::st, so just alias it in:
*parse_trace_flag = \&DBD::foo:db::parse_trace_flag;
You may want to act on the current 'SQL' trace flag that DBI defines
to output SQL prepared/executed as DBI currently does not do SQL
tracing.
=head2 Trace Macros
Access to the trace level and trace flags is via a set of macros.
DBIc_TRACE_SETTINGS(imp) returns the trace settings
DBIc_TRACE_LEVEL(imp) returns the trace level
DBIc_TRACE_FLAGS(imp) returns the trace flags
DBIc_TRACE(imp, flags, flaglevel, level)
e.g.,
DBIc_TRACE(imp, 0, 0, 4)
if level >= 4
DBIc_TRACE(imp, DBDtf_FOO, 2, 4)
if tracing DBDtf_FOO & level>=2 or level>=4
DBIc_TRACE(imp, DBDtf_FOO, 2, 0)
as above but never trace just due to level
=head1 WRITING AN EMULATION LAYER FOR AN OLD PERL INTERFACE
Study F<Oraperl.pm> (supplied with B<DBD::Oracle>) and F<Ingperl.pm> (supplied
with B<DBD::Ingres>) and the corresponding I<dbdimp.c> files for ideas.
Note that the emulation code sets C<$dbh-E<gt>{CompatMode} = 1;> for each
connection so that the internals of the driver can implement behaviour
compatible with the old interface when dealing with those handles.
=head2 Setting emulation perl variables
For example, ingperl has a I<$sql_rowcount> variable. Rather than try
to manually update this in F<Ingperl.pm> it can be done faster in C code.
In C<dbd_init()>:
sql_rowcount = perl_get_sv("Ingperl::sql_rowcount", GV_ADDMULTI);
In the relevant places do:
if (DBIc_COMPAT(imp_sth)) /* only do this for compatibility mode handles */
sv_setiv(sql_rowcount, the_row_count);
=head1 OTHER MISCELLANEOUS INFORMATION
=head2 The imp_xyz_t types
Any handle has a corresponding C structure filled with private data.
Some of this data is reserved for use by B<DBI> (except for using the
DBIc macros below), some is for you. See the description of the
F<dbdimp.h> file above for examples. Most functions in F<dbdimp.c>
are passed both the handle C<xyz> and a pointer to C<imp_xyz>. In
rare cases, however, you may use the following macros:
=over 4
=item D_imp_dbh(dbh)
Given a function argument I<dbh>, declare a variable I<imp_dbh> and
initialize it with a pointer to the handles private data. Note: This
must be a part of the function header, because it declares a variable.
=item D_imp_sth(sth)
Likewise for statement handles.
=item D_imp_xxx(h)
Given any handle, declare a variable I<imp_xxx> and initialize it
with a pointer to the handles private data. It is safe, for example,
to cast I<imp_xxx> to C<imp_dbh_t*>, if C<DBIc_TYPE(imp_xxx) == DBIt_DB>.
(You can also call C<sv_derived_from(h, "DBI::db")>, but that's much
slower.)
=item D_imp_dbh_from_sth
Given a I<imp_sth>, declare a variable I<imp_dbh> and initialize it with a
pointer to the parent database handle's implementors structure.
=back
=head2 Using DBIc_IMPSET_on
The driver code which initializes a handle should use C<DBIc_IMPSET_on()>
as soon as its state is such that the cleanup code must be called.
When this happens is determined by your driver code.
B<Failure to call this can lead to corruption of data structures.>
For example, B<DBD::Informix> maintains a linked list of database
handles in the driver, and within each handle, a linked list of
statements. Once a statement is added to the linked list, it is crucial
that it is cleaned up (removed from the list). When I<DBIc_IMPSET_on()>
was being called too late, it was able to cause all sorts of problems.
=head2 Using DBIc_is(), DBIc_has(), DBIc_on() and DBIc_off()
Once upon a long time ago, the only way of handling the internal B<DBI>
boolean flags/attributes was through macros such as:
DBIc_WARN DBIc_WARN_on DBIc_WARN_off
DBIc_COMPAT DBIc_COMPAT_on DBIc_COMPAT_off
Each of these took an I<imp_xxh> pointer as an argument.
Since then, new attributes have been added such as I<ChopBlanks>,
I<RaiseError> and I<PrintError>, and these do not have the full set of
macros. The approved method for handling these is now the four macros:
DBIc_is(imp, flag)
DBIc_has(imp, flag) an alias for DBIc_is
DBIc_on(imp, flag)
DBIc_off(imp, flag)
DBIc_set(imp, flag, on) set if on is true, else clear
Consequently, the C<DBIc_XXXXX> family of macros is now mostly deprecated
and new drivers should avoid using them, even though the older drivers
will probably continue to do so for quite a while yet. However...
There is an I<important exception> to that. The I<ACTIVE> and I<IMPSET>
flags should be set via the C<DBIc_ACTIVE_on()> and C<DBIc_IMPSET_on()> macros,
and unset via the C<DBIc_ACTIVE_off()> and C<DBIc_IMPSET_off()> macros.
=head2 Using the get_fbav() method
B<THIS IS CRITICAL for C/XS drivers>.
The C<$sth-E<gt>bind_col()> and C<$sth-E<gt>bind_columns()> documented
in the B<DBI> specification do not have to be implemented by the driver
writer because B<DBI> takes care of the details for you.
However, the key to ensuring that bound columns work is to call the
function C<DBIc_DBISTATE(imp_xxh)-E<gt>get_fbav()> in the code which
fetches a row of data.
This returns an C<AV>, and each element of the C<AV> contains the C<SV> which
should be set to contain the returned data.
The pure Perl equivalent is the C<$sth-E<gt>_set_fbav($data)> method, as
described in the part on pure Perl drivers.
=head2 Casting strings to Perl types based on a SQL type
DBI from 1.611 (and DBIXS_REVISION 13606) defines the
sql_type_cast_svpv method which may be used to cast a string
representation of a value to a more specific Perl type based on a SQL
type. You should consider using this method when processing bound
column data as it provides some support for the TYPE bind_col
attribute which is rarely used in drivers.
int sql_type_cast_svpv(pTHX_ SV *sv, int sql_type, U32 flags, void *v)
C<sv> is what you would like cast, C<sql_type> is one of the DBI defined
SQL types (e.g., C<SQL_INTEGER>) and C<flags> is a bitmask as follows:
=over
=item DBIstcf_STRICT
If set this indicates you want an error state returned if the cast
cannot be performed.
=item DBIstcf_DISCARD_STRING
If set and the pv portion of the C<sv> is cast then this will cause
sv's pv to be freed up.
=back
sql_type_cast_svpv returns the following states:
-2 sql_type is not handled - sv not changed
-1 sv is undef, sv not changed
0 sv could not be cast cleanly and DBIstcf_STRICT was specified
1 sv could not be case cleanly and DBIstcf_STRICT was not specified
2 sv was cast ok
The current implementation of sql_type_cast_svpv supports
C<SQL_INTEGER>, C<SQL_DOUBLE> and C<SQL_NUMERIC>. C<SQL_INTEGER> uses
sv_2iv and hence may set IV, UV or NV depending on the
number. C<SQL_DOUBLE> uses sv_2nv so may set NV and C<SQL_NUMERIC>
will set IV or UV or NV.
DBIstcf_STRICT should be implemented as the StrictlyTyped attribute
and DBIstcf_DISCARD_STRING implemented as the DiscardString attribute
to the bind_col method and both default to off.
See DBD::Oracle for an example of how this is used.
=head1 SUBCLASSING DBI DRIVERS
This is definitely an open subject. It can be done, as demonstrated by
the B<DBD::File> driver, but it is not as simple as one might think.
(Note that this topic is different from subclassing the B<DBI>. For an
example of that, see the F<t/subclass.t> file supplied with the B<DBI>.)
The main problem is that the I<dbh>'s and I<sth>'s that your C<connect()> and
C<prepare()> methods return are not instances of your B<DBD::Driver::db>
or B<DBD::Driver::st> packages, they are not even derived from it.
Instead they are instances of the B<DBI::db> or B<DBI::st> classes or
a derived subclass. Thus, if you write a method C<mymethod()> and do a
$dbh->mymethod()
then the autoloader will search for that method in the package B<DBI::db>.
Of course you can instead to a
$dbh->func('mymethod')
and that will indeed work, even if C<mymethod()> is inherited, but not
without additional work. Setting I<@ISA> is not sufficient.
=head2 Overwriting methods
The first problem is, that the C<connect()> method has no idea of
subclasses. For example, you cannot implement base class and subclass
in the same file: The C<install_driver()> method wants to do a
require DBD::Driver;
In particular, your subclass B<has> to be a separate driver, from
the view of B<DBI>, and you cannot share driver handles.
Of course that's not much of a problem. You should even be able
to inherit the base classes C<connect()> method. But you cannot
simply overwrite the method, unless you do something like this,
quoted from B<DBD::CSV>:
sub connect ($$;$$$) {
my ($drh, $dbname, $user, $auth, $attr) = @_;
my $this = $drh->DBD::File::dr::connect($dbname, $user, $auth, $attr);
if (!exists($this->{csv_tables})) {
$this->{csv_tables} = {};
}
$this;
}
Note that we cannot do a
$drh->SUPER::connect($dbname, $user, $auth, $attr);
as we would usually do in a an OO environment, because I<$drh> is an instance
of B<DBI::dr>. And note, that the C<connect()> method of B<DBD::File> is
able to handle subclass attributes. See the description of Pure Perl
drivers above.
It is essential that you always call superclass method in the above
manner. However, that should do.
=head2 Attribute handling
Fortunately the B<DBI> specifications allow a simple, but still
performant way of handling attributes. The idea is based on the
convention that any driver uses a prefix I<driver_> for its private
methods. Thus it's always clear whether to pass attributes to the super
class or not. For example, consider this C<STORE()> method from the
B<DBD::CSV> class:
sub STORE {
my ($dbh, $attr, $val) = @_;
if ($attr !~ /^driver_/) {
return $dbh->DBD::File::db::STORE($attr, $val);
}
if ($attr eq 'driver_foo') {
...
}
=cut
use Exporter ();
use Config qw(%Config);
use Carp;
use Cwd;
use File::Spec;
use strict;
use vars qw(
@ISA @EXPORT
$is_dbi
);
BEGIN {
if ($^O eq 'VMS') {
require vmsish;
import vmsish;
require VMS::Filespec;
import VMS::Filespec;
}
else {
*vmsify = sub { return $_[0] };
*unixify = sub { return $_[0] };
}
}
@ISA = qw(Exporter);
@EXPORT = qw(
dbd_dbi_dir
dbd_dbi_arch_dir
dbd_edit_mm_attribs
dbd_postamble
);
BEGIN {
$is_dbi = (-r 'DBI.pm' && -r 'DBI.xs' && -r 'DBIXS.h');
require DBI unless $is_dbi;
}
my $done_inst_checks;
sub _inst_checks {
return if $done_inst_checks++;
my $cwd = cwd();
if ($cwd =~ /\Q$Config{path_sep}/) {
warn "*** Warning: Path separator characters (`$Config{path_sep}') ",
"in the current directory path ($cwd) may cause problems\a\n\n";
sleep 2;
}
if ($cwd =~ /\s/) {
warn "*** Warning: whitespace characters ",
"in the current directory path ($cwd) may cause problems\a\n\n";
sleep 2;
}
if ( $^O eq 'MSWin32'
&& $Config{cc} eq 'cl'
&& !(exists $ENV{'LIB'} && exists $ENV{'INCLUDE'}))
{
die <<EOT;
*** You're using Microsoft Visual C++ compiler or similar but
the LIB and INCLUDE environment variables are not both set.
You need to run the VCVARS32.BAT batch file that was supplied
with the compiler before you can use it.
A copy of vcvars32.bat can typically be found in the following
directories under your Visual Studio install directory:
Visual C++ 6.0: vc98\\bin
Visual Studio .NET: vc7\\bin
Find it, run it, then retry this.
If you think this error is not correct then just set the LIB and
INCLUDE environment variables to some value to disable the check.
EOT
}
}
sub dbd_edit_mm_attribs {
# this both edits the attribs in-place and returns the flattened attribs
my $mm_attr = shift;
my $dbd_attr = shift || {};
croak "dbd_edit_mm_attribs( \%makemaker [, \%other ]): too many parameters"
if @_;
_inst_checks();
# what can be done
my %test_variants = (
p => { name => "DBI::PurePerl",
match => qr/^\d/,
add => [ '$ENV{DBI_PUREPERL} = 2',
'END { delete $ENV{DBI_PUREPERL}; }' ],
},
g => { name => "DBD::Gofer",
match => qr/^\d/,
add => [ q{$ENV{DBI_AUTOPROXY} = 'dbi:Gofer:transport=null;policy=pedantic'},
q|END { delete $ENV{DBI_AUTOPROXY}; }| ],
},
n => { name => "DBI::SQL::Nano",
match => qr/^(?:48dbi_dbd_sqlengine|49dbd_file|5\ddbm_\w+|85gofer)\.t$/,
add => [ q{$ENV{DBI_SQL_NANO} = 1},
q|END { delete $ENV{DBI_SQL_NANO}; }| ],
},
# mx => { name => "DBD::Multiplex",
# add => [ q{local $ENV{DBI_AUTOPROXY} = 'dbi:Multiplex:';} ],
# }
# px => { name => "DBD::Proxy",
# need mechanism for starting/stopping the proxy server
# add => [ q{local $ENV{DBI_AUTOPROXY} = 'dbi:Proxy:XXX';} ],
# }
);
# decide what needs doing
$dbd_attr->{create_pp_tests} or delete $test_variants{p};
$dbd_attr->{create_nano_tests} or delete $test_variants{n};
$dbd_attr->{create_gap_tests} or delete $test_variants{g};
# expand for all combinations
my @all_keys = my @tv_keys = sort keys %test_variants;
while( @tv_keys ) {
my $cur_key = shift @tv_keys;
last if( 1 < length $cur_key );
my @new_keys;
foreach my $remain (@tv_keys) {
push @new_keys, $cur_key . $remain unless $remain =~ /$cur_key/;
}
push @tv_keys, @new_keys;
push @all_keys, @new_keys;
}
my %uniq_keys;
foreach my $key (@all_keys) {
@tv_keys = sort split //, $key;
my $ordered = join( '', @tv_keys );
$uniq_keys{$ordered} = 1;
}
@all_keys = sort { length $a <=> length $b or $a cmp $b } keys %uniq_keys;
# do whatever needs doing
if( keys %test_variants ) {
# XXX need to convert this to work within the generated Makefile
# so 'make' creates them and 'make clean' deletes them
opendir DIR, 't' or die "Can't read 't' directory: $!";
my @tests = grep { /\.t$/ } readdir DIR;
closedir DIR;
foreach my $test_combo (@all_keys) {
@tv_keys = split //, $test_combo;
my @test_names = map { $test_variants{$_}->{name} } @tv_keys;
printf "Creating test wrappers for " . join( " + ", @test_names ) . ":\n";
my @test_matches = map { $test_variants{$_}->{match} } @tv_keys;
my @test_adds;
foreach my $test_add ( map { $test_variants{$_}->{add} } @tv_keys) {
push @test_adds, @$test_add;
}
my $v_type = $test_combo;
$v_type = 'x' . $v_type if length( $v_type ) > 1;
TEST:
foreach my $test (sort @tests) {
foreach my $match (@test_matches) {
next TEST if $test !~ $match;
}
my $usethr = ($test =~ /(\d+|\b)thr/ && $] >= 5.008 && $Config{useithreads});
my $v_test = "t/zv${v_type}_$test";
my $v_perl = ($test =~ /taint/) ? "perl -wT" : "perl -w";
printf "%s %s\n", $v_test, ($usethr) ? "(use threads)" : "";
open PPT, ">$v_test" or warn "Can't create $v_test: $!";
print PPT "#!$v_perl\n";
print PPT "use threads;\n" if $usethr;
print PPT "$_;\n" foreach @test_adds;
print PPT "require './t/$test'; # or warn \$!;\n";
close PPT or warn "Error writing $v_test: $!";
}
}
}
return %$mm_attr;
}
sub dbd_dbi_dir {
_inst_checks();
return '.' if $is_dbi;
my $dbidir = $INC{'DBI.pm'} || die "DBI.pm not in %INC!";
$dbidir =~ s:/DBI\.pm$::;
return $dbidir;
}
sub dbd_dbi_arch_dir {
_inst_checks();
return '$(INST_ARCHAUTODIR)' if $is_dbi;
my $dbidir = dbd_dbi_dir();
my %seen;
my @try = grep { not $seen{$_}++ } map { vmsify( unixify($_) . "/auto/DBI/" ) } @INC;
my @xst = grep { -f vmsify( unixify($_) . "/Driver.xst" ) } @try;
Carp::croak("Unable to locate Driver.xst in @try") unless @xst;
Carp::carp( "Multiple copies of Driver.xst found in: @xst") if @xst > 1;
print "Using DBI $DBI::VERSION (for perl $] on $Config{archname}) installed in $xst[0]\n";
return File::Spec->canonpath($xst[0]);
}
sub dbd_postamble {
my $self = shift;
_inst_checks();
my $dbi_instarch_dir = ($is_dbi) ? "." : dbd_dbi_arch_dir();
my $dbi_driver_xst= File::Spec->catfile($dbi_instarch_dir, 'Driver.xst');
my $xstf_h = File::Spec->catfile($dbi_instarch_dir, 'Driver_xst.h');
# we must be careful of quotes, especially for Win32 here.
return '
# --- This section was generated by DBI::DBD::dbd_postamble()
DBI_INSTARCH_DIR='.$dbi_instarch_dir.'
DBI_DRIVER_XST='.$dbi_driver_xst.'
# The main dependency (technically correct but probably not used)
$(BASEEXT).c: $(BASEEXT).xsi
# This dependency is needed since MakeMaker uses the .xs.o rule
$(BASEEXT)$(OBJ_EXT): $(BASEEXT).xsi
$(BASEEXT).xsi: $(DBI_DRIVER_XST) '.$xstf_h.'
$(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" $(DBI_DRIVER_XST) > $(BASEEXT).xsi
# ---
';
}
package DBDI; # just to reserve it via PAUSE for the future
1;
__END__
=head1 AUTHORS
Jonathan Leffler <jleffler@us.ibm.com> (previously <jleffler@informix.com>),
Jochen Wiedmann <joe@ispsoft.de>,
Steffen Goeldner <sgoeldner@cpan.org>,
and Tim Bunce <dbi-users@perl.org>.
=cut
DBI/Gofer/Serializer/Base.pm 0000644 00000002735 15033552504 0011536 0 ustar 00 package DBI::Gofer::Serializer::Base;
# $Id: Base.pm 9949 2007-09-18 09:38:15Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
=head1 NAME
DBI::Gofer::Serializer::Base - base class for Gofer serialization
=head1 SYNOPSIS
$serializer = $serializer_class->new();
$string = $serializer->serialize( $data );
($string, $deserializer_class) = $serializer->serialize( $data );
$data = $serializer->deserialize( $string );
=head1 DESCRIPTION
DBI::Gofer::Serializer::* classes implement a very minimal subset of the L<Data::Serializer> API.
Gofer serializers are expected to be very fast and are not required to deal
with anything other than non-blessed references to arrays and hashes, and plain scalars.
=cut
use strict;
use warnings;
use Carp qw(croak);
our $VERSION = "0.009950";
sub new {
my $class = shift;
my $deserializer_class = $class->deserializer_class;
return bless { deserializer_class => $deserializer_class } => $class;
}
sub deserializer_class {
my $self = shift;
my $class = ref($self) || $self;
$class =~ s/^DBI::Gofer::Serializer:://;
return $class;
}
sub serialize {
my $self = shift;
croak ref($self)." has not implemented the serialize method";
}
sub deserialize {
my $self = shift;
croak ref($self)." has not implemented the deserialize method";
}
1;
DBI/Gofer/Serializer/DataDumper.pm 0000644 00000002437 15033552504 0012711 0 ustar 00 package DBI::Gofer::Serializer::DataDumper;
use strict;
use warnings;
our $VERSION = "0.009950";
# $Id: DataDumper.pm 9949 2007-09-18 09:38:15Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
=head1 NAME
DBI::Gofer::Serializer::DataDumper - Gofer serialization using DataDumper
=head1 SYNOPSIS
$serializer = DBI::Gofer::Serializer::DataDumper->new();
$string = $serializer->serialize( $data );
=head1 DESCRIPTION
Uses DataDumper to serialize. Deserialization is not supported.
The output of this class is only meant for human consumption.
See also L<DBI::Gofer::Serializer::Base>.
=cut
use Data::Dumper;
use base qw(DBI::Gofer::Serializer::Base);
sub serialize {
my $self = shift;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Useqq = 0; # enabling this disables xs
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 0;
local $Data::Dumper::Purity = 0;
my $frozen = Data::Dumper::Dumper(shift);
return $frozen unless wantarray;
return ($frozen, $self->{deserializer_class});
}
1;
DBI/Gofer/Serializer/Storable.pm 0000644 00000002641 15033552504 0012433 0 ustar 00 package DBI::Gofer::Serializer::Storable;
use strict;
use warnings;
use base qw(DBI::Gofer::Serializer::Base);
# $Id: Storable.pm 15585 2013-03-22 20:31:22Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
=head1 NAME
DBI::Gofer::Serializer::Storable - Gofer serialization using Storable
=head1 SYNOPSIS
$serializer = DBI::Gofer::Serializer::Storable->new();
$string = $serializer->serialize( $data );
($string, $deserializer_class) = $serializer->serialize( $data );
$data = $serializer->deserialize( $string );
=head1 DESCRIPTION
Uses Storable::nfreeze() to serialize and Storable::thaw() to deserialize.
The serialize() method sets local $Storable::forgive_me = 1; so it doesn't
croak if it encounters any data types that can't be serialized, such as code refs.
See also L<DBI::Gofer::Serializer::Base>.
=cut
use Storable qw(nfreeze thaw);
our $VERSION = "0.015586";
use base qw(DBI::Gofer::Serializer::Base);
sub serialize {
my $self = shift;
local $Storable::forgive_me = 1; # for CODE refs etc
local $Storable::canonical = 1; # for go_cache
my $frozen = nfreeze(shift);
return $frozen unless wantarray;
return ($frozen, $self->{deserializer_class});
}
sub deserialize {
my $self = shift;
return thaw(shift);
}
1;
DBI/Gofer/Request.pm 0000644 00000012164 15033552504 0010200 0 ustar 00 package DBI::Gofer::Request;
# $Id: Request.pm 12536 2009-02-24 22:37:09Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use DBI qw(neat neat_list);
use base qw(DBI::Util::_accessor);
our $VERSION = "0.012537";
use constant GOf_REQUEST_IDEMPOTENT => 0x0001;
use constant GOf_REQUEST_READONLY => 0x0002;
our @EXPORT = qw(GOf_REQUEST_IDEMPOTENT GOf_REQUEST_READONLY);
__PACKAGE__->mk_accessors(qw(
version
flags
dbh_connect_call
dbh_method_call
dbh_attributes
dbh_last_insert_id_args
sth_method_calls
sth_result_attr
));
__PACKAGE__->mk_accessors_using(make_accessor_autoviv_hashref => qw(
meta
));
sub new {
my ($self, $args) = @_;
$args->{version} ||= $VERSION;
return $self->SUPER::new($args);
}
sub reset {
my ($self, $flags) = @_;
# remove everything except connect and version
%$self = (
version => $self->{version},
dbh_connect_call => $self->{dbh_connect_call},
);
$self->{flags} = $flags if $flags;
}
sub init_request {
my ($self, $method_and_args, $dbh) = @_;
$self->reset( $dbh->{ReadOnly} ? GOf_REQUEST_READONLY : 0 );
$self->dbh_method_call($method_and_args);
}
sub is_sth_request {
return shift->{sth_result_attr};
}
sub statements {
my $self = shift;
my @statements;
if (my $dbh_method_call = $self->dbh_method_call) {
my $statement_method_regex = qr/^(?:do|prepare)$/;
my (undef, $method, $arg1) = @$dbh_method_call;
push @statements, $arg1 if $method && $method =~ $statement_method_regex;
}
return @statements;
}
sub is_idempotent {
my $self = shift;
if (my $flags = $self->flags) {
return 1 if $flags & (GOf_REQUEST_IDEMPOTENT|GOf_REQUEST_READONLY);
}
# else check if all statements are SELECT statement that don't include FOR UPDATE
my @statements = $self->statements;
# XXX this is very minimal for now, doesn't even allow comments before the select
# (and can't ever work for "exec stored_procedure_name" kinds of statements)
# XXX it also doesn't deal with multiple statements: prepare("select foo; update bar")
return 1 if @statements == grep {
m/^ \s* SELECT \b /xmsi && !m/ \b FOR \s+ UPDATE \b /xmsi
} @statements;
return 0;
}
sub summary_as_text {
my $self = shift;
my ($context) = @_;
my @s = '';
if ($context && %$context) {
my @keys = sort keys %$context;
push @s, join(", ", map { "$_=>".$context->{$_} } @keys);
}
my ($method, $dsn, $user, $pass, $attr) = @{ $self->dbh_connect_call };
$method ||= 'connect_cached';
$pass = '***' if defined $pass;
my $tmp = '';
if ($attr) {
$tmp = { %{$attr||{}} }; # copy so we can edit
$tmp->{Password} = '***' if exists $tmp->{Password};
$tmp = "{ ".neat_list([ %$tmp ])." }";
}
push @s, sprintf "dbh= $method(%s, %s)", neat_list([$dsn, $user, $pass]), $tmp;
if (my $flags = $self->flags) {
push @s, sprintf "flags: 0x%x", $flags;
}
if (my $dbh_attr = $self->dbh_attributes) {
push @s, sprintf "dbh->FETCH: %s", @$dbh_attr
if @$dbh_attr;
}
my ($wantarray, $meth, @args) = @{ $self->dbh_method_call };
my $args = neat_list(\@args);
$args =~ s/\n+/ /g;
push @s, sprintf "dbh->%s(%s)", $meth, $args;
if (my $lii_args = $self->dbh_last_insert_id_args) {
push @s, sprintf "dbh->last_insert_id(%s)", neat_list($lii_args);
}
for my $call (@{ $self->sth_method_calls || [] }) {
my ($meth, @args) = @$call;
($args = neat_list(\@args)) =~ s/\n+/ /g;
push @s, sprintf "sth->%s(%s)", $meth, $args;
}
if (my $sth_attr = $self->sth_result_attr) {
push @s, sprintf "sth->FETCH: %s", %$sth_attr
if %$sth_attr;
}
return join("\n\t", @s) . "\n";
}
sub outline_as_text { # one-line version of summary_as_text
my $self = shift;
my @s = '';
my $neatlen = 80;
if (my $flags = $self->flags) {
push @s, sprintf "flags=0x%x", $flags;
}
my (undef, $meth, @args) = @{ $self->dbh_method_call };
push @s, sprintf "%s(%s)", $meth, neat_list(\@args, $neatlen);
for my $call (@{ $self->sth_method_calls || [] }) {
my ($meth, @args) = @$call;
push @s, sprintf "%s(%s)", $meth, neat_list(\@args, $neatlen);
}
my ($method, $dsn) = @{ $self->dbh_connect_call };
push @s, "$method($dsn,...)"; # dsn last as it's usually less interesting
(my $outline = join("; ", @s)) =~ s/\s+/ /g; # squish whitespace, incl newlines
return $outline;
}
1;
=head1 NAME
DBI::Gofer::Request - Encapsulate a request from DBD::Gofer to DBI::Gofer::Execute
=head1 DESCRIPTION
This is an internal class.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBI/Gofer/Transport/Base.pm 0000644 00000011664 15033552504 0011422 0 ustar 00 package DBI::Gofer::Transport::Base;
# $Id: Base.pm 12536 2009-02-24 22:37:09Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use DBI;
use base qw(DBI::Util::_accessor);
use DBI::Gofer::Serializer::Storable;
use DBI::Gofer::Serializer::DataDumper;
our $VERSION = "0.012537";
__PACKAGE__->mk_accessors(qw(
trace
keep_meta_frozen
serializer_obj
));
# see also $ENV{DBI_GOFER_TRACE} in DBI::Gofer::Execute
sub _init_trace { (split(/=/,$ENV{DBI_GOFER_TRACE}||0))[0] }
sub new {
my ($class, $args) = @_;
$args->{trace} ||= $class->_init_trace;
$args->{serializer_obj} ||= DBI::Gofer::Serializer::Storable->new();
my $self = bless {}, $class;
$self->$_( $args->{$_} ) for keys %$args;
$self->trace_msg("$class->new({ @{[ %$args ]} })\n") if $self->trace;
return $self;
}
my $packet_header_text = "GoFER1:";
my $packet_header_regex = qr/^GoFER(\d+):/;
sub _freeze_data {
my ($self, $data, $serializer, $skip_trace) = @_;
my $frozen = eval {
$self->_dump("freezing $self->{trace} ".ref($data), $data)
if !$skip_trace and $self->trace;
local $data->{meta}; # don't include meta in serialization
$serializer ||= $self->{serializer_obj};
my ($data, $deserializer_class) = $serializer->serialize($data);
$packet_header_text . $data;
};
if ($@) {
chomp $@;
die "Error freezing ".ref($data)." object: $@";
}
# stash the frozen data into the data structure itself
# to make life easy for the client caching code in DBD::Gofer::Transport::Base
$data->{meta}{frozen} = $frozen if $self->keep_meta_frozen;
return $frozen;
}
# public aliases used by subclasses
*freeze_request = \&_freeze_data;
*freeze_response = \&_freeze_data;
sub _thaw_data {
my ($self, $frozen_data, $serializer, $skip_trace) = @_;
my $data;
eval {
# check for and extract our gofer header and the info it contains
(my $frozen = $frozen_data) =~ s/$packet_header_regex//o
or die "does not have gofer header\n";
my ($t_version) = $1;
$serializer ||= $self->{serializer_obj};
$data = $serializer->deserialize($frozen);
die ref($serializer)."->deserialize didn't return a reference"
unless ref $data;
$data->{_transport}{version} = $t_version;
$data->{meta}{frozen} = $frozen_data if $self->keep_meta_frozen;
};
if ($@) {
chomp(my $err = $@);
# remove extra noise from Storable
$err =~ s{ at \S+?/Storable.pm \(autosplit into \S+?/Storable/thaw.al\) line \d+(, \S+ line \d+)?}{};
my $msg = sprintf "Error thawing: %s (data=%s)", $err, DBI::neat($frozen_data,50);
Carp::cluck("$msg, pid $$ stack trace follows:"); # XXX if $self->trace;
die $msg;
}
$self->_dump("thawing $self->{trace} ".ref($data), $data)
if !$skip_trace and $self->trace;
return $data;
}
# public aliases used by subclasses
*thaw_request = \&_thaw_data;
*thaw_response = \&_thaw_data;
# this should probably live in the request and response classes
# and the tace level passed in
sub _dump {
my ($self, $label, $data) = @_;
# don't dump the binary
local $data->{meta}{frozen} if $data->{meta} && $data->{meta}{frozen};
my $trace_level = $self->trace;
my $summary;
if ($trace_level >= 4) {
require Data::Dumper;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Useqq = 0;
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 0;
local $Data::Dumper::Purity = 0;
$summary = Data::Dumper::Dumper($data);
}
elsif ($trace_level >= 2) {
$summary = eval { $data->summary_as_text } || $@ || "no summary available\n";
}
else {
$summary = eval { $data->outline_as_text."\n" } || $@ || "no summary available\n";
}
$self->trace_msg("$label: $summary");
}
sub trace_msg {
my ($self, $msg, $min_level) = @_;
$min_level = 1 unless defined $min_level;
# transport trace level can override DBI's trace level
$min_level = 0 if $self->trace >= $min_level;
return DBI->trace_msg("gofer ".$msg, $min_level);
}
1;
=head1 NAME
DBI::Gofer::Transport::Base - Base class for Gofer transports
=head1 DESCRIPTION
This is the base class for server-side Gofer transports.
It's also the base class for the client-side base class L<DBD::Gofer::Transport::Base>.
This is an internal class.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBI/Gofer/Transport/stream.pm 0000644 00000003756 15033552504 0012046 0 ustar 00 package DBI::Gofer::Transport::stream;
# $Id: stream.pm 12536 2009-02-24 22:37:09Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use DBI qw(dbi_time);
use DBI::Gofer::Execute;
use base qw(DBI::Gofer::Transport::pipeone Exporter);
our $VERSION = "0.012537";
our @EXPORT = qw(run_stdio_hex);
my $executor = DBI::Gofer::Execute->new();
sub run_stdio_hex {
my $transport = DBI::Gofer::Transport::stream->new();
local $| = 1;
DBI->trace_msg("$0 started (pid $$)\n");
local $\; # OUTPUT_RECORD_SEPARATOR
local $/ = "\012"; # INPUT_RECORD_SEPARATOR
while ( defined( my $encoded_request = <STDIN> ) ) {
my $time_received = dbi_time();
$encoded_request =~ s/\015?\012$//;
my $frozen_request = pack "H*", $encoded_request;
my $request = $transport->thaw_request( $frozen_request );
my $response = $executor->execute_request( $request );
my $frozen_response = $transport->freeze_response($response);
my $encoded_response = unpack "H*", $frozen_response;
print $encoded_response, "\015\012"; # autoflushed due to $|=1
# there's no way to access the stats currently
# so this just serves as a basic test and illustration of update_stats()
$executor->update_stats($request, $response, $frozen_request, $frozen_response, $time_received, 1);
}
DBI->trace_msg("$0 ending (pid $$)\n");
}
1;
__END__
=head1 NAME
DBI::Gofer::Transport::stream - DBD::Gofer server-side transport for stream
=head1 SYNOPSIS
See L<DBD::Gofer::Transport::stream>.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBI/Gofer/Transport/pipeone.pm 0000644 00000002536 15033552504 0012205 0 ustar 00 package DBI::Gofer::Transport::pipeone;
# $Id: pipeone.pm 12536 2009-02-24 22:37:09Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use DBI::Gofer::Execute;
use base qw(DBI::Gofer::Transport::Base Exporter);
our $VERSION = "0.012537";
our @EXPORT = qw(run_one_stdio);
my $executor = DBI::Gofer::Execute->new();
sub run_one_stdio {
binmode STDIN;
binmode STDOUT;
my $transport = DBI::Gofer::Transport::pipeone->new();
my $frozen_request = do { local $/; <STDIN> };
my $response = $executor->execute_request( $transport->thaw_request($frozen_request) );
my $frozen_response = $transport->freeze_response($response);
print $frozen_response;
# no point calling $executor->update_stats(...) for pipeONE
}
1;
__END__
=head1 NAME
DBI::Gofer::Transport::pipeone - DBD::Gofer server-side transport for pipeone
=head1 SYNOPSIS
See L<DBD::Gofer::Transport::pipeone>.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBI/Gofer/Execute.pm 0000644 00000074634 15033552504 0010164 0 ustar 00 package DBI::Gofer::Execute;
# $Id: Execute.pm 14282 2010-07-26 00:12:54Z David $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use warnings;
use Carp;
use DBI qw(dbi_time);
use DBI::Gofer::Request;
use DBI::Gofer::Response;
use base qw(DBI::Util::_accessor);
our $VERSION = "0.014283";
our @all_dbh_methods = sort map { keys %$_ } $DBI::DBI_methods{db}, $DBI::DBI_methods{common};
our %all_dbh_methods = map { $_ => (DBD::_::db->can($_)||undef) } @all_dbh_methods;
our $local_log = $ENV{DBI_GOFER_LOCAL_LOG}; # do extra logging to stderr
our $current_dbh; # the dbh we're using for this request
# set trace for server-side gofer
# Could use DBI_TRACE env var when it's an unrelated separate process
# but using DBI_GOFER_TRACE makes testing easier for subprocesses (eg stream)
DBI->trace(split /=/, $ENV{DBI_GOFER_TRACE}, 2) if $ENV{DBI_GOFER_TRACE};
# define valid configuration attributes (args to new())
# the values here indicate the basic type of values allowed
my %configuration_attributes = (
gofer_execute_class => 1,
default_connect_dsn => 1,
forced_connect_dsn => 1,
default_connect_attributes => {},
forced_connect_attributes => {},
track_recent => 1,
check_request_sub => sub {},
check_response_sub => sub {},
forced_single_resultset => 1,
max_cached_dbh_per_drh => 1,
max_cached_sth_per_dbh => 1,
forced_response_attributes => {},
forced_gofer_random => 1,
stats => {},
);
__PACKAGE__->mk_accessors(
keys %configuration_attributes
);
sub new {
my ($self, $args) = @_;
$args->{default_connect_attributes} ||= {};
$args->{forced_connect_attributes} ||= {};
$args->{max_cached_sth_per_dbh} ||= 1000;
$args->{stats} ||= {};
return $self->SUPER::new($args);
}
sub valid_configuration_attributes {
my $self = shift;
return { %configuration_attributes };
}
my %extra_attr = (
# Only referenced if the driver doesn't support private_attribute_info method.
# What driver-specific attributes should be returned for the driver being used?
# keyed by $dbh->{Driver}{Name}
# XXX for sth should split into attr specific to resultsets (where NUM_OF_FIELDS > 0) and others
# which would reduce processing/traffic for non-select statements
mysql => {
dbh => [qw(
mysql_errno mysql_error mysql_hostinfo mysql_info mysql_insertid
mysql_protoinfo mysql_serverinfo mysql_stat mysql_thread_id
)],
sth => [qw(
mysql_is_blob mysql_is_key mysql_is_num mysql_is_pri_key mysql_is_auto_increment
mysql_length mysql_max_length mysql_table mysql_type mysql_type_name mysql_insertid
)],
# XXX this dbh_after_sth stuff is a temporary, but important, hack.
# should be done via hash instead of arrays where the hash value contains
# flags that can indicate which attributes need to be handled in this way
dbh_after_sth => [qw(
mysql_insertid
)],
},
Pg => {
dbh => [qw(
pg_protocol pg_lib_version pg_server_version
pg_db pg_host pg_port pg_default_port
pg_options pg_pid
)],
sth => [qw(
pg_size pg_type pg_oid_status pg_cmd_status
)],
},
Sybase => {
dbh => [qw(
syb_dynamic_supported syb_oc_version syb_server_version syb_server_version_string
)],
sth => [qw(
syb_types syb_proc_status syb_result_type
)],
},
SQLite => {
dbh => [qw(
sqlite_version
)],
sth => [qw(
)],
},
ExampleP => {
dbh => [qw(
examplep_private_dbh_attrib
)],
sth => [qw(
examplep_private_sth_attrib
)],
dbh_after_sth => [qw(
examplep_insertid
)],
},
);
sub _connect {
my ($self, $request) = @_;
my $stats = $self->{stats};
# discard CachedKids from time to time
if (++$stats->{_requests_served} % 1000 == 0 # XXX config?
and my $max_cached_dbh_per_drh = $self->{max_cached_dbh_per_drh}
) {
my %drivers = DBI->installed_drivers();
while ( my ($driver, $drh) = each %drivers ) {
next unless my $CK = $drh->{CachedKids};
next unless keys %$CK > $max_cached_dbh_per_drh;
next if $driver eq 'Gofer'; # ie transport=null when testing
DBI->trace_msg(sprintf "Clearing %d cached dbh from $driver",
scalar keys %$CK, $self->{max_cached_dbh_per_drh});
$_->{Active} && $_->disconnect for values %$CK;
%$CK = ();
}
}
# local $ENV{...} can leak, so only do it if required
local $ENV{DBI_AUTOPROXY} if $ENV{DBI_AUTOPROXY};
my ($connect_method, $dsn, $username, $password, $attr) = @{ $request->dbh_connect_call };
$connect_method ||= 'connect_cached';
$stats->{method_calls_dbh}->{$connect_method}++;
# delete attributes we don't want to affect the server-side
# (Could just do this on client-side and trust the client. DoS?)
delete @{$attr}{qw(Profile InactiveDestroy AutoInactiveDestroy HandleError HandleSetErr TraceLevel Taint TaintIn TaintOut)};
$dsn = $self->forced_connect_dsn || $dsn || $self->default_connect_dsn
or die "No forced_connect_dsn, requested dsn, or default_connect_dsn for request";
my $random = $self->{forced_gofer_random} || $ENV{DBI_GOFER_RANDOM} || '';
my $connect_attr = {
# the configured default attributes, if any
%{ $self->default_connect_attributes },
# pass username and password as attributes
# then they can be overridden by forced_connect_attributes
Username => $username,
Password => $password,
# the requested attributes
%$attr,
# force some attributes the way we'd like them
PrintWarn => $local_log,
PrintError => $local_log,
# the configured default attributes, if any
%{ $self->forced_connect_attributes },
# RaiseError must be enabled
RaiseError => 1,
# reset Executed flag (of the cached handle) so we can use it to tell
# if errors happened before the main part of the request was executed
Executed => 0,
# ensure this connect_cached doesn't have the same args as the client
# because that causes subtle issues if in the same process (ie transport=null)
# include pid to avoid problems with forking (ie null transport in mod_perl)
# include gofer-random to avoid random behaviour leaking to other handles
dbi_go_execute_unique => join("|", __PACKAGE__, $$, $random),
};
# XXX implement our own private connect_cached method? (with rate-limited ping)
my $dbh = DBI->$connect_method($dsn, undef, undef, $connect_attr);
$dbh->{ShowErrorStatement} = 1 if $local_log;
# XXX should probably just be a Callbacks => arg to connect_cached
# with a cache of pre-built callback hooks (memoized, without $self)
if (my $random = $self->{forced_gofer_random} || $ENV{DBI_GOFER_RANDOM}) {
$self->_install_rand_callbacks($dbh, $random);
}
my $CK = $dbh->{CachedKids};
if ($CK && keys %$CK > $self->{max_cached_sth_per_dbh}) {
%$CK = (); # clear all statement handles
}
#$dbh->trace(0);
$current_dbh = $dbh;
return $dbh;
}
sub reset_dbh {
my ($self, $dbh) = @_;
$dbh->set_err(undef, undef); # clear any error state
}
sub new_response_with_err {
my ($self, $rv, $eval_error, $dbh) = @_;
# this is the usual way to create a response for both success and failure
# capture err+errstr etc and merge in $eval_error ($@)
my ($err, $errstr, $state) = ($DBI::err, $DBI::errstr, $DBI::state);
if ($eval_error) {
$err ||= $DBI::stderr || 1; # ensure err is true
if ($errstr) {
$eval_error =~ s/(?: : \s)? \Q$errstr//x if $errstr;
chomp $errstr;
$errstr .= "; $eval_error";
}
else {
$errstr = $eval_error;
}
}
chomp $errstr if $errstr;
my $flags;
# (XXX if we ever add transaction support then we'll need to take extra
# steps because the commit/rollback would reset Executed before we get here)
$flags |= GOf_RESPONSE_EXECUTED if $dbh && $dbh->{Executed};
my $response = DBI::Gofer::Response->new({
rv => $rv,
err => $err,
errstr => $errstr,
state => $state,
flags => $flags,
});
return $response;
}
sub execute_request {
my ($self, $request) = @_;
# should never throw an exception
DBI->trace_msg("-----> execute_request\n");
my @warnings;
local $SIG{__WARN__} = sub {
push @warnings, @_;
warn @_ if $local_log;
};
my $response = eval {
if (my $check_request_sub = $self->check_request_sub) {
$request = $check_request_sub->($request, $self)
or die "check_request_sub failed";
}
my $version = $request->version || 0;
die ref($request)." version $version is not supported"
if $version < 0.009116 or $version >= 1;
($request->is_sth_request)
? $self->execute_sth_request($request)
: $self->execute_dbh_request($request);
};
$response ||= $self->new_response_with_err(undef, $@, $current_dbh);
if (my $check_response_sub = $self->check_response_sub) {
# not protected with an eval so it can choose to throw an exception
my $new = $check_response_sub->($response, $self, $request);
$response = $new if ref $new;
}
undef $current_dbh;
$response->warnings(\@warnings) if @warnings;
DBI->trace_msg("<----- execute_request\n");
return $response;
}
sub execute_dbh_request {
my ($self, $request) = @_;
my $stats = $self->{stats};
my $dbh;
my $rv_ref = eval {
$dbh = $self->_connect($request);
my $args = $request->dbh_method_call; # [ wantarray, 'method_name', @args ]
my $wantarray = shift @$args;
my $meth = shift @$args;
$stats->{method_calls_dbh}->{$meth}++;
my @rv = ($wantarray)
? $dbh->$meth(@$args)
: scalar $dbh->$meth(@$args);
\@rv;
} || [];
my $response = $self->new_response_with_err($rv_ref, $@, $dbh);
return $response if not $dbh;
# does this request also want any dbh attributes returned?
if (my $dbh_attributes = $request->dbh_attributes) {
$response->dbh_attributes( $self->gather_dbh_attributes($dbh, $dbh_attributes) );
}
if ($rv_ref and my $lid_args = $request->dbh_last_insert_id_args) {
$stats->{method_calls_dbh}->{last_insert_id}++;
my $id = $dbh->last_insert_id( @$lid_args );
$response->last_insert_id( $id );
}
if ($rv_ref and UNIVERSAL::isa($rv_ref->[0],'DBI::st')) {
# dbh_method_call was probably a metadata method like table_info
# that returns a statement handle, so turn the $sth into resultset
my $sth = $rv_ref->[0];
$response->sth_resultsets( $self->gather_sth_resultsets($sth, $request, $response) );
$response->rv("(sth)"); # don't try to return actual sth
}
# we're finished with this dbh for this request
$self->reset_dbh($dbh);
return $response;
}
sub gather_dbh_attributes {
my ($self, $dbh, $dbh_attributes) = @_;
my @req_attr_names = @$dbh_attributes;
if ($req_attr_names[0] eq '*') { # auto include std + private
shift @req_attr_names;
push @req_attr_names, @{ $self->_std_response_attribute_names($dbh) };
}
my %dbh_attr_values;
@dbh_attr_values{@req_attr_names} = $dbh->FETCH_many(@req_attr_names);
# XXX piggyback installed_methods onto dbh_attributes for now
$dbh_attr_values{dbi_installed_methods} = { DBI->installed_methods };
# XXX piggyback default_methods onto dbh_attributes for now
$dbh_attr_values{dbi_default_methods} = _get_default_methods($dbh);
return \%dbh_attr_values;
}
sub _std_response_attribute_names {
my ($self, $h) = @_;
$h = tied(%$h) || $h; # switch to inner handle
# cache the private_attribute_info data for each handle
# XXX might be better to cache it in the executor
# as it's unlikely to change
# or perhaps at least cache it in the dbh even for sth
# as the sth are typically very short lived
my ($dbh, $h_type, $driver_name, @attr_names);
if ($dbh = $h->{Database}) { # is an sth
# does the dbh already have the answer cached?
return $dbh->{private_gofer_std_attr_names_sth} if $dbh->{private_gofer_std_attr_names_sth};
($h_type, $driver_name) = ('sth', $dbh->{Driver}{Name});
push @attr_names, qw(NUM_OF_PARAMS NUM_OF_FIELDS NAME TYPE NULLABLE PRECISION SCALE);
}
else { # is a dbh
return $h->{private_gofer_std_attr_names_dbh} if $h->{private_gofer_std_attr_names_dbh};
($h_type, $driver_name, $dbh) = ('dbh', $h->{Driver}{Name}, $h);
# explicitly add these because drivers may have different defaults
# add Name so the client gets the real Name of the connection
push @attr_names, qw(ChopBlanks LongReadLen LongTruncOk ReadOnly Name);
}
if (my $pai = $h->private_attribute_info) {
push @attr_names, keys %$pai;
}
else {
push @attr_names, @{ $extra_attr{ $driver_name }{$h_type} || []};
}
if (my $fra = $self->{forced_response_attributes}) {
push @attr_names, @{ $fra->{ $driver_name }{$h_type} || []}
}
$dbh->trace_msg("_std_response_attribute_names for $driver_name $h_type: @attr_names\n");
# cache into the dbh even for sth, as the dbh is usually longer lived
return $dbh->{"private_gofer_std_attr_names_$h_type"} = \@attr_names;
}
sub execute_sth_request {
my ($self, $request) = @_;
my $dbh;
my $sth;
my $last_insert_id;
my $stats = $self->{stats};
my $rv = eval {
$dbh = $self->_connect($request);
my $args = $request->dbh_method_call; # [ wantarray, 'method_name', @args ]
shift @$args; # discard wantarray
my $meth = shift @$args;
$stats->{method_calls_sth}->{$meth}++;
$sth = $dbh->$meth(@$args);
my $last = '(sth)'; # a true value (don't try to return actual sth)
# execute methods on the sth, e.g., bind_param & execute
if (my $calls = $request->sth_method_calls) {
for my $meth_call (@$calls) {
my $method = shift @$meth_call;
$stats->{method_calls_sth}->{$method}++;
$last = $sth->$method(@$meth_call);
}
}
if (my $lid_args = $request->dbh_last_insert_id_args) {
$stats->{method_calls_sth}->{last_insert_id}++;
$last_insert_id = $dbh->last_insert_id( @$lid_args );
}
$last;
};
my $response = $self->new_response_with_err($rv, $@, $dbh);
return $response if not $dbh;
$response->last_insert_id( $last_insert_id )
if defined $last_insert_id;
# even if the eval failed we still want to try to gather attribute values
# (XXX would be nice to be able to support streaming of results.
# which would reduce memory usage and latency for large results)
if ($sth) {
$response->sth_resultsets( $self->gather_sth_resultsets($sth, $request, $response) );
$sth->finish;
}
# does this request also want any dbh attributes returned?
my $dbh_attr_set;
if (my $dbh_attributes = $request->dbh_attributes) {
$dbh_attr_set = $self->gather_dbh_attributes($dbh, $dbh_attributes);
}
# XXX needs to be integrated with private_attribute_info() etc
if (my $dbh_attr = $extra_attr{$dbh->{Driver}{Name}}{dbh_after_sth}) {
@{$dbh_attr_set}{@$dbh_attr} = $dbh->FETCH_many(@$dbh_attr);
}
$response->dbh_attributes($dbh_attr_set) if $dbh_attr_set && %$dbh_attr_set;
$self->reset_dbh($dbh);
return $response;
}
sub gather_sth_resultsets {
my ($self, $sth, $request, $response) = @_;
my $resultsets = eval {
my $attr_names = $self->_std_response_attribute_names($sth);
my $sth_attr = {};
$sth_attr->{$_} = 1 for @$attr_names;
# let the client add/remove sth attributes
if (my $sth_result_attr = $request->sth_result_attr) {
$sth_attr->{$_} = $sth_result_attr->{$_}
for keys %$sth_result_attr;
}
my @sth_attr = grep { $sth_attr->{$_} } keys %$sth_attr;
my $row_count = 0;
my $rs_list = [];
while (1) {
my $rs = $self->fetch_result_set($sth, \@sth_attr);
push @$rs_list, $rs;
if (my $rows = $rs->{rowset}) {
$row_count += @$rows;
}
last if $self->{forced_single_resultset};
last if !($sth->more_results || $sth->{syb_more_results});
}
my $stats = $self->{stats};
$stats->{rows_returned_total} += $row_count;
$stats->{rows_returned_max} = $row_count
if $row_count > ($stats->{rows_returned_max}||0);
$rs_list;
};
$response->add_err(1, $@) if $@;
return $resultsets;
}
sub fetch_result_set {
my ($self, $sth, $sth_attr) = @_;
my %meta;
eval {
@meta{ @$sth_attr } = $sth->FETCH_many(@$sth_attr);
# we assume @$sth_attr contains NUM_OF_FIELDS
$meta{rowset} = $sth->fetchall_arrayref()
if (($meta{NUM_OF_FIELDS}||0) > 0); # is SELECT
# the fetchall_arrayref may fail with a 'not executed' kind of error
# because gather_sth_resultsets/fetch_result_set are called even if
# execute() failed, or even if there was no execute() call at all.
# The corresponding error goes into the resultset err, not the top-level
# response err, so in most cases this resultset err is never noticed.
};
if ($@) {
chomp $@;
$meta{err} = $DBI::err || 1;
$meta{errstr} = $DBI::errstr || $@;
$meta{state} = $DBI::state;
}
return \%meta;
}
sub _get_default_methods {
my ($dbh) = @_;
# returns a ref to a hash of dbh method names for methods which the driver
# hasn't overridden i.e., quote(). These don't need to be forwarded via gofer.
my $ImplementorClass = $dbh->{ImplementorClass} or die;
my %default_methods;
for my $method (@all_dbh_methods) {
my $dbi_sub = $all_dbh_methods{$method} || 42;
my $imp_sub = $ImplementorClass->can($method) || 42;
next if $imp_sub != $dbi_sub;
#warn("default $method\n");
$default_methods{$method} = 1;
}
return \%default_methods;
}
# XXX would be nice to make this a generic DBI module
sub _install_rand_callbacks {
my ($self, $dbh, $dbi_gofer_random) = @_;
my $callbacks = $dbh->{Callbacks} || {};
my $prev = $dbh->{private_gofer_rand_fail_callbacks} || {};
# return if we've already setup this handle with callbacks for these specs
return if (($callbacks->{_dbi_gofer_random_spec}||'') eq $dbi_gofer_random);
#warn "$dbh # $callbacks->{_dbi_gofer_random_spec}";
$callbacks->{_dbi_gofer_random_spec} = $dbi_gofer_random;
my ($fail_percent, $fail_err, $delay_percent, $delay_duration, %spec_part, @spec_note);
my @specs = split /,/, $dbi_gofer_random;
for my $spec (@specs) {
if ($spec =~ m/^fail=(-?[.\d]+)%?$/) {
$fail_percent = $1;
$spec_part{fail} = $spec;
next;
}
if ($spec =~ m/^err=(-?\d+)$/) {
$fail_err = $1;
$spec_part{err} = $spec;
next;
}
if ($spec =~ m/^delay([.\d]+)=(-?[.\d]+)%?$/) {
$delay_duration = $1;
$delay_percent = $2;
$spec_part{delay} = $spec;
next;
}
elsif ($spec !~ m/^(\w+|\*)$/) {
warn "Ignored DBI_GOFER_RANDOM item '$spec' which isn't a config or a dbh method name";
next;
}
my $method = $spec;
if ($callbacks->{$method} && $prev->{$method} && $callbacks->{$method} != $prev->{$method}) {
warn "Callback for $method method already installed so DBI_GOFER_RANDOM callback not installed\n";
next;
}
unless (defined $fail_percent or defined $delay_percent) {
warn "Ignored DBI_GOFER_RANDOM item '$spec' because not preceded by 'fail=N' and/or 'delayN=N'";
next;
}
push @spec_note, join(",", values(%spec_part), $method);
$callbacks->{$method} = $self->_mk_rand_callback($method, $fail_percent, $delay_percent, $delay_duration, $fail_err);
}
warn "DBI_GOFER_RANDOM failures/delays enabled: @spec_note\n"
if @spec_note;
$dbh->{Callbacks} = $callbacks;
$dbh->{private_gofer_rand_fail_callbacks} = $callbacks;
}
my %_mk_rand_callback_seqn;
sub _mk_rand_callback {
my ($self, $method, $fail_percent, $delay_percent, $delay_duration, $fail_err) = @_;
my ($fail_modrate, $delay_modrate);
$fail_percent ||= 0; $fail_modrate = int(1/(-$fail_percent )*100) if $fail_percent;
$delay_percent ||= 0; $delay_modrate = int(1/(-$delay_percent)*100) if $delay_percent;
# note that $method may be "*" but that's not recommended or documented or wise
return sub {
my ($h) = @_;
my $seqn = ++$_mk_rand_callback_seqn{$method};
my $delay = ($delay_percent > 0) ? rand(100) < $delay_percent :
($delay_percent < 0) ? !($seqn % $delay_modrate): 0;
my $fail = ($fail_percent > 0) ? rand(100) < $fail_percent :
($fail_percent < 0) ? !($seqn % $fail_modrate) : 0;
#no warnings 'uninitialized';
#warn "_mk_rand_callback($fail_percent:$fail_modrate, $delay_percent:$delay_modrate): seqn=$seqn fail=$fail delay=$delay";
if ($delay) {
my $msg = "DBI_GOFER_RANDOM delaying execution of $method() by $delay_duration seconds\n";
# Note what's happening in a trace message. If the delay percent is an even
# number then use warn() instead so it's sent back to the client.
($delay_percent % 2 == 1) ? warn($msg) : $h->trace_msg($msg);
select undef, undef, undef, $delay_duration; # allows floating point value
}
if ($fail) {
undef $_; # tell DBI to not call the method
# the "induced by DBI_GOFER_RANDOM" is special and must be included in errstr
# as it's checked for in a few places, such as the gofer retry logic
return $h->set_err($fail_err || $DBI::stderr,
"fake error from $method method induced by DBI_GOFER_RANDOM env var ($fail_percent%)");
}
return;
}
}
sub update_stats {
my ($self,
$request, $response,
$frozen_request, $frozen_response,
$time_received,
$store_meta, $other_meta,
) = @_;
# should always have a response object here
carp("No response object provided") unless $request;
my $stats = $self->{stats};
$stats->{frozen_request_max_bytes} = length($frozen_request)
if $frozen_request
&& length($frozen_request) > ($stats->{frozen_request_max_bytes}||0);
$stats->{frozen_response_max_bytes} = length($frozen_response)
if $frozen_response
&& length($frozen_response) > ($stats->{frozen_response_max_bytes}||0);
my $recent;
if (my $track_recent = $self->{track_recent}) {
$recent = {
request => $frozen_request,
response => $frozen_response,
time_received => $time_received,
duration => dbi_time()-$time_received,
# for any other info
($store_meta) ? (meta => $store_meta) : (),
};
$recent->{request_object} = $request
if !$frozen_request && $request;
$recent->{response_object} = $response
if !$frozen_response;
my @queues = ($stats->{recent_requests} ||= []);
push @queues, ($stats->{recent_errors} ||= [])
if !$response or $response->err;
for my $queue (@queues) {
push @$queue, $recent;
shift @$queue if @$queue > $track_recent;
}
}
return $recent;
}
1;
__END__
=head1 NAME
DBI::Gofer::Execute - Executes Gofer requests and returns Gofer responses
=head1 SYNOPSIS
$executor = DBI::Gofer::Execute->new( { ...config... });
$response = $executor->execute_request( $request );
=head1 DESCRIPTION
Accepts a DBI::Gofer::Request object, executes the requested DBI method calls,
and returns a DBI::Gofer::Response object.
Any error, including any internal 'fatal' errors are caught and converted into
a DBI::Gofer::Response object.
This module is usually invoked by a 'server-side' Gofer transport module.
They usually have names in the "C<DBI::Gofer::Transport::*>" namespace.
Examples include: L<DBI::Gofer::Transport::stream> and L<DBI::Gofer::Transport::mod_perl>.
=head1 CONFIGURATION
=head2 check_request_sub
If defined, it must be a reference to a subroutine that will 'check' the request.
It is passed the request object and the executor as its only arguments.
The subroutine can either return the original request object or die with a
suitable error message (which will be turned into a Gofer response).
It can also construct and return a new request that should be executed instead
of the original request.
=head2 check_response_sub
If defined, it must be a reference to a subroutine that will 'check' the response.
It is passed the response object, the executor, and the request object.
The sub may alter the response object and return undef, or return a new response object.
This mechanism can be used to, for example, terminate the service if specific
database errors are seen.
=head2 forced_connect_dsn
If set, this DSN is always used instead of the one in the request.
=head2 default_connect_dsn
If set, this DSN is used if C<forced_connect_dsn> is not set and the request does not contain a DSN itself.
=head2 forced_connect_attributes
A reference to a hash of connect() attributes. Individual attributes in
C<forced_connect_attributes> will take precedence over corresponding attributes
in the request.
=head2 default_connect_attributes
A reference to a hash of connect() attributes. Individual attributes in the
request take precedence over corresponding attributes in C<default_connect_attributes>.
=head2 max_cached_dbh_per_drh
If set, the loaded drivers will be checked to ensure they don't have more than
this number of cached connections. There is no default value. This limit is not
enforced for every request.
=head2 max_cached_sth_per_dbh
If set, all the cached statement handles will be cleared once the number of
cached statement handles rises above this limit. The default is 1000.
=head2 forced_single_resultset
If true, then only the first result set will be fetched and returned in the response.
=head2 forced_response_attributes
A reference to a data structure that can specify extra attributes to be returned in responses.
forced_response_attributes => {
DriverName => {
dbh => [ qw(dbh_attrib_name) ],
sth => [ qw(sth_attrib_name) ],
},
},
This can be useful in cases where the driver has not implemented the
private_attribute_info() method and DBI::Gofer::Execute's own fallback list of
private attributes doesn't include the driver or attributes you need.
=head2 track_recent
If set, specifies the number of recent requests and responses that should be
kept by the update_stats() method for diagnostics. See L<DBI::Gofer::Transport::mod_perl>.
Note that this setting can significantly increase memory use. Use with caution.
=head2 forced_gofer_random
Enable forced random failures and/or delays for testing. See L</DBI_GOFER_RANDOM> below.
=head1 DRIVER-SPECIFIC ISSUES
Gofer needs to know about any driver-private attributes that should have their
values sent back to the client.
If the driver doesn't support private_attribute_info() method, and very few do,
then the module fallsback to using some hard-coded details, if available, for
the driver being used. Currently hard-coded details are available for the
mysql, Pg, Sybase, and SQLite drivers.
=head1 TESTING
DBD::Gofer, DBD::Execute and related packages are well tested by executing the
DBI test suite with DBI_AUTOPROXY configured to route all DBI calls via DBD::Gofer.
Because Gofer includes timeout and 'retry on error' mechanisms there is a need
for some way to trigger delays and/or errors. This can be done via the
C<forced_gofer_random> configuration item, or else the DBI_GOFER_RANDOM environment
variable.
=head2 DBI_GOFER_RANDOM
The value of the C<forced_gofer_random> configuration item (or else the
DBI_GOFER_RANDOM environment variable) is treated as a series of tokens
separated by commas.
The tokens can be one of three types:
=over 4
=item fail=R%
Set the current failure rate to R where R is a percentage.
The value R can be floating point, e.g., C<fail=0.05%>.
Negative values for R have special meaning, see below.
=item err=N
Sets the current failure err value to N (instead of the DBI's default 'standard
err value' of 2000000000). This is useful when you want to simulate a
specific error.
=item delayN=R%
Set the current random delay rate to R where R is a percentage, and set the
current delay duration to N seconds. The values of R and N can be floating point,
e.g., C<delay0.5=0.2%>. Negative values for R have special meaning, see below.
If R is an odd number (R % 2 == 1) then a message is logged via warn() which
will be returned to, and echoed at, the client.
=item methodname
Applies the current fail, err, and delay values to the named method.
If neither a fail nor delay have been set yet then a warning is generated.
=back
For example:
$executor = DBI::Gofer::Execute->new( {
forced_gofer_random => "fail=0.01%,do,delay60=1%,execute",
});
will cause the do() method to fail for 0.01% of calls, and the execute() method to
fail 0.01% of calls and be delayed by 60 seconds on 1% of calls.
If the percentage value (C<R>) is negative then instead of the failures being
triggered randomly (via the rand() function) they are triggered via a sequence
number. In other words "C<fail=-20%>" will mean every fifth call will fail.
Each method has a distinct sequence number.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
DBI/Gofer/Response.pm 0000644 00000014123 15033552504 0010343 0 ustar 00 package DBI::Gofer::Response;
# $Id: Response.pm 11565 2008-07-22 20:17:33Z Tim $
#
# Copyright (c) 2007, Tim Bunce, Ireland
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
use strict;
use Carp;
use DBI qw(neat neat_list);
use base qw(DBI::Util::_accessor Exporter);
our $VERSION = "0.011566";
use constant GOf_RESPONSE_EXECUTED => 0x0001;
our @EXPORT = qw(GOf_RESPONSE_EXECUTED);
__PACKAGE__->mk_accessors(qw(
version
rv
err
errstr
state
flags
last_insert_id
dbh_attributes
sth_resultsets
warnings
));
__PACKAGE__->mk_accessors_using(make_accessor_autoviv_hashref => qw(
meta
));
sub new {
my ($self, $args) = @_;
$args->{version} ||= $VERSION;
chomp $args->{errstr} if $args->{errstr};
return $self->SUPER::new($args);
}
sub err_errstr_state {
my $self = shift;
return @{$self}{qw(err errstr state)};
}
sub executed_flag_set {
my $flags = shift->flags
or return 0;
return $flags & GOf_RESPONSE_EXECUTED;
}
sub add_err {
my ($self, $err, $errstr, $state, $trace) = @_;
# acts like the DBI's set_err method.
# this code copied from DBI::PurePerl's set_err method.
chomp $errstr if $errstr;
$state ||= '';
carp ref($self)."->add_err($err, $errstr, $state)"
if $trace and defined($err) || $errstr;
my ($r_err, $r_errstr, $r_state) = ($self->{err}, $self->{errstr}, $self->{state});
if ($r_errstr) {
$r_errstr .= sprintf " [err was %s now %s]", $r_err, $err
if $r_err && $err && $r_err ne $err;
$r_errstr .= sprintf " [state was %s now %s]", $r_state, $state
if $r_state and $r_state ne "S1000" && $state && $r_state ne $state;
$r_errstr .= "\n$errstr" if $r_errstr ne $errstr;
}
else {
$r_errstr = $errstr;
}
# assign if higher priority: err > "0" > "" > undef
my $err_changed;
if ($err # new error: so assign
or !defined $r_err # no existing warn/info: so assign
# new warn ("0" len 1) > info ("" len 0): so assign
or defined $err && length($err) > length($r_err)
) {
$r_err = $err;
++$err_changed;
}
$r_state = ($state eq "00000") ? "" : $state
if $state && $err_changed;
($self->{err}, $self->{errstr}, $self->{state}) = ($r_err, $r_errstr, $r_state);
return undef;
}
sub summary_as_text {
my $self = shift;
my ($context) = @_;
my ($rv, $err, $errstr, $state) = ($self->{rv}, $self->{err}, $self->{errstr}, $self->{state});
my @s = sprintf("\trv=%s", (ref $rv) ? "[".neat_list($rv)."]" : neat($rv));
$s[-1] .= sprintf(", err=%s, errstr=%s", $err, neat($errstr))
if defined $err;
$s[-1] .= sprintf(", flags=0x%x", $self->{flags})
if defined $self->{flags};
push @s, "last_insert_id=%s", $self->last_insert_id
if defined $self->last_insert_id;
if (my $dbh_attr = $self->dbh_attributes) {
my @keys = sort keys %$dbh_attr;
push @s, sprintf "dbh= { %s }", join(", ", map { "$_=>".neat($dbh_attr->{$_},100) } @keys)
if @keys;
}
for my $rs (@{$self->sth_resultsets || []}) {
my ($rowset, $err, $errstr, $state)
= @{$rs}{qw(rowset err errstr state)};
my $summary = "rowset: ";
my $NUM_OF_FIELDS = $rs->{NUM_OF_FIELDS} || 0;
my $rows = $rowset ? @$rowset : 0;
if ($rowset || $NUM_OF_FIELDS > 0) {
$summary .= sprintf "%d rows, %d columns", $rows, $NUM_OF_FIELDS;
}
$summary .= sprintf ", err=%s, errstr=%s", $err, neat($errstr) if defined $err;
if ($rows) {
my $NAME = $rs->{NAME};
# generate
my @colinfo = map { "$NAME->[$_]=".neat($rowset->[0][$_], 30) } 0..@{$NAME}-1;
$summary .= sprintf " [%s]", join ", ", @colinfo;
$summary .= ",..." if $rows > 1;
# we can be a little more helpful for Sybase/MSSQL user
$summary .= " syb_result_type=$rs->{syb_result_type}"
if $rs->{syb_result_type} and $rs->{syb_result_type} != 4040;
}
push @s, $summary;
}
for my $w (@{$self->warnings || []}) {
chomp $w;
push @s, "warning: $w";
}
if ($context && %$context) {
my @keys = sort keys %$context;
push @s, join(", ", map { "$_=>".$context->{$_} } @keys);
}
return join("\n\t", @s). "\n";
}
sub outline_as_text { # one-line version of summary_as_text
my $self = shift;
my ($context) = @_;
my ($rv, $err, $errstr, $state) = ($self->{rv}, $self->{err}, $self->{errstr}, $self->{state});
my $s = sprintf("rv=%s", (ref $rv) ? "[".neat_list($rv)."]" : neat($rv));
$s .= sprintf(", err=%s %s", $err, neat($errstr))
if defined $err;
$s .= sprintf(", flags=0x%x", $self->{flags})
if $self->{flags};
if (my $sth_resultsets = $self->sth_resultsets) {
$s .= sprintf(", %d resultsets ", scalar @$sth_resultsets);
my @rs;
for my $rs (@{$self->sth_resultsets || []}) {
my $summary = "";
my ($rowset, $err, $errstr)
= @{$rs}{qw(rowset err errstr)};
my $NUM_OF_FIELDS = $rs->{NUM_OF_FIELDS} || 0;
my $rows = $rowset ? @$rowset : 0;
if ($rowset || $NUM_OF_FIELDS > 0) {
$summary .= sprintf "%dr x %dc", $rows, $NUM_OF_FIELDS;
}
$summary .= sprintf "%serr %s %s", ($summary?", ":""), $err, neat($errstr)
if defined $err;
push @rs, $summary;
}
$s .= join "; ", map { "[$_]" } @rs;
}
return $s;
}
1;
=head1 NAME
DBI::Gofer::Response - Encapsulate a response from DBI::Gofer::Execute to DBD::Gofer
=head1 DESCRIPTION
This is an internal class.
=head1 AUTHOR
Tim Bunce, L<http://www.tim.bunce.name>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
Encode/_PM.e2x 0000644 00000000372 15033552504 0007040 0 ustar 00 package Encode::$_Name_;
our $VERSION = "0.01";
use Encode;
use XSLoader;
XSLoader::load(__PACKAGE__,$VERSION);
1;
__END__
=head1 NAME
Encode::$_Name_ - New Encoding
=head1 SYNOPSIS
You got to fill this in!
=head1 SEE ALSO
L<Encode>
=cut
Encode/Unicode/UTF7.pm 0000644 00000007443 15033552504 0010424 0 ustar 00 #
# $Id: UTF7.pm,v 2.10 2017/06/10 17:23:50 dankogai Exp $
#
package Encode::Unicode::UTF7;
use strict;
use warnings;
use parent qw(Encode::Encoding);
__PACKAGE__->Define('UTF-7');
our $VERSION = do { my @r = ( q$Revision: 2.10 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use MIME::Base64;
use Encode qw(find_encoding);
#
# Algorithms taken from Unicode::String by Gisle Aas
#
our $OPTIONAL_DIRECT_CHARS = 1;
my $specials = quotemeta "\'(),-./:?";
$OPTIONAL_DIRECT_CHARS
and $specials .= quotemeta "!\"#$%&*;<=>@[]^_`{|}";
# \s will not work because it matches U+3000 DEOGRAPHIC SPACE
# We use qr/[\n\r\t\ ] instead
my $re_asis = qr/(?:[\n\r\t\ A-Za-z0-9$specials])/;
my $re_encoded = qr/(?:[^\n\r\t\ A-Za-z0-9$specials])/;
my $e_utf16 = find_encoding("UTF-16BE");
sub needs_lines { 1 }
sub encode($$;$) {
my ( $obj, $str, $chk ) = @_;
return undef unless defined $str;
my $len = length($str);
pos($str) = 0;
my $bytes = substr($str, 0, 0); # to propagate taintedness
while ( pos($str) < $len ) {
if ( $str =~ /\G($re_asis+)/ogc ) {
my $octets = $1;
utf8::downgrade($octets);
$bytes .= $octets;
}
elsif ( $str =~ /\G($re_encoded+)/ogsc ) {
if ( $1 eq "+" ) {
$bytes .= "+-";
}
else {
my $s = $1;
my $base64 = encode_base64( $e_utf16->encode($s), '' );
$base64 =~ s/=+$//;
$bytes .= "+$base64-";
}
}
else {
die "This should not happen! (pos=" . pos($str) . ")";
}
}
$_[1] = '' if $chk;
return $bytes;
}
sub decode($$;$) {
use re 'taint';
my ( $obj, $bytes, $chk ) = @_;
return undef unless defined $bytes;
my $len = length($bytes);
my $str = substr($bytes, 0, 0); # to propagate taintedness;
pos($bytes) = 0;
no warnings 'uninitialized';
while ( pos($bytes) < $len ) {
if ( $bytes =~ /\G([^+]+)/ogc ) {
$str .= $1;
}
elsif ( $bytes =~ /\G\+-/ogc ) {
$str .= "+";
}
elsif ( $bytes =~ /\G\+([A-Za-z0-9+\/]+)-?/ogsc ) {
my $base64 = $1;
my $pad = length($base64) % 4;
$base64 .= "=" x ( 4 - $pad ) if $pad;
$str .= $e_utf16->decode( decode_base64($base64) );
}
elsif ( $bytes =~ /\G\+/ogc ) {
$^W and warn "Bad UTF7 data escape";
$str .= "+";
}
else {
die "This should not happen " . pos($bytes);
}
}
$_[1] = '' if $chk;
return $str;
}
1;
__END__
=head1 NAME
Encode::Unicode::UTF7 -- UTF-7 encoding
=head1 SYNOPSIS
use Encode qw/encode decode/;
$utf7 = encode("UTF-7", $utf8);
$utf8 = decode("UTF-7", $ucs2);
=head1 ABSTRACT
This module implements UTF-7 encoding documented in RFC 2152. UTF-7,
as its name suggests, is a 7-bit re-encoded version of UTF-16BE. It
is designed to be MTA-safe and expected to be a standard way to
exchange Unicoded mails via mails. But with the advent of UTF-8 and
8-bit compliant MTAs, UTF-7 is hardly ever used.
UTF-7 was not supported by Encode until version 1.95 because of that.
But Unicode::String, a module by Gisle Aas which adds Unicode supports
to non-utf8-savvy perl did support UTF-7, the UTF-7 support was added
so Encode can supersede Unicode::String 100%.
=head1 In Practice
When you want to encode Unicode for mails and web pages, however, do
not use UTF-7 unless you are sure your recipients and readers can
handle it. Very few MUAs and WWW Browsers support these days (only
Mozilla seems to support one). For general cases, use UTF-8 for
message body and MIME-Header for header instead.
=head1 SEE ALSO
L<Encode>, L<Encode::Unicode>, L<Unicode::String>
RFC 2781 L<http://www.ietf.org/rfc/rfc2152.txt>
=cut
Encode/TW.pm 0000644 00000004364 15033552504 0006642 0 ustar 00 package Encode::TW;
BEGIN {
if ( ord("A") == 193 ) {
die "Encode::TW not supported on EBCDIC\n";
}
}
use strict;
use warnings;
use Encode;
our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
1;
__END__
=head1 NAME
Encode::TW - Taiwan-based Chinese Encodings
=head1 SYNOPSIS
use Encode qw/encode decode/;
$big5 = encode("big5", $utf8); # loads Encode::TW implicitly
$utf8 = decode("big5", $big5); # ditto
=head1 DESCRIPTION
This module implements tradition Chinese charset encodings as used
in Taiwan and Hong Kong.
Encodings supported are as follows.
Canonical Alias Description
--------------------------------------------------------------------
big5-eten /\bbig-?5$/i Big5 encoding (with ETen extensions)
/\bbig5-?et(en)?$/i
/\btca-?big5$/i
big5-hkscs /\bbig5-?hk(scs)?$/i
/\bhk(scs)?-?big5$/i
Big5 + Cantonese characters in Hong Kong
MacChineseTrad Big5 + Apple Vendor Mappings
cp950 Code Page 950
= Big5 + Microsoft vendor mappings
--------------------------------------------------------------------
To find out how to use this module in detail, see L<Encode>.
=head1 NOTES
Due to size concerns, C<EUC-TW> (Extended Unix Character), C<CCCII>
(Chinese Character Code for Information Interchange), C<BIG5PLUS>
(CMEX's Big5+) and C<BIG5EXT> (CMEX's Big5e) are distributed separately
on CPAN, under the name L<Encode::HanExtra>. That module also contains
extra China-based encodings.
=head1 BUGS
Since the original C<big5> encoding (1984) is not supported anywhere
(glibc and DOS-based systems uses C<big5> to mean C<big5-eten>; Microsoft
uses C<big5> to mean C<cp950>), a conscious decision was made to alias
C<big5> to C<big5-eten>, which is the de facto superset of the original
big5.
The C<CNS11643> encoding files are not complete. For common C<CNS11643>
manipulation, please use C<EUC-TW> in L<Encode::HanExtra>, which contains
planes 1-7.
The ASCII region (0x00-0x7f) is preserved for all encodings, even
though this conflicts with mappings by the Unicode Consortium.
=head1 SEE ALSO
L<Encode>
=cut
Encode/KR/2022_KR.pm 0000644 00000003671 15033552504 0007605 0 ustar 00 package Encode::KR::2022_KR;
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use Encode qw(:fallbacks);
use parent qw(Encode::Encoding);
__PACKAGE__->Define('iso-2022-kr');
sub needs_lines { 1 }
sub perlio_ok {
return 0; # for the time being
}
sub decode {
my ( $obj, $str, $chk ) = @_;
return undef unless defined $str;
my $res = $str;
my $residue = iso_euc( \$res );
# This is for PerlIO
$_[1] = $residue if $chk;
return Encode::decode( 'euc-kr', $res, FB_PERLQQ );
}
sub encode {
my ( $obj, $utf8, $chk ) = @_;
return undef unless defined $utf8;
# empty the input string in the stack so perlio is ok
$_[1] = '' if $chk;
my $octet = Encode::encode( 'euc-kr', $utf8, FB_PERLQQ );
euc_iso( \$octet );
return $octet;
}
use Encode::CJKConstants qw(:all);
# ISO<->EUC
sub iso_euc {
my $r_str = shift;
$$r_str =~ s/$RE{'2022_KR'}//gox; # remove the designator
$$r_str =~ s{ # replace characters in GL
\x0e # between SO(\x0e) and SI(\x0f)
([^\x0f]*) # with characters in GR
\x0f
}
{
my $out= $1;
$out =~ tr/\x21-\x7e/\xa1-\xfe/;
$out;
}geox;
my ($residue) = ( $$r_str =~ s/(\e.*)$//so );
return $residue;
}
sub euc_iso {
no warnings qw(uninitialized);
my $r_str = shift;
substr( $$r_str, 0, 0 ) =
$ESC{'2022_KR'}; # put the designator at the beg.
$$r_str =~
s{ # move KS X 1001 characters in GR to GL
($RE{EUC_C}+) # and enclose them with SO and SI
}{
my $str = $1;
$str =~ tr/\xA1-\xFE/\x21-\x7E/;
"\x0e" . $str . "\x0f";
}geox;
$$r_str;
}
1;
__END__
=head1 NAME
Encode::KR::2022_KR -- internally used by Encode::KR
=cut
Encode/Changes.e2x 0000644 00000000263 15033552504 0007734 0 ustar 00 #
# $Id: Changes.e2x,v 2.0 2004/05/16 20:55:15 dankogai Exp $
# Revision history for Perl extension Encode::$_Name_.
#
0.01 $_Now_
Autogenerated by enc2xs version $_Version_.
Encode/Encoding.pm 0000644 00000021547 15033552504 0010040 0 ustar 00 package Encode::Encoding;
# Base class for classes which implement encodings
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 2.8 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
our @CARP_NOT = qw(Encode Encode::Encoder);
use Carp ();
use Encode ();
use Encode::MIME::Name;
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
sub Define {
my $obj = shift;
my $canonical = shift;
$obj = bless { Name => $canonical }, $obj unless ref $obj;
# warn "$canonical => $obj\n";
Encode::define_encoding( $obj, $canonical, @_ );
}
sub name { return shift->{'Name'} }
sub mime_name {
return Encode::MIME::Name::get_mime_name(shift->name);
}
sub renew {
my $self = shift;
my $clone = bless {%$self} => ref($self);
$clone->{renewed}++; # so the caller can see it
DEBUG and warn $clone->{renewed};
return $clone;
}
sub renewed { return $_[0]->{renewed} || 0 }
*new_sequence = \&renew;
sub needs_lines { 0 }
sub perlio_ok {
return eval { require PerlIO::encoding } ? 1 : 0;
}
# (Temporary|legacy) methods
sub toUnicode { shift->decode(@_) }
sub fromUnicode { shift->encode(@_) }
#
# Needs to be overloaded or just croak
#
sub encode {
my $obj = shift;
my $class = ref($obj) ? ref($obj) : $obj;
Carp::croak( $class . "->encode() not defined!" );
}
sub decode {
my $obj = shift;
my $class = ref($obj) ? ref($obj) : $obj;
Carp::croak( $class . "->encode() not defined!" );
}
sub DESTROY { }
1;
__END__
=head1 NAME
Encode::Encoding - Encode Implementation Base Class
=head1 SYNOPSIS
package Encode::MyEncoding;
use parent qw(Encode::Encoding);
__PACKAGE__->Define(qw(myCanonical myAlias));
=head1 DESCRIPTION
As mentioned in L<Encode>, encodings are (in the current
implementation at least) defined as objects. The mapping of encoding
name to object is via the C<%Encode::Encoding> hash. Though you can
directly manipulate this hash, it is strongly encouraged to use this
base class module and add encode() and decode() methods.
=head2 Methods you should implement
You are strongly encouraged to implement methods below, at least
either encode() or decode().
=over 4
=item -E<gt>encode($string [,$check])
MUST return the octet sequence representing I<$string>.
=over 2
=item *
If I<$check> is true, it SHOULD modify I<$string> in place to remove
the converted part (i.e. the whole string unless there is an error).
If perlio_ok() is true, SHOULD becomes MUST.
=item *
If an error occurs, it SHOULD return the octet sequence for the
fragment of string that has been converted and modify $string in-place
to remove the converted part leaving it starting with the problem
fragment. If perlio_ok() is true, SHOULD becomes MUST.
=item *
If I<$check> is false then C<encode> MUST make a "best effort" to
convert the string - for example, by using a replacement character.
=back
=item -E<gt>decode($octets [,$check])
MUST return the string that I<$octets> represents.
=over 2
=item *
If I<$check> is true, it SHOULD modify I<$octets> in place to remove
the converted part (i.e. the whole sequence unless there is an
error). If perlio_ok() is true, SHOULD becomes MUST.
=item *
If an error occurs, it SHOULD return the fragment of string that has
been converted and modify $octets in-place to remove the converted
part leaving it starting with the problem fragment. If perlio_ok() is
true, SHOULD becomes MUST.
=item *
If I<$check> is false then C<decode> should make a "best effort" to
convert the string - for example by using Unicode's "\x{FFFD}" as a
replacement character.
=back
=back
If you want your encoding to work with L<encoding> pragma, you should
also implement the method below.
=over 4
=item -E<gt>cat_decode($destination, $octets, $offset, $terminator [,$check])
MUST decode I<$octets> with I<$offset> and concatenate it to I<$destination>.
Decoding will terminate when $terminator (a string) appears in output.
I<$offset> will be modified to the last $octets position at end of decode.
Returns true if $terminator appears output, else returns false.
=back
=head2 Other methods defined in Encode::Encodings
You do not have to override methods shown below unless you have to.
=over 4
=item -E<gt>name
Predefined As:
sub name { return shift->{'Name'} }
MUST return the string representing the canonical name of the encoding.
=item -E<gt>mime_name
Predefined As:
sub mime_name{
return Encode::MIME::Name::get_mime_name(shift->name);
}
MUST return the string representing the IANA charset name of the encoding.
=item -E<gt>renew
Predefined As:
sub renew {
my $self = shift;
my $clone = bless { %$self } => ref($self);
$clone->{renewed}++;
return $clone;
}
This method reconstructs the encoding object if necessary. If you need
to store the state during encoding, this is where you clone your object.
PerlIO ALWAYS calls this method to make sure it has its own private
encoding object.
=item -E<gt>renewed
Predefined As:
sub renewed { $_[0]->{renewed} || 0 }
Tells whether the object is renewed (and how many times). Some
modules emit C<Use of uninitialized value in null operation> warning
unless the value is numeric so return 0 for false.
=item -E<gt>perlio_ok()
Predefined As:
sub perlio_ok {
return eval { require PerlIO::encoding } ? 1 : 0;
}
If your encoding does not support PerlIO for some reasons, just;
sub perlio_ok { 0 }
=item -E<gt>needs_lines()
Predefined As:
sub needs_lines { 0 };
If your encoding can work with PerlIO but needs line buffering, you
MUST define this method so it returns true. 7bit ISO-2022 encodings
are one example that needs this. When this method is missing, false
is assumed.
=back
=head2 Example: Encode::ROT13
package Encode::ROT13;
use strict;
use parent qw(Encode::Encoding);
__PACKAGE__->Define('rot13');
sub encode($$;$){
my ($obj, $str, $chk) = @_;
$str =~ tr/A-Za-z/N-ZA-Mn-za-m/;
$_[1] = '' if $chk; # this is what in-place edit means
return $str;
}
# Jr pna or ynml yvxr guvf;
*decode = \&encode;
1;
=head1 Why the heck Encode API is different?
It should be noted that the I<$check> behaviour is different from the
outer public API. The logic is that the "unchecked" case is useful
when the encoding is part of a stream which may be reporting errors
(e.g. STDERR). In such cases, it is desirable to get everything
through somehow without causing additional errors which obscure the
original one. Also, the encoding is best placed to know what the
correct replacement character is, so if that is the desired behaviour
then letting low level code do it is the most efficient.
By contrast, if I<$check> is true, the scheme above allows the
encoding to do as much as it can and tell the layer above how much
that was. What is lacking at present is a mechanism to report what
went wrong. The most likely interface will be an additional method
call to the object, or perhaps (to avoid forcing per-stream objects
on otherwise stateless encodings) an additional parameter.
It is also highly desirable that encoding classes inherit from
C<Encode::Encoding> as a base class. This allows that class to define
additional behaviour for all encoding objects.
package Encode::MyEncoding;
use parent qw(Encode::Encoding);
__PACKAGE__->Define(qw(myCanonical myAlias));
to create an object with C<< bless {Name => ...}, $class >>, and call
define_encoding. They inherit their C<name> method from
C<Encode::Encoding>.
=head2 Compiled Encodings
For the sake of speed and efficiency, most of the encodings are now
supported via a I<compiled form>: XS modules generated from UCM
files. Encode provides the enc2xs tool to achieve that. Please see
L<enc2xs> for more details.
=head1 SEE ALSO
L<perlmod>, L<enc2xs>
=begin future
=over 4
=item Scheme 1
The fixup routine gets passed the remaining fragment of string being
processed. It modifies it in place to remove bytes/characters it can
understand and returns a string used to represent them. For example:
sub fixup {
my $ch = substr($_[0],0,1,'');
return sprintf("\x{%02X}",ord($ch);
}
This scheme is close to how the underlying C code for Encode works,
but gives the fixup routine very little context.
=item Scheme 2
The fixup routine gets passed the original string, an index into
it of the problem area, and the output string so far. It appends
what it wants to the output string and returns a new index into the
original string. For example:
sub fixup {
# my ($s,$i,$d) = @_;
my $ch = substr($_[0],$_[1],1);
$_[2] .= sprintf("\x{%02X}",ord($ch);
return $_[1]+1;
}
This scheme gives maximal control to the fixup routine but is more
complicated to code, and may require that the internals of Encode be tweaked to
keep the original string intact.
=item Other Schemes
Hybrids of the above.
Multiple return values rather than in-place modifications.
Index into the string could be C<pos($str)> allowing C<s/\G...//>.
=back
=end future
=cut
Encode/Config.pm 0000644 00000013661 15033552504 0007515 0 ustar 00 #
# Demand-load module list
#
package Encode::Config;
our $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use strict;
use warnings;
our %ExtModule = (
# Encode::Byte
#iso-8859-1 is in Encode.pm itself
'iso-8859-2' => 'Encode::Byte',
'iso-8859-3' => 'Encode::Byte',
'iso-8859-4' => 'Encode::Byte',
'iso-8859-5' => 'Encode::Byte',
'iso-8859-6' => 'Encode::Byte',
'iso-8859-7' => 'Encode::Byte',
'iso-8859-8' => 'Encode::Byte',
'iso-8859-9' => 'Encode::Byte',
'iso-8859-10' => 'Encode::Byte',
'iso-8859-11' => 'Encode::Byte',
'iso-8859-13' => 'Encode::Byte',
'iso-8859-14' => 'Encode::Byte',
'iso-8859-15' => 'Encode::Byte',
'iso-8859-16' => 'Encode::Byte',
'koi8-f' => 'Encode::Byte',
'koi8-r' => 'Encode::Byte',
'koi8-u' => 'Encode::Byte',
'viscii' => 'Encode::Byte',
'cp424' => 'Encode::Byte',
'cp437' => 'Encode::Byte',
'cp737' => 'Encode::Byte',
'cp775' => 'Encode::Byte',
'cp850' => 'Encode::Byte',
'cp852' => 'Encode::Byte',
'cp855' => 'Encode::Byte',
'cp856' => 'Encode::Byte',
'cp857' => 'Encode::Byte',
'cp858' => 'Encode::Byte',
'cp860' => 'Encode::Byte',
'cp861' => 'Encode::Byte',
'cp862' => 'Encode::Byte',
'cp863' => 'Encode::Byte',
'cp864' => 'Encode::Byte',
'cp865' => 'Encode::Byte',
'cp866' => 'Encode::Byte',
'cp869' => 'Encode::Byte',
'cp874' => 'Encode::Byte',
'cp1006' => 'Encode::Byte',
'cp1250' => 'Encode::Byte',
'cp1251' => 'Encode::Byte',
'cp1252' => 'Encode::Byte',
'cp1253' => 'Encode::Byte',
'cp1254' => 'Encode::Byte',
'cp1255' => 'Encode::Byte',
'cp1256' => 'Encode::Byte',
'cp1257' => 'Encode::Byte',
'cp1258' => 'Encode::Byte',
'AdobeStandardEncoding' => 'Encode::Byte',
'MacArabic' => 'Encode::Byte',
'MacCentralEurRoman' => 'Encode::Byte',
'MacCroatian' => 'Encode::Byte',
'MacCyrillic' => 'Encode::Byte',
'MacFarsi' => 'Encode::Byte',
'MacGreek' => 'Encode::Byte',
'MacHebrew' => 'Encode::Byte',
'MacIcelandic' => 'Encode::Byte',
'MacRoman' => 'Encode::Byte',
'MacRomanian' => 'Encode::Byte',
'MacRumanian' => 'Encode::Byte',
'MacSami' => 'Encode::Byte',
'MacThai' => 'Encode::Byte',
'MacTurkish' => 'Encode::Byte',
'MacUkrainian' => 'Encode::Byte',
'nextstep' => 'Encode::Byte',
'hp-roman8' => 'Encode::Byte',
#'gsm0338' => 'Encode::Byte',
'gsm0338' => 'Encode::GSM0338',
# Encode::EBCDIC
'cp37' => 'Encode::EBCDIC',
'cp500' => 'Encode::EBCDIC',
'cp875' => 'Encode::EBCDIC',
'cp1026' => 'Encode::EBCDIC',
'cp1047' => 'Encode::EBCDIC',
'posix-bc' => 'Encode::EBCDIC',
# Encode::Symbol
'dingbats' => 'Encode::Symbol',
'symbol' => 'Encode::Symbol',
'AdobeSymbol' => 'Encode::Symbol',
'AdobeZdingbat' => 'Encode::Symbol',
'MacDingbats' => 'Encode::Symbol',
'MacSymbol' => 'Encode::Symbol',
# Encode::Unicode
'UCS-2BE' => 'Encode::Unicode',
'UCS-2LE' => 'Encode::Unicode',
'UTF-16' => 'Encode::Unicode',
'UTF-16BE' => 'Encode::Unicode',
'UTF-16LE' => 'Encode::Unicode',
'UTF-32' => 'Encode::Unicode',
'UTF-32BE' => 'Encode::Unicode',
'UTF-32LE' => 'Encode::Unicode',
'UTF-7' => 'Encode::Unicode::UTF7',
);
unless ( ord("A") == 193 ) {
%ExtModule = (
%ExtModule,
'euc-cn' => 'Encode::CN',
'gb12345-raw' => 'Encode::CN',
'gb2312-raw' => 'Encode::CN',
'hz' => 'Encode::CN',
'iso-ir-165' => 'Encode::CN',
'cp936' => 'Encode::CN',
'MacChineseSimp' => 'Encode::CN',
'7bit-jis' => 'Encode::JP',
'euc-jp' => 'Encode::JP',
'iso-2022-jp' => 'Encode::JP',
'iso-2022-jp-1' => 'Encode::JP',
'jis0201-raw' => 'Encode::JP',
'jis0208-raw' => 'Encode::JP',
'jis0212-raw' => 'Encode::JP',
'cp932' => 'Encode::JP',
'MacJapanese' => 'Encode::JP',
'shiftjis' => 'Encode::JP',
'euc-kr' => 'Encode::KR',
'iso-2022-kr' => 'Encode::KR',
'johab' => 'Encode::KR',
'ksc5601-raw' => 'Encode::KR',
'cp949' => 'Encode::KR',
'MacKorean' => 'Encode::KR',
'big5-eten' => 'Encode::TW',
'big5-hkscs' => 'Encode::TW',
'cp950' => 'Encode::TW',
'MacChineseTrad' => 'Encode::TW',
#'big5plus' => 'Encode::HanExtra',
#'euc-tw' => 'Encode::HanExtra',
#'gb18030' => 'Encode::HanExtra',
'MIME-Header' => 'Encode::MIME::Header',
'MIME-B' => 'Encode::MIME::Header',
'MIME-Q' => 'Encode::MIME::Header',
'MIME-Header-ISO_2022_JP' => 'Encode::MIME::Header::ISO_2022_JP',
);
}
#
# Why not export ? to keep ConfigLocal Happy!
#
while ( my ( $enc, $mod ) = each %ExtModule ) {
$Encode::ExtModule{$enc} = $mod;
}
1;
__END__
=head1 NAME
Encode::Config -- internally used by Encode
=cut
Encode/Makefile_PL.e2x 0000644 00000012060 15033552504 0010472 0 ustar 00 #
# This file is auto-generated by:
# enc2xs version $_Version_
# $_Now_
#
use 5.7.2;
use strict;
use ExtUtils::MakeMaker;
use Config;
# Please edit the following to the taste!
my $name = '$_Name_';
my %tables = (
$_Name__t => [ $_TableFiles_ ],
);
#### DO NOT EDIT BEYOND THIS POINT!
require File::Spec;
my ($enc2xs, $encode_h) = ();
my @path_ext = ('');
@path_ext = split(';', $ENV{PATHEXT}) if $^O eq 'MSWin32';
PATHLOOP:
for my $d (@Config{qw/bin sitebin vendorbin/},
(split /$Config{path_sep}/o, $ENV{PATH})){
for my $f (qw/enc2xs enc2xs5.7.3/){
my $path = File::Spec->catfile($d, $f);
for my $ext (@path_ext) {
my $bin = "$path$ext";
-r "$bin" and $enc2xs = $bin and last PATHLOOP;
}
}
}
$enc2xs or die "enc2xs not found!";
print "enc2xs is $enc2xs\n";
my %encode_h = ();
for my $d (@INC){
my $dir = File::Spec->catfile($d, "Encode");
my $file = File::Spec->catfile($dir, "encode.h");
-f $file and $encode_h{$dir} = -M $file;
}
%encode_h or die "encode.h not found!";
# find the latest one
($encode_h) = sort {$encode_h{$b} <=> $encode_h{$a}} keys %encode_h;
print "encode.h is at $encode_h\n";
WriteMakefile(
INC => "-I$encode_h",
#### END_OF_HEADER -- DO NOT EDIT THIS LINE BY HAND! ####
NAME => 'Encode::'.$name,
VERSION_FROM => "$name.pm",
OBJECT => '$(O_FILES)',
'dist' => {
COMPRESS => 'gzip -9f',
SUFFIX => 'gz',
DIST_DEFAULT => 'all tardist',
},
MAN3PODS => {},
PREREQ_PM => {
'Encode' => "1.41",
},
# OS 390 winges about line numbers > 64K ???
XSOPT => '-nolinenumbers',
);
package MY;
sub post_initialize
{
my ($self) = @_;
my %o;
my $x = $self->{'OBJ_EXT'};
# Add the table O_FILES
foreach my $e (keys %tables)
{
$o{$e.$x} = 1;
}
$o{"$name$x"} = 1;
$self->{'O_FILES'} = [sort keys %o];
my @files = ("$name.xs");
$self->{'C'} = ["$name.c"];
# The next two lines to make MacPerl Happy -- dankogai via pudge
$self->{SOURCE} .= " $name.c"
if $^O eq 'MacOS' && $self->{SOURCE} !~ /\b$name\.c\b/;
# $self->{'H'} = [$self->catfile($self->updir,'encode.h')];
my %xs;
foreach my $table (sort keys %tables) {
push (@{$self->{'C'}},"$table.c");
# Do NOT add $table.h etc. to H_FILES unless we own up as to how they
# get built.
foreach my $ext (qw($(OBJ_EXT) .c .h .exh .fnm)) {
push (@files,$table.$ext);
}
}
$self->{'XS'} = { "$name.xs" => "$name.c" };
$self->{'clean'}{'FILES'} .= join(' ',@files);
open(XS,">$name.xs") || die "Cannot open $name.xs:$!";
print XS <<'END';
#include <EXTERN.h>
#include <perl.h>
#include <XSUB.h>
#include "encode.h"
END
foreach my $table (sort keys %tables) {
print XS qq[#include "${table}.h"\n];
}
print XS <<"END";
static void
Encode_XSEncoding(pTHX_ encode_t *enc)
{
dSP;
HV *stash = gv_stashpv("Encode::XS", TRUE);
SV *iv = newSViv(PTR2IV(enc));
SV *sv = sv_bless(newRV_noinc(iv),stash);
int i = 0;
/* with the SvLEN() == 0 hack, PVX won't be freed. We cast away name's
constness, in the hope that perl won't mess with it. */
assert(SvTYPE(iv) >= SVt_PV); assert(SvLEN(iv) == 0);
SvFLAGS(iv) |= SVp_POK;
SvPVX(iv) = (char*) enc->name[0];
PUSHMARK(sp);
XPUSHs(sv);
while (enc->name[i])
{
const char *name = enc->name[i++];
XPUSHs(sv_2mortal(newSVpvn(name,strlen(name))));
}
PUTBACK;
call_pv("Encode::define_encoding",G_DISCARD);
SvREFCNT_dec(sv);
}
MODULE = Encode::$name PACKAGE = Encode::$name
PROTOTYPES: DISABLE
BOOT:
{
END
foreach my $table (sort keys %tables) {
print XS qq[#include "${table}.exh"\n];
}
print XS "}\n";
close(XS);
return "# Built $name.xs\n\n";
}
sub postamble
{
my $self = shift;
my $dir = "."; # $self->catdir('Encode');
my $str = "# $name\$(OBJ_EXT) depends on .h and .exh files not .c files - but all written by enc2xs\n";
$str .= "$name.c : $name.xs ";
foreach my $table (sort keys %tables)
{
$str .= " $table.c";
}
$str .= "\n\n";
$str .= "$name\$(OBJ_EXT) : $name.c\n\n";
foreach my $table (sort keys %tables)
{
my $numlines = 1;
my $lengthsofar = length($str);
my $continuator = '';
$str .= "$table.c : Makefile.PL";
foreach my $file (@{$tables{$table}})
{
$str .= $continuator.' '.$self->catfile($dir,$file);
if ( length($str)-$lengthsofar > 128*$numlines )
{
$continuator .= " \\\n\t";
$numlines++;
} else {
$continuator = '';
}
}
my $plib = $self->{PERL_CORE} ? '"-I$(PERL_LIB)"' : '';
my $ucopts = '-"Q"';
$str .=
qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n};
open (FILELIST, ">$table.fnm")
|| die "Could not open $table.fnm: $!";
foreach my $file (@{$tables{$table}})
{
print FILELIST $self->catfile($dir,$file) . "\n";
}
close(FILELIST);
}
return $str;
}
Encode/Byte.pm 0000644 00000004576 15033552504 0007220 0 ustar 00 package Encode::Byte;
use strict;
use warnings;
use Encode;
our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
1;
__END__
=head1 NAME
Encode::Byte - Single Byte Encodings
=head1 SYNOPSIS
use Encode qw/encode decode/;
$greek = encode("iso-8859-7", $utf8); # loads Encode::Byte implicitly
$utf8 = decode("iso-8859-7", $greek); # ditto
=head1 ABSTRACT
This module implements various single byte encodings. For most cases it uses
\x80-\xff (upper half) to map non-ASCII characters. Encodings
supported are as follows.
Canonical Alias Description
--------------------------------------------------------------------
# ISO 8859 series
(iso-8859-1 is in built-in)
iso-8859-2 latin2 [ISO]
iso-8859-3 latin3 [ISO]
iso-8859-4 latin4 [ISO]
iso-8859-5 [ISO]
iso-8859-6 [ISO]
iso-8859-7 [ISO]
iso-8859-8 [ISO]
iso-8859-9 latin5 [ISO]
iso-8859-10 latin6 [ISO]
iso-8859-11
(iso-8859-12 is nonexistent)
iso-8859-13 latin7 [ISO]
iso-8859-14 latin8 [ISO]
iso-8859-15 latin9 [ISO]
iso-8859-16 latin10 [ISO]
# Cyrillic
koi8-f
koi8-r cp878 [RFC1489]
koi8-u [RFC2319]
# Vietnamese
viscii
# all cp* are also available as ibm-*, ms-*, and windows-*
# also see L<http://msdn.microsoft.com/en-us/library/aa752010%28VS.85%29.aspx>
cp424
cp437
cp737
cp775
cp850
cp852
cp855
cp856
cp857
cp860
cp861
cp862
cp863
cp864
cp865
cp866
cp869
cp874
cp1006
cp1250 WinLatin2
cp1251 WinCyrillic
cp1252 WinLatin1
cp1253 WinGreek
cp1254 WinTurkish
cp1255 WinHebrew
cp1256 WinArabic
cp1257 WinBaltic
cp1258 WinVietnamese
# Macintosh
# Also see L<http://developer.apple.com/technotes/tn/tn1150.html>
MacArabic
MacCentralEurRoman
MacCroatian
MacCyrillic
MacFarsi
MacGreek
MacHebrew
MacIcelandic
MacRoman
MacRomanian
MacRumanian
MacSami
MacThai
MacTurkish
MacUkrainian
# More vendor encodings
AdobeStandardEncoding
nextstep
hp-roman8
=head1 DESCRIPTION
To find how to use this module in detail, see L<Encode>.
=head1 SEE ALSO
L<Encode>
=cut
Encode/EBCDIC.pm 0000644 00000001541 15033552504 0007213 0 ustar 00 package Encode::EBCDIC;
use strict;
use warnings;
use Encode;
our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
1;
__END__
=head1 NAME
Encode::EBCDIC - EBCDIC Encodings
=head1 SYNOPSIS
use Encode qw/encode decode/;
$posix_bc = encode("posix-bc", $utf8); # loads Encode::EBCDIC implicitly
$utf8 = decode("", $posix_bc); # ditto
=head1 ABSTRACT
This module implements various EBCDIC-Based encodings. Encodings
supported are as follows.
Canonical Alias Description
--------------------------------------------------------------------
cp37
cp500
cp875
cp1026
cp1047
posix-bc
=head1 DESCRIPTION
To find how to use this module in detail, see L<Encode>.
=head1 SEE ALSO
L<Encode>, L<perlebcdic>
=cut
Encode/KR.pm 0000644 00000003650 15033552504 0006621 0 ustar 00 package Encode::KR;
BEGIN {
if ( ord("A") == 193 ) {
die "Encode::KR not supported on EBCDIC\n";
}
}
use strict;
use warnings;
use Encode;
our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
use Encode::KR::2022_KR;
1;
__END__
=head1 NAME
Encode::KR - Korean Encodings
=head1 SYNOPSIS
use Encode qw/encode decode/;
$euc_kr = encode("euc-kr", $utf8); # loads Encode::KR implicitly
$utf8 = decode("euc-kr", $euc_kr); # ditto
=head1 DESCRIPTION
This module implements Korean charset encodings. Encodings supported
are as follows.
Canonical Alias Description
--------------------------------------------------------------------
euc-kr /\beuc.*kr$/i EUC (Extended Unix Character)
/\bkr.*euc$/i
ksc5601-raw Korean standard code set (as is)
cp949 /(?:x-)?uhc$/i
/(?:x-)?windows-949$/i
/\bks_c_5601-1987$/i
Code Page 949 (EUC-KR + 8,822
(additional Hangul syllables)
MacKorean EUC-KR + Apple Vendor Mappings
johab JOHAB A supplementary encoding defined in
Annex 3 of KS X 1001:1998
iso-2022-kr iso-2022-kr [RFC1557]
--------------------------------------------------------------------
To find how to use this module in detail, see L<Encode>.
=head1 BUGS
When you see C<charset=ks_c_5601-1987> on mails and web pages, they really
mean "cp949" encodings. To fix that, the following aliases are set;
qr/(?:x-)?uhc$/i => '"cp949"'
qr/(?:x-)?windows-949$/i => '"cp949"'
qr/ks_c_5601-1987$/i => '"cp949"'
The ASCII region (0x00-0x7f) is preserved for all encodings, even
though this conflicts with mappings by the Unicode Consortium.
=head1 SEE ALSO
L<Encode>
=cut
Encode/Unicode.pm 0000644 00000021340 15033552504 0007667 0 ustar 00 package Encode::Unicode;
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 2.17 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
#
# Object Generator 8 transcoders all at once!
#
use Encode ();
our %BOM_Unknown = map { $_ => 1 } qw(UTF-16 UTF-32);
for my $name (
qw(UTF-16 UTF-16BE UTF-16LE
UTF-32 UTF-32BE UTF-32LE
UCS-2BE UCS-2LE)
)
{
my ( $size, $endian, $ucs2, $mask );
$name =~ /^(\w+)-(\d+)(\w*)$/o;
if ( $ucs2 = ( $1 eq 'UCS' ) ) {
$size = 2;
}
else {
$size = $2 / 8;
}
$endian = ( $3 eq 'BE' ) ? 'n' : ( $3 eq 'LE' ) ? 'v' : '';
$size == 4 and $endian = uc($endian);
my $obj = bless {
Name => $name,
size => $size,
endian => $endian,
ucs2 => $ucs2,
} => __PACKAGE__;
Encode::define_encoding($obj, $name);
}
use parent qw(Encode::Encoding);
sub renew {
my $self = shift;
$BOM_Unknown{ $self->name } or return $self;
my $clone = bless {%$self} => ref($self);
$clone->{renewed}++; # so the caller knows it is renewed.
return $clone;
}
1;
__END__
=head1 NAME
Encode::Unicode -- Various Unicode Transformation Formats
=cut
=head1 SYNOPSIS
use Encode qw/encode decode/;
$ucs2 = encode("UCS-2BE", $utf8);
$utf8 = decode("UCS-2BE", $ucs2);
=head1 ABSTRACT
This module implements all Character Encoding Schemes of Unicode that
are officially documented by Unicode Consortium (except, of course,
for UTF-8, which is a native format in perl).
=over 4
=item L<http://www.unicode.org/glossary/> says:
I<Character Encoding Scheme> A character encoding form plus byte
serialization. There are Seven character encoding schemes in Unicode:
UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32 (UCS-4), UTF-32BE (UCS-4BE) and
UTF-32LE (UCS-4LE), and UTF-7.
Since UTF-7 is a 7-bit (re)encoded version of UTF-16BE, It is not part of
Unicode's Character Encoding Scheme. It is separately implemented in
Encode::Unicode::UTF7. For details see L<Encode::Unicode::UTF7>.
=item Quick Reference
Decodes from ord(N) Encodes chr(N) to...
octet/char BOM S.P d800-dfff ord > 0xffff \x{1abcd} ==
---------------+-----------------+------------------------------
UCS-2BE 2 N N is bogus Not Available
UCS-2LE 2 N N bogus Not Available
UTF-16 2/4 Y Y is S.P S.P BE/LE
UTF-16BE 2/4 N Y S.P S.P 0xd82a,0xdfcd
UTF-16LE 2/4 N Y S.P S.P 0x2ad8,0xcddf
UTF-32 4 Y - is bogus As is BE/LE
UTF-32BE 4 N - bogus As is 0x0001abcd
UTF-32LE 4 N - bogus As is 0xcdab0100
UTF-8 1-4 - - bogus >= 4 octets \xf0\x9a\af\8d
---------------+-----------------+------------------------------
=back
=head1 Size, Endianness, and BOM
You can categorize these CES by 3 criteria: size of each character,
endianness, and Byte Order Mark.
=head2 by size
UCS-2 is a fixed-length encoding with each character taking 16 bits.
It B<does not> support I<surrogate pairs>. When a surrogate pair
is encountered during decode(), its place is filled with \x{FFFD}
if I<CHECK> is 0, or the routine croaks if I<CHECK> is 1. When a
character whose ord value is larger than 0xFFFF is encountered,
its place is filled with \x{FFFD} if I<CHECK> is 0, or the routine
croaks if I<CHECK> is 1.
UTF-16 is almost the same as UCS-2 but it supports I<surrogate pairs>.
When it encounters a high surrogate (0xD800-0xDBFF), it fetches the
following low surrogate (0xDC00-0xDFFF) and C<desurrogate>s them to
form a character. Bogus surrogates result in death. When \x{10000}
or above is encountered during encode(), it C<ensurrogate>s them and
pushes the surrogate pair to the output stream.
UTF-32 (UCS-4) is a fixed-length encoding with each character taking 32 bits.
Since it is 32-bit, there is no need for I<surrogate pairs>.
=head2 by endianness
The first (and now failed) goal of Unicode was to map all character
repertoires into a fixed-length integer so that programmers are happy.
Since each character is either a I<short> or I<long> in C, you have to
pay attention to the endianness of each platform when you pass data
to one another.
Anything marked as BE is Big Endian (or network byte order) and LE is
Little Endian (aka VAX byte order). For anything not marked either
BE or LE, a character called Byte Order Mark (BOM) indicating the
endianness is prepended to the string.
CAVEAT: Though BOM in utf8 (\xEF\xBB\xBF) is valid, it is meaningless
and as of this writing Encode suite just leave it as is (\x{FeFF}).
=over 4
=item BOM as integer when fetched in network byte order
16 32 bits/char
-------------------------
BE 0xFeFF 0x0000FeFF
LE 0xFFFe 0xFFFe0000
-------------------------
=back
This modules handles the BOM as follows.
=over 4
=item *
When BE or LE is explicitly stated as the name of encoding, BOM is
simply treated as a normal character (ZERO WIDTH NO-BREAK SPACE).
=item *
When BE or LE is omitted during decode(), it checks if BOM is at the
beginning of the string; if one is found, the endianness is set to
what the BOM says.
=item *
Default Byte Order
When no BOM is found, Encode 2.76 and blow croaked. Since Encode
2.77, it falls back to BE accordingly to RFC2781 and the Unicode
Standard version 8.0
=item *
When BE or LE is omitted during encode(), it returns a BE-encoded
string with BOM prepended. So when you want to encode a whole text
file, make sure you encode() the whole text at once, not line by line
or each line, not file, will have a BOM prepended.
=item *
C<UCS-2> is an exception. Unlike others, this is an alias of UCS-2BE.
UCS-2 is already registered by IANA and others that way.
=back
=head1 Surrogate Pairs
To say the least, surrogate pairs were the biggest mistake of the
Unicode Consortium. But according to the late Douglas Adams in I<The
Hitchhiker's Guide to the Galaxy> Trilogy, C<In the beginning the
Universe was created. This has made a lot of people very angry and
been widely regarded as a bad move>. Their mistake was not of this
magnitude so let's forgive them.
(I don't dare make any comparison with Unicode Consortium and the
Vogons here ;) Or, comparing Encode to Babel Fish is completely
appropriate -- if you can only stick this into your ear :)
Surrogate pairs were born when the Unicode Consortium finally
admitted that 16 bits were not big enough to hold all the world's
character repertoires. But they already made UCS-2 16-bit. What
do we do?
Back then, the range 0xD800-0xDFFF was not allocated. Let's split
that range in half and use the first half to represent the C<upper
half of a character> and the second half to represent the C<lower
half of a character>. That way, you can represent 1024 * 1024 =
1048576 more characters. Now we can store character ranges up to
\x{10ffff} even with 16-bit encodings. This pair of half-character is
now called a I<surrogate pair> and UTF-16 is the name of the encoding
that embraces them.
Here is a formula to ensurrogate a Unicode character \x{10000} and
above;
$hi = ($uni - 0x10000) / 0x400 + 0xD800;
$lo = ($uni - 0x10000) % 0x400 + 0xDC00;
And to desurrogate;
$uni = 0x10000 + ($hi - 0xD800) * 0x400 + ($lo - 0xDC00);
Note this move has made \x{D800}-\x{DFFF} into a forbidden zone but
perl does not prohibit the use of characters within this range. To perl,
every one of \x{0000_0000} up to \x{ffff_ffff} (*) is I<a character>.
(*) or \x{ffff_ffff_ffff_ffff} if your perl is compiled with 64-bit
integer support!
=head1 Error Checking
Unlike most encodings which accept various ways to handle errors,
Unicode encodings simply croaks.
% perl -MEncode -e'$_ = "\xfe\xff\xd8\xd9\xda\xdb\0\n"' \
-e'Encode::from_to($_, "utf16","shift_jis", 0); print'
UTF-16:Malformed LO surrogate d8d9 at /path/to/Encode.pm line 184.
% perl -MEncode -e'$a = "BOM missing"' \
-e' Encode::from_to($a, "utf16", "shift_jis", 0); print'
UTF-16:Unrecognised BOM 424f at /path/to/Encode.pm line 184.
Unlike other encodings where mappings are not one-to-one against
Unicode, UTFs are supposed to map 100% against one another. So Encode
is more strict on UTFs.
Consider that "division by zero" of Encode :)
=head1 SEE ALSO
L<Encode>, L<Encode::Unicode::UTF7>, L<http://www.unicode.org/glossary/>,
L<http://www.unicode.org/unicode/faq/utf_bom.html>,
RFC 2781 L<http://www.ietf.org/rfc/rfc2781.txt>,
The whole Unicode standard L<http://www.unicode.org/unicode/uni2book/u2.html>
Ch. 15, pp. 403 of C<Programming Perl (3rd Edition)>
by Larry Wall, Tom Christiansen, Jon Orwant;
O'Reilly & Associates; ISBN 0-596-00027-8
=cut
Encode/GSM0338.pm 0000644 00000027147 15033552504 0007260 0 ustar 00 #
# $Id: GSM0338.pm,v 2.7 2017/06/10 17:23:50 dankogai Exp $
#
package Encode::GSM0338;
use strict;
use warnings;
use Carp;
use vars qw($VERSION);
$VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use Encode qw(:fallbacks);
use parent qw(Encode::Encoding);
__PACKAGE__->Define('gsm0338');
sub needs_lines { 1 }
sub perlio_ok { 0 }
use utf8;
our %UNI2GSM = (
"\x{0040}" => "\x00", # COMMERCIAL AT
"\x{000A}" => "\x0A", # LINE FEED
"\x{000C}" => "\x1B\x0A", # FORM FEED
"\x{000D}" => "\x0D", # CARRIAGE RETURN
"\x{0020}" => "\x20", # SPACE
"\x{0021}" => "\x21", # EXCLAMATION MARK
"\x{0022}" => "\x22", # QUOTATION MARK
"\x{0023}" => "\x23", # NUMBER SIGN
"\x{0024}" => "\x02", # DOLLAR SIGN
"\x{0025}" => "\x25", # PERCENT SIGN
"\x{0026}" => "\x26", # AMPERSAND
"\x{0027}" => "\x27", # APOSTROPHE
"\x{0028}" => "\x28", # LEFT PARENTHESIS
"\x{0029}" => "\x29", # RIGHT PARENTHESIS
"\x{002A}" => "\x2A", # ASTERISK
"\x{002B}" => "\x2B", # PLUS SIGN
"\x{002C}" => "\x2C", # COMMA
"\x{002D}" => "\x2D", # HYPHEN-MINUS
"\x{002E}" => "\x2E", # FULL STOP
"\x{002F}" => "\x2F", # SOLIDUS
"\x{0030}" => "\x30", # DIGIT ZERO
"\x{0031}" => "\x31", # DIGIT ONE
"\x{0032}" => "\x32", # DIGIT TWO
"\x{0033}" => "\x33", # DIGIT THREE
"\x{0034}" => "\x34", # DIGIT FOUR
"\x{0035}" => "\x35", # DIGIT FIVE
"\x{0036}" => "\x36", # DIGIT SIX
"\x{0037}" => "\x37", # DIGIT SEVEN
"\x{0038}" => "\x38", # DIGIT EIGHT
"\x{0039}" => "\x39", # DIGIT NINE
"\x{003A}" => "\x3A", # COLON
"\x{003B}" => "\x3B", # SEMICOLON
"\x{003C}" => "\x3C", # LESS-THAN SIGN
"\x{003D}" => "\x3D", # EQUALS SIGN
"\x{003E}" => "\x3E", # GREATER-THAN SIGN
"\x{003F}" => "\x3F", # QUESTION MARK
"\x{0041}" => "\x41", # LATIN CAPITAL LETTER A
"\x{0042}" => "\x42", # LATIN CAPITAL LETTER B
"\x{0043}" => "\x43", # LATIN CAPITAL LETTER C
"\x{0044}" => "\x44", # LATIN CAPITAL LETTER D
"\x{0045}" => "\x45", # LATIN CAPITAL LETTER E
"\x{0046}" => "\x46", # LATIN CAPITAL LETTER F
"\x{0047}" => "\x47", # LATIN CAPITAL LETTER G
"\x{0048}" => "\x48", # LATIN CAPITAL LETTER H
"\x{0049}" => "\x49", # LATIN CAPITAL LETTER I
"\x{004A}" => "\x4A", # LATIN CAPITAL LETTER J
"\x{004B}" => "\x4B", # LATIN CAPITAL LETTER K
"\x{004C}" => "\x4C", # LATIN CAPITAL LETTER L
"\x{004D}" => "\x4D", # LATIN CAPITAL LETTER M
"\x{004E}" => "\x4E", # LATIN CAPITAL LETTER N
"\x{004F}" => "\x4F", # LATIN CAPITAL LETTER O
"\x{0050}" => "\x50", # LATIN CAPITAL LETTER P
"\x{0051}" => "\x51", # LATIN CAPITAL LETTER Q
"\x{0052}" => "\x52", # LATIN CAPITAL LETTER R
"\x{0053}" => "\x53", # LATIN CAPITAL LETTER S
"\x{0054}" => "\x54", # LATIN CAPITAL LETTER T
"\x{0055}" => "\x55", # LATIN CAPITAL LETTER U
"\x{0056}" => "\x56", # LATIN CAPITAL LETTER V
"\x{0057}" => "\x57", # LATIN CAPITAL LETTER W
"\x{0058}" => "\x58", # LATIN CAPITAL LETTER X
"\x{0059}" => "\x59", # LATIN CAPITAL LETTER Y
"\x{005A}" => "\x5A", # LATIN CAPITAL LETTER Z
"\x{005F}" => "\x11", # LOW LINE
"\x{0061}" => "\x61", # LATIN SMALL LETTER A
"\x{0062}" => "\x62", # LATIN SMALL LETTER B
"\x{0063}" => "\x63", # LATIN SMALL LETTER C
"\x{0064}" => "\x64", # LATIN SMALL LETTER D
"\x{0065}" => "\x65", # LATIN SMALL LETTER E
"\x{0066}" => "\x66", # LATIN SMALL LETTER F
"\x{0067}" => "\x67", # LATIN SMALL LETTER G
"\x{0068}" => "\x68", # LATIN SMALL LETTER H
"\x{0069}" => "\x69", # LATIN SMALL LETTER I
"\x{006A}" => "\x6A", # LATIN SMALL LETTER J
"\x{006B}" => "\x6B", # LATIN SMALL LETTER K
"\x{006C}" => "\x6C", # LATIN SMALL LETTER L
"\x{006D}" => "\x6D", # LATIN SMALL LETTER M
"\x{006E}" => "\x6E", # LATIN SMALL LETTER N
"\x{006F}" => "\x6F", # LATIN SMALL LETTER O
"\x{0070}" => "\x70", # LATIN SMALL LETTER P
"\x{0071}" => "\x71", # LATIN SMALL LETTER Q
"\x{0072}" => "\x72", # LATIN SMALL LETTER R
"\x{0073}" => "\x73", # LATIN SMALL LETTER S
"\x{0074}" => "\x74", # LATIN SMALL LETTER T
"\x{0075}" => "\x75", # LATIN SMALL LETTER U
"\x{0076}" => "\x76", # LATIN SMALL LETTER V
"\x{0077}" => "\x77", # LATIN SMALL LETTER W
"\x{0078}" => "\x78", # LATIN SMALL LETTER X
"\x{0079}" => "\x79", # LATIN SMALL LETTER Y
"\x{007A}" => "\x7A", # LATIN SMALL LETTER Z
"\x{000C}" => "\x1B\x0A", # FORM FEED
"\x{005B}" => "\x1B\x3C", # LEFT SQUARE BRACKET
"\x{005C}" => "\x1B\x2F", # REVERSE SOLIDUS
"\x{005D}" => "\x1B\x3E", # RIGHT SQUARE BRACKET
"\x{005E}" => "\x1B\x14", # CIRCUMFLEX ACCENT
"\x{007B}" => "\x1B\x28", # LEFT CURLY BRACKET
"\x{007C}" => "\x1B\x40", # VERTICAL LINE
"\x{007D}" => "\x1B\x29", # RIGHT CURLY BRACKET
"\x{007E}" => "\x1B\x3D", # TILDE
"\x{00A0}" => "\x1B", # NO-BREAK SPACE
"\x{00A1}" => "\x40", # INVERTED EXCLAMATION MARK
"\x{00A3}" => "\x01", # POUND SIGN
"\x{00A4}" => "\x24", # CURRENCY SIGN
"\x{00A5}" => "\x03", # YEN SIGN
"\x{00A7}" => "\x5F", # SECTION SIGN
"\x{00BF}" => "\x60", # INVERTED QUESTION MARK
"\x{00C4}" => "\x5B", # LATIN CAPITAL LETTER A WITH DIAERESIS
"\x{00C5}" => "\x0E", # LATIN CAPITAL LETTER A WITH RING ABOVE
"\x{00C6}" => "\x1C", # LATIN CAPITAL LETTER AE
"\x{00C9}" => "\x1F", # LATIN CAPITAL LETTER E WITH ACUTE
"\x{00D1}" => "\x5D", # LATIN CAPITAL LETTER N WITH TILDE
"\x{00D6}" => "\x5C", # LATIN CAPITAL LETTER O WITH DIAERESIS
"\x{00D8}" => "\x0B", # LATIN CAPITAL LETTER O WITH STROKE
"\x{00DC}" => "\x5E", # LATIN CAPITAL LETTER U WITH DIAERESIS
"\x{00DF}" => "\x1E", # LATIN SMALL LETTER SHARP S
"\x{00E0}" => "\x7F", # LATIN SMALL LETTER A WITH GRAVE
"\x{00E4}" => "\x7B", # LATIN SMALL LETTER A WITH DIAERESIS
"\x{00E5}" => "\x0F", # LATIN SMALL LETTER A WITH RING ABOVE
"\x{00E6}" => "\x1D", # LATIN SMALL LETTER AE
#"\x{00E7}" => "\x09", # LATIN SMALL LETTER C WITH CEDILLA
"\x{00C7}" => "\x09", # LATIN CAPITAL LETTER C WITH CEDILLA
"\x{00E8}" => "\x04", # LATIN SMALL LETTER E WITH GRAVE
"\x{00E9}" => "\x05", # LATIN SMALL LETTER E WITH ACUTE
"\x{00EC}" => "\x07", # LATIN SMALL LETTER I WITH GRAVE
"\x{00F1}" => "\x7D", # LATIN SMALL LETTER N WITH TILDE
"\x{00F2}" => "\x08", # LATIN SMALL LETTER O WITH GRAVE
"\x{00F6}" => "\x7C", # LATIN SMALL LETTER O WITH DIAERESIS
"\x{00F8}" => "\x0C", # LATIN SMALL LETTER O WITH STROKE
"\x{00F9}" => "\x06", # LATIN SMALL LETTER U WITH GRAVE
"\x{00FC}" => "\x7E", # LATIN SMALL LETTER U WITH DIAERESIS
"\x{0393}" => "\x13", # GREEK CAPITAL LETTER GAMMA
"\x{0394}" => "\x10", # GREEK CAPITAL LETTER DELTA
"\x{0398}" => "\x19", # GREEK CAPITAL LETTER THETA
"\x{039B}" => "\x14", # GREEK CAPITAL LETTER LAMDA
"\x{039E}" => "\x1A", # GREEK CAPITAL LETTER XI
"\x{03A0}" => "\x16", # GREEK CAPITAL LETTER PI
"\x{03A3}" => "\x18", # GREEK CAPITAL LETTER SIGMA
"\x{03A6}" => "\x12", # GREEK CAPITAL LETTER PHI
"\x{03A8}" => "\x17", # GREEK CAPITAL LETTER PSI
"\x{03A9}" => "\x15", # GREEK CAPITAL LETTER OMEGA
"\x{20AC}" => "\x1B\x65", # EURO SIGN
);
our %GSM2UNI = reverse %UNI2GSM;
our $ESC = "\x1b";
our $ATMARK = "\x40";
our $FBCHAR = "\x3F";
our $NBSP = "\x{00A0}";
#define ERR_DECODE_NOMAP "%s \"\\x%02" UVXf "\" does not map to Unicode"
sub decode ($$;$) {
my ( $obj, $bytes, $chk ) = @_;
return undef unless defined $bytes;
my $str = substr($bytes, 0, 0); # to propagate taintedness;
while ( length $bytes ) {
my $c = substr( $bytes, 0, 1, '' );
my $u;
if ( $c eq "\x00" ) {
my $c2 = substr( $bytes, 0, 1, '' );
$u =
!length $c2 ? $ATMARK
: $c2 eq "\x00" ? "\x{0000}"
: exists $GSM2UNI{$c2} ? $ATMARK . $GSM2UNI{$c2}
: $chk
? croak sprintf( "\\x%02X\\x%02X does not map to Unicode",
ord($c), ord($c2) )
: $ATMARK . $FBCHAR;
}
elsif ( $c eq $ESC ) {
my $c2 = substr( $bytes, 0, 1, '' );
$u =
exists $GSM2UNI{ $c . $c2 } ? $GSM2UNI{ $c . $c2 }
: exists $GSM2UNI{$c2} ? $NBSP . $GSM2UNI{$c2}
: $chk
? croak sprintf( "\\x%02X\\x%02X does not map to Unicode",
ord($c), ord($c2) )
: $NBSP . $FBCHAR;
}
else {
$u =
exists $GSM2UNI{$c}
? $GSM2UNI{$c}
: $chk ? ref $chk eq 'CODE'
? $chk->( ord $c )
: croak sprintf( "\\x%02X does not map to Unicode", ord($c) )
: $FBCHAR;
}
$str .= $u;
}
$_[1] = $bytes if $chk;
return $str;
}
#define ERR_ENCODE_NOMAP "\"\\x{%04" UVxf "}\" does not map to %s"
sub encode($$;$) {
my ( $obj, $str, $chk ) = @_;
return undef unless defined $str;
my $bytes = substr($str, 0, 0); # to propagate taintedness
while ( length $str ) {
my $u = substr( $str, 0, 1, '' );
my $c;
$bytes .=
exists $UNI2GSM{$u}
? $UNI2GSM{$u}
: $chk ? ref $chk eq 'CODE'
? $chk->( ord($u) )
: croak sprintf( "\\x{%04x} does not map to %s",
ord($u), $obj->name )
: $FBCHAR;
}
$_[1] = $str if $chk;
return $bytes;
}
1;
__END__
=head1 NAME
Encode::GSM0338 -- ESTI GSM 03.38 Encoding
=head1 SYNOPSIS
use Encode qw/encode decode/;
$gsm0338 = encode("gsm0338", $utf8); # loads Encode::GSM0338 implicitly
$utf8 = decode("gsm0338", $gsm0338); # ditto
=head1 DESCRIPTION
GSM0338 is for GSM handsets. Though it shares alphanumerals with ASCII,
control character ranges and other parts are mapped very differently,
mainly to store Greek characters. There are also escape sequences
(starting with 0x1B) to cover e.g. the Euro sign.
This was once handled by L<Encode::Bytes> but because of all those
unusual specifications, Encode 2.20 has relocated the support to
this module.
=head1 NOTES
Unlike most other encodings, the following always croaks on error
for any $chk that evaluates to true.
$gsm0338 = encode("gsm0338", $utf8 $chk);
$utf8 = decode("gsm0338", $gsm0338, $chk);
So if you want to check the validity of the encoding, surround the
expression with C<eval {}> block as follows;
eval {
$utf8 = decode("gsm0338", $gsm0338, $chk);
} or do {
# handle exception here
};
=head1 BUGS
ESTI GSM 03.38 Encoding itself.
Mapping \x00 to '@' causes too much pain everywhere.
Its use of \x1b (escape) is also very questionable.
Because of those two, the code paging approach used use in ucm-based
Encoding SOMETIMES fails so this module was written.
=head1 SEE ALSO
L<Encode>
=cut
Encode/CN.pm 0000644 00000003772 15033552504 0006612 0 ustar 00 package Encode::CN;
BEGIN {
if ( ord("A") == 193 ) {
die "Encode::CN not supported on EBCDIC\n";
}
}
use strict;
use warnings;
use Encode;
our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
# Relocated from Encode.pm
use Encode::CN::HZ;
# use Encode::CN::2022_CN;
1;
__END__
=head1 NAME
Encode::CN - China-based Chinese Encodings
=head1 SYNOPSIS
use Encode qw/encode decode/;
$euc_cn = encode("euc-cn", $utf8); # loads Encode::CN implicitly
$utf8 = decode("euc-cn", $euc_cn); # ditto
=head1 DESCRIPTION
This module implements China-based Chinese charset encodings.
Encodings supported are as follows.
Canonical Alias Description
--------------------------------------------------------------------
euc-cn /\beuc.*cn$/i EUC (Extended Unix Character)
/\bcn.*euc$/i
/\bGB[-_ ]?2312(?:\D.*$|$)/i (see below)
gb2312-raw The raw (low-bit) GB2312 character map
gb12345-raw Traditional chinese counterpart to
GB2312 (raw)
iso-ir-165 GB2312 + GB6345 + GB8565 + additions
MacChineseSimp GB2312 + Apple Additions
cp936 Code Page 936, also known as GBK
(Extended GuoBiao)
hz 7-bit escaped GB2312 encoding
--------------------------------------------------------------------
To find how to use this module in detail, see L<Encode>.
=head1 NOTES
Due to size concerns, C<GB 18030> (an extension to C<GBK>) is distributed
separately on CPAN, under the name L<Encode::HanExtra>. That module
also contains extra Taiwan-based encodings.
=head1 BUGS
When you see C<charset=gb2312> on mails and web pages, they really
mean C<euc-cn> encodings. To fix that, C<gb2312> is aliased to C<euc-cn>.
Use C<gb2312-raw> when you really mean it.
The ASCII region (0x00-0x7f) is preserved for all encodings, even though
this conflicts with mappings by the Unicode Consortium.
=head1 SEE ALSO
L<Encode>
=cut
Encode/JP.pm 0000644 00000005172 15033552504 0006617 0 ustar 00 package Encode::JP;
BEGIN {
if ( ord("A") == 193 ) {
die "Encode::JP not supported on EBCDIC\n";
}
}
use strict;
use warnings;
use Encode;
our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
use Encode::JP::JIS7;
1;
__END__
=head1 NAME
Encode::JP - Japanese Encodings
=head1 SYNOPSIS
use Encode qw/encode decode/;
$euc_jp = encode("euc-jp", $utf8); # loads Encode::JP implicitly
$utf8 = decode("euc-jp", $euc_jp); # ditto
=head1 ABSTRACT
This module implements Japanese charset encodings. Encodings
supported are as follows.
Canonical Alias Description
--------------------------------------------------------------------
euc-jp /\beuc.*jp$/i EUC (Extended Unix Character)
/\bjp.*euc/i
/\bujis$/i
shiftjis /\bshift.*jis$/i Shift JIS (aka MS Kanji)
/\bsjis$/i
7bit-jis /\bjis$/i 7bit JIS
iso-2022-jp ISO-2022-JP [RFC1468]
= 7bit JIS with all Halfwidth Kana
converted to Fullwidth
iso-2022-jp-1 ISO-2022-JP-1 [RFC2237]
= ISO-2022-JP with JIS X 0212-1990
support. See below
MacJapanese Shift JIS + Apple vendor mappings
cp932 /\bwindows-31j$/i Code Page 932
= Shift JIS + MS/IBM vendor mappings
jis0201-raw JIS0201, raw format
jis0208-raw JIS0201, raw format
jis0212-raw JIS0201, raw format
--------------------------------------------------------------------
=head1 DESCRIPTION
To find out how to use this module in detail, see L<Encode>.
=head1 Note on ISO-2022-JP(-1)?
ISO-2022-JP-1 (RFC2237) is a superset of ISO-2022-JP (RFC1468) which
adds support for JIS X 0212-1990. That means you can use the same
code to decode to utf8 but not vice versa.
$utf8 = decode('iso-2022-jp-1', $stream);
and
$utf8 = decode('iso-2022-jp', $stream);
yield the same result but
$with_0212 = encode('iso-2022-jp-1', $utf8);
is now different from
$without_0212 = encode('iso-2022-jp', $utf8 );
In the latter case, characters that map to 0212 are first converted
to U+3013 (0xA2AE in EUC-JP; a white square also known as 'Tofu' or
'geta mark') then fed to the decoding engine. U+FFFD is not used,
in order to preserve text layout as much as possible.
=head1 BUGS
The ASCII region (0x00-0x7f) is preserved for all encodings, even
though this conflicts with mappings by the Unicode Consortium.
=head1 SEE ALSO
L<Encode>
=cut
Encode/_T.e2x 0000644 00000000227 15033552504 0006726 0 ustar 00 use strict;
# Adjust the number here!
use Test::More tests => 2;
BEGIN {
use_ok('Encode');
use_ok('Encode::$_Name_');
}
# Add more test here!
Encode/Guess.pm 0000644 00000023601 15033552504 0007371 0 ustar 00 package Encode::Guess;
use strict;
use warnings;
use Encode qw(:fallbacks find_encoding);
our $VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
my $Canon = 'Guess';
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
our %DEF_SUSPECTS = map { $_ => find_encoding($_) } qw(ascii utf8);
my $obj = bless {
Name => $Canon,
Suspects => {%DEF_SUSPECTS},
} => __PACKAGE__;
Encode::define_encoding($obj, $Canon);
use parent qw(Encode::Encoding);
sub needs_lines { 1 }
sub perlio_ok { 0 }
our @EXPORT = qw(guess_encoding);
our $NoUTFAutoGuess = 0;
our $UTF8_BOM = pack( "C3", 0xef, 0xbb, 0xbf );
sub import { # Exporter not used so we do it on our own
my $callpkg = caller;
for my $item (@EXPORT) {
no strict 'refs';
*{"$callpkg\::$item"} = \&{"$item"};
}
set_suspects(@_);
}
sub set_suspects {
my $class = shift;
my $self = ref($class) ? $class : $Encode::Encoding{$Canon};
$self->{Suspects} = {%DEF_SUSPECTS};
$self->add_suspects(@_);
}
sub add_suspects {
my $class = shift;
my $self = ref($class) ? $class : $Encode::Encoding{$Canon};
for my $c (@_) {
my $e = find_encoding($c) or die "Unknown encoding: $c";
$self->{Suspects}{ $e->name } = $e;
DEBUG and warn "Added: ", $e->name;
}
}
sub decode($$;$) {
my ( $obj, $octet, $chk ) = @_;
my $guessed = guess( $obj, $octet );
unless ( ref($guessed) ) {
require Carp;
Carp::croak($guessed);
}
my $utf8 = $guessed->decode( $octet, $chk || 0 );
$_[1] = $octet if $chk;
return $utf8;
}
sub guess_encoding {
guess( $Encode::Encoding{$Canon}, @_ );
}
sub guess {
my $class = shift;
my $obj = ref($class) ? $class : $Encode::Encoding{$Canon};
my $octet = shift;
# sanity check
return "Empty string, empty guess" unless defined $octet and length $octet;
# cheat 0: utf8 flag;
if ( Encode::is_utf8($octet) ) {
return find_encoding('utf8') unless $NoUTFAutoGuess;
Encode::_utf8_off($octet);
}
# cheat 1: BOM
use Encode::Unicode;
unless ($NoUTFAutoGuess) {
my $BOM = pack( 'C3', unpack( "C3", $octet ) );
return find_encoding('utf8')
if ( defined $BOM and $BOM eq $UTF8_BOM );
$BOM = unpack( 'N', $octet );
return find_encoding('UTF-32')
if ( defined $BOM and ( $BOM == 0xFeFF or $BOM == 0xFFFe0000 ) );
$BOM = unpack( 'n', $octet );
return find_encoding('UTF-16')
if ( defined $BOM and ( $BOM == 0xFeFF or $BOM == 0xFFFe ) );
if ( $octet =~ /\x00/o )
{ # if \x00 found, we assume UTF-(16|32)(BE|LE)
my $utf;
my ( $be, $le ) = ( 0, 0 );
if ( $octet =~ /\x00\x00/o ) { # UTF-32(BE|LE) assumed
$utf = "UTF-32";
for my $char ( unpack( 'N*', $octet ) ) {
$char & 0x0000ffff and $be++;
$char & 0xffff0000 and $le++;
}
}
else { # UTF-16(BE|LE) assumed
$utf = "UTF-16";
for my $char ( unpack( 'n*', $octet ) ) {
$char & 0x00ff and $be++;
$char & 0xff00 and $le++;
}
}
DEBUG and warn "$utf, be == $be, le == $le";
$be == $le
and return
"Encodings ambiguous between $utf BE and LE ($be, $le)";
$utf .= ( $be > $le ) ? 'BE' : 'LE';
return find_encoding($utf);
}
}
my %try = %{ $obj->{Suspects} };
for my $c (@_) {
my $e = find_encoding($c) or die "Unknown encoding: $c";
$try{ $e->name } = $e;
DEBUG and warn "Added: ", $e->name;
}
my $nline = 1;
for my $line ( split /\r\n?|\n/, $octet ) {
# cheat 2 -- \e in the string
if ( $line =~ /\e/o ) {
my @keys = keys %try;
delete @try{qw/utf8 ascii/};
for my $k (@keys) {
ref( $try{$k} ) eq 'Encode::XS' and delete $try{$k};
}
}
my %ok = %try;
# warn join(",", keys %try);
for my $k ( keys %try ) {
my $scratch = $line;
$try{$k}->decode( $scratch, FB_QUIET );
if ( $scratch eq '' ) {
DEBUG and warn sprintf( "%4d:%-24s ok\n", $nline, $k );
}
else {
use bytes ();
DEBUG
and warn sprintf( "%4d:%-24s not ok; %d bytes left\n",
$nline, $k, bytes::length($scratch) );
delete $ok{$k};
}
}
%ok or return "No appropriate encodings found!";
if ( scalar( keys(%ok) ) == 1 ) {
my ($retval) = values(%ok);
return $retval;
}
%try = %ok;
$nline++;
}
$try{ascii}
or return "Encodings too ambiguous: ", join( " or ", keys %try );
return $try{ascii};
}
1;
__END__
=head1 NAME
Encode::Guess -- Guesses encoding from data
=head1 SYNOPSIS
# if you are sure $data won't contain anything bogus
use Encode;
use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
my $utf8 = decode("Guess", $data);
my $data = encode("Guess", $utf8); # this doesn't work!
# more elaborate way
use Encode::Guess;
my $enc = guess_encoding($data, qw/euc-jp shiftjis 7bit-jis/);
ref($enc) or die "Can't guess: $enc"; # trap error this way
$utf8 = $enc->decode($data);
# or
$utf8 = decode($enc->name, $data)
=head1 ABSTRACT
Encode::Guess enables you to guess in what encoding a given data is
encoded, or at least tries to.
=head1 DESCRIPTION
By default, it checks only ascii, utf8 and UTF-16/32 with BOM.
use Encode::Guess; # ascii/utf8/BOMed UTF
To use it more practically, you have to give the names of encodings to
check (I<suspects> as follows). The name of suspects can either be
canonical names or aliases.
CAVEAT: Unlike UTF-(16|32), BOM in utf8 is NOT AUTOMATICALLY STRIPPED.
# tries all major Japanese Encodings as well
use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
If the C<$Encode::Guess::NoUTFAutoGuess> variable is set to a true
value, no heuristics will be applied to UTF8/16/32, and the result
will be limited to the suspects and C<ascii>.
=over 4
=item Encode::Guess->set_suspects
You can also change the internal suspects list via C<set_suspects>
method.
use Encode::Guess;
Encode::Guess->set_suspects(qw/euc-jp shiftjis 7bit-jis/);
=item Encode::Guess->add_suspects
Or you can use C<add_suspects> method. The difference is that
C<set_suspects> flushes the current suspects list while
C<add_suspects> adds.
use Encode::Guess;
Encode::Guess->add_suspects(qw/euc-jp shiftjis 7bit-jis/);
# now the suspects are euc-jp,shiftjis,7bit-jis, AND
# euc-kr,euc-cn, and big5-eten
Encode::Guess->add_suspects(qw/euc-kr euc-cn big5-eten/);
=item Encode::decode("Guess" ...)
When you are content with suspects list, you can now
my $utf8 = Encode::decode("Guess", $data);
=item Encode::Guess->guess($data)
But it will croak if:
=over
=item *
Two or more suspects remain
=item *
No suspects left
=back
So you should instead try this;
my $decoder = Encode::Guess->guess($data);
On success, $decoder is an object that is documented in
L<Encode::Encoding>. So you can now do this;
my $utf8 = $decoder->decode($data);
On failure, $decoder now contains an error message so the whole thing
would be as follows;
my $decoder = Encode::Guess->guess($data);
die $decoder unless ref($decoder);
my $utf8 = $decoder->decode($data);
=item guess_encoding($data, [, I<list of suspects>])
You can also try C<guess_encoding> function which is exported by
default. It takes $data to check and it also takes the list of
suspects by option. The optional suspect list is I<not reflected> to
the internal suspects list.
my $decoder = guess_encoding($data, qw/euc-jp euc-kr euc-cn/);
die $decoder unless ref($decoder);
my $utf8 = $decoder->decode($data);
# check only ascii, utf8 and UTF-(16|32) with BOM
my $decoder = guess_encoding($data);
=back
=head1 CAVEATS
=over 4
=item *
Because of the algorithm used, ISO-8859 series and other single-byte
encodings do not work well unless either one of ISO-8859 is the only
one suspect (besides ascii and utf8).
use Encode::Guess;
# perhaps ok
my $decoder = guess_encoding($data, 'latin1');
# definitely NOT ok
my $decoder = guess_encoding($data, qw/latin1 greek/);
The reason is that Encode::Guess guesses encoding by trial and error.
It first splits $data into lines and tries to decode the line for each
suspect. It keeps it going until all but one encoding is eliminated
out of suspects list. ISO-8859 series is just too successful for most
cases (because it fills almost all code points in \x00-\xff).
=item *
Do not mix national standard encodings and the corresponding vendor
encodings.
# a very bad idea
my $decoder
= guess_encoding($data, qw/shiftjis MacJapanese cp932/);
The reason is that vendor encoding is usually a superset of national
standard so it becomes too ambiguous for most cases.
=item *
On the other hand, mixing various national standard encodings
automagically works unless $data is too short to allow for guessing.
# This is ok if $data is long enough
my $decoder =
guess_encoding($data, qw/euc-cn
euc-jp shiftjis 7bit-jis
euc-kr
big5-eten/);
=item *
DO NOT PUT TOO MANY SUSPECTS! Don't you try something like this!
my $decoder = guess_encoding($data,
Encode->encodings(":all"));
=back
It is, after all, just a guess. You should alway be explicit when it
comes to encodings. But there are some, especially Japanese,
environment that guess-coding is a must. Use this module with care.
=head1 TO DO
Encode::Guess does not work on EBCDIC platforms.
=head1 SEE ALSO
L<Encode>, L<Encode::Encoding>
=cut
Encode/ConfigLocal_PM.e2x 0000644 00000000270 15033552504 0011136 0 ustar 00 #
# Local demand-load module list
#
# You should not edit this file by hand! use "enc2xs -C"
#
package Encode::ConfigLocal;
our $VERSION = $_LocalVer_;
use strict;
$_ModLines_
1;
Encode/Alias.pm 0000644 00000030401 15033552504 0007330 0 ustar 00 package Encode::Alias;
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 2.24 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
use Exporter 'import';
# Public, encouraged API is exported by default
our @EXPORT =
qw (
define_alias
find_alias
);
our @Alias; # ordered matching list
our %Alias; # cached known aliases
sub find_alias {
my $class = shift;
my $find = shift;
unless ( exists $Alias{$find} ) {
$Alias{$find} = undef; # Recursion guard
for ( my $i = 0 ; $i < @Alias ; $i += 2 ) {
my $alias = $Alias[$i];
my $val = $Alias[ $i + 1 ];
my $new;
if ( ref($alias) eq 'Regexp' && $find =~ $alias ) {
DEBUG and warn "eval $val";
$new = eval $val;
DEBUG and $@ and warn "$val, $@";
}
elsif ( ref($alias) eq 'CODE' ) {
DEBUG and warn "$alias", "->", "($find)";
$new = $alias->($find);
}
elsif ( lc($find) eq lc($alias) ) {
$new = $val;
}
if ( defined($new) ) {
next if $new eq $find; # avoid (direct) recursion on bugs
DEBUG and warn "$alias, $new";
my $enc =
( ref($new) ) ? $new : Encode::find_encoding($new);
if ($enc) {
$Alias{$find} = $enc;
last;
}
}
}
# case insensitive search when canonical is not in all lowercase
# RT ticket #7835
unless ( $Alias{$find} ) {
my $lcfind = lc($find);
for my $name ( keys %Encode::Encoding, keys %Encode::ExtModule )
{
$lcfind eq lc($name) or next;
$Alias{$find} = Encode::find_encoding($name);
DEBUG and warn "$find => $name";
}
}
}
if (DEBUG) {
my $name;
if ( my $e = $Alias{$find} ) {
$name = $e->name;
}
else {
$name = "";
}
warn "find_alias($class, $find)->name = $name";
}
return $Alias{$find};
}
sub define_alias {
while (@_) {
my $alias = shift;
my $name = shift;
unshift( @Alias, $alias => $name ) # newer one has precedence
if defined $alias;
if ( ref($alias) ) {
# clear %Alias cache to allow overrides
my @a = keys %Alias;
for my $k (@a) {
if ( ref($alias) eq 'Regexp' && $k =~ $alias ) {
DEBUG and warn "delete \$Alias\{$k\}";
delete $Alias{$k};
}
elsif ( ref($alias) eq 'CODE' && $alias->($k) ) {
DEBUG and warn "delete \$Alias\{$k\}";
delete $Alias{$k};
}
}
}
elsif (defined $alias) {
DEBUG and warn "delete \$Alias\{$alias\}";
delete $Alias{$alias};
}
elsif (DEBUG) {
require Carp;
Carp::croak("undef \$alias");
}
}
}
# HACK: Encode must be used after define_alias is declarated as Encode calls define_alias
use Encode ();
# Allow latin-1 style names as well
# 0 1 2 3 4 5 6 7 8 9 10
our @Latin2iso = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 );
# Allow winlatin1 style names as well
our %Winlatin2cp = (
'latin1' => 1252,
'latin2' => 1250,
'cyrillic' => 1251,
'greek' => 1253,
'turkish' => 1254,
'hebrew' => 1255,
'arabic' => 1256,
'baltic' => 1257,
'vietnamese' => 1258,
);
init_aliases();
sub undef_aliases {
@Alias = ();
%Alias = ();
}
sub init_aliases {
undef_aliases();
# Try all-lower-case version should all else fails
define_alias( qr/^(.*)$/ => '"\L$1"' );
# UTF/UCS stuff
define_alias( qr/^(unicode-1-1-)?UTF-?7$/i => '"UTF-7"' );
define_alias( qr/^UCS-?2-?LE$/i => '"UCS-2LE"' );
define_alias(
qr/^UCS-?2-?(BE)?$/i => '"UCS-2BE"',
qr/^UCS-?4-?(BE|LE|)?$/i => 'uc("UTF-32$1")',
qr/^iso-10646-1$/i => '"UCS-2BE"'
);
define_alias(
qr/^UTF-?(16|32)-?BE$/i => '"UTF-$1BE"',
qr/^UTF-?(16|32)-?LE$/i => '"UTF-$1LE"',
qr/^UTF-?(16|32)$/i => '"UTF-$1"',
);
# ASCII
define_alias( qr/^(?:US-?)ascii$/i => '"ascii"' );
define_alias( 'C' => 'ascii' );
define_alias( qr/\b(?:ISO[-_]?)?646(?:[-_]?US)?$/i => '"ascii"' );
# Allow variants of iso-8859-1 etc.
define_alias( qr/\biso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' );
# At least HP-UX has these.
define_alias( qr/\biso8859(\d+)$/i => '"iso-8859-$1"' );
# More HP stuff.
define_alias(
qr/\b(?:hp-)?(arabic|greek|hebrew|kana|roman|thai|turkish)8$/i =>
'"${1}8"' );
# The Official name of ASCII.
define_alias( qr/\bANSI[-_]?X3\.4[-_]?1968$/i => '"ascii"' );
# This is a font issue, not an encoding issue.
# (The currency symbol of the Latin 1 upper half
# has been redefined as the euro symbol.)
define_alias( qr/^(.+)\@euro$/i => '"$1"' );
define_alias( qr/\b(?:iso[-_]?)?latin[-_]?(\d+)$/i =>
'defined $Encode::Alias::Latin2iso[$1] ? "iso-8859-$Encode::Alias::Latin2iso[$1]" : undef'
);
define_alias(
qr/\bwin(latin[12]|cyrillic|baltic|greek|turkish|
hebrew|arabic|baltic|vietnamese)$/ix =>
'"cp" . $Encode::Alias::Winlatin2cp{lc($1)}'
);
# Common names for non-latin preferred MIME names
define_alias(
'ascii' => 'US-ascii',
'cyrillic' => 'iso-8859-5',
'arabic' => 'iso-8859-6',
'greek' => 'iso-8859-7',
'hebrew' => 'iso-8859-8',
'thai' => 'iso-8859-11',
);
# RT #20781
define_alias(qr/\btis-?620\b/i => '"iso-8859-11"');
# At least AIX has IBM-NNN (surprisingly...) instead of cpNNN.
# And Microsoft has their own naming (again, surprisingly).
# And windows-* is registered in IANA!
define_alias(
qr/\b(?:cp|ibm|ms|windows)[-_ ]?(\d{2,4})$/i => '"cp$1"' );
# Sometimes seen with a leading zero.
# define_alias( qr/\bcp037\b/i => '"cp37"');
# Mac Mappings
# predefined in *.ucm; unneeded
# define_alias( qr/\bmacIcelandic$/i => '"macIceland"');
define_alias( qr/^(?:x[_-])?mac[_-](.*)$/i => '"mac$1"' );
# http://rt.cpan.org/Ticket/Display.html?id=36326
define_alias( qr/^macintosh$/i => '"MacRoman"' );
# https://rt.cpan.org/Ticket/Display.html?id=78125
define_alias( qr/^macce$/i => '"MacCentralEurRoman"' );
# Ououououou. gone. They are different!
# define_alias( qr/\bmacRomanian$/i => '"macRumanian"');
# Standardize on the dashed versions.
define_alias( qr/\bkoi8[\s\-_]*([ru])$/i => '"koi8-$1"' );
unless ($Encode::ON_EBCDIC) {
# for Encode::CN
define_alias( qr/\beuc.*cn$/i => '"euc-cn"' );
define_alias( qr/\bcn.*euc$/i => '"euc-cn"' );
# define_alias( qr/\bGB[- ]?(\d+)$/i => '"euc-cn"' )
# CP936 doesn't have vendor-addon for GBK, so they're identical.
define_alias( qr/^gbk$/i => '"cp936"' );
# This fixes gb2312 vs. euc-cn confusion, practically
define_alias( qr/\bGB[-_ ]?2312(?!-?raw)/i => '"euc-cn"' );
# for Encode::JP
define_alias( qr/\bjis$/i => '"7bit-jis"' );
define_alias( qr/\beuc.*jp$/i => '"euc-jp"' );
define_alias( qr/\bjp.*euc$/i => '"euc-jp"' );
define_alias( qr/\bujis$/i => '"euc-jp"' );
define_alias( qr/\bshift.*jis$/i => '"shiftjis"' );
define_alias( qr/\bsjis$/i => '"shiftjis"' );
define_alias( qr/\bwindows-31j$/i => '"cp932"' );
# for Encode::KR
define_alias( qr/\beuc.*kr$/i => '"euc-kr"' );
define_alias( qr/\bkr.*euc$/i => '"euc-kr"' );
# This fixes ksc5601 vs. euc-kr confusion, practically
define_alias( qr/(?:x-)?uhc$/i => '"cp949"' );
define_alias( qr/(?:x-)?windows-949$/i => '"cp949"' );
define_alias( qr/\bks_c_5601-1987$/i => '"cp949"' );
# for Encode::TW
define_alias( qr/\bbig-?5$/i => '"big5-eten"' );
define_alias( qr/\bbig5-?et(?:en)?$/i => '"big5-eten"' );
define_alias( qr/\btca[-_]?big5$/i => '"big5-eten"' );
define_alias( qr/\bbig5-?hk(?:scs)?$/i => '"big5-hkscs"' );
define_alias( qr/\bhk(?:scs)?[-_]?big5$/i => '"big5-hkscs"' );
}
# https://github.com/dankogai/p5-encode/issues/37
define_alias(qr/cp65000/i => '"UTF-7"');
define_alias(qr/cp65001/i => '"utf-8-strict"');
# utf8 is blessed :)
define_alias( qr/\bUTF-8$/i => '"utf-8-strict"' );
# At last, Map white space and _ to '-'
define_alias( qr/^([^\s_]+)[\s_]+([^\s_]*)$/i => '"$1-$2"' );
}
1;
__END__
# TODO: HP-UX '8' encodings arabic8 greek8 hebrew8 kana8 thai8 turkish8
# TODO: HP-UX '15' encodings japanese15 korean15 roi15
# TODO: Cyrillic encoding ISO-IR-111 (useful?)
# TODO: Armenian encoding ARMSCII-8
# TODO: Hebrew encoding ISO-8859-8-1
# TODO: Thai encoding TCVN
# TODO: Vietnamese encodings VPS
# TODO: Mac Asian+African encodings: Arabic Armenian Bengali Burmese
# ChineseSimp ChineseTrad Devanagari Ethiopic ExtArabic
# Farsi Georgian Gujarati Gurmukhi Hebrew Japanese
# Kannada Khmer Korean Laotian Malayalam Mongolian
# Oriya Sinhalese Symbol Tamil Telugu Tibetan Vietnamese
=head1 NAME
Encode::Alias - alias definitions to encodings
=head1 SYNOPSIS
use Encode;
use Encode::Alias;
define_alias( "newName" => ENCODING);
define_alias( qr/.../ => ENCODING);
define_alias( sub { return ENCODING if ...; } );
=head1 DESCRIPTION
Allows newName to be used as an alias for ENCODING. ENCODING may be
either the name of an encoding or an encoding object (as described
in L<Encode>).
Currently the first argument to define_alias() can be specified in the
following ways:
=over 4
=item As a simple string.
=item As a qr// compiled regular expression, e.g.:
define_alias( qr/^iso8859-(\d+)$/i => '"iso-8859-$1"' );
In this case, if I<ENCODING> is not a reference, it is C<eval>-ed
in order to allow C<$1> etc. to be substituted. The example is one
way to alias names as used in X11 fonts to the MIME names for the
iso-8859-* family. Note the double quotes inside the single quotes.
(or, you don't have to do this yourself because this example is predefined)
If you are using a regex here, you have to use the quotes as shown or
it won't work. Also note that regex handling is tricky even for the
experienced. Use this feature with caution.
=item As a code reference, e.g.:
define_alias( sub {shift =~ /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } );
The same effect as the example above in a different way. The coderef
takes the alias name as an argument and returns a canonical name on
success or undef if not. Note the second argument is ignored if provided.
Use this with even more caution than the regex version.
=back
=head3 Changes in code reference aliasing
As of Encode 1.87, the older form
define_alias( sub { return /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } );
no longer works.
Encode up to 1.86 internally used "local $_" to implement this older
form. But consider the code below;
use Encode;
$_ = "eeeee" ;
while (/(e)/g) {
my $utf = decode('aliased-encoding-name', $1);
print "position:",pos,"\n";
}
Prior to Encode 1.86 this fails because of "local $_".
=head2 Alias overloading
You can override predefined aliases by simply applying define_alias().
The new alias is always evaluated first, and when necessary,
define_alias() flushes the internal cache to make the new definition
available.
# redirect SHIFT_JIS to MS/IBM Code Page 932, which is a
# superset of SHIFT_JIS
define_alias( qr/shift.*jis$/i => '"cp932"' );
define_alias( qr/sjis$/i => '"cp932"' );
If you want to zap all predefined aliases, you can use
Encode::Alias->undef_aliases;
to do so. And
Encode::Alias->init_aliases;
gets the factory settings back.
Note that define_alias() will not be able to override the canonical name
of encodings. Encodings are first looked up by canonical name before
potential aliases are tried.
=head1 SEE ALSO
L<Encode>, L<Encode::Supported>
=cut
Encode/encode.h 0000644 00000010060 15033552504 0007346 0 ustar 00 #ifndef ENCODE_H
#define ENCODE_H
#ifndef H_PERL
/* check whether we're "in perl" so that we can do data parts without
getting extern references to the code parts
*/
typedef unsigned char U8;
#endif
typedef struct encpage_s encpage_t;
struct encpage_s
{
/* fields ordered to pack nicely on 32-bit machines */
const U8 *const seq; /* Packed output sequences we generate
if we match */
const encpage_t *const next; /* Page to go to if we match */
const U8 min; /* Min value of octet to match this entry */
const U8 max; /* Max value of octet to match this entry */
const U8 dlen; /* destination length -
size of entries in seq */
const U8 slen; /* source length -
number of source octets needed */
};
/*
At any point in a translation there is a page pointer which points
at an array of the above structures.
Basic operation :
get octet from source stream.
if (octet >= min && octet < max) {
if slen is 0 then we cannot represent this character.
if we have less than slen octets (including this one) then
we have a partial character.
otherwise
copy dlen octets from seq + dlen*(octet-min) to output
(dlen may be zero if we don't know yet.)
load page pointer with next to continue.
(is slen is one this is end of a character)
get next octet.
}
else {
increment the page pointer to look at next slot in the array
}
arrays SHALL be constructed so there is an entry which matches
..0xFF at the end, and either maps it or indicates no
representation.
if MSB of slen is set then mapping is an approximate "FALLBACK" entry.
*/
typedef struct encode_s encode_t;
struct encode_s
{
const encpage_t *const t_utf8; /* Starting table for translation from
the encoding to UTF-8 form */
const encpage_t *const f_utf8; /* Starting table for translation
from UTF-8 to the encoding */
const U8 *const rep; /* Replacement character in this
encoding e.g. "?" */
int replen; /* Number of octets in rep */
U8 min_el; /* Minimum octets to represent a
character */
U8 max_el; /* Maximum octets to represent a
character */
const char *const name[2]; /* name(s) of this encoding */
};
#ifdef H_PERL
/* See comment at top of file for deviousness */
extern int do_encode(const encpage_t *enc, const U8 *src, STRLEN *slen,
U8 *dst, STRLEN dlen, STRLEN *dout, int approx,
const U8 *term, STRLEN tlen);
extern void Encode_DefineEncoding(encode_t *enc);
#endif /* H_PERL */
#define ENCODE_NOSPACE 1
#define ENCODE_PARTIAL 2
#define ENCODE_NOREP 3
#define ENCODE_FALLBACK 4
#define ENCODE_FOUND_TERM 5
/* Use the perl core value if available; it is portable to EBCDIC */
#ifdef REPLACEMENT_CHARACTER_UTF8
# define FBCHAR_UTF8 REPLACEMENT_CHARACTER_UTF8
#else
# define FBCHAR_UTF8 "\xEF\xBF\xBD"
#endif
#define ENCODE_DIE_ON_ERR 0x0001 /* croaks immediately */
#define ENCODE_WARN_ON_ERR 0x0002 /* warn on error; may proceed */
#define ENCODE_RETURN_ON_ERR 0x0004 /* immediately returns on NOREP */
#define ENCODE_LEAVE_SRC 0x0008 /* $src updated unless set */
#define ENCODE_PERLQQ 0x0100 /* perlqq fallback string */
#define ENCODE_HTMLCREF 0x0200 /* HTML character ref. fb mode */
#define ENCODE_XMLCREF 0x0400 /* XML character ref. fb mode */
#define ENCODE_STOP_AT_PARTIAL 0x0800 /* stop at partial explicitly */
#define ENCODE_FB_DEFAULT 0x0000
#define ENCODE_FB_CROAK 0x0001
#define ENCODE_FB_QUIET ENCODE_RETURN_ON_ERR
#define ENCODE_FB_WARN (ENCODE_RETURN_ON_ERR|ENCODE_WARN_ON_ERR)
#define ENCODE_FB_PERLQQ (ENCODE_PERLQQ|ENCODE_LEAVE_SRC)
#define ENCODE_FB_HTMLCREF (ENCODE_HTMLCREF|ENCODE_LEAVE_SRC)
#define ENCODE_FB_XMLCREF (ENCODE_XMLCREF|ENCODE_LEAVE_SRC)
#endif /* ENCODE_H */
Encode/CJKConstants.pm 0000644 00000003223 15033552504 0010605 0 ustar 00 #
# $Id: CJKConstants.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $
#
package Encode::CJKConstants;
use strict;
use warnings;
our $RCSID = q$Id: CJKConstants.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $;
our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use Carp;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw();
our @EXPORT_OK = qw(%CHARCODE %ESC %RE);
our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK, @EXPORT ] );
my %_0208 = (
1978 => '\e\$\@',
1983 => '\e\$B',
1990 => '\e&\@\e\$B',
);
our %CHARCODE = (
UNDEF_EUC => "\xa2\xae", # �� in EUC
UNDEF_SJIS => "\x81\xac", # �� in SJIS
UNDEF_JIS => "\xa2\xf7", # �� -- used in unicode
UNDEF_UNICODE => "\x20\x20", # �� -- used in unicode
);
our %ESC = (
GB_2312 => "\e\$A",
JIS_0208 => "\e\$B",
JIS_0212 => "\e\$(D",
KSC_5601 => "\e\$(C",
ASC => "\e\(B",
KANA => "\e\(I",
'2022_KR' => "\e\$)C",
);
our %RE = (
ASCII => '[\x00-\x7f]',
BIN => '[\x00-\x06\x7f\xff]',
EUC_0212 => '\x8f[\xa1-\xfe][\xa1-\xfe]',
EUC_C => '[\xa1-\xfe][\xa1-\xfe]',
EUC_KANA => '\x8e[\xa1-\xdf]',
JIS_0208 => "$_0208{1978}|$_0208{1983}|$_0208{1990}",
JIS_0212 => "\e" . '\$\(D',
ISO_ASC => "\e" . '\([BJ]',
JIS_KANA => "\e" . '\(I',
'2022_KR' => "\e" . '\$\)C',
SJIS_C => '[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]',
SJIS_KANA => '[\xa1-\xdf]',
UTF8 => '[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf]'
);
1;
=head1 NAME
Encode::CJKConstants.pm -- Internally used by Encode::??::ISO_2022_*
=cut
Encode/Supported.pod 0000644 00000070074 15033552504 0010444 0 ustar 00 =head1 NAME
Encode::Supported -- Encodings supported by Encode
=head1 DESCRIPTION
=head2 Encoding Names
Encoding names are case insensitive. White space in names
is ignored. In addition, an encoding may have aliases.
Each encoding has one "canonical" name. The "canonical"
name is chosen from the names of the encoding by picking
the first in the following sequence (with a few exceptions).
=over 2
=item *
The name used by the Perl community. That includes 'utf8' and 'ascii'.
Unlike aliases, canonical names directly reach the method so such
frequently used words like 'utf8' don't need to do alias lookups.
=item *
The MIME name as defined in IETF RFCs. This includes all "iso-"s.
=item *
The name in the IANA registry.
=item *
The name used by the organization that defined it.
=back
In case I<de jure> canonical names differ from that of the Encode
module, they are always aliased if it ever be implemented. So you can
safely tell if a given encoding is implemented or not just by passing
the canonical name.
Because of all the alias issues, and because in the general case
encodings have state, "Encode" uses an encoding object internally
once an operation is in progress.
=head1 Supported Encodings
As of Perl 5.8.0, at least the following encodings are recognized.
Note that unless otherwise specified, they are all case insensitive
(via alias) and all occurrence of spaces are replaced with '-'.
In other words, "ISO 8859 1" and "iso-8859-1" are identical.
Encodings are categorized and implemented in several different modules
but you don't have to C<use Encode::XX> to make them available for
most cases. Encode.pm will automatically load those modules on demand.
=head2 Built-in Encodings
The following encodings are always available.
Canonical Aliases Comments & References
----------------------------------------------------------------
ascii US-ascii ISO-646-US [ECMA]
ascii-ctrl Special Encoding
iso-8859-1 latin1 [ISO]
null Special Encoding
utf8 UTF-8 [RFC2279]
----------------------------------------------------------------
I<null> and I<ascii-ctrl> are special. "null" fails for all character
so when you set fallback mode to PERLQQ, HTMLCREF or XMLCREF, ALL
CHARACTERS will fall back to character references. Ditto for
"ascii-ctrl" except for control characters. For fallback modes, see
L<Encode>.
=head2 Encode::Unicode -- other Unicode encodings
Unicode coding schemes other than native utf8 are supported by
Encode::Unicode, which will be autoloaded on demand.
----------------------------------------------------------------
UCS-2BE UCS-2, iso-10646-1 [IANA, UC]
UCS-2LE [UC]
UTF-16 [UC]
UTF-16BE [UC]
UTF-16LE [UC]
UTF-32 [UC]
UTF-32BE UCS-4 [UC]
UTF-32LE [UC]
UTF-7 [RFC2152]
----------------------------------------------------------------
To find how (UCS-2|UTF-(16|32))(LE|BE)? differ from one another,
see L<Encode::Unicode>.
UTF-7 is a special encoding which "re-encodes" UTF-16BE into a 7-bit
encoding. It is implemented separately by Encode::Unicode::UTF7.
=head2 Encode::Byte -- Extended ASCII
Encode::Byte implements most single-byte encodings except for
Symbols and EBCDIC. The following encodings are based on single-byte
encodings implemented as extended ASCII. Most of them map
\x80-\xff (upper half) to non-ASCII characters.
=over 2
=item ISO-8859 and corresponding vendor mappings
Since there are so many, they are presented in table format with
languages and corresponding encoding names by vendors. Note that
the table is sorted in order of ISO-8859 and the corresponding vendor
mappings are slightly different from that of ISO. See
L<http://czyborra.com/charsets/iso8859.html> for details.
Lang/Regions ISO/Other Std. DOS Windows Macintosh Others
----------------------------------------------------------------
N. America (ASCII) cp437 AdobeStandardEncoding
cp863 (DOSCanadaF)
W. Europe iso-8859-1 cp850 cp1252 MacRoman nextstep
hp-roman8
cp860 (DOSPortuguese)
Cntrl. Europe iso-8859-2 cp852 cp1250 MacCentralEurRoman
MacCroatian
MacRomanian
MacRumanian
Latin3[1] iso-8859-3
Latin4[2] iso-8859-4
Cyrillics iso-8859-5 cp855 cp1251 MacCyrillic
(See also next section) cp866 MacUkrainian
Arabic iso-8859-6 cp864 cp1256 MacArabic
cp1006 MacFarsi
Greek iso-8859-7 cp737 cp1253 MacGreek
cp869 (DOSGreek2)
Hebrew iso-8859-8 cp862 cp1255 MacHebrew
Turkish iso-8859-9 cp857 cp1254 MacTurkish
Nordics iso-8859-10 cp865
cp861 MacIcelandic
MacSami
Thai iso-8859-11[3] cp874 MacThai
(iso-8859-12 is nonexistent. Reserved for Indics?)
Baltics iso-8859-13 cp775 cp1257
Celtics iso-8859-14
Latin9 [4] iso-8859-15
Latin10 iso-8859-16
Vietnamese viscii cp1258 MacVietnamese
----------------------------------------------------------------
[1] Esperanto, Maltese, and Turkish. Turkish is now on 8859-9.
[2] Baltics. Now on 8859-10, except for Latvian.
[3] TIS 620 + Non-Breaking Space (0xA0 / U+00A0)
[4] Nicknamed Latin0; the Euro sign as well as French and Finnish
letters that are missing from 8859-1 were added.
All cp* are also available as ibm-*, ms-*, and windows-* . See also
L<http://czyborra.com/charsets/codepages.html>.
Macintosh encodings don't seem to be registered in such entities as
IANA. "Canonical" names in Encode are based upon Apple's Tech Note
1150. See L<http://developer.apple.com/technotes/tn/tn1150.html>
for details.
=item KOI8 - De Facto Standard for the Cyrillic world
Though ISO-8859 does have ISO-8859-5, the KOI8 series is far more
popular in the Net. L<Encode> comes with the following KOI charsets.
For gory details, see L<http://czyborra.com/charsets/cyrillic.html>
----------------------------------------------------------------
koi8-f
koi8-r cp878 [RFC1489]
koi8-u [RFC2319]
----------------------------------------------------------------
=back
=head2 gsm0338 - Hentai Latin 1
GSM0338 is for GSM handsets. Though it shares alphanumerals with
ASCII, control character ranges and other parts are mapped very
differently, mainly to store Greek characters. There are also escape
sequences (starting with 0x1B) to cover e.g. the Euro sign.
This was once handled by L<Encode::Bytes> but because of all those
unusual specifications, Encode 2.20 has relocated the support to
L<Encode::GSM0338>. See L<Encode::GSM0338> for details.
=over 2
=item gsm0338 support before 2.19
Some special cases like a trailing 0x00 byte or a lone 0x1B byte are not
well-defined and decode() will return an empty string for them.
One possible workaround is
$gsm =~ s/\x00\z/\x00\x00/;
$uni = decode("gsm0338", $gsm);
$uni .= "\xA0" if $gsm =~ /\x1B\z/;
Note that the Encode implementation of GSM0338 does not implement the
reuse of Latin capital letters as Greek capital letters (for example,
the 0x5A is U+005A (LATIN CAPITAL LETTER Z), not U+0396 (GREEK CAPITAL
LETTER ZETA).
The GSM0338 is also covered in Encode::Byte even though it is not
an "extended ASCII" encoding.
=back
=head2 CJK: Chinese, Japanese, Korean (Multibyte)
Note that Vietnamese is listed above. Also read "Encoding vs Charset"
below. Also note that these are implemented in distinct modules by
countries, due to the size concerns (simplified Chinese is mapped
to 'CN', continental China, while traditional Chinese is mapped to
'TW', Taiwan). Please refer to their respective documentation pages.
=over 2
=item Encode::CN -- Continental China
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
euc-cn [1] MacChineseSimp
(gbk) cp936 [2]
gb12345-raw { GB12345 without CES }
gb2312-raw { GB2312 without CES }
hz
iso-ir-165
----------------------------------------------------------------
[1] GB2312 is aliased to this. See L<Microsoft-related naming mess>
[2] gbk is aliased to this. See L<Microsoft-related naming mess>
=item Encode::JP -- Japan
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
euc-jp
shiftjis cp932 macJapanese
7bit-jis
iso-2022-jp [RFC1468]
iso-2022-jp-1 [RFC2237]
jis0201-raw { JIS X 0201 (roman + halfwidth kana) without CES }
jis0208-raw { JIS X 0208 (Kanji + fullwidth kana) without CES }
jis0212-raw { JIS X 0212 (Extended Kanji) without CES }
----------------------------------------------------------------
=item Encode::KR -- Korea
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
euc-kr MacKorean [RFC1557]
cp949 [1]
iso-2022-kr [RFC1557]
johab [KS X 1001:1998, Annex 3]
ksc5601-raw { KSC5601 without CES }
----------------------------------------------------------------
[1] ks_c_5601-1987, (x-)?windows-949, and uhc are aliased to this.
See below.
=item Encode::TW -- Taiwan
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
big5-eten cp950 MacChineseTrad {big5 aliased to big5-eten}
big5-hkscs
----------------------------------------------------------------
=item Encode::HanExtra -- More Chinese via CPAN
Due to the size concerns, additional Chinese encodings below are
distributed separately on CPAN, under the name Encode::HanExtra.
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
big5ext CMEX's Big5e Extension
big5plus CMEX's Big5+ Extension
cccii Chinese Character Code for Information Interchange
euc-tw EUC (Extended Unix Character)
gb18030 GBK with Traditional Characters
----------------------------------------------------------------
=item Encode::JIS2K -- JIS X 0213 encodings via CPAN
Due to size concerns, additional Japanese encodings below are
distributed separately on CPAN, under the name Encode::JIS2K.
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
euc-jisx0213
shiftjisx0123
iso-2022-jp-3
jis0213-1-raw
jis0213-2-raw
----------------------------------------------------------------
=back
=head2 Miscellaneous encodings
=over 2
=item Encode::EBCDIC
See L<perlebcdic> for details.
----------------------------------------------------------------
cp37
cp500
cp875
cp1026
cp1047
posix-bc
----------------------------------------------------------------
=item Encode::Symbols
For symbols and dingbats.
----------------------------------------------------------------
symbol
dingbats
MacDingbats
AdobeZdingbat
AdobeSymbol
----------------------------------------------------------------
=item Encode::MIME::Header
Strictly speaking, MIME header encoding documented in RFC 2047 is more
of encapsulation than encoding. However, their support in modern
world is imperative so they are supported.
----------------------------------------------------------------
MIME-Header [RFC2047]
MIME-B [RFC2047]
MIME-Q [RFC2047]
----------------------------------------------------------------
=item Encode::Guess
This one is not a name of encoding but a utility that lets you pick up
the most appropriate encoding for a data out of given I<suspects>. See
L<Encode::Guess> for details.
=back
=head1 Unsupported encodings
The following encodings are not supported as yet; some because they
are rarely used, some because of technical difficulties. They may
be supported by external modules via CPAN in the future, however.
=over 2
=item ISO-2022-JP-2 [RFC1554]
Not very popular yet. Needs Unicode Database or equivalent to
implement encode() (because it includes JIS X 0208/0212, KSC5601, and
GB2312 simultaneously, whose code points in Unicode overlap. So you
need to lookup the database to determine to what character set a given
Unicode character should belong).
=item ISO-2022-CN [RFC1922]
Not very popular. Needs CNS 11643-1 and -2 which are not available in
this module. CNS 11643 is supported (via euc-tw) in Encode::HanExtra.
Audrey Tang may add support for this encoding in her module in future.
=item Various HP-UX encodings
The following are unsupported due to the lack of mapping data.
'8' - arabic8, greek8, hebrew8, kana8, thai8, and turkish8
'15' - japanese15, korean15, and roi15
=item Cyrillic encoding ISO-IR-111
Anton Tagunov doubts its usefulness.
=item ISO-8859-8-1 [Hebrew]
None of the Encode team knows Hebrew enough (ISO-8859-8, cp1255 and
MacHebrew are supported because and just because there were mappings
available at L<http://www.unicode.org/>). Contributions welcome.
=item ISIRI 3342, Iran System, ISIRI 2900 [Farsi]
Ditto.
=item Thai encoding TCVN
Ditto.
=item Vietnamese encodings VPS
Though Jungshik Shin has reported that Mozilla supports this encoding,
it was too late before 5.8.0 for us to add it. In the future, it
may be available via a separate module. See
L<http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.uf>
and
L<http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.ut>
if you are interested in helping us.
=item Various Mac encodings
The following are unsupported due to the lack of mapping data.
MacArmenian, MacBengali, MacBurmese, MacEthiopic
MacExtArabic, MacGeorgian, MacKannada, MacKhmer
MacLaotian, MacMalayalam, MacMongolian, MacOriya
MacSinhalese, MacTamil, MacTelugu, MacTibetan
MacVietnamese
The rest which are already available are based upon the vendor mappings
at L<http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> .
=item (Mac) Indic encodings
The maps for the following are available at L<http://www.unicode.org/>
but remain unsupported because those encodings need an algorithmical
approach, currently unsupported by F<enc2xs>:
MacDevanagari
MacGurmukhi
MacGujarati
For details, please see C<Unicode mapping issues and notes:> at
L<http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/DEVANAGA.TXT> .
I believe this issue is prevalent not only for Mac Indics but also in
other Indic encodings, but the above were the only Indic encodings
maps that I could find at L<http://www.unicode.org/> .
=back
=head1 Encoding vs. Charset -- terminology
We are used to using the term (character) I<encoding> and I<character
set> interchangeably. But just as confusing the terms byte and
character is dangerous and the terms should be differentiated when
needed, we need to differentiate I<encoding> and I<character set>.
To understand that, here is a description of how we make computers
grok our characters.
=over 2
=item *
First we start with which characters to include. We call this
collection of characters I<character repertoire>.
=item *
Then we have to give each character a unique ID so your computer can
tell the difference between 'a' and 'A'. This itemized character
repertoire is now a I<character set>.
=item *
If your computer can grow the character set without further
processing, you can go ahead and use it. This is called a I<coded
character set> (CCS) or I<raw character encoding>. ASCII is used this
way for most cases.
=item *
But in many cases, especially multi-byte CJK encodings, you have to
tweak a little more. Your network connection may not accept any data
with the Most Significant Bit set, and your computer may not be able to
tell if a given byte is a whole character or just half of it. So you
have to I<encode> the character set to use it.
A I<character encoding scheme> (CES) determines how to encode a given
character set, or a set of multiple character sets. 7bit ISO-2022 is
an example of a CES. You switch between character sets via I<escape
sequences>.
=back
Technically, or mathematically, speaking, a character set encoded in
such a CES that maps character by character may form a CCS. EUC is such
an example. The CES of EUC is as follows:
=over 2
=item *
Map ASCII unchanged.
=item *
Map such a character set that consists of 94 or 96 powered by N
members by adding 0x80 to each byte.
=item *
You can also use 0x8e and 0x8f to indicate that the following sequence of
characters belongs to yet another character set. To each following byte
is added the value 0x80.
=back
By carefully looking at the encoded byte sequence, you can find that the
byte sequence conforms a unique number. In that sense, EUC is a CCS
generated by a CES above from up to four CCS (complicated?). UTF-8
falls into this category. See L<perlUnicode/"UTF-8"> to find out how
UTF-8 maps Unicode to a byte sequence.
You may also have found out by now why 7bit ISO-2022 cannot comprise
a CCS. If you look at a byte sequence \x21\x21, you can't tell if
it is two !'s or IDEOGRAPHIC SPACE. EUC maps the latter to \xA1\xA1
so you have no trouble differentiating between "!!". and S<" ">.
=head1 Encoding Classification (by Anton Tagunov and Dan Kogai)
This section tries to classify the supported encodings by their
applicability for information exchange over the Internet and to
choose the most suitable aliases to name them in the context of
such communication.
=over 2
=item *
To (en|de)code encodings marked by C<(**)>, you need
C<Encode::HanExtra>, available from CPAN.
=back
Encoding names
US-ASCII UTF-8 ISO-8859-* KOI8-R
Shift_JIS EUC-JP ISO-2022-JP ISO-2022-JP-1
EUC-KR Big5 GB2312
are registered with IANA as preferred MIME names and may
be used over the Internet.
C<Shift_JIS> has been officialized by JIS X 0208:1997.
L<Microsoft-related naming mess> gives details.
C<GB2312> is the IANA name for C<EUC-CN>.
See L<Microsoft-related naming mess> for details.
C<GB_2312-80> I<raw> encoding is available as C<gb2312-raw>
with Encode. See L<Encode::CN> for details.
EUC-CN
KOI8-U [RFC2319]
have not been registered with IANA (as of March 2002) but
seem to be supported by major web browsers.
The IANA name for C<EUC-CN> is C<GB2312>.
KS_C_5601-1987
is heavily misused.
See L<Microsoft-related naming mess> for details.
C<KS_C_5601-1987> I<raw> encoding is available as C<kcs5601-raw>
with Encode. See L<Encode::KR> for details.
UTF-16 UTF-16BE UTF-16LE
are IANA-registered C<charset>s. See [RFC 2781] for details.
Jungshik Shin reports that UTF-16 with a BOM is well accepted
by MS IE 5/6 and NS 4/6. Beware however that
=over 2
=item *
C<UTF-16> support in any software you're going to be
using/interoperating with has probably been less tested
then C<UTF-8> support
=item *
C<UTF-8> coded data seamlessly passes traditional
command piping (C<cat>, C<more>, etc.) while C<UTF-16> coded
data is likely to cause confusion (with its zero bytes,
for example)
=item *
it is beyond the power of words to describe the way HTML browsers
encode non-C<ASCII> form data. To get a general impression, visit
L<http://www.alanflavell.org.uk/charset/form-i18n.html>.
While encoding of form data has stabilized for C<UTF-8> encoded pages
(at least IE 5/6, NS 6, and Opera 6 behave consistently), be sure to
expect fun (and cross-browser discrepancies) with C<UTF-16> encoded
pages!
=back
The rule of thumb is to use C<UTF-8> unless you know what
you're doing and unless you really benefit from using C<UTF-16>.
ISO-IR-165 [RFC1345]
VISCII
GB 12345
GB 18030 (**) (see links below)
EUC-TW (**)
are totally valid encodings but not registered at IANA.
The names under which they are listed here are probably the
most widely-known names for these encodings and are recommended
names.
BIG5PLUS (**)
is a proprietary name.
=head2 Microsoft-related naming mess
Microsoft products misuse the following names:
=over 2
=item KS_C_5601-1987
Microsoft extension to C<EUC-KR>.
Proper names: C<CP949>, C<UHC>, C<x-windows-949> (as used by Mozilla).
See L<http://lists.w3.org/Archives/Public/ietf-charsets/2001AprJun/0033.html>
for details.
Encode aliases C<KS_C_5601-1987> to C<cp949> to reflect this common
misusage. I<Raw> C<KS_C_5601-1987> encoding is available as
C<kcs5601-raw>.
See L<Encode::KR> for details.
=item GB2312
Microsoft extension to C<EUC-CN>.
Proper names: C<CP936>, C<GBK>.
C<GB2312> has been registered in the C<EUC-CN> meaning at
IANA. This has partially repaired the situation: Microsoft's
C<GB2312> has become a superset of the official C<GB2312>.
Encode aliases C<GB2312> to C<euc-cn> in full agreement with
IANA registration. C<cp936> is supported separately.
I<Raw> C<GB_2312-80> encoding is available as C<gb2312-raw>.
See L<Encode::CN> for details.
=item Big5
Microsoft extension to C<Big5>.
Proper name: C<CP950>.
Encode separately supports C<Big5> and C<cp950>.
=item Shift_JIS
Microsoft's understanding of C<Shift_JIS>.
JIS has not endorsed the full Microsoft standard however.
The official C<Shift_JIS> includes only JIS X 0201 and JIS X 0208
character sets, while Microsoft has always used C<Shift_JIS>
to encode a wider character repertoire. See C<IANA> registration for
C<Windows-31J>.
As a historical predecessor, Microsoft's variant
probably has more rights for the name, though it may be objected
that Microsoft shouldn't have used JIS as part of the name
in the first place.
Unambiguous name: C<CP932>. C<IANA> name (also used by Mozilla, and
provided as an alias by Encode): C<Windows-31J>.
Encode separately supports C<Shift_JIS> and C<cp932>.
=back
=head1 Glossary
=over 2
=item character repertoire
A collection of unique characters. A I<character> set in the strictest
sense. At this stage, characters are not numbered.
=item coded character set (CCS)
A character set that is mapped in a way computers can use directly.
Many character encodings, including EUC, fall in this category.
=item character encoding scheme (CES)
An algorithm to map a character set to a byte sequence. You don't
have to be able to tell which character set a given byte sequence
belongs. 7-bit ISO-2022 is a CES but it cannot be a CCS. EUC is an
example of being both a CCS and CES.
=item charset (in MIME context)
has long been used in the meaning of C<encoding>, CES.
While the word combination C<character set> has lost this meaning
in MIME context since [RFC 2130], the C<charset> abbreviation has
retained it. This is how [RFC 2277] and [RFC 2278] bless C<charset>:
This document uses the term "charset" to mean a set of rules for
mapping from a sequence of octets to a sequence of characters, such
as the combination of a coded character set and a character encoding
scheme; this is also what is used as an identifier in MIME "charset="
parameters, and registered in the IANA charset registry ... (Note
that this is NOT a term used by other standards bodies, such as ISO).
[RFC 2277]
=item EUC
Extended Unix Character. See ISO-2022.
=item ISO-2022
A CES that was carefully designed to coexist with ASCII. There are a 7
bit version and an 8 bit version.
The 7 bit version switches character set via escape sequence so it
cannot form a CCS. Since this is more difficult to handle in programs
than the 8 bit version, the 7 bit version is not very popular except for
iso-2022-jp, the I<de facto> standard CES for e-mails.
The 8 bit version can form a CCS. EUC and ISO-8859 are two examples
thereof. Pre-5.6 perl could use them as string literals.
=item UCS
Short for I<Universal Character Set>. When you say just UCS, it means
I<Unicode>.
=item UCS-2
ISO/IEC 10646 encoding form: Universal Character Set coded in two
octets.
=item Unicode
A character set that aims to include all character repertoires of the
world. Many character sets in various national as well as industrial
standards have become, in a way, just subsets of Unicode.
=item UTF
Short for I<Unicode Transformation Format>. Determines how to map a
Unicode character into a byte sequence.
=item UTF-16
A UTF in 16-bit encoding. Can either be in big endian or little
endian. The big endian version is called UTF-16BE (equal to UCS-2 +
surrogate support) and the little endian version is called UTF-16LE.
=back
=head1 See Also
L<Encode>,
L<Encode::Byte>,
L<Encode::CN>, L<Encode::JP>, L<Encode::KR>, L<Encode::TW>,
L<Encode::EBCDIC>, L<Encode::Symbol>
L<Encode::MIME::Header>, L<Encode::Guess>
=head1 References
=over 2
=item ECMA
European Computer Manufacturers Association
L<http://www.ecma.ch>
=over 2
=item ECMA-035 (eq C<ISO-2022>)
L<http://www.ecma.ch/ecma1/STAND/ECMA-035.HTM>
The specification of ISO-2022 is available from the link above.
=back
=item IANA
Internet Assigned Numbers Authority
L<http://www.iana.org/>
=over 2
=item Assigned Charset Names by IANA
L<http://www.iana.org/assignments/character-sets>
Most of the C<canonical names> in Encode derive from this list
so you can directly apply the string you have extracted from MIME
header of mails and web pages.
=back
=item ISO
International Organization for Standardization
L<http://www.iso.ch/>
=item RFC
Request For Comments -- need I say more?
L<http://www.rfc-editor.org/>, L<http://www.ietf.org/rfc.html>,
L<http://www.faqs.org/rfcs/>
=item UC
Unicode Consortium
L<http://www.unicode.org/>
=over 2
=item Unicode Glossary
L<http://www.unicode.org/glossary/>
The glossary of this document is based upon this site.
=back
=back
=head2 Other Notable Sites
=over 2
=item czyborra.com
L<http://czyborra.com/>
Contains a lot of useful information, especially gory details of ISO
vs. vendor mappings.
=item CJK.inf
L<http://examples.oreilly.com/cjkvinfo/doc/cjk.inf>
Somewhat obsolete (last update in 1996), but still useful. Also try
L<ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/pdf/GB18030_Summary.pdf>
You will find brief info on C<EUC-CN>, C<GBK> and mostly on C<GB 18030>.
=item Jungshik Shin's Hangul FAQ
L<http://jshin.net/faq>
And especially its subject 8.
L<http://jshin.net/faq/qa8.html>
A comprehensive overview of the Korean (C<KS *>) standards.
=item debian.org: "Introduction to i18n"
A brief description for most of the mentioned CJK encodings is
contained in
L<http://www.debian.org/doc/manuals/intro-i18n/ch-codes.en.html>
=back
=head2 Offline sources
=over 2
=item C<CJKV Information Processing> by Ken Lunde
CJKV Information Processing
1999 O'Reilly & Associates, ISBN : 1-56592-224-7
The modern successor of C<CJK.inf>.
Features a comprehensive coverage of CJKV character sets and
encodings along with many other issues faced by anyone trying
to better support CJKV languages/scripts in all the areas of
information processing.
To purchase this book, visit
L<http://oreilly.com/catalog/9780596514471/>
or your favourite bookstore.
=back
=cut
Encode/JP/JIS7.pm 0000644 00000010246 15033552504 0007331 0 ustar 00 package Encode::JP::JIS7;
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 2.8 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use Encode qw(:fallbacks);
for my $name ( '7bit-jis', 'iso-2022-jp', 'iso-2022-jp-1' ) {
my $h2z = ( $name eq '7bit-jis' ) ? 0 : 1;
my $jis0212 = ( $name eq 'iso-2022-jp' ) ? 0 : 1;
my $obj = bless {
Name => $name,
h2z => $h2z,
jis0212 => $jis0212,
} => __PACKAGE__;
Encode::define_encoding($obj, $name);
}
use parent qw(Encode::Encoding);
# we override this to 1 so PerlIO works
sub needs_lines { 1 }
use Encode::CJKConstants qw(:all);
#
# decode is identical for all 2022 variants
#
sub decode($$;$) {
my ( $obj, $str, $chk ) = @_;
return undef unless defined $str;
my $residue = '';
if ($chk) {
$str =~ s/([^\x00-\x7f].*)$//so and $residue = $1;
}
$residue .= jis_euc( \$str );
$_[1] = $residue if $chk;
return Encode::decode( 'euc-jp', $str, FB_PERLQQ );
}
#
# encode is different
#
sub encode($$;$) {
require Encode::JP::H2Z;
my ( $obj, $utf8, $chk ) = @_;
return undef unless defined $utf8;
# empty the input string in the stack so perlio is ok
$_[1] = '' if $chk;
my ( $h2z, $jis0212 ) = @$obj{qw(h2z jis0212)};
my $octet = Encode::encode( 'euc-jp', $utf8, $chk || 0 );
$h2z and &Encode::JP::H2Z::h2z( \$octet );
euc_jis( \$octet, $jis0212 );
return $octet;
}
#
# cat_decode
#
my $re_scan_jis_g = qr{
\G ( ($RE{JIS_0212}) | $RE{JIS_0208} |
($RE{ISO_ASC}) | ($RE{JIS_KANA}) | )
([^\e]*)
}x;
sub cat_decode { # ($obj, $dst, $src, $pos, $trm, $chk)
my ( $obj, undef, undef, $pos, $trm ) = @_; # currently ignores $chk
my ( $rdst, $rsrc, $rpos ) = \@_[ 1, 2, 3 ];
local ${^ENCODING};
use bytes;
my $opos = pos($$rsrc);
pos($$rsrc) = $pos;
while ( $$rsrc =~ /$re_scan_jis_g/gc ) {
my ( $esc, $esc_0212, $esc_asc, $esc_kana, $chunk ) =
( $1, $2, $3, $4, $5 );
unless ($chunk) { $esc or last; next; }
if ( $esc && !$esc_asc ) {
$chunk =~ tr/\x21-\x7e/\xa1-\xfe/;
if ($esc_kana) {
$chunk =~ s/([\xa1-\xdf])/\x8e$1/og;
}
elsif ($esc_0212) {
$chunk =~ s/([\xa1-\xfe][\xa1-\xfe])/\x8f$1/og;
}
$chunk = Encode::decode( 'euc-jp', $chunk, 0 );
}
elsif ( ( my $npos = index( $chunk, $trm ) ) >= 0 ) {
$$rdst .= substr( $chunk, 0, $npos + length($trm) );
$$rpos += length($esc) + $npos + length($trm);
pos($$rsrc) = $opos;
return 1;
}
$$rdst .= $chunk;
$$rpos = pos($$rsrc);
}
$$rpos = pos($$rsrc);
pos($$rsrc) = $opos;
return '';
}
# JIS<->EUC
my $re_scan_jis = qr{
(?:($RE{JIS_0212})|$RE{JIS_0208}|($RE{ISO_ASC})|($RE{JIS_KANA}))([^\e]*)
}x;
sub jis_euc {
local ${^ENCODING};
my $r_str = shift;
$$r_str =~ s($re_scan_jis)
{
my ($esc_0212, $esc_asc, $esc_kana, $chunk) =
($1, $2, $3, $4);
if (!$esc_asc) {
$chunk =~ tr/\x21-\x7e/\xa1-\xfe/;
if ($esc_kana) {
$chunk =~ s/([\xa1-\xdf])/\x8e$1/og;
}
elsif ($esc_0212) {
$chunk =~ s/([\xa1-\xfe][\xa1-\xfe])/\x8f$1/og;
}
}
$chunk;
}geox;
my ($residue) = ( $$r_str =~ s/(\e.*)$//so );
return $residue;
}
sub euc_jis {
no warnings qw(uninitialized);
local ${^ENCODING};
my $r_str = shift;
my $jis0212 = shift;
$$r_str =~ s{
((?:$RE{EUC_C})+|(?:$RE{EUC_KANA})+|(?:$RE{EUC_0212})+)
}{
my $chunk = $1;
my $esc =
( $chunk =~ tr/\x8E//d ) ? $ESC{KANA} :
( $chunk =~ tr/\x8F//d ) ? $ESC{JIS_0212} :
$ESC{JIS_0208};
if ($esc eq $ESC{JIS_0212} && !$jis0212){
# fallback to '?'
$chunk =~ tr/\xA1-\xFE/\x3F/;
}else{
$chunk =~ tr/\xA1-\xFE/\x21-\x7E/;
}
$esc . $chunk . $ESC{ASC};
}geox;
$$r_str =~ s/\Q$ESC{ASC}\E
(\Q$ESC{KANA}\E|\Q$ESC{JIS_0212}\E|\Q$ESC{JIS_0208}\E)/$1/gox;
$$r_str;
}
1;
__END__
=head1 NAME
Encode::JP::JIS7 -- internally used by Encode::JP
=cut
Encode/JP/H2Z.pm 0000644 00000012026 15033552504 0007216 0 ustar 00 #
# $Id: H2Z.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $
#
package Encode::JP::H2Z;
use strict;
use warnings;
our $RCSID = q$Id: H2Z.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $;
our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use Encode::CJKConstants qw(:all);
use vars qw(%_D2Z $_PAT_D2Z
%_Z2D $_PAT_Z2D
%_H2Z $_PAT_H2Z
%_Z2H $_PAT_Z2H);
%_H2Z = (
"\x8e\xa1" => "\xa1\xa3", #��
"\x8e\xa2" => "\xa1\xd6", #��
"\x8e\xa3" => "\xa1\xd7", #��
"\x8e\xa4" => "\xa1\xa2", #��
"\x8e\xa5" => "\xa1\xa6", #��
"\x8e\xa6" => "\xa5\xf2", #��
"\x8e\xa7" => "\xa5\xa1", #��
"\x8e\xa8" => "\xa5\xa3", #��
"\x8e\xa9" => "\xa5\xa5", #��
"\x8e\xaa" => "\xa5\xa7", #��
"\x8e\xab" => "\xa5\xa9", #��
"\x8e\xac" => "\xa5\xe3", #��
"\x8e\xad" => "\xa5\xe5", #��
"\x8e\xae" => "\xa5\xe7", #��
"\x8e\xaf" => "\xa5\xc3", #��
"\x8e\xb0" => "\xa1\xbc", #��
"\x8e\xb1" => "\xa5\xa2", #��
"\x8e\xb2" => "\xa5\xa4", #��
"\x8e\xb3" => "\xa5\xa6", #��
"\x8e\xb4" => "\xa5\xa8", #��
"\x8e\xb5" => "\xa5\xaa", #��
"\x8e\xb6" => "\xa5\xab", #��
"\x8e\xb7" => "\xa5\xad", #��
"\x8e\xb8" => "\xa5\xaf", #��
"\x8e\xb9" => "\xa5\xb1", #��
"\x8e\xba" => "\xa5\xb3", #��
"\x8e\xbb" => "\xa5\xb5", #��
"\x8e\xbc" => "\xa5\xb7", #��
"\x8e\xbd" => "\xa5\xb9", #��
"\x8e\xbe" => "\xa5\xbb", #��
"\x8e\xbf" => "\xa5\xbd", #��
"\x8e\xc0" => "\xa5\xbf", #��
"\x8e\xc1" => "\xa5\xc1", #��
"\x8e\xc2" => "\xa5\xc4", #��
"\x8e\xc3" => "\xa5\xc6", #��
"\x8e\xc4" => "\xa5\xc8", #��
"\x8e\xc5" => "\xa5\xca", #��
"\x8e\xc6" => "\xa5\xcb", #��
"\x8e\xc7" => "\xa5\xcc", #��
"\x8e\xc8" => "\xa5\xcd", #��
"\x8e\xc9" => "\xa5\xce", #��
"\x8e\xca" => "\xa5\xcf", #��
"\x8e\xcb" => "\xa5\xd2", #��
"\x8e\xcc" => "\xa5\xd5", #��
"\x8e\xcd" => "\xa5\xd8", #��
"\x8e\xce" => "\xa5\xdb", #��
"\x8e\xcf" => "\xa5\xde", #��
"\x8e\xd0" => "\xa5\xdf", #��
"\x8e\xd1" => "\xa5\xe0", #��
"\x8e\xd2" => "\xa5\xe1", #��
"\x8e\xd3" => "\xa5\xe2", #��
"\x8e\xd4" => "\xa5\xe4", #��
"\x8e\xd5" => "\xa5\xe6", #��
"\x8e\xd6" => "\xa5\xe8", #��
"\x8e\xd7" => "\xa5\xe9", #��
"\x8e\xd8" => "\xa5\xea", #��
"\x8e\xd9" => "\xa5\xeb", #��
"\x8e\xda" => "\xa5\xec", #��
"\x8e\xdb" => "\xa5\xed", #��
"\x8e\xdc" => "\xa5\xef", #��
"\x8e\xdd" => "\xa5\xf3", #��
"\x8e\xde" => "\xa1\xab", #��
"\x8e\xdf" => "\xa1\xac", #��
);
%_D2Z = (
"\x8e\xb6\x8e\xde" => "\xa5\xac", #��
"\x8e\xb7\x8e\xde" => "\xa5\xae", #��
"\x8e\xb8\x8e\xde" => "\xa5\xb0", #��
"\x8e\xb9\x8e\xde" => "\xa5\xb2", #��
"\x8e\xba\x8e\xde" => "\xa5\xb4", #��
"\x8e\xbb\x8e\xde" => "\xa5\xb6", #��
"\x8e\xbc\x8e\xde" => "\xa5\xb8", #��
"\x8e\xbd\x8e\xde" => "\xa5\xba", #��
"\x8e\xbe\x8e\xde" => "\xa5\xbc", #��
"\x8e\xbf\x8e\xde" => "\xa5\xbe", #��
"\x8e\xc0\x8e\xde" => "\xa5\xc0", #��
"\x8e\xc1\x8e\xde" => "\xa5\xc2", #��
"\x8e\xc2\x8e\xde" => "\xa5\xc5", #��
"\x8e\xc3\x8e\xde" => "\xa5\xc7", #��
"\x8e\xc4\x8e\xde" => "\xa5\xc9", #��
"\x8e\xca\x8e\xde" => "\xa5\xd0", #��
"\x8e\xcb\x8e\xde" => "\xa5\xd3", #��
"\x8e\xcc\x8e\xde" => "\xa5\xd6", #��
"\x8e\xcd\x8e\xde" => "\xa5\xd9", #��
"\x8e\xce\x8e\xde" => "\xa5\xdc", #��
"\x8e\xca\x8e\xdf" => "\xa5\xd1", #��
"\x8e\xcb\x8e\xdf" => "\xa5\xd4", #��
"\x8e\xcc\x8e\xdf" => "\xa5\xd7", #��
"\x8e\xcd\x8e\xdf" => "\xa5\xda", #��
"\x8e\xce\x8e\xdf" => "\xa5\xdd", #��
"\x8e\xb3\x8e\xde" => "\xa5\xf4", #��
);
# init only once;
#$_PAT_D2Z = join("|", keys %_D2Z);
#$_PAT_H2Z = join("|", keys %_H2Z);
%_Z2H = reverse %_H2Z;
%_Z2D = reverse %_D2Z;
#$_PAT_Z2H = join("|", keys %_Z2H);
#$_PAT_Z2D = join("|", keys %_Z2D);
sub h2z {
no warnings qw(uninitialized);
my $r_str = shift;
my ($keep_dakuten) = @_;
my $n = 0;
unless ($keep_dakuten) {
$n = (
$$r_str =~ s(
($RE{EUC_KANA}
(?:\x8e[\xde\xdf])?)
){
my $str = $1;
$_D2Z{$str} || $_H2Z{$str} ||
# in case dakuten and handakuten are side-by-side!
$_H2Z{substr($str,0,2)} . $_H2Z{substr($str,2,2)};
}eogx
);
}
else {
$n = (
$$r_str =~ s(
($RE{EUC_KANA})
){
$_H2Z{$1};
}eogx
);
}
$n;
}
sub z2h {
my $r_str = shift;
my $n = (
$$r_str =~ s(
($RE{EUC_C}|$RE{EUC_0212}|$RE{EUC_KANA})
){
$_Z2D{$1} || $_Z2H{$1} || $1;
}eogx
);
$n;
}
1;
__END__
=head1 NAME
Encode::JP::H2Z -- internally used by Encode::JP::2022_JP*
=cut
Encode/README.e2x 0000644 00000001051 15033552504 0007315 0 ustar 00 Encode::$_Name_ version 0.1
========
NAME
Encode::$_Name_ - <describe encoding>
SYNOPSIS
use Encode::$_Name_;
#<put more words here>
ABSTRACT
<fill this in>
INSTALLATION
To install this module type the following:
perl Makefile.PL
make
make test
make install
DEPENDENCIES
This module requires perl version 5.7.3 or later.
COPYRIGHT AND LICENCE
Copyright (C) 2002 Your Name <your@address.domain>
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
Encode/CN/HZ.pm 0000644 00000013704 15033552504 0007127 0 ustar 00 package Encode::CN::HZ;
use strict;
use warnings;
use utf8 ();
use vars qw($VERSION);
$VERSION = do { my @r = ( q$Revision: 2.10 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use Encode qw(:fallbacks);
use parent qw(Encode::Encoding);
__PACKAGE__->Define('hz');
# HZ is a combination of ASCII and escaped GB, so we implement it
# with the GB2312(raw) encoding here. Cf. RFCs 1842 & 1843.
# not ported for EBCDIC. Which should be used, "~" or "\x7E"?
sub needs_lines { 1 }
sub decode ($$;$) {
my ( $obj, $str, $chk ) = @_;
return undef unless defined $str;
my $GB = Encode::find_encoding('gb2312-raw');
my $ret = substr($str, 0, 0); # to propagate taintedness
my $in_ascii = 1; # default mode is ASCII.
while ( length $str ) {
if ($in_ascii) { # ASCII mode
if ( $str =~ s/^([\x00-\x7D\x7F]+)// ) { # no '~' => ASCII
$ret .= $1;
# EBCDIC should need ascii2native, but not ported.
}
elsif ( $str =~ s/^\x7E\x7E// ) { # escaped tilde
$ret .= '~';
}
elsif ( $str =~ s/^\x7E\cJ// ) { # '\cJ' == LF in ASCII
1; # no-op
}
elsif ( $str =~ s/^\x7E\x7B// ) { # '~{'
$in_ascii = 0; # to GB
}
else { # encounters an invalid escape, \x80 or greater
last;
}
}
else { # GB mode; the byte ranges are as in RFC 1843.
no warnings 'uninitialized';
if ( $str =~ s/^((?:[\x21-\x77][\x21-\x7E])+)// ) {
my $prefix = $1;
$ret .= $GB->decode( $prefix, $chk );
}
elsif ( $str =~ s/^\x7E\x7D// ) { # '~}'
$in_ascii = 1;
}
else { # invalid
last;
}
}
}
$_[1] = '' if $chk; # needs_lines guarantees no partial character
return $ret;
}
sub cat_decode {
my ( $obj, undef, $src, $pos, $trm, $chk ) = @_;
my ( $rdst, $rsrc, $rpos ) = \@_[ 1 .. 3 ];
my $GB = Encode::find_encoding('gb2312-raw');
my $ret = '';
my $in_ascii = 1; # default mode is ASCII.
my $ini_pos = pos($$rsrc);
substr( $src, 0, $pos ) = '';
my $ini_len = bytes::length($src);
# $trm is the first of the pair '~~', then 2nd tilde is to be removed.
# XXX: Is better C<$src =~ s/^\x7E// or die if ...>?
$src =~ s/^\x7E// if $trm eq "\x7E";
while ( length $src ) {
my $now;
if ($in_ascii) { # ASCII mode
if ( $src =~ s/^([\x00-\x7D\x7F])// ) { # no '~' => ASCII
$now = $1;
}
elsif ( $src =~ s/^\x7E\x7E// ) { # escaped tilde
$now = '~';
}
elsif ( $src =~ s/^\x7E\cJ// ) { # '\cJ' == LF in ASCII
next;
}
elsif ( $src =~ s/^\x7E\x7B// ) { # '~{'
$in_ascii = 0; # to GB
next;
}
else { # encounters an invalid escape, \x80 or greater
last;
}
}
else { # GB mode; the byte ranges are as in RFC 1843.
if ( $src =~ s/^((?:[\x21-\x77][\x21-\x7F])+)// ) {
$now = $GB->decode( $1, $chk );
}
elsif ( $src =~ s/^\x7E\x7D// ) { # '~}'
$in_ascii = 1;
next;
}
else { # invalid
last;
}
}
next if !defined $now;
$ret .= $now;
if ( $now eq $trm ) {
$$rdst .= $ret;
$$rpos = $ini_pos + $pos + $ini_len - bytes::length($src);
pos($$rsrc) = $ini_pos;
return 1;
}
}
$$rdst .= $ret;
$$rpos = $ini_pos + $pos + $ini_len - bytes::length($src);
pos($$rsrc) = $ini_pos;
return ''; # terminator not found
}
sub encode($$;$) {
my ( $obj, $str, $chk ) = @_;
return undef unless defined $str;
my $GB = Encode::find_encoding('gb2312-raw');
my $ret = substr($str, 0, 0); # to propagate taintedness;
my $in_ascii = 1; # default mode is ASCII.
no warnings 'utf8'; # $str may be malformed UTF8 at the end of a chunk.
while ( length $str ) {
if ( $str =~ s/^([[:ascii:]]+)// ) {
my $tmp = $1;
$tmp =~ s/~/~~/g; # escapes tildes
if ( !$in_ascii ) {
$ret .= "\x7E\x7D"; # '~}'
$in_ascii = 1;
}
$ret .= pack 'a*', $tmp; # remove UTF8 flag.
}
elsif ( $str =~ s/(.)// ) {
my $s = $1;
my $tmp = $GB->encode( $s, $chk || 0 );
last if !defined $tmp;
if ( length $tmp == 2 ) { # maybe a valid GB char (XXX)
if ($in_ascii) {
$ret .= "\x7E\x7B"; # '~{'
$in_ascii = 0;
}
$ret .= $tmp;
}
elsif ( length $tmp ) { # maybe FALLBACK in ASCII (XXX)
if ( !$in_ascii ) {
$ret .= "\x7E\x7D"; # '~}'
$in_ascii = 1;
}
$ret .= $tmp;
}
}
else { # if $str is malformed UTF8 *and* if length $str != 0.
last;
}
}
$_[1] = $str if $chk;
# The state at the end of the chunk is discarded, even if in GB mode.
# That results in the combination of GB-OUT and GB-IN, i.e. "~}~{".
# Parhaps it is harmless, but further investigations may be required...
if ( !$in_ascii ) {
$ret .= "\x7E\x7D"; # '~}'
$in_ascii = 1;
}
utf8::encode($ret); # https://rt.cpan.org/Ticket/Display.html?id=35120
return $ret;
}
1;
__END__
=head1 NAME
Encode::CN::HZ -- internally used by Encode::CN
=cut
Encode/MIME/Name.pm 0000644 00000007355 15033552504 0007722 0 ustar 00 package Encode::MIME::Name;
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 1.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
# NOTE: This table must be 1:1 mapping
our %MIME_NAME_OF = (
'AdobeStandardEncoding' => 'Adobe-Standard-Encoding',
'AdobeSymbol' => 'Adobe-Symbol-Encoding',
'ascii' => 'US-ASCII',
'big5-hkscs' => 'Big5-HKSCS',
'cp1026' => 'IBM1026',
'cp1047' => 'IBM1047',
'cp1250' => 'windows-1250',
'cp1251' => 'windows-1251',
'cp1252' => 'windows-1252',
'cp1253' => 'windows-1253',
'cp1254' => 'windows-1254',
'cp1255' => 'windows-1255',
'cp1256' => 'windows-1256',
'cp1257' => 'windows-1257',
'cp1258' => 'windows-1258',
'cp37' => 'IBM037',
'cp424' => 'IBM424',
'cp437' => 'IBM437',
'cp500' => 'IBM500',
'cp775' => 'IBM775',
'cp850' => 'IBM850',
'cp852' => 'IBM852',
'cp855' => 'IBM855',
'cp857' => 'IBM857',
'cp860' => 'IBM860',
'cp861' => 'IBM861',
'cp862' => 'IBM862',
'cp863' => 'IBM863',
'cp864' => 'IBM864',
'cp865' => 'IBM865',
'cp866' => 'IBM866',
'cp869' => 'IBM869',
'cp936' => 'GBK',
'euc-cn' => 'EUC-CN',
'euc-jp' => 'EUC-JP',
'euc-kr' => 'EUC-KR',
#'gb2312-raw' => 'GB2312', # no, you're wrong, I18N::Charset
'hp-roman8' => 'hp-roman8',
'hz' => 'HZ-GB-2312',
'iso-2022-jp' => 'ISO-2022-JP',
'iso-2022-jp-1' => 'ISO-2022-JP-1',
'iso-2022-kr' => 'ISO-2022-KR',
'iso-8859-1' => 'ISO-8859-1',
'iso-8859-10' => 'ISO-8859-10',
'iso-8859-13' => 'ISO-8859-13',
'iso-8859-14' => 'ISO-8859-14',
'iso-8859-15' => 'ISO-8859-15',
'iso-8859-16' => 'ISO-8859-16',
'iso-8859-2' => 'ISO-8859-2',
'iso-8859-3' => 'ISO-8859-3',
'iso-8859-4' => 'ISO-8859-4',
'iso-8859-5' => 'ISO-8859-5',
'iso-8859-6' => 'ISO-8859-6',
'iso-8859-7' => 'ISO-8859-7',
'iso-8859-8' => 'ISO-8859-8',
'iso-8859-9' => 'ISO-8859-9',
#'jis0201-raw' => 'JIS_X0201',
#'jis0208-raw' => 'JIS_C6226-1983',
#'jis0212-raw' => 'JIS_X0212-1990',
'koi8-r' => 'KOI8-R',
'koi8-u' => 'KOI8-U',
#'ksc5601-raw' => 'KS_C_5601-1987',
'shiftjis' => 'Shift_JIS',
'UTF-16' => 'UTF-16',
'UTF-16BE' => 'UTF-16BE',
'UTF-16LE' => 'UTF-16LE',
'UTF-32' => 'UTF-32',
'UTF-32BE' => 'UTF-32BE',
'UTF-32LE' => 'UTF-32LE',
'UTF-7' => 'UTF-7',
'utf-8-strict' => 'UTF-8',
'viscii' => 'VISCII',
);
# NOTE: %MIME_NAME_OF is still 1:1 mapping
our %ENCODE_NAME_OF = map { uc $MIME_NAME_OF{$_} => $_ } keys %MIME_NAME_OF;
# Add additional 1:N mapping
$MIME_NAME_OF{'utf8'} = 'UTF-8';
sub get_mime_name($) { $MIME_NAME_OF{$_[0]} };
sub get_encode_name($) { $ENCODE_NAME_OF{uc $_[0]} };
1;
__END__
=head1 NAME
Encode::MIME::NAME -- internally used by Encode
=head1 SEE ALSO
L<I18N::Charset>
=cut
Encode/MIME/Header/ISO_2022_JP.pm 0000644 00000006200 15033552504 0011706 0 ustar 00 package Encode::MIME::Header::ISO_2022_JP;
use strict;
use warnings;
use parent qw(Encode::MIME::Header);
my $obj =
bless { decode_b => '1', decode_q => '1', encode => 'B', bpl => 76, Name => 'MIME-Header-ISO_2022_JP' } =>
__PACKAGE__;
Encode::define_encoding($obj, 'MIME-Header-ISO_2022_JP');
use constant HEAD => '=?ISO-2022-JP?B?';
use constant TAIL => '?=';
use Encode::CJKConstants qw(%RE);
our $VERSION = do { my @r = ( q$Revision: 1.9 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
# I owe the below codes totally to
# Jcode by Dan Kogai & http://www.din.or.jp/~ohzaki/perl.htm#JP_Base64
sub encode {
my $self = shift;
my $str = shift;
return undef unless defined $str;
utf8::encode($str) if ( Encode::is_utf8($str) );
Encode::from_to( $str, 'utf8', 'euc-jp' );
my ($trailing_crlf) = ( $str =~ /(\n|\r|\x0d\x0a)$/o );
$str = _mime_unstructured_header( $str, $self->{bpl} );
not $trailing_crlf and $str =~ s/(\n|\r|\x0d\x0a)$//o;
return $str;
}
sub _mime_unstructured_header {
my ( $oldheader, $bpl ) = @_;
my $crlf = $oldheader =~ /\n$/;
my ( $header, @words, @wordstmp, $i ) = ('');
$oldheader =~ s/\s+$//;
@wordstmp = split /\s+/, $oldheader;
for ( $i = 0 ; $i < $#wordstmp ; $i++ ) {
if ( $wordstmp[$i] !~ /^[\x21-\x7E]+$/
and $wordstmp[ $i + 1 ] !~ /^[\x21-\x7E]+$/ )
{
$wordstmp[ $i + 1 ] = "$wordstmp[$i] $wordstmp[$i + 1]";
}
else {
push( @words, $wordstmp[$i] );
}
}
push( @words, $wordstmp[-1] );
for my $word (@words) {
if ( $word =~ /^[\x21-\x7E]+$/ ) {
$header =~ /(?:.*\n)*(.*)/;
if ( length($1) + length($word) > $bpl ) {
$header .= "\n $word";
}
else {
$header .= $word;
}
}
else {
$header = _add_encoded_word( $word, $header, $bpl );
}
$header =~ /(?:.*\n)*(.*)/;
if ( length($1) == $bpl ) {
$header .= "\n ";
}
else {
$header .= ' ';
}
}
$header =~ s/\n? $//mg;
$crlf ? "$header\n" : $header;
}
sub _add_encoded_word {
my ( $str, $line, $bpl ) = @_;
my $result = '';
while ( length($str) ) {
my $target = $str;
$str = '';
if (
length($line) + 22 +
( $target =~ /^(?:$RE{EUC_0212}|$RE{EUC_C})/o ) * 8 > $bpl )
{
$line =~ s/[ \t\n\r]*$/\n/;
$result .= $line;
$line = ' ';
}
while (1) {
my $iso_2022_jp = $target;
Encode::from_to( $iso_2022_jp, 'euc-jp', 'iso-2022-jp' );
my $encoded =
HEAD . MIME::Base64::encode_base64( $iso_2022_jp, '' ) . TAIL;
if ( length($encoded) + length($line) > $bpl ) {
$target =~
s/($RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C}|$RE{ASCII})$//o;
$str = $1 . $str;
}
else {
$line .= $encoded;
last;
}
}
}
$result . $line;
}
1;
__END__
Encode/MIME/Header.pm 0000644 00000040427 15033552504 0010227 0 ustar 00 package Encode::MIME::Header;
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 2.28 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use Carp ();
use Encode ();
use MIME::Base64 ();
my %seed = (
decode_b => 1, # decodes 'B' encoding ?
decode_q => 1, # decodes 'Q' encoding ?
encode => 'B', # encode with 'B' or 'Q' ?
charset => 'UTF-8', # encode charset
bpl => 75, # bytes per line
);
my @objs;
push @objs, bless {
%seed,
Name => 'MIME-Header',
} => __PACKAGE__;
push @objs, bless {
%seed,
decode_q => 0,
Name => 'MIME-B',
} => __PACKAGE__;
push @objs, bless {
%seed,
decode_b => 0,
encode => 'Q',
Name => 'MIME-Q',
} => __PACKAGE__;
Encode::define_encoding($_, $_->{Name}) foreach @objs;
use parent qw(Encode::Encoding);
sub needs_lines { 1 }
sub perlio_ok { 0 }
# RFC 2047 and RFC 2231 grammar
my $re_charset = qr/[!"#\$%&'+\-0-9A-Z\\\^_`a-z\{\|\}~]+/;
my $re_language = qr/[A-Za-z]{1,8}(?:-[0-9A-Za-z]{1,8})*/;
my $re_encoding = qr/[QqBb]/;
my $re_encoded_text = qr/[^\?]*/;
my $re_encoded_word = qr/=\?$re_charset(?:\*$re_language)?\?$re_encoding\?$re_encoded_text\?=/;
my $re_capture_encoded_word = qr/=\?($re_charset)((?:\*$re_language)?)\?($re_encoding\?$re_encoded_text)\?=/;
my $re_capture_encoded_word_split = qr/=\?($re_charset)((?:\*$re_language)?)\?($re_encoding)\?($re_encoded_text)\?=/;
# in strict mode check also for valid base64 characters and also for valid quoted printable codes
my $re_encoding_strict_b = qr/[Bb]/;
my $re_encoding_strict_q = qr/[Qq]/;
my $re_encoded_text_strict_b = qr/[0-9A-Za-z\+\/]*={0,2}/;
my $re_encoded_text_strict_q = qr/(?:[\x21-\x3C\x3E\x40-\x7E]|=[0-9A-Fa-f]{2})*/; # NOTE: first part are printable US-ASCII except ?, =, SPACE and TAB
my $re_encoded_word_strict = qr/=\?$re_charset(?:\*$re_language)?\?(?:$re_encoding_strict_b\?$re_encoded_text_strict_b|$re_encoding_strict_q\?$re_encoded_text_strict_q)\?=/;
my $re_capture_encoded_word_strict = qr/=\?($re_charset)((?:\*$re_language)?)\?($re_encoding_strict_b\?$re_encoded_text_strict_b|$re_encoding_strict_q\?$re_encoded_text_strict_q)\?=/;
my $re_newline = qr/(?:\r\n|[\r\n])/;
# in strict mode encoded words must be always separated by spaces or tabs (or folded newline)
# except in comments when separator between words and comment round brackets can be omitted
my $re_word_begin_strict = qr/(?:(?:[ \t]|\A)\(?|(?:[^\\]|\A)\)\()/;
my $re_word_sep_strict = qr/(?:$re_newline?[ \t])+/;
my $re_word_end_strict = qr/(?:\)\(|\)?(?:$re_newline?[ \t]|\z))/;
my $re_match = qr/()((?:$re_encoded_word\s*)*$re_encoded_word)()/;
my $re_match_strict = qr/($re_word_begin_strict)((?:$re_encoded_word_strict$re_word_sep_strict)*$re_encoded_word_strict)(?=$re_word_end_strict)/;
my $re_capture = qr/$re_capture_encoded_word(?:\s*)?/;
my $re_capture_strict = qr/$re_capture_encoded_word_strict$re_word_sep_strict?/;
our $STRICT_DECODE = 0;
sub decode($$;$) {
my ($obj, $str, $chk) = @_;
return undef unless defined $str;
my $re_match_decode = $STRICT_DECODE ? $re_match_strict : $re_match;
my $re_capture_decode = $STRICT_DECODE ? $re_capture_strict : $re_capture;
my $stop = 0;
my $output = substr($str, 0, 0); # to propagate taintedness
# decode each line separately, match whole continuous folded line at one call
1 while not $stop and $str =~ s{^((?:[^\r\n]*(?:$re_newline[ \t])?)*)($re_newline)?}{
my $line = $1;
my $sep = defined $2 ? $2 : '';
$stop = 1 unless length($line) or length($sep);
# NOTE: this code partially could break $chk support
# in non strict mode concat consecutive encoded mime words with same charset, language and encoding
# fixes breaking inside multi-byte characters
1 while not $STRICT_DECODE and $line =~ s/$re_capture_encoded_word_split\s*=\?\1\2\?\3\?($re_encoded_text)\?=/=\?$1$2\?$3\?$4$5\?=/so;
# process sequence of encoded MIME words at once
1 while not $stop and $line =~ s{^(.*?)$re_match_decode}{
my $begin = $1 . $2;
my $words = $3;
$begin =~ tr/\r\n//d;
$output .= $begin;
# decode one MIME word
1 while not $stop and $words =~ s{^(.*?)($re_capture_decode)}{
$output .= $1;
my $orig = $2;
my $charset = $3;
my ($mime_enc, $text) = split /\?/, $5;
$text =~ tr/\r\n//d;
my $enc = Encode::find_mime_encoding($charset);
# in non strict mode allow also perl encoding aliases
if ( not defined $enc and not $STRICT_DECODE ) {
# make sure that decoded string will be always strict UTF-8
$charset = 'UTF-8' if lc($charset) eq 'utf8';
$enc = Encode::find_encoding($charset);
}
if ( not defined $enc ) {
Carp::croak qq(Unknown charset "$charset") if not ref $chk and $chk and $chk & Encode::DIE_ON_ERR;
Carp::carp qq(Unknown charset "$charset") if not ref $chk and $chk and $chk & Encode::WARN_ON_ERR;
$stop = 1 if not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR;
$output .= ($output =~ /(?:\A|[ \t])$/ ? '' : ' ') . $orig unless $stop; # $orig mime word is separated by whitespace
$stop ? $orig : '';
} else {
if ( uc($mime_enc) eq 'B' and $obj->{decode_b} ) {
my $decoded = _decode_b($enc, $text, $chk);
$stop = 1 if not defined $decoded and not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR;
$output .= (defined $decoded ? $decoded : $text) unless $stop;
$stop ? $orig : '';
} elsif ( uc($mime_enc) eq 'Q' and $obj->{decode_q} ) {
my $decoded = _decode_q($enc, $text, $chk);
$stop = 1 if not defined $decoded and not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR;
$output .= (defined $decoded ? $decoded : $text) unless $stop;
$stop ? $orig : '';
} else {
Carp::croak qq(MIME "$mime_enc" unsupported) if not ref $chk and $chk and $chk & Encode::DIE_ON_ERR;
Carp::carp qq(MIME "$mime_enc" unsupported) if not ref $chk and $chk and $chk & Encode::WARN_ON_ERR;
$stop = 1 if not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR;
$output .= ($output =~ /(?:\A|[ \t])$/ ? '' : ' ') . $orig unless $stop; # $orig mime word is separated by whitespace
$stop ? $orig : '';
}
}
}se;
if ( not $stop ) {
$output .= $words;
$words = '';
}
$words;
}se;
if ( not $stop ) {
$line =~ tr/\r\n//d;
$output .= $line . $sep;
$line = '';
$sep = '';
}
$line . $sep;
}se;
$_[1] = $str if not ref $chk and $chk and !($chk & Encode::LEAVE_SRC);
return $output;
}
sub _decode_b {
my ($enc, $text, $chk) = @_;
# MIME::Base64::decode ignores everything after a '=' padding character
# in non strict mode split string after each sequence of padding characters and decode each substring
my $octets = $STRICT_DECODE ?
MIME::Base64::decode($text) :
join('', map { MIME::Base64::decode($_) } split /(?<==)(?=[^=])/, $text);
return _decode_octets($enc, $octets, $chk);
}
sub _decode_q {
my ($enc, $text, $chk) = @_;
$text =~ s/_/ /go;
$text =~ s/=([0-9A-Fa-f]{2})/pack('C', hex($1))/ego;
return _decode_octets($enc, $text, $chk);
}
sub _decode_octets {
my ($enc, $octets, $chk) = @_;
$chk = 0 unless defined $chk;
$chk &= ~Encode::LEAVE_SRC if not ref $chk and $chk;
my $output = $enc->decode($octets, $chk);
return undef if not ref $chk and $chk and $octets ne '';
return $output;
}
sub encode($$;$) {
my ($obj, $str, $chk) = @_;
return undef unless defined $str;
my $output = $obj->_fold_line($obj->_encode_string($str, $chk));
$_[1] = $str if not ref $chk and $chk and !($chk & Encode::LEAVE_SRC);
return $output . substr($str, 0, 0); # to propagate taintedness
}
sub _fold_line {
my ($obj, $line) = @_;
my $bpl = $obj->{bpl};
my $output = '';
while ( length($line) ) {
if ( $line =~ s/^(.{0,$bpl})(\s|\z)// ) {
$output .= $1;
$output .= "\r\n" . $2 if length($line);
} elsif ( $line =~ s/(\s)(.*)$// ) {
$output .= $line;
$line = $2;
$output .= "\r\n" . $1 if length($line);
} else {
$output .= $line;
last;
}
}
return $output;
}
sub _encode_string {
my ($obj, $str, $chk) = @_;
my $wordlen = $obj->{bpl} > 76 ? 76 : $obj->{bpl};
my $enc = Encode::find_mime_encoding($obj->{charset});
my $enc_chk = $chk;
$enc_chk = 0 unless defined $enc_chk;
$enc_chk |= Encode::LEAVE_SRC if not ref $enc_chk and $enc_chk;
my @result = ();
my $octets = '';
while ( length( my $chr = substr($str, 0, 1, '') ) ) {
my $seq = $enc->encode($chr, $enc_chk);
if ( not length($seq) ) {
substr($str, 0, 0, $chr);
last;
}
if ( $obj->_encoded_word_len($octets . $seq) > $wordlen ) {
push @result, $obj->_encode_word($octets);
$octets = '';
}
$octets .= $seq;
}
length($octets) and push @result, $obj->_encode_word($octets);
$_[1] = $str if not ref $chk and $chk and !($chk & Encode::LEAVE_SRC);
return join(' ', @result);
}
sub _encode_word {
my ($obj, $octets) = @_;
my $charset = $obj->{charset};
my $encode = $obj->{encode};
my $text = $encode eq 'B' ? _encode_b($octets) : _encode_q($octets);
return "=?$charset?$encode?$text?=";
}
sub _encoded_word_len {
my ($obj, $octets) = @_;
my $charset = $obj->{charset};
my $encode = $obj->{encode};
my $text_len = $encode eq 'B' ? _encoded_b_len($octets) : _encoded_q_len($octets);
return length("=?$charset?$encode??=") + $text_len;
}
sub _encode_b {
my ($octets) = @_;
return MIME::Base64::encode($octets, '');
}
sub _encoded_b_len {
my ($octets) = @_;
return ( length($octets) + 2 ) / 3 * 4;
}
my $re_invalid_q_char = qr/[^0-9A-Za-z !*+\-\/]/;
sub _encode_q {
my ($octets) = @_;
$octets =~ s{($re_invalid_q_char)}{
join('', map { sprintf('=%02X', $_) } unpack('C*', $1))
}egox;
$octets =~ s/ /_/go;
return $octets;
}
sub _encoded_q_len {
my ($octets) = @_;
my $invalid_count = () = $octets =~ /$re_invalid_q_char/sgo;
return ( $invalid_count * 3 ) + ( length($octets) - $invalid_count );
}
1;
__END__
=head1 NAME
Encode::MIME::Header -- MIME encoding for an unstructured email header
=head1 SYNOPSIS
use Encode qw(encode decode);
my $mime_str = encode("MIME-Header", "Sample:Text \N{U+263A}");
# $mime_str is "=?UTF-8?B?U2FtcGxlOlRleHQg4pi6?="
my $mime_q_str = encode("MIME-Q", "Sample:Text \N{U+263A}");
# $mime_q_str is "=?UTF-8?Q?Sample=3AText_=E2=98=BA?="
my $str = decode("MIME-Header",
"=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\r\n " .
"=?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="
);
# $str is "If you can read this you understand the example."
use Encode qw(decode :fallbacks);
use Encode::MIME::Header;
local $Encode::MIME::Header::STRICT_DECODE = 1;
my $strict_string = decode("MIME-Header", $mime_string, FB_CROAK);
# use strict decoding and croak on errors
=head1 ABSTRACT
This module implements L<RFC 2047|https://tools.ietf.org/html/rfc2047> MIME
encoding for an unstructured field body of the email header. It can also be
used for L<RFC 822|https://tools.ietf.org/html/rfc822> 'text' token. However,
it cannot be used directly for the whole header with the field name or for the
structured header fields like From, To, Cc, Message-Id, etc... There are 3
encoding names supported by this module: C<MIME-Header>, C<MIME-B> and
C<MIME-Q>.
=head1 DESCRIPTION
Decode method takes an unstructured field body of the email header (or
L<RFC 822|https://tools.ietf.org/html/rfc822> 'text' token) as its input and
decodes each MIME encoded-word from input string to a sequence of bytes
according to L<RFC 2047|https://tools.ietf.org/html/rfc2047> and
L<RFC 2231|https://tools.ietf.org/html/rfc2231>. Subsequently, each sequence
of bytes with the corresponding MIME charset is decoded with
L<the Encode module|Encode> and finally, one output string is returned. Text
parts of the input string which do not contain MIME encoded-word stay
unmodified in the output string. Folded newlines between two consecutive MIME
encoded-words are discarded, others are preserved in the output string.
C<MIME-B> can decode Base64 variant, C<MIME-Q> can decode Quoted-Printable
variant and C<MIME-Header> can decode both of them. If L<Encode module|Encode>
does not support particular MIME charset or chosen variant then an action based
on L<CHECK flags|Encode/Handling Malformed Data> is performed (by default, the
MIME encoded-word is not decoded).
Encode method takes a scalar string as its input and uses
L<strict UTF-8|Encode/UTF-8 vs. utf8 vs. UTF8> encoder for encoding it to UTF-8
bytes. Then a sequence of UTF-8 bytes is encoded into MIME encoded-words
(C<MIME-Header> and C<MIME-B> use a Base64 variant while C<MIME-Q> uses a
Quoted-Printable variant) where each MIME encoded-word is limited to 75
characters. MIME encoded-words are separated by C<CRLF SPACE> and joined to
one output string. Output string is suitable for unstructured field body of
the email header.
Both encode and decode methods propagate
L<CHECK flags|Encode/Handling Malformed Data> when encoding and decoding the
MIME charset.
=head1 BUGS
Versions prior to 2.22 (part of Encode 2.83) have a malfunctioning decoder
and encoder. The MIME encoder infamously inserted additional spaces or
discarded white spaces between consecutive MIME encoded-words, which led to
invalid MIME headers produced by this module. The MIME decoder had a tendency
to discard white spaces, incorrectly interpret data or attempt to decode Base64
MIME encoded-words as Quoted-Printable. These problems were fixed in version
2.22. It is highly recommended not to use any version prior 2.22!
Versions prior to 2.24 (part of Encode 2.87) ignored
L<CHECK flags|Encode/Handling Malformed Data>. The MIME encoder used
L<not strict utf8|Encode/UTF-8 vs. utf8 vs. UTF8> encoder for input Unicode
strings which could lead to invalid UTF-8 sequences. MIME decoder used also
L<not strict utf8|Encode/UTF-8 vs. utf8 vs. UTF8> decoder and additionally
called the decode method with a C<Encode::FB_PERLQQ> flag (thus user-specified
L<CHECK flags|Encode/Handling Malformed Data> were ignored). Moreover, it
automatically croaked when a MIME encoded-word contained unknown encoding.
Since version 2.24, this module uses
L<strict UTF-8|Encode/UTF-8 vs. utf8 vs. UTF8> encoder and decoder. And
L<CHECK flags|Encode/Handling Malformed Data> are correctly propagated.
Since version 2.22 (part of Encode 2.83), the MIME encoder should be fully
compliant to L<RFC 2047|https://tools.ietf.org/html/rfc2047> and
L<RFC 2231|https://tools.ietf.org/html/rfc2231>. Due to the aforementioned
bugs in previous versions of the MIME encoder, there is a I<less strict>
compatible mode for the MIME decoder which is used by default. It should be
able to decode MIME encoded-words encoded by pre 2.22 versions of this module.
However, note that this is not correct according to
L<RFC 2047|https://tools.ietf.org/html/rfc2047>.
In default I<not strict> mode the MIME decoder attempts to decode every substring
which looks like a MIME encoded-word. Therefore, the MIME encoded-words do not
need to be separated by white space. To enforce a correct I<strict> mode, set
variable C<$Encode::MIME::Header::STRICT_DECODE> to 1 e.g. by localizing:
use Encode::MIME::Header;
local $Encode::MIME::Header::STRICT_DECODE = 1;
=head1 AUTHORS
Pali E<lt>pali@cpan.orgE<gt>
=head1 SEE ALSO
L<Encode>,
L<RFC 822|https://tools.ietf.org/html/rfc822>,
L<RFC 2047|https://tools.ietf.org/html/rfc2047>,
L<RFC 2231|https://tools.ietf.org/html/rfc2231>
=cut
Encode/Encoder.pm 0000644 00000014254 15033552504 0007666 0 ustar 00 #
# $Id: Encoder.pm,v 2.3 2013/09/14 07:51:59 dankogai Exp $
#
package Encode::Encoder;
use strict;
use warnings;
our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw ( encoder );
our $AUTOLOAD;
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
use Encode qw(encode decode find_encoding from_to);
use Carp;
sub new {
my ( $class, $data, $encname ) = @_;
unless ($encname) {
$encname = Encode::is_utf8($data) ? 'utf8' : '';
}
else {
my $obj = find_encoding($encname)
or croak __PACKAGE__, ": unknown encoding: $encname";
$encname = $obj->name;
}
my $self = {
data => $data,
encoding => $encname,
};
bless $self => $class;
}
sub encoder { __PACKAGE__->new(@_) }
sub data {
my ( $self, $data ) = @_;
if ( defined $data ) {
$self->{data} = $data;
return $data;
}
else {
return $self->{data};
}
}
sub encoding {
my ( $self, $encname ) = @_;
if ($encname) {
my $obj = find_encoding($encname)
or confess __PACKAGE__, ": unknown encoding: $encname";
$self->{encoding} = $obj->name;
return $self;
}
else {
return $self->{encoding};
}
}
sub bytes {
my ( $self, $encname ) = @_;
$encname ||= $self->{encoding};
my $obj = find_encoding($encname)
or confess __PACKAGE__, ": unknown encoding: $encname";
$self->{data} = $obj->decode( $self->{data}, 1 );
$self->{encoding} = '';
return $self;
}
sub DESTROY { # defined so it won't autoload.
DEBUG and warn shift;
}
sub AUTOLOAD {
my $self = shift;
my $type = ref($self)
or confess "$self is not an object";
my $myname = $AUTOLOAD;
$myname =~ s/.*://; # strip fully-qualified portion
my $obj = find_encoding($myname)
or confess __PACKAGE__, ": unknown encoding: $myname";
DEBUG and warn $self->{encoding}, " => ", $obj->name;
if ( $self->{encoding} ) {
from_to( $self->{data}, $self->{encoding}, $obj->name, 1 );
}
else {
$self->{data} = $obj->encode( $self->{data}, 1 );
}
$self->{encoding} = $obj->name;
return $self;
}
use overload
q("") => sub { $_[0]->{data} },
q(0+) => sub { use bytes(); bytes::length( $_[0]->{data} ) },
fallback => 1,
;
1;
__END__
=head1 NAME
Encode::Encoder -- Object Oriented Encoder
=head1 SYNOPSIS
use Encode::Encoder;
# Encode::encode("ISO-8859-1", $data);
Encode::Encoder->new($data)->iso_8859_1; # OOP way
# shortcut
use Encode::Encoder qw(encoder);
encoder($data)->iso_8859_1;
# you can stack them!
encoder($data)->iso_8859_1->base64; # provided base64() is defined
# you can use it as a decoder as well
encoder($base64)->bytes('base64')->latin1;
# stringified
print encoder($data)->utf8->latin1; # prints the string in latin1
# numified
encoder("\x{abcd}\x{ef}g")->utf8 == 6; # true. bytes::length($data)
=head1 ABSTRACT
B<Encode::Encoder> allows you to use Encode in an object-oriented
style. This is not only more intuitive than a functional approach,
but also handier when you want to stack encodings. Suppose you want
your UTF-8 string converted to Latin1 then Base64: you can simply say
my $base64 = encoder($utf8)->latin1->base64;
instead of
my $latin1 = encode("latin1", $utf8);
my $base64 = encode_base64($utf8);
or the lazier and more convoluted
my $base64 = encode_base64(encode("latin1", $utf8));
=head1 Description
Here is how to use this module.
=over 4
=item *
There are at least two instance variables stored in a hash reference,
{data} and {encoding}.
=item *
When there is no method, it takes the method name as the name of the
encoding and encodes the instance I<data> with I<encoding>. If successful,
the instance I<encoding> is set accordingly.
=item *
You can retrieve the result via -E<gt>data but usually you don't have to
because the stringify operator ("") is overridden to do exactly that.
=back
=head2 Predefined Methods
This module predefines the methods below:
=over 4
=item $e = Encode::Encoder-E<gt>new([$data, $encoding]);
returns an encoder object. Its data is initialized with $data if
present, and its encoding is set to $encoding if present.
When $encoding is omitted, it defaults to utf8 if $data is already in
utf8 or "" (empty string) otherwise.
=item encoder()
is an alias of Encode::Encoder-E<gt>new(). This one is exported on demand.
=item $e-E<gt>data([$data])
When $data is present, sets the instance data to $data and returns the
object itself. Otherwise, the current instance data is returned.
=item $e-E<gt>encoding([$encoding])
When $encoding is present, sets the instance encoding to $encoding and
returns the object itself. Otherwise, the current instance encoding is
returned.
=item $e-E<gt>bytes([$encoding])
decodes instance data from $encoding, or the instance encoding if
omitted. If the conversion is successful, the instance encoding
will be set to "".
The name I<bytes> was deliberately picked to avoid namespace tainting
-- this module may be used as a base class so method names that appear
in Encode::Encoding are avoided.
=back
=head2 Example: base64 transcoder
This module is designed to work with L<Encode::Encoding>.
To make the Base64 transcoder example above really work, you could
write a module like this:
package Encode::Base64;
use parent 'Encode::Encoding';
__PACKAGE__->Define('base64');
use MIME::Base64;
sub encode{
my ($obj, $data) = @_;
return encode_base64($data);
}
sub decode{
my ($obj, $data) = @_;
return decode_base64($data);
}
1;
__END__
And your caller module would be something like this:
use Encode::Encoder;
use Encode::Base64;
# now you can really do the following
encoder($data)->iso_8859_1->base64;
encoder($base64)->bytes('base64')->latin1;
=head2 Operator Overloading
This module overloads two operators, stringify ("") and numify (0+).
Stringify dumps the data inside the object.
Numify returns the number of bytes in the instance data.
They come in handy when you want to print or find the size of data.
=head1 SEE ALSO
L<Encode>,
L<Encode::Encoding>
=cut
Encode/PerlIO.pod 0000644 00000013654 15033552504 0007612 0 ustar 00 =head1 NAME
Encode::PerlIO -- a detailed document on Encode and PerlIO
=head1 Overview
It is very common to want to do encoding transformations when
reading or writing files, network connections, pipes etc.
If Perl is configured to use the new 'perlio' IO system then
C<Encode> provides a "layer" (see L<PerlIO>) which can transform
data as it is read or written.
Here is how the blind poet would modernise the encoding:
use Encode;
open(my $iliad,'<:encoding(iso-8859-7)','iliad.greek');
open(my $utf8,'>:utf8','iliad.utf8');
my @epic = <$iliad>;
print $utf8 @epic;
close($utf8);
close($illiad);
In addition, the new IO system can also be configured to read/write
UTF-8 encoded characters (as noted above, this is efficient):
open(my $fh,'>:utf8','anything');
print $fh "Any \x{0021} string \N{SMILEY FACE}\n";
Either of the above forms of "layer" specifications can be made the default
for a lexical scope with the C<use open ...> pragma. See L<open>.
Once a handle is open, its layers can be altered using C<binmode>.
Without any such configuration, or if Perl itself is built using the
system's own IO, then write operations assume that the file handle
accepts only I<bytes> and will C<die> if a character larger than 255 is
written to the handle. When reading, each octet from the handle becomes
a byte-in-a-character. Note that this default is the same behaviour
as bytes-only languages (including Perl before v5.6) would have,
and is sufficient to handle native 8-bit encodings e.g. iso-8859-1,
EBCDIC etc. and any legacy mechanisms for handling other encodings
and binary data.
In other cases, it is the program's responsibility to transform
characters into bytes using the API above before doing writes, and to
transform the bytes read from a handle into characters before doing
"character operations" (e.g. C<lc>, C</\W+/>, ...).
You can also use PerlIO to convert larger amounts of data you don't
want to bring into memory. For example, to convert between ISO-8859-1
(Latin 1) and UTF-8 (or UTF-EBCDIC in EBCDIC machines):
open(F, "<:encoding(iso-8859-1)", "data.txt") or die $!;
open(G, ">:utf8", "data.utf") or die $!;
while (<F>) { print G }
# Could also do "print G <F>" but that would pull
# the whole file into memory just to write it out again.
More examples:
open(my $f, "<:encoding(cp1252)")
open(my $g, ">:encoding(iso-8859-2)")
open(my $h, ">:encoding(latin9)") # iso-8859-15
See also L<encoding> for how to change the default encoding of the
data in your script.
=head1 How does it work?
Here is a crude diagram of how filehandle, PerlIO, and Encode
interact.
filehandle <-> PerlIO PerlIO <-> scalar (read/printed)
\ /
Encode
When PerlIO receives data from either direction, it fills a buffer
(currently with 1024 bytes) and passes the buffer to Encode.
Encode tries to convert the valid part and passes it back to PerlIO,
leaving invalid parts (usually a partial character) in the buffer.
PerlIO then appends more data to the buffer, calls Encode again,
and so on until the data stream ends.
To do so, PerlIO always calls (de|en)code methods with CHECK set to 1.
This ensures that the method stops at the right place when it
encounters partial character. The following is what happens when
PerlIO and Encode tries to encode (from utf8) more than 1024 bytes
and the buffer boundary happens to be in the middle of a character.
A B C .... ~ \x{3000} ....
41 42 43 .... 7E e3 80 80 ....
<- buffer --------------->
<< encoded >>>>>>>>>>
<- next buffer ------
Encode converts from the beginning to \x7E, leaving \xe3 in the buffer
because it is invalid (partial character).
Unfortunately, this scheme does not work well with escape-based
encodings such as ISO-2022-JP.
=head1 Line Buffering
Now let's see what happens when you try to decode from ISO-2022-JP and
the buffer ends in the middle of a character.
JIS208-ESC \x{5f3e}
A B C .... ~ \e $ B |DAN | ....
41 42 43 .... 7E 1b 24 41 43 46 ....
<- buffer --------------------------->
<< encoded >>>>>>>>>>>>>>>>>>>>>>>
As you see, the next buffer begins with \x43. But \x43 is 'C' in
ASCII, which is wrong in this case because we are now in JISX 0208
area so it has to convert \x43\x46, not \x43. Unlike utf8 and EUC,
in escape-based encodings you can't tell if a given octet is a whole
character or just part of it.
Fortunately PerlIO also supports line buffer if you tell PerlIO to use
one instead of fixed buffer. Since ISO-2022-JP is guaranteed to revert to ASCII at the end of the line, partial
character will never happen when line buffer is used.
To tell PerlIO to use line buffer, implement -E<gt>needs_lines method
for your encoding object. See L<Encode::Encoding> for details.
Thanks to these efforts most encodings that come with Encode support
PerlIO but that still leaves following encodings.
iso-2022-kr
MIME-B
MIME-Header
MIME-Q
Fortunately iso-2022-kr is hardly used (according to Jungshik) and
MIME-* are very unlikely to be fed to PerlIO because they are for mail
headers. See L<Encode::MIME::Header> for details.
=head2 How can I tell whether my encoding fully supports PerlIO ?
As of this writing, any encoding whose class belongs to Encode::XS and
Encode::Unicode works. The Encode module has a C<perlio_ok> method
which you can use before applying PerlIO encoding to the filehandle.
Here is an example:
my $use_perlio = perlio_ok($enc);
my $layer = $use_perlio ? "<:raw" : "<:encoding($enc)";
open my $fh, $layer, $file or die "$file : $!";
while(<$fh>){
$_ = decode($enc, $_) unless $use_perlio;
# ....
}
=head1 SEE ALSO
L<Encode::Encoding>,
L<Encode::Supported>,
L<Encode::PerlIO>,
L<encoding>,
L<perlebcdic>,
L<perlfunc/open>,
L<perlunicode>,
L<utf8>,
the Perl Unicode Mailing List E<lt>perl-unicode@perl.orgE<gt>
=cut
Encode/Symbol.pm 0000644 00000001517 15033552504 0007552 0 ustar 00 package Encode::Symbol;
use strict;
use warnings;
use Encode;
our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
use XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
1;
__END__
=head1 NAME
Encode::Symbol - Symbol Encodings
=head1 SYNOPSIS
use Encode qw/encode decode/;
$symbol = encode("symbol", $utf8); # loads Encode::Symbol implicitly
$utf8 = decode("", $symbol); # ditto
=head1 ABSTRACT
This module implements symbol and dingbats encodings. Encodings
supported are as follows.
Canonical Alias Description
--------------------------------------------------------------------
symbol
dingbats
AdobeZDingbat
AdobeSymbol
MacDingbats
=head1 DESCRIPTION
To find out how to use this module in detail, see L<Encode>.
=head1 SEE ALSO
L<Encode>
=cut
IPC/Msg.pm 0000644 00000010650 15033552504 0006247 0 ustar 00 ################################################################################
#
# Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz <mhx@cpan.org>.
# Version 1.x, Copyright (C) 1997, Graham Barr <gbarr@pobox.com>.
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
################################################################################
package IPC::Msg;
use IPC::SysV qw(IPC_STAT IPC_SET IPC_RMID);
use strict;
use vars qw($VERSION);
use Carp;
$VERSION = '2.07';
# Figure out if we have support for native sized types
my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' };
{
package IPC::Msg::stat;
use Class::Struct qw(struct);
struct 'IPC::Msg::stat' => [
uid => '$',
gid => '$',
cuid => '$',
cgid => '$',
mode => '$',
qnum => '$',
qbytes => '$',
lspid => '$',
lrpid => '$',
stime => '$',
rtime => '$',
ctime => '$',
];
}
sub new {
@_ == 3 || croak 'new IPC::Msg ( KEY , FLAGS )';
my $class = shift;
my $id = msgget($_[0],$_[1]);
defined($id)
? bless \$id, $class
: undef;
}
sub id {
my $self = shift;
$$self;
}
sub stat {
my $self = shift;
my $data = "";
msgctl($$self,IPC_STAT,$data) or
return undef;
IPC::Msg::stat->new->unpack($data);
}
sub set {
my $self = shift;
my $ds;
if(@_ == 1) {
$ds = shift;
}
else {
croak 'Bad arg count' if @_ % 2;
my %arg = @_;
$ds = $self->stat
or return undef;
my($key,$val);
$ds->$key($val)
while(($key,$val) = each %arg);
}
msgctl($$self,IPC_SET,$ds->pack);
}
sub remove {
my $self = shift;
(msgctl($$self,IPC_RMID,0), undef $$self)[0];
}
sub rcv {
@_ <= 5 && @_ >= 3 or croak '$msg->rcv( BUF, LEN, TYPE, FLAGS )';
my $self = shift;
my $buf = "";
msgrcv($$self,$buf,$_[1],$_[2] || 0, $_[3] || 0) or
return;
my $type;
($type,$_[0]) = unpack("l$N a*",$buf);
$type;
}
sub snd {
@_ <= 4 && @_ >= 3 or croak '$msg->snd( TYPE, BUF, FLAGS )';
my $self = shift;
msgsnd($$self,pack("l$N a*",$_[0],$_[1]), $_[2] || 0);
}
1;
__END__
=head1 NAME
IPC::Msg - SysV Msg IPC object class
=head1 SYNOPSIS
use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR);
use IPC::Msg;
$msg = IPC::Msg->new(IPC_PRIVATE, S_IRUSR | S_IWUSR);
$msg->snd($msgtype, $msgdata);
$msg->rcv($buf, 256);
$ds = $msg->stat;
$msg->remove;
=head1 DESCRIPTION
A class providing an object based interface to SysV IPC message queues.
=head1 METHODS
=over 4
=item new ( KEY , FLAGS )
Creates a new message queue associated with C<KEY>. A new queue is
created if
=over 4
=item *
C<KEY> is equal to C<IPC_PRIVATE>
=item *
C<KEY> does not already have a message queue associated with
it, and C<I<FLAGS> & IPC_CREAT> is true.
=back
On creation of a new message queue C<FLAGS> is used to set the
permissions. Be careful not to set any flags that the Sys V
IPC implementation does not allow: in some systems setting
execute bits makes the operations fail.
=item id
Returns the system message queue identifier.
=item rcv ( BUF, LEN [, TYPE [, FLAGS ]] )
Read a message from the queue. Returns the type of the message read.
See L<msgrcv(2)>. The BUF becomes tainted.
=item remove
Remove and destroy the message queue from the system.
=item set ( STAT )
=item set ( NAME => VALUE [, NAME => VALUE ...] )
C<set> will set the following values of the C<stat> structure associated
with the message queue.
uid
gid
mode (oly the permission bits)
qbytes
C<set> accepts either a stat object, as returned by the C<stat> method,
or a list of I<name>-I<value> pairs.
=item snd ( TYPE, MSG [, FLAGS ] )
Place a message on the queue with the data from C<MSG> and with type C<TYPE>.
See L<msgsnd(2)>.
=item stat
Returns an object of type C<IPC::Msg::stat> which is a sub-class of
C<Class::Struct>. It provides the following fields. For a description
of these fields see you system documentation.
uid
gid
cuid
cgid
mode
qnum
qbytes
lspid
lrpid
stime
rtime
ctime
=back
=head1 SEE ALSO
L<IPC::SysV>, L<Class::Struct>
=head1 AUTHORS
Graham Barr <gbarr@pobox.com>,
Marcus Holland-Moritz <mhx@cpan.org>
=head1 COPYRIGHT
Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz.
Version 1.x, Copyright (c) 1997, Graham Barr.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
IPC/SysV.pm 0000644 00000011173 15033552504 0006426 0 ustar 00 ################################################################################
#
# Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz <mhx@cpan.org>.
# Version 1.x, Copyright (C) 1997, Graham Barr <gbarr@pobox.com>.
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
################################################################################
package IPC::SysV;
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION $AUTOLOAD);
use Carp;
use Config;
require Exporter;
@ISA = qw(Exporter);
$VERSION = '2.07';
# To support new constants, just add them to @EXPORT_OK
# and the C/XS code will be generated automagically.
@EXPORT_OK = (qw(
GETALL GETNCNT GETPID GETVAL GETZCNT
IPC_ALLOC IPC_CREAT IPC_EXCL IPC_GETACL IPC_INFO IPC_LOCKED
IPC_M IPC_NOERROR IPC_NOWAIT IPC_PRIVATE IPC_R IPC_RMID
IPC_SET IPC_SETACL IPC_SETLABEL IPC_STAT IPC_W IPC_WANTED
MSG_EXCEPT MSG_FWAIT MSG_INFO MSG_LOCKED MSG_MWAIT MSG_NOERROR
MSG_QWAIT MSG_R MSG_RWAIT MSG_STAT MSG_W MSG_WAIT MSG_WWAIT
SEM_A SEM_ALLOC SEM_DEST SEM_ERR SEM_INFO SEM_ORDER SEM_R
SEM_STAT SEM_UNDO
SETALL SETVAL
SHMLBA
SHM_A SHM_CLEAR SHM_COPY SHM_DCACHE SHM_DEST SHM_ECACHE
SHM_FMAP SHM_HUGETLB SHM_ICACHE SHM_INFO SHM_INIT SHM_LOCK
SHM_LOCKED SHM_MAP SHM_NORESERVE SHM_NOSWAP SHM_R SHM_RDONLY
SHM_REMAP SHM_REMOVED SHM_RND SHM_SHARE_MMU SHM_SHATTR
SHM_SIZE SHM_STAT SHM_UNLOCK SHM_W
S_IRUSR S_IWUSR S_IXUSR S_IRWXU
S_IRGRP S_IWGRP S_IXGRP S_IRWXG
S_IROTH S_IWOTH S_IXOTH S_IRWXO
ENOSPC ENOSYS ENOMEM EACCES
), qw(
ftok shmat shmdt memread memwrite
));
%EXPORT_TAGS = (
all => [@EXPORT, @EXPORT_OK],
);
sub AUTOLOAD
{
my $constname = $AUTOLOAD;
$constname =~ s/.*:://;
die "&IPC::SysV::_constant not defined" if $constname eq '_constant';
my ($error, $val) = _constant($constname);
if ($error) {
my (undef, $file, $line) = caller;
die "$error at $file line $line.\n";
}
{
no strict 'refs';
*$AUTOLOAD = sub { $val };
}
goto &$AUTOLOAD;
}
BOOT_XS: {
# If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO
require DynaLoader;
# DynaLoader calls dl_load_flags as a static method.
*dl_load_flags = DynaLoader->can('dl_load_flags');
do {
__PACKAGE__->can('bootstrap') || \&DynaLoader::bootstrap
}->(__PACKAGE__, $VERSION);
}
1;
__END__
=head1 NAME
IPC::SysV - System V IPC constants and system calls
=head1 SYNOPSIS
use IPC::SysV qw(IPC_STAT IPC_PRIVATE);
=head1 DESCRIPTION
C<IPC::SysV> defines and conditionally exports all the constants
defined in your system include files which are needed by the SysV
IPC calls. Common ones include
IPC_CREAT IPC_EXCL IPC_NOWAIT IPC_PRIVATE IPC_RMID IPC_SET IPC_STAT
GETVAL SETVAL GETPID GETNCNT GETZCNT GETALL SETALL
SEM_A SEM_R SEM_UNDO
SHM_RDONLY SHM_RND SHMLBA
and auxiliary ones
S_IRUSR S_IWUSR S_IRWXU
S_IRGRP S_IWGRP S_IRWXG
S_IROTH S_IWOTH S_IRWXO
but your system might have more.
=over 4
=item ftok( PATH )
=item ftok( PATH, ID )
Return a key based on PATH and ID, which can be used as a key for
C<msgget>, C<semget> and C<shmget>. See L<ftok(3)>.
If ID is omitted, it defaults to C<1>. If a single character is
given for ID, the numeric value of that character is used.
=item shmat( ID, ADDR, FLAG )
Attach the shared memory segment identified by ID to the address
space of the calling process. See L<shmat(2)>.
ADDR should be C<undef> unless you really know what you're doing.
=item shmdt( ADDR )
Detach the shared memory segment located at the address specified
by ADDR from the address space of the calling process. See L<shmdt(2)>.
=item memread( ADDR, VAR, POS, SIZE )
Reads SIZE bytes from a memory segment at ADDR starting at position POS.
VAR must be a variable that will hold the data read. Returns true if
successful, or false if there is an error. memread() taints the variable.
=item memwrite( ADDR, STRING, POS, SIZE )
Writes SIZE bytes from STRING to a memory segment at ADDR starting at
position POS. If STRING is too long, only SIZE bytes are used; if STRING
is too short, nulls are written to fill out SIZE bytes. Returns true if
successful, or false if there is an error.
=back
=head1 SEE ALSO
L<IPC::Msg>, L<IPC::Semaphore>, L<IPC::SharedMem>, L<ftok(3)>, L<shmat(2)>, L<shmdt(2)>
=head1 AUTHORS
Graham Barr <gbarr@pobox.com>,
Jarkko Hietaniemi <jhi@iki.fi>,
Marcus Holland-Moritz <mhx@cpan.org>
=head1 COPYRIGHT
Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz.
Version 1.x, Copyright (c) 1997, Graham Barr.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
IPC/Semaphore.pm 0000644 00000014432 15033552504 0007446 0 ustar 00 ################################################################################
#
# Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz <mhx@cpan.org>.
# Version 1.x, Copyright (C) 1997, Graham Barr <gbarr@pobox.com>.
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
################################################################################
package IPC::Semaphore;
use IPC::SysV qw(GETNCNT GETZCNT GETVAL SETVAL GETPID GETALL SETALL
IPC_STAT IPC_SET IPC_RMID);
use strict;
use vars qw($VERSION);
use Carp;
$VERSION = '2.07';
# Figure out if we have support for native sized types
my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' };
{
package IPC::Semaphore::stat;
use Class::Struct qw(struct);
struct 'IPC::Semaphore::stat' => [
uid => '$',
gid => '$',
cuid => '$',
cgid => '$',
mode => '$',
ctime => '$',
otime => '$',
nsems => '$',
];
}
sub new {
@_ == 4 || croak 'new ' . __PACKAGE__ . '( KEY, NSEMS, FLAGS )';
my $class = shift;
my $id = semget($_[0],$_[1],$_[2]);
defined($id)
? bless \$id, $class
: undef;
}
sub id {
my $self = shift;
$$self;
}
sub remove {
my $self = shift;
my $result = semctl($$self,0,IPC_RMID,0);
undef $$self;
$result;
}
sub getncnt {
@_ == 2 || croak '$sem->getncnt( SEM )';
my $self = shift;
my $sem = shift;
my $v = semctl($$self,$sem,GETNCNT,0);
$v ? 0 + $v : undef;
}
sub getzcnt {
@_ == 2 || croak '$sem->getzcnt( SEM )';
my $self = shift;
my $sem = shift;
my $v = semctl($$self,$sem,GETZCNT,0);
$v ? 0 + $v : undef;
}
sub getval {
@_ == 2 || croak '$sem->getval( SEM )';
my $self = shift;
my $sem = shift;
my $v = semctl($$self,$sem,GETVAL,0);
$v ? 0 + $v : undef;
}
sub getpid {
@_ == 2 || croak '$sem->getpid( SEM )';
my $self = shift;
my $sem = shift;
my $v = semctl($$self,$sem,GETPID,0);
$v ? 0 + $v : undef;
}
sub op {
@_ >= 4 || croak '$sem->op( OPLIST )';
my $self = shift;
croak 'Bad arg count' if @_ % 3;
my $data = pack("s$N*",@_);
semop($$self,$data);
}
sub stat {
my $self = shift;
my $data = "";
semctl($$self,0,IPC_STAT,$data)
or return undef;
IPC::Semaphore::stat->new->unpack($data);
}
sub set {
my $self = shift;
my $ds;
if(@_ == 1) {
$ds = shift;
}
else {
croak 'Bad arg count' if @_ % 2;
my %arg = @_;
$ds = $self->stat
or return undef;
my($key,$val);
$ds->$key($val)
while(($key,$val) = each %arg);
}
my $v = semctl($$self,0,IPC_SET,$ds->pack);
$v ? 0 + $v : undef;
}
sub getall {
my $self = shift;
my $data = "";
semctl($$self,0,GETALL,$data)
or return ();
(unpack("s$N*",$data));
}
sub setall {
my $self = shift;
my $data = pack("s$N*",@_);
semctl($$self,0,SETALL,$data);
}
sub setval {
@_ == 3 || croak '$sem->setval( SEM, VAL )';
my $self = shift;
my $sem = shift;
my $val = shift;
semctl($$self,$sem,SETVAL,$val);
}
1;
__END__
=head1 NAME
IPC::Semaphore - SysV Semaphore IPC object class
=head1 SYNOPSIS
use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR IPC_CREAT);
use IPC::Semaphore;
$sem = IPC::Semaphore->new(IPC_PRIVATE, 10, S_IRUSR | S_IWUSR | IPC_CREAT);
$sem->setall( (0) x 10);
@sem = $sem->getall;
$ncnt = $sem->getncnt;
$zcnt = $sem->getzcnt;
$ds = $sem->stat;
$sem->remove;
=head1 DESCRIPTION
A class providing an object based interface to SysV IPC semaphores.
=head1 METHODS
=over 4
=item new ( KEY , NSEMS , FLAGS )
Create a new semaphore set associated with C<KEY>. C<NSEMS> is the number
of semaphores in the set. A new set is created if
=over 4
=item *
C<KEY> is equal to C<IPC_PRIVATE>
=item *
C<KEY> does not already have a semaphore identifier
associated with it, and C<I<FLAGS> & IPC_CREAT> is true.
=back
On creation of a new semaphore set C<FLAGS> is used to set the
permissions. Be careful not to set any flags that the Sys V
IPC implementation does not allow: in some systems setting
execute bits makes the operations fail.
=item getall
Returns the values of the semaphore set as an array.
=item getncnt ( SEM )
Returns the number of processes waiting for the semaphore C<SEM> to
become greater than its current value
=item getpid ( SEM )
Returns the process id of the last process that performed an operation
on the semaphore C<SEM>.
=item getval ( SEM )
Returns the current value of the semaphore C<SEM>.
=item getzcnt ( SEM )
Returns the number of processes waiting for the semaphore C<SEM> to
become zero.
=item id
Returns the system identifier for the semaphore set.
=item op ( OPLIST )
C<OPLIST> is a list of operations to pass to C<semop>. C<OPLIST> is
a concatenation of smaller lists, each which has three values. The
first is the semaphore number, the second is the operation and the last
is a flags value. See L<semop(2)> for more details. For example
$sem->op(
0, -1, IPC_NOWAIT,
1, 1, IPC_NOWAIT
);
=item remove
Remove and destroy the semaphore set from the system.
=item set ( STAT )
=item set ( NAME => VALUE [, NAME => VALUE ...] )
C<set> will set the following values of the C<stat> structure associated
with the semaphore set.
uid
gid
mode (only the permission bits)
C<set> accepts either a stat object, as returned by the C<stat> method,
or a list of I<name>-I<value> pairs.
=item setall ( VALUES )
Sets all values in the semaphore set to those given on the C<VALUES> list.
C<VALUES> must contain the correct number of values.
=item setval ( N , VALUE )
Set the C<N>th value in the semaphore set to C<VALUE>
=item stat
Returns an object of type C<IPC::Semaphore::stat> which is a sub-class of
C<Class::Struct>. It provides the following fields. For a description
of these fields see your system documentation.
uid
gid
cuid
cgid
mode
ctime
otime
nsems
=back
=head1 SEE ALSO
L<IPC::SysV>, L<Class::Struct>, L<semget(2)>, L<semctl(2)>, L<semop(2)>
=head1 AUTHORS
Graham Barr <gbarr@pobox.com>,
Marcus Holland-Moritz <mhx@cpan.org>
=head1 COPYRIGHT
Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz.
Version 1.x, Copyright (c) 1997, Graham Barr.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
IPC/SharedMem.pm 0000644 00000012743 15033552504 0007373 0 ustar 00 ################################################################################
#
# Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz <mhx@cpan.org>.
# Version 1.x, Copyright (C) 1997, Graham Barr <gbarr@pobox.com>.
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
################################################################################
package IPC::SharedMem;
use IPC::SysV qw(IPC_STAT IPC_RMID shmat shmdt memread memwrite);
use strict;
use vars qw($VERSION);
use Carp;
$VERSION = '2.07';
# Figure out if we have support for native sized types
my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' };
{
package IPC::SharedMem::stat;
use Class::Struct qw(struct);
struct 'IPC::SharedMem::stat' => [
uid => '$',
gid => '$',
cuid => '$',
cgid => '$',
mode => '$',
segsz => '$',
lpid => '$',
cpid => '$',
nattch => '$',
atime => '$',
dtime => '$',
ctime => '$',
];
}
sub new
{
@_ == 4 or croak 'IPC::SharedMem->new(KEY, SIZE, FLAGS)';
my($class, $key, $size, $flags) = @_;
my $id = shmget $key, $size, $flags;
return undef unless defined $id;
bless { _id => $id, _addr => undef, _isrm => 0 }, $class
}
sub id
{
my $self = shift;
$self->{_id};
}
sub addr
{
my $self = shift;
$self->{_addr};
}
sub stat
{
my $self = shift;
my $data = '';
shmctl $self->id, IPC_STAT, $data or return undef;
IPC::SharedMem::stat->new->unpack($data);
}
sub attach
{
@_ >= 1 && @_ <= 2 or croak '$shm->attach([FLAG])';
my($self, $flag) = @_;
defined $self->addr and return undef;
$self->{_addr} = shmat($self->id, undef, $flag || 0);
defined $self->addr;
}
sub detach
{
my $self = shift;
defined $self->addr or return undef;
my $rv = defined shmdt($self->addr);
undef $self->{_addr} if $rv;
$rv;
}
sub remove
{
my $self = shift;
return undef if $self->is_removed;
my $rv = shmctl $self->id, IPC_RMID, 0;
$self->{_isrm} = 1 if $rv;
return $rv;
}
sub is_removed
{
my $self = shift;
$self->{_isrm};
}
sub read
{
@_ == 3 or croak '$shm->read(POS, SIZE)';
my($self, $pos, $size) = @_;
my $buf = '';
if (defined $self->addr) {
memread($self->addr, $buf, $pos, $size) or return undef;
}
else {
shmread($self->id, $buf, $pos, $size) or return undef;
}
$buf;
}
sub write
{
@_ == 4 or croak '$shm->write(STRING, POS, SIZE)';
my($self, $str, $pos, $size) = @_;
if (defined $self->addr) {
return memwrite($self->addr, $str, $pos, $size);
}
else {
return shmwrite($self->id, $str, $pos, $size);
}
}
1;
__END__
=head1 NAME
IPC::SharedMem - SysV Shared Memory IPC object class
=head1 SYNOPSIS
use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR);
use IPC::SharedMem;
$shm = IPC::SharedMem->new(IPC_PRIVATE, 8, S_IRWXU);
$shm->write(pack("S", 4711), 2, 2);
$data = $shm->read(0, 2);
$ds = $shm->stat;
$shm->remove;
=head1 DESCRIPTION
A class providing an object based interface to SysV IPC shared memory.
=head1 METHODS
=over 4
=item new ( KEY , SIZE , FLAGS )
Creates a new shared memory segment of C<SIZE> bytes size associated
with C<KEY>. A new segment is created if
=over 4
=item *
C<KEY> is equal to C<IPC_PRIVATE>
=item *
C<KEY> does not already have a shared memory segment associated
with it, and C<I<FLAGS> & IPC_CREAT> is true.
=back
On creation of a new shared memory segment C<FLAGS> is used to
set the permissions. Be careful not to set any flags that the
Sys V IPC implementation does not allow: in some systems setting
execute bits makes the operations fail.
=item id
Returns the shared memory identifier.
=item read ( POS, SIZE )
Read C<SIZE> bytes from the shared memory segment at C<POS>. Returns
the string read, or C<undef> if there was an error. The return value
becomes tainted. See L<shmread>.
=item write ( STRING, POS, SIZE )
Write C<SIZE> bytes to the shared memory segment at C<POS>. Returns
true if successful, or false if there is an error. See L<shmwrite>.
=item remove
Remove the shared memory segment from the system or mark it as
removed as long as any processes are still attached to it.
=item is_removed
Returns true if the shared memory segment has been removed or
marked for removal.
=item stat
Returns an object of type C<IPC::SharedMem::stat> which is a sub-class
of C<Class::Struct>. It provides the following fields. For a description
of these fields see you system documentation.
uid
gid
cuid
cgid
mode
segsz
lpid
cpid
nattch
atime
dtime
ctime
=item attach ( [FLAG] )
Permanently attach to the shared memory segment. When a C<IPC::SharedMem>
object is attached, it will use L<memread> and L<memwrite> instead of
L<shmread> and L<shmwrite> for accessing the shared memory segment.
Returns true if successful, or false on error. See L<shmat(2)>.
=item detach
Detach from the shared memory segment that previously has been attached
to. Returns true if successful, or false on error. See L<shmdt(2)>.
=item addr
Returns the address of the shared memory that has been attached to in a
format suitable for use with C<pack('P')>. Returns C<undef> if the shared
memory has not been attached.
=back
=head1 SEE ALSO
L<IPC::SysV>, L<Class::Struct>
=head1 AUTHORS
Marcus Holland-Moritz <mhx@cpan.org>
=head1 COPYRIGHT
Version 2.x, Copyright (C) 2007-2013, Marcus Holland-Moritz.
Version 1.x, Copyright (c) 1997, Graham Barr.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
encoding.pm 0000644 00000054646 15033552504 0006711 0 ustar 00 # $Id: encoding.pm,v 2.22 2018/02/11 05:32:03 dankogai Exp $
package encoding;
our $VERSION = sprintf "%d.%02d", q$Revision: 2.22 $ =~ /(\d+)/g;
use Encode;
use strict;
use warnings;
use Config;
use constant {
DEBUG => !!$ENV{PERL_ENCODE_DEBUG},
HAS_PERLIO => eval { require PerlIO::encoding; PerlIO::encoding->VERSION(0.02) },
PERL_5_21_7 => $^V && $^V ge v5.21.7, # lexically scoped
};
sub _exception {
my $name = shift;
$] > 5.008 and return 0; # 5.8.1 or higher then no
my %utfs = map { $_ => 1 }
qw(utf8 UCS-2BE UCS-2LE UTF-16 UTF-16BE UTF-16LE
UTF-32 UTF-32BE UTF-32LE);
$utfs{$name} or return 0; # UTFs or no
require Config;
Config->import();
our %Config;
return $Config{perl_patchlevel} ? 0 : 1 # maintperl then no
}
sub in_locale { $^H & ( $locale::hint_bits || 0 ) }
sub _get_locale_encoding {
my $locale_encoding;
if ($^O eq 'MSWin32') {
my @tries = (
# First try to get the OutputCP. This will work only if we
# are attached to a console
'Win32.pm' => 'Win32::GetConsoleOutputCP',
'Win32/Console.pm' => 'Win32::Console::OutputCP',
# If above failed, this means that we are a GUI app
# Let's assume that the ANSI codepage is what matters
'Win32.pm' => 'Win32::GetACP',
);
while (@tries) {
my $cp = eval {
require $tries[0];
no strict 'refs';
&{$tries[1]}()
};
if ($cp) {
if ($cp == 65001) { # Code page for UTF-8
$locale_encoding = 'UTF-8';
} else {
$locale_encoding = 'cp' . $cp;
}
return $locale_encoding;
}
splice(@tries, 0, 2)
}
}
# I18N::Langinfo isn't available everywhere
$locale_encoding = eval {
require I18N::Langinfo;
find_encoding(
I18N::Langinfo::langinfo( I18N::Langinfo::CODESET() )
)->name
};
return $locale_encoding if defined $locale_encoding;
eval {
require POSIX;
# Get the current locale
# Remember that MSVCRT impl is quite different from Unixes
my $locale = POSIX::setlocale(POSIX::LC_CTYPE());
if ( $locale =~ /^([^.]+)\.([^.@]+)(?:@.*)?$/ ) {
my $country_language;
( $country_language, $locale_encoding ) = ( $1, $2 );
# Could do more heuristics based on the country and language
# since we have Locale::Country and Locale::Language available.
# TODO: get a database of Language -> Encoding mappings
# (the Estonian database at http://www.eki.ee/letter/
# would be excellent!) --jhi
if (lc($locale_encoding) eq 'euc') {
if ( $country_language =~ /^ja_JP|japan(?:ese)?$/i ) {
$locale_encoding = 'euc-jp';
}
elsif ( $country_language =~ /^ko_KR|korean?$/i ) {
$locale_encoding = 'euc-kr';
}
elsif ( $country_language =~ /^zh_CN|chin(?:a|ese)$/i ) {
$locale_encoding = 'euc-cn';
}
elsif ( $country_language =~ /^zh_TW|taiwan(?:ese)?$/i ) {
$locale_encoding = 'euc-tw';
}
else {
require Carp;
Carp::croak(
"encoding: Locale encoding '$locale_encoding' too ambiguous"
);
}
}
}
};
return $locale_encoding;
}
sub import {
if ( ord("A") == 193 ) {
require Carp;
Carp::croak("encoding: pragma does not support EBCDIC platforms");
}
my $deprecate =
($] >= 5.017 and !$Config{usecperl})
? "Use of the encoding pragma is deprecated" : 0;
my $class = shift;
my $name = shift;
if (!$name){
require Carp;
Carp::croak("encoding: no encoding specified.");
}
if ( $name eq ':_get_locale_encoding' ) { # used by lib/open.pm
my $caller = caller();
{
no strict 'refs';
*{"${caller}::_get_locale_encoding"} = \&_get_locale_encoding;
}
return;
}
$name = _get_locale_encoding() if $name eq ':locale';
BEGIN { strict->unimport('hashpairs') if $] >= 5.027 and $^V =~ /c$/; }
my %arg = @_;
$name = $ENV{PERL_ENCODING} unless defined $name;
my $enc = find_encoding($name);
unless ( defined $enc ) {
require Carp;
Carp::croak("encoding: Unknown encoding '$name'");
}
$name = $enc->name; # canonize
unless ( $arg{Filter} ) {
if ($] >= 5.025003 and !$Config{usecperl}) {
require Carp;
Carp::croak("The encoding pragma is no longer supported. Check cperl");
}
warnings::warnif("deprecated",$deprecate) if $deprecate;
DEBUG and warn "_exception($name) = ", _exception($name);
if (! _exception($name)) {
if (!PERL_5_21_7) {
${^ENCODING} = $enc;
}
else {
# Starting with 5.21.7, this pragma uses a shadow variable
# designed explicitly for it, ${^E_NCODING}, to enforce
# lexical scope; instead of ${^ENCODING}.
$^H{'encoding'} = 1;
${^E_NCODING} = $enc;
}
}
if (! HAS_PERLIO ) {
return 1;
}
}
else {
warnings::warnif("deprecated",$deprecate) if $deprecate;
defined( ${^ENCODING} ) and undef ${^ENCODING};
undef ${^E_NCODING} if PERL_5_21_7;
# implicitly 'use utf8'
require utf8; # to fetch $utf8::hint_bits;
$^H |= $utf8::hint_bits;
require Filter::Util::Call;
Filter::Util::Call->import;
filter_add(
sub {
my $status = filter_read();
if ( $status > 0 ) {
$_ = $enc->decode( $_, 1 );
DEBUG and warn $_;
}
$status;
}
);
}
defined ${^UNICODE} and ${^UNICODE} != 0 and return 1;
for my $h (qw(STDIN STDOUT)) {
if ( $arg{$h} ) {
unless ( defined find_encoding( $arg{$h} ) ) {
require Carp;
Carp::croak(
"encoding: Unknown encoding for $h, '$arg{$h}'");
}
binmode( $h, ":raw :encoding($arg{$h})" );
}
else {
unless ( exists $arg{$h} ) {
no warnings 'uninitialized';
binmode( $h, ":raw :encoding($name)" );
}
}
}
return 1; # I doubt if we need it, though
}
sub unimport {
no warnings;
undef ${^ENCODING};
undef ${^E_NCODING} if PERL_5_21_7;
if (HAS_PERLIO) {
binmode( STDIN, ":raw" );
binmode( STDOUT, ":raw" );
}
else {
binmode(STDIN);
binmode(STDOUT);
}
if ( $INC{"Filter/Util/Call.pm"} ) {
eval { filter_del() };
}
}
1;
__END__
=pod
=head1 NAME
encoding - allows you to write your script in non-ASCII and non-UTF-8
=head1 WARNING
This module has been deprecated since perl v5.18. See L</DESCRIPTION> and
L</BUGS>.
=head1 SYNOPSIS
use encoding "greek"; # Perl like Greek to you?
use encoding "euc-jp"; # Jperl!
# or you can even do this if your shell supports your native encoding
perl -Mencoding=latin2 -e'...' # Feeling centrally European?
perl -Mencoding=euc-kr -e'...' # Or Korean?
# more control
# A simple euc-cn => utf-8 converter
use encoding "euc-cn", STDOUT => "utf8"; while(<>){print};
# "no encoding;" supported
no encoding;
# an alternate way, Filter
use encoding "euc-jp", Filter=>1;
# now you can use kanji identifiers -- in euc-jp!
# encode based on the current locale - specialized purposes only;
# fraught with danger!!
use encoding ':locale';
=head1 DESCRIPTION
This pragma is used to enable a Perl script to be written in encodings that
aren't strictly ASCII nor UTF-8. It translates all or portions of the Perl
program script from a given encoding into UTF-8, and changes the PerlIO layers
of C<STDIN> and C<STDOUT> to the encoding specified.
This pragma dates from the days when UTF-8-enabled editors were uncommon. But
that was long ago, and the need for it is greatly diminished. That, coupled
with the fact that it doesn't work with threads, along with other problems,
(see L</BUGS>) have led to its being deprecated. It is planned to remove this
pragma in a future Perl version. New code should be written in UTF-8, and the
C<use utf8> pragma used instead (see L<perluniintro> and L<utf8> for details).
Old code should be converted to UTF-8, via something like the recipe in the
L</SYNOPSIS> (though this simple approach may require manual adjustments
afterwards).
If UTF-8 is not an option, it is recommended that one use a simple source
filter, such as that provided by L<Filter::Encoding> on CPAN or this
pragma's own C<Filter> option (see below).
The only legitimate use of this pragma is almost certainly just one per file,
near the top, with file scope, as the file is likely going to only be written
in one encoding. Further restrictions apply in Perls before v5.22 (see
L</Prior to Perl v5.22>).
There are two basic modes of operation (plus turning if off):
=over 4
=item C<use encoding ['I<ENCNAME>'] ;>
Please note: This mode of operation is no longer supported as of Perl
v5.26.
This is the normal operation. It translates various literals encountered in
the Perl source file from the encoding I<ENCNAME> into UTF-8, and similarly
converts character code points. This is used when the script is a combination
of ASCII (for the variable names and punctuation, I<etc>), but the literal
data is in the specified encoding.
I<ENCNAME> is optional. If omitted, the encoding specified in the environment
variable L<C<PERL_ENCODING>|perlrun/PERL_ENCODING> is used. If this isn't
set, or the resolved-to encoding is not known to C<L<Encode>>, the error
C<Unknown encoding 'I<ENCNAME>'> will be thrown.
Starting in Perl v5.8.6 (C<Encode> version 2.0.1), I<ENCNAME> may be the
name C<:locale>. This is for very specialized applications, and is documented
in L</The C<:locale> sub-pragma> below.
The literals that are converted are C<q//, qq//, qr//, qw///, qx//>, and
starting in v5.8.1, C<tr///>. Operations that do conversions include C<chr>,
C<ord>, C<utf8::upgrade> (but not C<utf8::downgrade>), and C<chomp>.
Also starting in v5.8.1, the C<DATA> pseudo-filehandle is translated from the
encoding into UTF-8.
For example, you can write code in EUC-JP as follows:
my $Rakuda = "\xF1\xD1\xF1\xCC"; # Camel in Kanji
#<-char-><-char-> # 4 octets
s/\bCamel\b/$Rakuda/;
And with C<use encoding "euc-jp"> in effect, it is the same thing as
that code in UTF-8:
my $Rakuda = "\x{99F1}\x{99DD}"; # two Unicode Characters
s/\bCamel\b/$Rakuda/;
See L</EXAMPLE> below for a more complete example.
Unless C<${^UNICODE}> (available starting in v5.8.2) exists and is non-zero, the
PerlIO layers of C<STDIN> and C<STDOUT> are set to "C<:encoding(I<ENCNAME>)>".
Therefore,
use encoding "euc-jp";
my $message = "Camel is the symbol of perl.\n";
my $Rakuda = "\xF1\xD1\xF1\xCC"; # Camel in Kanji
$message =~ s/\bCamel\b/$Rakuda/;
print $message;
will print
"\xF1\xD1\xF1\xCC is the symbol of perl.\n"
not
"\x{99F1}\x{99DD} is the symbol of perl.\n"
You can override this by giving extra arguments; see below.
Note that C<STDERR> WILL NOT be changed, regardless.
Also note that non-STD file handles remain unaffected. Use C<use
open> or C<binmode> to change the layers of those.
=item C<use encoding I<ENCNAME>, Filter=E<gt>1;>
This operates as above, but the C<Filter> argument with a non-zero
value causes the entire script, and not just literals, to be translated from
the encoding into UTF-8. This allows identifiers in the source to be in that
encoding as well. (Problems may occur if the encoding is not a superset of
ASCII; imagine all your semi-colons being translated into something
different.) One can use this form to make
${"\x{4eba}"}++
work. (This is equivalent to C<$I<human>++>, where I<human> is a single Han
ideograph).
This effectively means that your source code behaves as if it were written in
UTF-8 with C<'use utf8>' in effect. So even if your editor only supports
Shift_JIS, for example, you can still try examples in Chapter 15 of
C<Programming Perl, 3rd Ed.>.
This option is significantly slower than the other one.
=item C<no encoding;>
Unsets the script encoding. The layers of C<STDIN>, C<STDOUT> are
reset to "C<:raw>" (the default unprocessed raw stream of bytes).
=back
=head1 OPTIONS
=head2 Setting C<STDIN> and/or C<STDOUT> individually
The encodings of C<STDIN> and C<STDOUT> are individually settable by parameters to
the pragma:
use encoding 'euc-tw', STDIN => 'greek' ...;
In this case, you cannot omit the first I<ENCNAME>. C<< STDIN => undef >>
turns the I/O transcoding completely off for that filehandle.
When C<${^UNICODE}> (available starting in v5.8.2) exists and is non-zero,
these options will be completely ignored. See L<perlvar/C<${^UNICODE}>> and
L<"C<-C>" in perlrun|perlrun/-C [numberE<sol>list]> for details.
=head2 The C<:locale> sub-pragma
Starting in v5.8.6, the encoding name may be C<:locale>. This means that the
encoding is taken from the current locale, and not hard-coded by the pragma.
Since a script really can only be encoded in exactly one encoding, this option
is dangerous. It makes sense only if the script itself is written in ASCII,
and all the possible locales that will be in use when the script is executed
are supersets of ASCII. That means that the script itself doesn't get
changed, but the I/O handles have the specified encoding added, and the
operations like C<chr> and C<ord> use that encoding.
The logic of finding which locale C<:locale> uses is as follows:
=over 4
=item 1.
If the platform supports the C<langinfo(CODESET)> interface, the codeset
returned is used as the default encoding for the open pragma.
=item 2.
If 1. didn't work but we are under the locale pragma, the environment
variables C<LC_ALL> and C<LANG> (in that order) are matched for encodings
(the part after "C<.>", if any), and if any found, that is used
as the default encoding for the open pragma.
=item 3.
If 1. and 2. didn't work, the environment variables C<LC_ALL> and C<LANG>
(in that order) are matched for anything looking like UTF-8, and if
any found, C<:utf8> is used as the default encoding for the open
pragma.
=back
If your locale environment variables (C<LC_ALL>, C<LC_CTYPE>, C<LANG>)
contain the strings 'UTF-8' or 'UTF8' (case-insensitive matching),
the default encoding of your C<STDIN>, C<STDOUT>, and C<STDERR>, and of
B<any subsequent file open>, is UTF-8.
=head1 CAVEATS
=head2 SIDE EFFECTS
=over
=item *
If the C<encoding> pragma is in scope then the lengths returned are
calculated from the length of C<$/> in Unicode characters, which is not
always the same as the length of C<$/> in the native encoding.
=item *
Without this pragma, if strings operating under byte semantics and strings
with Unicode character data are concatenated, the new string will
be created by decoding the byte strings as I<ISO 8859-1 (Latin-1)>.
The B<encoding> pragma changes this to use the specified encoding
instead. For example:
use encoding 'utf8';
my $string = chr(20000); # a Unicode string
utf8::encode($string); # now it's a UTF-8 encoded byte string
# concatenate with another Unicode string
print length($string . chr(20000));
Will print C<2>, because C<$string> is upgraded as UTF-8. Without
C<use encoding 'utf8';>, it will print C<4> instead, since C<$string>
is three octets when interpreted as Latin-1.
=back
=head2 DO NOT MIX MULTIPLE ENCODINGS
Notice that only literals (string or regular expression) having only
legacy code points are affected: if you mix data like this
\x{100}\xDF
\xDF\x{100}
the data is assumed to be in (Latin 1 and) Unicode, not in your native
encoding. In other words, this will match in "greek":
"\xDF" =~ /\x{3af}/
but this will not
"\xDF\x{100}" =~ /\x{3af}\x{100}/
since the C<\xDF> (ISO 8859-7 GREEK SMALL LETTER IOTA WITH TONOS) on
the left will B<not> be upgraded to C<\x{3af}> (Unicode GREEK SMALL
LETTER IOTA WITH TONOS) because of the C<\x{100}> on the left. You
should not be mixing your legacy data and Unicode in the same string.
This pragma also affects encoding of the 0x80..0xFF code point range:
normally characters in that range are left as eight-bit bytes (unless
they are combined with characters with code points 0x100 or larger,
in which case all characters need to become UTF-8 encoded), but if
the C<encoding> pragma is present, even the 0x80..0xFF range always
gets UTF-8 encoded.
After all, the best thing about this pragma is that you don't have to
resort to \x{....} just to spell your name in a native encoding.
So feel free to put your strings in your encoding in quotes and
regexes.
=head2 Prior to Perl v5.22
The pragma was a per script, not a per block lexical. Only the last
C<use encoding> or C<no encoding> mattered, and it affected
B<the whole script>. However, the C<no encoding> pragma was supported and
C<use encoding> could appear as many times as you want in a given script
(though only the last was effective).
Since the scope wasn't lexical, other modules' use of C<chr>, C<ord>, I<etc.>
were affected. This leads to spooky, incorrect action at a distance that is
hard to debug.
This means you would have to be very careful of the load order:
# called module
package Module_IN_BAR;
use encoding "bar";
# stuff in "bar" encoding here
1;
# caller script
use encoding "foo"
use Module_IN_BAR;
# surprise! use encoding "bar" is in effect.
The best way to avoid this oddity is to use this pragma RIGHT AFTER
other modules are loaded. i.e.
use Module_IN_BAR;
use encoding "foo";
=head2 Prior to Encode version 1.87
=over
=item *
C<STDIN> and C<STDOUT> were not set under the filter option.
And C<< STDIN=>I<ENCODING> >> and C<< STDOUT=>I<ENCODING> >> didn't work like
non-filter version.
=item *
C<use utf8> wasn't implicitly declared so you have to C<use utf8> to do
${"\x{4eba}"}++
=back
=head2 Prior to Perl v5.8.1
=over
=item "NON-EUC" doublebyte encodings
Because perl needs to parse the script before applying this pragma, such
encodings as Shift_JIS and Big-5 that may contain C<'\'> (BACKSLASH;
C<\x5c>) in the second byte fail because the second byte may
accidentally escape the quoting character that follows.
=item C<tr///>
The B<encoding> pragma works by decoding string literals in
C<q//,qq//,qr//,qw///, qx//> and so forth. In perl v5.8.0, this
does not apply to C<tr///>. Therefore,
use encoding 'euc-jp';
#....
$kana =~ tr/\xA4\xA1-\xA4\xF3/\xA5\xA1-\xA5\xF3/;
# -------- -------- -------- --------
Does not work as
$kana =~ tr/\x{3041}-\x{3093}/\x{30a1}-\x{30f3}/;
=over
=item Legend of characters above
utf8 euc-jp charnames::viacode()
-----------------------------------------
\x{3041} \xA4\xA1 HIRAGANA LETTER SMALL A
\x{3093} \xA4\xF3 HIRAGANA LETTER N
\x{30a1} \xA5\xA1 KATAKANA LETTER SMALL A
\x{30f3} \xA5\xF3 KATAKANA LETTER N
=back
This counterintuitive behavior has been fixed in perl v5.8.1.
In perl v5.8.0, you can work around this as follows;
use encoding 'euc-jp';
# ....
eval qq{ \$kana =~ tr/\xA4\xA1-\xA4\xF3/\xA5\xA1-\xA5\xF3/ };
Note the C<tr//> expression is surrounded by C<qq{}>. The idea behind
this is the same as the classic idiom that makes C<tr///> 'interpolate':
tr/$from/$to/; # wrong!
eval qq{ tr/$from/$to/ }; # workaround.
=back
=head1 EXAMPLE - Greekperl
use encoding "iso 8859-7";
# \xDF in ISO 8859-7 (Greek) is \x{3af} in Unicode.
$a = "\xDF";
$b = "\x{100}";
printf "%#x\n", ord($a); # will print 0x3af, not 0xdf
$c = $a . $b;
# $c will be "\x{3af}\x{100}", not "\x{df}\x{100}".
# chr() is affected, and ...
print "mega\n" if ord(chr(0xdf)) == 0x3af;
# ... ord() is affected by the encoding pragma ...
print "tera\n" if ord(pack("C", 0xdf)) == 0x3af;
# ... as are eq and cmp ...
print "peta\n" if "\x{3af}" eq pack("C", 0xdf);
print "exa\n" if "\x{3af}" cmp pack("C", 0xdf) == 0;
# ... but pack/unpack C are not affected, in case you still
# want to go back to your native encoding
print "zetta\n" if unpack("C", (pack("C", 0xdf))) == 0xdf;
=head1 BUGS
=over
=item Thread safety
C<use encoding ...> is not thread-safe (i.e., do not use in threaded
applications).
=item Can't be used by more than one module in a single program.
Only one encoding is allowed. If you combine modules in a program that have
different encodings, only one will be actually used.
=item Other modules using C<STDIN> and C<STDOUT> get the encoded stream
They may be expecting something completely different.
=item literals in regex that are longer than 127 bytes
For native multibyte encodings (either fixed or variable length),
the current implementation of the regular expressions may introduce
recoding errors for regular expression literals longer than 127 bytes.
=item EBCDIC
The encoding pragma is not supported on EBCDIC platforms.
=item C<format>
This pragma doesn't work well with C<format> because PerlIO does not
get along very well with it. When C<format> contains non-ASCII
characters it prints funny or gets "wide character warnings".
To understand it, try the code below.
# Save this one in utf8
# replace *non-ascii* with a non-ascii string
my $camel;
format STDOUT =
*non-ascii*@>>>>>>>
$camel
.
$camel = "*non-ascii*";
binmode(STDOUT=>':encoding(utf8)'); # bang!
write; # funny
print $camel, "\n"; # fine
Without binmode this happens to work but without binmode, print()
fails instead of write().
At any rate, the very use of C<format> is questionable when it comes to
unicode characters since you have to consider such things as character
width (i.e. double-width for ideographs) and directions (i.e. BIDI for
Arabic and Hebrew).
=item See also L</CAVEATS>
=back
=head1 HISTORY
This pragma first appeared in Perl v5.8.0. It has been enhanced in later
releases as specified above.
=head1 SEE ALSO
L<perlunicode>, L<Encode>, L<open>, L<Filter::Util::Call>,
Ch. 15 of C<Programming Perl (3rd Edition)>
by Larry Wall, Tom Christiansen, Jon Orwant;
O'Reilly & Associates; ISBN 0-596-00027-8
=cut
File/Spec/Epoc.pm 0000644 00000003043 15033552504 0007543 0 ustar 00 package File::Spec::Epoc;
use strict;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
require File::Spec::Unix;
our @ISA = qw(File::Spec::Unix);
=head1 NAME
File::Spec::Epoc - methods for Epoc file specs
=head1 SYNOPSIS
require File::Spec::Epoc; # Done internally by File::Spec if needed
=head1 DESCRIPTION
See File::Spec::Unix for a documentation of the methods provided
there. This package overrides the implementation of these methods, not
the semantics.
This package is still a work in progress. ;-)
=cut
sub case_tolerant {
return 1;
}
=pod
=over 4
=item canonpath()
No physical check on the filesystem, but a logical cleanup of a
path. On UNIX eliminated successive slashes and successive "/.".
=back
=cut
sub canonpath {
my ($self,$path) = @_;
return unless defined $path;
$path =~ s|/+|/|g; # xx////xx -> xx/xx
$path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx
$path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
$path =~ s|^/(\.\./)+|/|s; # /../../xx -> xx
$path =~ s|/\Z(?!\n)|| unless $path eq "/"; # xx/ -> xx
return $path;
}
=pod
=head1 AUTHOR
o.flebbe@gmx.de
=head1 COPYRIGHT
Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
implementation of these methods, not the semantics.
=cut
1;
File/Spec/Cygwin.pm 0000644 00000007032 15033552504 0010117 0 ustar 00 package File::Spec::Cygwin;
use strict;
require File::Spec::Unix;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
our @ISA = qw(File::Spec::Unix);
=head1 NAME
File::Spec::Cygwin - methods for Cygwin file specs
=head1 SYNOPSIS
require File::Spec::Cygwin; # Done internally by File::Spec if needed
=head1 DESCRIPTION
See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
implementation of these methods, not the semantics.
This module is still in beta. Cygwin-knowledgeable folks are invited
to offer patches and suggestions.
=cut
=pod
=over 4
=item canonpath
Any C<\> (backslashes) are converted to C</> (forward slashes),
and then File::Spec::Unix canonpath() is called on the result.
=cut
sub canonpath {
my($self,$path) = @_;
return unless defined $path;
$path =~ s|\\|/|g;
# Handle network path names beginning with double slash
my $node = '';
if ( $path =~ s@^(//[^/]+)(?:/|\z)@/@s ) {
$node = $1;
}
return $node . $self->SUPER::canonpath($path);
}
sub catdir {
my $self = shift;
return unless @_;
# Don't create something that looks like a //network/path
if ($_[0] and ($_[0] eq '/' or $_[0] eq '\\')) {
shift;
return $self->SUPER::catdir('', @_);
}
$self->SUPER::catdir(@_);
}
=pod
=item file_name_is_absolute
True is returned if the file name begins with C<drive_letter:>,
and if not, File::Spec::Unix file_name_is_absolute() is called.
=cut
sub file_name_is_absolute {
my ($self,$file) = @_;
return 1 if $file =~ m{^([a-z]:)?[\\/]}is; # C:/test
return $self->SUPER::file_name_is_absolute($file);
}
=item tmpdir (override)
Returns a string representation of the first existing directory
from the following list:
$ENV{TMPDIR}
/tmp
$ENV{'TMP'}
$ENV{'TEMP'}
C:/temp
If running under taint mode, and if the environment
variables are tainted, they are not used.
=cut
sub tmpdir {
my $cached = $_[0]->_cached_tmpdir(qw 'TMPDIR TMP TEMP');
return $cached if defined $cached;
$_[0]->_cache_tmpdir(
$_[0]->_tmpdir(
$ENV{TMPDIR}, "/tmp", $ENV{'TMP'}, $ENV{'TEMP'}, 'C:/temp'
),
qw 'TMPDIR TMP TEMP'
);
}
=item case_tolerant
Override Unix. Cygwin case-tolerance depends on managed mount settings and
as with MsWin32 on GetVolumeInformation() $ouFsFlags == FS_CASE_SENSITIVE,
indicating the case significance when comparing file specifications.
Default: 1
=cut
sub case_tolerant {
return 1 unless $^O eq 'cygwin'
and defined &Cygwin::mount_flags;
my $drive = shift;
if (! $drive) {
my @flags = split(/,/, Cygwin::mount_flags('/cygwin'));
my $prefix = pop(@flags);
if (! $prefix || $prefix eq 'cygdrive') {
$drive = '/cygdrive/c';
} elsif ($prefix eq '/') {
$drive = '/c';
} else {
$drive = "$prefix/c";
}
}
my $mntopts = Cygwin::mount_flags($drive);
if ($mntopts and ($mntopts =~ /,managed/)) {
return 0;
}
eval {
local @INC = @INC;
pop @INC if $INC[-1] eq '.';
require Win32API::File;
} or return 1;
my $osFsType = "\0"x256;
my $osVolName = "\0"x256;
my $ouFsFlags = 0;
Win32API::File::GetVolumeInformation($drive, $osVolName, 256, [], [], $ouFsFlags, $osFsType, 256 );
if ($ouFsFlags & Win32API::File::FS_CASE_SENSITIVE()) { return 0; }
else { return 1; }
}
=back
=head1 COPYRIGHT
Copyright (c) 2004,2007 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
1;
File/Spec/Unix.pm 0000644 00000037021 15033552504 0007603 0 ustar 00 package File::Spec::Unix;
use strict;
use Cwd ();
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
=head1 NAME
File::Spec::Unix - File::Spec for Unix, base for other File::Spec modules
=head1 SYNOPSIS
require File::Spec::Unix; # Done automatically by File::Spec
=head1 DESCRIPTION
Methods for manipulating file specifications. Other File::Spec
modules, such as File::Spec::Mac, inherit from File::Spec::Unix and
override specific methods.
=head1 METHODS
=over 2
=item canonpath()
No physical check on the filesystem, but a logical cleanup of a
path. On UNIX eliminates successive slashes and successive "/.".
$cpath = File::Spec->canonpath( $path ) ;
Note that this does *not* collapse F<x/../y> sections into F<y>. This
is by design. If F</foo> on your system is a symlink to F</bar/baz>,
then F</foo/../quux> is actually F</bar/quux>, not F</quux> as a naive
F<../>-removal would give you. If you want to do this kind of
processing, you probably want C<Cwd>'s C<realpath()> function to
actually traverse the filesystem cleaning up paths like this.
=cut
sub _pp_canonpath {
my ($self,$path) = @_;
return unless defined $path;
# Handle POSIX-style node names beginning with double slash (qnx, nto)
# (POSIX says: "a pathname that begins with two successive slashes
# may be interpreted in an implementation-defined manner, although
# more than two leading slashes shall be treated as a single slash.")
my $node = '';
my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto';
if ( $double_slashes_special
&& ( $path =~ s{^(//[^/]+)/?\z}{}s || $path =~ s{^(//[^/]+)/}{/}s ) ) {
$node = $1;
}
# This used to be
# $path =~ s|/+|/|g unless ($^O eq 'cygwin');
# but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail
# (Mainly because trailing "" directories didn't get stripped).
# Why would cygwin avoid collapsing multiple slashes into one? --jhi
$path =~ s|/{2,}|/|g; # xx////xx -> xx/xx
$path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx
$path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx
$path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx
$path =~ s|^/\.\.$|/|; # /.. -> /
$path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx
return "$node$path";
}
*canonpath = \&_pp_canonpath unless defined &canonpath;
=item catdir()
Concatenate two or more directory names to form a complete path ending
with a directory. But remove the trailing slash from the resulting
string, because it doesn't look good, isn't necessary and confuses
OS2. Of course, if this is the root directory, don't cut off the
trailing slash :-)
=cut
sub _pp_catdir {
my $self = shift;
$self->canonpath(join('/', @_, '')); # '' because need a trailing '/'
}
*catdir = \&_pp_catdir unless defined &catdir;
=item catfile
Concatenate one or more directory names and a filename to form a
complete path ending with a filename
=cut
sub _pp_catfile {
my $self = shift;
my $file = $self->canonpath(pop @_);
return $file unless @_;
my $dir = $self->catdir(@_);
$dir .= "/" unless substr($dir,-1) eq "/";
return $dir.$file;
}
*catfile = \&_pp_catfile unless defined &catfile;
=item curdir
Returns a string representation of the current directory. "." on UNIX.
=cut
sub curdir { '.' }
use constant _fn_curdir => ".";
=item devnull
Returns a string representation of the null device. "/dev/null" on UNIX.
=cut
sub devnull { '/dev/null' }
use constant _fn_devnull => "/dev/null";
=item rootdir
Returns a string representation of the root directory. "/" on UNIX.
=cut
sub rootdir { '/' }
use constant _fn_rootdir => "/";
=item tmpdir
Returns a string representation of the first writable directory from
the following list or the current directory if none from the list are
writable:
$ENV{TMPDIR}
/tmp
If running under taint mode, and if $ENV{TMPDIR}
is tainted, it is not used.
=cut
my ($tmpdir, %tmpenv);
# Cache and return the calculated tmpdir, recording which env vars
# determined it.
sub _cache_tmpdir {
@tmpenv{@_[2..$#_]} = @ENV{@_[2..$#_]};
return $tmpdir = $_[1];
}
# Retrieve the cached tmpdir, checking first whether relevant env vars have
# changed and invalidated the cache.
sub _cached_tmpdir {
shift;
local $^W;
return if grep $ENV{$_} ne $tmpenv{$_}, @_;
return $tmpdir;
}
sub _tmpdir {
my $self = shift;
my @dirlist = @_;
my $taint = do { no strict 'refs'; ${"\cTAINT"} };
if ($taint) { # Check for taint mode on perl >= 5.8.0
require Scalar::Util;
@dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist;
}
elsif ($] < 5.007) { # No ${^TAINT} before 5.8
@dirlist = grep { !defined($_) || eval { eval('1'.substr $_,0,0) } }
@dirlist;
}
foreach (@dirlist) {
next unless defined && -d && -w _;
$tmpdir = $_;
last;
}
$tmpdir = $self->curdir unless defined $tmpdir;
$tmpdir = defined $tmpdir && $self->canonpath($tmpdir);
if ( !$self->file_name_is_absolute($tmpdir) ) {
# See [perl #120593] for the full details
# If possible, return a full path, rather than '.' or 'lib', but
# jump through some hoops to avoid returning a tainted value.
($tmpdir) = grep {
$taint ? ! Scalar::Util::tainted($_) :
$] < 5.007 ? eval { eval('1'.substr $_,0,0) } : 1
} $self->rel2abs($tmpdir), $tmpdir;
}
return $tmpdir;
}
sub tmpdir {
my $cached = $_[0]->_cached_tmpdir('TMPDIR');
return $cached if defined $cached;
$_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" ), 'TMPDIR');
}
=item updir
Returns a string representation of the parent directory. ".." on UNIX.
=cut
sub updir { '..' }
use constant _fn_updir => "..";
=item no_upwards
Given a list of file names, strip out those that refer to a parent
directory. (Does not strip symlinks, only '.', '..', and equivalents.)
=cut
sub no_upwards {
my $self = shift;
return grep(!/^\.{1,2}\z/s, @_);
}
=item case_tolerant
Returns a true or false value indicating, respectively, that alphabetic
is not or is significant when comparing file specifications.
=cut
sub case_tolerant { 0 }
use constant _fn_case_tolerant => 0;
=item file_name_is_absolute
Takes as argument a path and returns true if it is an absolute path.
This does not consult the local filesystem on Unix, Win32, OS/2 or Mac
OS (Classic). It does consult the working environment for VMS (see
L<File::Spec::VMS/file_name_is_absolute>).
=cut
sub file_name_is_absolute {
my ($self,$file) = @_;
return scalar($file =~ m:^/:s);
}
=item path
Takes no argument, returns the environment variable PATH as an array.
=cut
sub path {
return () unless exists $ENV{PATH};
my @path = split(':', $ENV{PATH});
foreach (@path) { $_ = '.' if $_ eq '' }
return @path;
}
=item join
join is the same as catfile.
=cut
sub join {
my $self = shift;
return $self->catfile(@_);
}
=item splitpath
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path,
$no_file );
Splits a path into volume, directory, and filename portions. On systems
with no concept of volume, returns '' for volume.
For systems with no syntax differentiating filenames from directories,
assumes that the last file is a path unless $no_file is true or a
trailing separator or /. or /.. is present. On Unix this means that $no_file
true makes this return ( '', $path, '' ).
The directory portion may or may not be returned with a trailing '/'.
The results can be passed to L</catpath()> to get back a path equivalent to
(usually identical to) the original path.
=cut
sub splitpath {
my ($self,$path, $nofile) = @_;
my ($volume,$directory,$file) = ('','','');
if ( $nofile ) {
$directory = $path;
}
else {
$path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs;
$directory = $1;
$file = $2;
}
return ($volume,$directory,$file);
}
=item splitdir
The opposite of L</catdir()>.
@dirs = File::Spec->splitdir( $directories );
$directories must be only the directory portion of the path on systems
that have the concept of a volume or that have path syntax that differentiates
files from directories.
Unlike just splitting the directories on the separator, empty
directory names (C<''>) can be returned, because these are significant
on some OSs.
On Unix,
File::Spec->splitdir( "/a/b//c/" );
Yields:
( '', 'a', 'b', '', 'c', '' )
=cut
sub splitdir {
return split m|/|, $_[1], -1; # Preserve trailing fields
}
=item catpath()
Takes volume, directory and file portions and returns an entire path. Under
Unix, $volume is ignored, and directory and file are concatenated. A '/' is
inserted if needed (though if the directory portion doesn't start with
'/' it is not added). On other OSs, $volume is significant.
=cut
sub catpath {
my ($self,$volume,$directory,$file) = @_;
if ( $directory ne '' &&
$file ne '' &&
substr( $directory, -1 ) ne '/' &&
substr( $file, 0, 1 ) ne '/'
) {
$directory .= "/$file" ;
}
else {
$directory .= $file ;
}
return $directory ;
}
=item abs2rel
Takes a destination path and an optional base path returns a relative path
from the base path to the destination path:
$rel_path = File::Spec->abs2rel( $path ) ;
$rel_path = File::Spec->abs2rel( $path, $base ) ;
If $base is not present or '', then L<cwd()|Cwd> is used. If $base is
relative, then it is converted to absolute form using
L</rel2abs()>. This means that it is taken to be relative to
L<cwd()|Cwd>.
On systems that have a grammar that indicates filenames, this ignores the
$base filename. Otherwise all path components are assumed to be
directories.
If $path is relative, it is converted to absolute form using L</rel2abs()>.
This means that it is taken to be relative to L<cwd()|Cwd>.
No checks against the filesystem are made, so the result may not be correct if
C<$base> contains symbolic links. (Apply
L<Cwd::abs_path()|Cwd/abs_path> beforehand if that
is a concern.) On VMS, there is interaction with the working environment, as
logicals and macros are expanded.
Based on code written by Shigio Yamaguchi.
=cut
sub abs2rel {
my($self,$path,$base) = @_;
$base = Cwd::getcwd() unless defined $base and length $base;
($path, $base) = map $self->canonpath($_), $path, $base;
my $path_directories;
my $base_directories;
if (grep $self->file_name_is_absolute($_), $path, $base) {
($path, $base) = map $self->rel2abs($_), $path, $base;
my ($path_volume) = $self->splitpath($path, 1);
my ($base_volume) = $self->splitpath($base, 1);
# Can't relativize across volumes
return $path unless $path_volume eq $base_volume;
$path_directories = ($self->splitpath($path, 1))[1];
$base_directories = ($self->splitpath($base, 1))[1];
# For UNC paths, the user might give a volume like //foo/bar that
# strictly speaking has no directory portion. Treat it as if it
# had the root directory for that volume.
if (!length($base_directories) and $self->file_name_is_absolute($base)) {
$base_directories = $self->rootdir;
}
}
else {
my $wd= ($self->splitpath(Cwd::getcwd(), 1))[1];
$path_directories = $self->catdir($wd, $path);
$base_directories = $self->catdir($wd, $base);
}
# Now, remove all leading components that are the same
my @pathchunks = $self->splitdir( $path_directories );
my @basechunks = $self->splitdir( $base_directories );
if ($base_directories eq $self->rootdir) {
return $self->curdir if $path_directories eq $self->rootdir;
shift @pathchunks;
return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') );
}
my @common;
while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) {
push @common, shift @pathchunks ;
shift @basechunks ;
}
return $self->curdir unless @pathchunks || @basechunks;
# @basechunks now contains the directories the resulting relative path
# must ascend out of before it can descend to $path_directory. If there
# are updir components, we must descend into the corresponding directories
# (this only works if they are no symlinks).
my @reverse_base;
while( defined(my $dir= shift @basechunks) ) {
if( $dir ne $self->updir ) {
unshift @reverse_base, $self->updir;
push @common, $dir;
}
elsif( @common ) {
if( @reverse_base && $reverse_base[0] eq $self->updir ) {
shift @reverse_base;
pop @common;
}
else {
unshift @reverse_base, pop @common;
}
}
}
my $result_dirs = $self->catdir( @reverse_base, @pathchunks );
return $self->canonpath( $self->catpath('', $result_dirs, '') );
}
sub _same {
$_[1] eq $_[2];
}
=item rel2abs()
Converts a relative path to an absolute path.
$abs_path = File::Spec->rel2abs( $path ) ;
$abs_path = File::Spec->rel2abs( $path, $base ) ;
If $base is not present or '', then L<cwd()|Cwd> is used. If $base is
relative, then it is converted to absolute form using
L</rel2abs()>. This means that it is taken to be relative to
L<cwd()|Cwd>.
On systems that have a grammar that indicates filenames, this ignores
the $base filename. Otherwise all path components are assumed to be
directories.
If $path is absolute, it is cleaned up and returned using L</canonpath()>.
No checks against the filesystem are made. On VMS, there is
interaction with the working environment, as logicals and
macros are expanded.
Based on code written by Shigio Yamaguchi.
=cut
sub rel2abs {
my ($self,$path,$base ) = @_;
# Clean up $path
if ( ! $self->file_name_is_absolute( $path ) ) {
# Figure out the effective $base and clean it up.
if ( !defined( $base ) || $base eq '' ) {
$base = Cwd::getcwd();
}
elsif ( ! $self->file_name_is_absolute( $base ) ) {
$base = $self->rel2abs( $base ) ;
}
else {
$base = $self->canonpath( $base ) ;
}
# Glom them together
$path = $self->catdir( $base, $path ) ;
}
return $self->canonpath( $path ) ;
}
=back
=head1 COPYRIGHT
Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
Please submit bug reports and patches to perlbug@perl.org.
=head1 SEE ALSO
L<File::Spec>
=cut
# Internal method to reduce xx\..\yy -> yy
sub _collapse {
my($fs, $path) = @_;
my $updir = $fs->updir;
my $curdir = $fs->curdir;
my($vol, $dirs, $file) = $fs->splitpath($path);
my @dirs = $fs->splitdir($dirs);
pop @dirs if @dirs && $dirs[-1] eq '';
my @collapsed;
foreach my $dir (@dirs) {
if( $dir eq $updir and # if we have an updir
@collapsed and # and something to collapse
length $collapsed[-1] and # and its not the rootdir
$collapsed[-1] ne $updir and # nor another updir
$collapsed[-1] ne $curdir # nor the curdir
)
{ # then
pop @collapsed; # collapse
}
else { # else
push @collapsed, $dir; # just hang onto it
}
}
return $fs->catpath($vol,
$fs->catdir(@collapsed),
$file
);
}
1;
File/Spec/Mac.pm 0000644 00000053402 15033552504 0007361 0 ustar 00 package File::Spec::Mac;
use strict;
use Cwd ();
require File::Spec::Unix;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
our @ISA = qw(File::Spec::Unix);
sub case_tolerant { 1 }
=head1 NAME
File::Spec::Mac - File::Spec for Mac OS (Classic)
=head1 SYNOPSIS
require File::Spec::Mac; # Done internally by File::Spec if needed
=head1 DESCRIPTION
Methods for manipulating file specifications.
=head1 METHODS
=over 2
=item canonpath
On Mac OS, there's nothing to be done. Returns what it's given.
=cut
sub canonpath {
my ($self,$path) = @_;
return $path;
}
=item catdir()
Concatenate two or more directory names to form a path separated by colons
(":") ending with a directory. Resulting paths are B<relative> by default,
but can be forced to be absolute (but avoid this, see below). Automatically
puts a trailing ":" on the end of the complete path, because that's what's
done in MacPerl's environment and helps to distinguish a file path from a
directory path.
B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the resulting
path is relative by default and I<not> absolute. This decision was made due
to portability reasons. Since C<File::Spec-E<gt>catdir()> returns relative paths
on all other operating systems, it will now also follow this convention on Mac
OS. Note that this may break some existing scripts.
The intended purpose of this routine is to concatenate I<directory names>.
But because of the nature of Macintosh paths, some additional possibilities
are allowed to make using this routine give reasonable results for some
common situations. In other words, you are also allowed to concatenate
I<paths> instead of directory names (strictly speaking, a string like ":a"
is a path, but not a name, since it contains a punctuation character ":").
So, beside calls like
catdir("a") = ":a:"
catdir("a","b") = ":a:b:"
catdir() = "" (special case)
calls like the following
catdir(":a:") = ":a:"
catdir(":a","b") = ":a:b:"
catdir(":a:","b") = ":a:b:"
catdir(":a:",":b:") = ":a:b:"
catdir(":") = ":"
are allowed.
Here are the rules that are used in C<catdir()>; note that we try to be as
compatible as possible to Unix:
=over 2
=item 1.
The resulting path is relative by default, i.e. the resulting path will have a
leading colon.
=item 2.
A trailing colon is added automatically to the resulting path, to denote a
directory.
=item 3.
Generally, each argument has one leading ":" and one trailing ":"
removed (if any). They are then joined together by a ":". Special
treatment applies for arguments denoting updir paths like "::lib:",
see (4), or arguments consisting solely of colons ("colon paths"),
see (5).
=item 4.
When an updir path like ":::lib::" is passed as argument, the number
of directories to climb up is handled correctly, not removing leading
or trailing colons when necessary. E.g.
catdir(":::a","::b","c") = ":::a::b:c:"
catdir(":::a::","::b","c") = ":::a:::b:c:"
=item 5.
Adding a colon ":" or empty string "" to a path at I<any> position
doesn't alter the path, i.e. these arguments are ignored. (When a ""
is passed as the first argument, it has a special meaning, see
(6)). This way, a colon ":" is handled like a "." (curdir) on Unix,
while an empty string "" is generally ignored (see
L<File::Spec::Unix/canonpath()> ). Likewise, a "::" is handled like a ".."
(updir), and a ":::" is handled like a "../.." etc. E.g.
catdir("a",":",":","b") = ":a:b:"
catdir("a",":","::",":b") = ":a::b:"
=item 6.
If the first argument is an empty string "" or is a volume name, i.e. matches
the pattern /^[^:]+:/, the resulting path is B<absolute>.
=item 7.
Passing an empty string "" as the first argument to C<catdir()> is
like passingC<File::Spec-E<gt>rootdir()> as the first argument, i.e.
catdir("","a","b") is the same as
catdir(rootdir(),"a","b").
This is true on Unix, where C<catdir("","a","b")> yields "/a/b" and
C<rootdir()> is "/". Note that C<rootdir()> on Mac OS is the startup
volume, which is the closest in concept to Unix' "/". This should help
to run existing scripts originally written for Unix.
=item 8.
For absolute paths, some cleanup is done, to ensure that the volume
name isn't immediately followed by updirs. This is invalid, because
this would go beyond "root". Generally, these cases are handled like
their Unix counterparts:
Unix:
Unix->catdir("","") = "/"
Unix->catdir("",".") = "/"
Unix->catdir("","..") = "/" # can't go
# beyond root
Unix->catdir("",".","..","..","a") = "/a"
Mac:
Mac->catdir("","") = rootdir() # (e.g. "HD:")
Mac->catdir("",":") = rootdir()
Mac->catdir("","::") = rootdir() # can't go
# beyond root
Mac->catdir("",":","::","::","a") = rootdir() . "a:"
# (e.g. "HD:a:")
However, this approach is limited to the first arguments following
"root" (again, see L<File::Spec::Unix/canonpath()>. If there are more
arguments that move up the directory tree, an invalid path going
beyond root can be created.
=back
As you've seen, you can force C<catdir()> to create an absolute path
by passing either an empty string or a path that begins with a volume
name as the first argument. However, you are strongly encouraged not
to do so, since this is done only for backward compatibility. Newer
versions of File::Spec come with a method called C<catpath()> (see
below), that is designed to offer a portable solution for the creation
of absolute paths. It takes volume, directory and file portions and
returns an entire path. While C<catdir()> is still suitable for the
concatenation of I<directory names>, you are encouraged to use
C<catpath()> to concatenate I<volume names> and I<directory
paths>. E.g.
$dir = File::Spec->catdir("tmp","sources");
$abs_path = File::Spec->catpath("MacintoshHD:", $dir,"");
yields
"MacintoshHD:tmp:sources:" .
=cut
sub catdir {
my $self = shift;
return '' unless @_;
my @args = @_;
my $first_arg;
my $relative;
# take care of the first argument
if ($args[0] eq '') { # absolute path, rootdir
shift @args;
$relative = 0;
$first_arg = $self->rootdir;
} elsif ($args[0] =~ /^[^:]+:/) { # absolute path, volume name
$relative = 0;
$first_arg = shift @args;
# add a trailing ':' if need be (may be it's a path like HD:dir)
$first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/);
} else { # relative path
$relative = 1;
if ( $args[0] =~ /^::+\Z(?!\n)/ ) {
# updir colon path ('::', ':::' etc.), don't shift
$first_arg = ':';
} elsif ($args[0] eq ':') {
$first_arg = shift @args;
} else {
# add a trailing ':' if need be
$first_arg = shift @args;
$first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/);
}
}
# For all other arguments,
# (a) ignore arguments that equal ':' or '',
# (b) handle updir paths specially:
# '::' -> concatenate '::'
# '::' . '::' -> concatenate ':::' etc.
# (c) add a trailing ':' if need be
my $result = $first_arg;
while (@args) {
my $arg = shift @args;
unless (($arg eq '') || ($arg eq ':')) {
if ($arg =~ /^::+\Z(?!\n)/ ) { # updir colon path like ':::'
my $updir_count = length($arg) - 1;
while ((@args) && ($args[0] =~ /^::+\Z(?!\n)/) ) { # while updir colon path
$arg = shift @args;
$updir_count += (length($arg) - 1);
}
$arg = (':' x $updir_count);
} else {
$arg =~ s/^://s; # remove a leading ':' if any
$arg = "$arg:" unless ($arg =~ /:\Z(?!\n)/); # ensure trailing ':'
}
$result .= $arg;
}#unless
}
if ( ($relative) && ($result !~ /^:/) ) {
# add a leading colon if need be
$result = ":$result";
}
unless ($relative) {
# remove updirs immediately following the volume name
$result =~ s/([^:]+:)(:*)(.*)\Z(?!\n)/$1$3/;
}
return $result;
}
=item catfile
Concatenate one or more directory names and a filename to form a
complete path ending with a filename. Resulting paths are B<relative>
by default, but can be forced to be absolute (but avoid this).
B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the
resulting path is relative by default and I<not> absolute. This
decision was made due to portability reasons. Since
C<File::Spec-E<gt>catfile()> returns relative paths on all other
operating systems, it will now also follow this convention on Mac OS.
Note that this may break some existing scripts.
The last argument is always considered to be the file portion. Since
C<catfile()> uses C<catdir()> (see above) for the concatenation of the
directory portions (if any), the following with regard to relative and
absolute paths is true:
catfile("") = ""
catfile("file") = "file"
but
catfile("","") = rootdir() # (e.g. "HD:")
catfile("","file") = rootdir() . file # (e.g. "HD:file")
catfile("HD:","file") = "HD:file"
This means that C<catdir()> is called only when there are two or more
arguments, as one might expect.
Note that the leading ":" is removed from the filename, so that
catfile("a","b","file") = ":a:b:file" and
catfile("a","b",":file") = ":a:b:file"
give the same answer.
To concatenate I<volume names>, I<directory paths> and I<filenames>,
you are encouraged to use C<catpath()> (see below).
=cut
sub catfile {
my $self = shift;
return '' unless @_;
my $file = pop @_;
return $file unless @_;
my $dir = $self->catdir(@_);
$file =~ s/^://s;
return $dir.$file;
}
=item curdir
Returns a string representing the current directory. On Mac OS, this is ":".
=cut
sub curdir {
return ":";
}
=item devnull
Returns a string representing the null device. On Mac OS, this is "Dev:Null".
=cut
sub devnull {
return "Dev:Null";
}
=item rootdir
Returns the empty string. Mac OS has no real root directory.
=cut
sub rootdir { '' }
=item tmpdir
Returns the contents of $ENV{TMPDIR}, if that directory exits or the
current working directory otherwise. Under MacPerl, $ENV{TMPDIR} will
contain a path like "MacintoshHD:Temporary Items:", which is a hidden
directory on your startup volume.
=cut
sub tmpdir {
my $cached = $_[0]->_cached_tmpdir('TMPDIR');
return $cached if defined $cached;
$_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR} ), 'TMPDIR');
}
=item updir
Returns a string representing the parent directory. On Mac OS, this is "::".
=cut
sub updir {
return "::";
}
=item file_name_is_absolute
Takes as argument a path and returns true, if it is an absolute path.
If the path has a leading ":", it's a relative path. Otherwise, it's an
absolute path, unless the path doesn't contain any colons, i.e. it's a name
like "a". In this particular case, the path is considered to be relative
(i.e. it is considered to be a filename). Use ":" in the appropriate place
in the path if you want to distinguish unambiguously. As a special case,
the filename '' is always considered to be absolute. Note that with version
1.2 of File::Spec::Mac, this does no longer consult the local filesystem.
E.g.
File::Spec->file_name_is_absolute("a"); # false (relative)
File::Spec->file_name_is_absolute(":a:b:"); # false (relative)
File::Spec->file_name_is_absolute("MacintoshHD:");
# true (absolute)
File::Spec->file_name_is_absolute(""); # true (absolute)
=cut
sub file_name_is_absolute {
my ($self,$file) = @_;
if ($file =~ /:/) {
return (! ($file =~ m/^:/s) );
} elsif ( $file eq '' ) {
return 1 ;
} else {
return 0; # i.e. a file like "a"
}
}
=item path
Returns the null list for the MacPerl application, since the concept is
usually meaningless under Mac OS. But if you're using the MacPerl tool under
MPW, it gives back $ENV{Commands} suitably split, as is done in
:lib:ExtUtils:MM_Mac.pm.
=cut
sub path {
#
# The concept is meaningless under the MacPerl application.
# Under MPW, it has a meaning.
#
return unless exists $ENV{Commands};
return split(/,/, $ENV{Commands});
}
=item splitpath
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path,
$no_file );
Splits a path into volume, directory, and filename portions.
On Mac OS, assumes that the last part of the path is a filename unless
$no_file is true or a trailing separator ":" is present.
The volume portion is always returned with a trailing ":". The directory portion
is always returned with a leading (to denote a relative path) and a trailing ":"
(to denote a directory). The file portion is always returned I<without> a leading ":".
Empty portions are returned as empty string ''.
The results can be passed to C<catpath()> to get back a path equivalent to
(usually identical to) the original path.
=cut
sub splitpath {
my ($self,$path, $nofile) = @_;
my ($volume,$directory,$file);
if ( $nofile ) {
( $volume, $directory ) = $path =~ m|^((?:[^:]+:)?)(.*)|s;
}
else {
$path =~
m|^( (?: [^:]+: )? )
( (?: .*: )? )
( .* )
|xs;
$volume = $1;
$directory = $2;
$file = $3;
}
$volume = '' unless defined($volume);
$directory = ":$directory" if ( $volume && $directory ); # take care of "HD::dir"
if ($directory) {
# Make sure non-empty directories begin and end in ':'
$directory .= ':' unless (substr($directory,-1) eq ':');
$directory = ":$directory" unless (substr($directory,0,1) eq ':');
} else {
$directory = '';
}
$file = '' unless defined($file);
return ($volume,$directory,$file);
}
=item splitdir
The opposite of C<catdir()>.
@dirs = File::Spec->splitdir( $directories );
$directories should be only the directory portion of the path on systems
that have the concept of a volume or that have path syntax that differentiates
files from directories. Consider using C<splitpath()> otherwise.
Unlike just splitting the directories on the separator, empty directory names
(C<"">) can be returned. Since C<catdir()> on Mac OS always appends a trailing
colon to distinguish a directory path from a file path, a single trailing colon
will be ignored, i.e. there's no empty directory name after it.
Hence, on Mac OS, both
File::Spec->splitdir( ":a:b::c:" ); and
File::Spec->splitdir( ":a:b::c" );
yield:
( "a", "b", "::", "c")
while
File::Spec->splitdir( ":a:b::c::" );
yields:
( "a", "b", "::", "c", "::")
=cut
sub splitdir {
my ($self, $path) = @_;
my @result = ();
my ($head, $sep, $tail, $volume, $directories);
return @result if ( (!defined($path)) || ($path eq '') );
return (':') if ($path eq ':');
( $volume, $sep, $directories ) = $path =~ m|^((?:[^:]+:)?)(:*)(.*)|s;
# deprecated, but handle it correctly
if ($volume) {
push (@result, $volume);
$sep .= ':';
}
while ($sep || $directories) {
if (length($sep) > 1) {
my $updir_count = length($sep) - 1;
for (my $i=0; $i<$updir_count; $i++) {
# push '::' updir_count times;
# simulate Unix '..' updirs
push (@result, '::');
}
}
$sep = '';
if ($directories) {
( $head, $sep, $tail ) = $directories =~ m|^((?:[^:]+)?)(:*)(.*)|s;
push (@result, $head);
$directories = $tail;
}
}
return @result;
}
=item catpath
$path = File::Spec->catpath($volume,$directory,$file);
Takes volume, directory and file portions and returns an entire path. On Mac OS,
$volume, $directory and $file are concatenated. A ':' is inserted if need be. You
may pass an empty string for each portion. If all portions are empty, the empty
string is returned. If $volume is empty, the result will be a relative path,
beginning with a ':'. If $volume and $directory are empty, a leading ":" (if any)
is removed form $file and the remainder is returned. If $file is empty, the
resulting path will have a trailing ':'.
=cut
sub catpath {
my ($self,$volume,$directory,$file) = @_;
if ( (! $volume) && (! $directory) ) {
$file =~ s/^:// if $file;
return $file ;
}
# We look for a volume in $volume, then in $directory, but not both
my ($dir_volume, $dir_dirs) = $self->splitpath($directory, 1);
$volume = $dir_volume unless length $volume;
my $path = $volume; # may be ''
$path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':'
if ($directory) {
$directory = $dir_dirs if $volume;
$directory =~ s/^://; # remove leading ':' if any
$path .= $directory;
$path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':'
}
if ($file) {
$file =~ s/^://; # remove leading ':' if any
$path .= $file;
}
return $path;
}
=item abs2rel
Takes a destination path and an optional base path and returns a relative path
from the base path to the destination path:
$rel_path = File::Spec->abs2rel( $path ) ;
$rel_path = File::Spec->abs2rel( $path, $base ) ;
Note that both paths are assumed to have a notation that distinguishes a
directory path (with trailing ':') from a file path (without trailing ':').
If $base is not present or '', then the current working directory is used.
If $base is relative, then it is converted to absolute form using C<rel2abs()>.
This means that it is taken to be relative to the current working directory.
If $path and $base appear to be on two different volumes, we will not
attempt to resolve the two paths, and we will instead simply return
$path. Note that previous versions of this module ignored the volume
of $base, which resulted in garbage results part of the time.
If $base doesn't have a trailing colon, the last element of $base is
assumed to be a filename. This filename is ignored. Otherwise all path
components are assumed to be directories.
If $path is relative, it is converted to absolute form using C<rel2abs()>.
This means that it is taken to be relative to the current working directory.
Based on code written by Shigio Yamaguchi.
=cut
# maybe this should be done in canonpath() ?
sub _resolve_updirs {
my $path = shift @_;
my $proceed;
# resolve any updirs, e.g. "HD:tmp::file" -> "HD:file"
do {
$proceed = ($path =~ s/^(.*):[^:]+::(.*?)\z/$1:$2/);
} while ($proceed);
return $path;
}
sub abs2rel {
my($self,$path,$base) = @_;
# Clean up $path
if ( ! $self->file_name_is_absolute( $path ) ) {
$path = $self->rel2abs( $path ) ;
}
# Figure out the effective $base and clean it up.
if ( !defined( $base ) || $base eq '' ) {
$base = Cwd::getcwd();
}
elsif ( ! $self->file_name_is_absolute( $base ) ) {
$base = $self->rel2abs( $base ) ;
$base = _resolve_updirs( $base ); # resolve updirs in $base
}
else {
$base = _resolve_updirs( $base );
}
# Split up paths - ignore $base's file
my ( $path_vol, $path_dirs, $path_file ) = $self->splitpath( $path );
my ( $base_vol, $base_dirs ) = $self->splitpath( $base );
return $path unless lc( $path_vol ) eq lc( $base_vol );
# Now, remove all leading components that are the same
my @pathchunks = $self->splitdir( $path_dirs );
my @basechunks = $self->splitdir( $base_dirs );
while ( @pathchunks &&
@basechunks &&
lc( $pathchunks[0] ) eq lc( $basechunks[0] ) ) {
shift @pathchunks ;
shift @basechunks ;
}
# @pathchunks now has the directories to descend in to.
# ensure relative path, even if @pathchunks is empty
$path_dirs = $self->catdir( ':', @pathchunks );
# @basechunks now contains the number of directories to climb out of.
$base_dirs = (':' x @basechunks) . ':' ;
return $self->catpath( '', $self->catdir( $base_dirs, $path_dirs ), $path_file ) ;
}
=item rel2abs
Converts a relative path to an absolute path:
$abs_path = File::Spec->rel2abs( $path ) ;
$abs_path = File::Spec->rel2abs( $path, $base ) ;
Note that both paths are assumed to have a notation that distinguishes a
directory path (with trailing ':') from a file path (without trailing ':').
If $base is not present or '', then $base is set to the current working
directory. If $base is relative, then it is converted to absolute form
using C<rel2abs()>. This means that it is taken to be relative to the
current working directory.
If $base doesn't have a trailing colon, the last element of $base is
assumed to be a filename. This filename is ignored. Otherwise all path
components are assumed to be directories.
If $path is already absolute, it is returned and $base is ignored.
Based on code written by Shigio Yamaguchi.
=cut
sub rel2abs {
my ($self,$path,$base) = @_;
if ( ! $self->file_name_is_absolute($path) ) {
# Figure out the effective $base and clean it up.
if ( !defined( $base ) || $base eq '' ) {
$base = Cwd::getcwd();
}
elsif ( ! $self->file_name_is_absolute($base) ) {
$base = $self->rel2abs($base) ;
}
# Split up paths
# ignore $path's volume
my ( $path_dirs, $path_file ) = ($self->splitpath($path))[1,2] ;
# ignore $base's file part
my ( $base_vol, $base_dirs ) = $self->splitpath($base) ;
# Glom them together
$path_dirs = ':' if ($path_dirs eq '');
$base_dirs =~ s/:$//; # remove trailing ':', if any
$base_dirs = $base_dirs . $path_dirs;
$path = $self->catpath( $base_vol, $base_dirs, $path_file );
}
return $path;
}
=back
=head1 AUTHORS
See the authors list in I<File::Spec>. Mac OS support by Paul Schinder
<schinder@pobox.com> and Thomas Wegner <wegner_thomas@yahoo.com>.
=head1 COPYRIGHT
Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
implementation of these methods, not the semantics.
=cut
1;
File/Spec/OS2.pm 0000644 00000015156 15033552504 0007270 0 ustar 00 package File::Spec::OS2;
use strict;
use Cwd ();
require File::Spec::Unix;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
our @ISA = qw(File::Spec::Unix);
sub devnull {
return "/dev/nul";
}
sub case_tolerant {
return 1;
}
sub file_name_is_absolute {
my ($self,$file) = @_;
return scalar($file =~ m{^([a-z]:)?[\\/]}is);
}
sub path {
my $path = $ENV{PATH};
$path =~ s:\\:/:g;
my @path = split(';',$path);
foreach (@path) { $_ = '.' if $_ eq '' }
return @path;
}
sub tmpdir {
my $cached = $_[0]->_cached_tmpdir(qw 'TMPDIR TEMP TMP');
return $cached if defined $cached;
my @d = @ENV{qw(TMPDIR TEMP TMP)}; # function call could autovivivy
$_[0]->_cache_tmpdir(
$_[0]->_tmpdir( @d, '/tmp', '/' ), qw 'TMPDIR TEMP TMP'
);
}
sub catdir {
my $self = shift;
my @args = @_;
foreach (@args) {
tr[\\][/];
# append a backslash to each argument unless it has one there
$_ .= "/" unless m{/$};
}
return $self->canonpath(join('', @args));
}
sub canonpath {
my ($self,$path) = @_;
return unless defined $path;
$path =~ s/^([a-z]:)/\l$1/s;
$path =~ s|\\|/|g;
$path =~ s|([^/])/+|$1/|g; # xx////xx -> xx/xx
$path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx
$path =~ s|^(\./)+(?=[^/])||s; # ./xx -> xx
$path =~ s|/\Z(?!\n)||
unless $path =~ m#^([a-z]:)?/\Z(?!\n)#si;# xx/ -> xx
$path =~ s{^/\.\.$}{/}; # /.. -> /
1 while $path =~ s{^/\.\.}{}; # /../xx -> /xx
return $path;
}
sub splitpath {
my ($self,$path, $nofile) = @_;
my ($volume,$directory,$file) = ('','','');
if ( $nofile ) {
$path =~
m{^( (?:[a-zA-Z]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? )
(.*)
}xs;
$volume = $1;
$directory = $2;
}
else {
$path =~
m{^ ( (?: [a-zA-Z]: |
(?:\\\\|//)[^\\/]+[\\/][^\\/]+
)?
)
( (?:.*[\\\\/](?:\.\.?\Z(?!\n))?)? )
(.*)
}xs;
$volume = $1;
$directory = $2;
$file = $3;
}
return ($volume,$directory,$file);
}
sub splitdir {
my ($self,$directories) = @_ ;
split m|[\\/]|, $directories, -1;
}
sub catpath {
my ($self,$volume,$directory,$file) = @_;
# If it's UNC, make sure the glue separator is there, reusing
# whatever separator is first in the $volume
$volume .= $1
if ( $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s &&
$directory =~ m@^[^\\/]@s
) ;
$volume .= $directory ;
# If the volume is not just A:, make sure the glue separator is
# there, reusing whatever separator is first in the $volume if possible.
if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s &&
$volume =~ m@[^\\/]\Z(?!\n)@ &&
$file =~ m@[^\\/]@
) {
$volume =~ m@([\\/])@ ;
my $sep = $1 ? $1 : '/' ;
$volume .= $sep ;
}
$volume .= $file ;
return $volume ;
}
sub abs2rel {
my($self,$path,$base) = @_;
# Clean up $path
if ( ! $self->file_name_is_absolute( $path ) ) {
$path = $self->rel2abs( $path ) ;
} else {
$path = $self->canonpath( $path ) ;
}
# Figure out the effective $base and clean it up.
if ( !defined( $base ) || $base eq '' ) {
$base = Cwd::getcwd();
} elsif ( ! $self->file_name_is_absolute( $base ) ) {
$base = $self->rel2abs( $base ) ;
} else {
$base = $self->canonpath( $base ) ;
}
# Split up paths
my ( $path_volume, $path_directories, $path_file ) = $self->splitpath( $path, 1 ) ;
my ( $base_volume, $base_directories ) = $self->splitpath( $base, 1 ) ;
return $path unless $path_volume eq $base_volume;
# Now, remove all leading components that are the same
my @pathchunks = $self->splitdir( $path_directories );
my @basechunks = $self->splitdir( $base_directories );
while ( @pathchunks &&
@basechunks &&
lc( $pathchunks[0] ) eq lc( $basechunks[0] )
) {
shift @pathchunks ;
shift @basechunks ;
}
# No need to catdir, we know these are well formed.
$path_directories = CORE::join( '/', @pathchunks );
$base_directories = CORE::join( '/', @basechunks );
# $base_directories now contains the directories the resulting relative
# path must ascend out of before it can descend to $path_directory. So,
# replace all names with $parentDir
#FA Need to replace between backslashes...
$base_directories =~ s|[^\\/]+|..|g ;
# Glue the two together, using a separator if necessary, and preventing an
# empty result.
#FA Must check that new directories are not empty.
if ( $path_directories ne '' && $base_directories ne '' ) {
$path_directories = "$base_directories/$path_directories" ;
} else {
$path_directories = "$base_directories$path_directories" ;
}
return $self->canonpath(
$self->catpath( "", $path_directories, $path_file )
) ;
}
sub rel2abs {
my ($self,$path,$base ) = @_;
if ( ! $self->file_name_is_absolute( $path ) ) {
if ( !defined( $base ) || $base eq '' ) {
$base = Cwd::getcwd();
}
elsif ( ! $self->file_name_is_absolute( $base ) ) {
$base = $self->rel2abs( $base ) ;
}
else {
$base = $self->canonpath( $base ) ;
}
my ( $path_directories, $path_file ) =
($self->splitpath( $path, 1 ))[1,2] ;
my ( $base_volume, $base_directories ) =
$self->splitpath( $base, 1 ) ;
$path = $self->catpath(
$base_volume,
$self->catdir( $base_directories, $path_directories ),
$path_file
) ;
}
return $self->canonpath( $path ) ;
}
1;
__END__
=head1 NAME
File::Spec::OS2 - methods for OS/2 file specs
=head1 SYNOPSIS
require File::Spec::OS2; # Done internally by File::Spec if needed
=head1 DESCRIPTION
See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
implementation of these methods, not the semantics.
Amongst the changes made for OS/2 are...
=over 4
=item tmpdir
Modifies the list of places temp directory information is looked for.
$ENV{TMPDIR}
$ENV{TEMP}
$ENV{TMP}
/tmp
/
=item splitpath
Volumes can be drive letters or UNC sharenames (\\server\share).
=back
=head1 COPYRIGHT
Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
File/Spec/AmigaOS.pm 0000644 00000001726 15033552504 0010143 0 ustar 00 package File::Spec::AmigaOS;
use strict;
require File::Spec::Unix;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
our @ISA = qw(File::Spec::Unix);
=head1 NAME
File::Spec::AmigaOS - File::Spec for AmigaOS
=head1 SYNOPSIS
require File::Spec::AmigaOS; # Done automatically by File::Spec
# if needed
=head1 DESCRIPTION
Methods for manipulating file specifications.
=head1 METHODS
=over 2
=item tmpdir
Returns $ENV{TMPDIR} or if that is unset, "/t".
=cut
my $tmpdir;
sub tmpdir {
return $tmpdir if defined $tmpdir;
$tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/t" );
}
=item file_name_is_absolute
Returns true if there's a colon in the file name,
or if it begins with a slash.
=cut
sub file_name_is_absolute {
my ($self, $file) = @_;
# Not 100% robust as a "/" must not preceded a ":"
# but this cannot happen in a well formed path.
return $file =~ m{^/|:}s;
}
=back
All the other methods are from L<File::Spec::Unix>.
=cut
1;
File/Spec/Win32.pm 0000644 00000025721 15033552504 0007566 0 ustar 00 package File::Spec::Win32;
use strict;
use Cwd ();
require File::Spec::Unix;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
our @ISA = qw(File::Spec::Unix);
# Some regexes we use for path splitting
my $DRIVE_RX = '[a-zA-Z]:';
my $UNC_RX = '(?:\\\\\\\\|//)[^\\\\/]+[\\\\/][^\\\\/]+';
my $VOL_RX = "(?:$DRIVE_RX|$UNC_RX)";
=head1 NAME
File::Spec::Win32 - methods for Win32 file specs
=head1 SYNOPSIS
require File::Spec::Win32; # Done internally by File::Spec if needed
=head1 DESCRIPTION
See File::Spec::Unix for a documentation of the methods provided
there. This package overrides the implementation of these methods, not
the semantics.
=over 4
=item devnull
Returns a string representation of the null device.
=cut
sub devnull {
return "nul";
}
sub rootdir { '\\' }
=item tmpdir
Returns a string representation of the first existing directory
from the following list:
$ENV{TMPDIR}
$ENV{TEMP}
$ENV{TMP}
SYS:/temp
C:\system\temp
C:/temp
/tmp
/
The SYS:/temp is preferred in Novell NetWare and the C:\system\temp
for Symbian (the File::Spec::Win32 is used also for those platforms).
If running under taint mode, and if the environment
variables are tainted, they are not used.
=cut
sub tmpdir {
my $tmpdir = $_[0]->_cached_tmpdir(qw(TMPDIR TEMP TMP));
return $tmpdir if defined $tmpdir;
$tmpdir = $_[0]->_tmpdir( map( $ENV{$_}, qw(TMPDIR TEMP TMP) ),
'SYS:/temp',
'C:\system\temp',
'C:/temp',
'/tmp',
'/' );
$_[0]->_cache_tmpdir($tmpdir, qw(TMPDIR TEMP TMP));
}
=item case_tolerant
MSWin32 case-tolerance depends on GetVolumeInformation() $ouFsFlags == FS_CASE_SENSITIVE,
indicating the case significance when comparing file specifications.
Since XP FS_CASE_SENSITIVE is effectively disabled for the NT subsubsystem.
See http://cygwin.com/ml/cygwin/2007-07/msg00891.html
Default: 1
=cut
sub case_tolerant {
eval {
local @INC = @INC;
pop @INC if $INC[-1] eq '.';
require Win32API::File;
} or return 1;
my $drive = shift || "C:";
my $osFsType = "\0"x256;
my $osVolName = "\0"x256;
my $ouFsFlags = 0;
Win32API::File::GetVolumeInformation($drive, $osVolName, 256, [], [], $ouFsFlags, $osFsType, 256 );
if ($ouFsFlags & Win32API::File::FS_CASE_SENSITIVE()) { return 0; }
else { return 1; }
}
=item file_name_is_absolute
As of right now, this returns 2 if the path is absolute with a
volume, 1 if it's absolute with no volume, 0 otherwise.
=cut
sub file_name_is_absolute {
my ($self,$file) = @_;
if ($file =~ m{^($VOL_RX)}o) {
my $vol = $1;
return ($vol =~ m{^$UNC_RX}o ? 2
: $file =~ m{^$DRIVE_RX[\\/]}o ? 2
: 0);
}
return $file =~ m{^[\\/]} ? 1 : 0;
}
=item catfile
Concatenate one or more directory names and a filename to form a
complete path ending with a filename
=cut
sub catfile {
shift;
# Legacy / compatibility support
#
shift, return _canon_cat( "/", @_ )
if $_[0] eq "";
# Compatibility with File::Spec <= 3.26:
# catfile('A:', 'foo') should return 'A:\foo'.
return _canon_cat( ($_[0].'\\'), @_[1..$#_] )
if $_[0] =~ m{^$DRIVE_RX\z}o;
return _canon_cat( @_ );
}
sub catdir {
shift;
# Legacy / compatibility support
#
return ""
unless @_;
shift, return _canon_cat( "/", @_ )
if $_[0] eq "";
# Compatibility with File::Spec <= 3.26:
# catdir('A:', 'foo') should return 'A:\foo'.
return _canon_cat( ($_[0].'\\'), @_[1..$#_] )
if $_[0] =~ m{^$DRIVE_RX\z}o;
return _canon_cat( @_ );
}
sub path {
my @path = split(';', $ENV{PATH});
s/"//g for @path;
@path = grep length, @path;
unshift(@path, ".");
return @path;
}
=item canonpath
No physical check on the filesystem, but a logical cleanup of a
path. On UNIX eliminated successive slashes and successive "/.".
On Win32 makes
dir1\dir2\dir3\..\..\dir4 -> \dir\dir4 and even
dir1\dir2\dir3\...\dir4 -> \dir\dir4
=cut
sub canonpath {
# Legacy / compatibility support
#
return $_[1] if !defined($_[1]) or $_[1] eq '';
return _canon_cat( $_[1] );
}
=item splitpath
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path,
$no_file );
Splits a path into volume, directory, and filename portions. Assumes that
the last file is a path unless the path ends in '\\', '\\.', '\\..'
or $no_file is true. On Win32 this means that $no_file true makes this return
( $volume, $path, '' ).
Separators accepted are \ and /.
Volumes can be drive letters or UNC sharenames (\\server\share).
The results can be passed to L</catpath> to get back a path equivalent to
(usually identical to) the original path.
=cut
sub splitpath {
my ($self,$path, $nofile) = @_;
my ($volume,$directory,$file) = ('','','');
if ( $nofile ) {
$path =~
m{^ ( $VOL_RX ? ) (.*) }sox;
$volume = $1;
$directory = $2;
}
else {
$path =~
m{^ ( $VOL_RX ? )
( (?:.*[\\/](?:\.\.?\Z(?!\n))?)? )
(.*)
}sox;
$volume = $1;
$directory = $2;
$file = $3;
}
return ($volume,$directory,$file);
}
=item splitdir
The opposite of L<catdir()|File::Spec/catdir>.
@dirs = File::Spec->splitdir( $directories );
$directories must be only the directory portion of the path on systems
that have the concept of a volume or that have path syntax that differentiates
files from directories.
Unlike just splitting the directories on the separator, leading empty and
trailing directory entries can be returned, because these are significant
on some OSs. So,
File::Spec->splitdir( "/a/b/c" );
Yields:
( '', 'a', 'b', '', 'c', '' )
=cut
sub splitdir {
my ($self,$directories) = @_ ;
#
# split() likes to forget about trailing null fields, so here we
# check to be sure that there will not be any before handling the
# simple case.
#
if ( $directories !~ m|[\\/]\Z(?!\n)| ) {
return split( m|[\\/]|, $directories );
}
else {
#
# since there was a trailing separator, add a file name to the end,
# then do the split, then replace it with ''.
#
my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ;
$directories[ $#directories ]= '' ;
return @directories ;
}
}
=item catpath
Takes volume, directory and file portions and returns an entire path. Under
Unix, $volume is ignored, and this is just like catfile(). On other OSs,
the $volume become significant.
=cut
sub catpath {
my ($self,$volume,$directory,$file) = @_;
# If it's UNC, make sure the glue separator is there, reusing
# whatever separator is first in the $volume
my $v;
$volume .= $v
if ( (($v) = $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s) &&
$directory =~ m@^[^\\/]@s
) ;
$volume .= $directory ;
# If the volume is not just A:, make sure the glue separator is
# there, reusing whatever separator is first in the $volume if possible.
if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s &&
$volume =~ m@[^\\/]\Z(?!\n)@ &&
$file =~ m@[^\\/]@
) {
$volume =~ m@([\\/])@ ;
my $sep = $1 ? $1 : '\\' ;
$volume .= $sep ;
}
$volume .= $file ;
return $volume ;
}
sub _same {
lc($_[1]) eq lc($_[2]);
}
sub rel2abs {
my ($self,$path,$base ) = @_;
my $is_abs = $self->file_name_is_absolute($path);
# Check for volume (should probably document the '2' thing...)
return $self->canonpath( $path ) if $is_abs == 2;
if ($is_abs) {
# It's missing a volume, add one
my $vol = ($self->splitpath( Cwd::getcwd() ))[0];
return $self->canonpath( $vol . $path );
}
if ( !defined( $base ) || $base eq '' ) {
$base = Cwd::getdcwd( ($self->splitpath( $path ))[0] ) if defined &Cwd::getdcwd ;
$base = Cwd::getcwd() unless defined $base ;
}
elsif ( ! $self->file_name_is_absolute( $base ) ) {
$base = $self->rel2abs( $base ) ;
}
else {
$base = $self->canonpath( $base ) ;
}
my ( $path_directories, $path_file ) =
($self->splitpath( $path, 1 ))[1,2] ;
my ( $base_volume, $base_directories ) =
$self->splitpath( $base, 1 ) ;
$path = $self->catpath(
$base_volume,
$self->catdir( $base_directories, $path_directories ),
$path_file
) ;
return $self->canonpath( $path ) ;
}
=back
=head2 Note For File::Spec::Win32 Maintainers
Novell NetWare inherits its File::Spec behaviour from File::Spec::Win32.
=head1 COPYRIGHT
Copyright (c) 2004,2007 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
implementation of these methods, not the semantics.
=cut
sub _canon_cat # @path -> path
{
my ($first, @rest) = @_;
my $volume = $first =~ s{ \A ([A-Za-z]:) ([\\/]?) }{}x # drive letter
? ucfirst( $1 ).( $2 ? "\\" : "" )
: $first =~ s{ \A (?:\\\\|//) ([^\\/]+)
(?: [\\/] ([^\\/]+) )?
[\\/]? }{}xs # UNC volume
? "\\\\$1".( defined $2 ? "\\$2" : "" )."\\"
: $first =~ s{ \A [\\/] }{}x # root dir
? "\\"
: "";
my $path = join "\\", $first, @rest;
$path =~ tr#\\/#\\\\#s; # xx/yy --> xx\yy & xx\\yy --> xx\yy
# xx/././yy --> xx/yy
$path =~ s{(?:
(?:\A|\\) # at begin or after a slash
\.
(?:\\\.)* # and more
(?:\\|\z) # at end or followed by slash
)+ # performance boost -- I do not know why
}{\\}gx;
# XXX I do not know whether more dots are supported by the OS supporting
# this ... annotation (NetWare or symbian but not MSWin32).
# Then .... could easily become ../../.. etc:
# Replace \.\.\. by (\.\.\.+) and substitute with
# { $1 . ".." . "\\.." x (length($2)-2) }gex
# ... --> ../..
$path =~ s{ (\A|\\) # at begin or after a slash
\.\.\.
(?=\\|\z) # at end or followed by slash
}{$1..\\..}gx;
# xx\yy\..\zz --> xx\zz
while ( $path =~ s{(?:
(?:\A|\\) # at begin or after a slash
[^\\]+ # rip this 'yy' off
\\\.\.
(?<!\A\.\.\\\.\.) # do *not* replace ^..\..
(?<!\\\.\.\\\.\.) # do *not* replace \..\..
(?:\\|\z) # at end or followed by slash
)+ # performance boost -- I do not know why
}{\\}sx ) {}
$path =~ s#\A\\##; # \xx --> xx NOTE: this is *not* root
$path =~ s#\\\z##; # xx\ --> xx
if ( $volume =~ m#\\\z# )
{ # <vol>\.. --> <vol>\
$path =~ s{ \A # at begin
\.\.
(?:\\\.\.)* # and more
(?:\\|\z) # at end or followed by slash
}{}x;
return $1 # \\HOST\SHARE\ --> \\HOST\SHARE
if $path eq ""
and $volume =~ m#\A(\\\\.*)\\\z#s;
}
return $path ne "" || $volume ? $volume.$path : ".";
}
1;
File/Spec/Functions.pm 0000644 00000004454 15033552504 0010634 0 ustar 00 package File::Spec::Functions;
use File::Spec;
use strict;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(
canonpath
catdir
catfile
curdir
rootdir
updir
no_upwards
file_name_is_absolute
path
);
our @EXPORT_OK = qw(
devnull
tmpdir
splitpath
splitdir
catpath
abs2rel
rel2abs
case_tolerant
);
our %EXPORT_TAGS = ( ALL => [ @EXPORT_OK, @EXPORT ] );
require File::Spec::Unix;
my %udeps = (
canonpath => [],
catdir => [qw(canonpath)],
catfile => [qw(canonpath catdir)],
case_tolerant => [],
curdir => [],
devnull => [],
rootdir => [],
updir => [],
);
foreach my $meth (@EXPORT, @EXPORT_OK) {
my $sub = File::Spec->can($meth);
no strict 'refs';
if (exists($udeps{$meth}) && $sub == File::Spec::Unix->can($meth) &&
!(grep {
File::Spec->can($_) != File::Spec::Unix->can($_)
} @{$udeps{$meth}}) &&
defined(&{"File::Spec::Unix::_fn_$meth"})) {
*{$meth} = \&{"File::Spec::Unix::_fn_$meth"};
} else {
*{$meth} = sub {&$sub('File::Spec', @_)};
}
}
1;
__END__
=head1 NAME
File::Spec::Functions - portably perform operations on file names
=head1 SYNOPSIS
use File::Spec::Functions;
$x = catfile('a','b');
=head1 DESCRIPTION
This module exports convenience functions for all of the class methods
provided by File::Spec.
For a reference of available functions, please consult L<File::Spec::Unix>,
which contains the entire set, and which is inherited by the modules for
other platforms. For further information, please see L<File::Spec::Mac>,
L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>.
=head2 Exports
The following functions are exported by default.
canonpath
catdir
catfile
curdir
rootdir
updir
no_upwards
file_name_is_absolute
path
The following functions are exported only by request.
devnull
tmpdir
splitpath
splitdir
catpath
abs2rel
rel2abs
case_tolerant
All the functions may be imported using the C<:ALL> tag.
=head1 COPYRIGHT
Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
File::Spec, File::Spec::Unix, File::Spec::Mac, File::Spec::OS2,
File::Spec::Win32, File::Spec::VMS, ExtUtils::MakeMaker
=cut
File/Spec.pm 0000644 00000024513 15033552504 0006662 0 ustar 00 package File::Spec;
use strict;
our $VERSION = '3.74';
$VERSION =~ tr/_//d;
my %module = (
MSWin32 => 'Win32',
os2 => 'OS2',
VMS => 'VMS',
NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
cygwin => 'Cygwin',
amigaos => 'AmigaOS');
my $module = $module{$^O} || 'Unix';
require "File/Spec/$module.pm";
our @ISA = ("File::Spec::$module");
1;
__END__
=head1 NAME
File::Spec - portably perform operations on file names
=head1 SYNOPSIS
use File::Spec;
$x=File::Spec->catfile('a', 'b', 'c');
which returns 'a/b/c' under Unix. Or:
use File::Spec::Functions;
$x = catfile('a', 'b', 'c');
=head1 DESCRIPTION
This module is designed to support operations commonly performed on file
specifications (usually called "file names", but not to be confused with the
contents of a file, or Perl's file handles), such as concatenating several
directory and file names into a single path, or determining whether a path
is rooted. It is based on code directly taken from MakeMaker 5.17, code
written by Andreas KE<ouml>nig, Andy Dougherty, Charles Bailey, Ilya
Zakharevich, Paul Schinder, and others.
Since these functions are different for most operating systems, each set of
OS specific routines is available in a separate module, including:
File::Spec::Unix
File::Spec::Mac
File::Spec::OS2
File::Spec::Win32
File::Spec::VMS
The module appropriate for the current OS is automatically loaded by
File::Spec. Since some modules (like VMS) make use of facilities available
only under that OS, it may not be possible to load all modules under all
operating systems.
Since File::Spec is object oriented, subroutines should not be called directly,
as in:
File::Spec::catfile('a','b');
but rather as class methods:
File::Spec->catfile('a','b');
For simple uses, L<File::Spec::Functions> provides convenient functional
forms of these methods.
=head1 METHODS
=over 2
=item canonpath
X<canonpath>
No physical check on the filesystem, but a logical cleanup of a
path.
$cpath = File::Spec->canonpath( $path ) ;
Note that this does *not* collapse F<x/../y> sections into F<y>. This
is by design. If F</foo> on your system is a symlink to F</bar/baz>,
then F</foo/../quux> is actually F</bar/quux>, not F</quux> as a naive
F<../>-removal would give you. If you want to do this kind of
processing, you probably want C<Cwd>'s C<realpath()> function to
actually traverse the filesystem cleaning up paths like this.
=item catdir
X<catdir>
Concatenate two or more directory names to form a complete path ending
with a directory. But remove the trailing slash from the resulting
string, because it doesn't look good, isn't necessary and confuses
OS/2. Of course, if this is the root directory, don't cut off the
trailing slash :-)
$path = File::Spec->catdir( @directories );
=item catfile
X<catfile>
Concatenate one or more directory names and a filename to form a
complete path ending with a filename
$path = File::Spec->catfile( @directories, $filename );
=item curdir
X<curdir>
Returns a string representation of the current directory.
$curdir = File::Spec->curdir();
=item devnull
X<devnull>
Returns a string representation of the null device.
$devnull = File::Spec->devnull();
=item rootdir
X<rootdir>
Returns a string representation of the root directory.
$rootdir = File::Spec->rootdir();
=item tmpdir
X<tmpdir>
Returns a string representation of the first writable directory from a
list of possible temporary directories. Returns the current directory
if no writable temporary directories are found. The list of directories
checked depends on the platform; e.g. File::Spec::Unix checks C<$ENV{TMPDIR}>
(unless taint is on) and F</tmp>.
$tmpdir = File::Spec->tmpdir();
=item updir
X<updir>
Returns a string representation of the parent directory.
$updir = File::Spec->updir();
=item no_upwards
Given a list of files in a directory (such as from C<readdir()>),
strip out C<'.'> and C<'..'>.
B<SECURITY NOTE:> This does NOT filter paths containing C<'..'>, like
C<'../../../../etc/passwd'>, only literal matches to C<'.'> and C<'..'>.
@paths = File::Spec->no_upwards( readdir $dirhandle );
=item case_tolerant
Returns a true or false value indicating, respectively, that alphabetic
case is not or is significant when comparing file specifications.
Cygwin and Win32 accept an optional drive argument.
$is_case_tolerant = File::Spec->case_tolerant();
=item file_name_is_absolute
Takes as its argument a path, and returns true if it is an absolute path.
$is_absolute = File::Spec->file_name_is_absolute( $path );
This does not consult the local filesystem on Unix, Win32, OS/2, or
Mac OS (Classic). It does consult the working environment for VMS
(see L<File::Spec::VMS/file_name_is_absolute>).
=item path
X<path>
Takes no argument. Returns the environment variable C<PATH> (or the local
platform's equivalent) as a list.
@PATH = File::Spec->path();
=item join
X<join, path>
join is the same as catfile.
=item splitpath
X<splitpath> X<split, path>
Splits a path in to volume, directory, and filename portions. On systems
with no concept of volume, returns '' for volume.
($volume,$directories,$file) =
File::Spec->splitpath( $path );
($volume,$directories,$file) =
File::Spec->splitpath( $path, $no_file );
For systems with no syntax differentiating filenames from directories,
assumes that the last file is a path unless C<$no_file> is true or a
trailing separator or F</.> or F</..> is present. On Unix, this means that C<$no_file>
true makes this return ( '', $path, '' ).
The directory portion may or may not be returned with a trailing '/'.
The results can be passed to L</catpath()> to get back a path equivalent to
(usually identical to) the original path.
=item splitdir
X<splitdir> X<split, dir>
The opposite of L</catdir>.
@dirs = File::Spec->splitdir( $directories );
C<$directories> must be only the directory portion of the path on systems
that have the concept of a volume or that have path syntax that differentiates
files from directories.
Unlike just splitting the directories on the separator, empty
directory names (C<''>) can be returned, because these are significant
on some OSes.
=item catpath()
Takes volume, directory and file portions and returns an entire path. Under
Unix, C<$volume> is ignored, and directory and file are concatenated. A '/' is
inserted if need be. On other OSes, C<$volume> is significant.
$full_path = File::Spec->catpath( $volume, $directory, $file );
=item abs2rel
X<abs2rel> X<absolute, path> X<relative, path>
Takes a destination path and an optional base path returns a relative path
from the base path to the destination path:
$rel_path = File::Spec->abs2rel( $path ) ;
$rel_path = File::Spec->abs2rel( $path, $base ) ;
If C<$base> is not present or '', then L<Cwd::cwd()|Cwd> is used. If C<$base> is
relative, then it is converted to absolute form using
L</rel2abs()>. This means that it is taken to be relative to
L<Cwd::cwd()|Cwd>.
On systems with the concept of volume, if C<$path> and C<$base> appear to be
on two different volumes, we will not attempt to resolve the two
paths, and we will instead simply return C<$path>. Note that previous
versions of this module ignored the volume of C<$base>, which resulted in
garbage results part of the time.
On systems that have a grammar that indicates filenames, this ignores the
C<$base> filename as well. Otherwise all path components are assumed to be
directories.
If C<$path> is relative, it is converted to absolute form using L</rel2abs()>.
This means that it is taken to be relative to L<Cwd::cwd()|Cwd>.
No checks against the filesystem are made. On VMS, there is
interaction with the working environment, as logicals and
macros are expanded.
Based on code written by Shigio Yamaguchi.
=item rel2abs()
X<rel2abs> X<absolute, path> X<relative, path>
Converts a relative path to an absolute path.
$abs_path = File::Spec->rel2abs( $path ) ;
$abs_path = File::Spec->rel2abs( $path, $base ) ;
If C<$base> is not present or '', then L<Cwd::cwd()|Cwd> is used. If C<$base> is relative,
then it is converted to absolute form using L</rel2abs()>. This means that it
is taken to be relative to L<Cwd::cwd()|Cwd>.
On systems with the concept of volume, if C<$path> and C<$base> appear to be
on two different volumes, we will not attempt to resolve the two
paths, and we will instead simply return C<$path>. Note that previous
versions of this module ignored the volume of C<$base>, which resulted in
garbage results part of the time.
On systems that have a grammar that indicates filenames, this ignores the
C<$base> filename as well. Otherwise all path components are assumed to be
directories.
If C<$path> is absolute, it is cleaned up and returned using L</canonpath>.
No checks against the filesystem are made. On VMS, there is
interaction with the working environment, as logicals and
macros are expanded.
Based on code written by Shigio Yamaguchi.
=back
For further information, please see L<File::Spec::Unix>,
L<File::Spec::Mac>, L<File::Spec::OS2>, L<File::Spec::Win32>, or
L<File::Spec::VMS>.
=head1 SEE ALSO
L<File::Spec::Unix>, L<File::Spec::Mac>, L<File::Spec::OS2>,
L<File::Spec::Win32>, L<File::Spec::VMS>, L<File::Spec::Functions>,
L<ExtUtils::MakeMaker>
=head1 AUTHOR
Currently maintained by Ken Williams C<< <KWILLIAMS@cpan.org> >>.
The vast majority of the code was written by
Kenneth Albanowski C<< <kjahds@kjahds.com> >>,
Andy Dougherty C<< <doughera@lafayette.edu> >>,
Andreas KE<ouml>nig C<< <A.Koenig@franz.ww.TU-Berlin.DE> >>,
Tim Bunce C<< <Tim.Bunce@ig.co.uk> >>.
VMS support by Charles Bailey C<< <bailey@newman.upenn.edu> >>.
OS/2 support by Ilya Zakharevich C<< <ilya@math.ohio-state.edu> >>.
Mac support by Paul Schinder C<< <schinder@pobox.com> >>, and
Thomas Wegner C<< <wegner_thomas@yahoo.com> >>.
abs2rel() and rel2abs() written by Shigio Yamaguchi C<< <shigio@tamacom.com> >>,
modified by Barrie Slaymaker C<< <barries@slaysys.com> >>.
splitpath(), splitdir(), catpath() and catdir() by Barrie Slaymaker.
=head1 COPYRIGHT
Copyright (c) 2004-2013 by the Perl 5 Porters. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
YAML/Loader/Syck.pm 0000644 00000000155 15033552504 0007766 0 ustar 00 package YAML::Loader::Syck;
use strict;
sub new { $_[0] }
sub load { shift; YAML::Syck::Load( $_[0] ) }
1;
YAML/Dumper/Syck.pm 0000644 00000000155 15033552504 0010014 0 ustar 00 package YAML::Dumper::Syck;
use strict;
sub new { $_[0] }
sub dump { shift; YAML::Syck::Dump( $_[0] ) }
1;
YAML/Syck.pm 0000644 00000023363 15033552504 0006566 0 ustar 00 package YAML::Syck;
# See documentation after the __END__ mark.
use strict;
use vars qw(
@ISA @EXPORT @EXPORT_OK $VERSION
$Headless $SortKeys $SingleQuote
$ImplicitBinary $ImplicitTyping $ImplicitUnicode
$UseCode $LoadCode $DumpCode
$DeparseObject $LoadBlessed
);
use 5.006;
use Exporter;
BEGIN {
$VERSION = '1.30';
@EXPORT = qw( Dump Load DumpFile LoadFile );
@EXPORT_OK = qw( DumpInto );
@ISA = qw( Exporter );
$SortKeys = 1;
$LoadBlessed = 1;
local $@;
eval {
require XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
1;
} or do {
require DynaLoader;
push @ISA, 'DynaLoader';
__PACKAGE__->bootstrap($VERSION);
};
}
use constant QR_MAP => {
'' => sub { qr{$_[0]} },
x => sub { qr{$_[0]}x },
i => sub { qr{$_[0]}i },
s => sub { qr{$_[0]}s },
m => sub { qr{$_[0]}m },
ix => sub { qr{$_[0]}ix },
sx => sub { qr{$_[0]}sx },
mx => sub { qr{$_[0]}mx },
si => sub { qr{$_[0]}si },
mi => sub { qr{$_[0]}mi },
ms => sub { qr{$_[0]}sm },
six => sub { qr{$_[0]}six },
mix => sub { qr{$_[0]}mix },
msx => sub { qr{$_[0]}msx },
msi => sub { qr{$_[0]}msi },
msix => sub { qr{$_[0]}msix },
};
sub __qr_helper {
if ( $_[0] =~ /\A \(\? ([ixsm]*) (?:- (?:[ixsm]*))? : (.*) \) \z/x ) {
my $sub = QR_MAP()->{$1} || QR_MAP()->{''};
&$sub($2);
}
else {
qr/$_[0]/;
}
}
sub Dump {
$#_
? join( '', map { YAML::Syck::DumpYAML($_) } @_ )
: YAML::Syck::DumpYAML( $_[0] );
}
sub Load {
if (wantarray) {
my ($rv) = YAML::Syck::LoadYAML( $_[0] );
@{$rv};
}
else {
@_ = $_[0];
goto &YAML::Syck::LoadYAML;
}
}
sub _is_glob {
my $h = shift;
return 1 if ( ref($h) eq 'GLOB' );
return 1 if ( ref( \$h ) eq 'GLOB' );
return 1 if ( ref($h) =~ m/^IO::/ );
return;
}
sub DumpFile {
my $file = shift;
if ( _is_glob($file) ) {
for (@_) {
my $err = YAML::Syck::DumpYAMLFile( $_, $file );
if ($err) {
$! = 0 + $err;
die "Error writing to filehandle $file: $!\n";
}
}
}
else {
open( my $fh, '>', $file ) or die "Cannot write to $file: $!";
for (@_) {
my $err = YAML::Syck::DumpYAMLFile( $_, $fh );
if ($err) {
$! = 0 + $err;
die "Error writing to file $file: $!\n";
}
}
close $fh
or die "Error writing to file $file: $!\n";
}
return 1;
}
sub LoadFile {
my $file = shift;
if ( _is_glob($file) ) {
Load(
do { local $/; <$file> }
);
}
else {
if ( !-e $file || -z $file ) {
die("'$file' is empty or non-existent");
}
open( my $fh, '<', $file ) or die "Cannot read from $file: $!";
Load(
do { local $/; <$fh> }
);
}
}
sub DumpInto {
my $bufref = shift;
( ref $bufref ) or die "DumpInto not given reference to output buffer\n";
YAML::Syck::DumpYAMLInto( $_, $bufref ) for @_;
1;
}
1;
__END__
=pod
=head1 NAME
YAML::Syck - Fast, lightweight YAML loader and dumper
=head1 SYNOPSIS
use YAML::Syck;
# Set this for interoperability with other YAML/Syck bindings:
# e.g. Load('Yes') becomes 1 and Load('No') becomes ''.
$YAML::Syck::ImplicitTyping = 1;
$data = Load($yaml);
$yaml = Dump($data);
# $file can be an IO object, or a filename
$data = LoadFile($file);
DumpFile($file, $data);
# A string with multiple YAML streams in it
$yaml = Dump(@data);
@data = Load($yaml);
# Dumping into a pre-existing output buffer
my $yaml;
DumpInto(\$yaml, @data);
=head1 DESCRIPTION
This module provides a Perl interface to the B<libsyck> data serialization
library. It exports the C<Dump> and C<Load> functions for converting
Perl data structures to YAML strings, and the other way around.
B<NOTE>: If you are working with other language's YAML/Syck bindings
(such as Ruby), please set C<$YAML::Syck::ImplicitTyping> to C<1> before
calling the C<Load>/C<Dump> functions. The default setting is for
preserving backward-compatibility with C<YAML.pm>.
=head1 Differences Between YAML::Syck and YAML
=head2 Error handling
Some calls are designed to die rather than returning YAML. You should wrap
your calls in eval to assure you do not get unexpected results.
=head1 FLAGS
=head2 $YAML::Syck::Headless
Defaults to false. Setting this to a true value will make C<Dump> omit the
leading C<---\n> marker.
=head2 $YAML::Syck::SortKeys
Defaults to false. Setting this to a true value will make C<Dump> sort
hash keys.
=head2 $YAML::Syck::SingleQuote
Defaults to false. Setting this to a true value will make C<Dump> always emit
single quotes instead of bare strings.
=head2 $YAML::Syck::ImplicitTyping
Defaults to false. Setting this to a true value will make C<Load> recognize
various implicit types in YAML, such as unquoted C<true>, C<false>, as well as
integers and floating-point numbers. Otherwise, only C<~> is recognized to
be C<undef>.
=head2 $YAML::Syck::ImplicitUnicode
Defaults to false. For Perl 5.8.0 or later, setting this to a true value will
make C<Load> set Unicode flag on for every string that contains valid UTF8
sequences, and make C<Dump> return a unicode string.
Regardless of this flag, Unicode strings are dumped verbatim without escaping;
byte strings with high-bit set will be dumped with backslash escaping.
However, because YAML does not distinguish between these two kinds of strings,
so this flag will affect loading of both variants of strings.
If you want to use LoadFile or DumpFile with unicode, you are required to open
your own file in order to assure it's UTF8 encoded:
open(my $fh, ">:encoding(UTF-8)", "out.yml");
DumpFile($fh, $hashref);
=head2 $YAML::Syck::ImplicitBinary
Defaults to false. For Perl 5.8.0 or later, setting this to a true value will
make C<Dump> generate Base64-encoded C<!!binary> data for all non-Unicode
scalars containing high-bit bytes.
=head2 $YAML::Syck::UseCode / $YAML::Syck::LoadCode / $YAML::Syck::DumpCode
These flags control whether or not to try and eval/deparse perl source code;
each of them defaults to false.
Setting C<$YAML::Syck::UseCode> to a true value is equivalent to setting
both C<$YAML::Syck::LoadCode> and C<$YAML::Syck::DumpCode> to true.
=head2 $YAML::Syck::LoadBlessed
Defaults to true. Setting to false will block YAML::Syck from doing ANY
blessing. This is an interface change since 1.21. The variable name was
misleading, implying that no blessing would happen when in fact it did.
Prior to 1.22, setting this to a false value only prevented C<Load> from
blessing tag names that did not begin with C<!!perl> or C<!perl>;.
=head1 BUGS
Dumping Glob/IO values do not work yet.
Dumping of Tied variables is unsupported.
Dumping into tied (or other magic variables) with C<DumpInto> might not work
properly in all cases.
=head1 CAVEATS
This module implements the YAML 1.0 spec. To deal with data in YAML 1.1,
please use the C<YAML::XS> module instead.
The current implementation bundles libsyck source code; if your system has a
site-wide shared libsyck, it will I<not> be used.
Tag names such as C<!!perl/hash:Foo> is blessed into the package C<Foo>, but
the C<!hs/foo> and C<!!hs/Foo> tags are blessed into C<hs::Foo>. Note that
this holds true even if the tag contains non-word characters; for example,
C<!haskell.org/Foo> is blessed into C<haskell.org::Foo>. Please use
L<Class::Rebless> to cast it into other user-defined packages. You can also
set the LoadBlessed flag false to disable all blessing.
This module has L<a lot of known
issues|https://rt.cpan.org/Public/Dist/Display.html?Name=YAML-Syck>
and has only been semi-actively maintained since 2007. If you
encounter an issue with it probably won't be fixed unless you L<offer
up a patch|http://github.com/toddr/YAML-Syck> in Git that's ready for
release.
There are still good reasons to use this module, such as better
interoperability with other syck wrappers (like Ruby's), or some edge
case of YAML's syntax that it handles better. It'll probably work
perfectly for you, but if it doesn't you may want to look at
L<YAML::XS>, or perhaps at looking another serialization format like
L<JSON>.
=head1 SEE ALSO
L<YAML>, L<JSON::Syck>
L<http://www.yaml.org/>
=head1 AUTHORS
Audrey Tang E<lt>cpan@audreyt.orgE<gt>
=head1 COPYRIGHT
Copyright 2005-2009 by Audrey Tang E<lt>cpan@audreyt.orgE<gt>.
This software is released under the MIT license cited below.
The F<libsyck> code bundled with this library is released by
"why the lucky stiff", under a BSD-style license. See the F<COPYING>
file for details.
=head2 The "MIT" License
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
=cut
Devel/PPPort.pm 0000644 00000676213 15033552504 0007346 0 ustar 00 ################################################################################
#
# !!!!! Do NOT edit this file directly! -- Edit PPPort_pm.PL instead. !!!!!
#
# This file was automatically generated from the definition files in the
# parts/inc/ subdirectory by PPPort_pm.PL. To learn more about how all this
# works, please read the F<HACKERS> file that came with this distribution.
#
################################################################################
#
# Perl/Pollution/Portability
#
################################################################################
#
# Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
# Version 2.x, Copyright (C) 2001, Paul Marquess.
# Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
################################################################################
=head1 NAME
Devel::PPPort - Perl/Pollution/Portability
=head1 SYNOPSIS
Devel::PPPort::WriteFile(); # defaults to ./ppport.h
Devel::PPPort::WriteFile('someheader.h');
# Same as above but retrieve contents rather than write file
my $contents = Devel::PPPort::GetFileContents();
my $contents = Devel::PPPort::GetFileContents('someheader.h');
=head1 DESCRIPTION
Perl's API has changed over time, gaining new features, new functions,
increasing its flexibility, and reducing the impact on the C namespace
environment (reduced pollution). The header file written by this module,
typically F<ppport.h>, attempts to bring some of the newer Perl API
features to older versions of Perl, so that you can worry less about
keeping track of old releases, but users can still reap the benefit.
C<Devel::PPPort> contains two functions, C<WriteFile> and C<GetFileContents>.
C<WriteFile>'s only purpose is to write the F<ppport.h> C header file.
This file contains a series of macros and, if explicitly requested, functions
that allow XS modules to be built using older versions of Perl. Currently,
Perl versions from 5.003 to 5.20 are supported.
C<GetFileContents> can be used to retrieve the file contents rather than
writing it out.
This module is used by C<h2xs> to write the file F<ppport.h>.
=head2 Why use ppport.h?
You should use F<ppport.h> in modern code so that your code will work
with the widest range of Perl interpreters possible, without significant
additional work.
You should attempt older code to fully use F<ppport.h>, because the
reduced pollution of newer Perl versions is an important thing. It's so
important that the old polluting ways of original Perl modules will not be
supported very far into the future, and your module will almost certainly
break! By adapting to it now, you'll gain compatibility and a sense of
having done the electronic ecology some good.
=head2 How to use ppport.h
Don't direct the users of your module to download C<Devel::PPPort>.
They are most probably no XS writers. Also, don't make F<ppport.h>
optional. Rather, just take the most recent copy of F<ppport.h> that
you can find (e.g. by generating it with the latest C<Devel::PPPort>
release from CPAN), copy it into your project, adjust your project to
use it, and distribute the header along with your module.
=head2 Running ppport.h
But F<ppport.h> is more than just a C header. It's also a Perl script
that can check your source code. It will suggest hints and portability
notes, and can even make suggestions on how to change your code. You
can run it like any other Perl program:
perl ppport.h [options] [files]
It also has embedded documentation, so you can use
perldoc ppport.h
to find out more about how to use it.
=head1 FUNCTIONS
=head2 WriteFile
C<WriteFile> takes one optional argument. When called with one
argument, it expects to be passed a filename. When called with
no arguments, it defaults to the filename F<ppport.h>.
The function returns a true value if the file was written successfully.
Otherwise it returns a false value.
=head2 GetFileContents
C<GetFileContents> behaves like C<WriteFile> above, but returns the contents
of the would-be file rather than writing it out.
=head1 COMPATIBILITY
F<ppport.h> supports Perl versions from 5.003 to 5.20
in threaded and non-threaded configurations.
=head2 Provided Perl compatibility API
The header file written by this module, typically F<ppport.h>, provides
access to the following elements of the Perl API that is not available
in older Perl releases:
_aMY_CXT
_pMY_CXT
aMY_CXT
aMY_CXT_
aTHX
aTHX_
aTHXR
aTHXR_
AvFILLp
boolSV
C_ARRAY_END
C_ARRAY_LENGTH
call_argv
call_method
call_pv
call_sv
caller_cx
cBOOL
ckWARN
CopFILE
CopFILE_set
CopFILEAV
CopFILEGV
CopFILEGV_set
CopFILESV
CopSTASH
CopSTASH_eq
CopSTASH_set
CopSTASHPV
CopSTASHPV_set
CopyD
CPERLscope
dAX
dAXMARK
DEFSV
DEFSV_set
dITEMS
dMY_CXT
dMY_CXT_SV
dNOOP
dTHR
dTHX
dTHXa
dTHXoa
dTHXR
dUNDERBAR
dVAR
dXCPT
dXSTARG
END_EXTERN_C
ERRSV
eval_pv
eval_sv
EXTERN_C
G_METHOD
get_av
get_cv
get_cvs
get_hv
get_sv
grok_bin
grok_hex
grok_number
GROK_NUMERIC_RADIX
grok_numeric_radix
grok_oct
gv_fetchpvn_flags
gv_fetchpvs
gv_stashpvn
gv_stashpvs
HEf_SVKEY
HeUTF8
hv_fetchs
hv_stores
HvNAME_get
HvNAMELEN_get
IN_LOCALE
IN_LOCALE_COMPILETIME
IN_LOCALE_RUNTIME
IN_PERL_COMPILETIME
INT2PTR
IS_NUMBER_GREATER_THAN_UV_MAX
IS_NUMBER_IN_UV
IS_NUMBER_INFINITY
IS_NUMBER_NAN
IS_NUMBER_NEG
IS_NUMBER_NOT_INT
isALNUMC
isASCII
isBLANK
isCNTRL
isGRAPH
isPRINT
isPSXSPC
isPUNCT
isXDIGIT
IVdf
IVSIZE
IVTYPE
load_module
memEQ
memEQs
memNE
memNEs
mg_findext
MoveD
mPUSHi
mPUSHn
mPUSHp
mPUSHs
mPUSHu
MUTABLE_PTR
MUTABLE_SV
mXPUSHi
mXPUSHn
mXPUSHp
mXPUSHs
mXPUSHu
MY_CXT
MY_CXT_CLONE
MY_CXT_INIT
my_snprintf
my_sprintf
my_strlcat
my_strlcpy
newCONSTSUB
newRV_inc
newRV_noinc
newSV_type
newSVpvn
newSVpvn_flags
newSVpvn_share
newSVpvn_utf8
newSVpvs
newSVpvs_flags
newSVpvs_share
newSVuv
Newx
Newxc
Newxz
NOOP
NUM2PTR
NVef
NVff
NVgf
NVTYPE
OpHAS_SIBLING
OpLASTSIB_set
OpMAYBESIB_set
OpMORESIB_set
OpSIBLING
packWARN
PERL_ABS
PERL_BCDVERSION
PERL_GCC_BRACE_GROUPS_FORBIDDEN
PERL_HASH
PERL_INT_MAX
PERL_INT_MIN
PERL_LONG_MAX
PERL_LONG_MIN
PERL_MAGIC_arylen
PERL_MAGIC_backref
PERL_MAGIC_bm
PERL_MAGIC_collxfrm
PERL_MAGIC_dbfile
PERL_MAGIC_dbline
PERL_MAGIC_defelem
PERL_MAGIC_env
PERL_MAGIC_envelem
PERL_MAGIC_ext
PERL_MAGIC_fm
PERL_MAGIC_glob
PERL_MAGIC_isa
PERL_MAGIC_isaelem
PERL_MAGIC_mutex
PERL_MAGIC_nkeys
PERL_MAGIC_overload
PERL_MAGIC_overload_elem
PERL_MAGIC_overload_table
PERL_MAGIC_pos
PERL_MAGIC_qr
PERL_MAGIC_regdata
PERL_MAGIC_regdatum
PERL_MAGIC_regex_global
PERL_MAGIC_shared
PERL_MAGIC_shared_scalar
PERL_MAGIC_sig
PERL_MAGIC_sigelem
PERL_MAGIC_substr
PERL_MAGIC_sv
PERL_MAGIC_taint
PERL_MAGIC_tied
PERL_MAGIC_tiedelem
PERL_MAGIC_tiedscalar
PERL_MAGIC_utf8
PERL_MAGIC_uvar
PERL_MAGIC_uvar_elem
PERL_MAGIC_vec
PERL_MAGIC_vstring
PERL_PV_ESCAPE_ALL
PERL_PV_ESCAPE_FIRSTCHAR
PERL_PV_ESCAPE_NOBACKSLASH
PERL_PV_ESCAPE_NOCLEAR
PERL_PV_ESCAPE_QUOTE
PERL_PV_ESCAPE_RE
PERL_PV_ESCAPE_UNI
PERL_PV_ESCAPE_UNI_DETECT
PERL_PV_PRETTY_DUMP
PERL_PV_PRETTY_ELLIPSES
PERL_PV_PRETTY_LTGT
PERL_PV_PRETTY_NOCLEAR
PERL_PV_PRETTY_QUOTE
PERL_PV_PRETTY_REGPROP
PERL_QUAD_MAX
PERL_QUAD_MIN
PERL_REVISION
PERL_SCAN_ALLOW_UNDERSCORES
PERL_SCAN_DISALLOW_PREFIX
PERL_SCAN_GREATER_THAN_UV_MAX
PERL_SCAN_SILENT_ILLDIGIT
PERL_SHORT_MAX
PERL_SHORT_MIN
PERL_SIGNALS_UNSAFE_FLAG
PERL_SUBVERSION
PERL_UCHAR_MAX
PERL_UCHAR_MIN
PERL_UINT_MAX
PERL_UINT_MIN
PERL_ULONG_MAX
PERL_ULONG_MIN
PERL_UNUSED_ARG
PERL_UNUSED_CONTEXT
PERL_UNUSED_DECL
PERL_UNUSED_RESULT
PERL_UNUSED_VAR
PERL_UQUAD_MAX
PERL_UQUAD_MIN
PERL_USE_GCC_BRACE_GROUPS
PERL_USHORT_MAX
PERL_USHORT_MIN
PERL_VERSION
Perl_warner
Perl_warner_nocontext
PERLIO_FUNCS_CAST
PERLIO_FUNCS_DECL
PL_bufend
PL_bufptr
PL_compiling
PL_copline
PL_curcop
PL_curstash
PL_DBsignal
PL_DBsingle
PL_DBsub
PL_DBtrace
PL_debstash
PL_defgv
PL_diehook
PL_dirty
PL_dowarn
PL_errgv
PL_error_count
PL_expect
PL_hexdigit
PL_hints
PL_in_my
PL_in_my_stash
PL_laststatval
PL_lex_state
PL_lex_stuff
PL_linestr
PL_na
PL_no_modify
PL_parser
PL_perl_destruct_level
PL_perldb
PL_ppaddr
PL_rsfp
PL_rsfp_filters
PL_signals
PL_stack_base
PL_stack_sp
PL_statcache
PL_stdingv
PL_Sv
PL_sv_arenaroot
PL_sv_no
PL_sv_undef
PL_sv_yes
PL_tainted
PL_tainting
PL_tokenbuf
pMY_CXT
pMY_CXT_
Poison
PoisonFree
PoisonNew
PoisonWith
pTHX
pTHX_
PTR2IV
PTR2nat
PTR2NV
PTR2ul
PTR2UV
PTRV
PUSHmortal
PUSHu
pv_display
pv_escape
pv_pretty
SAVE_DEFSV
START_EXTERN_C
START_MY_CXT
STMT_END
STMT_START
STR_WITH_LEN
sv_2pv_flags
sv_2pv_nolen
sv_2pvbyte
sv_2pvbyte_nolen
sv_2uv
sv_catpv_mg
sv_catpvf_mg
sv_catpvf_mg_nocontext
sv_catpvn_mg
sv_catpvn_nomg
sv_catpvs
sv_catsv_mg
sv_catsv_nomg
SV_CONST_RETURN
SV_COW_DROP_PV
SV_COW_SHARED_HASH_KEYS
SV_GMAGIC
SV_HAS_TRAILING_NUL
SV_IMMEDIATE_UNREF
sv_magic_portable
SV_MUTABLE_RETURN
SV_NOSTEAL
sv_pvn_force_flags
sv_pvn_nomg
sv_setiv_mg
sv_setnv_mg
sv_setpv_mg
sv_setpvf_mg
sv_setpvf_mg_nocontext
sv_setpvn_mg
sv_setpvs
sv_setsv_mg
sv_setsv_nomg
sv_setuv
sv_setuv_mg
SV_SMAGIC
sv_unmagicext
sv_usepvn_mg
SV_UTF8_NO_ENCODING
sv_uv
sv_vcatpvf
sv_vcatpvf_mg
sv_vsetpvf
sv_vsetpvf_mg
SVf
SVf_UTF8
SVfARG
SvGETMAGIC
SvIV_nomg
SvMAGIC_set
SvPV_const
SvPV_flags
SvPV_flags_const
SvPV_flags_const_nolen
SvPV_flags_mutable
SvPV_force
SvPV_force_flags
SvPV_force_flags_mutable
SvPV_force_flags_nolen
SvPV_force_mutable
SvPV_force_nolen
SvPV_force_nomg
SvPV_force_nomg_nolen
SvPV_mutable
SvPV_nolen
SvPV_nolen_const
SvPV_nomg
SvPV_nomg_const
SvPV_nomg_const_nolen
SvPV_nomg_nolen
SvPV_renew
SvPVbyte
SvPVX_const
SvPVX_mutable
SvREFCNT_inc
SvREFCNT_inc_NN
SvREFCNT_inc_simple
SvREFCNT_inc_simple_NN
SvREFCNT_inc_simple_void
SvREFCNT_inc_simple_void_NN
SvREFCNT_inc_void
SvREFCNT_inc_void_NN
SvRV_set
SvRX
SvRXOK
SvSHARED_HASH
SvSTASH_set
SvUOK
SvUV
SvUV_nomg
SvUV_set
SvUVX
SvUVx
SvUVXx
SvVSTRING_mg
UNDERBAR
UTF8_MAXBYTES
UVof
UVSIZE
UVTYPE
UVuf
UVXf
UVxf
vload_module
vnewSVpvf
WARN_ALL
WARN_AMBIGUOUS
WARN_ASSERTIONS
WARN_BAREWORD
WARN_CLOSED
WARN_CLOSURE
WARN_DEBUGGING
WARN_DEPRECATED
WARN_DIGIT
WARN_EXEC
WARN_EXITING
WARN_GLOB
WARN_INPLACE
WARN_INTERNAL
WARN_IO
WARN_LAYER
WARN_MALLOC
WARN_MISC
WARN_NEWLINE
WARN_NUMERIC
WARN_ONCE
WARN_OVERFLOW
WARN_PACK
WARN_PARENTHESIS
WARN_PIPE
WARN_PORTABLE
WARN_PRECEDENCE
WARN_PRINTF
WARN_PROTOTYPE
WARN_QW
WARN_RECURSION
WARN_REDEFINE
WARN_REGEXP
WARN_RESERVED
WARN_SEMICOLON
WARN_SEVERE
WARN_SIGNAL
WARN_SUBSTR
WARN_SYNTAX
WARN_TAINT
WARN_THREADS
WARN_UNINITIALIZED
WARN_UNOPENED
WARN_UNPACK
WARN_UNTIE
WARN_UTF8
WARN_VOID
warner
WIDEST_UTYPE
XCPT_CATCH
XCPT_RETHROW
XCPT_TRY_END
XCPT_TRY_START
XPUSHmortal
XPUSHu
XSprePUSH
XSPROTO
XSRETURN
XSRETURN_UV
XST_mUV
ZeroD
=head2 Perl API not supported by ppport.h
There is still a big part of the API not supported by F<ppport.h>.
Either because it doesn't make sense to back-port that part of the API,
or simply because it hasn't been implemented yet. Patches welcome!
Here's a list of the currently unsupported API, and also the version of
Perl below which it is unsupported:
=over 4
=item perl 5.24.0
BhkDISABLE
BhkENABLE
BhkENTRY_set
MULTICALL
PERL_SYS_TERM
POP_MULTICALL
PUSH_MULTICALL
PadARRAY
PadMAX
PadlistARRAY
PadlistMAX
PadlistNAMES
PadlistNAMESARRAY
PadlistNAMESMAX
PadnameLEN
PadnamePV
PadnameREFCNT
PadnameREFCNT_dec
PadnameSV
PadnamelistARRAY
PadnamelistMAX
PadnamelistREFCNT
PadnamelistREFCNT_dec
RESTORE_LC_NUMERIC
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
STORE_LC_NUMERIC_SET_TO_NEEDED
XS_APIVERSION_BOOTCHECK
XS_EXTERNAL
XS_INTERNAL
XS_VERSION_BOOTCHECK
XopDISABLE
XopENABLE
XopENTRY
XopENTRYCUSTOM
XopENTRY_set
cophh_new_empty
my_lstat
my_stat
reentrant_free
reentrant_init
reentrant_retry
reentrant_size
ref
sv_setref_pvs
=item perl 5.23.9
toFOLD_uvchr
toLOWER_uvchr
toTITLE_uvchr
toUPPER_uvchr
=item perl 5.23.8
clear_defarray
cx_popblock
cx_popeval
cx_popformat
cx_popgiven
cx_poploop
cx_popsub
cx_popsub_args
cx_popsub_common
cx_popwhen
cx_pushblock
cx_pusheval
cx_pushformat
cx_pushgiven
cx_pushloop_for
cx_pushloop_plain
cx_pushsub
cx_pushwhen
cx_topblock
leave_adjust_stacks
savetmps
=item perl 5.22.0
UVCHR_SKIP
=item perl 5.21.10
DECLARATION_FOR_LC_NUMERIC_MANIPULATION
=item perl 5.21.8
sv_get_backrefs
=item perl 5.21.7
PadnameUTF8
is_invariant_string
newPADNAMELIST
newPADNAMEouter
newPADNAMEpvn
newUNOP_AUX
padnamelist_fetch
padnamelist_store
=item perl 5.21.6
newDEFSVOP
op_convert_list
=item perl 5.21.5
cv_name
newMETHOP
newMETHOP_named
=item perl 5.21.4
cv_set_call_checker_flags
grok_infnan
isinfnan
sync_locale
=item perl 5.21.2
grok_number_flags
op_sibling_splice
=item perl 5.21.1
_is_in_locale_category
_is_utf8_char_slow
_is_utf8_idcont
_is_utf8_idstart
_is_utf8_xidcont
_is_utf8_xidstart
isALNUM_lazy
isIDFIRST_lazy
isUTF8_CHAR
markstack_grow
my_strerror
=item perl 5.19.10
OP_TYPE_IS_OR_WAS
=item perl 5.19.9
_to_utf8_fold_flags
_to_utf8_lower_flags
_to_utf8_title_flags
_to_utf8_upper_flags
=item perl 5.19.7
OP_TYPE_IS
=item perl 5.19.4
append_utf8_from_native_byte
is_safe_syscall
uvoffuni_to_utf8_flags
=item perl 5.19.3
croak_memory_wrap
sv_pos_b2u_flags
=item perl 5.19.2
SVt_INVLIST
=item perl 5.19.1
re_intuit_start
toFOLD
toFOLD_utf8
toLOWER_L1
toTITLE
=item perl 5.18.0
hv_rand_set
=item perl 5.17.9
av_tindex
av_top_index
=item perl 5.17.8
_is_uni_FOO
_is_uni_perl_idcont
_is_utf8_FOO
_is_utf8_mark
_is_utf8_perl_idcont
isALPHANUMERIC
isIDCONT
=item perl 5.17.7
SvREFCNT_dec_NN
_is_uni_perl_idstart
_is_utf8_perl_idstart
is_uni_alnumc
is_uni_alnumc_lc
is_utf8_alnumc
=item perl 5.17.6
READ_XDIGIT
=item perl 5.17.4
PL_comppad_name
PadlistREFCNT
newMYSUB
newSVpadname
=item perl 5.17.2
is_uni_blank
is_uni_blank_lc
is_utf8_blank
sv_copypv_flags
sv_copypv_nomg
sv_vcatpvfn_flags
=item perl 5.15.9
utf8_to_uvchr_buf
utf8_to_uvuni_buf
valid_utf8_to_uvchr
valid_utf8_to_uvuni
=item perl 5.15.8
is_utf8_char_buf
wrap_op_checker
=item perl 5.15.7
toLOWER_utf8
toTITLE_utf8
toUPPER_utf8
to_utf8_fold
to_utf8_lower
to_utf8_title
to_utf8_upper
=item perl 5.15.6
newCONSTSUB_flags
=item perl 5.15.4
HvENAMELEN
HvENAMEUTF8
HvNAMELEN
HvNAMEUTF8
gv_autoload_pv
gv_autoload_pvn
gv_autoload_sv
gv_fetchmeth_pv
gv_fetchmeth_pv_autoload
gv_fetchmeth_pvn
gv_fetchmeth_pvn_autoload
gv_fetchmeth_sv
gv_fetchmeth_sv_autoload
gv_fetchmethod_pv_flags
gv_fetchmethod_pvn_flags
gv_fetchmethod_sv_flags
gv_init_pv
gv_init_sv
newGVgen_flags
sv_derived_from_pv
sv_derived_from_pvn
sv_derived_from_sv
sv_does_pv
sv_does_pvn
sv_does_sv
sv_ref
whichsig_pv
whichsig_pvn
whichsig_sv
=item perl 5.15.1
cop_fetch_label
cop_store_label
pad_add_name_pv
pad_add_name_pvn
pad_add_name_pvs
pad_add_name_sv
pad_findmy_pv
pad_findmy_pvn
pad_findmy_pvs
pad_findmy_sv
=item perl 5.14.0
_to_uni_fold_flags
=item perl 5.13.10
foldEQ_utf8_flags
is_utf8_xidcont
is_utf8_xidfirst
=item perl 5.13.8
foldEQ_latin1
parse_arithexpr
parse_fullexpr
parse_listexpr
parse_termexpr
=item perl 5.13.7
HvENAME
OP_CLASS
XopFLAGS
amagic_deref_call
bytes_cmp_utf8
cop_hints_2hv
cop_hints_fetch_pv
cop_hints_fetch_pvn
cop_hints_fetch_pvs
cop_hints_fetch_sv
cophh_2hv
cophh_copy
cophh_delete_pv
cophh_delete_pvn
cophh_delete_pvs
cophh_delete_sv
cophh_fetch_pv
cophh_fetch_pvn
cophh_fetch_pvs
cophh_fetch_sv
cophh_free
cophh_store_pv
cophh_store_pvn
cophh_store_pvs
cophh_store_sv
custom_op_register
custom_op_xop
newFOROP
newWHILEOP
op_lvalue
op_scope
parse_barestmt
parse_block
parse_label
=item perl 5.13.6
LINKLIST
SvTRUE_nomg
ck_entersub_args_list
ck_entersub_args_proto
ck_entersub_args_proto_or_list
cv_get_call_checker
cv_set_call_checker
isWORDCHAR
lex_stuff_pv
mg_free_type
newSVpv_share
op_append_elem
op_append_list
op_contextualize
op_linklist
op_prepend_elem
parse_stmtseq
rv2cv_op_cv
savesharedpvs
savesharedsvpv
sv_2bool_flags
sv_catpv_flags
sv_catpv_nomg
sv_catpvs_flags
sv_catpvs_mg
sv_catpvs_nomg
sv_cmp_flags
sv_cmp_locale_flags
sv_collxfrm_flags
sv_eq_flags
sv_setpvs_mg
=item perl 5.13.5
PL_rpeepp
isOCTAL
lex_stuff_pvs
parse_fullstmt
=item perl 5.13.3
blockhook_register
croak_no_modify
=item perl 5.13.2
SvNV_nomg
find_rundefsv
foldEQ
foldEQ_locale
foldEQ_utf8
hv_fill
sv_dec_nomg
sv_inc_nomg
=item perl 5.13.1
croak_sv
die_sv
mess_sv
sv_2nv_flags
warn_sv
=item perl 5.11.5
sv_pos_u2b_flags
=item perl 5.11.4
prescan_version
=item perl 5.11.2
PL_keyword_plugin
lex_bufutf8
lex_discard_to
lex_grow_linestr
lex_next_chunk
lex_peek_unichar
lex_read_space
lex_read_to
lex_read_unichar
lex_stuff_pvn
lex_stuff_sv
lex_unstuff
=item perl 5.11.1
ck_warner
ck_warner_d
is_utf8_perl_space
is_utf8_perl_word
is_utf8_posix_digit
=item perl 5.11.0
Gv_AMupdate
PL_opfreehook
SVt_REGEXP
SvOOK_offset
av_iter_p
gv_add_by_type
is_ascii_string
pregfree2
save_adelete
save_aelem_flags
save_hdelete
save_helem_flags
sv_utf8_upgrade_flags_grow
=item perl 5.10.1
croak_xs_usage
mro_get_from_name
mro_get_private_data
mro_register
mro_set_mro
mro_set_private_data
save_hints
save_padsv_and_mortalize
save_pushi32ptr
save_pushptr
save_pushptrptr
sv_insert_flags
=item perl 5.10.0
hv_common
hv_common_key_len
sv_destroyable
sys_init
sys_init3
sys_term
=item perl 5.9.5
Perl_signbit
av_create_and_push
av_create_and_unshift_one
gv_fetchfile_flags
lex_start
mro_get_linear_isa
mro_method_changed_in
my_dirfd
pregcomp
ptr_table_clear
ptr_table_fetch
ptr_table_free
ptr_table_new
ptr_table_split
ptr_table_store
re_compile
reg_named_buff_all
reg_named_buff_exists
reg_named_buff_fetch
reg_named_buff_firstkey
reg_named_buff_nextkey
reg_named_buff_scalar
regfree_internal
savesharedpvn
scan_vstring
upg_version
=item perl 5.9.4
PerlIO_context_layers
gv_name_set
hv_copy_hints_hv
my_vsnprintf
newXS_flags
regclass_swash
sv_does
sv_usepvn_flags
=item perl 5.9.3
av_arylen_p
ckwarn
ckwarn_d
csighandler
dMULTICALL
doref
gv_const_sv
hv_eiter_p
hv_eiter_set
hv_name_set
hv_placeholders_get
hv_placeholders_set
hv_riter_p
hv_riter_set
is_utf8_string_loclen
newGIVENOP
newSVhek
newWHENOP
pad_compname_type
savepvs
sortsv_flags
vverify
=item perl 5.9.2
SvPVbyte_force
find_rundefsvoffset
op_refcnt_lock
op_refcnt_unlock
savesvpv
vnormal
=item perl 5.9.1
hv_clear_placeholders
hv_scalar
scan_version
sv_2iv_flags
sv_2uv_flags
=item perl 5.9.0
new_version
save_set_svflags
vcmp
vnumify
vstringify
=item perl 5.8.3
SvIsCOW
SvIsCOW_shared_hash
=item perl 5.8.1
CvPADLIST
PL_comppad
SvVOK
doing_taint
find_runcv
is_utf8_string_loc
packlist
pad_add_anon
pad_new
pad_tidy
save_bool
savestack_grow_cnt
seed
sv_cat_decode
sv_setpviv
sv_setpviv_mg
unpackstring
=item perl 5.8.0
HeUTF8
hv_iternext_flags
hv_store_flags
is_utf8_idcont
nothreadhook
=item perl 5.7.3
OP_DESC
OP_NAME
PL_peepp
PerlIO_clearerr
PerlIO_close
PerlIO_eof
PerlIO_error
PerlIO_fileno
PerlIO_fill
PerlIO_flush
PerlIO_get_base
PerlIO_get_bufsiz
PerlIO_get_cnt
PerlIO_get_ptr
PerlIO_read
PerlIO_seek
PerlIO_set_cnt
PerlIO_set_ptrcnt
PerlIO_setlinebuf
PerlIO_stderr
PerlIO_stdin
PerlIO_stdout
PerlIO_tell
PerlIO_unread
PerlIO_write
SvLOCK
SvSHARE
SvUNLOCK
atfork_lock
atfork_unlock
custom_op_desc
custom_op_name
deb
debstack
debstackptrs
gv_fetchmeth_autoload
ibcmp_utf8
my_fork
my_socketpair
pack_cat
perl_destruct
pv_uni_display
save_shared_pvref
savesharedpv
sortsv
sv_magicext
sv_nolocking
sv_nosharing
sv_recode_to_utf8
sv_uni_display
to_uni_fold
to_uni_lower
to_uni_title
to_uni_upper
to_utf8_case
unpack_str
uvchr_to_utf8_flags
uvuni_to_utf8_flags
vdeb
=item perl 5.7.2
calloc
getcwd_sv
init_tm
malloc
mfree
mini_mktime
my_atof2
my_strftime
op_null
realloc
sv_catpvn_flags
sv_catsv_flags
sv_setsv_flags
sv_utf8_upgrade_flags
sv_utf8_upgrade_nomg
swash_fetch
=item perl 5.7.1
ASCII_TO_NEED
NATIVE_TO_NEED
POPpbytex
bytes_from_utf8
despatch_signals
do_openn
gv_handler
is_lvalue_sub
my_popen_list
save_mortalizesv
scan_num
sv_force_normal_flags
sv_setref_uv
sv_unref_flags
sv_utf8_upgrade
utf8_length
utf8_to_uvchr
utf8_to_uvuni
utf8n_to_uvchr
utf8n_to_uvuni
uvchr_to_utf8
uvuni_to_utf8
=item perl 5.6.1
SvGAMAGIC
apply_attrs_string
bytes_to_utf8
gv_efullname4
gv_fullname4
is_utf8_string
save_generic_pvref
utf16_to_utf8
utf16_to_utf8_reversed
utf8_to_bytes
=item perl 5.6.0
DO_UTF8
PERL_SYS_INIT3
PL_check
POPul
SvIOK_UV
SvIOK_notUV
SvIOK_only_UV
SvPOK_only_UTF8
SvPVbyte_nolen
SvPVbytex
SvPVbytex_force
SvPVutf8
SvPVutf8_force
SvPVutf8_nolen
SvPVutf8x
SvPVutf8x_force
SvUOK
SvUTF8
SvUTF8_off
SvUTF8_on
UTF8SKIP
av_delete
av_exists
call_atexit
caller_cx
cast_i32
cast_iv
cast_ulong
cast_uv
do_gv_dump
do_gvgv_dump
do_hv_dump
do_magic_dump
do_op_dump
do_open9
do_pmop_dump
do_sv_dump
dump_all
dump_eval
dump_form
dump_indent
dump_packsubs
dump_sub
dump_vindent
get_context
get_ppaddr
gv_dump
init_i18nl10n
init_i18nl14n
is_uni_alnum
is_uni_alnum_lc
is_uni_alpha
is_uni_alpha_lc
is_uni_ascii
is_uni_ascii_lc
is_uni_cntrl
is_uni_cntrl_lc
is_uni_digit
is_uni_digit_lc
is_uni_graph
is_uni_graph_lc
is_uni_idfirst
is_uni_idfirst_lc
is_uni_lower
is_uni_lower_lc
is_uni_print
is_uni_print_lc
is_uni_punct
is_uni_punct_lc
is_uni_space
is_uni_space_lc
is_uni_upper
is_uni_upper_lc
is_uni_xdigit
is_uni_xdigit_lc
is_utf8_alnum
is_utf8_alpha
is_utf8_ascii
is_utf8_char
is_utf8_cntrl
is_utf8_digit
is_utf8_graph
is_utf8_idfirst
is_utf8_lower
is_utf8_mark
is_utf8_print
is_utf8_punct
is_utf8_space
is_utf8_upper
is_utf8_xdigit
magic_dump
mess
my_atof
my_fflush_all
newANONATTRSUB
newATTRSUB
newXS
newXSproto
new_collate
new_ctype
new_numeric
op_dump
perl_parse
pmop_dump
re_intuit_string
reginitcolors
require_pv
safesyscalloc
safesysfree
safesysmalloc
safesysrealloc
save_I8
save_alloc
save_destructor
save_destructor_x
save_re_context
save_vptr
scan_bin
set_context
set_numeric_local
set_numeric_radix
set_numeric_standard
str_to_version
sv_2pvutf8
sv_2pvutf8_nolen
sv_force_normal
sv_len_utf8
sv_pos_b2u
sv_pos_u2b
sv_pv
sv_pvbyte
sv_pvbyten
sv_pvbyten_force
sv_pvutf8
sv_pvutf8n
sv_pvutf8n_force
sv_rvweaken
sv_utf8_decode
sv_utf8_downgrade
sv_utf8_encode
swash_init
to_uni_lower_lc
to_uni_title_lc
to_uni_upper_lc
utf8_distance
utf8_hop
vcroak
vform
vmess
vwarn
vwarner
=item perl 5.005_03
POPpx
get_vtbl
save_generic_svref
=item perl 5.005
PL_curpad
PL_modglobal
cx_dump
debop
debprofdump
fbm_compile
fbm_instr
get_op_descs
get_op_names
init_stacks
mg_length
mg_size
newHVhv
new_stackinfo
regdump
regexec_flags
regnext
runops_debug
runops_standard
save_iv
save_op
sv_iv
sv_nv
sv_peek
sv_pvn
sv_pvn_nomg
sv_true
=item perl 5.004_05
CopyD
MoveD
do_binmode
my_bcopy
save_aelem
save_helem
=item perl 5.004
GIMME_V
G_VOID
HePV
HeSVKEY_set
POPu
SvSetMagicSV
SvSetMagicSV_nosteal
SvSetSV_nosteal
SvTAINTED
SvTAINTED_off
SvTAINTED_on
block_end
block_gimme
block_start
call_list
delimcpy
form
gv_autoload4
gv_fetchmethod_autoload
hv_delayfree_ent
hv_free_ent
ibcmp_locale
intro_my
my_failure_exit
newSVpvf
rsignal
rsignal_state
save_I16
save_gp
share_hek
start_subparse
sv_catpvf
sv_catpvf_mg
sv_cmp_locale
sv_derived_from
sv_magic_portable
sv_setpvf
sv_setpvf_mg
sv_taint
sv_tainted
sv_untaint
sv_vcatpvf
sv_vcatpvf_mg
sv_vcatpvfn
sv_vsetpvf
sv_vsetpvf_mg
sv_vsetpvfn
toLOWER_LC
vnewSVpvf
warner
=item perl 5.003_07
HeHASH
HeKEY
HeKLEN
HeSVKEY
HeSVKEY_force
HeVAL
cv_const_sv
do_open
gv_efullname3
gv_fullname3
hv_delete_ent
hv_exists_ent
hv_fetch_ent
hv_iterkeysv
hv_ksplit
hv_store_ent
my_pclose
my_popen
sv_gets
unsharepvn
=back
=head1 BUGS
If you find any bugs, C<Devel::PPPort> doesn't seem to build on your
system, or any of its tests fail, please file an issue here:
L<https://github.com/mhx/Devel-PPPort/issues/>
=head1 AUTHORS
=over 2
=item *
Version 1.x of Devel::PPPort was written by Kenneth Albanowski.
=item *
Version 2.x was ported to the Perl core by Paul Marquess.
=item *
Version 3.x was ported back to CPAN by Marcus Holland-Moritz.
=item *
Versions >= 3.22 are maintained with support from Matthew Horsfall (alh).
=back
=head1 COPYRIGHT
Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
Version 2.x, Copyright (C) 2001, Paul Marquess.
Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=head1 SEE ALSO
See L<h2xs>, L<ppport.h>.
=cut
package Devel::PPPort;
use strict;
use vars qw($VERSION $data);
$VERSION = '3.36';
sub _init_data
{
$data = do { local $/; <DATA> };
my $pkg = 'Devel::PPPort';
$data =~ s/__PERL_VERSION__/$]/g;
$data =~ s/__VERSION__/$VERSION/g;
$data =~ s/__PKG__/$pkg/g;
$data =~ s/^\|>//gm;
}
sub GetFileContents {
my $file = shift || 'ppport.h';
defined $data or _init_data();
my $copy = $data;
$copy =~ s/\bppport\.h\b/$file/g;
return $copy;
}
sub WriteFile
{
my $file = shift || 'ppport.h';
my $data = GetFileContents($file);
open F, ">$file" or return undef;
print F $data;
close F;
return 1;
}
1;
__DATA__
#if 0
<<'SKIP';
#endif
/*
----------------------------------------------------------------------
ppport.h -- Perl/Pollution/Portability Version __VERSION__
Automatically created by __PKG__ running under perl __PERL_VERSION__.
Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
includes in parts/inc/ instead.
Use 'perldoc ppport.h' to view the documentation below.
----------------------------------------------------------------------
SKIP
|>=pod
|>
|>=head1 NAME
|>
|>ppport.h - Perl/Pollution/Portability version __VERSION__
|>
|>=head1 SYNOPSIS
|>
|> perl ppport.h [options] [source files]
|>
|> Searches current directory for files if no [source files] are given
|>
|> --help show short help
|>
|> --version show version
|>
|> --patch=file write one patch file with changes
|> --copy=suffix write changed copies with suffix
|> --diff=program use diff program and options
|>
|> --compat-version=version provide compatibility with Perl version
|> --cplusplus accept C++ comments
|>
|> --quiet don't output anything except fatal errors
|> --nodiag don't show diagnostics
|> --nohints don't show hints
|> --nochanges don't suggest changes
|> --nofilter don't filter input files
|>
|> --strip strip all script and doc functionality from
|> ppport.h
|>
|> --list-provided list provided API
|> --list-unsupported list unsupported API
|> --api-info=name show Perl API portability information
|>
|>=head1 COMPATIBILITY
|>
|>This version of F<ppport.h> is designed to support operation with Perl
|>installations back to 5.003, and has been tested up to 5.20.
|>
|>=head1 OPTIONS
|>
|>=head2 --help
|>
|>Display a brief usage summary.
|>
|>=head2 --version
|>
|>Display the version of F<ppport.h>.
|>
|>=head2 --patch=I<file>
|>
|>If this option is given, a single patch file will be created if
|>any changes are suggested. This requires a working diff program
|>to be installed on your system.
|>
|>=head2 --copy=I<suffix>
|>
|>If this option is given, a copy of each file will be saved with
|>the given suffix that contains the suggested changes. This does
|>not require any external programs. Note that this does not
|>automagically add a dot between the original filename and the
|>suffix. If you want the dot, you have to include it in the option
|>argument.
|>
|>If neither C<--patch> or C<--copy> are given, the default is to
|>simply print the diffs for each file. This requires either
|>C<Text::Diff> or a C<diff> program to be installed.
|>
|>=head2 --diff=I<program>
|>
|>Manually set the diff program and options to use. The default
|>is to use C<Text::Diff>, when installed, and output unified
|>context diffs.
|>
|>=head2 --compat-version=I<version>
|>
|>Tell F<ppport.h> to check for compatibility with the given
|>Perl version. The default is to check for compatibility with Perl
|>version 5.003. You can use this option to reduce the output
|>of F<ppport.h> if you intend to be backward compatible only
|>down to a certain Perl version.
|>
|>=head2 --cplusplus
|>
|>Usually, F<ppport.h> will detect C++ style comments and
|>replace them with C style comments for portability reasons.
|>Using this option instructs F<ppport.h> to leave C++
|>comments untouched.
|>
|>=head2 --quiet
|>
|>Be quiet. Don't print anything except fatal errors.
|>
|>=head2 --nodiag
|>
|>Don't output any diagnostic messages. Only portability
|>alerts will be printed.
|>
|>=head2 --nohints
|>
|>Don't output any hints. Hints often contain useful portability
|>notes. Warnings will still be displayed.
|>
|>=head2 --nochanges
|>
|>Don't suggest any changes. Only give diagnostic output and hints
|>unless these are also deactivated.
|>
|>=head2 --nofilter
|>
|>Don't filter the list of input files. By default, files not looking
|>like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
|>
|>=head2 --strip
|>
|>Strip all script and documentation functionality from F<ppport.h>.
|>This reduces the size of F<ppport.h> dramatically and may be useful
|>if you want to include F<ppport.h> in smaller modules without
|>increasing their distribution size too much.
|>
|>The stripped F<ppport.h> will have a C<--unstrip> option that allows
|>you to undo the stripping, but only if an appropriate C<Devel::PPPort>
|>module is installed.
|>
|>=head2 --list-provided
|>
|>Lists the API elements for which compatibility is provided by
|>F<ppport.h>. Also lists if it must be explicitly requested,
|>if it has dependencies, and if there are hints or warnings for it.
|>
|>=head2 --list-unsupported
|>
|>Lists the API elements that are known not to be supported by
|>F<ppport.h> and below which version of Perl they probably
|>won't be available or work.
|>
|>=head2 --api-info=I<name>
|>
|>Show portability information for API elements matching I<name>.
|>If I<name> is surrounded by slashes, it is interpreted as a regular
|>expression.
|>
|>=head1 DESCRIPTION
|>
|>In order for a Perl extension (XS) module to be as portable as possible
|>across differing versions of Perl itself, certain steps need to be taken.
|>
|>=over 4
|>
|>=item *
|>
|>Including this header is the first major one. This alone will give you
|>access to a large part of the Perl API that hasn't been available in
|>earlier Perl releases. Use
|>
|> perl ppport.h --list-provided
|>
|>to see which API elements are provided by ppport.h.
|>
|>=item *
|>
|>You should avoid using deprecated parts of the API. For example, using
|>global Perl variables without the C<PL_> prefix is deprecated. Also,
|>some API functions used to have a C<perl_> prefix. Using this form is
|>also deprecated. You can safely use the supported API, as F<ppport.h>
|>will provide wrappers for older Perl versions.
|>
|>=item *
|>
|>If you use one of a few functions or variables that were not present in
|>earlier versions of Perl, and that can't be provided using a macro, you
|>have to explicitly request support for these functions by adding one or
|>more C<#define>s in your source code before the inclusion of F<ppport.h>.
|>
|>These functions or variables will be marked C<explicit> in the list shown
|>by C<--list-provided>.
|>
|>Depending on whether you module has a single or multiple files that
|>use such functions or variables, you want either C<static> or global
|>variants.
|>
|>For a C<static> function or variable (used only in a single source
|>file), use:
|>
|> #define NEED_function
|> #define NEED_variable
|>
|>For a global function or variable (used in multiple source files),
|>use:
|>
|> #define NEED_function_GLOBAL
|> #define NEED_variable_GLOBAL
|>
|>Note that you mustn't have more than one global request for the
|>same function or variable in your project.
|>
|> Function / Variable Static Request Global Request
|> -----------------------------------------------------------------------------------------
|> PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL
|> PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL
|> SvRX() NEED_SvRX NEED_SvRX_GLOBAL
|> caller_cx() NEED_caller_cx NEED_caller_cx_GLOBAL
|> eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL
|> grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL
|> grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL
|> grok_number() NEED_grok_number NEED_grok_number_GLOBAL
|> grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL
|> grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL
|> gv_fetchpvn_flags() NEED_gv_fetchpvn_flags NEED_gv_fetchpvn_flags_GLOBAL
|> load_module() NEED_load_module NEED_load_module_GLOBAL
|> mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL
|> my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL
|> my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL
|> my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL
|> my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL
|> newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL
|> newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL
|> newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL
|> newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL
|> newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL
|> pv_display() NEED_pv_display NEED_pv_display_GLOBAL
|> pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL
|> pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL
|> sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL
|> sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL
|> sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL
|> sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL
|> sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL
|> sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL
|> sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL
|> sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL
|> vload_module() NEED_vload_module NEED_vload_module_GLOBAL
|> vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL
|> warner() NEED_warner NEED_warner_GLOBAL
|>
|>To avoid namespace conflicts, you can change the namespace of the
|>explicitly exported functions / variables using the C<DPPP_NAMESPACE>
|>macro. Just C<#define> the macro before including C<ppport.h>:
|>
|> #define DPPP_NAMESPACE MyOwnNamespace_
|> #include "ppport.h"
|>
|>The default namespace is C<DPPP_>.
|>
|>=back
|>
|>The good thing is that most of the above can be checked by running
|>F<ppport.h> on your source code. See the next section for
|>details.
|>
|>=head1 EXAMPLES
|>
|>To verify whether F<ppport.h> is needed for your module, whether you
|>should make any changes to your code, and whether any special defines
|>should be used, F<ppport.h> can be run as a Perl script to check your
|>source code. Simply say:
|>
|> perl ppport.h
|>
|>The result will usually be a list of patches suggesting changes
|>that should at least be acceptable, if not necessarily the most
|>efficient solution, or a fix for all possible problems.
|>
|>If you know that your XS module uses features only available in
|>newer Perl releases, if you're aware that it uses C++ comments,
|>and if you want all suggestions as a single patch file, you could
|>use something like this:
|>
|> perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
|>
|>If you only want your code to be scanned without any suggestions
|>for changes, use:
|>
|> perl ppport.h --nochanges
|>
|>You can specify a different C<diff> program or options, using
|>the C<--diff> option:
|>
|> perl ppport.h --diff='diff -C 10'
|>
|>This would output context diffs with 10 lines of context.
|>
|>If you want to create patched copies of your files instead, use:
|>
|> perl ppport.h --copy=.new
|>
|>To display portability information for the C<newSVpvn> function,
|>use:
|>
|> perl ppport.h --api-info=newSVpvn
|>
|>Since the argument to C<--api-info> can be a regular expression,
|>you can use
|>
|> perl ppport.h --api-info=/_nomg$/
|>
|>to display portability information for all C<_nomg> functions or
|>
|> perl ppport.h --api-info=/./
|>
|>to display information for all known API elements.
|>
|>=head1 BUGS
|>
|>If this version of F<ppport.h> is causing failure during
|>the compilation of this module, please check if newer versions
|>of either this module or C<Devel::PPPort> are available on CPAN
|>before sending a bug report.
|>
|>If F<ppport.h> was generated using the latest version of
|>C<Devel::PPPort> and is causing failure of this module, please
|>file a bug report here: L<https://github.com/mhx/Devel-PPPort/issues/>
|>
|>Please include the following information:
|>
|>=over 4
|>
|>=item 1.
|>
|>The complete output from running "perl -V"
|>
|>=item 2.
|>
|>This file.
|>
|>=item 3.
|>
|>The name and version of the module you were trying to build.
|>
|>=item 4.
|>
|>A full log of the build that failed.
|>
|>=item 5.
|>
|>Any other information that you think could be relevant.
|>
|>=back
|>
|>For the latest version of this code, please get the C<Devel::PPPort>
|>module from CPAN.
|>
|>=head1 COPYRIGHT
|>
|>Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
|>
|>Version 2.x, Copyright (C) 2001, Paul Marquess.
|>
|>Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
|>
|>This program is free software; you can redistribute it and/or
|>modify it under the same terms as Perl itself.
|>
|>=head1 SEE ALSO
|>
|>See L<Devel::PPPort>.
|>
|>=cut
use strict;
# Disable broken TRIE-optimization
BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
my $VERSION = __VERSION__;
my %opt = (
quiet => 0,
diag => 1,
hints => 1,
changes => 1,
cplusplus => 0,
filter => 1,
strip => 0,
version => 0,
);
my($ppport) = $0 =~ /([\w.]+)$/;
my $LF = '(?:\r\n|[\r\n])'; # line feed
my $HS = "[ \t]"; # horizontal whitespace
# Never use C comments in this file!
my $ccs = '/'.'*';
my $cce = '*'.'/';
my $rccs = quotemeta $ccs;
my $rcce = quotemeta $cce;
eval {
require Getopt::Long;
Getopt::Long::GetOptions(\%opt, qw(
help quiet diag! filter! hints! changes! cplusplus strip version
patch=s copy=s diff=s compat-version=s
list-provided list-unsupported api-info=s
)) or usage();
};
if ($@ and grep /^-/, @ARGV) {
usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
die "Getopt::Long not found. Please don't use any options.\n";
}
if ($opt{version}) {
print "This is $0 $VERSION.\n";
exit 0;
}
usage() if $opt{help};
strip() if $opt{strip};
if (exists $opt{'compat-version'}) {
my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
if ($@) {
die "Invalid version number format: '$opt{'compat-version'}'\n";
}
die "Only Perl 5 is supported\n" if $r != 5;
die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
$opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
}
else {
$opt{'compat-version'} = 5;
}
my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
? ( $1 => {
($2 ? ( base => $2 ) : ()),
($3 ? ( todo => $3 ) : ()),
(index($4, 'v') >= 0 ? ( varargs => 1 ) : ()),
(index($4, 'p') >= 0 ? ( provided => 1 ) : ()),
(index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()),
} )
: die "invalid spec: $_" } qw(
ASCII_TO_NEED||5.007001|n
AvFILLp|5.004050||p
AvFILL|||
BhkDISABLE||5.024000|
BhkENABLE||5.024000|
BhkENTRY_set||5.024000|
BhkENTRY|||
BhkFLAGS|||
CALL_BLOCK_HOOKS|||
CLASS|||n
CPERLscope|5.005000||p
CX_CURPAD_SAVE|||
CX_CURPAD_SV|||
C_ARRAY_END|5.013002||p
C_ARRAY_LENGTH|5.008001||p
CopFILEAV|5.006000||p
CopFILEGV_set|5.006000||p
CopFILEGV|5.006000||p
CopFILESV|5.006000||p
CopFILE_set|5.006000||p
CopFILE|5.006000||p
CopSTASHPV_set|5.006000||p
CopSTASHPV|5.006000||p
CopSTASH_eq|5.006000||p
CopSTASH_set|5.006000||p
CopSTASH|5.006000||p
CopyD|5.009002|5.004050|p
Copy|||
CvPADLIST||5.008001|
CvSTASH|||
CvWEAKOUTSIDE|||
DECLARATION_FOR_LC_NUMERIC_MANIPULATION||5.021010|n
DEFSV_set|5.010001||p
DEFSV|5.004050||p
DO_UTF8||5.006000|
END_EXTERN_C|5.005000||p
ENTER|||
ERRSV|5.004050||p
EXTEND|||
EXTERN_C|5.005000||p
F0convert|||n
FREETMPS|||
GIMME_V||5.004000|n
GIMME|||n
GROK_NUMERIC_RADIX|5.007002||p
G_ARRAY|||
G_DISCARD|||
G_EVAL|||
G_METHOD|5.006001||p
G_NOARGS|||
G_SCALAR|||
G_VOID||5.004000|
GetVars|||
GvAV|||
GvCV|||
GvHV|||
GvSV|||
Gv_AMupdate||5.011000|
HEf_SVKEY|5.003070||p
HeHASH||5.003070|
HeKEY||5.003070|
HeKLEN||5.003070|
HePV||5.004000|
HeSVKEY_force||5.003070|
HeSVKEY_set||5.004000|
HeSVKEY||5.003070|
HeUTF8|5.010001|5.008000|p
HeVAL||5.003070|
HvENAMELEN||5.015004|
HvENAMEUTF8||5.015004|
HvENAME||5.013007|
HvNAMELEN_get|5.009003||p
HvNAMELEN||5.015004|
HvNAMEUTF8||5.015004|
HvNAME_get|5.009003||p
HvNAME|||
INT2PTR|5.006000||p
IN_LOCALE_COMPILETIME|5.007002||p
IN_LOCALE_RUNTIME|5.007002||p
IN_LOCALE|5.007002||p
IN_PERL_COMPILETIME|5.008001||p
IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
IS_NUMBER_INFINITY|5.007002||p
IS_NUMBER_IN_UV|5.007002||p
IS_NUMBER_NAN|5.007003||p
IS_NUMBER_NEG|5.007002||p
IS_NUMBER_NOT_INT|5.007002||p
IVSIZE|5.006000||p
IVTYPE|5.006000||p
IVdf|5.006000||p
LEAVE|||
LINKLIST||5.013006|
LVRET|||
MARK|||
MULTICALL||5.024000|
MUTABLE_PTR|5.010001||p
MUTABLE_SV|5.010001||p
MY_CXT_CLONE|5.009002||p
MY_CXT_INIT|5.007003||p
MY_CXT|5.007003||p
MoveD|5.009002|5.004050|p
Move|||
NATIVE_TO_NEED||5.007001|n
NOOP|5.005000||p
NUM2PTR|5.006000||p
NVTYPE|5.006000||p
NVef|5.006001||p
NVff|5.006001||p
NVgf|5.006001||p
Newxc|5.009003||p
Newxz|5.009003||p
Newx|5.009003||p
Nullav|||
Nullch|||
Nullcv|||
Nullhv|||
Nullsv|||
OP_CLASS||5.013007|
OP_DESC||5.007003|
OP_NAME||5.007003|
OP_TYPE_IS_OR_WAS||5.019010|
OP_TYPE_IS||5.019007|
ORIGMARK|||
OpHAS_SIBLING|5.021007||p
OpLASTSIB_set|5.021011||p
OpMAYBESIB_set|5.021011||p
OpMORESIB_set|5.021011||p
OpSIBLING|5.021007||p
PAD_BASE_SV|||
PAD_CLONE_VARS|||
PAD_COMPNAME_FLAGS|||
PAD_COMPNAME_GEN_set|||
PAD_COMPNAME_GEN|||
PAD_COMPNAME_OURSTASH|||
PAD_COMPNAME_PV|||
PAD_COMPNAME_TYPE|||
PAD_RESTORE_LOCAL|||
PAD_SAVE_LOCAL|||
PAD_SAVE_SETNULLPAD|||
PAD_SETSV|||
PAD_SET_CUR_NOSAVE|||
PAD_SET_CUR|||
PAD_SVl|||
PAD_SV|||
PERLIO_FUNCS_CAST|5.009003||p
PERLIO_FUNCS_DECL|5.009003||p
PERL_ABS|5.008001||p
PERL_BCDVERSION|5.024000||p
PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
PERL_HASH|5.003070||p
PERL_INT_MAX|5.003070||p
PERL_INT_MIN|5.003070||p
PERL_LONG_MAX|5.003070||p
PERL_LONG_MIN|5.003070||p
PERL_MAGIC_arylen|5.007002||p
PERL_MAGIC_backref|5.007002||p
PERL_MAGIC_bm|5.007002||p
PERL_MAGIC_collxfrm|5.007002||p
PERL_MAGIC_dbfile|5.007002||p
PERL_MAGIC_dbline|5.007002||p
PERL_MAGIC_defelem|5.007002||p
PERL_MAGIC_envelem|5.007002||p
PERL_MAGIC_env|5.007002||p
PERL_MAGIC_ext|5.007002||p
PERL_MAGIC_fm|5.007002||p
PERL_MAGIC_glob|5.024000||p
PERL_MAGIC_isaelem|5.007002||p
PERL_MAGIC_isa|5.007002||p
PERL_MAGIC_mutex|5.024000||p
PERL_MAGIC_nkeys|5.007002||p
PERL_MAGIC_overload_elem|5.024000||p
PERL_MAGIC_overload_table|5.007002||p
PERL_MAGIC_overload|5.024000||p
PERL_MAGIC_pos|5.007002||p
PERL_MAGIC_qr|5.007002||p
PERL_MAGIC_regdata|5.007002||p
PERL_MAGIC_regdatum|5.007002||p
PERL_MAGIC_regex_global|5.007002||p
PERL_MAGIC_shared_scalar|5.007003||p
PERL_MAGIC_shared|5.007003||p
PERL_MAGIC_sigelem|5.007002||p
PERL_MAGIC_sig|5.007002||p
PERL_MAGIC_substr|5.007002||p
PERL_MAGIC_sv|5.007002||p
PERL_MAGIC_taint|5.007002||p
PERL_MAGIC_tiedelem|5.007002||p
PERL_MAGIC_tiedscalar|5.007002||p
PERL_MAGIC_tied|5.007002||p
PERL_MAGIC_utf8|5.008001||p
PERL_MAGIC_uvar_elem|5.007003||p
PERL_MAGIC_uvar|5.007002||p
PERL_MAGIC_vec|5.007002||p
PERL_MAGIC_vstring|5.008001||p
PERL_PV_ESCAPE_ALL|5.009004||p
PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p
PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p
PERL_PV_ESCAPE_NOCLEAR|5.009004||p
PERL_PV_ESCAPE_QUOTE|5.009004||p
PERL_PV_ESCAPE_RE|5.009005||p
PERL_PV_ESCAPE_UNI_DETECT|5.009004||p
PERL_PV_ESCAPE_UNI|5.009004||p
PERL_PV_PRETTY_DUMP|5.009004||p
PERL_PV_PRETTY_ELLIPSES|5.010000||p
PERL_PV_PRETTY_LTGT|5.009004||p
PERL_PV_PRETTY_NOCLEAR|5.010000||p
PERL_PV_PRETTY_QUOTE|5.009004||p
PERL_PV_PRETTY_REGPROP|5.009004||p
PERL_QUAD_MAX|5.003070||p
PERL_QUAD_MIN|5.003070||p
PERL_REVISION|5.006000||p
PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
PERL_SCAN_DISALLOW_PREFIX|5.007003||p
PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
PERL_SHORT_MAX|5.003070||p
PERL_SHORT_MIN|5.003070||p
PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
PERL_SUBVERSION|5.006000||p
PERL_SYS_INIT3||5.006000|
PERL_SYS_INIT|||
PERL_SYS_TERM||5.024000|
PERL_UCHAR_MAX|5.003070||p
PERL_UCHAR_MIN|5.003070||p
PERL_UINT_MAX|5.003070||p
PERL_UINT_MIN|5.003070||p
PERL_ULONG_MAX|5.003070||p
PERL_ULONG_MIN|5.003070||p
PERL_UNUSED_ARG|5.009003||p
PERL_UNUSED_CONTEXT|5.009004||p
PERL_UNUSED_DECL|5.007002||p
PERL_UNUSED_RESULT|5.021001||p
PERL_UNUSED_VAR|5.007002||p
PERL_UQUAD_MAX|5.003070||p
PERL_UQUAD_MIN|5.003070||p
PERL_USE_GCC_BRACE_GROUPS|5.009004||p
PERL_USHORT_MAX|5.003070||p
PERL_USHORT_MIN|5.003070||p
PERL_VERSION|5.006000||p
PL_DBsignal|5.005000||p
PL_DBsingle|||pn
PL_DBsub|||pn
PL_DBtrace|||pn
PL_Sv|5.005000||p
PL_bufend|5.024000||p
PL_bufptr|5.024000||p
PL_check||5.006000|
PL_compiling|5.004050||p
PL_comppad_name||5.017004|
PL_comppad||5.008001|
PL_copline|5.024000||p
PL_curcop|5.004050||p
PL_curpad||5.005000|
PL_curstash|5.004050||p
PL_debstash|5.004050||p
PL_defgv|5.004050||p
PL_diehook|5.004050||p
PL_dirty|5.004050||p
PL_dowarn|||pn
PL_errgv|5.004050||p
PL_error_count|5.024000||p
PL_expect|5.024000||p
PL_hexdigit|5.005000||p
PL_hints|5.005000||p
PL_in_my_stash|5.024000||p
PL_in_my|5.024000||p
PL_keyword_plugin||5.011002|
PL_last_in_gv|||n
PL_laststatval|5.005000||p
PL_lex_state|5.024000||p
PL_lex_stuff|5.024000||p
PL_linestr|5.024000||p
PL_modglobal||5.005000|n
PL_na|5.004050||pn
PL_no_modify|5.006000||p
PL_ofsgv|||n
PL_opfreehook||5.011000|n
PL_parser|5.009005||p
PL_peepp||5.007003|n
PL_perl_destruct_level|5.004050||p
PL_perldb|5.004050||p
PL_ppaddr|5.006000||p
PL_rpeepp||5.013005|n
PL_rsfp_filters|5.024000||p
PL_rsfp|5.024000||p
PL_rs|||n
PL_signals|5.008001||p
PL_stack_base|5.004050||p
PL_stack_sp|5.004050||p
PL_statcache|5.005000||p
PL_stdingv|5.004050||p
PL_sv_arenaroot|5.004050||p
PL_sv_no|5.004050||pn
PL_sv_undef|5.004050||pn
PL_sv_yes|5.004050||pn
PL_tainted|5.004050||p
PL_tainting|5.004050||p
PL_tokenbuf|5.024000||p
POP_MULTICALL||5.024000|
POPi|||n
POPl|||n
POPn|||n
POPpbytex||5.007001|n
POPpx||5.005030|n
POPp|||n
POPs|||n
POPul||5.006000|n
POPu||5.004000|n
PTR2IV|5.006000||p
PTR2NV|5.006000||p
PTR2UV|5.006000||p
PTR2nat|5.009003||p
PTR2ul|5.007001||p
PTRV|5.006000||p
PUSHMARK|||
PUSH_MULTICALL||5.024000|
PUSHi|||
PUSHmortal|5.009002||p
PUSHn|||
PUSHp|||
PUSHs|||
PUSHu|5.004000||p
PUTBACK|||
PadARRAY||5.024000|
PadMAX||5.024000|
PadlistARRAY||5.024000|
PadlistMAX||5.024000|
PadlistNAMESARRAY||5.024000|
PadlistNAMESMAX||5.024000|
PadlistNAMES||5.024000|
PadlistREFCNT||5.017004|
PadnameIsOUR|||
PadnameIsSTATE|||
PadnameLEN||5.024000|
PadnameOURSTASH|||
PadnameOUTER|||
PadnamePV||5.024000|
PadnameREFCNT_dec||5.024000|
PadnameREFCNT||5.024000|
PadnameSV||5.024000|
PadnameTYPE|||
PadnameUTF8||5.021007|
PadnamelistARRAY||5.024000|
PadnamelistMAX||5.024000|
PadnamelistREFCNT_dec||5.024000|
PadnamelistREFCNT||5.024000|
PerlIO_clearerr||5.007003|
PerlIO_close||5.007003|
PerlIO_context_layers||5.009004|
PerlIO_eof||5.007003|
PerlIO_error||5.007003|
PerlIO_fileno||5.007003|
PerlIO_fill||5.007003|
PerlIO_flush||5.007003|
PerlIO_get_base||5.007003|
PerlIO_get_bufsiz||5.007003|
PerlIO_get_cnt||5.007003|
PerlIO_get_ptr||5.007003|
PerlIO_read||5.007003|
PerlIO_restore_errno|||
PerlIO_save_errno|||
PerlIO_seek||5.007003|
PerlIO_set_cnt||5.007003|
PerlIO_set_ptrcnt||5.007003|
PerlIO_setlinebuf||5.007003|
PerlIO_stderr||5.007003|
PerlIO_stdin||5.007003|
PerlIO_stdout||5.007003|
PerlIO_tell||5.007003|
PerlIO_unread||5.007003|
PerlIO_write||5.007003|
Perl_signbit||5.009005|n
PoisonFree|5.009004||p
PoisonNew|5.009004||p
PoisonWith|5.009004||p
Poison|5.008000||p
READ_XDIGIT||5.017006|
RESTORE_LC_NUMERIC||5.024000|
RETVAL|||n
Renewc|||
Renew|||
SAVECLEARSV|||
SAVECOMPPAD|||
SAVEPADSV|||
SAVETMPS|||
SAVE_DEFSV|5.004050||p
SPAGAIN|||
SP|||
START_EXTERN_C|5.005000||p
START_MY_CXT|5.007003||p
STMT_END|||p
STMT_START|||p
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING||5.024000|
STORE_LC_NUMERIC_SET_TO_NEEDED||5.024000|
STR_WITH_LEN|5.009003||p
ST|||
SV_CONST_RETURN|5.009003||p
SV_COW_DROP_PV|5.008001||p
SV_COW_SHARED_HASH_KEYS|5.009005||p
SV_GMAGIC|5.007002||p
SV_HAS_TRAILING_NUL|5.009004||p
SV_IMMEDIATE_UNREF|5.007001||p
SV_MUTABLE_RETURN|5.009003||p
SV_NOSTEAL|5.009002||p
SV_SMAGIC|5.009003||p
SV_UTF8_NO_ENCODING|5.008001||p
SVfARG|5.009005||p
SVf_UTF8|5.006000||p
SVf|5.006000||p
SVt_INVLIST||5.019002|
SVt_IV|||
SVt_NULL|||
SVt_NV|||
SVt_PVAV|||
SVt_PVCV|||
SVt_PVFM|||
SVt_PVGV|||
SVt_PVHV|||
SVt_PVIO|||
SVt_PVIV|||
SVt_PVLV|||
SVt_PVMG|||
SVt_PVNV|||
SVt_PV|||
SVt_REGEXP||5.011000|
Safefree|||
Slab_Alloc|||
Slab_Free|||
Slab_to_ro|||
Slab_to_rw|||
StructCopy|||
SvCUR_set|||
SvCUR|||
SvEND|||
SvGAMAGIC||5.006001|
SvGETMAGIC|5.004050||p
SvGROW|||
SvIOK_UV||5.006000|
SvIOK_notUV||5.006000|
SvIOK_off|||
SvIOK_only_UV||5.006000|
SvIOK_only|||
SvIOK_on|||
SvIOKp|||
SvIOK|||
SvIVX|||
SvIV_nomg|5.009001||p
SvIV_set|||
SvIVx|||
SvIV|||
SvIsCOW_shared_hash||5.008003|
SvIsCOW||5.008003|
SvLEN_set|||
SvLEN|||
SvLOCK||5.007003|
SvMAGIC_set|5.009003||p
SvNIOK_off|||
SvNIOKp|||
SvNIOK|||
SvNOK_off|||
SvNOK_only|||
SvNOK_on|||
SvNOKp|||
SvNOK|||
SvNVX|||
SvNV_nomg||5.013002|
SvNV_set|||
SvNVx|||
SvNV|||
SvOK|||
SvOOK_offset||5.011000|
SvOOK|||
SvPOK_off|||
SvPOK_only_UTF8||5.006000|
SvPOK_only|||
SvPOK_on|||
SvPOKp|||
SvPOK|||
SvPVX_const|5.009003||p
SvPVX_mutable|5.009003||p
SvPVX|||
SvPV_const|5.009003||p
SvPV_flags_const_nolen|5.009003||p
SvPV_flags_const|5.009003||p
SvPV_flags_mutable|5.009003||p
SvPV_flags|5.007002||p
SvPV_force_flags_mutable|5.009003||p
SvPV_force_flags_nolen|5.009003||p
SvPV_force_flags|5.007002||p
SvPV_force_mutable|5.009003||p
SvPV_force_nolen|5.009003||p
SvPV_force_nomg_nolen|5.009003||p
SvPV_force_nomg|5.007002||p
SvPV_force|||p
SvPV_mutable|5.009003||p
SvPV_nolen_const|5.009003||p
SvPV_nolen|5.006000||p
SvPV_nomg_const_nolen|5.009003||p
SvPV_nomg_const|5.009003||p
SvPV_nomg_nolen|5.013007||p
SvPV_nomg|5.007002||p
SvPV_renew|5.009003||p
SvPV_set|||
SvPVbyte_force||5.009002|
SvPVbyte_nolen||5.006000|
SvPVbytex_force||5.006000|
SvPVbytex||5.006000|
SvPVbyte|5.006000||p
SvPVutf8_force||5.006000|
SvPVutf8_nolen||5.006000|
SvPVutf8x_force||5.006000|
SvPVutf8x||5.006000|
SvPVutf8||5.006000|
SvPVx|||
SvPV|||
SvREFCNT_dec_NN||5.017007|
SvREFCNT_dec|||
SvREFCNT_inc_NN|5.009004||p
SvREFCNT_inc_simple_NN|5.009004||p
SvREFCNT_inc_simple_void_NN|5.009004||p
SvREFCNT_inc_simple_void|5.009004||p
SvREFCNT_inc_simple|5.009004||p
SvREFCNT_inc_void_NN|5.009004||p
SvREFCNT_inc_void|5.009004||p
SvREFCNT_inc|||p
SvREFCNT|||
SvROK_off|||
SvROK_on|||
SvROK|||
SvRV_set|5.009003||p
SvRV|||
SvRXOK|5.009005||p
SvRX|5.009005||p
SvSETMAGIC|||
SvSHARED_HASH|5.009003||p
SvSHARE||5.007003|
SvSTASH_set|5.009003||p
SvSTASH|||
SvSetMagicSV_nosteal||5.004000|
SvSetMagicSV||5.004000|
SvSetSV_nosteal||5.004000|
SvSetSV|||
SvTAINTED_off||5.004000|
SvTAINTED_on||5.004000|
SvTAINTED||5.004000|
SvTAINT|||
SvTHINKFIRST|||
SvTRUE_nomg||5.013006|
SvTRUE|||
SvTYPE|||
SvUNLOCK||5.007003|
SvUOK|5.007001|5.006000|p
SvUPGRADE|||
SvUTF8_off||5.006000|
SvUTF8_on||5.006000|
SvUTF8||5.006000|
SvUVXx|5.004000||p
SvUVX|5.004000||p
SvUV_nomg|5.009001||p
SvUV_set|5.009003||p
SvUVx|5.004000||p
SvUV|5.004000||p
SvVOK||5.008001|
SvVSTRING_mg|5.009004||p
THIS|||n
UNDERBAR|5.009002||p
UTF8SKIP||5.006000|
UTF8_MAXBYTES|5.009002||p
UVCHR_SKIP||5.022000|
UVSIZE|5.006000||p
UVTYPE|5.006000||p
UVXf|5.007001||p
UVof|5.006000||p
UVuf|5.006000||p
UVxf|5.006000||p
WARN_ALL|5.006000||p
WARN_AMBIGUOUS|5.006000||p
WARN_ASSERTIONS|5.024000||p
WARN_BAREWORD|5.006000||p
WARN_CLOSED|5.006000||p
WARN_CLOSURE|5.006000||p
WARN_DEBUGGING|5.006000||p
WARN_DEPRECATED|5.006000||p
WARN_DIGIT|5.006000||p
WARN_EXEC|5.006000||p
WARN_EXITING|5.006000||p
WARN_GLOB|5.006000||p
WARN_INPLACE|5.006000||p
WARN_INTERNAL|5.006000||p
WARN_IO|5.006000||p
WARN_LAYER|5.008000||p
WARN_MALLOC|5.006000||p
WARN_MISC|5.006000||p
WARN_NEWLINE|5.006000||p
WARN_NUMERIC|5.006000||p
WARN_ONCE|5.006000||p
WARN_OVERFLOW|5.006000||p
WARN_PACK|5.006000||p
WARN_PARENTHESIS|5.006000||p
WARN_PIPE|5.006000||p
WARN_PORTABLE|5.006000||p
WARN_PRECEDENCE|5.006000||p
WARN_PRINTF|5.006000||p
WARN_PROTOTYPE|5.006000||p
WARN_QW|5.006000||p
WARN_RECURSION|5.006000||p
WARN_REDEFINE|5.006000||p
WARN_REGEXP|5.006000||p
WARN_RESERVED|5.006000||p
WARN_SEMICOLON|5.006000||p
WARN_SEVERE|5.006000||p
WARN_SIGNAL|5.006000||p
WARN_SUBSTR|5.006000||p
WARN_SYNTAX|5.006000||p
WARN_TAINT|5.006000||p
WARN_THREADS|5.008000||p
WARN_UNINITIALIZED|5.006000||p
WARN_UNOPENED|5.006000||p
WARN_UNPACK|5.006000||p
WARN_UNTIE|5.006000||p
WARN_UTF8|5.006000||p
WARN_VOID|5.006000||p
WIDEST_UTYPE|5.015004||p
XCPT_CATCH|5.009002||p
XCPT_RETHROW|5.009002||p
XCPT_TRY_END|5.009002||p
XCPT_TRY_START|5.009002||p
XPUSHi|||
XPUSHmortal|5.009002||p
XPUSHn|||
XPUSHp|||
XPUSHs|||
XPUSHu|5.004000||p
XSPROTO|5.010000||p
XSRETURN_EMPTY|||
XSRETURN_IV|||
XSRETURN_NO|||
XSRETURN_NV|||
XSRETURN_PV|||
XSRETURN_UNDEF|||
XSRETURN_UV|5.008001||p
XSRETURN_YES|||
XSRETURN|||p
XST_mIV|||
XST_mNO|||
XST_mNV|||
XST_mPV|||
XST_mUNDEF|||
XST_mUV|5.008001||p
XST_mYES|||
XS_APIVERSION_BOOTCHECK||5.024000|
XS_EXTERNAL||5.024000|
XS_INTERNAL||5.024000|
XS_VERSION_BOOTCHECK||5.024000|
XS_VERSION|||
XSprePUSH|5.006000||p
XS|||
XopDISABLE||5.024000|
XopENABLE||5.024000|
XopENTRYCUSTOM||5.024000|
XopENTRY_set||5.024000|
XopENTRY||5.024000|
XopFLAGS||5.013007|
ZeroD|5.009002||p
Zero|||
_aMY_CXT|5.007003||p
_add_range_to_invlist|||
_append_range_to_invlist|||
_core_swash_init|||
_get_encoding|||
_get_regclass_nonbitmap_data|||
_get_swash_invlist|||
_invlistEQ|||
_invlist_array_init|||n
_invlist_contains_cp|||n
_invlist_dump|||
_invlist_intersection_maybe_complement_2nd|||
_invlist_intersection|||
_invlist_invert|||
_invlist_len|||n
_invlist_populate_swatch|||n
_invlist_search|||n
_invlist_subtract|||
_invlist_union_maybe_complement_2nd|||
_invlist_union|||
_is_cur_LC_category_utf8|||
_is_in_locale_category||5.021001|
_is_uni_FOO||5.017008|
_is_uni_perl_idcont||5.017008|
_is_uni_perl_idstart||5.017007|
_is_utf8_FOO||5.017008|
_is_utf8_char_slow||5.021001|n
_is_utf8_idcont||5.021001|
_is_utf8_idstart||5.021001|
_is_utf8_mark||5.017008|
_is_utf8_perl_idcont||5.017008|
_is_utf8_perl_idstart||5.017007|
_is_utf8_xidcont||5.021001|
_is_utf8_xidstart||5.021001|
_load_PL_utf8_foldclosures|||
_make_exactf_invlist|||
_new_invlist_C_array|||
_new_invlist|||
_pMY_CXT|5.007003||p
_setlocale_debug_string|||n
_setup_canned_invlist|||
_swash_inversion_hash|||
_swash_to_invlist|||
_to_fold_latin1|||
_to_uni_fold_flags||5.014000|
_to_upper_title_latin1|||
_to_utf8_case|||
_to_utf8_fold_flags||5.019009|
_to_utf8_lower_flags||5.019009|
_to_utf8_title_flags||5.019009|
_to_utf8_upper_flags||5.019009|
_warn_problematic_locale|||n
aMY_CXT_|5.007003||p
aMY_CXT|5.007003||p
aTHXR_|5.024000||p
aTHXR|5.024000||p
aTHX_|5.006000||p
aTHX|5.006000||p
add_above_Latin1_folds|||
add_cp_to_invlist|||
add_data|||n
add_multi_match|||
add_utf16_textfilter|||
adjust_size_and_find_bucket|||n
advance_one_LB|||
advance_one_SB|||
advance_one_WB|||
alloc_maybe_populate_EXACT|||
alloccopstash|||
allocmy|||
amagic_call|||
amagic_cmp_locale|||
amagic_cmp|||
amagic_deref_call||5.013007|
amagic_i_ncmp|||
amagic_is_enabled|||
amagic_ncmp|||
anonymise_cv_maybe|||
any_dup|||
ao|||
append_utf8_from_native_byte||5.019004|n
apply_attrs_my|||
apply_attrs_string||5.006001|
apply_attrs|||
apply|||
assert_uft8_cache_coherent|||
assignment_type|||
atfork_lock||5.007003|n
atfork_unlock||5.007003|n
av_arylen_p||5.009003|
av_clear|||
av_create_and_push||5.009005|
av_create_and_unshift_one||5.009005|
av_delete||5.006000|
av_exists||5.006000|
av_extend_guts|||
av_extend|||
av_fetch|||
av_fill|||
av_iter_p||5.011000|
av_len|||
av_make|||
av_pop|||
av_push|||
av_reify|||
av_shift|||
av_store|||
av_tindex||5.017009|
av_top_index||5.017009|
av_undef|||
av_unshift|||
ax|||n
backup_one_LB|||
backup_one_SB|||
backup_one_WB|||
bad_type_gv|||
bad_type_pv|||
bind_match|||
block_end||5.004000|
block_gimme||5.004000|
block_start||5.004000|
blockhook_register||5.013003|
boolSV|5.004000||p
boot_core_PerlIO|||
boot_core_UNIVERSAL|||
boot_core_mro|||
bytes_cmp_utf8||5.013007|
bytes_from_utf8||5.007001|
bytes_to_utf8||5.006001|
cBOOL|5.013000||p
call_argv|5.006000||p
call_atexit||5.006000|
call_list||5.004000|
call_method|5.006000||p
call_pv|5.006000||p
call_sv|5.006000||p
caller_cx|5.013005|5.006000|p
calloc||5.007002|n
cando|||
cast_i32||5.006000|n
cast_iv||5.006000|n
cast_ulong||5.006000|n
cast_uv||5.006000|n
check_locale_boundary_crossing|||
check_type_and_open|||
check_uni|||
check_utf8_print|||
checkcomma|||
ckWARN|5.006000||p
ck_entersub_args_core|||
ck_entersub_args_list||5.013006|
ck_entersub_args_proto_or_list||5.013006|
ck_entersub_args_proto||5.013006|
ck_warner_d||5.011001|v
ck_warner||5.011001|v
ckwarn_common|||
ckwarn_d||5.009003|
ckwarn||5.009003|
clear_defarray||5.023008|
clear_placeholders|||
clear_special_blocks|||
clone_params_del|||n
clone_params_new|||n
closest_cop|||
cntrl_to_mnemonic|||n
compute_EXACTish|||n
construct_ahocorasick_from_trie|||
cop_fetch_label||5.015001|
cop_free|||
cop_hints_2hv||5.013007|
cop_hints_fetch_pvn||5.013007|
cop_hints_fetch_pvs||5.013007|
cop_hints_fetch_pv||5.013007|
cop_hints_fetch_sv||5.013007|
cop_store_label||5.015001|
cophh_2hv||5.013007|
cophh_copy||5.013007|
cophh_delete_pvn||5.013007|
cophh_delete_pvs||5.013007|
cophh_delete_pv||5.013007|
cophh_delete_sv||5.013007|
cophh_fetch_pvn||5.013007|
cophh_fetch_pvs||5.013007|
cophh_fetch_pv||5.013007|
cophh_fetch_sv||5.013007|
cophh_free||5.013007|
cophh_new_empty||5.024000|
cophh_store_pvn||5.013007|
cophh_store_pvs||5.013007|
cophh_store_pv||5.013007|
cophh_store_sv||5.013007|
core_prototype|||
coresub_op|||
cr_textfilter|||
create_eval_scope|||
croak_memory_wrap||5.019003|n
croak_no_mem|||n
croak_no_modify||5.013003|n
croak_nocontext|||vn
croak_popstack|||n
croak_sv||5.013001|
croak_xs_usage||5.010001|n
croak|||v
csighandler||5.009003|n
current_re_engine|||
curse|||
custom_op_desc||5.007003|
custom_op_get_field|||
custom_op_name||5.007003|
custom_op_register||5.013007|
custom_op_xop||5.013007|
cv_ckproto_len_flags|||
cv_clone_into|||
cv_clone|||
cv_const_sv_or_av|||n
cv_const_sv||5.003070|n
cv_dump|||
cv_forget_slab|||
cv_get_call_checker||5.013006|
cv_name||5.021005|
cv_set_call_checker_flags||5.021004|
cv_set_call_checker||5.013006|
cv_undef_flags|||
cv_undef|||
cvgv_from_hek|||
cvgv_set|||
cvstash_set|||
cx_dump||5.005000|
cx_dup|||
cx_popblock||5.023008|
cx_popeval||5.023008|
cx_popformat||5.023008|
cx_popgiven||5.023008|
cx_poploop||5.023008|
cx_popsub_args||5.023008|
cx_popsub_common||5.023008|
cx_popsub||5.023008|
cx_popwhen||5.023008|
cx_pushblock||5.023008|
cx_pusheval||5.023008|
cx_pushformat||5.023008|
cx_pushgiven||5.023008|
cx_pushloop_for||5.023008|
cx_pushloop_plain||5.023008|
cx_pushsub||5.023008|
cx_pushwhen||5.023008|
cx_topblock||5.023008|
cxinc|||
dAXMARK|5.009003||p
dAX|5.007002||p
dITEMS|5.007002||p
dMARK|||
dMULTICALL||5.009003|
dMY_CXT_SV|5.007003||p
dMY_CXT|5.007003||p
dNOOP|5.006000||p
dORIGMARK|||
dSP|||
dTHR|5.004050||p
dTHXR|5.024000||p
dTHXa|5.006000||p
dTHXoa|5.006000||p
dTHX|5.006000||p
dUNDERBAR|5.009002||p
dVAR|5.009003||p
dXCPT|5.009002||p
dXSARGS|||
dXSI32|||
dXSTARG|5.006000||p
deb_curcv|||
deb_nocontext|||vn
deb_stack_all|||
deb_stack_n|||
debop||5.005000|
debprofdump||5.005000|
debprof|||
debstackptrs||5.007003|
debstack||5.007003|
debug_start_match|||
deb||5.007003|v
defelem_target|||
del_sv|||
delete_eval_scope|||
delimcpy||5.004000|n
deprecate_commaless_var_list|||
despatch_signals||5.007001|
destroy_matcher|||
die_nocontext|||vn
die_sv||5.013001|
die_unwind|||
die|||v
dirp_dup|||
div128|||
djSP|||
do_aexec5|||
do_aexec|||
do_aspawn|||
do_binmode||5.004050|
do_chomp|||
do_close|||
do_delete_local|||
do_dump_pad|||
do_eof|||
do_exec3|||
do_execfree|||
do_exec|||
do_gv_dump||5.006000|
do_gvgv_dump||5.006000|
do_hv_dump||5.006000|
do_ipcctl|||
do_ipcget|||
do_join|||
do_magic_dump||5.006000|
do_msgrcv|||
do_msgsnd|||
do_ncmp|||
do_oddball|||
do_op_dump||5.006000|
do_open6|||
do_open9||5.006000|
do_open_raw|||
do_openn||5.007001|
do_open||5.003070|
do_pmop_dump||5.006000|
do_print|||
do_readline|||
do_seek|||
do_semop|||
do_shmio|||
do_smartmatch|||
do_spawn_nowait|||
do_spawn|||
do_sprintf|||
do_sv_dump||5.006000|
do_sysseek|||
do_tell|||
do_trans_complex_utf8|||
do_trans_complex|||
do_trans_count_utf8|||
do_trans_count|||
do_trans_simple_utf8|||
do_trans_simple|||
do_trans|||
do_vecget|||
do_vecset|||
do_vop|||
docatch|||
doeval_compile|||
dofile|||
dofindlabel|||
doform|||
doing_taint||5.008001|n
dooneliner|||
doopen_pm|||
doparseform|||
dopoptoeval|||
dopoptogivenfor|||
dopoptolabel|||
dopoptoloop|||
dopoptosub_at|||
dopoptowhen|||
doref||5.009003|
dounwind|||
dowantarray|||
drand48_init_r|||n
drand48_r|||n
dtrace_probe_call|||
dtrace_probe_load|||
dtrace_probe_op|||
dtrace_probe_phase|||
dump_all_perl|||
dump_all||5.006000|
dump_c_backtrace|||
dump_eval||5.006000|
dump_exec_pos|||
dump_form||5.006000|
dump_indent||5.006000|v
dump_mstats|||
dump_packsubs_perl|||
dump_packsubs||5.006000|
dump_sub_perl|||
dump_sub||5.006000|
dump_sv_child|||
dump_trie_interim_list|||
dump_trie_interim_table|||
dump_trie|||
dump_vindent||5.006000|
dumpuntil|||
dup_attrlist|||
edit_distance|||n
emulate_cop_io|||
eval_pv|5.006000||p
eval_sv|5.006000||p
exec_failed|||
expect_number|||
fbm_compile||5.005000|
fbm_instr||5.005000|
feature_is_enabled|||
filter_add|||
filter_del|||
filter_gets|||
filter_read|||
finalize_optree|||
finalize_op|||
find_and_forget_pmops|||
find_array_subscript|||
find_beginning|||
find_byclass|||
find_default_stash|||
find_hash_subscript|||
find_in_my_stash|||
find_lexical_cv|||
find_runcv_where|||
find_runcv||5.008001|
find_rundefsvoffset||5.009002|
find_rundefsv||5.013002|
find_script|||
find_uninit_var|||
first_symbol|||n
fixup_errno_string|||
foldEQ_latin1||5.013008|n
foldEQ_locale||5.013002|n
foldEQ_utf8_flags||5.013010|
foldEQ_utf8||5.013002|
foldEQ||5.013002|n
fold_constants|||
forbid_setid|||
force_ident_maybe_lex|||
force_ident|||
force_list|||
force_next|||
force_strict_version|||
force_version|||
force_word|||
forget_pmop|||
form_nocontext|||vn
form_short_octal_warning|||
form||5.004000|v
fp_dup|||
fprintf_nocontext|||vn
free_c_backtrace|||
free_global_struct|||
free_tied_hv_pool|||
free_tmps|||
gen_constant_list|||
get_ANYOF_cp_list_for_ssc|||
get_and_check_backslash_N_name|||
get_aux_mg|||
get_av|5.006000||p
get_c_backtrace_dump|||
get_c_backtrace|||
get_context||5.006000|n
get_cvn_flags|||
get_cvs|5.011000||p
get_cv|5.006000||p
get_db_sub|||
get_debug_opts|||
get_hash_seed|||
get_hv|5.006000||p
get_invlist_iter_addr|||n
get_invlist_offset_addr|||n
get_invlist_previous_index_addr|||n
get_mstats|||
get_no_modify|||
get_num|||
get_op_descs||5.005000|
get_op_names||5.005000|
get_opargs|||
get_ppaddr||5.006000|
get_re_arg|||
get_sv|5.006000||p
get_vtbl||5.005030|
getcwd_sv||5.007002|
getenv_len|||
glob_2number|||
glob_assign_glob|||
gp_dup|||
gp_free|||
gp_ref|||
grok_atoUV|||n
grok_bin|5.007003||p
grok_bslash_N|||
grok_bslash_c|||
grok_bslash_o|||
grok_bslash_x|||
grok_hex|5.007003||p
grok_infnan||5.021004|
grok_number_flags||5.021002|
grok_number|5.007002||p
grok_numeric_radix|5.007002||p
grok_oct|5.007003||p
group_end|||
gv_AVadd|||
gv_HVadd|||
gv_IOadd|||
gv_SVadd|||
gv_add_by_type||5.011000|
gv_autoload4||5.004000|
gv_autoload_pvn||5.015004|
gv_autoload_pv||5.015004|
gv_autoload_sv||5.015004|
gv_check|||
gv_const_sv||5.009003|
gv_dump||5.006000|
gv_efullname3||5.003070|
gv_efullname4||5.006001|
gv_efullname|||
gv_fetchfile_flags||5.009005|
gv_fetchfile|||
gv_fetchmeth_autoload||5.007003|
gv_fetchmeth_internal|||
gv_fetchmeth_pv_autoload||5.015004|
gv_fetchmeth_pvn_autoload||5.015004|
gv_fetchmeth_pvn||5.015004|
gv_fetchmeth_pv||5.015004|
gv_fetchmeth_sv_autoload||5.015004|
gv_fetchmeth_sv||5.015004|
gv_fetchmethod_autoload||5.004000|
gv_fetchmethod_pv_flags||5.015004|
gv_fetchmethod_pvn_flags||5.015004|
gv_fetchmethod_sv_flags||5.015004|
gv_fetchmethod|||
gv_fetchmeth|||
gv_fetchpvn_flags|5.009002||p
gv_fetchpvs|5.009004||p
gv_fetchpv|||
gv_fetchsv|||
gv_fullname3||5.003070|
gv_fullname4||5.006001|
gv_fullname|||
gv_handler||5.007001|
gv_init_pvn|||
gv_init_pv||5.015004|
gv_init_svtype|||
gv_init_sv||5.015004|
gv_init|||
gv_is_in_main|||
gv_magicalize_isa|||
gv_magicalize|||
gv_name_set||5.009004|
gv_override|||
gv_setref|||
gv_stashpvn_internal|||
gv_stashpvn|5.003070||p
gv_stashpvs|5.009003||p
gv_stashpv|||
gv_stashsvpvn_cached|||
gv_stashsv|||
gv_try_downgrade|||
handle_named_backref|||
handle_possible_posix|||
handle_regex_sets|||
he_dup|||
hek_dup|||
hfree_next_entry|||
hfreeentries|||
hsplit|||
hv_assert|||
hv_auxinit_internal|||n
hv_auxinit|||
hv_backreferences_p|||
hv_clear_placeholders||5.009001|
hv_clear|||
hv_common_key_len||5.010000|
hv_common||5.010000|
hv_copy_hints_hv||5.009004|
hv_delayfree_ent||5.004000|
hv_delete_common|||
hv_delete_ent||5.003070|
hv_delete|||
hv_eiter_p||5.009003|
hv_eiter_set||5.009003|
hv_ename_add|||
hv_ename_delete|||
hv_exists_ent||5.003070|
hv_exists|||
hv_fetch_ent||5.003070|
hv_fetchs|5.009003||p
hv_fetch|||
hv_fill||5.013002|
hv_free_ent_ret|||
hv_free_ent||5.004000|
hv_iterinit|||
hv_iterkeysv||5.003070|
hv_iterkey|||
hv_iternext_flags||5.008000|
hv_iternextsv|||
hv_iternext|||
hv_iterval|||
hv_kill_backrefs|||
hv_ksplit||5.003070|
hv_magic_check|||n
hv_magic|||
hv_name_set||5.009003|
hv_notallowed|||
hv_placeholders_get||5.009003|
hv_placeholders_p|||
hv_placeholders_set||5.009003|
hv_rand_set||5.018000|
hv_riter_p||5.009003|
hv_riter_set||5.009003|
hv_scalar||5.009001|
hv_store_ent||5.003070|
hv_store_flags||5.008000|
hv_stores|5.009004||p
hv_store|||
hv_undef_flags|||
hv_undef|||
ibcmp_locale||5.004000|
ibcmp_utf8||5.007003|
ibcmp|||
incline|||
incpush_if_exists|||
incpush_use_sep|||
incpush|||
ingroup|||
init_argv_symbols|||
init_constants|||
init_dbargs|||
init_debugger|||
init_global_struct|||
init_i18nl10n||5.006000|
init_i18nl14n||5.006000|
init_ids|||
init_interp|||
init_main_stash|||
init_perllib|||
init_postdump_symbols|||
init_predump_symbols|||
init_stacks||5.005000|
init_tm||5.007002|
inplace_aassign|||
instr|||n
intro_my||5.004000|
intuit_method|||
intuit_more|||
invert|||
invlist_array|||n
invlist_clear|||
invlist_clone|||
invlist_contents|||
invlist_extend|||
invlist_highest|||n
invlist_is_iterating|||n
invlist_iterfinish|||n
invlist_iterinit|||n
invlist_iternext|||n
invlist_max|||n
invlist_previous_index|||n
invlist_replace_list_destroys_src|||
invlist_set_len|||
invlist_set_previous_index|||n
invlist_trim|||n
invoke_exception_hook|||
io_close|||
isALNUMC|5.006000||p
isALNUM_lazy||5.021001|
isALPHANUMERIC||5.017008|
isALPHA|||
isASCII|5.006000||p
isBLANK|5.006001||p
isCNTRL|5.006000||p
isDIGIT|||
isFOO_lc|||
isFOO_utf8_lc|||
isGCB|||n
isGRAPH|5.006000||p
isIDCONT||5.017008|
isIDFIRST_lazy||5.021001|
isIDFIRST|||
isLB|||
isLOWER|||
isOCTAL||5.013005|
isPRINT|5.004000||p
isPSXSPC|5.006001||p
isPUNCT|5.006000||p
isSB|||
isSPACE|||
isUPPER|||
isUTF8_CHAR||5.021001|
isWB|||
isWORDCHAR||5.013006|
isXDIGIT|5.006000||p
is_an_int|||
is_ascii_string||5.011000|
is_handle_constructor|||n
is_invariant_string||5.021007|n
is_lvalue_sub||5.007001|
is_safe_syscall||5.019004|
is_ssc_worth_it|||n
is_uni_alnum_lc||5.006000|
is_uni_alnumc_lc||5.017007|
is_uni_alnumc||5.017007|
is_uni_alnum||5.006000|
is_uni_alpha_lc||5.006000|
is_uni_alpha||5.006000|
is_uni_ascii_lc||5.006000|
is_uni_ascii||5.006000|
is_uni_blank_lc||5.017002|
is_uni_blank||5.017002|
is_uni_cntrl_lc||5.006000|
is_uni_cntrl||5.006000|
is_uni_digit_lc||5.006000|
is_uni_digit||5.006000|
is_uni_graph_lc||5.006000|
is_uni_graph||5.006000|
is_uni_idfirst_lc||5.006000|
is_uni_idfirst||5.006000|
is_uni_lower_lc||5.006000|
is_uni_lower||5.006000|
is_uni_print_lc||5.006000|
is_uni_print||5.006000|
is_uni_punct_lc||5.006000|
is_uni_punct||5.006000|
is_uni_space_lc||5.006000|
is_uni_space||5.006000|
is_uni_upper_lc||5.006000|
is_uni_upper||5.006000|
is_uni_xdigit_lc||5.006000|
is_uni_xdigit||5.006000|
is_utf8_alnumc||5.017007|
is_utf8_alnum||5.006000|
is_utf8_alpha||5.006000|
is_utf8_ascii||5.006000|
is_utf8_blank||5.017002|
is_utf8_char_buf||5.015008|n
is_utf8_char||5.006000|n
is_utf8_cntrl||5.006000|
is_utf8_common|||
is_utf8_digit||5.006000|
is_utf8_graph||5.006000|
is_utf8_idcont||5.008000|
is_utf8_idfirst||5.006000|
is_utf8_lower||5.006000|
is_utf8_mark||5.006000|
is_utf8_perl_space||5.011001|
is_utf8_perl_word||5.011001|
is_utf8_posix_digit||5.011001|
is_utf8_print||5.006000|
is_utf8_punct||5.006000|
is_utf8_space||5.006000|
is_utf8_string_loclen||5.009003|n
is_utf8_string_loc||5.008001|n
is_utf8_string||5.006001|n
is_utf8_upper||5.006000|
is_utf8_xdigit||5.006000|
is_utf8_xidcont||5.013010|
is_utf8_xidfirst||5.013010|
isa_lookup|||
isinfnansv|||
isinfnan||5.021004|n
items|||n
ix|||n
jmaybe|||
join_exact|||
keyword_plugin_standard|||
keyword|||
leave_adjust_stacks||5.023008|
leave_scope|||
lex_bufutf8||5.011002|
lex_discard_to||5.011002|
lex_grow_linestr||5.011002|
lex_next_chunk||5.011002|
lex_peek_unichar||5.011002|
lex_read_space||5.011002|
lex_read_to||5.011002|
lex_read_unichar||5.011002|
lex_start||5.009005|
lex_stuff_pvn||5.011002|
lex_stuff_pvs||5.013005|
lex_stuff_pv||5.013006|
lex_stuff_sv||5.011002|
lex_unstuff||5.011002|
listkids|||
list|||
load_module_nocontext|||vn
load_module|5.006000||pv
localize|||
looks_like_bool|||
looks_like_number|||
lop|||
mPUSHi|5.009002||p
mPUSHn|5.009002||p
mPUSHp|5.009002||p
mPUSHs|5.010001||p
mPUSHu|5.009002||p
mXPUSHi|5.009002||p
mXPUSHn|5.009002||p
mXPUSHp|5.009002||p
mXPUSHs|5.010001||p
mXPUSHu|5.009002||p
magic_clear_all_env|||
magic_cleararylen_p|||
magic_clearenv|||
magic_clearhints|||
magic_clearhint|||
magic_clearisa|||
magic_clearpack|||
magic_clearsig|||
magic_copycallchecker|||
magic_dump||5.006000|
magic_existspack|||
magic_freearylen_p|||
magic_freeovrld|||
magic_getarylen|||
magic_getdebugvar|||
magic_getdefelem|||
magic_getnkeys|||
magic_getpack|||
magic_getpos|||
magic_getsig|||
magic_getsubstr|||
magic_gettaint|||
magic_getuvar|||
magic_getvec|||
magic_get|||
magic_killbackrefs|||
magic_methcall1|||
magic_methcall|||v
magic_methpack|||
magic_nextpack|||
magic_regdata_cnt|||
magic_regdatum_get|||
magic_regdatum_set|||
magic_scalarpack|||
magic_set_all_env|||
magic_setarylen|||
magic_setcollxfrm|||
magic_setdbline|||
magic_setdebugvar|||
magic_setdefelem|||
magic_setenv|||
magic_sethint|||
magic_setisa|||
magic_setlvref|||
magic_setmglob|||
magic_setnkeys|||
magic_setpack|||
magic_setpos|||
magic_setregexp|||
magic_setsig|||
magic_setsubstr|||
magic_settaint|||
magic_setutf8|||
magic_setuvar|||
magic_setvec|||
magic_set|||
magic_sizepack|||
magic_wipepack|||
make_matcher|||
make_trie|||
malloc_good_size|||n
malloced_size|||n
malloc||5.007002|n
markstack_grow||5.021001|
matcher_matches_sv|||
maybe_multimagic_gv|||
mayberelocate|||
measure_struct|||
memEQs|5.009005||p
memEQ|5.004000||p
memNEs|5.009005||p
memNE|5.004000||p
mem_collxfrm|||
mem_log_alloc|||n
mem_log_common|||n
mem_log_free|||n
mem_log_realloc|||n
mess_alloc|||
mess_nocontext|||vn
mess_sv||5.013001|
mess||5.006000|v
mfree||5.007002|n
mg_clear|||
mg_copy|||
mg_dup|||
mg_find_mglob|||
mg_findext|5.013008||pn
mg_find|||n
mg_free_type||5.013006|
mg_free|||
mg_get|||
mg_length||5.005000|
mg_localize|||
mg_magical|||n
mg_set|||
mg_size||5.005000|
mini_mktime||5.007002|n
minus_v|||
missingterm|||
mode_from_discipline|||
modkids|||
more_bodies|||
more_sv|||
moreswitches|||
move_proto_attr|||
mro_clean_isarev|||
mro_gather_and_rename|||
mro_get_from_name||5.010001|
mro_get_linear_isa_dfs|||
mro_get_linear_isa||5.009005|
mro_get_private_data||5.010001|
mro_isa_changed_in|||
mro_meta_dup|||
mro_meta_init|||
mro_method_changed_in||5.009005|
mro_package_moved|||
mro_register||5.010001|
mro_set_mro||5.010001|
mro_set_private_data||5.010001|
mul128|||
mulexp10|||n
multideref_stringify|||
my_atof2||5.007002|
my_atof||5.006000|
my_attrs|||
my_bcopy||5.004050|n
my_bytes_to_utf8|||n
my_bzero|||n
my_chsize|||
my_clearenv|||
my_cxt_index|||
my_cxt_init|||
my_dirfd||5.009005|n
my_exit_jump|||
my_exit|||
my_failure_exit||5.004000|
my_fflush_all||5.006000|
my_fork||5.007003|n
my_kid|||
my_lstat_flags|||
my_lstat||5.024000|
my_memcmp|||n
my_memset|||n
my_pclose||5.003070|
my_popen_list||5.007001|
my_popen||5.003070|
my_setenv|||
my_setlocale|||
my_snprintf|5.009004||pvn
my_socketpair||5.007003|n
my_sprintf|5.009003||pvn
my_stat_flags|||
my_stat||5.024000|
my_strerror||5.021001|
my_strftime||5.007002|
my_strlcat|5.009004||pn
my_strlcpy|5.009004||pn
my_unexec|||
my_vsnprintf||5.009004|n
need_utf8|||n
newANONATTRSUB||5.006000|
newANONHASH|||
newANONLIST|||
newANONSUB|||
newASSIGNOP|||
newATTRSUB_x|||
newATTRSUB||5.006000|
newAVREF|||
newAV|||
newBINOP|||
newCONDOP|||
newCONSTSUB_flags||5.015006|
newCONSTSUB|5.004050||p
newCVREF|||
newDEFSVOP||5.021006|
newFORM|||
newFOROP||5.013007|
newGIVENOP||5.009003|
newGIVWHENOP|||
newGP|||
newGVOP|||
newGVREF|||
newGVgen_flags||5.015004|
newGVgen|||
newHVREF|||
newHVhv||5.005000|
newHV|||
newIO|||
newLISTOP|||
newLOGOP|||
newLOOPEX|||
newLOOPOP|||
newMETHOP_internal|||
newMETHOP_named||5.021005|
newMETHOP||5.021005|
newMYSUB||5.017004|
newNULLLIST|||
newOP|||
newPADNAMELIST||5.021007|n
newPADNAMEouter||5.021007|n
newPADNAMEpvn||5.021007|n
newPADOP|||
newPMOP|||
newPROG|||
newPVOP|||
newRANGE|||
newRV_inc|5.004000||p
newRV_noinc|5.004000||p
newRV|||
newSLICEOP|||
newSTATEOP|||
newSTUB|||
newSUB|||
newSVOP|||
newSVREF|||
newSV_type|5.009005||p
newSVavdefelem|||
newSVhek||5.009003|
newSViv|||
newSVnv|||
newSVpadname||5.017004|
newSVpv_share||5.013006|
newSVpvf_nocontext|||vn
newSVpvf||5.004000|v
newSVpvn_flags|5.010001||p
newSVpvn_share|5.007001||p
newSVpvn_utf8|5.010001||p
newSVpvn|5.004050||p
newSVpvs_flags|5.010001||p
newSVpvs_share|5.009003||p
newSVpvs|5.009003||p
newSVpv|||
newSVrv|||
newSVsv|||
newSVuv|5.006000||p
newSV|||
newUNOP_AUX||5.021007|
newUNOP|||
newWHENOP||5.009003|
newWHILEOP||5.013007|
newXS_deffile|||
newXS_flags||5.009004|
newXS_len_flags|||
newXSproto||5.006000|
newXS||5.006000|
new_collate||5.006000|
new_constant|||
new_ctype||5.006000|
new_he|||
new_logop|||
new_numeric||5.006000|
new_stackinfo||5.005000|
new_version||5.009000|
new_warnings_bitfield|||
next_symbol|||
nextargv|||
nextchar|||
ninstr|||n
no_bareword_allowed|||
no_fh_allowed|||
no_op|||
noperl_die|||vn
not_a_number|||
not_incrementable|||
nothreadhook||5.008000|
nuke_stacks|||
num_overflow|||n
oopsAV|||
oopsHV|||
op_append_elem||5.013006|
op_append_list||5.013006|
op_clear|||
op_contextualize||5.013006|
op_convert_list||5.021006|
op_dump||5.006000|
op_free|||
op_integerize|||
op_linklist||5.013006|
op_lvalue_flags|||
op_lvalue||5.013007|
op_null||5.007002|
op_parent|||n
op_prepend_elem||5.013006|
op_refcnt_dec|||
op_refcnt_inc|||
op_refcnt_lock||5.009002|
op_refcnt_unlock||5.009002|
op_relocate_sv|||
op_scope||5.013007|
op_sibling_splice||5.021002|n
op_std_init|||
op_unscope|||
open_script|||
openn_cleanup|||
openn_setup|||
opmethod_stash|||
opslab_force_free|||
opslab_free_nopad|||
opslab_free|||
output_or_return_posix_warnings|||
pMY_CXT_|5.007003||p
pMY_CXT|5.007003||p
pTHX_|5.006000||p
pTHX|5.006000||p
packWARN|5.007003||p
pack_cat||5.007003|
pack_rec|||
package_version|||
package|||
packlist||5.008001|
pad_add_anon||5.008001|
pad_add_name_pvn||5.015001|
pad_add_name_pvs||5.015001|
pad_add_name_pv||5.015001|
pad_add_name_sv||5.015001|
pad_add_weakref|||
pad_alloc_name|||
pad_alloc|||
pad_block_start|||
pad_check_dup|||
pad_compname_type||5.009003|
pad_findlex|||
pad_findmy_pvn||5.015001|
pad_findmy_pvs||5.015001|
pad_findmy_pv||5.015001|
pad_findmy_sv||5.015001|
pad_fixup_inner_anons|||
pad_free|||
pad_leavemy|||
pad_new||5.008001|
pad_push|||
pad_reset|||
pad_setsv|||
pad_sv|||
pad_swipe|||
pad_tidy||5.008001|
padlist_dup|||
padlist_store|||
padname_dup|||
padname_free|||
padnamelist_dup|||
padnamelist_fetch||5.021007|n
padnamelist_free|||
padnamelist_store||5.021007|
parse_arithexpr||5.013008|
parse_barestmt||5.013007|
parse_block||5.013007|
parse_body|||
parse_fullexpr||5.013008|
parse_fullstmt||5.013005|
parse_gv_stash_name|||
parse_ident|||
parse_label||5.013007|
parse_listexpr||5.013008|
parse_lparen_question_flags|||
parse_stmtseq||5.013006|
parse_subsignature|||
parse_termexpr||5.013008|
parse_unicode_opts|||
parser_dup|||
parser_free_nexttoke_ops|||
parser_free|||
path_is_searchable|||n
peep|||
pending_ident|||
perl_alloc_using|||n
perl_alloc|||n
perl_clone_using|||n
perl_clone|||n
perl_construct|||n
perl_destruct||5.007003|n
perl_free|||n
perl_parse||5.006000|n
perl_run|||n
pidgone|||
pm_description|||
pmop_dump||5.006000|
pmruntime|||
pmtrans|||
pop_scope|||
populate_ANYOF_from_invlist|||
populate_isa|||v
pregcomp||5.009005|
pregexec|||
pregfree2||5.011000|
pregfree|||
prescan_version||5.011004|
printbuf|||
printf_nocontext|||vn
process_special_blocks|||
ptr_hash|||n
ptr_table_clear||5.009005|
ptr_table_fetch||5.009005|
ptr_table_find|||n
ptr_table_free||5.009005|
ptr_table_new||5.009005|
ptr_table_split||5.009005|
ptr_table_store||5.009005|
push_scope|||
put_charclass_bitmap_innards_common|||
put_charclass_bitmap_innards_invlist|||
put_charclass_bitmap_innards|||
put_code_point|||
put_range|||
pv_display|5.006000||p
pv_escape|5.009004||p
pv_pretty|5.009004||p
pv_uni_display||5.007003|
qerror|||
qsortsvu|||
quadmath_format_needed|||n
quadmath_format_single|||n
re_compile||5.009005|
re_croak2|||
re_dup_guts|||
re_exec_indentf|||v
re_indentf|||v
re_intuit_start||5.019001|
re_intuit_string||5.006000|
re_op_compile|||
re_printf|||v
realloc||5.007002|n
reentrant_free||5.024000|
reentrant_init||5.024000|
reentrant_retry||5.024000|vn
reentrant_size||5.024000|
ref_array_or_hash|||
refcounted_he_chain_2hv|||
refcounted_he_fetch_pvn|||
refcounted_he_fetch_pvs|||
refcounted_he_fetch_pv|||
refcounted_he_fetch_sv|||
refcounted_he_free|||
refcounted_he_inc|||
refcounted_he_new_pvn|||
refcounted_he_new_pvs|||
refcounted_he_new_pv|||
refcounted_he_new_sv|||
refcounted_he_value|||
refkids|||
refto|||
ref||5.024000|
reg2Lanode|||
reg_check_named_buff_matched|||n
reg_named_buff_all||5.009005|
reg_named_buff_exists||5.009005|
reg_named_buff_fetch||5.009005|
reg_named_buff_firstkey||5.009005|
reg_named_buff_iter|||
reg_named_buff_nextkey||5.009005|
reg_named_buff_scalar||5.009005|
reg_named_buff|||
reg_node|||
reg_numbered_buff_fetch|||
reg_numbered_buff_length|||
reg_numbered_buff_store|||
reg_qr_package|||
reg_recode|||
reg_scan_name|||
reg_skipcomment|||n
reg_temp_copy|||
reganode|||
regatom|||
regbranch|||
regclass_swash||5.009004|
regclass|||
regcppop|||
regcppush|||
regcurly|||n
regdump_extflags|||
regdump_intflags|||
regdump||5.005000|
regdupe_internal|||
regex_set_precedence|||n
regexec_flags||5.005000|
regfree_internal||5.009005|
reghop3|||n
reghop4|||n
reghopmaybe3|||n
reginclass|||
reginitcolors||5.006000|
reginsert|||
regmatch|||
regnext||5.005000|
regnode_guts|||
regpiece|||
regprop|||
regrepeat|||
regtail_study|||
regtail|||
regtry|||
reg|||
repeatcpy|||n
report_evil_fh|||
report_redefined_cv|||
report_uninit|||
report_wrongway_fh|||
require_pv||5.006000|
require_tie_mod|||
restore_magic|||
rninstr|||n
rpeep|||
rsignal_restore|||
rsignal_save|||
rsignal_state||5.004000|
rsignal||5.004000|
run_body|||
run_user_filter|||
runops_debug||5.005000|
runops_standard||5.005000|
rv2cv_op_cv||5.013006|
rvpv_dup|||
rxres_free|||
rxres_restore|||
rxres_save|||
safesyscalloc||5.006000|n
safesysfree||5.006000|n
safesysmalloc||5.006000|n
safesysrealloc||5.006000|n
same_dirent|||
save_I16||5.004000|
save_I32|||
save_I8||5.006000|
save_adelete||5.011000|
save_aelem_flags||5.011000|
save_aelem||5.004050|
save_alloc||5.006000|
save_aptr|||
save_ary|||
save_bool||5.008001|
save_clearsv|||
save_delete|||
save_destructor_x||5.006000|
save_destructor||5.006000|
save_freeop|||
save_freepv|||
save_freesv|||
save_generic_pvref||5.006001|
save_generic_svref||5.005030|
save_gp||5.004000|
save_hash|||
save_hdelete||5.011000|
save_hek_flags|||n
save_helem_flags||5.011000|
save_helem||5.004050|
save_hints||5.010001|
save_hptr|||
save_int|||
save_item|||
save_iv||5.005000|
save_lines|||
save_list|||
save_long|||
save_magic_flags|||
save_mortalizesv||5.007001|
save_nogv|||
save_op||5.005000|
save_padsv_and_mortalize||5.010001|
save_pptr|||
save_pushi32ptr||5.010001|
save_pushptri32ptr|||
save_pushptrptr||5.010001|
save_pushptr||5.010001|
save_re_context||5.006000|
save_scalar_at|||
save_scalar|||
save_set_svflags||5.009000|
save_shared_pvref||5.007003|
save_sptr|||
save_strlen|||
save_svref|||
save_vptr||5.006000|
savepvn|||
savepvs||5.009003|
savepv|||
savesharedpvn||5.009005|
savesharedpvs||5.013006|
savesharedpv||5.007003|
savesharedsvpv||5.013006|
savestack_grow_cnt||5.008001|
savestack_grow|||
savesvpv||5.009002|
savetmps||5.023008|
sawparens|||
scalar_mod_type|||n
scalarboolean|||
scalarkids|||
scalarseq|||
scalarvoid|||
scalar|||
scan_bin||5.006000|
scan_commit|||
scan_const|||
scan_formline|||
scan_heredoc|||
scan_hex|||
scan_ident|||
scan_inputsymbol|||
scan_num||5.007001|
scan_oct|||
scan_pat|||
scan_str|||
scan_subst|||
scan_trans|||
scan_version||5.009001|
scan_vstring||5.009005|
scan_word|||
search_const|||
seed||5.008001|
sequence_num|||
set_ANYOF_arg|||
set_caret_X|||
set_context||5.006000|n
set_numeric_local||5.006000|
set_numeric_radix||5.006000|
set_numeric_standard||5.006000|
set_padlist|||n
setdefout|||
share_hek_flags|||
share_hek||5.004000|
should_warn_nl|||n
si_dup|||
sighandler|||n
simplify_sort|||
skip_to_be_ignored_text|||
skipspace_flags|||
softref2xv|||
sortcv_stacked|||
sortcv_xsub|||
sortcv|||
sortsv_flags||5.009003|
sortsv||5.007003|
space_join_names_mortal|||
ss_dup|||
ssc_add_range|||
ssc_and|||
ssc_anything|||
ssc_clear_locale|||n
ssc_cp_and|||
ssc_finalize|||
ssc_init|||
ssc_intersection|||
ssc_is_anything|||n
ssc_is_cp_posixl_init|||n
ssc_or|||
ssc_union|||
stack_grow|||
start_glob|||
start_subparse||5.004000|
stdize_locale|||
strEQ|||
strGE|||
strGT|||
strLE|||
strLT|||
strNE|||
str_to_version||5.006000|
strip_return|||
strnEQ|||
strnNE|||
study_chunk|||
sub_crush_depth|||
sublex_done|||
sublex_push|||
sublex_start|||
sv_2bool_flags||5.013006|
sv_2bool|||
sv_2cv|||
sv_2io|||
sv_2iuv_common|||
sv_2iuv_non_preserve|||
sv_2iv_flags||5.009001|
sv_2iv|||
sv_2mortal|||
sv_2num|||
sv_2nv_flags||5.013001|
sv_2pv_flags|5.007002||p
sv_2pv_nolen|5.006000||p
sv_2pvbyte_nolen|5.006000||p
sv_2pvbyte|5.006000||p
sv_2pvutf8_nolen||5.006000|
sv_2pvutf8||5.006000|
sv_2pv|||
sv_2uv_flags||5.009001|
sv_2uv|5.004000||p
sv_add_arena|||
sv_add_backref|||
sv_backoff|||n
sv_bless|||
sv_buf_to_ro|||
sv_buf_to_rw|||
sv_cat_decode||5.008001|
sv_catpv_flags||5.013006|
sv_catpv_mg|5.004050||p
sv_catpv_nomg||5.013006|
sv_catpvf_mg_nocontext|||pvn
sv_catpvf_mg|5.006000|5.004000|pv
sv_catpvf_nocontext|||vn
sv_catpvf||5.004000|v
sv_catpvn_flags||5.007002|
sv_catpvn_mg|5.004050||p
sv_catpvn_nomg|5.007002||p
sv_catpvn|||
sv_catpvs_flags||5.013006|
sv_catpvs_mg||5.013006|
sv_catpvs_nomg||5.013006|
sv_catpvs|5.009003||p
sv_catpv|||
sv_catsv_flags||5.007002|
sv_catsv_mg|5.004050||p
sv_catsv_nomg|5.007002||p
sv_catsv|||
sv_chop|||
sv_clean_all|||
sv_clean_objs|||
sv_clear|||
sv_cmp_flags||5.013006|
sv_cmp_locale_flags||5.013006|
sv_cmp_locale||5.004000|
sv_cmp|||
sv_collxfrm_flags||5.013006|
sv_collxfrm|||
sv_copypv_flags||5.017002|
sv_copypv_nomg||5.017002|
sv_copypv|||
sv_dec_nomg||5.013002|
sv_dec|||
sv_del_backref|||
sv_derived_from_pvn||5.015004|
sv_derived_from_pv||5.015004|
sv_derived_from_sv||5.015004|
sv_derived_from||5.004000|
sv_destroyable||5.010000|
sv_display|||
sv_does_pvn||5.015004|
sv_does_pv||5.015004|
sv_does_sv||5.015004|
sv_does||5.009004|
sv_dump|||
sv_dup_common|||
sv_dup_inc_multiple|||
sv_dup_inc|||
sv_dup|||
sv_eq_flags||5.013006|
sv_eq|||
sv_exp_grow|||
sv_force_normal_flags||5.007001|
sv_force_normal||5.006000|
sv_free2|||
sv_free_arenas|||
sv_free|||
sv_get_backrefs||5.021008|n
sv_gets||5.003070|
sv_grow|||
sv_i_ncmp|||
sv_inc_nomg||5.013002|
sv_inc|||
sv_insert_flags||5.010001|
sv_insert|||
sv_isa|||
sv_isobject|||
sv_iv||5.005000|
sv_kill_backrefs|||
sv_len_utf8_nomg|||
sv_len_utf8||5.006000|
sv_len|||
sv_magic_portable|5.024000|5.004000|p
sv_magicext_mglob|||
sv_magicext||5.007003|
sv_magic|||
sv_mortalcopy_flags|||
sv_mortalcopy|||
sv_ncmp|||
sv_newmortal|||
sv_newref|||
sv_nolocking||5.007003|
sv_nosharing||5.007003|
sv_nounlocking|||
sv_nv||5.005000|
sv_only_taint_gmagic|||n
sv_or_pv_pos_u2b|||
sv_peek||5.005000|
sv_pos_b2u_flags||5.019003|
sv_pos_b2u_midway|||
sv_pos_b2u||5.006000|
sv_pos_u2b_cached|||
sv_pos_u2b_flags||5.011005|
sv_pos_u2b_forwards|||n
sv_pos_u2b_midway|||n
sv_pos_u2b||5.006000|
sv_pvbyten_force||5.006000|
sv_pvbyten||5.006000|
sv_pvbyte||5.006000|
sv_pvn_force_flags|5.007002||p
sv_pvn_force|||
sv_pvn_nomg|5.007003|5.005000|p
sv_pvn||5.005000|
sv_pvutf8n_force||5.006000|
sv_pvutf8n||5.006000|
sv_pvutf8||5.006000|
sv_pv||5.006000|
sv_recode_to_utf8||5.007003|
sv_reftype|||
sv_ref||5.015004|
sv_replace|||
sv_report_used|||
sv_resetpvn|||
sv_reset|||
sv_rvweaken||5.006000|
sv_sethek|||
sv_setiv_mg|5.004050||p
sv_setiv|||
sv_setnv_mg|5.006000||p
sv_setnv|||
sv_setpv_mg|5.004050||p
sv_setpvf_mg_nocontext|||pvn
sv_setpvf_mg|5.006000|5.004000|pv
sv_setpvf_nocontext|||vn
sv_setpvf||5.004000|v
sv_setpviv_mg||5.008001|
sv_setpviv||5.008001|
sv_setpvn_mg|5.004050||p
sv_setpvn|||
sv_setpvs_mg||5.013006|
sv_setpvs|5.009004||p
sv_setpv|||
sv_setref_iv|||
sv_setref_nv|||
sv_setref_pvn|||
sv_setref_pvs||5.024000|
sv_setref_pv|||
sv_setref_uv||5.007001|
sv_setsv_cow|||
sv_setsv_flags||5.007002|
sv_setsv_mg|5.004050||p
sv_setsv_nomg|5.007002||p
sv_setsv|||
sv_setuv_mg|5.004050||p
sv_setuv|5.004000||p
sv_tainted||5.004000|
sv_taint||5.004000|
sv_true||5.005000|
sv_unglob|||
sv_uni_display||5.007003|
sv_unmagicext|5.013008||p
sv_unmagic|||
sv_unref_flags||5.007001|
sv_unref|||
sv_untaint||5.004000|
sv_upgrade|||
sv_usepvn_flags||5.009004|
sv_usepvn_mg|5.004050||p
sv_usepvn|||
sv_utf8_decode||5.006000|
sv_utf8_downgrade||5.006000|
sv_utf8_encode||5.006000|
sv_utf8_upgrade_flags_grow||5.011000|
sv_utf8_upgrade_flags||5.007002|
sv_utf8_upgrade_nomg||5.007002|
sv_utf8_upgrade||5.007001|
sv_uv|5.005000||p
sv_vcatpvf_mg|5.006000|5.004000|p
sv_vcatpvfn_flags||5.017002|
sv_vcatpvfn||5.004000|
sv_vcatpvf|5.006000|5.004000|p
sv_vsetpvf_mg|5.006000|5.004000|p
sv_vsetpvfn||5.004000|
sv_vsetpvf|5.006000|5.004000|p
svtype|||
swallow_bom|||
swash_fetch||5.007002|
swash_init||5.006000|
swash_scan_list_line|||
swatch_get|||
sync_locale||5.021004|
sys_init3||5.010000|n
sys_init||5.010000|n
sys_intern_clear|||
sys_intern_dup|||
sys_intern_init|||
sys_term||5.010000|n
taint_env|||
taint_proper|||
tied_method|||v
tmps_grow_p|||
toFOLD_utf8||5.019001|
toFOLD_uvchr||5.023009|
toFOLD||5.019001|
toLOWER_L1||5.019001|
toLOWER_LC||5.004000|
toLOWER_utf8||5.015007|
toLOWER_uvchr||5.023009|
toLOWER|||
toTITLE_utf8||5.015007|
toTITLE_uvchr||5.023009|
toTITLE||5.019001|
toUPPER_utf8||5.015007|
toUPPER_uvchr||5.023009|
toUPPER|||
to_byte_substr|||
to_lower_latin1|||n
to_uni_fold||5.007003|
to_uni_lower_lc||5.006000|
to_uni_lower||5.007003|
to_uni_title_lc||5.006000|
to_uni_title||5.007003|
to_uni_upper_lc||5.006000|
to_uni_upper||5.007003|
to_utf8_case||5.007003|
to_utf8_fold||5.015007|
to_utf8_lower||5.015007|
to_utf8_substr|||
to_utf8_title||5.015007|
to_utf8_upper||5.015007|
tokenize_use|||
tokeq|||
tokereport|||
too_few_arguments_pv|||
too_many_arguments_pv|||
translate_substr_offsets|||n
try_amagic_bin|||
try_amagic_un|||
uiv_2buf|||n
unlnk|||
unpack_rec|||
unpack_str||5.007003|
unpackstring||5.008001|
unreferenced_to_tmp_stack|||
unshare_hek_or_pvn|||
unshare_hek|||
unsharepvn||5.003070|
unwind_handler_stack|||
update_debugger_info|||
upg_version||5.009005|
usage|||
utf16_textfilter|||
utf16_to_utf8_reversed||5.006001|
utf16_to_utf8||5.006001|
utf8_distance||5.006000|
utf8_hop||5.006000|n
utf8_length||5.007001|
utf8_mg_len_cache_update|||
utf8_mg_pos_cache_update|||
utf8_to_bytes||5.006001|
utf8_to_uvchr_buf||5.015009|
utf8_to_uvchr||5.007001|
utf8_to_uvuni_buf||5.015009|
utf8_to_uvuni||5.007001|
utf8n_to_uvchr||5.007001|
utf8n_to_uvuni||5.007001|
utilize|||
uvchr_to_utf8_flags||5.007003|
uvchr_to_utf8||5.007001|
uvoffuni_to_utf8_flags||5.019004|
uvuni_to_utf8_flags||5.007003|
uvuni_to_utf8||5.007001|
valid_utf8_to_uvchr||5.015009|
valid_utf8_to_uvuni||5.015009|
validate_proto|||
validate_suid|||
varname|||
vcmp||5.009000|
vcroak||5.006000|
vdeb||5.007003|
vform||5.006000|
visit|||
vivify_defelem|||
vivify_ref|||
vload_module|5.006000||p
vmess||5.006000|
vnewSVpvf|5.006000|5.004000|p
vnormal||5.009002|
vnumify||5.009000|
vstringify||5.009000|
vverify||5.009003|
vwarner||5.006000|
vwarn||5.006000|
wait4pid|||
warn_nocontext|||vn
warn_sv||5.013001|
warner_nocontext|||vn
warner|5.006000|5.004000|pv
warn|||v
was_lvalue_sub|||
watch|||
whichsig_pvn||5.015004|
whichsig_pv||5.015004|
whichsig_sv||5.015004|
whichsig|||
win32_croak_not_implemented|||n
with_queued_errors|||
wrap_op_checker||5.015008|
write_to_stderr|||
xs_boot_epilog|||
xs_handshake|||vn
xs_version_bootcheck|||
yyerror_pvn|||
yyerror_pv|||
yyerror|||
yylex|||
yyparse|||
yyunlex|||
yywarn|||
);
if (exists $opt{'list-unsupported'}) {
my $f;
for $f (sort { lc $a cmp lc $b } keys %API) {
next unless $API{$f}{todo};
print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
}
exit 0;
}
# Scan for possible replacement candidates
my(%replace, %need, %hints, %warnings, %depends);
my $replace = 0;
my($hint, $define, $function);
sub find_api
{
my $code = shift;
$code =~ s{
/ (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
| "[^"\\]*(?:\\.[^"\\]*)*"
| '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
grep { exists $API{$_} } $code =~ /(\w+)/mg;
}
while (<DATA>) {
if ($hint) {
my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
if (m{^\s*\*\s(.*?)\s*$}) {
for (@{$hint->[1]}) {
$h->{$_} ||= ''; # suppress warning with older perls
$h->{$_} .= "$1\n";
}
}
else { undef $hint }
}
$hint = [$1, [split /,?\s+/, $2]]
if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
if ($define) {
if ($define->[1] =~ /\\$/) {
$define->[1] .= $_;
}
else {
if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
my @n = find_api($define->[1]);
push @{$depends{$define->[0]}}, @n if @n
}
undef $define;
}
}
$define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
if ($function) {
if (/^}/) {
if (exists $API{$function->[0]}) {
my @n = find_api($function->[1]);
push @{$depends{$function->[0]}}, @n if @n
}
undef $function;
}
else {
$function->[1] .= $_;
}
}
$function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
$replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
$replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
$replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
$replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
my @deps = map { s/\s+//g; $_ } split /,/, $3;
my $d;
for $d (map { s/\s+//g; $_ } split /,/, $1) {
push @{$depends{$d}}, @deps;
}
}
$need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
}
for (values %depends) {
my %s;
$_ = [sort grep !$s{$_}++, @$_];
}
if (exists $opt{'api-info'}) {
my $f;
my $count = 0;
my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
for $f (sort { lc $a cmp lc $b } keys %API) {
next unless $f =~ /$match/;
print "\n=== $f ===\n\n";
my $info = 0;
if ($API{$f}{base} || $API{$f}{todo}) {
my $base = format_version($API{$f}{base} || $API{$f}{todo});
print "Supported at least starting from perl-$base.\n";
$info++;
}
if ($API{$f}{provided}) {
my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
print "Support by $ppport provided back to perl-$todo.\n";
print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
print "\n$hints{$f}" if exists $hints{$f};
print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
$info++;
}
print "No portability information available.\n" unless $info;
$count++;
}
$count or print "Found no API matching '$opt{'api-info'}'.";
print "\n";
exit 0;
}
if (exists $opt{'list-provided'}) {
my $f;
for $f (sort { lc $a cmp lc $b } keys %API) {
next unless $API{$f}{provided};
my @flags;
push @flags, 'explicit' if exists $need{$f};
push @flags, 'depend' if exists $depends{$f};
push @flags, 'hint' if exists $hints{$f};
push @flags, 'warning' if exists $warnings{$f};
my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
print "$f$flags\n";
}
exit 0;
}
my @files;
my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
my $srcext = join '|', map { quotemeta $_ } @srcext;
if (@ARGV) {
my %seen;
for (@ARGV) {
if (-e) {
if (-f) {
push @files, $_ unless $seen{$_}++;
}
else { warn "'$_' is not a file.\n" }
}
else {
my @new = grep { -f } glob $_
or warn "'$_' does not exist.\n";
push @files, grep { !$seen{$_}++ } @new;
}
}
}
else {
eval {
require File::Find;
File::Find::find(sub {
$File::Find::name =~ /($srcext)$/i
and push @files, $File::Find::name;
}, '.');
};
if ($@) {
@files = map { glob "*$_" } @srcext;
}
}
if (!@ARGV || $opt{filter}) {
my(@in, @out);
my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
for (@files) {
my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
push @{ $out ? \@out : \@in }, $_;
}
if (@ARGV && @out) {
warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
}
@files = @in;
}
die "No input files given!\n" unless @files;
my(%files, %global, %revreplace);
%revreplace = reverse %replace;
my $filename;
my $patch_opened = 0;
for $filename (@files) {
unless (open IN, "<$filename") {
warn "Unable to read from $filename: $!\n";
next;
}
info("Scanning $filename ...");
my $c = do { local $/; <IN> };
close IN;
my %file = (orig => $c, changes => 0);
# Temporarily remove C/XS comments and strings from the code
my @ccom;
$c =~ s{
( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
| ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
| ( ^$HS*\#[^\r\n]*
| "[^"\\]*(?:\\.[^"\\]*)*"
| '[^'\\]*(?:\\.[^'\\]*)*'
| / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
}{ defined $2 and push @ccom, $2;
defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
$file{ccom} = \@ccom;
$file{code} = $c;
$file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
my $func;
for $func (keys %API) {
my $match = $func;
$match .= "|$revreplace{$func}" if exists $revreplace{$func};
if ($c =~ /\b(?:Perl_)?($match)\b/) {
$file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
$file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
if (exists $API{$func}{provided}) {
$file{uses_provided}{$func}++;
if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
$file{uses}{$func}++;
my @deps = rec_depend($func);
if (@deps) {
$file{uses_deps}{$func} = \@deps;
for (@deps) {
$file{uses}{$_} = 0 unless exists $file{uses}{$_};
}
}
for ($func, @deps) {
$file{needs}{$_} = 'static' if exists $need{$_};
}
}
}
if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
if ($c =~ /\b$func\b/) {
$file{uses_todo}{$func}++;
}
}
}
}
while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
if (exists $need{$2}) {
$file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
}
else { warning("Possibly wrong #define $1 in $filename") }
}
for (qw(uses needs uses_todo needed_global needed_static)) {
for $func (keys %{$file{$_}}) {
push @{$global{$_}{$func}}, $filename;
}
}
$files{$filename} = \%file;
}
# Globally resolve NEED_'s
my $need;
for $need (keys %{$global{needs}}) {
if (@{$global{needs}{$need}} > 1) {
my @targets = @{$global{needs}{$need}};
my @t = grep $files{$_}{needed_global}{$need}, @targets;
@targets = @t if @t;
@t = grep /\.xs$/i, @targets;
@targets = @t if @t;
my $target = shift @targets;
$files{$target}{needs}{$need} = 'global';
for (@{$global{needs}{$need}}) {
$files{$_}{needs}{$need} = 'extern' if $_ ne $target;
}
}
}
for $filename (@files) {
exists $files{$filename} or next;
info("=== Analyzing $filename ===");
my %file = %{$files{$filename}};
my $func;
my $c = $file{code};
my $warnings = 0;
for $func (sort keys %{$file{uses_Perl}}) {
if ($API{$func}{varargs}) {
unless ($API{$func}{nothxarg}) {
my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
{ $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
if ($changes) {
warning("Doesn't pass interpreter argument aTHX to Perl_$func");
$file{changes} += $changes;
}
}
}
else {
warning("Uses Perl_$func instead of $func");
$file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
{$func$1(}g);
}
}
for $func (sort keys %{$file{uses_replace}}) {
warning("Uses $func instead of $replace{$func}");
$file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
}
for $func (sort keys %{$file{uses_provided}}) {
if ($file{uses}{$func}) {
if (exists $file{uses_deps}{$func}) {
diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
}
else {
diag("Uses $func");
}
}
$warnings += hint($func);
}
unless ($opt{quiet}) {
for $func (sort keys %{$file{uses_todo}}) {
print "*** WARNING: Uses $func, which may not be portable below perl ",
format_version($API{$func}{todo}), ", even with '$ppport'\n";
$warnings++;
}
}
for $func (sort keys %{$file{needed_static}}) {
my $message = '';
if (not exists $file{uses}{$func}) {
$message = "No need to define NEED_$func if $func is never used";
}
elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
$message = "No need to define NEED_$func when already needed globally";
}
if ($message) {
diag($message);
$file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
}
}
for $func (sort keys %{$file{needed_global}}) {
my $message = '';
if (not exists $global{uses}{$func}) {
$message = "No need to define NEED_${func}_GLOBAL if $func is never used";
}
elsif (exists $file{needs}{$func}) {
if ($file{needs}{$func} eq 'extern') {
$message = "No need to define NEED_${func}_GLOBAL when already needed globally";
}
elsif ($file{needs}{$func} eq 'static') {
$message = "No need to define NEED_${func}_GLOBAL when only used in this file";
}
}
if ($message) {
diag($message);
$file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
}
}
$file{needs_inc_ppport} = keys %{$file{uses}};
if ($file{needs_inc_ppport}) {
my $pp = '';
for $func (sort keys %{$file{needs}}) {
my $type = $file{needs}{$func};
next if $type eq 'extern';
my $suffix = $type eq 'global' ? '_GLOBAL' : '';
unless (exists $file{"needed_$type"}{$func}) {
if ($type eq 'global') {
diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
}
else {
diag("File needs $func, adding static request");
}
$pp .= "#define NEED_$func$suffix\n";
}
}
if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
$pp = '';
$file{changes}++;
}
unless ($file{has_inc_ppport}) {
diag("Needs to include '$ppport'");
$pp .= qq(#include "$ppport"\n)
}
if ($pp) {
$file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
|| ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
|| ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
|| ($c =~ s/^/$pp/);
}
}
else {
if ($file{has_inc_ppport}) {
diag("No need to include '$ppport'");
$file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
}
}
# put back in our C comments
my $ix;
my $cppc = 0;
my @ccom = @{$file{ccom}};
for $ix (0 .. $#ccom) {
if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
$cppc++;
$file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
}
else {
$c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
}
}
if ($cppc) {
my $s = $cppc != 1 ? 's' : '';
warning("Uses $cppc C++ style comment$s, which is not portable");
}
my $s = $warnings != 1 ? 's' : '';
my $warn = $warnings ? " ($warnings warning$s)" : '';
info("Analysis completed$warn");
if ($file{changes}) {
if (exists $opt{copy}) {
my $newfile = "$filename$opt{copy}";
if (-e $newfile) {
error("'$newfile' already exists, refusing to write copy of '$filename'");
}
else {
local *F;
if (open F, ">$newfile") {
info("Writing copy of '$filename' with changes to '$newfile'");
print F $c;
close F;
}
else {
error("Cannot open '$newfile' for writing: $!");
}
}
}
elsif (exists $opt{patch} || $opt{changes}) {
if (exists $opt{patch}) {
unless ($patch_opened) {
if (open PATCH, ">$opt{patch}") {
$patch_opened = 1;
}
else {
error("Cannot open '$opt{patch}' for writing: $!");
delete $opt{patch};
$opt{changes} = 1;
goto fallback;
}
}
mydiff(\*PATCH, $filename, $c);
}
else {
fallback:
info("Suggested changes:");
mydiff(\*STDOUT, $filename, $c);
}
}
else {
my $s = $file{changes} == 1 ? '' : 's';
info("$file{changes} potentially required change$s detected");
}
}
else {
info("Looks good");
}
}
close PATCH if $patch_opened;
exit 0;
sub try_use { eval "use @_;"; return $@ eq '' }
sub mydiff
{
local *F = shift;
my($file, $str) = @_;
my $diff;
if (exists $opt{diff}) {
$diff = run_diff($opt{diff}, $file, $str);
}
if (!defined $diff and try_use('Text::Diff')) {
$diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
$diff = <<HEADER . $diff;
--- $file
+++ $file.patched
HEADER
}
if (!defined $diff) {
$diff = run_diff('diff -u', $file, $str);
}
if (!defined $diff) {
$diff = run_diff('diff', $file, $str);
}
if (!defined $diff) {
error("Cannot generate a diff. Please install Text::Diff or use --copy.");
return;
}
print F $diff;
}
sub run_diff
{
my($prog, $file, $str) = @_;
my $tmp = 'dppptemp';
my $suf = 'aaa';
my $diff = '';
local *F;
while (-e "$tmp.$suf") { $suf++ }
$tmp = "$tmp.$suf";
if (open F, ">$tmp") {
print F $str;
close F;
if (open F, "$prog $file $tmp |") {
while (<F>) {
s/\Q$tmp\E/$file.patched/;
$diff .= $_;
}
close F;
unlink $tmp;
return $diff;
}
unlink $tmp;
}
else {
error("Cannot open '$tmp' for writing: $!");
}
return undef;
}
sub rec_depend
{
my($func, $seen) = @_;
return () unless exists $depends{$func};
$seen = {%{$seen||{}}};
return () if $seen->{$func}++;
my %s;
grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
}
sub parse_version
{
my $ver = shift;
if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
return ($1, $2, $3);
}
elsif ($ver !~ /^\d+\.[\d_]+$/) {
die "cannot parse version '$ver'\n";
}
$ver =~ s/_//g;
$ver =~ s/$/000000/;
my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
$v = int $v;
$s = int $s;
if ($r < 5 || ($r == 5 && $v < 6)) {
if ($s % 10) {
die "cannot parse version '$ver'\n";
}
}
return ($r, $v, $s);
}
sub format_version
{
my $ver = shift;
$ver =~ s/$/000000/;
my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
$v = int $v;
$s = int $s;
if ($r < 5 || ($r == 5 && $v < 6)) {
if ($s % 10) {
die "invalid version '$ver'\n";
}
$s /= 10;
$ver = sprintf "%d.%03d", $r, $v;
$s > 0 and $ver .= sprintf "_%02d", $s;
return $ver;
}
return sprintf "%d.%d.%d", $r, $v, $s;
}
sub info
{
$opt{quiet} and return;
print @_, "\n";
}
sub diag
{
$opt{quiet} and return;
$opt{diag} and print @_, "\n";
}
sub warning
{
$opt{quiet} and return;
print "*** ", @_, "\n";
}
sub error
{
print "*** ERROR: ", @_, "\n";
}
my %given_hints;
my %given_warnings;
sub hint
{
$opt{quiet} and return;
my $func = shift;
my $rv = 0;
if (exists $warnings{$func} && !$given_warnings{$func}++) {
my $warn = $warnings{$func};
$warn =~ s!^!*** !mg;
print "*** WARNING: $func\n", $warn;
$rv++;
}
if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
my $hint = $hints{$func};
$hint =~ s/^/ /mg;
print " --- hint for $func ---\n", $hint;
}
$rv;
}
sub usage
{
my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
my %M = ( 'I' => '*' );
$usage =~ s/^\s*perl\s+\S+/$^X $0/;
$usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
print <<ENDUSAGE;
Usage: $usage
See perldoc $0 for details.
ENDUSAGE
exit 2;
}
sub strip
{
my $self = do { local(@ARGV,$/)=($0); <> };
my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
$copy =~ s/^(?=\S+)/ /gms;
$self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
$self =~ s/^SKIP.*(?=^__DATA__)/SKIP
if (\@ARGV && \$ARGV[0] eq '--unstrip') {
eval { require Devel::PPPort };
\$@ and die "Cannot require Devel::PPPort, please install.\\n";
if (eval \$Devel::PPPort::VERSION < $VERSION) {
die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
. "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
. "Please install a newer version, or --unstrip will not work.\\n";
}
Devel::PPPort::WriteFile(\$0);
exit 0;
}
print <<END;
Sorry, but this is a stripped version of \$0.
To be able to use its original script and doc functionality,
please try to regenerate this file using:
\$^X \$0 --unstrip
END
/ms;
my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
$c =~ s{
/ (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
| ( "[^"\\]*(?:\\.[^"\\]*)*"
| '[^'\\]*(?:\\.[^'\\]*)*' )
| ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
$c =~ s!\s+$!!mg;
$c =~ s!^$LF!!mg;
$c =~ s!^\s*#\s*!#!mg;
$c =~ s!^\s+!!mg;
open OUT, ">$0" or die "cannot strip $0: $!\n";
print OUT "$pl$c\n";
exit 0;
}
__DATA__
*/
#ifndef _P_P_PORTABILITY_H_
#define _P_P_PORTABILITY_H_
#ifndef DPPP_NAMESPACE
# define DPPP_NAMESPACE DPPP_
#endif
#define DPPP_CAT2(x,y) CAT2(x,y)
#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
#ifndef PERL_REVISION
# if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
# define PERL_PATCHLEVEL_H_IMPLICIT
# include <patchlevel.h>
# endif
# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
# include <could_not_find_Perl_patchlevel.h>
# endif
# ifndef PERL_REVISION
# define PERL_REVISION (5)
/* Replace: 1 */
# define PERL_VERSION PATCHLEVEL
# define PERL_SUBVERSION SUBVERSION
/* Replace PERL_PATCHLEVEL with PERL_VERSION */
/* Replace: 0 */
# endif
#endif
#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION))
/* It is very unlikely that anyone will try to use this with Perl 6
(or greater), but who knows.
*/
#if PERL_REVISION != 5
# error ppport.h only works with Perl version 5
#endif /* PERL_REVISION != 5 */
#ifndef dTHR
# define dTHR dNOOP
#endif
#ifndef dTHX
# define dTHX dNOOP
#endif
#ifndef dTHXa
# define dTHXa(x) dNOOP
#endif
#ifndef pTHX
# define pTHX void
#endif
#ifndef pTHX_
# define pTHX_
#endif
#ifndef aTHX
# define aTHX
#endif
#ifndef aTHX_
# define aTHX_
#endif
#if (PERL_BCDVERSION < 0x5006000)
# ifdef USE_THREADS
# define aTHXR thr
# define aTHXR_ thr,
# else
# define aTHXR
# define aTHXR_
# endif
# define dTHXR dTHR
#else
# define aTHXR aTHX
# define aTHXR_ aTHX_
# define dTHXR dTHX
#endif
#ifndef dTHXoa
# define dTHXoa(x) dTHXa(x)
#endif
#ifdef I_LIMITS
# include <limits.h>
#endif
#ifndef PERL_UCHAR_MIN
# define PERL_UCHAR_MIN ((unsigned char)0)
#endif
#ifndef PERL_UCHAR_MAX
# ifdef UCHAR_MAX
# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
# else
# ifdef MAXUCHAR
# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
# else
# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
# endif
# endif
#endif
#ifndef PERL_USHORT_MIN
# define PERL_USHORT_MIN ((unsigned short)0)
#endif
#ifndef PERL_USHORT_MAX
# ifdef USHORT_MAX
# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
# else
# ifdef MAXUSHORT
# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
# else
# ifdef USHRT_MAX
# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
# else
# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
# endif
# endif
# endif
#endif
#ifndef PERL_SHORT_MAX
# ifdef SHORT_MAX
# define PERL_SHORT_MAX ((short)SHORT_MAX)
# else
# ifdef MAXSHORT /* Often used in <values.h> */
# define PERL_SHORT_MAX ((short)MAXSHORT)
# else
# ifdef SHRT_MAX
# define PERL_SHORT_MAX ((short)SHRT_MAX)
# else
# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
# endif
# endif
# endif
#endif
#ifndef PERL_SHORT_MIN
# ifdef SHORT_MIN
# define PERL_SHORT_MIN ((short)SHORT_MIN)
# else
# ifdef MINSHORT
# define PERL_SHORT_MIN ((short)MINSHORT)
# else
# ifdef SHRT_MIN
# define PERL_SHORT_MIN ((short)SHRT_MIN)
# else
# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
# endif
# endif
# endif
#endif
#ifndef PERL_UINT_MAX
# ifdef UINT_MAX
# define PERL_UINT_MAX ((unsigned int)UINT_MAX)
# else
# ifdef MAXUINT
# define PERL_UINT_MAX ((unsigned int)MAXUINT)
# else
# define PERL_UINT_MAX (~(unsigned int)0)
# endif
# endif
#endif
#ifndef PERL_UINT_MIN
# define PERL_UINT_MIN ((unsigned int)0)
#endif
#ifndef PERL_INT_MAX
# ifdef INT_MAX
# define PERL_INT_MAX ((int)INT_MAX)
# else
# ifdef MAXINT /* Often used in <values.h> */
# define PERL_INT_MAX ((int)MAXINT)
# else
# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
# endif
# endif
#endif
#ifndef PERL_INT_MIN
# ifdef INT_MIN
# define PERL_INT_MIN ((int)INT_MIN)
# else
# ifdef MININT
# define PERL_INT_MIN ((int)MININT)
# else
# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
# endif
# endif
#endif
#ifndef PERL_ULONG_MAX
# ifdef ULONG_MAX
# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
# else
# ifdef MAXULONG
# define PERL_ULONG_MAX ((unsigned long)MAXULONG)
# else
# define PERL_ULONG_MAX (~(unsigned long)0)
# endif
# endif
#endif
#ifndef PERL_ULONG_MIN
# define PERL_ULONG_MIN ((unsigned long)0L)
#endif
#ifndef PERL_LONG_MAX
# ifdef LONG_MAX
# define PERL_LONG_MAX ((long)LONG_MAX)
# else
# ifdef MAXLONG
# define PERL_LONG_MAX ((long)MAXLONG)
# else
# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
# endif
# endif
#endif
#ifndef PERL_LONG_MIN
# ifdef LONG_MIN
# define PERL_LONG_MIN ((long)LONG_MIN)
# else
# ifdef MINLONG
# define PERL_LONG_MIN ((long)MINLONG)
# else
# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
# endif
# endif
#endif
#if defined(HAS_QUAD) && (defined(convex) || defined(uts))
# ifndef PERL_UQUAD_MAX
# ifdef ULONGLONG_MAX
# define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
# else
# ifdef MAXULONGLONG
# define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
# else
# define PERL_UQUAD_MAX (~(unsigned long long)0)
# endif
# endif
# endif
# ifndef PERL_UQUAD_MIN
# define PERL_UQUAD_MIN ((unsigned long long)0L)
# endif
# ifndef PERL_QUAD_MAX
# ifdef LONGLONG_MAX
# define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
# else
# ifdef MAXLONGLONG
# define PERL_QUAD_MAX ((long long)MAXLONGLONG)
# else
# define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
# endif
# endif
# endif
# ifndef PERL_QUAD_MIN
# ifdef LONGLONG_MIN
# define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
# else
# ifdef MINLONGLONG
# define PERL_QUAD_MIN ((long long)MINLONGLONG)
# else
# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
# endif
# endif
# endif
#endif
/* This is based on code from 5.003 perl.h */
#ifdef HAS_QUAD
# ifdef cray
#ifndef IVTYPE
# define IVTYPE int
#endif
#ifndef IV_MIN
# define IV_MIN PERL_INT_MIN
#endif
#ifndef IV_MAX
# define IV_MAX PERL_INT_MAX
#endif
#ifndef UV_MIN
# define UV_MIN PERL_UINT_MIN
#endif
#ifndef UV_MAX
# define UV_MAX PERL_UINT_MAX
#endif
# ifdef INTSIZE
#ifndef IVSIZE
# define IVSIZE INTSIZE
#endif
# endif
# else
# if defined(convex) || defined(uts)
#ifndef IVTYPE
# define IVTYPE long long
#endif
#ifndef IV_MIN
# define IV_MIN PERL_QUAD_MIN
#endif
#ifndef IV_MAX
# define IV_MAX PERL_QUAD_MAX
#endif
#ifndef UV_MIN
# define UV_MIN PERL_UQUAD_MIN
#endif
#ifndef UV_MAX
# define UV_MAX PERL_UQUAD_MAX
#endif
# ifdef LONGLONGSIZE
#ifndef IVSIZE
# define IVSIZE LONGLONGSIZE
#endif
# endif
# else
#ifndef IVTYPE
# define IVTYPE long
#endif
#ifndef IV_MIN
# define IV_MIN PERL_LONG_MIN
#endif
#ifndef IV_MAX
# define IV_MAX PERL_LONG_MAX
#endif
#ifndef UV_MIN
# define UV_MIN PERL_ULONG_MIN
#endif
#ifndef UV_MAX
# define UV_MAX PERL_ULONG_MAX
#endif
# ifdef LONGSIZE
#ifndef IVSIZE
# define IVSIZE LONGSIZE
#endif
# endif
# endif
# endif
#ifndef IVSIZE
# define IVSIZE 8
#endif
#ifndef LONGSIZE
# define LONGSIZE 8
#endif
#ifndef PERL_QUAD_MIN
# define PERL_QUAD_MIN IV_MIN
#endif
#ifndef PERL_QUAD_MAX
# define PERL_QUAD_MAX IV_MAX
#endif
#ifndef PERL_UQUAD_MIN
# define PERL_UQUAD_MIN UV_MIN
#endif
#ifndef PERL_UQUAD_MAX
# define PERL_UQUAD_MAX UV_MAX
#endif
#else
#ifndef IVTYPE
# define IVTYPE long
#endif
#ifndef LONGSIZE
# define LONGSIZE 4
#endif
#ifndef IV_MIN
# define IV_MIN PERL_LONG_MIN
#endif
#ifndef IV_MAX
# define IV_MAX PERL_LONG_MAX
#endif
#ifndef UV_MIN
# define UV_MIN PERL_ULONG_MIN
#endif
#ifndef UV_MAX
# define UV_MAX PERL_ULONG_MAX
#endif
#endif
#ifndef IVSIZE
# ifdef LONGSIZE
# define IVSIZE LONGSIZE
# else
# define IVSIZE 4 /* A bold guess, but the best we can make. */
# endif
#endif
#ifndef UVTYPE
# define UVTYPE unsigned IVTYPE
#endif
#ifndef UVSIZE
# define UVSIZE IVSIZE
#endif
#ifndef sv_setuv
# define sv_setuv(sv, uv) \
STMT_START { \
UV TeMpUv = uv; \
if (TeMpUv <= IV_MAX) \
sv_setiv(sv, TeMpUv); \
else \
sv_setnv(sv, (double)TeMpUv); \
} STMT_END
#endif
#ifndef newSVuv
# define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
#endif
#ifndef sv_2uv
# define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
#endif
#ifndef SvUVX
# define SvUVX(sv) ((UV)SvIVX(sv))
#endif
#ifndef SvUVXx
# define SvUVXx(sv) SvUVX(sv)
#endif
#ifndef SvUV
# define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
#endif
#ifndef SvUVx
# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
#endif
/* Hint: sv_uv
* Always use the SvUVx() macro instead of sv_uv().
*/
#ifndef sv_uv
# define sv_uv(sv) SvUVx(sv)
#endif
#if !defined(SvUOK) && defined(SvIOK_UV)
# define SvUOK(sv) SvIOK_UV(sv)
#endif
#ifndef XST_mUV
# define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
#endif
#ifndef XSRETURN_UV
# define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
#endif
#ifndef PUSHu
# define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
#endif
#ifndef XPUSHu
# define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
#endif
#ifdef HAS_MEMCMP
#ifndef memNE
# define memNE(s1,s2,l) (memcmp(s1,s2,l))
#endif
#ifndef memEQ
# define memEQ(s1,s2,l) (!memcmp(s1,s2,l))
#endif
#else
#ifndef memNE
# define memNE(s1,s2,l) (bcmp(s1,s2,l))
#endif
#ifndef memEQ
# define memEQ(s1,s2,l) (!bcmp(s1,s2,l))
#endif
#endif
#ifndef memEQs
# define memEQs(s1, l, s2) \
(sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1)))
#endif
#ifndef memNEs
# define memNEs(s1, l, s2) !memEQs(s1, l, s2)
#endif
#ifndef MoveD
# define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t))
#endif
#ifndef CopyD
# define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
#endif
#ifdef HAS_MEMSET
#ifndef ZeroD
# define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t))
#endif
#else
#ifndef ZeroD
# define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d)
#endif
#endif
#ifndef PoisonWith
# define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))
#endif
#ifndef PoisonNew
# define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB)
#endif
#ifndef PoisonFree
# define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF)
#endif
#ifndef Poison
# define Poison(d,n,t) PoisonFree(d,n,t)
#endif
#ifndef Newx
# define Newx(v,n,t) New(0,v,n,t)
#endif
#ifndef Newxc
# define Newxc(v,n,t,c) Newc(0,v,n,t,c)
#endif
#ifndef Newxz
# define Newxz(v,n,t) Newz(0,v,n,t)
#endif
#ifndef PERL_MAGIC_qr
# define PERL_MAGIC_qr 'r'
#endif
#ifndef cBOOL
# define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0)
#endif
#ifndef OpHAS_SIBLING
# define OpHAS_SIBLING(o) (cBOOL((o)->op_sibling))
#endif
#ifndef OpSIBLING
# define OpSIBLING(o) (0 + (o)->op_sibling)
#endif
#ifndef OpMORESIB_set
# define OpMORESIB_set(o, sib) ((o)->op_sibling = (sib))
#endif
#ifndef OpLASTSIB_set
# define OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL)
#endif
#ifndef OpMAYBESIB_set
# define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib))
#endif
#ifndef SvRX
#if defined(NEED_SvRX)
static void * DPPP_(my_SvRX)(pTHX_ SV *rv);
static
#else
extern void * DPPP_(my_SvRX)(pTHX_ SV *rv);
#endif
#ifdef SvRX
# undef SvRX
#endif
#define SvRX(a) DPPP_(my_SvRX)(aTHX_ a)
#if defined(NEED_SvRX) || defined(NEED_SvRX_GLOBAL)
void *
DPPP_(my_SvRX)(pTHX_ SV *rv)
{
if (SvROK(rv)) {
SV *sv = SvRV(rv);
if (SvMAGICAL(sv)) {
MAGIC *mg = mg_find(sv, PERL_MAGIC_qr);
if (mg && mg->mg_obj) {
return mg->mg_obj;
}
}
}
return 0;
}
#endif
#endif
#ifndef SvRXOK
# define SvRXOK(sv) (!!SvRX(sv))
#endif
#ifndef PERL_UNUSED_DECL
# ifdef HASATTRIBUTE
# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
# define PERL_UNUSED_DECL
# else
# define PERL_UNUSED_DECL __attribute__((unused))
# endif
# else
# define PERL_UNUSED_DECL
# endif
#endif
#ifndef PERL_UNUSED_ARG
# if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
# include <note.h>
# define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
# else
# define PERL_UNUSED_ARG(x) ((void)x)
# endif
#endif
#ifndef PERL_UNUSED_VAR
# define PERL_UNUSED_VAR(x) ((void)x)
#endif
#ifndef PERL_UNUSED_CONTEXT
# ifdef USE_ITHREADS
# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
# else
# define PERL_UNUSED_CONTEXT
# endif
#endif
#ifndef PERL_UNUSED_RESULT
# if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT)
# define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END
# else
# define PERL_UNUSED_RESULT(v) ((void)(v))
# endif
#endif
#ifndef NOOP
# define NOOP /*EMPTY*/(void)0
#endif
#ifndef dNOOP
# define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
#endif
#ifndef NVTYPE
# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
# define NVTYPE long double
# else
# define NVTYPE double
# endif
typedef NVTYPE NV;
#endif
#ifndef INT2PTR
# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
# define PTRV UV
# define INT2PTR(any,d) (any)(d)
# else
# if PTRSIZE == LONGSIZE
# define PTRV unsigned long
# else
# define PTRV unsigned
# endif
# define INT2PTR(any,d) (any)(PTRV)(d)
# endif
#endif
#ifndef PTR2ul
# if PTRSIZE == LONGSIZE
# define PTR2ul(p) (unsigned long)(p)
# else
# define PTR2ul(p) INT2PTR(unsigned long,p)
# endif
#endif
#ifndef PTR2nat
# define PTR2nat(p) (PTRV)(p)
#endif
#ifndef NUM2PTR
# define NUM2PTR(any,d) (any)PTR2nat(d)
#endif
#ifndef PTR2IV
# define PTR2IV(p) INT2PTR(IV,p)
#endif
#ifndef PTR2UV
# define PTR2UV(p) INT2PTR(UV,p)
#endif
#ifndef PTR2NV
# define PTR2NV(p) NUM2PTR(NV,p)
#endif
#undef START_EXTERN_C
#undef END_EXTERN_C
#undef EXTERN_C
#ifdef __cplusplus
# define START_EXTERN_C extern "C" {
# define END_EXTERN_C }
# define EXTERN_C extern "C"
#else
# define START_EXTERN_C
# define END_EXTERN_C
# define EXTERN_C extern
#endif
#if defined(PERL_GCC_PEDANTIC)
# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
# endif
#endif
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
# ifndef PERL_USE_GCC_BRACE_GROUPS
# define PERL_USE_GCC_BRACE_GROUPS
# endif
#endif
#undef STMT_START
#undef STMT_END
#ifdef PERL_USE_GCC_BRACE_GROUPS
# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
# define STMT_END )
#else
# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
# define STMT_START if (1)
# define STMT_END else (void)0
# else
# define STMT_START do
# define STMT_END while (0)
# endif
#endif
#ifndef boolSV
# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
#endif
/* DEFSV appears first in 5.004_56 */
#ifndef DEFSV
# define DEFSV GvSV(PL_defgv)
#endif
#ifndef SAVE_DEFSV
# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
#endif
#ifndef DEFSV_set
# define DEFSV_set(sv) (DEFSV = (sv))
#endif
/* Older perls (<=5.003) lack AvFILLp */
#ifndef AvFILLp
# define AvFILLp AvFILL
#endif
#ifndef ERRSV
# define ERRSV get_sv("@",FALSE)
#endif
/* Hint: gv_stashpvn
* This function's backport doesn't support the length parameter, but
* rather ignores it. Portability can only be ensured if the length
* parameter is used for speed reasons, but the length can always be
* correctly computed from the string argument.
*/
#ifndef gv_stashpvn
# define gv_stashpvn(str,len,create) gv_stashpv(str,create)
#endif
/* Replace: 1 */
#ifndef get_cv
# define get_cv perl_get_cv
#endif
#ifndef get_sv
# define get_sv perl_get_sv
#endif
#ifndef get_av
# define get_av perl_get_av
#endif
#ifndef get_hv
# define get_hv perl_get_hv
#endif
/* Replace: 0 */
#ifndef dUNDERBAR
# define dUNDERBAR dNOOP
#endif
#ifndef UNDERBAR
# define UNDERBAR DEFSV
#endif
#ifndef dAX
# define dAX I32 ax = MARK - PL_stack_base + 1
#endif
#ifndef dITEMS
# define dITEMS I32 items = SP - MARK
#endif
#ifndef dXSTARG
# define dXSTARG SV * targ = sv_newmortal()
#endif
#ifndef dAXMARK
# define dAXMARK I32 ax = POPMARK; \
register SV ** const mark = PL_stack_base + ax++
#endif
#ifndef XSprePUSH
# define XSprePUSH (sp = PL_stack_base + ax - 1)
#endif
#if (PERL_BCDVERSION < 0x5005000)
# undef XSRETURN
# define XSRETURN(off) \
STMT_START { \
PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
return; \
} STMT_END
#endif
#ifndef XSPROTO
# define XSPROTO(name) void name(pTHX_ CV* cv)
#endif
#ifndef SVfARG
# define SVfARG(p) ((void*)(p))
#endif
#ifndef PERL_ABS
# define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
#endif
#ifndef dVAR
# define dVAR dNOOP
#endif
#ifndef SVf
# define SVf "_"
#endif
#ifndef UTF8_MAXBYTES
# define UTF8_MAXBYTES UTF8_MAXLEN
#endif
#ifndef CPERLscope
# define CPERLscope(x) x
#endif
#ifndef PERL_HASH
# define PERL_HASH(hash,str,len) \
STMT_START { \
const char *s_PeRlHaSh = str; \
I32 i_PeRlHaSh = len; \
U32 hash_PeRlHaSh = 0; \
while (i_PeRlHaSh--) \
hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
(hash) = hash_PeRlHaSh; \
} STMT_END
#endif
#ifndef PERLIO_FUNCS_DECL
# ifdef PERLIO_FUNCS_CONST
# define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
# define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
# else
# define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
# define PERLIO_FUNCS_CAST(funcs) (funcs)
# endif
#endif
/* provide these typedefs for older perls */
#if (PERL_BCDVERSION < 0x5009003)
# ifdef ARGSproto
typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto);
# else
typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
# endif
typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
#endif
#ifndef isPSXSPC
# define isPSXSPC(c) (isSPACE(c) || (c) == '\v')
#endif
#ifndef isBLANK
# define isBLANK(c) ((c) == ' ' || (c) == '\t')
#endif
#ifdef EBCDIC
#ifndef isALNUMC
# define isALNUMC(c) isalnum(c)
#endif
#ifndef isASCII
# define isASCII(c) isascii(c)
#endif
#ifndef isCNTRL
# define isCNTRL(c) iscntrl(c)
#endif
#ifndef isGRAPH
# define isGRAPH(c) isgraph(c)
#endif
#ifndef isPRINT
# define isPRINT(c) isprint(c)
#endif
#ifndef isPUNCT
# define isPUNCT(c) ispunct(c)
#endif
#ifndef isXDIGIT
# define isXDIGIT(c) isxdigit(c)
#endif
#else
# if (PERL_BCDVERSION < 0x5010000)
/* Hint: isPRINT
* The implementation in older perl versions includes all of the
* isSPACE() characters, which is wrong. The version provided by
* Devel::PPPort always overrides a present buggy version.
*/
# undef isPRINT
# endif
#ifdef HAS_QUAD
# ifdef U64TYPE
# define WIDEST_UTYPE U64TYPE
# else
# define WIDEST_UTYPE Quad_t
# endif
#else
# define WIDEST_UTYPE U32
#endif
#ifndef isALNUMC
# define isALNUMC(c) (isALPHA(c) || isDIGIT(c))
#endif
#ifndef isASCII
# define isASCII(c) ((WIDEST_UTYPE) (c) <= 127)
#endif
#ifndef isCNTRL
# define isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127)
#endif
#ifndef isGRAPH
# define isGRAPH(c) (isALNUM(c) || isPUNCT(c))
#endif
#ifndef isPRINT
# define isPRINT(c) (((c) >= 32 && (c) < 127))
#endif
#ifndef isPUNCT
# define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126))
#endif
#ifndef isXDIGIT
# define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
#endif
#endif
/* Until we figure out how to support this in older perls... */
#if (PERL_BCDVERSION >= 0x5008000)
#ifndef HeUTF8
# define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \
SvUTF8(HeKEY_sv(he)) : \
(U32)HeKUTF8(he))
#endif
#endif
#ifndef C_ARRAY_LENGTH
# define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0]))
#endif
#ifndef C_ARRAY_END
# define C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a))
#endif
#ifndef PERL_SIGNALS_UNSAFE_FLAG
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
#if (PERL_BCDVERSION < 0x5008000)
# define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG
#else
# define D_PPP_PERL_SIGNALS_INIT 0
#endif
#if defined(NEED_PL_signals)
static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
#elif defined(NEED_PL_signals_GLOBAL)
U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
#else
extern U32 DPPP_(my_PL_signals);
#endif
#define PL_signals DPPP_(my_PL_signals)
#endif
/* Hint: PL_ppaddr
* Calling an op via PL_ppaddr requires passing a context argument
* for threaded builds. Since the context argument is different for
* 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
* automatically be defined as the correct argument.
*/
#if (PERL_BCDVERSION <= 0x5005005)
/* Replace: 1 */
# define PL_ppaddr ppaddr
# define PL_no_modify no_modify
/* Replace: 0 */
#endif
#if (PERL_BCDVERSION <= 0x5004005)
/* Replace: 1 */
# define PL_DBsignal DBsignal
# define PL_DBsingle DBsingle
# define PL_DBsub DBsub
# define PL_DBtrace DBtrace
# define PL_Sv Sv
# define PL_bufend bufend
# define PL_bufptr bufptr
# define PL_compiling compiling
# define PL_copline copline
# define PL_curcop curcop
# define PL_curstash curstash
# define PL_debstash debstash
# define PL_defgv defgv
# define PL_diehook diehook
# define PL_dirty dirty
# define PL_dowarn dowarn
# define PL_errgv errgv
# define PL_error_count error_count
# define PL_expect expect
# define PL_hexdigit hexdigit
# define PL_hints hints
# define PL_in_my in_my
# define PL_laststatval laststatval
# define PL_lex_state lex_state
# define PL_lex_stuff lex_stuff
# define PL_linestr linestr
# define PL_na na
# define PL_perl_destruct_level perl_destruct_level
# define PL_perldb perldb
# define PL_rsfp_filters rsfp_filters
# define PL_rsfp rsfp
# define PL_stack_base stack_base
# define PL_stack_sp stack_sp
# define PL_statcache statcache
# define PL_stdingv stdingv
# define PL_sv_arenaroot sv_arenaroot
# define PL_sv_no sv_no
# define PL_sv_undef sv_undef
# define PL_sv_yes sv_yes
# define PL_tainted tainted
# define PL_tainting tainting
# define PL_tokenbuf tokenbuf
/* Replace: 0 */
#endif
/* Warning: PL_parser
* For perl versions earlier than 5.9.5, this is an always
* non-NULL dummy. Also, it cannot be dereferenced. Don't
* use it if you can avoid is and unless you absolutely know
* what you're doing.
* If you always check that PL_parser is non-NULL, you can
* define DPPP_PL_parser_NO_DUMMY to avoid the creation of
* a dummy parser structure.
*/
#if (PERL_BCDVERSION >= 0x5009005)
# ifdef DPPP_PL_parser_NO_DUMMY
# define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
(croak("panic: PL_parser == NULL in %s:%d", \
__FILE__, __LINE__), (yy_parser *) NULL))->var)
# else
# ifdef DPPP_PL_parser_NO_DUMMY_WARNING
# define D_PPP_parser_dummy_warning(var)
# else
# define D_PPP_parser_dummy_warning(var) \
warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__),
# endif
# define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
(D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var)
#if defined(NEED_PL_parser)
static yy_parser DPPP_(dummy_PL_parser);
#elif defined(NEED_PL_parser_GLOBAL)
yy_parser DPPP_(dummy_PL_parser);
#else
extern yy_parser DPPP_(dummy_PL_parser);
#endif
# endif
/* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */
/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf
* Do not use this variable unless you know exactly what you're
* doing. It is internal to the perl parser and may change or even
* be removed in the future. As of perl 5.9.5, you have to check
* for (PL_parser != NULL) for this variable to have any effect.
* An always non-NULL PL_parser dummy is provided for earlier
* perl versions.
* If PL_parser is NULL when you try to access this variable, a
* dummy is being accessed instead and a warning is issued unless
* you define DPPP_PL_parser_NO_DUMMY_WARNING.
* If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access
* this variable will croak with a panic message.
*/
# define PL_expect D_PPP_my_PL_parser_var(expect)
# define PL_copline D_PPP_my_PL_parser_var(copline)
# define PL_rsfp D_PPP_my_PL_parser_var(rsfp)
# define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters)
# define PL_linestr D_PPP_my_PL_parser_var(linestr)
# define PL_bufptr D_PPP_my_PL_parser_var(bufptr)
# define PL_bufend D_PPP_my_PL_parser_var(bufend)
# define PL_lex_state D_PPP_my_PL_parser_var(lex_state)
# define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff)
# define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf)
# define PL_in_my D_PPP_my_PL_parser_var(in_my)
# define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash)
# define PL_error_count D_PPP_my_PL_parser_var(error_count)
#else
/* ensure that PL_parser != NULL and cannot be dereferenced */
# define PL_parser ((void *) 1)
#endif
#ifndef mPUSHs
# define mPUSHs(s) PUSHs(sv_2mortal(s))
#endif
#ifndef PUSHmortal
# define PUSHmortal PUSHs(sv_newmortal())
#endif
#ifndef mPUSHp
# define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l))
#endif
#ifndef mPUSHn
# define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n))
#endif
#ifndef mPUSHi
# define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i))
#endif
#ifndef mPUSHu
# define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u))
#endif
#ifndef mXPUSHs
# define mXPUSHs(s) XPUSHs(sv_2mortal(s))
#endif
#ifndef XPUSHmortal
# define XPUSHmortal XPUSHs(sv_newmortal())
#endif
#ifndef mXPUSHp
# define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END
#endif
#ifndef mXPUSHn
# define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END
#endif
#ifndef mXPUSHi
# define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END
#endif
#ifndef mXPUSHu
# define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END
#endif
/* Replace: 1 */
#ifndef call_sv
# define call_sv perl_call_sv
#endif
#ifndef call_pv
# define call_pv perl_call_pv
#endif
#ifndef call_argv
# define call_argv perl_call_argv
#endif
#ifndef call_method
# define call_method perl_call_method
#endif
#ifndef eval_sv
# define eval_sv perl_eval_sv
#endif
/* Replace: 0 */
#ifndef PERL_LOADMOD_DENY
# define PERL_LOADMOD_DENY 0x1
#endif
#ifndef PERL_LOADMOD_NOIMPORT
# define PERL_LOADMOD_NOIMPORT 0x2
#endif
#ifndef PERL_LOADMOD_IMPORT_OPS
# define PERL_LOADMOD_IMPORT_OPS 0x4
#endif
#ifndef G_METHOD
# define G_METHOD 64
# ifdef call_sv
# undef call_sv
# endif
# if (PERL_BCDVERSION < 0x5006000)
# define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \
(flags) & ~G_METHOD) : perl_call_sv(sv, flags))
# else
# define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \
(flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags))
# endif
#endif
/* Replace perl_eval_pv with eval_pv */
#ifndef eval_pv
#if defined(NEED_eval_pv)
static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
static
#else
extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
#endif
#ifdef eval_pv
# undef eval_pv
#endif
#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
#define Perl_eval_pv DPPP_(my_eval_pv)
#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
SV*
DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
{
dSP;
SV* sv = newSVpv(p, 0);
PUSHMARK(sp);
eval_sv(sv, G_SCALAR);
SvREFCNT_dec(sv);
SPAGAIN;
sv = POPs;
PUTBACK;
if (croak_on_error && SvTRUE(GvSV(errgv)))
croak(SvPVx(GvSV(errgv), na));
return sv;
}
#endif
#endif
#ifndef vload_module
#if defined(NEED_vload_module)
static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
static
#else
extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
#endif
#ifdef vload_module
# undef vload_module
#endif
#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d)
#define Perl_vload_module DPPP_(my_vload_module)
#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
void
DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args)
{
dTHR;
dVAR;
OP *veop, *imop;
OP * const modname = newSVOP(OP_CONST, 0, name);
/* 5.005 has a somewhat hacky force_normal that doesn't croak on
SvREADONLY() if PL_compling is true. Current perls take care in
ck_require() to correctly turn off SvREADONLY before calling
force_normal_flags(). This seems a better fix than fudging PL_compling
*/
SvREADONLY_off(((SVOP*)modname)->op_sv);
modname->op_private |= OPpCONST_BARE;
if (ver) {
veop = newSVOP(OP_CONST, 0, ver);
}
else
veop = NULL;
if (flags & PERL_LOADMOD_NOIMPORT) {
imop = sawparens(newNULLLIST());
}
else if (flags & PERL_LOADMOD_IMPORT_OPS) {
imop = va_arg(*args, OP*);
}
else {
SV *sv;
imop = NULL;
sv = va_arg(*args, SV*);
while (sv) {
imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
sv = va_arg(*args, SV*);
}
}
{
const line_t ocopline = PL_copline;
COP * const ocurcop = PL_curcop;
const int oexpect = PL_expect;
#if (PERL_BCDVERSION >= 0x5004000)
utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
veop, modname, imop);
#elif (PERL_BCDVERSION > 0x5003000)
utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
veop, modname, imop);
#else
utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
modname, imop);
#endif
PL_expect = oexpect;
PL_copline = ocopline;
PL_curcop = ocurcop;
}
}
#endif
#endif
#ifndef load_module
#if defined(NEED_load_module)
static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
static
#else
extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
#endif
#ifdef load_module
# undef load_module
#endif
#define load_module DPPP_(my_load_module)
#define Perl_load_module DPPP_(my_load_module)
#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL)
void
DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...)
{
va_list args;
va_start(args, ver);
vload_module(flags, name, ver, &args);
va_end(args);
}
#endif
#endif
#ifndef newRV_inc
# define newRV_inc(sv) newRV(sv) /* Replace */
#endif
#ifndef newRV_noinc
#if defined(NEED_newRV_noinc)
static SV * DPPP_(my_newRV_noinc)(SV *sv);
static
#else
extern SV * DPPP_(my_newRV_noinc)(SV *sv);
#endif
#ifdef newRV_noinc
# undef newRV_noinc
#endif
#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a)
#define Perl_newRV_noinc DPPP_(my_newRV_noinc)
#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL)
SV *
DPPP_(my_newRV_noinc)(SV *sv)
{
SV *rv = (SV *)newRV(sv);
SvREFCNT_dec(sv);
return rv;
}
#endif
#endif
/* Hint: newCONSTSUB
* Returns a CV* as of perl-5.7.1. This return value is not supported
* by Devel::PPPort.
*/
/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
#if defined(NEED_newCONSTSUB)
static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
static
#else
extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
#endif
#ifdef newCONSTSUB
# undef newCONSTSUB
#endif
#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
/* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */
/* (There's no PL_parser in perl < 5.005, so this is completely safe) */
#define D_PPP_PL_copline PL_copline
void
DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
{
U32 oldhints = PL_hints;
HV *old_cop_stash = PL_curcop->cop_stash;
HV *old_curstash = PL_curstash;
line_t oldline = PL_curcop->cop_line;
PL_curcop->cop_line = D_PPP_PL_copline;
PL_hints &= ~HINT_BLOCK_SCOPE;
if (stash)
PL_curstash = PL_curcop->cop_stash = stash;
newSUB(
#if (PERL_BCDVERSION < 0x5003022)
start_subparse(),
#elif (PERL_BCDVERSION == 0x5003022)
start_subparse(0),
#else /* 5.003_23 onwards */
start_subparse(FALSE, 0),
#endif
newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */
newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
);
PL_hints = oldhints;
PL_curcop->cop_stash = old_cop_stash;
PL_curstash = old_curstash;
PL_curcop->cop_line = oldline;
}
#endif
#endif
/*
* Boilerplate macros for initializing and accessing interpreter-local
* data from C. All statics in extensions should be reworked to use
* this, if you want to make the extension thread-safe. See ext/re/re.xs
* for an example of the use of these macros.
*
* Code that uses these macros is responsible for the following:
* 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
* 2. Declare a typedef named my_cxt_t that is a structure that contains
* all the data that needs to be interpreter-local.
* 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
* 4. Use the MY_CXT_INIT macro such that it is called exactly once
* (typically put in the BOOT: section).
* 5. Use the members of the my_cxt_t structure everywhere as
* MY_CXT.member.
* 6. Use the dMY_CXT macro (a declaration) in all the functions that
* access MY_CXT.
*/
#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT)
#ifndef START_MY_CXT
/* This must appear in all extensions that define a my_cxt_t structure,
* right after the definition (i.e. at file scope). The non-threads
* case below uses it to declare the data as static. */
#define START_MY_CXT
#if (PERL_BCDVERSION < 0x5004068)
/* Fetches the SV that keeps the per-interpreter data. */
#define dMY_CXT_SV \
SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
#else /* >= perl5.004_68 */
#define dMY_CXT_SV \
SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \
sizeof(MY_CXT_KEY)-1, TRUE)
#endif /* < perl5.004_68 */
/* This declaration should be used within all functions that use the
* interpreter-local data. */
#define dMY_CXT \
dMY_CXT_SV; \
my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
/* Creates and zeroes the per-interpreter data.
* (We allocate my_cxtp in a Perl SV so that it will be released when
* the interpreter goes away.) */
#define MY_CXT_INIT \
dMY_CXT_SV; \
/* newSV() allocates one more than needed */ \
my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
Zero(my_cxtp, 1, my_cxt_t); \
sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
/* This macro must be used to access members of the my_cxt_t structure.
* e.g. MYCXT.some_data */
#define MY_CXT (*my_cxtp)
/* Judicious use of these macros can reduce the number of times dMY_CXT
* is used. Use is similar to pTHX, aTHX etc. */
#define pMY_CXT my_cxt_t *my_cxtp
#define pMY_CXT_ pMY_CXT,
#define _pMY_CXT ,pMY_CXT
#define aMY_CXT my_cxtp
#define aMY_CXT_ aMY_CXT,
#define _aMY_CXT ,aMY_CXT
#endif /* START_MY_CXT */
#ifndef MY_CXT_CLONE
/* Clones the per-interpreter data. */
#define MY_CXT_CLONE \
dMY_CXT_SV; \
my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
#endif
#else /* single interpreter */
#ifndef START_MY_CXT
#define START_MY_CXT static my_cxt_t my_cxt;
#define dMY_CXT_SV dNOOP
#define dMY_CXT dNOOP
#define MY_CXT_INIT NOOP
#define MY_CXT my_cxt
#define pMY_CXT void
#define pMY_CXT_
#define _pMY_CXT
#define aMY_CXT
#define aMY_CXT_
#define _aMY_CXT
#endif /* START_MY_CXT */
#ifndef MY_CXT_CLONE
#define MY_CXT_CLONE NOOP
#endif
#endif
#ifndef IVdf
# if IVSIZE == LONGSIZE
# define IVdf "ld"
# define UVuf "lu"
# define UVof "lo"
# define UVxf "lx"
# define UVXf "lX"
# elif IVSIZE == INTSIZE
# define IVdf "d"
# define UVuf "u"
# define UVof "o"
# define UVxf "x"
# define UVXf "X"
# else
# error "cannot define IV/UV formats"
# endif
#endif
#ifndef NVef
# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000)
/* Not very likely, but let's try anyway. */
# define NVef PERL_PRIeldbl
# define NVff PERL_PRIfldbl
# define NVgf PERL_PRIgldbl
# else
# define NVef "e"
# define NVff "f"
# define NVgf "g"
# endif
#endif
#ifndef SvREFCNT_inc
# ifdef PERL_USE_GCC_BRACE_GROUPS
# define SvREFCNT_inc(sv) \
({ \
SV * const _sv = (SV*)(sv); \
if (_sv) \
(SvREFCNT(_sv))++; \
_sv; \
})
# else
# define SvREFCNT_inc(sv) \
((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
# endif
#endif
#ifndef SvREFCNT_inc_simple
# ifdef PERL_USE_GCC_BRACE_GROUPS
# define SvREFCNT_inc_simple(sv) \
({ \
if (sv) \
(SvREFCNT(sv))++; \
(SV *)(sv); \
})
# else
# define SvREFCNT_inc_simple(sv) \
((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
# endif
#endif
#ifndef SvREFCNT_inc_NN
# ifdef PERL_USE_GCC_BRACE_GROUPS
# define SvREFCNT_inc_NN(sv) \
({ \
SV * const _sv = (SV*)(sv); \
SvREFCNT(_sv)++; \
_sv; \
})
# else
# define SvREFCNT_inc_NN(sv) \
(PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
# endif
#endif
#ifndef SvREFCNT_inc_void
# ifdef PERL_USE_GCC_BRACE_GROUPS
# define SvREFCNT_inc_void(sv) \
({ \
SV * const _sv = (SV*)(sv); \
if (_sv) \
(void)(SvREFCNT(_sv)++); \
})
# else
# define SvREFCNT_inc_void(sv) \
(void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
# endif
#endif
#ifndef SvREFCNT_inc_simple_void
# define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
#endif
#ifndef SvREFCNT_inc_simple_NN
# define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv))
#endif
#ifndef SvREFCNT_inc_void_NN
# define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
#endif
#ifndef SvREFCNT_inc_simple_void_NN
# define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
#endif
#ifndef newSV_type
#if defined(NEED_newSV_type)
static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
static
#else
extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
#endif
#ifdef newSV_type
# undef newSV_type
#endif
#define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a)
#define Perl_newSV_type DPPP_(my_newSV_type)
#if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL)
SV*
DPPP_(my_newSV_type)(pTHX_ svtype const t)
{
SV* const sv = newSV(0);
sv_upgrade(sv, t);
return sv;
}
#endif
#endif
#if (PERL_BCDVERSION < 0x5006000)
# define D_PPP_CONSTPV_ARG(x) ((char *) (x))
#else
# define D_PPP_CONSTPV_ARG(x) (x)
#endif
#ifndef newSVpvn
# define newSVpvn(data,len) ((data) \
? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
: newSV(0))
#endif
#ifndef newSVpvn_utf8
# define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
#endif
#ifndef SVf_UTF8
# define SVf_UTF8 0
#endif
#ifndef newSVpvn_flags
#if defined(NEED_newSVpvn_flags)
static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
static
#else
extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
#endif
#ifdef newSVpvn_flags
# undef newSVpvn_flags
#endif
#define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c)
#define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags)
#if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL)
SV *
DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags)
{
SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len);
SvFLAGS(sv) |= (flags & SVf_UTF8);
return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
}
#endif
#endif
/* Backwards compatibility stuff... :-( */
#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen)
# define NEED_sv_2pv_flags
#endif
#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL)
# define NEED_sv_2pv_flags_GLOBAL
#endif
/* Hint: sv_2pv_nolen
* Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
*/
#ifndef sv_2pv_nolen
# define sv_2pv_nolen(sv) SvPV_nolen(sv)
#endif
#ifdef SvPVbyte
/* Hint: SvPVbyte
* Does not work in perl-5.6.1, ppport.h implements a version
* borrowed from perl-5.7.3.
*/
#if (PERL_BCDVERSION < 0x5007000)
#if defined(NEED_sv_2pvbyte)
static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
static
#else
extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
#endif
#ifdef sv_2pvbyte
# undef sv_2pvbyte
#endif
#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b)
#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte)
#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
char *
DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp)
{
sv_utf8_downgrade(sv,0);
return SvPV(sv,*lp);
}
#endif
/* Hint: sv_2pvbyte
* Use the SvPVbyte() macro instead of sv_2pvbyte().
*/
#undef SvPVbyte
#define SvPVbyte(sv, lp) \
((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \
? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
#endif
#else
# define SvPVbyte SvPV
# define sv_2pvbyte sv_2pv
#endif
#ifndef sv_2pvbyte_nolen
# define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv)
#endif
/* Hint: sv_pvn
* Always use the SvPV() macro instead of sv_pvn().
*/
/* Hint: sv_pvn_force
* Always use the SvPV_force() macro instead of sv_pvn_force().
*/
/* If these are undefined, they're not handled by the core anyway */
#ifndef SV_IMMEDIATE_UNREF
# define SV_IMMEDIATE_UNREF 0
#endif
#ifndef SV_GMAGIC
# define SV_GMAGIC 0
#endif
#ifndef SV_COW_DROP_PV
# define SV_COW_DROP_PV 0
#endif
#ifndef SV_UTF8_NO_ENCODING
# define SV_UTF8_NO_ENCODING 0
#endif
#ifndef SV_NOSTEAL
# define SV_NOSTEAL 0
#endif
#ifndef SV_CONST_RETURN
# define SV_CONST_RETURN 0
#endif
#ifndef SV_MUTABLE_RETURN
# define SV_MUTABLE_RETURN 0
#endif
#ifndef SV_SMAGIC
# define SV_SMAGIC 0
#endif
#ifndef SV_HAS_TRAILING_NUL
# define SV_HAS_TRAILING_NUL 0
#endif
#ifndef SV_COW_SHARED_HASH_KEYS
# define SV_COW_SHARED_HASH_KEYS 0
#endif
#if (PERL_BCDVERSION < 0x5007002)
#if defined(NEED_sv_2pv_flags)
static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
static
#else
extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
#endif
#ifdef sv_2pv_flags
# undef sv_2pv_flags
#endif
#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c)
#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags)
#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL)
char *
DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
{
STRLEN n_a = (STRLEN) flags;
return sv_2pv(sv, lp ? lp : &n_a);
}
#endif
#if defined(NEED_sv_pvn_force_flags)
static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
static
#else
extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
#endif
#ifdef sv_pvn_force_flags
# undef sv_pvn_force_flags
#endif
#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c)
#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags)
#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL)
char *
DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
{
STRLEN n_a = (STRLEN) flags;
return sv_pvn_force(sv, lp ? lp : &n_a);
}
#endif
#endif
#if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) )
# define DPPP_SVPV_NOLEN_LP_ARG &PL_na
#else
# define DPPP_SVPV_NOLEN_LP_ARG 0
#endif
#ifndef SvPV_const
# define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC)
#endif
#ifndef SvPV_mutable
# define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
#endif
#ifndef SvPV_flags
# define SvPV_flags(sv, lp, flags) \
((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
#endif
#ifndef SvPV_flags_const
# define SvPV_flags_const(sv, lp, flags) \
((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
(const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
#endif
#ifndef SvPV_flags_const_nolen
# define SvPV_flags_const_nolen(sv, flags) \
((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
? SvPVX_const(sv) : \
(const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN))
#endif
#ifndef SvPV_flags_mutable
# define SvPV_flags_mutable(sv, lp, flags) \
((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
#endif
#ifndef SvPV_force
# define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
#endif
#ifndef SvPV_force_nolen
# define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
#endif
#ifndef SvPV_force_mutable
# define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
#endif
#ifndef SvPV_force_nomg
# define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
#endif
#ifndef SvPV_force_nomg_nolen
# define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
#endif
#ifndef SvPV_force_flags
# define SvPV_force_flags(sv, lp, flags) \
((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
#endif
#ifndef SvPV_force_flags_nolen
# define SvPV_force_flags_nolen(sv, flags) \
((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags))
#endif
#ifndef SvPV_force_flags_mutable
# define SvPV_force_flags_mutable(sv, lp, flags) \
((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
: sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
#endif
#ifndef SvPV_nolen
# define SvPV_nolen(sv) \
((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC))
#endif
#ifndef SvPV_nolen_const
# define SvPV_nolen_const(sv) \
((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN))
#endif
#ifndef SvPV_nomg
# define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
#endif
#ifndef SvPV_nomg_const
# define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
#endif
#ifndef SvPV_nomg_const_nolen
# define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
#endif
#ifndef SvPV_nomg_nolen
# define SvPV_nomg_nolen(sv) ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0))
#endif
#ifndef SvPV_renew
# define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \
SvPV_set((sv), (char *) saferealloc( \
(Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \
} STMT_END
#endif
#ifndef SvMAGIC_set
# define SvMAGIC_set(sv, val) \
STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
(((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
#endif
#if (PERL_BCDVERSION < 0x5009003)
#ifndef SvPVX_const
# define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv)))
#endif
#ifndef SvPVX_mutable
# define SvPVX_mutable(sv) (0 + SvPVX(sv))
#endif
#ifndef SvRV_set
# define SvRV_set(sv, val) \
STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
(((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
#endif
#else
#ifndef SvPVX_const
# define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))
#endif
#ifndef SvPVX_mutable
# define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)
#endif
#ifndef SvRV_set
# define SvRV_set(sv, val) \
STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
((sv)->sv_u.svu_rv = (val)); } STMT_END
#endif
#endif
#ifndef SvSTASH_set
# define SvSTASH_set(sv, val) \
STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
(((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
#endif
#if (PERL_BCDVERSION < 0x5004000)
#ifndef SvUV_set
# define SvUV_set(sv, val) \
STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
(((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
#endif
#else
#ifndef SvUV_set
# define SvUV_set(sv, val) \
STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
(((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
#endif
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf)
#if defined(NEED_vnewSVpvf)
static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
static
#else
extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
#endif
#ifdef vnewSVpvf
# undef vnewSVpvf
#endif
#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b)
#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf)
#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL)
SV *
DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
{
register SV *sv = newSV(0);
sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
return sv;
}
#endif
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf)
# define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf)
# define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg)
#if defined(NEED_sv_catpvf_mg)
static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
static
#else
extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
#endif
#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
void
DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
{
va_list args;
va_start(args, pat);
sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
SvSETMAGIC(sv);
va_end(args);
}
#endif
#endif
#ifdef PERL_IMPLICIT_CONTEXT
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext)
#if defined(NEED_sv_catpvf_mg_nocontext)
static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
static
#else
extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
#endif
#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
void
DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
{
dTHX;
va_list args;
va_start(args, pat);
sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
SvSETMAGIC(sv);
va_end(args);
}
#endif
#endif
#endif
/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */
#ifndef sv_catpvf_mg
# ifdef PERL_IMPLICIT_CONTEXT
# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
# else
# define sv_catpvf_mg Perl_sv_catpvf_mg
# endif
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg)
# define sv_vcatpvf_mg(sv, pat, args) \
STMT_START { \
sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
SvSETMAGIC(sv); \
} STMT_END
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg)
#if defined(NEED_sv_setpvf_mg)
static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
static
#else
extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
#endif
#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
void
DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
{
va_list args;
va_start(args, pat);
sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
SvSETMAGIC(sv);
va_end(args);
}
#endif
#endif
#ifdef PERL_IMPLICIT_CONTEXT
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext)
#if defined(NEED_sv_setpvf_mg_nocontext)
static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
static
#else
extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
#endif
#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
void
DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
{
dTHX;
va_list args;
va_start(args, pat);
sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
SvSETMAGIC(sv);
va_end(args);
}
#endif
#endif
#endif
/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */
#ifndef sv_setpvf_mg
# ifdef PERL_IMPLICIT_CONTEXT
# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
# else
# define sv_setpvf_mg Perl_sv_setpvf_mg
# endif
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg)
# define sv_vsetpvf_mg(sv, pat, args) \
STMT_START { \
sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
SvSETMAGIC(sv); \
} STMT_END
#endif
/* Hint: newSVpvn_share
* The SVs created by this function only mimic the behaviour of
* shared PVs without really being shared. Only use if you know
* what you're doing.
*/
#ifndef newSVpvn_share
#if defined(NEED_newSVpvn_share)
static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
static
#else
extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
#endif
#ifdef newSVpvn_share
# undef newSVpvn_share
#endif
#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c)
#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share)
#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL)
SV *
DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash)
{
SV *sv;
if (len < 0)
len = -len;
if (!hash)
PERL_HASH(hash, (char*) src, len);
sv = newSVpvn((char *) src, len);
sv_upgrade(sv, SVt_PVIV);
SvIVX(sv) = hash;
SvREADONLY_on(sv);
SvPOK_on(sv);
return sv;
}
#endif
#endif
#ifndef SvSHARED_HASH
# define SvSHARED_HASH(sv) (0 + SvUVX(sv))
#endif
#ifndef HvNAME_get
# define HvNAME_get(hv) HvNAME(hv)
#endif
#ifndef HvNAMELEN_get
# define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
#endif
#ifndef gv_fetchpvn_flags
#if defined(NEED_gv_fetchpvn_flags)
static GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types);
static
#else
extern GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types);
#endif
#ifdef gv_fetchpvn_flags
# undef gv_fetchpvn_flags
#endif
#define gv_fetchpvn_flags(a,b,c,d) DPPP_(my_gv_fetchpvn_flags)(aTHX_ a,b,c,d)
#define Perl_gv_fetchpvn_flags DPPP_(my_gv_fetchpvn_flags)
#if defined(NEED_gv_fetchpvn_flags) || defined(NEED_gv_fetchpvn_flags_GLOBAL)
GV*
DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types) {
char *namepv = savepvn(name, len);
GV* stash = gv_fetchpv(namepv, TRUE, SVt_PVHV);
Safefree(namepv);
return stash;
}
#endif
#endif
#ifndef GvSVn
# define GvSVn(gv) GvSV(gv)
#endif
#ifndef isGV_with_GP
# define isGV_with_GP(gv) isGV(gv)
#endif
#ifndef gv_fetchsv
# define gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt)
#endif
#ifndef get_cvn_flags
# define get_cvn_flags(name, namelen, flags) get_cv(name, flags)
#endif
#ifndef gv_init_pvn
# define gv_init_pvn(gv, stash, ptr, len, flags) gv_init(gv, stash, ptr, len, flags & GV_ADDMULTI ? TRUE : FALSE)
#endif
#ifndef WARN_ALL
# define WARN_ALL 0
#endif
#ifndef WARN_CLOSURE
# define WARN_CLOSURE 1
#endif
#ifndef WARN_DEPRECATED
# define WARN_DEPRECATED 2
#endif
#ifndef WARN_EXITING
# define WARN_EXITING 3
#endif
#ifndef WARN_GLOB
# define WARN_GLOB 4
#endif
#ifndef WARN_IO
# define WARN_IO 5
#endif
#ifndef WARN_CLOSED
# define WARN_CLOSED 6
#endif
#ifndef WARN_EXEC
# define WARN_EXEC 7
#endif
#ifndef WARN_LAYER
# define WARN_LAYER 8
#endif
#ifndef WARN_NEWLINE
# define WARN_NEWLINE 9
#endif
#ifndef WARN_PIPE
# define WARN_PIPE 10
#endif
#ifndef WARN_UNOPENED
# define WARN_UNOPENED 11
#endif
#ifndef WARN_MISC
# define WARN_MISC 12
#endif
#ifndef WARN_NUMERIC
# define WARN_NUMERIC 13
#endif
#ifndef WARN_ONCE
# define WARN_ONCE 14
#endif
#ifndef WARN_OVERFLOW
# define WARN_OVERFLOW 15
#endif
#ifndef WARN_PACK
# define WARN_PACK 16
#endif
#ifndef WARN_PORTABLE
# define WARN_PORTABLE 17
#endif
#ifndef WARN_RECURSION
# define WARN_RECURSION 18
#endif
#ifndef WARN_REDEFINE
# define WARN_REDEFINE 19
#endif
#ifndef WARN_REGEXP
# define WARN_REGEXP 20
#endif
#ifndef WARN_SEVERE
# define WARN_SEVERE 21
#endif
#ifndef WARN_DEBUGGING
# define WARN_DEBUGGING 22
#endif
#ifndef WARN_INPLACE
# define WARN_INPLACE 23
#endif
#ifndef WARN_INTERNAL
# define WARN_INTERNAL 24
#endif
#ifndef WARN_MALLOC
# define WARN_MALLOC 25
#endif
#ifndef WARN_SIGNAL
# define WARN_SIGNAL 26
#endif
#ifndef WARN_SUBSTR
# define WARN_SUBSTR 27
#endif
#ifndef WARN_SYNTAX
# define WARN_SYNTAX 28
#endif
#ifndef WARN_AMBIGUOUS
# define WARN_AMBIGUOUS 29
#endif
#ifndef WARN_BAREWORD
# define WARN_BAREWORD 30
#endif
#ifndef WARN_DIGIT
# define WARN_DIGIT 31
#endif
#ifndef WARN_PARENTHESIS
# define WARN_PARENTHESIS 32
#endif
#ifndef WARN_PRECEDENCE
# define WARN_PRECEDENCE 33
#endif
#ifndef WARN_PRINTF
# define WARN_PRINTF 34
#endif
#ifndef WARN_PROTOTYPE
# define WARN_PROTOTYPE 35
#endif
#ifndef WARN_QW
# define WARN_QW 36
#endif
#ifndef WARN_RESERVED
# define WARN_RESERVED 37
#endif
#ifndef WARN_SEMICOLON
# define WARN_SEMICOLON 38
#endif
#ifndef WARN_TAINT
# define WARN_TAINT 39
#endif
#ifndef WARN_THREADS
# define WARN_THREADS 40
#endif
#ifndef WARN_UNINITIALIZED
# define WARN_UNINITIALIZED 41
#endif
#ifndef WARN_UNPACK
# define WARN_UNPACK 42
#endif
#ifndef WARN_UNTIE
# define WARN_UNTIE 43
#endif
#ifndef WARN_UTF8
# define WARN_UTF8 44
#endif
#ifndef WARN_VOID
# define WARN_VOID 45
#endif
#ifndef WARN_ASSERTIONS
# define WARN_ASSERTIONS 46
#endif
#ifndef packWARN
# define packWARN(a) (a)
#endif
#ifndef ckWARN
# ifdef G_WARN_ON
# define ckWARN(a) (PL_dowarn & G_WARN_ON)
# else
# define ckWARN(a) PL_dowarn
# endif
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner)
#if defined(NEED_warner)
static void DPPP_(my_warner)(U32 err, const char *pat, ...);
static
#else
extern void DPPP_(my_warner)(U32 err, const char *pat, ...);
#endif
#define Perl_warner DPPP_(my_warner)
#if defined(NEED_warner) || defined(NEED_warner_GLOBAL)
void
DPPP_(my_warner)(U32 err, const char *pat, ...)
{
SV *sv;
va_list args;
PERL_UNUSED_ARG(err);
va_start(args, pat);
sv = vnewSVpvf(pat, &args);
va_end(args);
sv_2mortal(sv);
warn("%s", SvPV_nolen(sv));
}
#define warner Perl_warner
#define Perl_warner_nocontext Perl_warner
#endif
#endif
/* concatenating with "" ensures that only literal strings are accepted as argument
* note that STR_WITH_LEN() can't be used as argument to macros or functions that
* under some configurations might be macros
*/
#ifndef STR_WITH_LEN
# define STR_WITH_LEN(s) (s ""), (sizeof(s)-1)
#endif
#ifndef newSVpvs
# define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1)
#endif
#ifndef newSVpvs_flags
# define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags)
#endif
#ifndef newSVpvs_share
# define newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0)
#endif
#ifndef sv_catpvs
# define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1)
#endif
#ifndef sv_setpvs
# define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1)
#endif
#ifndef hv_fetchs
# define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval)
#endif
#ifndef hv_stores
# define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0)
#endif
#ifndef gv_fetchpvs
# define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt)
#endif
#ifndef gv_stashpvs
# define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags)
#endif
#ifndef get_cvs
# define get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags)
#endif
#ifndef SvGETMAGIC
# define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
#endif
/* Some random bits for sv_unmagicext. These should probably be pulled in for
real and organized at some point */
#ifndef HEf_SVKEY
# define HEf_SVKEY -2
#endif
#ifndef MUTABLE_PTR
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
# define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
#else
# define MUTABLE_PTR(p) ((void *) (p))
#endif
#endif
#ifndef MUTABLE_SV
# define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p))
#endif
/* end of random bits */
#ifndef PERL_MAGIC_sv
# define PERL_MAGIC_sv '\0'
#endif
#ifndef PERL_MAGIC_overload
# define PERL_MAGIC_overload 'A'
#endif
#ifndef PERL_MAGIC_overload_elem
# define PERL_MAGIC_overload_elem 'a'
#endif
#ifndef PERL_MAGIC_overload_table
# define PERL_MAGIC_overload_table 'c'
#endif
#ifndef PERL_MAGIC_bm
# define PERL_MAGIC_bm 'B'
#endif
#ifndef PERL_MAGIC_regdata
# define PERL_MAGIC_regdata 'D'
#endif
#ifndef PERL_MAGIC_regdatum
# define PERL_MAGIC_regdatum 'd'
#endif
#ifndef PERL_MAGIC_env
# define PERL_MAGIC_env 'E'
#endif
#ifndef PERL_MAGIC_envelem
# define PERL_MAGIC_envelem 'e'
#endif
#ifndef PERL_MAGIC_fm
# define PERL_MAGIC_fm 'f'
#endif
#ifndef PERL_MAGIC_regex_global
# define PERL_MAGIC_regex_global 'g'
#endif
#ifndef PERL_MAGIC_isa
# define PERL_MAGIC_isa 'I'
#endif
#ifndef PERL_MAGIC_isaelem
# define PERL_MAGIC_isaelem 'i'
#endif
#ifndef PERL_MAGIC_nkeys
# define PERL_MAGIC_nkeys 'k'
#endif
#ifndef PERL_MAGIC_dbfile
# define PERL_MAGIC_dbfile 'L'
#endif
#ifndef PERL_MAGIC_dbline
# define PERL_MAGIC_dbline 'l'
#endif
#ifndef PERL_MAGIC_mutex
# define PERL_MAGIC_mutex 'm'
#endif
#ifndef PERL_MAGIC_shared
# define PERL_MAGIC_shared 'N'
#endif
#ifndef PERL_MAGIC_shared_scalar
# define PERL_MAGIC_shared_scalar 'n'
#endif
#ifndef PERL_MAGIC_collxfrm
# define PERL_MAGIC_collxfrm 'o'
#endif
#ifndef PERL_MAGIC_tied
# define PERL_MAGIC_tied 'P'
#endif
#ifndef PERL_MAGIC_tiedelem
# define PERL_MAGIC_tiedelem 'p'
#endif
#ifndef PERL_MAGIC_tiedscalar
# define PERL_MAGIC_tiedscalar 'q'
#endif
#ifndef PERL_MAGIC_qr
# define PERL_MAGIC_qr 'r'
#endif
#ifndef PERL_MAGIC_sig
# define PERL_MAGIC_sig 'S'
#endif
#ifndef PERL_MAGIC_sigelem
# define PERL_MAGIC_sigelem 's'
#endif
#ifndef PERL_MAGIC_taint
# define PERL_MAGIC_taint 't'
#endif
#ifndef PERL_MAGIC_uvar
# define PERL_MAGIC_uvar 'U'
#endif
#ifndef PERL_MAGIC_uvar_elem
# define PERL_MAGIC_uvar_elem 'u'
#endif
#ifndef PERL_MAGIC_vstring
# define PERL_MAGIC_vstring 'V'
#endif
#ifndef PERL_MAGIC_vec
# define PERL_MAGIC_vec 'v'
#endif
#ifndef PERL_MAGIC_utf8
# define PERL_MAGIC_utf8 'w'
#endif
#ifndef PERL_MAGIC_substr
# define PERL_MAGIC_substr 'x'
#endif
#ifndef PERL_MAGIC_defelem
# define PERL_MAGIC_defelem 'y'
#endif
#ifndef PERL_MAGIC_glob
# define PERL_MAGIC_glob '*'
#endif
#ifndef PERL_MAGIC_arylen
# define PERL_MAGIC_arylen '#'
#endif
#ifndef PERL_MAGIC_pos
# define PERL_MAGIC_pos '.'
#endif
#ifndef PERL_MAGIC_backref
# define PERL_MAGIC_backref '<'
#endif
#ifndef PERL_MAGIC_ext
# define PERL_MAGIC_ext '~'
#endif
/* That's the best we can do... */
#ifndef sv_catpvn_nomg
# define sv_catpvn_nomg sv_catpvn
#endif
#ifndef sv_catsv_nomg
# define sv_catsv_nomg sv_catsv
#endif
#ifndef sv_setsv_nomg
# define sv_setsv_nomg sv_setsv
#endif
#ifndef sv_pvn_nomg
# define sv_pvn_nomg sv_pvn
#endif
#ifndef SvIV_nomg
# define SvIV_nomg SvIV
#endif
#ifndef SvUV_nomg
# define SvUV_nomg SvUV
#endif
#ifndef sv_catpv_mg
# define sv_catpv_mg(sv, ptr) \
STMT_START { \
SV *TeMpSv = sv; \
sv_catpv(TeMpSv,ptr); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_catpvn_mg
# define sv_catpvn_mg(sv, ptr, len) \
STMT_START { \
SV *TeMpSv = sv; \
sv_catpvn(TeMpSv,ptr,len); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_catsv_mg
# define sv_catsv_mg(dsv, ssv) \
STMT_START { \
SV *TeMpSv = dsv; \
sv_catsv(TeMpSv,ssv); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_setiv_mg
# define sv_setiv_mg(sv, i) \
STMT_START { \
SV *TeMpSv = sv; \
sv_setiv(TeMpSv,i); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_setnv_mg
# define sv_setnv_mg(sv, num) \
STMT_START { \
SV *TeMpSv = sv; \
sv_setnv(TeMpSv,num); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_setpv_mg
# define sv_setpv_mg(sv, ptr) \
STMT_START { \
SV *TeMpSv = sv; \
sv_setpv(TeMpSv,ptr); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_setpvn_mg
# define sv_setpvn_mg(sv, ptr, len) \
STMT_START { \
SV *TeMpSv = sv; \
sv_setpvn(TeMpSv,ptr,len); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_setsv_mg
# define sv_setsv_mg(dsv, ssv) \
STMT_START { \
SV *TeMpSv = dsv; \
sv_setsv(TeMpSv,ssv); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_setuv_mg
# define sv_setuv_mg(sv, i) \
STMT_START { \
SV *TeMpSv = sv; \
sv_setuv(TeMpSv,i); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef sv_usepvn_mg
# define sv_usepvn_mg(sv, ptr, len) \
STMT_START { \
SV *TeMpSv = sv; \
sv_usepvn(TeMpSv,ptr,len); \
SvSETMAGIC(TeMpSv); \
} STMT_END
#endif
#ifndef SvVSTRING_mg
# define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
#endif
/* Hint: sv_magic_portable
* This is a compatibility function that is only available with
* Devel::PPPort. It is NOT in the perl core.
* Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when
* it is being passed a name pointer with namlen == 0. In that
* case, perl 5.8.0 and later store the pointer, not a copy of it.
* The compatibility can be provided back to perl 5.004. With
* earlier versions, the code will not compile.
*/
#if (PERL_BCDVERSION < 0x5004000)
/* code that uses sv_magic_portable will not compile */
#elif (PERL_BCDVERSION < 0x5008000)
# define sv_magic_portable(sv, obj, how, name, namlen) \
STMT_START { \
SV *SvMp_sv = (sv); \
char *SvMp_name = (char *) (name); \
I32 SvMp_namlen = (namlen); \
if (SvMp_name && SvMp_namlen == 0) \
{ \
MAGIC *mg; \
sv_magic(SvMp_sv, obj, how, 0, 0); \
mg = SvMAGIC(SvMp_sv); \
mg->mg_len = -42; /* XXX: this is the tricky part */ \
mg->mg_ptr = SvMp_name; \
} \
else \
{ \
sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \
} \
} STMT_END
#else
# define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e)
#endif
#if !defined(mg_findext)
#if defined(NEED_mg_findext)
static MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl);
static
#else
extern MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl);
#endif
#define mg_findext DPPP_(my_mg_findext)
#define Perl_mg_findext DPPP_(my_mg_findext)
#if defined(NEED_mg_findext) || defined(NEED_mg_findext_GLOBAL)
MAGIC *
DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl) {
if (sv) {
MAGIC *mg;
#ifdef AvPAD_NAMELIST
assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv)));
#endif
for (mg = SvMAGIC (sv); mg; mg = mg->mg_moremagic) {
if (mg->mg_type == type && mg->mg_virtual == vtbl)
return mg;
}
}
return NULL;
}
#endif
#endif
#if !defined(sv_unmagicext)
#if defined(NEED_sv_unmagicext)
static int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl);
static
#else
extern int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl);
#endif
#ifdef sv_unmagicext
# undef sv_unmagicext
#endif
#define sv_unmagicext(a,b,c) DPPP_(my_sv_unmagicext)(aTHX_ a,b,c)
#define Perl_sv_unmagicext DPPP_(my_sv_unmagicext)
#if defined(NEED_sv_unmagicext) || defined(NEED_sv_unmagicext_GLOBAL)
int
DPPP_(my_sv_unmagicext)(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
{
MAGIC* mg;
MAGIC** mgp;
if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
return 0;
mgp = &(SvMAGIC(sv));
for (mg = *mgp; mg; mg = *mgp) {
const MGVTBL* const virt = mg->mg_virtual;
if (mg->mg_type == type && virt == vtbl) {
*mgp = mg->mg_moremagic;
if (virt && virt->svt_free)
virt->svt_free(aTHX_ sv, mg);
if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
if (mg->mg_len > 0)
Safefree(mg->mg_ptr);
else if (mg->mg_len == HEf_SVKEY) /* Questionable on older perls... */
SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
else if (mg->mg_type == PERL_MAGIC_utf8)
Safefree(mg->mg_ptr);
}
if (mg->mg_flags & MGf_REFCOUNTED)
SvREFCNT_dec(mg->mg_obj);
Safefree(mg);
}
else
mgp = &mg->mg_moremagic;
}
if (SvMAGIC(sv)) {
if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
mg_magical(sv); /* else fix the flags now */
}
else {
SvMAGICAL_off(sv);
SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
}
return 0;
}
#endif
#endif
#ifdef USE_ITHREADS
#ifndef CopFILE
# define CopFILE(c) ((c)->cop_file)
#endif
#ifndef CopFILEGV
# define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
#endif
#ifndef CopFILE_set
# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv))
#endif
#ifndef CopFILESV
# define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
#endif
#ifndef CopFILEAV
# define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
#endif
#ifndef CopSTASHPV
# define CopSTASHPV(c) ((c)->cop_stashpv)
#endif
#ifndef CopSTASHPV_set
# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
#endif
#ifndef CopSTASH
# define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
#endif
#ifndef CopSTASH_set
# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
#endif
#ifndef CopSTASH_eq
# define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
|| (CopSTASHPV(c) && HvNAME(hv) \
&& strEQ(CopSTASHPV(c), HvNAME(hv)))))
#endif
#else
#ifndef CopFILEGV
# define CopFILEGV(c) ((c)->cop_filegv)
#endif
#ifndef CopFILEGV_set
# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
#endif
#ifndef CopFILE_set
# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv))
#endif
#ifndef CopFILESV
# define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
#endif
#ifndef CopFILEAV
# define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
#endif
#ifndef CopFILE
# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
#endif
#ifndef CopSTASH
# define CopSTASH(c) ((c)->cop_stash)
#endif
#ifndef CopSTASH_set
# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv))
#endif
#ifndef CopSTASHPV
# define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
#endif
#ifndef CopSTASHPV_set
# define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
#endif
#ifndef CopSTASH_eq
# define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv))
#endif
#endif /* USE_ITHREADS */
#if (PERL_BCDVERSION >= 0x5006000)
#ifndef caller_cx
# if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL)
static I32
DPPP_dopoptosub_at(const PERL_CONTEXT *cxstk, I32 startingblock)
{
I32 i;
for (i = startingblock; i >= 0; i--) {
register const PERL_CONTEXT * const cx = &cxstk[i];
switch (CxTYPE(cx)) {
default:
continue;
case CXt_EVAL:
case CXt_SUB:
case CXt_FORMAT:
return i;
}
}
return i;
}
# endif
# if defined(NEED_caller_cx)
static const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp);
static
#else
extern const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp);
#endif
#ifdef caller_cx
# undef caller_cx
#endif
#define caller_cx(a,b) DPPP_(my_caller_cx)(aTHX_ a,b)
#define Perl_caller_cx DPPP_(my_caller_cx)
#if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL)
const PERL_CONTEXT *
DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
{
register I32 cxix = DPPP_dopoptosub_at(cxstack, cxstack_ix);
register const PERL_CONTEXT *cx;
register const PERL_CONTEXT *ccstack = cxstack;
const PERL_SI *top_si = PL_curstackinfo;
for (;;) {
/* we may be in a higher stacklevel, so dig down deeper */
while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
top_si = top_si->si_prev;
ccstack = top_si->si_cxstack;
cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix);
}
if (cxix < 0)
return NULL;
/* caller() should not report the automatic calls to &DB::sub */
if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
count++;
if (!count--)
break;
cxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
}
cx = &ccstack[cxix];
if (dbcxp) *dbcxp = cx;
if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
/* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
field below is defined for any cx. */
/* caller() should not report the automatic calls to &DB::sub */
if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
cx = &ccstack[dbcxix];
}
return cx;
}
# endif
#endif /* caller_cx */
#endif /* 5.6.0 */
#ifndef IN_PERL_COMPILETIME
# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling)
#endif
#ifndef IN_LOCALE_RUNTIME
# define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE)
#endif
#ifndef IN_LOCALE_COMPILETIME
# define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE)
#endif
#ifndef IN_LOCALE
# define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
#endif
#ifndef IS_NUMBER_IN_UV
# define IS_NUMBER_IN_UV 0x01
#endif
#ifndef IS_NUMBER_GREATER_THAN_UV_MAX
# define IS_NUMBER_GREATER_THAN_UV_MAX 0x02
#endif
#ifndef IS_NUMBER_NOT_INT
# define IS_NUMBER_NOT_INT 0x04
#endif
#ifndef IS_NUMBER_NEG
# define IS_NUMBER_NEG 0x08
#endif
#ifndef IS_NUMBER_INFINITY
# define IS_NUMBER_INFINITY 0x10
#endif
#ifndef IS_NUMBER_NAN
# define IS_NUMBER_NAN 0x20
#endif
#ifndef GROK_NUMERIC_RADIX
# define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
#endif
#ifndef PERL_SCAN_GREATER_THAN_UV_MAX
# define PERL_SCAN_GREATER_THAN_UV_MAX 0x02
#endif
#ifndef PERL_SCAN_SILENT_ILLDIGIT
# define PERL_SCAN_SILENT_ILLDIGIT 0x04
#endif
#ifndef PERL_SCAN_ALLOW_UNDERSCORES
# define PERL_SCAN_ALLOW_UNDERSCORES 0x01
#endif
#ifndef PERL_SCAN_DISALLOW_PREFIX
# define PERL_SCAN_DISALLOW_PREFIX 0x02
#endif
#ifndef grok_numeric_radix
#if defined(NEED_grok_numeric_radix)
static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
static
#else
extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
#endif
#ifdef grok_numeric_radix
# undef grok_numeric_radix
#endif
#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
bool
DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
{
#ifdef USE_LOCALE_NUMERIC
#ifdef PL_numeric_radix_sv
if (PL_numeric_radix_sv && IN_LOCALE) {
STRLEN len;
char* radix = SvPV(PL_numeric_radix_sv, len);
if (*sp + len <= send && memEQ(*sp, radix, len)) {
*sp += len;
return TRUE;
}
}
#else
/* older perls don't have PL_numeric_radix_sv so the radix
* must manually be requested from locale.h
*/
#include <locale.h>
dTHR; /* needed for older threaded perls */
struct lconv *lc = localeconv();
char *radix = lc->decimal_point;
if (radix && IN_LOCALE) {
STRLEN len = strlen(radix);
if (*sp + len <= send && memEQ(*sp, radix, len)) {
*sp += len;
return TRUE;
}
}
#endif
#endif /* USE_LOCALE_NUMERIC */
/* always try "." if numeric radix didn't match because
* we may have data from different locales mixed */
if (*sp < send && **sp == '.') {
++*sp;
return TRUE;
}
return FALSE;
}
#endif
#endif
#ifndef grok_number
#if defined(NEED_grok_number)
static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
static
#else
extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
#endif
#ifdef grok_number
# undef grok_number
#endif
#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
#define Perl_grok_number DPPP_(my_grok_number)
#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
int
DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
{
const char *s = pv;
const char *send = pv + len;
const UV max_div_10 = UV_MAX / 10;
const char max_mod_10 = UV_MAX % 10;
int numtype = 0;
int sawinf = 0;
int sawnan = 0;
while (s < send && isSPACE(*s))
s++;
if (s == send) {
return 0;
} else if (*s == '-') {
s++;
numtype = IS_NUMBER_NEG;
}
else if (*s == '+')
s++;
if (s == send)
return 0;
/* next must be digit or the radix separator or beginning of infinity */
if (isDIGIT(*s)) {
/* UVs are at least 32 bits, so the first 9 decimal digits cannot
overflow. */
UV value = *s - '0';
/* This construction seems to be more optimiser friendly.
(without it gcc does the isDIGIT test and the *s - '0' separately)
With it gcc on arm is managing 6 instructions (6 cycles) per digit.
In theory the optimiser could deduce how far to unroll the loop
before checking for overflow. */
if (++s < send) {
int digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
digit = *s - '0';
if (digit >= 0 && digit <= 9) {
value = value * 10 + digit;
if (++s < send) {
/* Now got 9 digits, so need to check
each time for overflow. */
digit = *s - '0';
while (digit >= 0 && digit <= 9
&& (value < max_div_10
|| (value == max_div_10
&& digit <= max_mod_10))) {
value = value * 10 + digit;
if (++s < send)
digit = *s - '0';
else
break;
}
if (digit >= 0 && digit <= 9
&& (s < send)) {
/* value overflowed.
skip the remaining digits, don't
worry about setting *valuep. */
do {
s++;
} while (s < send && isDIGIT(*s));
numtype |=
IS_NUMBER_GREATER_THAN_UV_MAX;
goto skip_value;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
numtype |= IS_NUMBER_IN_UV;
if (valuep)
*valuep = value;
skip_value:
if (GROK_NUMERIC_RADIX(&s, send)) {
numtype |= IS_NUMBER_NOT_INT;
while (s < send && isDIGIT(*s)) /* optional digits after the radix */
s++;
}
}
else if (GROK_NUMERIC_RADIX(&s, send)) {
numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
/* no digits before the radix means we need digits after it */
if (s < send && isDIGIT(*s)) {
do {
s++;
} while (s < send && isDIGIT(*s));
if (valuep) {
/* integer approximation is valid - it's 0. */
*valuep = 0;
}
}
else
return 0;
} else if (*s == 'I' || *s == 'i') {
s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
s++; if (s < send && (*s == 'I' || *s == 'i')) {
s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
s++;
}
sawinf = 1;
} else if (*s == 'N' || *s == 'n') {
/* XXX TODO: There are signaling NaNs and quiet NaNs. */
s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
s++;
sawnan = 1;
} else
return 0;
if (sawinf) {
numtype &= IS_NUMBER_NEG; /* Keep track of sign */
numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
} else if (sawnan) {
numtype &= IS_NUMBER_NEG; /* Keep track of sign */
numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
} else if (s < send) {
/* we can have an optional exponent part */
if (*s == 'e' || *s == 'E') {
/* The only flag we keep is sign. Blow away any "it's UV" */
numtype &= IS_NUMBER_NEG;
numtype |= IS_NUMBER_NOT_INT;
s++;
if (s < send && (*s == '-' || *s == '+'))
s++;
if (s < send && isDIGIT(*s)) {
do {
s++;
} while (s < send && isDIGIT(*s));
}
else
return 0;
}
}
while (s < send && isSPACE(*s))
s++;
if (s >= send)
return numtype;
if (len == 10 && memEQ(pv, "0 but true", 10)) {
if (valuep)
*valuep = 0;
return IS_NUMBER_IN_UV;
}
return 0;
}
#endif
#endif
/*
* The grok_* routines have been modified to use warn() instead of
* Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
* which is why the stack variable has been renamed to 'xdigit'.
*/
#ifndef grok_bin
#if defined(NEED_grok_bin)
static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
static
#else
extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
#endif
#ifdef grok_bin
# undef grok_bin
#endif
#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
#define Perl_grok_bin DPPP_(my_grok_bin)
#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
UV
DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
{
const char *s = start;
STRLEN len = *len_p;
UV value = 0;
NV value_nv = 0;
const UV max_div_2 = UV_MAX / 2;
bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
bool overflowed = FALSE;
if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
/* strip off leading b or 0b.
for compatibility silently suffer "b" and "0b" as valid binary
numbers. */
if (len >= 1) {
if (s[0] == 'b') {
s++;
len--;
}
else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
s+=2;
len-=2;
}
}
}
for (; len-- && *s; s++) {
char bit = *s;
if (bit == '0' || bit == '1') {
/* Write it in this wonky order with a goto to attempt to get the
compiler to make the common case integer-only loop pretty tight.
With gcc seems to be much straighter code than old scan_bin. */
redo:
if (!overflowed) {
if (value <= max_div_2) {
value = (value << 1) | (bit - '0');
continue;
}
/* Bah. We're just overflowed. */
warn("Integer overflow in binary number");
overflowed = TRUE;
value_nv = (NV) value;
}
value_nv *= 2.0;
/* If an NV has not enough bits in its mantissa to
* represent a UV this summing of small low-order numbers
* is a waste of time (because the NV cannot preserve
* the low-order bits anyway): we could just remember when
* did we overflow and in the end just multiply value_nv by the
* right amount. */
value_nv += (NV)(bit - '0');
continue;
}
if (bit == '_' && len && allow_underscores && (bit = s[1])
&& (bit == '0' || bit == '1'))
{
--len;
++s;
goto redo;
}
if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
warn("Illegal binary digit '%c' ignored", *s);
break;
}
if ( ( overflowed && value_nv > 4294967295.0)
#if UVSIZE > 4
|| (!overflowed && value > 0xffffffff )
#endif
) {
warn("Binary number > 0b11111111111111111111111111111111 non-portable");
}
*len_p = s - start;
if (!overflowed) {
*flags = 0;
return value;
}
*flags = PERL_SCAN_GREATER_THAN_UV_MAX;
if (result)
*result = value_nv;
return UV_MAX;
}
#endif
#endif
#ifndef grok_hex
#if defined(NEED_grok_hex)
static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
static
#else
extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
#endif
#ifdef grok_hex
# undef grok_hex
#endif
#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
#define Perl_grok_hex DPPP_(my_grok_hex)
#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
UV
DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
{
const char *s = start;
STRLEN len = *len_p;
UV value = 0;
NV value_nv = 0;
const UV max_div_16 = UV_MAX / 16;
bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
bool overflowed = FALSE;
const char *xdigit;
if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
/* strip off leading x or 0x.
for compatibility silently suffer "x" and "0x" as valid hex numbers.
*/
if (len >= 1) {
if (s[0] == 'x') {
s++;
len--;
}
else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
s+=2;
len-=2;
}
}
}
for (; len-- && *s; s++) {
xdigit = strchr((char *) PL_hexdigit, *s);
if (xdigit) {
/* Write it in this wonky order with a goto to attempt to get the
compiler to make the common case integer-only loop pretty tight.
With gcc seems to be much straighter code than old scan_hex. */
redo:
if (!overflowed) {
if (value <= max_div_16) {
value = (value << 4) | ((xdigit - PL_hexdigit) & 15);
continue;
}
warn("Integer overflow in hexadecimal number");
overflowed = TRUE;
value_nv = (NV) value;
}
value_nv *= 16.0;
/* If an NV has not enough bits in its mantissa to
* represent a UV this summing of small low-order numbers
* is a waste of time (because the NV cannot preserve
* the low-order bits anyway): we could just remember when
* did we overflow and in the end just multiply value_nv by the
* right amount of 16-tuples. */
value_nv += (NV)((xdigit - PL_hexdigit) & 15);
continue;
}
if (*s == '_' && len && allow_underscores && s[1]
&& (xdigit = strchr((char *) PL_hexdigit, s[1])))
{
--len;
++s;
goto redo;
}
if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
warn("Illegal hexadecimal digit '%c' ignored", *s);
break;
}
if ( ( overflowed && value_nv > 4294967295.0)
#if UVSIZE > 4
|| (!overflowed && value > 0xffffffff )
#endif
) {
warn("Hexadecimal number > 0xffffffff non-portable");
}
*len_p = s - start;
if (!overflowed) {
*flags = 0;
return value;
}
*flags = PERL_SCAN_GREATER_THAN_UV_MAX;
if (result)
*result = value_nv;
return UV_MAX;
}
#endif
#endif
#ifndef grok_oct
#if defined(NEED_grok_oct)
static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
static
#else
extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
#endif
#ifdef grok_oct
# undef grok_oct
#endif
#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
#define Perl_grok_oct DPPP_(my_grok_oct)
#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
UV
DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
{
const char *s = start;
STRLEN len = *len_p;
UV value = 0;
NV value_nv = 0;
const UV max_div_8 = UV_MAX / 8;
bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
bool overflowed = FALSE;
for (; len-- && *s; s++) {
/* gcc 2.95 optimiser not smart enough to figure that this subtraction
out front allows slicker code. */
int digit = *s - '0';
if (digit >= 0 && digit <= 7) {
/* Write it in this wonky order with a goto to attempt to get the
compiler to make the common case integer-only loop pretty tight.
*/
redo:
if (!overflowed) {
if (value <= max_div_8) {
value = (value << 3) | digit;
continue;
}
/* Bah. We're just overflowed. */
warn("Integer overflow in octal number");
overflowed = TRUE;
value_nv = (NV) value;
}
value_nv *= 8.0;
/* If an NV has not enough bits in its mantissa to
* represent a UV this summing of small low-order numbers
* is a waste of time (because the NV cannot preserve
* the low-order bits anyway): we could just remember when
* did we overflow and in the end just multiply value_nv by the
* right amount of 8-tuples. */
value_nv += (NV)digit;
continue;
}
if (digit == ('_' - '0') && len && allow_underscores
&& (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
{
--len;
++s;
goto redo;
}
/* Allow \octal to work the DWIM way (that is, stop scanning
* as soon as non-octal characters are seen, complain only iff
* someone seems to want to use the digits eight and nine). */
if (digit == 8 || digit == 9) {
if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
warn("Illegal octal digit '%c' ignored", *s);
}
break;
}
if ( ( overflowed && value_nv > 4294967295.0)
#if UVSIZE > 4
|| (!overflowed && value > 0xffffffff )
#endif
) {
warn("Octal number > 037777777777 non-portable");
}
*len_p = s - start;
if (!overflowed) {
*flags = 0;
return value;
}
*flags = PERL_SCAN_GREATER_THAN_UV_MAX;
if (result)
*result = value_nv;
return UV_MAX;
}
#endif
#endif
#if !defined(my_snprintf)
#if defined(NEED_my_snprintf)
static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
static
#else
extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
#endif
#define my_snprintf DPPP_(my_my_snprintf)
#define Perl_my_snprintf DPPP_(my_my_snprintf)
#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL)
int
DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...)
{
dTHX;
int retval;
va_list ap;
va_start(ap, format);
#ifdef HAS_VSNPRINTF
retval = vsnprintf(buffer, len, format, ap);
#else
retval = vsprintf(buffer, format, ap);
#endif
va_end(ap);
if (retval < 0 || (len > 0 && (Size_t)retval >= len))
Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
return retval;
}
#endif
#endif
#if !defined(my_sprintf)
#if defined(NEED_my_sprintf)
static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
static
#else
extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
#endif
#define my_sprintf DPPP_(my_my_sprintf)
#define Perl_my_sprintf DPPP_(my_my_sprintf)
#if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL)
int
DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...)
{
va_list args;
va_start(args, pat);
vsprintf(buffer, pat, args);
va_end(args);
return strlen(buffer);
}
#endif
#endif
#ifdef NO_XSLOCKS
# ifdef dJMPENV
# define dXCPT dJMPENV; int rEtV = 0
# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
# define XCPT_TRY_END JMPENV_POP;
# define XCPT_CATCH if (rEtV != 0)
# define XCPT_RETHROW JMPENV_JUMP(rEtV)
# else
# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0
# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf);
# define XCPT_CATCH if (rEtV != 0)
# define XCPT_RETHROW Siglongjmp(top_env, rEtV)
# endif
#endif
#if !defined(my_strlcat)
#if defined(NEED_my_strlcat)
static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
static
#else
extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
#endif
#define my_strlcat DPPP_(my_my_strlcat)
#define Perl_my_strlcat DPPP_(my_my_strlcat)
#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL)
Size_t
DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size)
{
Size_t used, length, copy;
used = strlen(dst);
length = strlen(src);
if (size > 0 && used < size - 1) {
copy = (length >= size - used) ? size - used - 1 : length;
memcpy(dst + used, src, copy);
dst[used + copy] = '\0';
}
return used + length;
}
#endif
#endif
#if !defined(my_strlcpy)
#if defined(NEED_my_strlcpy)
static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
static
#else
extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
#endif
#define my_strlcpy DPPP_(my_my_strlcpy)
#define Perl_my_strlcpy DPPP_(my_my_strlcpy)
#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL)
Size_t
DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size)
{
Size_t length, copy;
length = strlen(src);
if (size > 0) {
copy = (length >= size) ? size - 1 : length;
memcpy(dst, src, copy);
dst[copy] = '\0';
}
return length;
}
#endif
#endif
#ifndef PERL_PV_ESCAPE_QUOTE
# define PERL_PV_ESCAPE_QUOTE 0x0001
#endif
#ifndef PERL_PV_PRETTY_QUOTE
# define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE
#endif
#ifndef PERL_PV_PRETTY_ELLIPSES
# define PERL_PV_PRETTY_ELLIPSES 0x0002
#endif
#ifndef PERL_PV_PRETTY_LTGT
# define PERL_PV_PRETTY_LTGT 0x0004
#endif
#ifndef PERL_PV_ESCAPE_FIRSTCHAR
# define PERL_PV_ESCAPE_FIRSTCHAR 0x0008
#endif
#ifndef PERL_PV_ESCAPE_UNI
# define PERL_PV_ESCAPE_UNI 0x0100
#endif
#ifndef PERL_PV_ESCAPE_UNI_DETECT
# define PERL_PV_ESCAPE_UNI_DETECT 0x0200
#endif
#ifndef PERL_PV_ESCAPE_ALL
# define PERL_PV_ESCAPE_ALL 0x1000
#endif
#ifndef PERL_PV_ESCAPE_NOBACKSLASH
# define PERL_PV_ESCAPE_NOBACKSLASH 0x2000
#endif
#ifndef PERL_PV_ESCAPE_NOCLEAR
# define PERL_PV_ESCAPE_NOCLEAR 0x4000
#endif
#ifndef PERL_PV_ESCAPE_RE
# define PERL_PV_ESCAPE_RE 0x8000
#endif
#ifndef PERL_PV_PRETTY_NOCLEAR
# define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR
#endif
#ifndef PERL_PV_PRETTY_DUMP
# define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE
#endif
#ifndef PERL_PV_PRETTY_REGPROP
# define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE
#endif
/* Hint: pv_escape
* Note that unicode functionality is only backported to
* those perl versions that support it. For older perl
* versions, the implementation will fall back to bytes.
*/
#ifndef pv_escape
#if defined(NEED_pv_escape)
static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
static
#else
extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
#endif
#ifdef pv_escape
# undef pv_escape
#endif
#define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f)
#define Perl_pv_escape DPPP_(my_pv_escape)
#if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL)
char *
DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str,
const STRLEN count, const STRLEN max,
STRLEN * const escaped, const U32 flags)
{
const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\';
const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc;
char octbuf[32] = "%123456789ABCDF";
STRLEN wrote = 0;
STRLEN chsize = 0;
STRLEN readsize = 1;
#if defined(is_utf8_string) && defined(utf8_to_uvchr)
bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0;
#endif
const char *pv = str;
const char * const end = pv + count;
octbuf[0] = esc;
if (!(flags & PERL_PV_ESCAPE_NOCLEAR))
sv_setpvs(dsv, "");
#if defined(is_utf8_string) && defined(utf8_to_uvchr)
if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count))
isuni = 1;
#endif
for (; pv < end && (!max || wrote < max) ; pv += readsize) {
const UV u =
#if defined(is_utf8_string) && defined(utf8_to_uvchr)
isuni ? utf8_to_uvchr((U8*)pv, &readsize) :
#endif
(U8)*pv;
const U8 c = (U8)u & 0xFF;
if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) {
if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
chsize = my_snprintf(octbuf, sizeof octbuf,
"%" UVxf, u);
else
chsize = my_snprintf(octbuf, sizeof octbuf,
"%cx{%" UVxf "}", esc, u);
} else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) {
chsize = 1;
} else {
if (c == dq || c == esc || !isPRINT(c)) {
chsize = 2;
switch (c) {
case '\\' : /* fallthrough */
case '%' : if (c == esc)
octbuf[1] = esc;
else
chsize = 1;
break;
case '\v' : octbuf[1] = 'v'; break;
case '\t' : octbuf[1] = 't'; break;
case '\r' : octbuf[1] = 'r'; break;
case '\n' : octbuf[1] = 'n'; break;
case '\f' : octbuf[1] = 'f'; break;
case '"' : if (dq == '"')
octbuf[1] = '"';
else
chsize = 1;
break;
default: chsize = my_snprintf(octbuf, sizeof octbuf,
pv < end && isDIGIT((U8)*(pv+readsize))
? "%c%03o" : "%c%o", esc, c);
}
} else {
chsize = 1;
}
}
if (max && wrote + chsize > max) {
break;
} else if (chsize > 1) {
sv_catpvn(dsv, octbuf, chsize);
wrote += chsize;
} else {
char tmp[2];
my_snprintf(tmp, sizeof tmp, "%c", c);
sv_catpvn(dsv, tmp, 1);
wrote++;
}
if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
break;
}
if (escaped != NULL)
*escaped= pv - str;
return SvPVX(dsv);
}
#endif
#endif
#ifndef pv_pretty
#if defined(NEED_pv_pretty)
static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
static
#else
extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
#endif
#ifdef pv_pretty
# undef pv_pretty
#endif
#define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g)
#define Perl_pv_pretty DPPP_(my_pv_pretty)
#if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL)
char *
DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count,
const STRLEN max, char const * const start_color, char const * const end_color,
const U32 flags)
{
const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%';
STRLEN escaped;
if (!(flags & PERL_PV_PRETTY_NOCLEAR))
sv_setpvs(dsv, "");
if (dq == '"')
sv_catpvs(dsv, "\"");
else if (flags & PERL_PV_PRETTY_LTGT)
sv_catpvs(dsv, "<");
if (start_color != NULL)
sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color));
pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR);
if (end_color != NULL)
sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color));
if (dq == '"')
sv_catpvs(dsv, "\"");
else if (flags & PERL_PV_PRETTY_LTGT)
sv_catpvs(dsv, ">");
if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count)
sv_catpvs(dsv, "...");
return SvPVX(dsv);
}
#endif
#endif
#ifndef pv_display
#if defined(NEED_pv_display)
static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
static
#else
extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
#endif
#ifdef pv_display
# undef pv_display
#endif
#define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e)
#define Perl_pv_display DPPP_(my_pv_display)
#if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL)
char *
DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
{
pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP);
if (len > cur && pv[cur] == '\0')
sv_catpvs(dsv, "\\0");
return SvPVX(dsv);
}
#endif
#endif
#endif /* _P_P_PORTABILITY_H_ */
/* End of File ppport.h */
Devel/Size.pm 0000644 00000024633 15033552504 0007065 0 ustar 00 package Devel::Size;
use strict;
use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS $warn $dangle);
require 5.005;
require Exporter;
require XSLoader;
@ISA = qw(Exporter);
@EXPORT_OK = qw(size total_size);
# This allows declaration use Devel::Size ':all';
%EXPORT_TAGS = ( 'all' => \@EXPORT_OK );
$VERSION = '0.81';
XSLoader::load( __PACKAGE__);
$warn = 1;
$dangle = 0; ## Set true to enable warnings about dangling pointers
1;
__END__
=pod
=head1 NAME
Devel::Size - Perl extension for finding the memory usage of Perl variables
=head1 SYNOPSIS
use Devel::Size qw(size total_size);
my $size = size("A string");
my @foo = (1, 2, 3, 4, 5);
my $other_size = size(\@foo);
my $foo = {a => [1, 2, 3],
b => {a => [1, 3, 4]}
};
my $total_size = total_size($foo);
=head1 DESCRIPTION
This module figures out the real size of Perl variables in bytes, as
accurately as possible.
Call functions with a reference to the variable you want the size
of. If the variable is a plain scalar it returns the size of
this scalar. If the variable is a hash or an array, use a reference
when calling.
=head1 FUNCTIONS
=head2 size($ref)
The C<size> function returns the amount of memory the variable
returns. If the variable is a hash or an array, it only reports
the amount used by the structure, I<not> the contents.
=head2 total_size($ref)
The C<total_size> function will traverse the variable and look
at the sizes of contents. Any references contained in the variable
will also be followed, so this function can be used to get the
total size of a multidimensional data structure. At the moment
there is no way to get the size of an array or a hash and its
elements without using this function.
=head1 EXPORT
None but default, but optionally C<size> and C<total_size>.
=head1 UNDERSTANDING MEMORY ALLOCATION
Please note that the following discussion of memory allocation in perl
is based on the perl 5.8.0 sources. While this is generally
applicable to all versions of perl, some of the gory details are
omitted. It also makes some presumptions on how your system memory
allocator works so, while it will be generally correct, it may not
exactly reflect your system. (Generally the only issue is the size of
the constant values we'll talk about, not their existence)
=head2 The C library
It's important first to understand how your OS and libraries handle
memory. When the perl interpreter needs some memory, it asks the C
runtime library for it, using the C<malloc()> call. C<malloc> has one
parameter, the size of the memory allocation you want, and returns a
pointer to that memory. C<malloc> also makes sure that the pointer it
returns to you is properly aligned. When you're done with the memory
you hand it back to the library with the C<free()> call. C<free> has
one parameter, the pointer that C<malloc> returned.
There are a couple of interesting ramifications to this.
Because malloc has to return an aligned pointer, it will round up the
memory allocation to make sure that the memory it returns is aligned
right. What that alignment is depends on your CPU, OS, and compiler
settings, but things are generally aligned to either a 4 or 8 byte
boundary. That means that if you ask for 1 byte, C<malloc> will
silently round up to either 4 or 8 bytes, though it doesn't tell the
program making the request, so the extra memory can't be used.
Since C<free> isn't given the size of the memory chunk you're
freeing, it has to track it another way. Most libraries do this by
tacking on a length field just before the memory it hands to your
program. (It's put before the beginning rather than after the end
because it's less likely to get mangled by program bugs) This size
field is the size of your platform integer, Generally either 4 or 8
bytes.
So, if you asked for 1 byte, malloc would build something like this:
+------------------+
| 4 byte length |
+------------------+ <----- the pointer malloc returns
| your 1 byte |
+------------------+
| 3 bytes padding |
+------------------+
As you can see, you asked for 1 byte but C<malloc> used 8. If your
integers were 8 bytes rather than 4, C<malloc> would have used 16 bytes
to satisfy your 1 byte request.
The C memory allocation system also keeps a list of free memory
chunks, so it can recycle freed memory. For performance reasons, some
C memory allocation systems put a limit to the number of free
segments that are on the free list, or only search through a small
number of memory chunks waiting to be recycled before just
allocating more memory from the system.
The memory allocation system tries to keep as few chunks on the free
list as possible. It does this by trying to notice if there are two
adjacent chunks of memory on the free list and, if there are,
coalescing them into a single larger chunk. This works pretty well,
but there are ways to have a lot of memory on the free list yet still
not have anything that can be allocated. If a program allocates one
million eight-byte chunks, for example, then frees every other chunk,
there will be four million bytes of memory on the free list, but none
of that memory can be handed out to satisfy a request for 10
bytes. This is what's referred to as a fragmented free list, and can
be one reason why your program could have a lot of free memory yet
still not be able to allocate more, or have a huge process size and
still have almost no memory actually allocated to the program running.
=head2 Perl
Perl's memory allocation scheme is a bit convoluted, and more complex
than can really be addressed here, but there is one common spot where Perl's
memory allocation is unintuitive, and that's for hash keys.
When you have a hash, each entry has a structure that points to the
key and the value for that entry. The value is just a pointer to the
scalar in the entry, and doesn't take up any special amount of
memory. The key structure holds the hash value for the key, the key
length, and the key string. (The entry and key structures are
separate so perl can potentially share keys across multiple hashes)
The entry structure has three pointers in it, and takes up either 12
or 24 bytes, depending on whether you're on a 32 bit or 64 bit
system. Since these structures are of fixed size, perl can keep a big
pool of them internally (generally called an arena) so it doesn't
have to allocate memory for each one.
The key structure, though, is of variable length because the key
string is of variable length, so perl has to ask the system for a
memory allocation for each key. The base size of this structure is
8 or 16 bytes (once again, depending on whether you're on a 32 bit or
64 bit system) plus the string length plus two bytes.
Since this memory has to be allocated from the system there's the
malloc size-field overhead (4 or 8 bytes) plus the alignment bytes (0
to 7, depending on your system and the key length)
that get added on to the chunk perl requests. If the key is only 1
character, and you're on a 32 bit system, the allocation will be 16
bytes. If the key is 7 characters then the allocation is 24 bytes on
a 32 bit system. If you're on a 64 bit system the numbers get even
larger.
=head1 DANGERS
Since version 0.72, Devel::Size uses a new pointer tracking mechanism
that consumes far less memory than was previously the case. It does this
by using a bit vector where 1 bit represents each 4- or 8-byte aligned pointer
(32- or 64-bit platform dependent) that could exist. Further, it segments
that bit vector and only allocates each chunk when an address is seen within
that chunk. Since version 0.73, chunks are allocated in blocks of 2**16 bits
(ie 8K), accessed via a 256-way tree. The tree is 2 levels deep on a 32 bit
system, 6 levels deep on a 64 bit system. This avoids having make any
assumptions about address layout on 64 bit systems or trade offs about sizes
to allocate. It assumes that the addresses of allocated pointers are reasonably
contiguous, so that relevant parts of the tree stay in the CPU cache.
Besides saving a lot of memory, this change means that Devel::Size
runs significantly faster than previous versions.
=head1 Messages: texts originating from this module.
=head2 Errors
=over 4
=item "Devel::Size: Unknown variable type"
The thing (or something contained within it) that you gave to
total_size() was unrecognisable as a Perl entity.
=back
=head2 warnings
These messages warn you that for some types, the sizes calculated may not include
everything that could be associated with those types. The differences are usually
insignificant for most uses of this module.
These may be disabled by setting
$Devel::Size::warn = 0
=over 4
=item "Devel::Size: Calculated sizes for CVs are incomplete"
=item "Devel::Size: Calculated sizes for FMs are incomplete"
=item "Devel::Size: Calculated sizes for compiled regexes are incompatible, and probably always will be"
=back
=head2 New warnings since 0.72
Devel::Size has always been vulnerable to trapping when traversing Perl's
internal data structures, if it encounters uninitialised (dangling) pointers.
MSVC provides exception handling able to deal with this possibility, and when
built with MSVC Devel::Size will now attempt to ignore (or log) them and
continue. These messages are mainly of interest to Devel::Size and core
developers, and so are disabled by default.
They may be enabled by setting
$Devel::Size::dangle = 0
=over 4
=item "Devel::Size: Can't determine class of operator OPx_XXXX, assuming BASEOP\n"
=item "Devel::Size: Encountered bad magic at: 0xXXXXXXXX"
=item "Devel::Size: Encountered dangling pointer in opcode at: 0xXXXXXXXX"
=item "Devel::Size: Encountered invalid pointer: 0xXXXXXXXX"
=back
=head1 BUGS
Doesn't currently walk all the bits for code refs, formats, and
IO. Those throw a warning, but a minimum size for them is returned.
Devel::Size only counts the memory that perl actually allocates. It
doesn't count 'dark' memory--memory that is lost due to fragmented free lists,
allocation alignments, or C library overhead.
=head1 AUTHOR
Dan Sugalski dan@sidhe.org
Small portion taken from the B module as shipped with perl 5.6.2.
Previously maintained by Tels <http://bloodgate.com>
New pointer tracking & exception handling for 0.72 by BrowserUK
Currently maintained by Nicholas Clark
=head1 COPYRIGHT
Copyright (C) 2005 Dan Sugalski, Copyright (C) 2007-2008 Tels
This module is free software; you can redistribute it and/or modify it
under the same terms as Perl v5.8.8.
=head1 SEE ALSO
perl(1), L<Devel::Size::Report>.
=cut
Bundle/DBD/mysql.pm 0000644 00000000372 15033552504 0010055 0 ustar 00 package Bundle::DBD::mysql;
use strict;
use warnings;
our $VERSION = '4.046';
1;
__END__
=pod
=head1 NAME
Bundle::DBD::mysql
=head1 DESCRIPTION
This package only exists for legacy reasons. Please use the L<DBD::mysql>
package instead.
=cut
Scalar/Util.pm 0000644 00000023322 15033552504 0007230 0 ustar 00 # Copyright (c) 1997-2007 Graham Barr <gbarr@pobox.com>. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
# Maintained since 2013 by Paul Evans <leonerd@leonerd.org.uk>
package Scalar::Util;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
blessed refaddr reftype weaken unweaken isweak
dualvar isdual isvstring looks_like_number openhandle readonly set_prototype
tainted
);
our $VERSION = "1.49";
$VERSION = eval $VERSION;
require List::Util; # List::Util loads the XS
List::Util->VERSION( $VERSION ); # Ensure we got the right XS version (RT#100863)
our @EXPORT_FAIL;
unless (defined &weaken) {
push @EXPORT_FAIL, qw(weaken);
}
unless (defined &isweak) {
push @EXPORT_FAIL, qw(isweak isvstring);
}
unless (defined &isvstring) {
push @EXPORT_FAIL, qw(isvstring);
}
sub export_fail {
if (grep { /^(?:weaken|isweak)$/ } @_ ) {
require Carp;
Carp::croak("Weak references are not implemented in the version of perl");
}
if (grep { /^isvstring$/ } @_ ) {
require Carp;
Carp::croak("Vstrings are not implemented in the version of perl");
}
@_;
}
# set_prototype has been moved to Sub::Util with a different interface
sub set_prototype(&$)
{
my ( $code, $proto ) = @_;
return Sub::Util::set_prototype( $proto, $code );
}
1;
__END__
=head1 NAME
Scalar::Util - A selection of general-utility scalar subroutines
=head1 SYNOPSIS
use Scalar::Util qw(blessed dualvar isdual readonly refaddr reftype
tainted weaken isweak isvstring looks_like_number
set_prototype);
# and other useful utils appearing below
=head1 DESCRIPTION
C<Scalar::Util> contains a selection of subroutines that people have expressed
would be nice to have in the perl core, but the usage would not really be high
enough to warrant the use of a keyword, and the size would be so small that
being individual extensions would be wasteful.
By default C<Scalar::Util> does not export any subroutines.
=cut
=head1 FUNCTIONS FOR REFERENCES
The following functions all perform some useful activity on reference values.
=head2 blessed
my $pkg = blessed( $ref );
If C<$ref> is a blessed reference, the name of the package that it is blessed
into is returned. Otherwise C<undef> is returned.
$scalar = "foo";
$class = blessed $scalar; # undef
$ref = [];
$class = blessed $ref; # undef
$obj = bless [], "Foo";
$class = blessed $obj; # "Foo"
Take care when using this function simply as a truth test (such as in
C<if(blessed $ref)...>) because the package name C<"0"> is defined yet false.
=head2 refaddr
my $addr = refaddr( $ref );
If C<$ref> is reference, the internal memory address of the referenced value is
returned as a plain integer. Otherwise C<undef> is returned.
$addr = refaddr "string"; # undef
$addr = refaddr \$var; # eg 12345678
$addr = refaddr []; # eg 23456784
$obj = bless {}, "Foo";
$addr = refaddr $obj; # eg 88123488
=head2 reftype
my $type = reftype( $ref );
If C<$ref> is a reference, the basic Perl type of the variable referenced is
returned as a plain string (such as C<ARRAY> or C<HASH>). Otherwise C<undef>
is returned.
$type = reftype "string"; # undef
$type = reftype \$var; # SCALAR
$type = reftype []; # ARRAY
$obj = bless {}, "Foo";
$type = reftype $obj; # HASH
=head2 weaken
weaken( $ref );
The lvalue C<$ref> will be turned into a weak reference. This means that it
will not hold a reference count on the object it references. Also, when the
reference count on that object reaches zero, the reference will be set to
undef. This function mutates the lvalue passed as its argument and returns no
value.
This is useful for keeping copies of references, but you don't want to prevent
the object being DESTROY-ed at its usual time.
{
my $var;
$ref = \$var;
weaken($ref); # Make $ref a weak reference
}
# $ref is now undef
Note that if you take a copy of a scalar with a weakened reference, the copy
will be a strong reference.
my $var;
my $foo = \$var;
weaken($foo); # Make $foo a weak reference
my $bar = $foo; # $bar is now a strong reference
This may be less obvious in other situations, such as C<grep()>, for instance
when grepping through a list of weakened references to objects that may have
been destroyed already:
@object = grep { defined } @object;
This will indeed remove all references to destroyed objects, but the remaining
references to objects will be strong, causing the remaining objects to never be
destroyed because there is now always a strong reference to them in the @object
array.
=head2 unweaken
unweaken( $ref );
I<Since version 1.36.>
The lvalue C<REF> will be turned from a weak reference back into a normal
(strong) reference again. This function mutates the lvalue passed as its
argument and returns no value. This undoes the action performed by
L</weaken>.
This function is slightly neater and more convenient than the
otherwise-equivalent code
my $tmp = $REF;
undef $REF;
$REF = $tmp;
(because in particular, simply assigning a weak reference back to itself does
not work to unweaken it; C<$REF = $REF> does not work).
=head2 isweak
my $weak = isweak( $ref );
Returns true if C<$ref> is a weak reference.
$ref = \$foo;
$weak = isweak($ref); # false
weaken($ref);
$weak = isweak($ref); # true
B<NOTE>: Copying a weak reference creates a normal, strong, reference.
$copy = $ref;
$weak = isweak($copy); # false
=head1 OTHER FUNCTIONS
=head2 dualvar
my $var = dualvar( $num, $string );
Returns a scalar that has the value C<$num> in a numeric context and the value
C<$string> in a string context.
$foo = dualvar 10, "Hello";
$num = $foo + 2; # 12
$str = $foo . " world"; # Hello world
=head2 isdual
my $dual = isdual( $var );
I<Since version 1.26.>
If C<$var> is a scalar that has both numeric and string values, the result is
true.
$foo = dualvar 86, "Nix";
$dual = isdual($foo); # true
Note that a scalar can be made to have both string and numeric content through
numeric operations:
$foo = "10";
$dual = isdual($foo); # false
$bar = $foo + 0;
$dual = isdual($foo); # true
Note that although C<$!> appears to be a dual-valued variable, it is
actually implemented as a magical variable inside the interpreter:
$! = 1;
print("$!\n"); # "Operation not permitted"
$dual = isdual($!); # false
You can capture its numeric and string content using:
$err = dualvar $!, $!;
$dual = isdual($err); # true
=head2 isvstring
my $vstring = isvstring( $var );
If C<$var> is a scalar which was coded as a vstring, the result is true.
$vs = v49.46.48;
$fmt = isvstring($vs) ? "%vd" : "%s"; #true
printf($fmt,$vs);
=head2 looks_like_number
my $isnum = looks_like_number( $var );
Returns true if perl thinks C<$var> is a number. See
L<perlapi/looks_like_number>.
=head2 openhandle
my $fh = openhandle( $fh );
Returns C<$fh> itself if C<$fh> may be used as a filehandle and is open, or is
is a tied handle. Otherwise C<undef> is returned.
$fh = openhandle(*STDIN); # \*STDIN
$fh = openhandle(\*STDIN); # \*STDIN
$fh = openhandle(*NOTOPEN); # undef
$fh = openhandle("scalar"); # undef
=head2 readonly
my $ro = readonly( $var );
Returns true if C<$var> is readonly.
sub foo { readonly($_[0]) }
$readonly = foo($bar); # false
$readonly = foo(0); # true
=head2 set_prototype
my $code = set_prototype( $code, $prototype );
Sets the prototype of the function given by the C<$code> reference, or deletes
it if C<$prototype> is C<undef>. Returns the C<$code> reference itself.
set_prototype \&foo, '$$';
=head2 tainted
my $t = tainted( $var );
Return true if C<$var> is tainted.
$taint = tainted("constant"); # false
$taint = tainted($ENV{PWD}); # true if running under -T
=head1 DIAGNOSTICS
Module use may give one of the following errors during import.
=over
=item Weak references are not implemented in the version of perl
The version of perl that you are using does not implement weak references, to
use L</isweak> or L</weaken> you will need to use a newer release of perl.
=item Vstrings are not implemented in the version of perl
The version of perl that you are using does not implement Vstrings, to use
L</isvstring> you will need to use a newer release of perl.
=back
=head1 KNOWN BUGS
There is a bug in perl5.6.0 with UV's that are >= 1<<31. This will
show up as tests 8 and 9 of dualvar.t failing
=head1 SEE ALSO
L<List::Util>
=head1 COPYRIGHT
Copyright (c) 1997-2007 Graham Barr <gbarr@pobox.com>. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
Additionally L</weaken> and L</isweak> which are
Copyright (c) 1999 Tuomas J. Lukka <lukka@iki.fi>. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as perl itself.
Copyright (C) 2004, 2008 Matthijs van Duin. All rights reserved.
Copyright (C) 2014 cPanel Inc. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
dbixs_rev.pl 0000644 00000003006 15033552504 0007067 0 ustar 00 #!/usr/bin/perl -w
use strict;
my $dbixs_rev_file = "dbixs_rev.h";
my $is_make_dist;
my $svnversion;
if (is_dbi_svn_dir(".")) {
$svnversion = `svnversion -n`;
}
elsif (is_dbi_svn_dir("..")) {
# presumably we're in a subdirectory because the user is doing a 'make dist'
$svnversion = `svnversion -n ..`;
$is_make_dist = 1;
}
else {
# presumably we're being run by an end-user because their file timestamps
# got messed up
print "Skipping regeneration of $dbixs_rev_file\n";
utime(time(), time(), $dbixs_rev_file); # update modification time
exit 0;
}
my @warn;
die "Neither current directory nor parent directory are an svn working copy\n"
unless $svnversion and $svnversion =~ m/^\d+/;
push @warn, "Mixed revision working copy ($svnversion:$1)"
if $svnversion =~ s/:(\d+)//;
push @warn, "Code modified since last checkin"
if $svnversion =~ s/[MS]+$//;
warn "$dbixs_rev_file warning: $_\n" for @warn;
die "$0 failed\n" if $is_make_dist && @warn;
write_header($dbixs_rev_file, DBIXS_REVISION => $svnversion, \@warn);
sub write_header {
my ($file, $macro, $version, $comments_ref) = @_;
open my $fh, ">$file" or die "Can't open $file: $!\n";
unshift @$comments_ref, scalar localtime(time);
print $fh "/* $_ */\n" for @$comments_ref;
print $fh "#define $macro $version\n";
close $fh or die "Error closing $file: $!\n";
print "Wrote $macro $version to $file\n";
}
sub is_dbi_svn_dir {
my ($dir) = @_;
return (-d "$dir/.svn" && -f "$dir/MANIFEST.SKIP");
}
Compress/Bzip2.pm 0000644 00000115704 15033552504 0007675 0 ustar 00 # File : Bzip2.pm
# Author : Rob Janes
# Created : 14 April 2005
# Version : 2.26
#
# Copyright (c) 2005 Rob Janes. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
package Compress::Bzip2;
use 5.006;
our $VERSION = "2.26";
use strict;
use warnings;
use Carp;
use Getopt::Std;
use Fcntl qw(:DEFAULT :mode);
require Exporter;
use AutoLoader;
our @ISA = qw(Exporter);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
# This allows declaration use Compress::Bzip2 ':all';
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS =
( 'constants' => [ qw(
BZ_CONFIG_ERROR
BZ_DATA_ERROR
BZ_DATA_ERROR_MAGIC
BZ_FINISH
BZ_FINISH_OK
BZ_FLUSH
BZ_FLUSH_OK
BZ_IO_ERROR
BZ_MAX_UNUSED
BZ_MEM_ERROR
BZ_OK
BZ_OUTBUFF_FULL
BZ_PARAM_ERROR
BZ_RUN
BZ_RUN_OK
BZ_SEQUENCE_ERROR
BZ_STREAM_END
BZ_UNEXPECTED_EOF
) ],
'utilities' => [ qw(
&bzopen
&bzinflateInit
&bzdeflateInit
&memBzip &memBunzip
&compress &decompress
&bzip2 &bunzip2
&bzlibversion
$bzerrno
) ],
'bzip1' => [ qw(
&compress
&decompress
&compress_init
&decompress_init
&version
) ],
'gzip' => [ qw(
&gzopen
&inflateInit
&deflateInit
&compress &uncompress
&adler32 &crc32
ZLIB_VERSION
$gzerrno
Z_OK
Z_STREAM_END
Z_NEED_DICT
Z_ERRNO
Z_STREAM_ERROR
Z_DATA_ERROR
Z_MEM_ERROR
Z_BUF_ERROR
Z_VERSION_ERROR
Z_NO_FLUSH
Z_PARTIAL_FLUSH
Z_SYNC_FLUSH
Z_FULL_FLUSH
Z_FINISH
Z_BLOCK
Z_NO_COMPRESSION
Z_BEST_SPEED
Z_BEST_COMPRESSION
Z_DEFAULT_COMPRESSION
Z_FILTERED
Z_HUFFMAN_ONLY
Z_RLE
Z_DEFAULT_STRATEGY
Z_BINARY
Z_ASCII
Z_UNKNOWN
Z_DEFLATED
Z_NULL
) ],
);
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'utilities'} },
@{ $EXPORT_TAGS{'constants'} },
@{ $EXPORT_TAGS{'bzip1'} },
@{ $EXPORT_TAGS{'gzip'} },
);
$EXPORT_TAGS{'all'} = [ @EXPORT_OK ];
our @EXPORT = ( @{ $EXPORT_TAGS{'utilities'} }, @{ $EXPORT_TAGS{'constants'} } );
our $bzerrno = "";
our $gzerrno;
*gzerrno = \$bzerrno;
# Zlib compatibility
##
use constant ZLIB_VERSION => '1.x';
# allowed flush values
use constant { Z_NO_FLUSH => 0, Z_PARTIAL_FLUSH => 1, Z_SYNC_FLUSH => 2,
Z_FULL_FLUSH => 3, Z_FINISH => 4, Z_BLOCK => 5 };
# return codes for functions, positive normal, negative error
use constant { Z_OK => 0, Z_STREAM_END => 1, Z_NEED_DICT => 2, Z_ERRNO => -1,
Z_STREAM_ERROR => -2, Z_DATA_ERROR => -3, Z_MEM_ERROR => -4,
Z_BUF_ERROR => -5, Z_VERSION_ERROR => -6 };
# compression levels
use constant { Z_NO_COMPRESSION => 0, Z_BEST_SPEED => 1,
Z_BEST_COMPRESSION => 9, Z_DEFAULT_COMPRESSION => -1 };
# compression strategy, for deflateInit
use constant { Z_FILTERED => 1, Z_HUFFMAN_ONLY => 2, Z_RLE => 3,
Z_DEFAULT_STRATEGY => 0 };
# possible values of data_type (inflate)
use constant { Z_BINARY => 0, Z_ASCII => 1, Z_UNKNOWN => 2 };
# the deflate compression method
use constant Z_DEFLATED => 8;
# for initialization
use constant Z_NULL => 0;
## gzopen, $gzerror, gzerror, gzclose, gzreadline, gzwrite
sub AUTOLOAD {
# This AUTOLOAD is used to 'autoload' constants from the constant()
# XS function.
my $constname;
our $AUTOLOAD;
($constname = $AUTOLOAD) =~ s/.*:://;
croak "&Compress::Bzip2::constant not defined" if $constname eq 'constant';
my ($error, $val) = constant($constname);
if ($error) { croak $error; }
{
no strict 'refs';
# Fixed between 5.005_53 and 5.005_61
#XXX if ($] >= 5.00561) {
#XXX *$AUTOLOAD = sub () { $val };
#XXX }
#XXX else {
*$AUTOLOAD = sub { $val };
#XXX }
}
goto &$AUTOLOAD;
}
require XSLoader;
XSLoader::load('Compress::Bzip2', $VERSION);
#bootstrap Compress::Bzip2 $VERSION;
##############################################################################
## file compress uncompress commands
sub _writefileopen ( $$;$ ) {
## open a protected file for write
my ( $handle, $filename, $force ) = @_;
if ( sysopen($handle, $filename, $force ? O_WRONLY|O_CREAT|O_TRUNC : O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR) ) {
$_[0] = $handle if !defined($_[0]);
return $handle;
}
return undef;
}
sub _stat_snapshot ( $ ) {
my ( $filename ) = @_;
return undef if !defined($filename);
my @stats = stat $filename;
if (!@stats) {
warn "stat of $filename failed: $!\n" if !@stats;
return undef;
}
return \@stats;
}
sub _check_stat ( $$;$ ) {
my ( $filename, $statsnap, $force ) = @_;
if ( !defined($statsnap) || (ref($statsnap) eq 'ARRAY' && @$statsnap == 0) ) {
$statsnap = _stat_snapshot( $filename );
if ( $statsnap ) {
if ( @_>1 ) {
if ( !defined($_[1]) ) {
$_[1] = $statsnap;
}
elsif ( ref($_[1]) eq 'ARRAY' && @{ $_[1] } == 0 ) {
@{ $_[1] } = @$statsnap;
}
}
}
else {
return undef;
}
}
if ( S_ISDIR( $statsnap->[2] ) ) {
bz_seterror( &BZ_IO_ERROR, "file $filename is a directory" );
return 0;
}
if ( !S_ISREG( $statsnap->[2] ) ) {
bz_seterror( &BZ_IO_ERROR, "file $filename is not a normal file" );
return 0;
}
if ( !$force && S_ISLNK( $statsnap->[2] ) ) {
bz_seterror( &BZ_IO_ERROR, "file $filename is a symlink" );
return 0;
}
if ( !$force && $statsnap->[3] > 1 ) {
bz_seterror( &BZ_IO_ERROR, "file $filename has too many hard links" );
return 0;
}
return 1;
}
sub _set_stat_from_snapshot ( $$ ) {
my ( $filename, $statsnap ) = @_;
if ( !chmod( S_IMODE( $statsnap->[2] ), $filename ) ) {
bz_seterror( &BZ_IO_ERROR, "chmod ".sprintf('%03o', S_IMODE( $statsnap->[2] ))." $filename failed: $!" );
return undef;
}
if ( !utime @$statsnap[8,9], $filename ) {
bz_seterror( &BZ_IO_ERROR,
"utime " . join(' ',map { strftime('%Y-%m-%d %H:%M:%S', localtime $_) } @$statsnap[8,9] ) .
" $filename failed: $!" );
return undef;
}
if ( !chown @$statsnap[4,5], $filename ) {
bz_seterror( &BZ_IO_ERROR,
"chown " . join(':', ( getpwuid($statsnap->[4]) )[0], ( getgrgid($statsnap->[5]) )[0]) .
" $filename failed: $!" );
return 0;
}
return 1;
}
sub bzip2 ( @ ) {
return _process_files( 'bzip2', 'cfvks123456789', @_ );
}
sub bunzip2 ( @ ) {
return _process_files( 'bunzip2', 'cdzfks123456789', @_ );
}
sub bzcat ( @ ) {
return _process_files( 'bzcat', 'cdzfks123456789', @_ );
}
sub _process_files ( @ ) {
my $command = shift;
my $opts = shift;
local @ARGV = @_;
my %opts;
return undef if !getopt( $opts, \%opts );
# c compress or decompress to stdout
# d decompress
# z compress
# f force
# v verbose
# k keep
# s small
# 123456789
$opts{c} = 1 if $command eq 'bzcat';
$opts{d} = 1 if $command eq 'bunzip2' || $command eq 'bzcat';
$opts{z} = 1 if $command eq 'bzip2';
my $read_from_stdin;
my ( $in, $bzin );
my ( $out, $bzout );
if ( !@ARGV ) {
$read_from_stdin = 1;
$opts{c} = 1;
if ( !open( $in, "<&STDIN" ) ) {
die "Error: failed to input from STDIN: '$!'\n";
}
$bzin = bzopen( $in, "r" );
}
if ( $opts{c} ) {
if ( !open( $out, ">&STDOUT" ) ) {
die "Error: failed to output to STDOUT: '$!'\n";
}
$bzout = bzopen( $out, "w" );
}
if ( !$opts{d} && !$opts{z} ) {
die "Error: neither compress nor decompress was indicated.\n";
}
my $doneflag = 0;
while ( !$doneflag ) {
my $infile;
my $outfile;
my @statbuf;
if ( !$read_from_stdin ) {
$infile = shift @ARGV;
if ( ! -r $infile ) {
print STDERR "Error: file $infile is not readable\n";
next;
}
@statbuf = stat _;
if ( !@statbuf ) {
print STDERR "Error: failed to stat $infile: '$!'\n";
next;
}
if ( !_check_stat( $infile, \@statbuf, $opts{f} ) ) {
print STDERR "Error: file $infile stat check fails: $bzerrno\n";
next;
}
}
my $outfile_exists;
if ( !$opts{c} ) {
undef $out;
if ( $opts{d} ) {
$outfile = $infile . '.bz2';
}
elsif ( $opts{z} ) {
$outfile = $infile =~ /\.bz2$/ ? substr($infile,0,-4) : $infile.'.out';
}
$outfile_exists = -e $outfile;
if ( !_writefileopen( $out, $outfile, $opts{f} ) ) {
print STDERR "Error: failed to open $outfile for write: '$!'\n";
next;
}
}
if ( !$read_from_stdin ) {
undef $in;
if ( !open( $in, $infile ) ) {
print STDERR "Error: unable to open $infile: '$!'\n";
unlink( $outfile ) if !$outfile_exists;
next;
}
}
if ( $opts{d} ) {
$bzin = bzopen( $in, "r" ) if !$read_from_stdin;
my $buf;
my $notdone = 1;
while ( $notdone ) {
my $ln = bzread( $in, $buf, 1024 );
if ( $ln > 0 ) {
syswrite( $out, $buf, $ln );
}
elsif ( $ln == 0 ) {
undef $notdone;
}
else {
}
}
close($out);
if ( !$read_from_stdin ) {
bzclose($in);
unlink( $infile ) if !$opts{k};
_set_stat_from_snapshot( $outfile, \@statbuf );
}
}
elsif ( $opts{z} ) {
$bzout = bzopen( $out, "w" ) if !$opts{c};
my $buf;
my $notdone = 1;
while ( $notdone ) {
my $ln = sysread( $in, $buf, 1024 );
if ( $ln > 0 ) {
bzwrite( $bzout, $buf, $ln );
}
elsif ( $ln == 0 ) {
undef $notdone;
}
else {
}
}
close($in);
if ( !$opts{c} ) {
bzclose($bzout);
unlink( $infile ) if !$opts{k};
_set_stat_from_snapshot( $outfile, \@statbuf );
}
}
}
}
##############################################################################
##############################################################################
## compatibility with Compress::Bzip2 1.03
sub add ( $$ ) {
my ( $obj, $buffer ) = @_;
my @res = $obj->is_write ? $obj->bzdeflate( $buffer ) : $obj->bzinflate( $buffer );
return $res[0];
}
sub finish ( $;$ ) {
my ( $obj, $buffer ) = @_;
my ( @res, $out );
if ( defined($buffer) ) {
@res = $obj->is_write ? $obj->bzdeflate( $buffer ) : $obj->bzinflate( $buffer );
return undef if $res[1] != &BZ_OK;
$out = $res[0];
}
$out = '' if !defined($out);
@res = $obj->bzclose;
return undef if $res[1] != &BZ_OK;
return $out.$res[0];
}
sub input_size ( $ ) {
my ( $obj ) = @_;
return $obj->total_in;
}
sub output_size ( $ ) {
my ( $obj ) = @_;
return $obj->total_out;
}
sub version ( ) {
return bzlibversion();
}
sub error ( $ ) {
return $_[0]->bzerror;
}
##############################################################################
##############################################################################
## THE Compress::Zlib compatibility section
sub _bzerror2gzerror {
my ( $bz_error_num ) = @_;
my $gz_error_num =
$bz_error_num == &BZ_OK ? Z_OK :
$bz_error_num == &BZ_RUN_OK ? Z_OK :
$bz_error_num == &BZ_FLUSH_OK ? Z_STREAM_END :
$bz_error_num == &BZ_FINISH_OK ? Z_STREAM_END :
$bz_error_num == &BZ_STREAM_END ? Z_STREAM_END :
$bz_error_num == &BZ_SEQUENCE_ERROR ? Z_VERSION_ERROR :
$bz_error_num == &BZ_PARAM_ERROR ? Z_ERRNO :
$bz_error_num == &BZ_MEM_ERROR ? Z_MEM_ERROR :
$bz_error_num == &BZ_DATA_ERROR ? Z_DATA_ERROR :
$bz_error_num == &BZ_DATA_ERROR_MAGIC ? Z_DATA_ERROR :
$bz_error_num == &BZ_IO_ERROR ? Z_ERRNO :
$bz_error_num == &BZ_UNEXPECTED_EOF ? Z_STREAM_ERROR :
$bz_error_num == &BZ_OUTBUFF_FULL ? Z_BUF_ERROR :
$bz_error_num == &BZ_CONFIG_ERROR ? Z_VERSION_ERROR :
Z_VERSION_ERROR
;
return $gz_error_num;
}
sub gzopen ( $$ ) {
goto &bzopen;
}
sub gzread ( $$;$ ) {
goto &bzread;
}
sub gzreadline ( $$ ) {
goto &bzreadline;
}
sub gzwrite ( $$ ) {
goto &bzwrite;
}
sub gzflush ( $;$ ) {
my ( $obj, $flush ) = @_;
return Z_OK if $flush == Z_NO_FLUSH;
goto &bzflush;
}
sub gzclose ( $ ) {
goto &bzclose;
}
sub gzeof ( $ ) {
goto &bzeof;
}
sub gzsetparams ( $$$ ) {
## ignore params
my ( $obj, $level, $strategy ) = @_;
return Z_OK;
}
sub gzerror ( $ ) {
goto &bzerror;
}
sub deflateInit ( @ ) {
## ignore all options:
## -Level, -Method, -WindowBits, -MemLevel, -Strategy, -Dictionary, -Bufsize
my @res = bzdeflateInit();
return $res[0] if !wantarray;
return ( $res[0], _bzerror2gzerror( $res[1] ) );
}
sub deflate ( $$ ) {
my ( $obj, $buffer ) = @_;
my @res = $obj->bzdeflate( $buffer );
return $res[0] if !wantarray;
return ( $res[0], _bzerror2gzerror( $res[1] ) );
}
sub deflateParams ( $;@ ) {
## ignore all options
return Z_OK;
}
sub flush ( $;$ ) {
my ( $obj, $flush_type ) = @_;
$flush_type = Z_FINISH if !defined($flush_type);
return Z_OK if $flush_type == Z_NO_FLUSH;
my $bz_flush_type;
my @res;
$bz_flush_type =
$flush_type == Z_PARTIAL_FLUSH || $flush_type == Z_SYNC_FLUSH ? &BZ_FLUSH :
$flush_type == Z_FULL_FLUSH ? &BZ_FINISH :
&BZ_FINISH;
@res = $obj->bzflush( $bz_flush_type );
return $res[0] if !wantarray;
return ( $res[0], _bzerror2gzerror( $res[1] ) );
}
sub dict_adler ( $ ) {
return 1; # ???
}
sub msg ( $ ) {
my ( $obj ) = @_;
return ''.($obj->bzerror).''; # stringify
}
sub inflateInit ( @ ) {
## ignore all options:
## -WindowBits, -Dictionary, -Bufsize
my @res = bzinflateInit();
return $res[0] if !wantarray;
return ( $res[0], _bzerror2gzerror( $res[1] ) );
}
sub inflate ( $$ ) {
my ( $obj, $buffer ) = @_;
my @res = $obj->bzinflate( $buffer );
return $res[0] if !wantarray;
return ( $res[0], _bzerror2gzerror( $res[1] ) );
}
sub inflateSync ( $ ) {
return Z_VERSION_ERROR; # ?? what
}
sub memGzip ( $ ) {
goto &memBzip;
}
sub memGunzip ( $ ) {
goto &memBunzip;
}
sub adler32 ( $;$ ) {
return 0;
}
sub crc32 ( $;$ ) {
return 0;
}
# sub compress ( $;$ ) {
# ## ignore $level
# my ( $source, $level ) = @_;
# return memBzip( $source );
# }
sub uncompress ( $ ) {
my ( $source, $level ) = @_;
return memBunzip( $source );
}
# Autoload methods go after =cut, and are processed by the autosplit program.
1;
__END__
=pod
=head1 NAME
Compress::Bzip2 - Interface to Bzip2 compression library
=head1 SYNOPSIS
use Compress::Bzip2 qw(:all :constant :utilities :gzip);
($bz, $status) = bzdeflateInit( [PARAMS] );
($out, $status) = $bz->bzdeflate($buffer) ; # compress
($bz, $status) = bzinflateInit( [PARAMS] );
($out, $status) = $bz->bzinflate($buffer); # uncompress
($out, $status) = $bz->bzflush() ;
($out, $status) = $bz->bzclose() ;
$dest = memBzip($source);
alias compress
$dest = memBunzip($source);
alias decompress
$bz = Compress::Bzip2->new( [PARAMS] );
$bz = bzopen($filename or filehandle, $mode);
alternate, with $bz created by new():
$bz->bzopen($filename or filehandle, $mode);
$bytesread = $bz->bzread($buffer [,$size]) ;
$bytesread = $bz->bzreadline($line);
$byteswritten = $bz->bzwrite($buffer [,$limit]);
$errstring = $bz->bzerror();
$status = $bz->bzeof();
$status = $bz->bzflush();
$status = $bz->bzclose() ;
$status = $bz->bzsetparams( $param => $setting );
$bz->total_in() ;
$bz->total_out() ;
$verstring = $bz->bzversion();
$Compress::Bzip2::bzerrno
=head1 DESCRIPTION
The I<Compress::Bzip2> module provides a Perl interface to the B<bzip2>
compression library (see L</AUTHOR> for details about where to get
I<Bzip2>). A relevant subset of the functionality provided by I<bzip2>
is available in I<Compress::Bzip2>.
All string parameters can either be a scalar or a scalar reference.
The module can be split into two general areas of functionality, namely
in-memory compression/decompression and read/write access to I<bzip2>
files. Each of these areas will be discussed separately below.
B<NOTE>
I<Compress::Bzip2> is just a simple I<bzip2> binding, comparable to the
old L<Compress::Zlib> library. It is not well integrated into PerlIO,
use the preferred L<IO::Compress::Bzip2> instead.
=head1 FILE READ/WRITE INTERFACE
A number of functions are supplied in I<bzlib> for reading and writing
I<bzip2> files. Unfortunately, most of them are not suitable. So, this
module provides another interface, built over top of the low level bzlib
methods.
=head2 B<$bz = bzopen(filename or filehandle, mode)>
This function returns an object which is used to access the other
I<bzip2> methods.
The B<mode> parameter is used to specify both whether the file is
opened for reading or writing, with "r" or "w" respectively.
If a reference to an open filehandle is passed in place of the
filename, it better be positioned to the start of a
compression/decompression sequence.
WARNING: With Perl 5.6 you cannot use a filehandle because of
SEGV in destruction with bzclose or an implicit close.
=head2 B<$bz = Compress::Bzip2-E<gt>new( [PARAMS] )>
Create a Compress::Bzip2 object. Optionally, provide
compression/decompression parameters as a keyword => setting list.
See I<bzsetparams()> for a description of the parameters.
=head2 B<$bz-E<gt>bzopen(filename or filehandle, mode)>
This is bzopen, but it uses an object previously created by the new
method. Other than that, it is identical to the above bzopen.
=head2 B<$bytesread = $bz-E<gt>bzread($buffer [, $size]) ;>
Reads B<$size> bytes from the compressed file into B<$buffer>. If
B<$size> is not specified, it will default to 4096. If the scalar
B<$buffer> is not large enough, it will be extended automatically.
Returns the number of bytes actually read. On EOF it returns 0 and in
the case of an error, -1.
=head2 B<$bytesread = $bz-E<gt>bzreadline($line) ;>
Reads the next line from the compressed file into B<$line>.
Returns the number of bytes actually read. On EOF it returns 0 and in
the case of an error, -1.
It IS legal to intermix calls to B<bzread> and B<bzreadline>.
At this time B<bzreadline> ignores the variable C<$/>
(C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use). The
end of a line is denoted by the C character C<'\n'>.
=head2 B<$byteswritten = $bz-E<gt>bzwrite($buffer [, $limit]) ;>
Writes the contents of B<$buffer> to the compressed file. Returns the
number of bytes actually written, or 0 on error.
If $limit is given and non-zero, then only that many bytes from
$buffer will be written.
=head2 B<$status = $bz-E<gt>bzflush($flush) ;>
Flushes all pending output to the compressed file.
Works identically to the I<zlib> function it interfaces to. Note that
the use of B<bzflush> can degrade compression.
Returns C<BZ_OK> if B<$flush> is C<BZ_FINISH> and all output could be
flushed. Otherwise the bzlib error code is returned.
Refer to the I<bzlib> documentation for the valid values of B<$flush>.
=head2 B<$status = $bz-E<gt>bzeof() ;>
Returns 1 if the end of file has been detected while reading the input
file, otherwise returns 0.
=head2 B<$bz-E<gt>bzclose>
Closes the compressed file. Any pending data is flushed to the file
before it is closed.
=head2 B<$bz-E<gt>bzsetparams( [PARAMS] );>
Change settings for the deflate stream C<$bz>.
The list of the valid options is shown below. Options not specified
will remain unchanged.
=over 5
=item B<-verbosity>
Defines the verbosity level. Valid values are 0 through 4,
The default is C<-verbosity =E<gt> 0>.
=item B<-blockSize100k>
For bzip object opened for stream deflation or write.
Defines the buffering factor of compression method. The algorithm
buffers all data until the buffer is full, then it flushes all the
data out. Use -blockSize100k to specify the size of the buffer.
Valid settings are 1 through 9, representing a blocking in multiples
of 100k.
Note that each such block has an overhead of leading and trailing
synchronization bytes. bzip2 recovery uses this information to
pull useable data out of a corrupted file.
A streaming application would probably want to set the blocking low.
=item B<-workFactor>
For bzip object opened for stream deflation or write.
The workFactor setting tells the deflation algorithm how much work
to invest to compensate for repetitive data.
workFactor may be a number from 0 to 250 inclusive. The default setting
is 30.
See the bzip documentation for more information.
=item B<-small>
For bzip object opened for stream inflation or read.
B<small> may be 0 or 1. Set C<small> to one to use a slower, less
memory intensive algorithm.
=back
=head2 B<$bz-E<gt>bzerror>
Returns the I<bzlib> error message or number for the last operation
associated with B<$bz>. The return value will be the I<bzlib> error
number when used in a numeric context and the I<bzlib> error message
when used in a string context. The I<bzlib> error number constants,
shown below, are available for use.
BZ_CONFIG_ERROR
BZ_DATA_ERROR
BZ_DATA_ERROR_MAGIC
BZ_FINISH
BZ_FINISH_OK
BZ_FLUSH
BZ_FLUSH_OK
BZ_IO_ERROR
BZ_MAX_UNUSED
BZ_MEM_ERROR
BZ_OK
BZ_OUTBUFF_FULL
BZ_PARAM_ERROR
BZ_RUN
BZ_RUN_OK
BZ_SEQUENCE_ERROR
BZ_STREAM_END
BZ_UNEXPECTED_EOF
=head2 B<$bz-E<gt>bzclearerr>
=head2 B<$bzerrno>
The B<$bzerrno> scalar holds the error code associated with the most
recent I<bzip2> routine. Note that unlike B<bzerror()>, the error is
I<not> associated with a particular file.
As with B<bzerror()> it returns an error number in numeric context and
an error message in string context. Unlike B<bzerror()> though, the
error message will correspond to the I<bzlib> message when the error is
associated with I<bzlib> itself, or the UNIX error message when it is
not (i.e. I<bzlib> returned C<Z_ERRORNO>).
As there is an overlap between the error numbers used by I<bzlib> and
UNIX, B<$bzerrno> should only be used to check for the presence of
I<an> error in numeric context. Use B<bzerror()> to check for specific
I<bzlib> errors. The I<bzcat> example below shows how the variable can
be used safely.
=head2 B<$bz-E<gt>prefix>
Returns the additional 5 byte header which is prepended to the bzip2
header starting with C<BZh> when using memBzip/compress.
=head1 Compress::Bzip2 Utilities
Options: -d -c -z -f -v -k -s -1..9
=head2 bzip2( [OPTS], filename)
=head2 bunzip2(filename)
=head2 bzcat(filenames...)
=head2 bzlibversion()
=head2 bzinflateInit( opts... )
=head1 Internal Utilties
=head2 bz_seterror(errno, msg)
=head2 $bz-E<gt>is_read()
=head2 $bz-E<gt>is_stream()
=head2 $bz-E<gt>is_write()
=head2 $bz-E<gt>total_in()
=head2 $bz-E<gt>total_out()
=head2 version()
=head1 Compress::Bzip2 1.03 COMPATIBILITY
While the 2.x thread forked off of 1.00, another line of development
came to a head at 1.03. The 1.03 version worked with bzlib 1.0.2, had
improvements to the error handling, single buffer inflate/deflate, a
streaming interface to inflate/deflate, and a cpan style test suite.
=head2 B<$dest = compress( $string, [$level] )>
Alias to L<memBzip>, this compresses string, using the optional
compression level, 1 through 9, the default being 6. Returns a string
containing the compressed data.
On error I<undef> is returned.
=head2 B<$dest = decompress($string, [$level])>
Alias to L<memBunzip>, this decompresses the data in string, returning a
string containing the decompressed data.
On error I<undef> is returned.
=head2 uncompress($string, [$level])
Another alias to L<memBunzip>
=head2 B<$stream = compress_init( [PARAMS] )>
Alias to bzdeflateInit. In addition to the named parameters
documented for bzdeflateInit, the following are accepted:
-level, alias to -blockSize100k
-buffer, to set the buffer size.
The -buffer option is ignored. The intermediate buffer size is not
changeable.
=head2 B<$stream = decompress_init( [PARAMS] )>
Alias to bzinflateInit. See bzinflateInit for a description of the parameters.
The option "-buffer" is accepted, but ignored.
=head2 B<$output = $stream-E<gt>add( $string )>
Add data to be compressed/decompressed. Returns whatever output is available
(possibly none, if it's still buffering it), or undef on error.
=head2 B<$output = $stream-E<gt>finish( [$string] )>
Finish the operation; takes an optional final data string. Whatever is
returned completes the output; returns undef on error.
=head2 B<$stream-E<gt>error>
Like the function, but applies to the current object only. Note that errors
in a stream object are also returned by the function.
=head2 B<$stream-E<gt>input_size>
Alias to total_in. Total bytes passed to the stream.
=head2 B<$stream-E<gt>output_size>
Alias to total_out. Total bytes received from the stream.
=head1 GZIP COMPATIBILITY INTERFACE
Except for the exact state and error numbers, this package presents an
interface very much like that given by the Compress::Zlib package.
Mostly, if you take the method name, state or error number from
Compress::Zlib and replace the "g" with a "b", your code should work.
To make the interoperability even easier, all the Compress::Zlib method
names have been used as aliases or cover functions for the bzip2 methods.
Therefore, most code that uses Compress::Zlib should be able to use
this package, with a one line change.
Simply change
$gz = Compress::Zlib::gzopen( "filename", "w" );
to
$gz = Compress::Bzip2::gzopen( "filename", "w" );
Some of the Compress::Zlib aliases don't return anything useful, like
crc32 or adler32, cause bzip2 doesn't do that sort of thing.
=head2 B< $gz = gzopen( $filename, $mode ) >
Alias for bzopen.
=head2 B< $gz-E<gt>gzread( $buffer, [ $length ] ) >
Alias for bzread.
=head2 B< $gz-E<gt>gzreadline( $buffer ) >
Alias for bzreadline.
=head2 B< $gz-E<gt>gzwrite( $buffer ) >
Alias for bzwrite.
=head2 B< $gz-E<gt>gzflush( [$flushtype] ) >
Alias for bzflush, with return code translation.
=head2 B< $gz-E<gt>gzclose( ) >
Alias for bzclose.
=head2 B< $gz-E<gt>gzeof( ) >
Alias for bzeof.
=head2 B< $gz-E<gt>gzerror( ) >
Alias for bzerror.
=head2 B< $gz-E<gt>gzsetparams( $level, $strategy ) >
This is a no-op.
=head2 B< $d = deflateInit( [OPTS] ) >
Alias for bzdeflateInit, with return code translation.
All OPTS are ignored.
=head2 B< $d-E<gt>deflate( $buffer ) >
Alias for bzdeflate, with return code translation.
=head2 B< $d-E<gt>deflateParams( [OPTS] ) >
This is a no-op.
=head2 B< $d-E<gt>flush( [$flushtype] ) >
Cover function for bzflush or bzclose, depending on $flushtype.
See the Compress::Zlib documentation for more information.
=head2 B< $d-E<gt>dict_adler( ) >
This is a no-op.
=head2 B< $d-E<gt>msg( ) >
This is a no-op.
=head2 B< $d = inflateInit( [OPTS] ) >
Alias for bzinflateInit, with return code translation.
All OPTS are ignored.
=head2 B< $d-E<gt>inflate( ) >
Alias for bzinflate, with return code translation.
=head2 B< $d-E<gt>inflateSync( ) >
This is a no-op.
=head2 B< $d-E<gt>adler32( $crc ) >
This is a no-op.
=head2 B< $d-E<gt>crc32( $crc ) >
This is a no-op.
=head2 B< $buffer = memGzip( $buffer ) >
Alias for memBzip.
=head2 B< $buffer = memGunzip( $buffer ) >
Alias for memBunzip.
=head1 IN-MEMORY COMPRESS/UNCOMPRESS
Two high-level functions are provided by I<bzlib> to perform in-memory
compression. They are B<memBzip> and B<memBunzip>. Two Perl subs are
provided which provide similar functionality.
=head2 B<$compressed = memBzip($buffer);>
Compresses B<$buffer>. If successful it returns the compressed
data. Otherwise it returns I<undef>.
The buffer parameter can either be a scalar or a scalar reference.
Essentially, an in-memory bzip file is created. It creates a minimal
bzip header, which adds 5 bytes before the bzip2 specific BZh header.
=head2 B<$uncompressed = memBunzip($buffer);>
Uncompresses B<$buffer>. If successful it returns the uncompressed
data. Otherwise it returns I<undef>.
The source buffer can either be a scalar or a scalar reference.
The buffer parameter can either be a scalar or a scalar reference. The
contents of the buffer parameter are destroyed after calling this
function.
=head1 STREAM DEFLATE (= COMPRESS)
The Perl interface will I<always> consume the complete input buffer
before returning. Also the output buffer returned will be
automatically grown to fit the amount of output available.
Here is a definition of the interface available:
=head2 B<($d, $status) = bzdeflateInit( [PARAMS] )>
Initialises a deflation stream.
If successful, it will return the initialised deflation stream, B<$d>
and B<$status> of C<BZ_OK> in a list context. In scalar context it
returns the deflation stream, B<$d>, only.
If not successful, the returned deflation stream (B<$d>) will be
I<undef> and B<$status> will hold the exact I<bzip2> error code.
The function optionally takes a number of named options specified as
C<-Name=E<gt>value> pairs. This allows individual options to be
tailored without having to specify them all in the parameter list.
Here is a list of the valid options:
=over 5
=item B<-verbosity>
Defines the verbosity level. Valid values are 0 through 4,
The default is C<-verbosity =E<gt> 0>.
=item B<-blockSize100k>
Defines the buffering factor of compression method. The algorithm
buffers all data until the buffer is full, then it flushes all the
data out. Use -blockSize100k to specify the size of the buffer.
Valid settings are 1 through 9, representing a blocking in multiples
of 100k.
Note that each such block has an overhead of leading and trailing
synchronization bytes. bzip2 recovery uses this information to
pull useable data out of a corrupted file.
A streaming application would probably want to set the blocking low.
=item B<-workFactor>
The workFactor setting tells the deflation algorithm how much work
to invest to compensate for repetitive data.
workFactor may be a number from 0 to 250 inclusive. The default setting
is 30.
See the bzip documentation for more information.
=back
Here is an example of using the B<deflateInit> optional parameter list
to override the default buffer size and compression level. All other
options will take their default values.
bzdeflateInit( -blockSize100k => 1, -verbosity => 1 );
=head2 B<($out, $status) = $d-E<gt>bzdeflate($buffer)>
Deflates the contents of B<$buffer>. The buffer can either be a scalar
or a scalar reference. When finished, B<$buffer> will be
completely processed (assuming there were no errors). If the deflation
was successful it returns deflated output, B<$out>, and a status
value, B<$status>, of C<Z_OK>.
On error, B<$out> will be I<undef> and B<$status> will contain the
I<zlib> error code.
In a scalar context B<bzdeflate> will return B<$out> only.
As with the internal buffering of the I<deflate> function in I<bzip2>,
it is not necessarily the case that any output will be produced by
this method. So don't rely on the fact that B<$out> is empty for an
error test. In fact, given the size of bzdeflates internal buffer,
with most files it's likely you won't see any output at all until
flush or close.
=head2 B<($out, $status) = $d-E<gt>bzflush([flush_type])>
Typically used to finish the deflation. Any pending output will be
returned via B<$out>. B<$status> will have a value C<BZ_OK> if
successful.
In a scalar context B<bzflush> will return B<$out> only.
Note that flushing can seriously degrade the compression ratio, so it
should only be used to terminate a decompression (using C<BZ_FLUSH>) or
when you want to create a I<full flush point> (using C<BZ_FINISH>).
The allowable values for C<flush_type> are C<BZ_FLUSH> and C<BZ_FINISH>.
For a handle opened for "w" (bzwrite), the default is C<BZ_FLUSH>.
For a stream, the default for C<flush_type> is C<BZ_FINISH> (which is
essentially a close and reopen).
It is strongly recommended that you only set the C<flush_type>
parameter if you fully understand the implications of what it
does. See the C<bzip2> documentation for details.
=head2 Example
Here is a trivial example of using B<bzdeflate>. It simply reads standard
input, deflates it and writes it to standard output.
use strict ;
use warnings ;
use Compress::Bzip2 ;
binmode STDIN;
binmode STDOUT;
my $x = bzdeflateInit()
or die "Cannot create a deflation stream\n" ;
my ($output, $status) ;
while (<>)
{
($output, $status) = $x->bzdeflate($_) ;
$status == BZ_OK
or die "deflation failed\n" ;
print $output ;
}
($output, $status) = $x->bzclose() ;
$status == BZ_OK
or die "deflation failed\n" ;
print $output ;
=head1 STREAM INFLATE
Here is a definition of the interface:
=head2 B<($i, $status) = inflateInit()>
Initialises an inflation stream.
In a list context it returns the inflation stream, B<$i>, and the
I<zlib> status code (B<$status>). In a scalar context it returns the
inflation stream only.
If successful, B<$i> will hold the inflation stream and B<$status> will
be C<BZ_OK>.
If not successful, B<$i> will be I<undef> and B<$status> will hold the
I<bzlib.h> error code.
The function optionally takes a number of named options specified as
C<-Name=E<gt>value> pairs. This allows individual options to be
tailored without having to specify them all in the parameter list.
For backward compatibility, it is also possible to pass the parameters
as a reference to a hash containing the name=>value pairs.
The function takes one optional parameter, a reference to a hash. The
contents of the hash allow the deflation interface to be tailored.
Here is a list of the valid options:
=over 5
=item B<-small>
B<small> may be 0 or 1. Set C<small> to one to use a slower, less
memory intensive algorithm.
=item B<-verbosity>
Defines the verbosity level. Valid values are 0 through 4,
The default is C<-verbosity =E<gt> 0>.
=back
Here is an example of using the B<bzinflateInit> optional parameter.
bzinflateInit( -small => 1, -verbosity => 1 );
=head2 B<($out, $status) = $i-E<gt>bzinflate($buffer)>
Inflates the complete contents of B<$buffer>. The buffer can either be
a scalar or a scalar reference.
Returns C<BZ_OK> if successful and C<BZ_STREAM_END> if the end of the
compressed data has been successfully reached. If not successful,
B<$out> will be I<undef> and B<$status> will hold the I<bzlib> error
code.
The C<$buffer> parameter is modified by C<bzinflate>. On completion it
will contain what remains of the input buffer after inflation. This
means that C<$buffer> will be an empty string when the return status
is C<BZ_OK>. When the return status is C<BZ_STREAM_END> the C<$buffer>
parameter will contains what (if anything) was stored in the input
buffer after the deflated data stream.
This feature is useful when processing a file format that encapsulates
a compressed data stream.
=head2 Example
Here is an example of using B<bzinflate>.
use strict ;
use warnings ;
use Compress::Bzip2;
my $x = bzinflateInit()
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
while (read(STDIN, $input, 4096))
{
($output, $status) = $x->bzinflate(\$input) ;
print $output
if $status == BZ_OK or $status == BZ_STREAM_END ;
last if $status != BZ_OK ;
}
die "inflation failed\n"
unless $status == BZ_STREAM_END ;
=head1 EXAMPLES
Here are some example scripts of using the interface.
=head2 B<A bzcat function>
use strict ;
use warnings ;
use Compress::Bzip2 ;
die "Usage: bzcat file...\n" unless @ARGV ;
my $file ;
foreach $file (@ARGV) {
my $buffer ;
my $bz = bzopen($file, "rb")
or die "Cannot open $file: $bzerrno\n" ;
print $buffer while $bz->bzread($buffer) > 0 ;
die "Error reading from $file: $bzerrno" . ($bzerrno+0) . "\n"
if $bzerrno != BZ_STREAM_END ;
$bz->bzclose() ;
}
=head2 B<A grep using bzreadline>
use strict ;
use warnings ;
use Compress::Bzip2 ;
die "Usage: bzgrep pattern file...\n" unless @ARGV >= 2;
my $pattern = shift ;
my $file ;
foreach $file (@ARGV) {
my $bz = bzopen($file, "rb")
or die "Cannot open $file: $bzerrno\n" ;
while ($bz->bzreadline($_) > 0) {
print if /$pattern/ ;
}
die "Error reading from $file: $bzerrno\n"
if $bzerrno != Z_STREAM_END ;
$bz->bzclose() ;
}
=head2 B<Streaming Compression>
This script, I<bzstream>, does the opposite of the I<bzcat> script
above. It reads from standard input and writes a bzip file to standard
output.
use strict ;
use warnings ;
use Compress::Bzip2 ;
binmode STDOUT; # bzopen only sets it on the fd
my $bz = bzopen(\*STDOUT, "wb")
or die "Cannot open stdout: $bzerrno\n" ;
while (<>) {
$bz->bzwrite($_) or die "error writing: $bzerrno\n" ;
}
$bz->bzclose ;
=head1 EXPORT
Use the tags :all, :utilities, :constants, :bzip1 and :gzip.
=head2 Export tag :all
This exports all the exportable methods.
=head2 Export tag :constants
This exports only the BZ_* constants.
=head2 Export tag :bzip1
This exports the Compress::Bzip2 1.x functions, for compatibility.
compress
decompress
compress_init
decompress_init
version
These are actually aliases to memBzip and memBunzip.
=head2 Export tag :utilities
This gives an interface to the bzip2 methods.
bzopen
bzinflateInit
bzdeflateInit
memBzip
memBunzip
bzip2
bunzip2
bzcat
bzlibversion
$bzerrno
=head2 Export tag :gzip
This gives compatibility with Compress::Zlib.
gzopen
gzinflateInit
gzdeflateInit
memGzip
memGunzip
$gzerrno
=head1 Exportable constants
All the I<bzlib> constants are automatically imported when you make use
of I<Compress::Bzip2>.
BZ_CONFIG_ERROR
BZ_DATA_ERROR
BZ_DATA_ERROR_MAGIC
BZ_FINISH
BZ_FINISH_OK
BZ_FLUSH
BZ_FLUSH_OK
BZ_IO_ERROR
BZ_MAX_UNUSED
BZ_MEM_ERROR
BZ_OK
BZ_OUTBUFF_FULL
BZ_PARAM_ERROR
BZ_RUN
BZ_RUN_OK
BZ_SEQUENCE_ERROR
BZ_STREAM_END
BZ_UNEXPECTED_EOF
=head1 SEE ALSO
The documentation for zlib, bzip2 and Compress::Zlib.
=head1 AUTHOR
Rob Janes, E<lt>arjay at cpan.orgE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2005 by Rob Janes
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.3 or,
at your option, any later version of Perl 5 you may have available.
=head1 AUTHOR
The I<Compress::Bzip2> module was originally written by Gawdi Azem
F<azemgi@rupert.informatik.uni-stuttgart.de>.
The first I<Compress::Bzip2> module was written by Gawdi Azem
F<azemgi@rupert.informatik.uni-stuttgart.de>. It provided an
interface to the in memory inflate and deflate routines.
I<Compress::Bzip2> was subsequently passed on to Marco Carnut
F<kiko@tempest.com.br> who shepherded it through to version 1.03, a
set of changes which included upgrades to handle bzlib 1.0.2, and
improvements to the in memory inflate and deflate routines. The
streaming interface and error information were added by David Robins
F<dbrobins@davidrobins.net>.
Version 2 of I<Compress::Bzip2> is due to Rob Janes, of
arjay@cpan.org. This release is intended to give an interface
close to that of Compress::Zlib. It's development forks from 1.00,
not 1.03, so the streaming interface is not the same as that in 1.03,
although apparently compatible as it passes the 1.03 test suite.
Minor subsequent fixes and releases were done by Reini Urban,
rurban@cpan.org.
=head1 MODIFICATION HISTORY
See the Changes file.
2.00 Second public release of I<Compress::Bzip2>.
Compress/Raw/Zlib.pm 0000644 00000134374 15033552504 0010344 0 ustar 00
package Compress::Raw::Zlib;
require 5.006 ;
require Exporter;
use Carp ;
use strict ;
use warnings ;
use bytes ;
our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS);
$VERSION = '2.081';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@ISA = qw(Exporter);
%EXPORT_TAGS = ( flush => [qw{
Z_NO_FLUSH
Z_PARTIAL_FLUSH
Z_SYNC_FLUSH
Z_FULL_FLUSH
Z_FINISH
Z_BLOCK
}],
level => [qw{
Z_NO_COMPRESSION
Z_BEST_SPEED
Z_BEST_COMPRESSION
Z_DEFAULT_COMPRESSION
}],
strategy => [qw{
Z_FILTERED
Z_HUFFMAN_ONLY
Z_RLE
Z_FIXED
Z_DEFAULT_STRATEGY
}],
status => [qw{
Z_OK
Z_STREAM_END
Z_NEED_DICT
Z_ERRNO
Z_STREAM_ERROR
Z_DATA_ERROR
Z_MEM_ERROR
Z_BUF_ERROR
Z_VERSION_ERROR
}],
);
%DEFLATE_CONSTANTS = %EXPORT_TAGS;
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
@DEFLATE_CONSTANTS =
@EXPORT = qw(
ZLIB_VERSION
ZLIB_VERNUM
OS_CODE
MAX_MEM_LEVEL
MAX_WBITS
Z_ASCII
Z_BEST_COMPRESSION
Z_BEST_SPEED
Z_BINARY
Z_BLOCK
Z_BUF_ERROR
Z_DATA_ERROR
Z_DEFAULT_COMPRESSION
Z_DEFAULT_STRATEGY
Z_DEFLATED
Z_ERRNO
Z_FILTERED
Z_FIXED
Z_FINISH
Z_FULL_FLUSH
Z_HUFFMAN_ONLY
Z_MEM_ERROR
Z_NEED_DICT
Z_NO_COMPRESSION
Z_NO_FLUSH
Z_NULL
Z_OK
Z_PARTIAL_FLUSH
Z_RLE
Z_STREAM_END
Z_STREAM_ERROR
Z_SYNC_FLUSH
Z_TREES
Z_UNKNOWN
Z_VERSION_ERROR
WANT_GZIP
WANT_GZIP_OR_ZLIB
);
push @EXPORT, qw(crc32 adler32 DEF_WBITS);
use constant WANT_GZIP => 16;
use constant WANT_GZIP_OR_ZLIB => 32;
sub AUTOLOAD {
my($constname);
($constname = $AUTOLOAD) =~ s/.*:://;
my ($error, $val) = constant($constname);
Carp::croak $error if $error;
no strict 'refs';
*{$AUTOLOAD} = sub { $val };
goto &{$AUTOLOAD};
}
use constant FLAG_APPEND => 1 ;
use constant FLAG_CRC => 2 ;
use constant FLAG_ADLER => 4 ;
use constant FLAG_CONSUME_INPUT => 8 ;
use constant FLAG_LIMIT_OUTPUT => 16 ;
eval {
require XSLoader;
XSLoader::load('Compress::Raw::Zlib', $XS_VERSION);
1;
}
or do {
require DynaLoader;
local @ISA = qw(DynaLoader);
bootstrap Compress::Raw::Zlib $XS_VERSION ;
};
use constant Parse_any => 0x01;
use constant Parse_unsigned => 0x02;
use constant Parse_signed => 0x04;
use constant Parse_boolean => 0x08;
#use constant Parse_string => 0x10;
#use constant Parse_custom => 0x12;
#use constant Parse_store_ref => 0x100 ;
use constant OFF_PARSED => 0 ;
use constant OFF_TYPE => 1 ;
use constant OFF_DEFAULT => 2 ;
use constant OFF_FIXED => 3 ;
use constant OFF_FIRST_ONLY => 4 ;
use constant OFF_STICKY => 5 ;
sub ParseParameters
{
my $level = shift || 0 ;
my $sub = (caller($level + 1))[3] ;
#local $Carp::CarpLevel = 1 ;
my $p = new Compress::Raw::Zlib::Parameters() ;
$p->parse(@_)
or croak "$sub: $p->{Error}" ;
return $p;
}
sub Compress::Raw::Zlib::Parameters::new
{
my $class = shift ;
my $obj = { Error => '',
Got => {},
} ;
#return bless $obj, ref($class) || $class || __PACKAGE__ ;
return bless $obj, 'Compress::Raw::Zlib::Parameters' ;
}
sub Compress::Raw::Zlib::Parameters::setError
{
my $self = shift ;
my $error = shift ;
my $retval = @_ ? shift : undef ;
$self->{Error} = $error ;
return $retval;
}
#sub getError
#{
# my $self = shift ;
# return $self->{Error} ;
#}
sub Compress::Raw::Zlib::Parameters::parse
{
my $self = shift ;
my $default = shift ;
my $got = $self->{Got} ;
my $firstTime = keys %{ $got } == 0 ;
my (@Bad) ;
my @entered = () ;
# Allow the options to be passed as a hash reference or
# as the complete hash.
if (@_ == 0) {
@entered = () ;
}
elsif (@_ == 1) {
my $href = $_[0] ;
return $self->setError("Expected even number of parameters, got 1")
if ! defined $href or ! ref $href or ref $href ne "HASH" ;
foreach my $key (keys %$href) {
push @entered, $key ;
push @entered, \$href->{$key} ;
}
}
else {
my $count = @_;
return $self->setError("Expected even number of parameters, got $count")
if $count % 2 != 0 ;
for my $i (0.. $count / 2 - 1) {
push @entered, $_[2* $i] ;
push @entered, \$_[2* $i+1] ;
}
}
while (my ($key, $v) = each %$default)
{
croak "need 4 params [@$v]"
if @$v != 4 ;
my ($first_only, $sticky, $type, $value) = @$v ;
my $x ;
$self->_checkType($key, \$value, $type, 0, \$x)
or return undef ;
$key = lc $key;
if ($firstTime || ! $sticky) {
$got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ;
}
$got->{$key}[OFF_PARSED] = 0 ;
}
for my $i (0.. @entered / 2 - 1) {
my $key = $entered[2* $i] ;
my $value = $entered[2* $i+1] ;
#print "Key [$key] Value [$value]" ;
#print defined $$value ? "[$$value]\n" : "[undef]\n";
$key =~ s/^-// ;
my $canonkey = lc $key;
if ($got->{$canonkey} && ($firstTime ||
! $got->{$canonkey}[OFF_FIRST_ONLY] ))
{
my $type = $got->{$canonkey}[OFF_TYPE] ;
my $s ;
$self->_checkType($key, $value, $type, 1, \$s)
or return undef ;
#$value = $$value unless $type & Parse_store_ref ;
$value = $$value ;
$got->{$canonkey} = [1, $type, $value, $s] ;
}
else
{ push (@Bad, $key) }
}
if (@Bad) {
my ($bad) = join(", ", @Bad) ;
return $self->setError("unknown key value(s) @Bad") ;
}
return 1;
}
sub Compress::Raw::Zlib::Parameters::_checkType
{
my $self = shift ;
my $key = shift ;
my $value = shift ;
my $type = shift ;
my $validate = shift ;
my $output = shift;
#local $Carp::CarpLevel = $level ;
#print "PARSE $type $key $value $validate $sub\n" ;
# if ( $type & Parse_store_ref)
# {
# #$value = $$value
# # if ref ${ $value } ;
#
# $$output = $value ;
# return 1;
# }
$value = $$value ;
if ($type & Parse_any)
{
$$output = $value ;
return 1;
}
elsif ($type & Parse_unsigned)
{
return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'")
if $validate && ! defined $value ;
return $self->setError("Parameter '$key' must be an unsigned int, got '$value'")
if $validate && $value !~ /^\d+$/;
$$output = defined $value ? $value : 0 ;
return 1;
}
elsif ($type & Parse_signed)
{
return $self->setError("Parameter '$key' must be a signed int, got 'undef'")
if $validate && ! defined $value ;
return $self->setError("Parameter '$key' must be a signed int, got '$value'")
if $validate && $value !~ /^-?\d+$/;
$$output = defined $value ? $value : 0 ;
return 1 ;
}
elsif ($type & Parse_boolean)
{
return $self->setError("Parameter '$key' must be an int, got '$value'")
if $validate && defined $value && $value !~ /^\d*$/;
$$output = defined $value ? $value != 0 : 0 ;
return 1;
}
# elsif ($type & Parse_string)
# {
# $$output = defined $value ? $value : "" ;
# return 1;
# }
$$output = $value ;
return 1;
}
sub Compress::Raw::Zlib::Parameters::parsed
{
my $self = shift ;
my $name = shift ;
return $self->{Got}{lc $name}[OFF_PARSED] ;
}
sub Compress::Raw::Zlib::Parameters::value
{
my $self = shift ;
my $name = shift ;
if (@_)
{
$self->{Got}{lc $name}[OFF_PARSED] = 1;
$self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ;
$self->{Got}{lc $name}[OFF_FIXED] = $_[0] ;
}
return $self->{Got}{lc $name}[OFF_FIXED] ;
}
our $OPTIONS_deflate =
{
'AppendOutput' => [1, 1, Parse_boolean, 0],
'CRC32' => [1, 1, Parse_boolean, 0],
'ADLER32' => [1, 1, Parse_boolean, 0],
'Bufsize' => [1, 1, Parse_unsigned, 4096],
'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
'Dictionary' => [1, 1, Parse_any, ""],
};
sub Compress::Raw::Zlib::Deflate::new
{
my $pkg = shift ;
my ($got) = ParseParameters(0, $OPTIONS_deflate, @_);
croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " .
$got->value('Bufsize')
unless $got->value('Bufsize') >= 1;
my $flags = 0 ;
$flags |= FLAG_APPEND if $got->value('AppendOutput') ;
$flags |= FLAG_CRC if $got->value('CRC32') ;
$flags |= FLAG_ADLER if $got->value('ADLER32') ;
my $windowBits = $got->value('WindowBits');
$windowBits += MAX_WBITS()
if ($windowBits & MAX_WBITS()) == 0 ;
_deflateInit($flags,
$got->value('Level'),
$got->value('Method'),
$windowBits,
$got->value('MemLevel'),
$got->value('Strategy'),
$got->value('Bufsize'),
$got->value('Dictionary')) ;
}
sub Compress::Raw::Zlib::deflateStream::STORABLE_freeze
{
my $type = ref shift;
croak "Cannot freeze $type object\n";
}
sub Compress::Raw::Zlib::deflateStream::STORABLE_thaw
{
my $type = ref shift;
croak "Cannot thaw $type object\n";
}
our $OPTIONS_inflate =
{
'AppendOutput' => [1, 1, Parse_boolean, 0],
'LimitOutput' => [1, 1, Parse_boolean, 0],
'CRC32' => [1, 1, Parse_boolean, 0],
'ADLER32' => [1, 1, Parse_boolean, 0],
'ConsumeInput' => [1, 1, Parse_boolean, 1],
'Bufsize' => [1, 1, Parse_unsigned, 4096],
'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
'Dictionary' => [1, 1, Parse_any, ""],
} ;
sub Compress::Raw::Zlib::Inflate::new
{
my $pkg = shift ;
my ($got) = ParseParameters(0, $OPTIONS_inflate, @_);
croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " .
$got->value('Bufsize')
unless $got->value('Bufsize') >= 1;
my $flags = 0 ;
$flags |= FLAG_APPEND if $got->value('AppendOutput') ;
$flags |= FLAG_CRC if $got->value('CRC32') ;
$flags |= FLAG_ADLER if $got->value('ADLER32') ;
$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
$flags |= FLAG_LIMIT_OUTPUT if $got->value('LimitOutput') ;
my $windowBits = $got->value('WindowBits');
$windowBits += MAX_WBITS()
if ($windowBits & MAX_WBITS()) == 0 ;
_inflateInit($flags, $windowBits, $got->value('Bufsize'),
$got->value('Dictionary')) ;
}
sub Compress::Raw::Zlib::inflateStream::STORABLE_freeze
{
my $type = ref shift;
croak "Cannot freeze $type object\n";
}
sub Compress::Raw::Zlib::inflateStream::STORABLE_thaw
{
my $type = ref shift;
croak "Cannot thaw $type object\n";
}
sub Compress::Raw::Zlib::InflateScan::new
{
my $pkg = shift ;
my ($got) = ParseParameters(0,
{
'CRC32' => [1, 1, Parse_boolean, 0],
'ADLER32' => [1, 1, Parse_boolean, 0],
'Bufsize' => [1, 1, Parse_unsigned, 4096],
'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()],
'Dictionary' => [1, 1, Parse_any, ""],
}, @_) ;
croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " .
$got->value('Bufsize')
unless $got->value('Bufsize') >= 1;
my $flags = 0 ;
#$flags |= FLAG_APPEND if $got->value('AppendOutput') ;
$flags |= FLAG_CRC if $got->value('CRC32') ;
$flags |= FLAG_ADLER if $got->value('ADLER32') ;
#$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
_inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'),
'') ;
}
sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream
{
my $pkg = shift ;
my ($got) = ParseParameters(0,
{
'AppendOutput' => [1, 1, Parse_boolean, 0],
'CRC32' => [1, 1, Parse_boolean, 0],
'ADLER32' => [1, 1, Parse_boolean, 0],
'Bufsize' => [1, 1, Parse_unsigned, 4096],
'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()],
'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
}, @_) ;
croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " .
$got->value('Bufsize')
unless $got->value('Bufsize') >= 1;
my $flags = 0 ;
$flags |= FLAG_APPEND if $got->value('AppendOutput') ;
$flags |= FLAG_CRC if $got->value('CRC32') ;
$flags |= FLAG_ADLER if $got->value('ADLER32') ;
$pkg->_createDeflateStream($flags,
$got->value('Level'),
$got->value('Method'),
$got->value('WindowBits'),
$got->value('MemLevel'),
$got->value('Strategy'),
$got->value('Bufsize'),
) ;
}
sub Compress::Raw::Zlib::inflateScanStream::inflate
{
my $self = shift ;
my $buffer = $_[1];
my $eof = $_[2];
my $status = $self->scan(@_);
if ($status == Z_OK() && $_[2]) {
my $byte = ' ';
$status = $self->scan(\$byte, $_[1]) ;
}
return $status ;
}
sub Compress::Raw::Zlib::deflateStream::deflateParams
{
my $self = shift ;
my ($got) = ParseParameters(0, {
'Level' => [1, 1, Parse_signed, undef],
'Strategy' => [1, 1, Parse_unsigned, undef],
'Bufsize' => [1, 1, Parse_unsigned, undef],
},
@_) ;
croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy"
unless $got->parsed('Level') + $got->parsed('Strategy') +
$got->parsed('Bufsize');
croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " .
$got->value('Bufsize')
if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1;
my $flags = 0;
$flags |= 1 if $got->parsed('Level') ;
$flags |= 2 if $got->parsed('Strategy') ;
$flags |= 4 if $got->parsed('Bufsize') ;
$self->_deflateParams($flags, $got->value('Level'),
$got->value('Strategy'), $got->value('Bufsize'));
}
1;
__END__
=head1 NAME
Compress::Raw::Zlib - Low-Level Interface to zlib compression library
=head1 SYNOPSIS
use Compress::Raw::Zlib ;
($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) ;
$status = $d->deflate($input, $output) ;
$status = $d->flush($output [, $flush_type]) ;
$d->deflateReset() ;
$d->deflateParams(OPTS) ;
$d->deflateTune(OPTS) ;
$d->dict_adler() ;
$d->crc32() ;
$d->adler32() ;
$d->total_in() ;
$d->total_out() ;
$d->msg() ;
$d->get_Strategy();
$d->get_Level();
$d->get_BufSize();
($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) ;
$status = $i->inflate($input, $output [, $eof]) ;
$status = $i->inflateSync($input) ;
$i->inflateReset() ;
$i->dict_adler() ;
$d->crc32() ;
$d->adler32() ;
$i->total_in() ;
$i->total_out() ;
$i->msg() ;
$d->get_BufSize();
$crc = adler32($buffer [,$crc]) ;
$crc = crc32($buffer [,$crc]) ;
$crc = crc32_combine($crc1, $crc2, $len2);
$adler = adler32_combine($adler1, $adler2, $len2);
my $version = Compress::Raw::Zlib::zlib_version();
my $flags = Compress::Raw::Zlib::zlibCompileFlags();
=head1 DESCRIPTION
The I<Compress::Raw::Zlib> module provides a Perl interface to the I<zlib>
compression library (see L</AUTHOR> for details about where to get
I<zlib>).
=head1 Compress::Raw::Zlib::Deflate
This section defines an interface that allows in-memory compression using
the I<deflate> interface provided by zlib.
Here is a definition of the interface available:
=head2 B<($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) >
Initialises a deflation object.
If you are familiar with the I<zlib> library, it combines the
features of the I<zlib> functions C<deflateInit>, C<deflateInit2>
and C<deflateSetDictionary>.
If successful, it will return the initialised deflation object, C<$d>
and a C<$status> of C<Z_OK> in a list context. In scalar context it
returns the deflation object, C<$d>, only.
If not successful, the returned deflation object, C<$d>, will be
I<undef> and C<$status> will hold the a I<zlib> error code.
The function optionally takes a number of named options specified as
C<< Name => value >> pairs. This allows individual options to be
tailored without having to specify them all in the parameter list.
For backward compatibility, it is also possible to pass the parameters
as a reference to a hash containing the name=>value pairs.
Below is a list of the valid options:
=over 5
=item B<-Level>
Defines the compression level. Valid values are 0 through 9,
C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
C<Z_DEFAULT_COMPRESSION>.
The default is C<Z_DEFAULT_COMPRESSION>.
=item B<-Method>
Defines the compression method. The only valid value at present (and
the default) is C<Z_DEFLATED>.
=item B<-WindowBits>
To compress an RFC 1950 data stream, set C<WindowBits> to a positive
number between 8 and 15.
To compress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
To compress an RFC 1952 data stream (i.e. gzip), set C<WindowBits> to
C<WANT_GZIP>.
For a definition of the meaning and valid values for C<WindowBits>
refer to the I<zlib> documentation for I<deflateInit2>.
Defaults to C<MAX_WBITS>.
=item B<-MemLevel>
For a definition of the meaning and valid values for C<MemLevel>
refer to the I<zlib> documentation for I<deflateInit2>.
Defaults to MAX_MEM_LEVEL.
=item B<-Strategy>
Defines the strategy used to tune the compression. The valid values are
C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED>, C<Z_RLE>, C<Z_FIXED> and
C<Z_HUFFMAN_ONLY>.
The default is C<Z_DEFAULT_STRATEGY>.
=item B<-Dictionary>
When a dictionary is specified I<Compress::Raw::Zlib> will automatically
call C<deflateSetDictionary> directly after calling C<deflateInit>. The
Adler32 value for the dictionary can be obtained by calling the method
C<$d-E<gt>dict_adler()>.
The default is no dictionary.
=item B<-Bufsize>
Sets the initial size for the output buffer used by the C<$d-E<gt>deflate>
and C<$d-E<gt>flush> methods. If the buffer has to be
reallocated to increase the size, it will grow in increments of
C<Bufsize>.
The default buffer size is 4096.
=item B<-AppendOutput>
This option controls how data is written to the output buffer by the
C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods.
If the C<AppendOutput> option is set to false, the output buffers in the
C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods will be truncated before
uncompressed data is written to them.
If the option is set to true, uncompressed data will be appended to the
output buffer in the C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods.
This option defaults to false.
=item B<-CRC32>
If set to true, a crc32 checksum of the uncompressed data will be
calculated. Use the C<$d-E<gt>crc32> method to retrieve this value.
This option defaults to false.
=item B<-ADLER32>
If set to true, an adler32 checksum of the uncompressed data will be
calculated. Use the C<$d-E<gt>adler32> method to retrieve this value.
This option defaults to false.
=back
Here is an example of using the C<Compress::Raw::Zlib::Deflate> optional
parameter list to override the default buffer size and compression
level. All other options will take their default values.
my $d = new Compress::Raw::Zlib::Deflate ( -Bufsize => 300,
-Level => Z_BEST_SPEED ) ;
=head2 B<$status = $d-E<gt>deflate($input, $output)>
Deflates the contents of C<$input> and writes the compressed data to
C<$output>.
The C<$input> and C<$output> parameters can be either scalars or scalar
references.
When finished, C<$input> will be completely processed (assuming there
were no errors). If the deflation was successful it writes the deflated
data to C<$output> and returns a status value of C<Z_OK>.
On error, it returns a I<zlib> error code.
If the C<AppendOutput> option is set to true in the constructor for
the C<$d> object, the compressed data will be appended to C<$output>. If
it is false, C<$output> will be truncated before any compressed data is
written to it.
B<Note>: This method will not necessarily write compressed data to
C<$output> every time it is called. So do not assume that there has been
an error if the contents of C<$output> is empty on returning from
this method. As long as the return code from the method is C<Z_OK>,
the deflate has succeeded.
=head2 B<$status = $d-E<gt>flush($output [, $flush_type]) >
Typically used to finish the deflation. Any pending output will be
written to C<$output>.
Returns C<Z_OK> if successful.
Note that flushing can seriously degrade the compression ratio, so it
should only be used to terminate a decompression (using C<Z_FINISH>) or
when you want to create a I<full flush point> (using C<Z_FULL_FLUSH>).
By default the C<flush_type> used is C<Z_FINISH>. Other valid values
for C<flush_type> are C<Z_NO_FLUSH>, C<Z_PARTIAL_FLUSH>, C<Z_SYNC_FLUSH>
and C<Z_FULL_FLUSH>. It is strongly recommended that you only set the
C<flush_type> parameter if you fully understand the implications of
what it does. See the C<zlib> documentation for details.
If the C<AppendOutput> option is set to true in the constructor for
the C<$d> object, the compressed data will be appended to C<$output>. If
it is false, C<$output> will be truncated before any compressed data is
written to it.
=head2 B<$status = $d-E<gt>deflateReset() >
This method will reset the deflation object C<$d>. It can be used when you
are compressing multiple data streams and want to use the same object to
compress each of them. It should only be used once the previous data stream
has been flushed successfully, i.e. a call to C<< $d->flush(Z_FINISH) >> has
returned C<Z_OK>.
Returns C<Z_OK> if successful.
=head2 B<$status = $d-E<gt>deflateParams([OPT])>
Change settings for the deflate object C<$d>.
The list of the valid options is shown below. Options not specified
will remain unchanged.
=over 5
=item B<-Level>
Defines the compression level. Valid values are 0 through 9,
C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
C<Z_DEFAULT_COMPRESSION>.
=item B<-Strategy>
Defines the strategy used to tune the compression. The valid values are
C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
=item B<-BufSize>
Sets the initial size for the output buffer used by the C<$d-E<gt>deflate>
and C<$d-E<gt>flush> methods. If the buffer has to be
reallocated to increase the size, it will grow in increments of
C<Bufsize>.
=back
=head2 B<$status = $d-E<gt>deflateTune($good_length, $max_lazy, $nice_length, $max_chain)>
Tune the internal settings for the deflate object C<$d>. This option is
only available if you are running zlib 1.2.2.3 or better.
Refer to the documentation in zlib.h for instructions on how to fly
C<deflateTune>.
=head2 B<$d-E<gt>dict_adler()>
Returns the adler32 value for the dictionary.
=head2 B<$d-E<gt>crc32()>
Returns the crc32 value for the uncompressed data to date.
If the C<CRC32> option is not enabled in the constructor for this object,
this method will always return 0;
=head2 B<$d-E<gt>adler32()>
Returns the adler32 value for the uncompressed data to date.
=head2 B<$d-E<gt>msg()>
Returns the last error message generated by zlib.
=head2 B<$d-E<gt>total_in()>
Returns the total number of bytes uncompressed bytes input to deflate.
=head2 B<$d-E<gt>total_out()>
Returns the total number of compressed bytes output from deflate.
=head2 B<$d-E<gt>get_Strategy()>
Returns the deflation strategy currently used. Valid values are
C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
=head2 B<$d-E<gt>get_Level()>
Returns the compression level being used.
=head2 B<$d-E<gt>get_BufSize()>
Returns the buffer size used to carry out the compression.
=head2 Example
Here is a trivial example of using C<deflate>. It simply reads standard
input, deflates it and writes it to standard output.
use strict ;
use warnings ;
use Compress::Raw::Zlib ;
binmode STDIN;
binmode STDOUT;
my $x = new Compress::Raw::Zlib::Deflate
or die "Cannot create a deflation stream\n" ;
my ($output, $status) ;
while (<>)
{
$status = $x->deflate($_, $output) ;
$status == Z_OK
or die "deflation failed\n" ;
print $output ;
}
$status = $x->flush($output) ;
$status == Z_OK
or die "deflation failed\n" ;
print $output ;
=head1 Compress::Raw::Zlib::Inflate
This section defines an interface that allows in-memory uncompression using
the I<inflate> interface provided by zlib.
Here is a definition of the interface:
=head2 B< ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) >
Initialises an inflation object.
In a list context it returns the inflation object, C<$i>, and the
I<zlib> status code (C<$status>). In a scalar context it returns the
inflation object only.
If successful, C<$i> will hold the inflation object and C<$status> will
be C<Z_OK>.
If not successful, C<$i> will be I<undef> and C<$status> will hold the
I<zlib> error code.
The function optionally takes a number of named options specified as
C<< -Name => value >> pairs. This allows individual options to be
tailored without having to specify them all in the parameter list.
For backward compatibility, it is also possible to pass the parameters
as a reference to a hash containing the C<< name=>value >> pairs.
Here is a list of the valid options:
=over 5
=item B<-WindowBits>
To uncompress an RFC 1950 data stream, set C<WindowBits> to a positive
number between 8 and 15.
To uncompress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
To uncompress an RFC 1952 data stream (i.e. gzip), set C<WindowBits> to
C<WANT_GZIP>.
To auto-detect and uncompress an RFC 1950 or RFC 1952 data stream (i.e.
gzip), set C<WindowBits> to C<WANT_GZIP_OR_ZLIB>.
For a full definition of the meaning and valid values for C<WindowBits>
refer to the I<zlib> documentation for I<inflateInit2>.
Defaults to C<MAX_WBITS>.
=item B<-Bufsize>
Sets the initial size for the output buffer used by the C<$i-E<gt>inflate>
method. If the output buffer in this method has to be reallocated to
increase the size, it will grow in increments of C<Bufsize>.
Default is 4096.
=item B<-Dictionary>
The default is no dictionary.
=item B<-AppendOutput>
This option controls how data is written to the output buffer by the
C<$i-E<gt>inflate> method.
If the option is set to false, the output buffer in the C<$i-E<gt>inflate>
method will be truncated before uncompressed data is written to it.
If the option is set to true, uncompressed data will be appended to the
output buffer by the C<$i-E<gt>inflate> method.
This option defaults to false.
=item B<-CRC32>
If set to true, a crc32 checksum of the uncompressed data will be
calculated. Use the C<$i-E<gt>crc32> method to retrieve this value.
This option defaults to false.
=item B<-ADLER32>
If set to true, an adler32 checksum of the uncompressed data will be
calculated. Use the C<$i-E<gt>adler32> method to retrieve this value.
This option defaults to false.
=item B<-ConsumeInput>
If set to true, this option will remove compressed data from the input
buffer of the C<< $i->inflate >> method as the inflate progresses.
This option can be useful when you are processing compressed data that is
embedded in another file/buffer. In this case the data that immediately
follows the compressed stream will be left in the input buffer.
This option defaults to true.
=item B<-LimitOutput>
The C<LimitOutput> option changes the behavior of the C<< $i->inflate >>
method so that the amount of memory used by the output buffer can be
limited.
When C<LimitOutput> is used the size of the output buffer used will either
be the value of the C<Bufsize> option or the amount of memory already
allocated to C<$output>, whichever is larger. Predicting the output size
available is tricky, so don't rely on getting an exact output buffer size.
When C<LimitOutout> is not specified C<< $i->inflate >> will use as much
memory as it takes to write all the uncompressed data it creates by
uncompressing the input buffer.
If C<LimitOutput> is enabled, the C<ConsumeInput> option will also be
enabled.
This option defaults to false.
See L</The LimitOutput option> for a discussion on why C<LimitOutput> is
needed and how to use it.
=back
Here is an example of using an optional parameter to override the default
buffer size.
my ($i, $status) = new Compress::Raw::Zlib::Inflate( -Bufsize => 300 ) ;
=head2 B< $status = $i-E<gt>inflate($input, $output [,$eof]) >
Inflates the complete contents of C<$input> and writes the uncompressed
data to C<$output>. The C<$input> and C<$output> parameters can either be
scalars or scalar references.
Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the
compressed data has been successfully reached.
If not successful C<$status> will hold the I<zlib> error code.
If the C<ConsumeInput> option has been set to true when the
C<Compress::Raw::Zlib::Inflate> object is created, the C<$input> parameter
is modified by C<inflate>. On completion it will contain what remains
of the input buffer after inflation. In practice, this means that when
the return status is C<Z_OK> the C<$input> parameter will contain an
empty string, and when the return status is C<Z_STREAM_END> the C<$input>
parameter will contains what (if anything) was stored in the input buffer
after the deflated data stream.
This feature is useful when processing a file format that encapsulates
a compressed data stream (e.g. gzip, zip) and there is useful data
immediately after the deflation stream.
If the C<AppendOutput> option is set to true in the constructor for
this object, the uncompressed data will be appended to C<$output>. If
it is false, C<$output> will be truncated before any uncompressed data
is written to it.
The C<$eof> parameter needs a bit of explanation.
Prior to version 1.2.0, zlib assumed that there was at least one trailing
byte immediately after the compressed data stream when it was carrying out
decompression. This normally isn't a problem because the majority of zlib
applications guarantee that there will be data directly after the
compressed data stream. For example, both gzip (RFC 1950) and zip both
define trailing data that follows the compressed data stream.
The C<$eof> parameter only needs to be used if B<all> of the following
conditions apply
=over 5
=item 1
You are either using a copy of zlib that is older than version 1.2.0 or you
want your application code to be able to run with as many different
versions of zlib as possible.
=item 2
You have set the C<WindowBits> parameter to C<-MAX_WBITS> in the constructor
for this object, i.e. you are uncompressing a raw deflated data stream
(RFC 1951).
=item 3
There is no data immediately after the compressed data stream.
=back
If B<all> of these are the case, then you need to set the C<$eof> parameter
to true on the final call (and only the final call) to C<$i-E<gt>inflate>.
If you have built this module with zlib >= 1.2.0, the C<$eof> parameter is
ignored. You can still set it if you want, but it won't be used behind the
scenes.
=head2 B<$status = $i-E<gt>inflateSync($input)>
This method can be used to attempt to recover good data from a compressed
data stream that is partially corrupt.
It scans C<$input> until it reaches either a I<full flush point> or the
end of the buffer.
If a I<full flush point> is found, C<Z_OK> is returned and C<$input>
will be have all data up to the flush point removed. This data can then be
passed to the C<$i-E<gt>inflate> method to be uncompressed.
Any other return code means that a flush point was not found. If more
data is available, C<inflateSync> can be called repeatedly with more
compressed data until the flush point is found.
Note I<full flush points> are not present by default in compressed
data streams. They must have been added explicitly when the data stream
was created by calling C<Compress::Deflate::flush> with C<Z_FULL_FLUSH>.
=head2 B<$status = $i-E<gt>inflateReset() >
This method will reset the inflation object C<$i>. It can be used when you
are uncompressing multiple data streams and want to use the same object to
uncompress each of them.
Returns C<Z_OK> if successful.
=head2 B<$i-E<gt>dict_adler()>
Returns the adler32 value for the dictionary.
=head2 B<$i-E<gt>crc32()>
Returns the crc32 value for the uncompressed data to date.
If the C<CRC32> option is not enabled in the constructor for this object,
this method will always return 0;
=head2 B<$i-E<gt>adler32()>
Returns the adler32 value for the uncompressed data to date.
If the C<ADLER32> option is not enabled in the constructor for this object,
this method will always return 0;
=head2 B<$i-E<gt>msg()>
Returns the last error message generated by zlib.
=head2 B<$i-E<gt>total_in()>
Returns the total number of bytes compressed bytes input to inflate.
=head2 B<$i-E<gt>total_out()>
Returns the total number of uncompressed bytes output from inflate.
=head2 B<$d-E<gt>get_BufSize()>
Returns the buffer size used to carry out the decompression.
=head2 Examples
Here is an example of using C<inflate>.
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate()
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
while (read(STDIN, $input, 4096))
{
$status = $x->inflate($input, $output) ;
print $output ;
last if $status != Z_OK ;
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
The next example show how to use the C<LimitOutput> option. Notice the use
of two nested loops in this case. The outer loop reads the data from the
input source - STDIN and the inner loop repeatedly calls C<inflate> until
C<$input> is exhausted, we get an error, or the end of the stream is
reached. One point worth remembering is by using the C<LimitOutput> option
you also get C<ConsumeInput> set as well - this makes the code below much
simpler.
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
OUTER:
while (read(STDIN, $input, 4096))
{
do
{
$status = $x->inflate($input, $output) ;
print $output ;
last OUTER
unless $status == Z_OK || $status == Z_BUF_ERROR ;
}
while ($status == Z_OK && length $input);
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
=head1 CHECKSUM FUNCTIONS
Two functions are provided by I<zlib> to calculate checksums. For the
Perl interface, the order of the two parameters in both functions has
been reversed. This allows both running checksums and one off
calculations to be done.
$crc = adler32($buffer [,$crc]) ;
$crc = crc32($buffer [,$crc]) ;
The buffer parameters can either be a scalar or a scalar reference.
If the $crc parameters is C<undef>, the crc value will be reset.
If you have built this module with zlib 1.2.3 or better, two more
CRC-related functions are available.
$crc = crc32_combine($crc1, $crc2, $len2);
$adler = adler32_combine($adler1, $adler2, $len2);
These functions allow checksums to be merged.
Refer to the I<zlib> documentation for more details.
=head1 Misc
=head2 my $version = Compress::Raw::Zlib::zlib_version();
Returns the version of the zlib library.
=head2 my $flags = Compress::Raw::Zlib::zlibCompileFlags();
Returns the flags indicating compile-time options that were used to build
the zlib library. See the zlib documentation for a description of the flags
returned by C<zlibCompileFlags>.
Note that when the zlib sources are built along with this module the
C<sprintf> flags (bits 24, 25 and 26) should be ignored.
If you are using zlib 1.2.0 or older, C<zlibCompileFlags> will return 0.
=head1 The LimitOutput option.
By default C<< $i->inflate($input, $output) >> will uncompress I<all> data
in C<$input> and write I<all> of the uncompressed data it has generated to
C<$output>. This makes the interface to C<inflate> much simpler - if the
method has uncompressed C<$input> successfully I<all> compressed data in
C<$input> will have been dealt with. So if you are reading from an input
source and uncompressing as you go the code will look something like this
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate()
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
my ($output, $status) ;
while (read(STDIN, $input, 4096))
{
$status = $x->inflate($input, $output) ;
print $output ;
last if $status != Z_OK ;
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
The points to note are
=over 5
=item *
The main processing loop in the code handles reading of compressed data
from STDIN.
=item *
The status code returned from C<inflate> will only trigger termination of
the main processing loop if it isn't C<Z_OK>. When C<LimitOutput> has not
been used the C<Z_OK> status means that the end of the compressed
data stream has been reached or there has been an error in uncompression.
=item *
After the call to C<inflate> I<all> of the uncompressed data in C<$input>
will have been processed. This means the subsequent call to C<read> can
overwrite it's contents without any problem.
=back
For most use-cases the behavior described above is acceptable (this module
and it's predecessor, C<Compress::Zlib>, have used it for over 10 years
without an issue), but in a few very specific use-cases the amount of
memory required for C<$output> can prohibitively large. For example, if the
compressed data stream contains the same pattern repeated thousands of
times, a relatively small compressed data stream can uncompress into
hundreds of megabytes. Remember C<inflate> will keep allocating memory
until I<all> the uncompressed data has been written to the output buffer -
the size of C<$output> is unbounded.
The C<LimitOutput> option is designed to help with this use-case.
The main difference in your code when using C<LimitOutput> is having to
deal with cases where the C<$input> parameter still contains some
uncompressed data that C<inflate> hasn't processed yet. The status code
returned from C<inflate> will be C<Z_OK> if uncompression took place and
C<Z_BUF_ERROR> if the output buffer is full.
Below is typical code that shows how to use C<LimitOutput>.
use strict ;
use warnings ;
use Compress::Raw::Zlib;
my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
OUTER:
while (read(STDIN, $input, 4096))
{
do
{
$status = $x->inflate($input, $output) ;
print $output ;
last OUTER
unless $status == Z_OK || $status == Z_BUF_ERROR ;
}
while ($status == Z_OK && length $input);
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
Points to note this time:
=over 5
=item *
There are now two nested loops in the code: the outer loop for reading the
compressed data from STDIN, as before; and the inner loop to carry out the
uncompression.
=item *
There are two exit points from the inner uncompression loop.
Firstly when C<inflate> has returned a status other than C<Z_OK> or
C<Z_BUF_ERROR>. This means that either the end of the compressed data
stream has been reached (C<Z_STREAM_END>) or there is an error in the
compressed data. In either of these cases there is no point in continuing
with reading the compressed data, so both loops are terminated.
The second exit point tests if there is any data left in the input buffer,
C<$input> - remember that the C<ConsumeInput> option is automatically
enabled when C<LimitOutput> is used. When the input buffer has been
exhausted, the outer loop can run again and overwrite a now empty
C<$input>.
=back
=head1 ACCESSING ZIP FILES
Although it is possible (with some effort on your part) to use this module
to access .zip files, there are other perl modules available that will do
all the hard work for you. Check out C<Archive::Zip>,
C<Archive::Zip::SimpleZip>, C<IO::Compress::Zip> and
C<IO::Uncompress::Unzip>.
=head1 FAQ
=head2 Compatibility with Unix compress/uncompress.
This module is not compatible with Unix C<compress>.
If you have the C<uncompress> program available, you can use this to read
compressed files
open F, "uncompress -c $filename |";
while (<F>)
{
...
Alternatively, if you have the C<gunzip> program available, you can use
this to read compressed files
open F, "gunzip -c $filename |";
while (<F>)
{
...
and this to write compress files, if you have the C<compress> program
available
open F, "| compress -c $filename ";
print F "data";
...
close F ;
=head2 Accessing .tar.Z files
See previous FAQ item.
If the C<Archive::Tar> module is installed and either the C<uncompress> or
C<gunzip> programs are available, you can use one of these workarounds to
read C<.tar.Z> files.
Firstly with C<uncompress>
use strict;
use warnings;
use Archive::Tar;
open F, "uncompress -c $filename |";
my $tar = Archive::Tar->new(*F);
...
and this with C<gunzip>
use strict;
use warnings;
use Archive::Tar;
open F, "gunzip -c $filename |";
my $tar = Archive::Tar->new(*F);
...
Similarly, if the C<compress> program is available, you can use this to
write a C<.tar.Z> file
use strict;
use warnings;
use Archive::Tar;
use IO::File;
my $fh = new IO::File "| compress -c >$filename";
my $tar = Archive::Tar->new();
...
$tar->write($fh);
$fh->close ;
=head2 Zlib Library Version Support
By default C<Compress::Raw::Zlib> will build with a private copy of version
1.2.5 of the zlib library. (See the F<README> file for details of
how to override this behaviour)
If you decide to use a different version of the zlib library, you need to be
aware of the following issues
=over 5
=item *
First off, you must have zlib 1.0.5 or better.
=item *
You need to have zlib 1.2.1 or better if you want to use the C<-Merge>
option with C<IO::Compress::Gzip>, C<IO::Compress::Deflate> and
C<IO::Compress::RawDeflate>.
=back
=head1 CONSTANTS
All the I<zlib> constants are automatically imported when you make use
of I<Compress::Raw::Zlib>.
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
L<IO::Compress::FAQ|IO::Compress::FAQ>
L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
L<Archive::Tar|Archive::Tar>,
L<IO::Zlib|IO::Zlib>
For RFC 1950, 1951 and 1952 see
L<http://www.faqs.org/rfcs/rfc1950.html>,
L<http://www.faqs.org/rfcs/rfc1951.html> and
L<http://www.faqs.org/rfcs/rfc1952.html>
The I<zlib> compression library was written by Jean-loup Gailly
C<gzip@prep.ai.mit.edu> and Mark Adler C<madler@alumni.caltech.edu>.
The primary site for the I<zlib> compression library is
L<http://www.zlib.org>.
The primary site for gzip is L<http://www.gzip.org>.
=head1 AUTHOR
This module was written by Paul Marquess, C<pmqs@cpan.org>.
=head1 MODIFICATION HISTORY
See the Changes file.
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2005-2018 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
Compress/Raw/Bzip2.pm 0000644 00000024673 15033552504 0010432 0 ustar 00
package Compress::Raw::Bzip2;
use strict ;
use warnings ;
require 5.006 ;
require Exporter;
use Carp ;
use bytes ;
our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
$VERSION = '2.081';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@ISA = qw(Exporter);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
@EXPORT = qw(
BZ_RUN
BZ_FLUSH
BZ_FINISH
BZ_OK
BZ_RUN_OK
BZ_FLUSH_OK
BZ_FINISH_OK
BZ_STREAM_END
BZ_SEQUENCE_ERROR
BZ_PARAM_ERROR
BZ_MEM_ERROR
BZ_DATA_ERROR
BZ_DATA_ERROR_MAGIC
BZ_IO_ERROR
BZ_UNEXPECTED_EOF
BZ_OUTBUFF_FULL
BZ_CONFIG_ERROR
);
sub AUTOLOAD {
my($constname);
($constname = $AUTOLOAD) =~ s/.*:://;
my ($error, $val) = constant($constname);
Carp::croak $error if $error;
no strict 'refs';
*{$AUTOLOAD} = sub { $val };
goto &{$AUTOLOAD};
}
use constant FLAG_APPEND => 1 ;
use constant FLAG_CRC => 2 ;
use constant FLAG_ADLER => 4 ;
use constant FLAG_CONSUME_INPUT => 8 ;
eval {
require XSLoader;
XSLoader::load('Compress::Raw::Bzip2', $XS_VERSION);
1;
}
or do {
require DynaLoader;
local @ISA = qw(DynaLoader);
bootstrap Compress::Raw::Bzip2 $XS_VERSION ;
};
#sub Compress::Raw::Bzip2::new
#{
# my $class = shift ;
# my ($ptr, $status) = _new(@_);
# return wantarray ? (undef, $status) : undef
# unless $ptr ;
# my $obj = bless [$ptr], $class ;
# return wantarray ? ($obj, $status) : $obj;
#}
#
#package Compress::Raw::Bunzip2 ;
#
#sub Compress::Raw::Bunzip2::new
#{
# my $class = shift ;
# my ($ptr, $status) = _new(@_);
# return wantarray ? (undef, $status) : undef
# unless $ptr ;
# my $obj = bless [$ptr], $class ;
# return wantarray ? ($obj, $status) : $obj;
#}
sub Compress::Raw::Bzip2::STORABLE_freeze
{
my $type = ref shift;
croak "Cannot freeze $type object\n";
}
sub Compress::Raw::Bzip2::STORABLE_thaw
{
my $type = ref shift;
croak "Cannot thaw $type object\n";
}
sub Compress::Raw::Bunzip2::STORABLE_freeze
{
my $type = ref shift;
croak "Cannot freeze $type object\n";
}
sub Compress::Raw::Bunzip2::STORABLE_thaw
{
my $type = ref shift;
croak "Cannot thaw $type object\n";
}
package Compress::Raw::Bzip2;
1;
__END__
=head1 NAME
Compress::Raw::Bzip2 - Low-Level Interface to bzip2 compression library
=head1 SYNOPSIS
use Compress::Raw::Bzip2 ;
my ($bz, $status) = new Compress::Raw::Bzip2 [OPTS]
or die "Cannot create bzip2 object: $bzerno\n";
$status = $bz->bzdeflate($input, $output);
$status = $bz->bzflush($output);
$status = $bz->bzclose($output);
my ($bz, $status) = new Compress::Raw::Bunzip2 [OPTS]
or die "Cannot create bunzip2 object: $bzerno\n";
$status = $bz->bzinflate($input, $output);
my $version = Compress::Raw::Bzip2::bzlibversion();
=head1 DESCRIPTION
C<Compress::Raw::Bzip2> provides an interface to the in-memory
compression/uncompression functions from the bzip2 compression library.
Although the primary purpose for the existence of C<Compress::Raw::Bzip2>
is for use by the C<IO::Compress::Bzip2> and C<IO::Compress::Bunzip2>
modules, it can be used on its own for simple compression/uncompression
tasks.
=head1 Compression
=head2 ($z, $status) = new Compress::Raw::Bzip2 $appendOutput, $blockSize100k, $workfactor;
Creates a new compression object.
If successful, it will return the initialised compression object, C<$z>
and a C<$status> of C<BZ_OK> in a list context. In scalar context it
returns the deflation object, C<$z>, only.
If not successful, the returned compression object, C<$z>, will be
I<undef> and C<$status> will hold the a I<bzip2> error code.
Below is a list of the valid options:
=over 5
=item B<$appendOutput>
Controls whether the compressed data is appended to the output buffer in
the C<bzdeflate>, C<bzflush> and C<bzclose> methods.
Defaults to 1.
=item B<$blockSize100k>
To quote the bzip2 documentation
blockSize100k specifies the block size to be used for compression. It
should be a value between 1 and 9 inclusive, and the actual block size
used is 100000 x this figure. 9 gives the best compression but takes
most memory.
Defaults to 1.
=item B<$workfactor>
To quote the bzip2 documentation
This parameter controls how the compression phase behaves when
presented with worst case, highly repetitive, input data. If
compression runs into difficulties caused by repetitive data, the
library switches from the standard sorting algorithm to a fallback
algorithm. The fallback is slower than the standard algorithm by
perhaps a factor of three, but always behaves reasonably, no matter how
bad the input.
Lower values of workFactor reduce the amount of effort the standard
algorithm will expend before resorting to the fallback. You should set
this parameter carefully; too low, and many inputs will be handled by
the fallback algorithm and so compress rather slowly, too high, and
your average-to-worst case compression times can become very large. The
default value of 30 gives reasonable behaviour over a wide range of
circumstances.
Allowable values range from 0 to 250 inclusive. 0 is a special case,
equivalent to using the default value of 30.
Defaults to 0.
=back
=head2 $status = $bz->bzdeflate($input, $output);
Reads the contents of C<$input>, compresses it and writes the compressed
data to C<$output>.
Returns C<BZ_RUN_OK> on success and a C<bzip2> error code on failure.
If C<appendOutput> is enabled in the constructor for the bzip2 object, the
compressed data will be appended to C<$output>. If not enabled, C<$output>
will be truncated before the compressed data is written to it.
=head2 $status = $bz->bzflush($output);
Flushes any pending compressed data to C<$output>.
Returns C<BZ_RUN_OK> on success and a C<bzip2> error code on failure.
=head2 $status = $bz->bzclose($output);
Terminates the compressed data stream and flushes any pending compressed
data to C<$output>.
Returns C<BZ_STREAM_END> on success and a C<bzip2> error code on failure.
=head2 Example
=head1 Uncompression
=head2 ($z, $status) = new Compress::Raw::Bunzip2 $appendOutput, $consumeInput, $small, $verbosity, $limitOutput;
If successful, it will return the initialised uncompression object, C<$z>
and a C<$status> of C<BZ_OK> in a list context. In scalar context it
returns the deflation object, C<$z>, only.
If not successful, the returned uncompression object, C<$z>, will be
I<undef> and C<$status> will hold the a I<bzip2> error code.
Below is a list of the valid options:
=over 5
=item B<$appendOutput>
Controls whether the compressed data is appended to the output buffer in the
C<bzinflate>, C<bzflush> and C<bzclose> methods.
Defaults to 1.
=item B<$consumeInput>
=item B<$small>
To quote the bzip2 documentation
If small is nonzero, the library will use an alternative decompression
algorithm which uses less memory but at the cost of decompressing more
slowly (roughly speaking, half the speed, but the maximum memory
requirement drops to around 2300k).
Defaults to 0.
=item B<$limitOutput>
The C<LimitOutput> option changes the behavior of the C<< $i->bzinflate >>
method so that the amount of memory used by the output buffer can be
limited.
When C<LimitOutput> is used the size of the output buffer used will either
be the 16k or the amount of memory already allocated to C<$output>,
whichever is larger. Predicting the output size available is tricky, so
don't rely on getting an exact output buffer size.
When C<LimitOutout> is not specified C<< $i->bzinflate >> will use as much
memory as it takes to write all the uncompressed data it creates by
uncompressing the input buffer.
If C<LimitOutput> is enabled, the C<ConsumeInput> option will also be
enabled.
This option defaults to false.
=item B<$verbosity>
This parameter is ignored.
Defaults to 0.
=back
=head2 $status = $z->bzinflate($input, $output);
Uncompresses C<$input> and writes the uncompressed data to C<$output>.
Returns C<BZ_OK> if the uncompression was successful, but the end of the
compressed data stream has not been reached. Returns C<BZ_STREAM_END> on
successful uncompression and the end of the compression stream has been
reached.
If C<consumeInput> is enabled in the constructor for the bunzip2 object,
C<$input> will have all compressed data removed from it after
uncompression. On C<BZ_OK> return this will mean that C<$input> will be an
empty string; when C<BZ_STREAM_END> C<$input> will either be an empty
string or will contain whatever data immediately followed the compressed
data stream.
If C<appendOutput> is enabled in the constructor for the bunzip2 object,
the uncompressed data will be appended to C<$output>. If not enabled,
C<$output> will be truncated before the uncompressed data is written to it.
=head1 Misc
=head2 my $version = Compress::Raw::Bzip2::bzlibversion();
Returns the version of the underlying bzip2 library.
=head1 Constants
The following bzip2 constants are exported by this module
BZ_RUN
BZ_FLUSH
BZ_FINISH
BZ_OK
BZ_RUN_OK
BZ_FLUSH_OK
BZ_FINISH_OK
BZ_STREAM_END
BZ_SEQUENCE_ERROR
BZ_PARAM_ERROR
BZ_MEM_ERROR
BZ_DATA_ERROR
BZ_DATA_ERROR_MAGIC
BZ_IO_ERROR
BZ_UNEXPECTED_EOF
BZ_OUTBUFF_FULL
BZ_CONFIG_ERROR
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
L<IO::Compress::FAQ|IO::Compress::FAQ>
L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
L<Archive::Tar|Archive::Tar>,
L<IO::Zlib|IO::Zlib>
The primary site for the bzip2 program is L<http://www.bzip.org>.
See the module L<Compress::Bzip2|Compress::Bzip2>
=head1 AUTHOR
This module was written by Paul Marquess, C<pmqs@cpan.org>.
=head1 MODIFICATION HISTORY
See the Changes file.
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2005-2018 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
auto/Time/HiRes/HiRes.so 0000755 00000077250 15033552504 0011021 0 ustar 00 ELF >